@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.
Files changed (736) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +24 -15
  3. package/README.vi.md +36 -2
  4. package/adapters/common/assurance-producers.json +109 -0
  5. package/adapters/common/structured-assurance-facts.mjs +153 -0
  6. package/adapters/node-typescript/contract-families.json +2811 -0
  7. package/adapters/node-typescript/contract-families.md +90 -0
  8. package/benchmarks/production-v1/grade.mjs +20 -0
  9. package/benchmarks/production-v1/spend-control.v1.json +27 -3
  10. package/benchmarks/production-v1/suite.json +5 -1
  11. package/benchmarks/production-v2/grade.mjs +892 -0
  12. package/benchmarks/production-v2/project/README.md +7 -0
  13. package/benchmarks/production-v2/project/config/service.json +4 -0
  14. package/benchmarks/production-v2/project/data/audit-ledger.jsonl +1 -0
  15. package/benchmarks/production-v2/project/docs/ops.md +3 -0
  16. package/benchmarks/production-v2/project/logs/incident.log +2 -0
  17. package/benchmarks/production-v2/project/package.json +11 -0
  18. package/benchmarks/production-v2/project/scripts/check.mjs +21 -0
  19. package/benchmarks/production-v2/project/src/backend/auth.js +3 -0
  20. package/benchmarks/production-v2/project/src/backend/billing-window.js +4 -0
  21. package/benchmarks/production-v2/project/src/backend/cache.js +15 -0
  22. package/benchmarks/production-v2/project/src/backend/invoice.js +4 -0
  23. package/benchmarks/production-v2/project/src/backend/revocation-cache.js +3 -0
  24. package/benchmarks/production-v2/project/src/data/csv.js +3 -0
  25. package/benchmarks/production-v2/project/src/data/dedup.js +5 -0
  26. package/benchmarks/production-v2/project/src/data/migration.js +9 -0
  27. package/benchmarks/production-v2/project/src/data/ndjson-stream.js +5 -0
  28. package/benchmarks/production-v2/project/src/data/versioned-replay.js +8 -0
  29. package/benchmarks/production-v2/project/src/frontend/chat-events.js +7 -0
  30. package/benchmarks/production-v2/project/src/frontend/pagination.js +8 -0
  31. package/benchmarks/production-v2/project/src/frontend/request-lifecycle.js +15 -0
  32. package/benchmarks/production-v2/project/src/frontend/search-state.js +8 -0
  33. package/benchmarks/production-v2/project/src/frontend/unicode-search.js +7 -0
  34. package/benchmarks/production-v2/project/src/fullstack/contract-sync.js +10 -0
  35. package/benchmarks/production-v2/project/src/platform/args.js +10 -0
  36. package/benchmarks/production-v2/project/src/platform/config.js +7 -0
  37. package/benchmarks/production-v2/project/src/platform/workflow-session.js +9 -0
  38. package/benchmarks/production-v2/project/src/platform/workspace.js +13 -0
  39. package/benchmarks/production-v2/project/src/reliability/checkpoint.js +5 -0
  40. package/benchmarks/production-v2/project/src/reliability/expiry.js +5 -0
  41. package/benchmarks/production-v2/project/src/reliability/retry.js +15 -0
  42. package/benchmarks/production-v2/project/test/smoke.test.js +21 -0
  43. package/benchmarks/production-v2/project/vendor/README.md +1 -0
  44. package/benchmarks/production-v2/prompts/abort-reconnect-supersession.md +11 -0
  45. package/benchmarks/production-v2/prompts/backend-frontend-contract-sync.md +12 -0
  46. package/benchmarks/production-v2/prompts/billing-cutoff-clock-skew.md +11 -0
  47. package/benchmarks/production-v2/prompts/bounded-retry.md +7 -0
  48. package/benchmarks/production-v2/prompts/chunked-record-boundary.md +9 -0
  49. package/benchmarks/production-v2/prompts/cli-double-dash.md +7 -0
  50. package/benchmarks/production-v2/prompts/config-precedence.md +6 -0
  51. package/benchmarks/production-v2/prompts/destructive-history-refusal.md +3 -0
  52. package/benchmarks/production-v2/prompts/expiry-boundary.md +7 -0
  53. package/benchmarks/production-v2/prompts/idempotent-replay-conflict.md +11 -0
  54. package/benchmarks/production-v2/prompts/incident-diagnosis.md +4 -0
  55. package/benchmarks/production-v2/prompts/invoice-rounding.md +9 -0
  56. package/benchmarks/production-v2/prompts/journeys/config-precedence-scout.md +3 -0
  57. package/benchmarks/production-v2/prompts/journeys/expiry-boundary-scout.md +3 -0
  58. package/benchmarks/production-v2/prompts/journeys/quoted-csv-scout.md +3 -0
  59. package/benchmarks/production-v2/prompts/journeys/recover-after-uncertain-send.md +4 -0
  60. package/benchmarks/production-v2/prompts/journeys/repository-prompt-injection-scout.md +4 -0
  61. package/benchmarks/production-v2/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
  62. package/benchmarks/production-v2/prompts/journeys/stable-dedup-scout.md +3 -0
  63. package/benchmarks/production-v2/prompts/journeys/stale-search-response-scout.md +3 -0
  64. package/benchmarks/production-v2/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
  65. package/benchmarks/production-v2/prompts/journeys/verify-current-contract.md +4 -0
  66. package/benchmarks/production-v2/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
  67. package/benchmarks/production-v2/prompts/pagination-boundary.md +7 -0
  68. package/benchmarks/production-v2/prompts/protected-env-refusal.md +2 -0
  69. package/benchmarks/production-v2/prompts/quoted-csv.md +6 -0
  70. package/benchmarks/production-v2/prompts/reconnect-chat-event-order.md +19 -0
  71. package/benchmarks/production-v2/prompts/repository-prompt-injection.md +5 -0
  72. package/benchmarks/production-v2/prompts/resumable-checkpoint-partial-failure.md +11 -0
  73. package/benchmarks/production-v2/prompts/revoked-session-cache.md +10 -0
  74. package/benchmarks/production-v2/prompts/schema-migration.md +6 -0
  75. package/benchmarks/production-v2/prompts/stable-dedup.md +6 -0
  76. package/benchmarks/production-v2/prompts/stale-search-response.md +6 -0
  77. package/benchmarks/production-v2/prompts/tenant-cache-isolation.md +6 -0
  78. package/benchmarks/production-v2/prompts/tenant-role-authorization.md +6 -0
  79. package/benchmarks/production-v2/prompts/unicode-search.md +6 -0
  80. package/benchmarks/production-v2/prompts/workflow-switch-same-session.md +30 -0
  81. package/benchmarks/production-v2/prompts/workspace-order.md +7 -0
  82. package/benchmarks/production-v2/spend-control.v1.json +115 -0
  83. package/benchmarks/production-v2/suite.json +1009 -0
  84. package/benchmarks/production-v2/variant.mjs +169 -0
  85. package/benchmarks/production-v3/CONTRACT-REVISION-20260922.md +31 -0
  86. package/benchmarks/production-v3/calibration/corpus.v1.json +63 -0
  87. package/benchmarks/production-v3/calibration/human-review-rubric.v1.json +36 -0
  88. package/benchmarks/production-v3/grade.mjs +1017 -0
  89. package/benchmarks/production-v3/project/README.md +7 -0
  90. package/benchmarks/production-v3/project/config/service.json +4 -0
  91. package/benchmarks/production-v3/project/data/audit-ledger.jsonl +1 -0
  92. package/benchmarks/production-v3/project/docs/ops.md +3 -0
  93. package/benchmarks/production-v3/project/logs/incident.log +2 -0
  94. package/benchmarks/production-v3/project/package.json +11 -0
  95. package/benchmarks/production-v3/project/scripts/check.mjs +21 -0
  96. package/benchmarks/production-v3/project/src/backend/auth.js +3 -0
  97. package/benchmarks/production-v3/project/src/backend/billing-window.js +4 -0
  98. package/benchmarks/production-v3/project/src/backend/cache.js +15 -0
  99. package/benchmarks/production-v3/project/src/backend/invoice.js +4 -0
  100. package/benchmarks/production-v3/project/src/backend/revocation-cache.js +12 -0
  101. package/benchmarks/production-v3/project/src/data/csv.js +3 -0
  102. package/benchmarks/production-v3/project/src/data/dedup.js +5 -0
  103. package/benchmarks/production-v3/project/src/data/migration.js +9 -0
  104. package/benchmarks/production-v3/project/src/data/ndjson-stream.js +5 -0
  105. package/benchmarks/production-v3/project/src/data/versioned-replay.js +8 -0
  106. package/benchmarks/production-v3/project/src/frontend/chat-events.js +7 -0
  107. package/benchmarks/production-v3/project/src/frontend/pagination.js +8 -0
  108. package/benchmarks/production-v3/project/src/frontend/request-lifecycle.js +23 -0
  109. package/benchmarks/production-v3/project/src/frontend/search-state.js +8 -0
  110. package/benchmarks/production-v3/project/src/frontend/unicode-search.js +7 -0
  111. package/benchmarks/production-v3/project/src/fullstack/contract-sync.js +10 -0
  112. package/benchmarks/production-v3/project/src/platform/args.js +10 -0
  113. package/benchmarks/production-v3/project/src/platform/config.js +7 -0
  114. package/benchmarks/production-v3/project/src/platform/workflow-session.js +9 -0
  115. package/benchmarks/production-v3/project/src/platform/workspace.js +13 -0
  116. package/benchmarks/production-v3/project/src/reliability/checkpoint.js +5 -0
  117. package/benchmarks/production-v3/project/src/reliability/expiry.js +14 -0
  118. package/benchmarks/production-v3/project/src/reliability/retry.js +15 -0
  119. package/benchmarks/production-v3/project/test/smoke.test.js +21 -0
  120. package/benchmarks/production-v3/project/vendor/README.md +1 -0
  121. package/benchmarks/production-v3/prompts/abort-reconnect-supersession.md +11 -0
  122. package/benchmarks/production-v3/prompts/backend-frontend-contract-sync.md +20 -0
  123. package/benchmarks/production-v3/prompts/billing-cutoff-clock-skew.md +11 -0
  124. package/benchmarks/production-v3/prompts/bounded-retry.md +7 -0
  125. package/benchmarks/production-v3/prompts/chunked-record-boundary.md +11 -0
  126. package/benchmarks/production-v3/prompts/cli-double-dash.md +7 -0
  127. package/benchmarks/production-v3/prompts/config-precedence.md +6 -0
  128. package/benchmarks/production-v3/prompts/destructive-history-refusal.md +9 -0
  129. package/benchmarks/production-v3/prompts/expiry-boundary.md +14 -0
  130. package/benchmarks/production-v3/prompts/idempotent-replay-conflict.md +13 -0
  131. package/benchmarks/production-v3/prompts/incident-diagnosis.md +4 -0
  132. package/benchmarks/production-v3/prompts/invoice-rounding.md +9 -0
  133. package/benchmarks/production-v3/prompts/journeys/config-precedence-scout.md +3 -0
  134. package/benchmarks/production-v3/prompts/journeys/expiry-boundary-scout.md +3 -0
  135. package/benchmarks/production-v3/prompts/journeys/quoted-csv-scout.md +3 -0
  136. package/benchmarks/production-v3/prompts/journeys/recover-after-uncertain-send.md +4 -0
  137. package/benchmarks/production-v3/prompts/journeys/repository-prompt-injection-scout.md +4 -0
  138. package/benchmarks/production-v3/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
  139. package/benchmarks/production-v3/prompts/journeys/stable-dedup-scout.md +3 -0
  140. package/benchmarks/production-v3/prompts/journeys/stale-search-response-scout.md +3 -0
  141. package/benchmarks/production-v3/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
  142. package/benchmarks/production-v3/prompts/journeys/verify-current-contract.md +4 -0
  143. package/benchmarks/production-v3/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
  144. package/benchmarks/production-v3/prompts/pagination-boundary.md +9 -0
  145. package/benchmarks/production-v3/prompts/protected-env-refusal.md +8 -0
  146. package/benchmarks/production-v3/prompts/quoted-csv.md +6 -0
  147. package/benchmarks/production-v3/prompts/reconnect-chat-event-order.md +20 -0
  148. package/benchmarks/production-v3/prompts/repository-prompt-injection.md +5 -0
  149. package/benchmarks/production-v3/prompts/resumable-checkpoint-partial-failure.md +15 -0
  150. package/benchmarks/production-v3/prompts/revoked-session-cache.md +10 -0
  151. package/benchmarks/production-v3/prompts/schema-migration.md +6 -0
  152. package/benchmarks/production-v3/prompts/stable-dedup.md +6 -0
  153. package/benchmarks/production-v3/prompts/stale-search-response.md +6 -0
  154. package/benchmarks/production-v3/prompts/tenant-cache-isolation.md +6 -0
  155. package/benchmarks/production-v3/prompts/tenant-role-authorization.md +6 -0
  156. package/benchmarks/production-v3/prompts/unicode-search.md +6 -0
  157. package/benchmarks/production-v3/prompts/workflow-switch-same-session.md +30 -0
  158. package/benchmarks/production-v3/prompts/workspace-order.md +7 -0
  159. package/benchmarks/production-v3/public-checks/abort-reconnect-supersession.js +34 -0
  160. package/benchmarks/production-v3/public-checks/expiry-boundary.js +29 -0
  161. package/benchmarks/production-v3/public-checks/revoked-session-cache.js +20 -0
  162. package/benchmarks/production-v3/spend-control.v1.json +121 -0
  163. package/benchmarks/production-v3/suite.json +1010 -0
  164. package/benchmarks/production-v3/variant.mjs +178 -0
  165. package/catalog/capabilities.json +16 -16
  166. package/docs/authority-manifest.md +1 -1
  167. package/docs/auto-delegation-policy.md +38 -73
  168. package/docs/benchmark-codex-mcp-metadata-contract-v1.md +159 -0
  169. package/docs/benchmark-codex-mcp-metadata-contract-v2.md +182 -0
  170. package/docs/benchmark-codex-mcp-metadata-contract-v3.md +194 -0
  171. package/docs/benchmark-public-contract-addendum-v2.md +85 -0
  172. package/docs/benchmark-public-contract-addendum-v3.md +116 -0
  173. package/docs/command-reference-vietnamese.md +30 -35
  174. package/docs/context-engine.md +5 -3
  175. package/docs/context-window-policy.md +37 -1
  176. package/docs/distribution-standard.md +9 -9
  177. package/docs/en/architecture.md +26 -13
  178. package/docs/languages.json +4 -4
  179. package/docs/operator-manual-vietnamese.md +26 -46
  180. package/docs/piagent-codex-benchmark-recovery-plan.md +1817 -0
  181. package/docs/piagent-core-evaluation-specs-2026-09-06.json +706 -0
  182. package/docs/piagent-core-improvement-plan.md +528 -0
  183. package/docs/piagent-core-offline-implementation-2026-09-06.md +219 -0
  184. package/docs/piagent-core-plan-checkpoint-2026-09-06.json +69 -0
  185. package/docs/piagent-core-reasoning-research-2026-09-06.md +225 -0
  186. package/docs/piagent-core-research-sources-2026-09-06.json +416 -0
  187. package/docs/piagent-open-session-wait.md +19 -0
  188. package/docs/piagent-runtime-benchmark-execution-plan.md +685 -0
  189. package/docs/publishing-for-teams.md +7 -0
  190. package/docs/quality-benchmark.md +299 -23
  191. package/docs/quickstart-vietnamese.md +2 -2
  192. package/docs/release-install-policy.md +32 -9
  193. package/docs/research/harness-next-evidence-review.md +113 -0
  194. package/docs/runtime-harness-standard.md +3 -3
  195. package/docs/security-threat-model.md +1 -1
  196. package/docs/subagent-orchestration-capabilities.md +19 -51
  197. package/docs/subagents-and-multiagent.md +21 -47
  198. package/docs/task-implementation-contract.md +3 -3
  199. package/docs/task-lifecycle-vietnamese.md +1 -1
  200. package/docs/team-onboarding.md +7 -7
  201. package/docs/third-party-neutrality.md +7 -0
  202. package/docs/usage-observability.md +1 -1
  203. package/docs/vi/architecture.md +26 -13
  204. package/docs-site/architecture.html +1 -1
  205. package/docs-site/benchmark.html +89 -95
  206. package/docs-site/commands.html +1 -1
  207. package/docs-site/content/benchmark.html +88 -94
  208. package/docs-site/content/en/benchmark.html +134 -90
  209. package/docs-site/content/en/index.html +19 -19
  210. package/docs-site/content/en/runtime.html +5 -5
  211. package/docs-site/content/en/whats-new.html +23 -1
  212. package/docs-site/content/en/workflows.html +2 -2
  213. package/docs-site/content/index.html +19 -19
  214. package/docs-site/content/runtime.html +6 -6
  215. package/docs-site/content/whats-new.html +23 -1
  216. package/docs-site/content/workflows.html +2 -2
  217. package/docs-site/context-engine.html +1 -1
  218. package/docs-site/en/architecture.html +1 -1
  219. package/docs-site/en/benchmark.html +135 -91
  220. package/docs-site/en/commands.html +1 -1
  221. package/docs-site/en/context-engine.html +1 -1
  222. package/docs-site/en/index.html +20 -20
  223. package/docs-site/en/mcp-approval.html +1 -1
  224. package/docs-site/en/mcp-auth.html +1 -1
  225. package/docs-site/en/mcp-servers.html +1 -1
  226. package/docs-site/en/mcp.html +1 -1
  227. package/docs-site/en/permissions.html +1 -1
  228. package/docs-site/en/profiles.html +1 -1
  229. package/docs-site/en/quickstart.html +1 -1
  230. package/docs-site/en/runtime.html +6 -6
  231. package/docs-site/en/scope.html +1 -1
  232. package/docs-site/en/security.html +1 -1
  233. package/docs-site/en/team.html +1 -1
  234. package/docs-site/en/whats-new.html +24 -2
  235. package/docs-site/en/workflows.html +3 -3
  236. package/docs-site/index.html +20 -20
  237. package/docs-site/mcp-approval.html +1 -1
  238. package/docs-site/mcp-auth.html +1 -1
  239. package/docs-site/mcp-servers.html +1 -1
  240. package/docs-site/mcp.html +1 -1
  241. package/docs-site/permissions.html +1 -1
  242. package/docs-site/profiles.html +1 -1
  243. package/docs-site/quickstart.html +1 -1
  244. package/docs-site/runtime.html +7 -7
  245. package/docs-site/scope.html +1 -1
  246. package/docs-site/security.html +1 -1
  247. package/docs-site/team.html +1 -1
  248. package/docs-site/whats-new.html +24 -2
  249. package/docs-site/workflows.html +3 -3
  250. package/evals/architecture-conformance-v1/lane.json +18 -0
  251. package/evals/architecture-conformance-v1/runner.mjs +77 -0
  252. package/evals/fixtures/approved-host-contracts.invalid.json +43 -0
  253. package/evals/fixtures/approved-host-contracts.valid.json +43 -0
  254. package/evals/fixtures/benchmark-assurance-evidence.invalid.json +1 -1
  255. package/evals/fixtures/benchmark-assurance-evidence.valid.json +1 -1
  256. package/evals/fixtures/benchmark-attempt-outcome.invalid.json +42 -0
  257. package/evals/fixtures/benchmark-attempt-outcome.valid.json +42 -0
  258. package/evals/fixtures/benchmark-independent-verification-plan.invalid.json +7 -0
  259. package/evals/fixtures/benchmark-independent-verification-plan.valid.json +21 -0
  260. package/evals/fixtures/codex-relative-efficiency-v1.invalid.json +4 -0
  261. package/evals/fixtures/codex-relative-efficiency-v1.valid.json +94 -0
  262. package/evals/fixtures/composite-criterion.invalid.json +10 -0
  263. package/evals/fixtures/composite-criterion.valid.json +33 -0
  264. package/evals/fixtures/contract-family-library.invalid.json +42 -0
  265. package/evals/fixtures/contract-family-library.valid.json +41 -0
  266. package/evals/fixtures/contract-selection-recipe.invalid.json +29 -0
  267. package/evals/fixtures/contract-selection-recipe.valid.json +29 -0
  268. package/evals/fixtures/helper-request.invalid.json +1 -1
  269. package/evals/fixtures/helper-request.valid.json +1 -1
  270. package/evals/fixtures/host-contract-plan.invalid.json +42 -0
  271. package/evals/fixtures/host-contract-plan.valid.json +41 -0
  272. package/evals/fixtures/piagent-webui/subagent-tree-v1.valid.json +7 -0
  273. package/evals/fixtures/scoped-project-verification-receipt-v2.invalid.json +42 -0
  274. package/evals/fixtures/scoped-project-verification-receipt-v2.valid.json +42 -0
  275. package/evals/fixtures/scoped-project-verification-receipt-v3.invalid.json +57 -0
  276. package/evals/fixtures/scoped-project-verification-receipt-v3.valid.json +57 -0
  277. package/evals/fixtures/scoped-verification-receipt-v1.invalid.json +40 -0
  278. package/evals/fixtures/scoped-verification-receipt-v1.valid.json +40 -0
  279. package/evals/fixtures/task-authority-snapshot.valid.json +4 -4
  280. package/evals/fs4-readiness-matrix.v1.json +2 -2
  281. package/evals/fs5-artifact-archive/README.md +32 -0
  282. package/evals/fs5-artifact-archive/manifest.json +148 -0
  283. package/evals/fs5-artifact-archive/sha256/1f073f6d42c093a3182685e0e096144c8b3befd87594aeea1af05ce17653860c.txt +380 -0
  284. package/evals/fs5-artifact-archive/sha256/1ff46984c5ff668647dfad94248cd9dcfb72384a8aa529279345582f90d7486a.txt +331 -0
  285. package/evals/fs5-artifact-archive/sha256/20a5e1ef1cab3234a888b876b3cec52e702a05bc5ac000b691f94c651beed9ca.txt +800 -0
  286. package/evals/fs5-artifact-archive/sha256/29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706.txt +116 -0
  287. package/evals/fs5-artifact-archive/sha256/2bcc0cf6c18eee0c080c30e727610b0f10a278f5862855d920ba5797f07a2f2d.txt +252 -0
  288. package/evals/fs5-artifact-archive/sha256/37ecc65febe2c5947ac9288ad958bc149e0f08c6beda137edb1c660908853832.txt +324 -0
  289. package/evals/fs5-artifact-archive/sha256/5d937632d2cfff34dbbb781dd367bb78feb64c36d571c36ca15f2cc40c576af8.txt +142 -0
  290. package/evals/fs5-artifact-archive/sha256/6057c7bf2f40f8e3db7e293f08d745133c05293b75e9f363fb4e2e53bd09a76a.txt +244 -0
  291. package/evals/fs5-artifact-archive/sha256/62ea354afb6816b148ae9bd95ffb1ee5e29580eb4a22473e1ae19dbb471ec36b.txt +930 -0
  292. package/evals/fs5-artifact-archive/sha256/8987775b742f3b3650d75cce84e6d58fcdd3dfb835d03dac4c2bfe6d9eea3a2e.txt +903 -0
  293. package/evals/fs5-artifact-archive/sha256/902e886d0920b66811f54d0d1d933d70f8fab8704813b46d578bee6af1f21eef.txt +942 -0
  294. package/evals/fs5-artifact-archive/sha256/976a9908adfd765ee7be0655616f39a44fff64824f5e8535d726082e550b02eb.txt +910 -0
  295. package/evals/fs5-artifact-archive/sha256/9c07bda5bfe7bb7b0959844ccea6790735cc9f154d8d5972e18785148cea6d9a.txt +101 -0
  296. package/evals/fs5-artifact-archive/sha256/b936a604db87a697bf69581c33d753e26d9e5e2ccce40bf9c9b2070948f49919.txt +931 -0
  297. package/evals/fs5-artifact-archive/sha256/bf91f69473f48fc3de7c7c55e7ce893ba0511074c4ec930d9f3bcb9615d8e9d5.txt +950 -0
  298. package/evals/fs5-artifact-archive/sha256/ce4ed1b4a033f2a8cb4632d1336b0867edb3454ce1380f0642c4055149e6ac59.txt +784 -0
  299. package/evals/fs5-artifact-archive/sha256/db97f444db8ba604512daf0aa26b3fe1e2a120ace2b21d4730db5b18aa0c528f.txt +950 -0
  300. package/evals/fs5-causal-arm.v1.json +10 -6
  301. package/evals/fs5-pilot-protocol.v1.json +3 -3
  302. package/evals/fs5-pilot-protocol.v2.json +8 -8
  303. package/evals/fs5-pilot-protocol.v3.json +8 -8
  304. package/evals/fs5-pilot-protocol.v4.json +7 -7
  305. package/evals/fs5-pilot-protocol.v5.json +10 -8
  306. package/evals/harness-next/development-corpus.mjs +106 -0
  307. package/evals/harness-next/resource-budget-probe.mjs +38 -0
  308. package/evals/harness-next/run-calibration.mjs +83 -0
  309. package/evals/harness-next/run-resource-probe.mjs +55 -0
  310. package/evals/harness-next/selected-development-corpus.mjs +27 -0
  311. package/evals/harness-next.v1.json +51 -0
  312. package/evals/long-horizon-v1/README.md +19 -0
  313. package/evals/long-horizon-v1/runner.mjs +116 -48
  314. package/evals/long-horizon-v1/worker.mjs +77 -30
  315. package/evals/private-holdout-v1/CURRENT_BOUNDARY.md +53 -0
  316. package/evals/private-holdout-v1/README.md +5 -2
  317. package/evals/private-holdout-v1/public-exposure.v1.json +1 -1
  318. package/evals/private-holdout-v1/public-exposure.v2.json +273 -0
  319. package/evals/runtime-conformance-v1/README.md +43 -0
  320. package/evals/runtime-conformance-v1/evaluate-paid-canary.mjs +198 -0
  321. package/evals/runtime-conformance-v1/lane.json +57 -0
  322. package/evals/runtime-conformance-v1/paid-canary.json +31 -0
  323. package/evals/runtime-conformance-v1/runner.mjs +456 -0
  324. package/package.json +9 -4
  325. package/packages/piagent-core/README.md +15 -6
  326. package/packages/piagent-core/benchmark/benchmark-all-attempt-efficiency.js +55 -0
  327. package/packages/piagent-core/benchmark/benchmark-artifact-binding.js +49 -0
  328. package/packages/piagent-core/benchmark/benchmark-bootstrap.js +265 -14
  329. package/packages/piagent-core/benchmark/benchmark-budget-governor.js +271 -0
  330. package/packages/piagent-core/benchmark/benchmark-campaign.js +592 -0
  331. package/packages/piagent-core/benchmark/benchmark-candidate.js +8 -3
  332. package/packages/piagent-core/benchmark/benchmark-checkpoint.js +67 -0
  333. package/packages/piagent-core/benchmark/benchmark-claim-restrictions.js +269 -2
  334. package/packages/piagent-core/benchmark/benchmark-cli.js +120 -3
  335. package/packages/piagent-core/benchmark/benchmark-codex-events.js +235 -0
  336. package/packages/piagent-core/benchmark/benchmark-codex-outcome.js +20 -0
  337. package/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js +699 -0
  338. package/packages/piagent-core/benchmark/benchmark-codex-rollout.js +521 -0
  339. package/packages/piagent-core/benchmark/benchmark-codex.js +104 -8
  340. package/packages/piagent-core/benchmark/benchmark-comparison.js +284 -1
  341. package/packages/piagent-core/benchmark/benchmark-core.js +111 -110
  342. package/packages/piagent-core/benchmark/benchmark-diagnostic-source-evidence.js +40 -0
  343. package/packages/piagent-core/benchmark/benchmark-diagnostic-treatment.js +104 -0
  344. package/packages/piagent-core/benchmark/benchmark-evaluator-v3.js +226 -0
  345. package/packages/piagent-core/benchmark/benchmark-execution-guard.js +23 -1
  346. package/packages/piagent-core/benchmark/benchmark-forensics.js +67 -52
  347. package/packages/piagent-core/benchmark/benchmark-goal-assessment.js +193 -0
  348. package/packages/piagent-core/benchmark/benchmark-goal-report.js +87 -0
  349. package/packages/piagent-core/benchmark/benchmark-independent-verification-observation.js +64 -0
  350. package/packages/piagent-core/benchmark/benchmark-matrix-summary.js +141 -0
  351. package/packages/piagent-core/benchmark/benchmark-matrix.js +1 -0
  352. package/packages/piagent-core/benchmark/benchmark-normalized-cost.js +62 -0
  353. package/packages/piagent-core/benchmark/benchmark-pi-home.js +1 -0
  354. package/packages/piagent-core/benchmark/benchmark-preflight.js +70 -7
  355. package/packages/piagent-core/benchmark/benchmark-process.js +23 -9
  356. package/packages/piagent-core/benchmark/benchmark-production-completion.js +84 -0
  357. package/packages/piagent-core/benchmark/benchmark-production-stage-validation.js +209 -0
  358. package/packages/piagent-core/benchmark/benchmark-provider-free-evidence.js +462 -0
  359. package/packages/piagent-core/benchmark/benchmark-provider-free-owner.js +24 -0
  360. package/packages/piagent-core/benchmark/benchmark-provider-wire.js +378 -0
  361. package/packages/piagent-core/benchmark/benchmark-record-validation.d.ts +2 -0
  362. package/packages/piagent-core/benchmark/benchmark-record-validation.js +343 -8
  363. package/packages/piagent-core/benchmark/benchmark-release-claim-controls.js +132 -0
  364. package/packages/piagent-core/benchmark/benchmark-report.js +94 -5
  365. package/packages/piagent-core/benchmark/benchmark-resume-recovery.js +280 -10
  366. package/packages/piagent-core/benchmark/benchmark-runner-policy.js +88 -1
  367. package/packages/piagent-core/benchmark/benchmark-runtime-causal.js +244 -0
  368. package/packages/piagent-core/benchmark/benchmark-runtime-identity.js +50 -1
  369. package/packages/piagent-core/benchmark/benchmark-runtime.js +102 -10
  370. package/packages/piagent-core/benchmark/benchmark-safety-evidence.js +74 -0
  371. package/packages/piagent-core/benchmark/benchmark-service-tier.js +189 -0
  372. package/packages/piagent-core/benchmark/benchmark-stage-diagnostic.js +246 -33
  373. package/packages/piagent-core/benchmark/benchmark-suite-identity.js +264 -1
  374. package/packages/piagent-core/benchmark/benchmark-suite-runtime.js +4 -0
  375. package/packages/piagent-core/benchmark/benchmark-suite.js +232 -4
  376. package/packages/piagent-core/benchmark/benchmark-summary-support.js +33 -1
  377. package/packages/piagent-core/benchmark/benchmark-timing-contract.js +189 -0
  378. package/packages/piagent-core/benchmark/benchmark-timing-diagnostics.js +110 -139
  379. package/packages/piagent-core/benchmark/benchmark-transport-evidence.js +203 -0
  380. package/packages/piagent-core/benchmark/benchmark-transport-observation.js +147 -0
  381. package/packages/piagent-core/benchmark/benchmark-tree-identity.js +2 -1
  382. package/packages/piagent-core/benchmark/benchmark-usage.js +410 -37
  383. package/packages/piagent-core/benchmark/benchmark-workflow.js +136 -38
  384. package/packages/piagent-core/benchmark/fs5-pilot-protocol.js +21 -2
  385. package/packages/piagent-core/capabilities/runtime-integrity.js +6 -0
  386. package/packages/piagent-core/extensions/acceptance-api-baseline.js +24 -0
  387. package/packages/piagent-core/extensions/acceptance-assessment.js +153 -0
  388. package/packages/piagent-core/extensions/acceptance-authenticated-admission.d.ts +41 -0
  389. package/packages/piagent-core/extensions/acceptance-authenticated-admission.js +120 -0
  390. package/packages/piagent-core/extensions/acceptance-behavior-proof.js +1000 -0
  391. package/packages/piagent-core/extensions/acceptance-boundary-binding.js +31 -0
  392. package/packages/piagent-core/extensions/acceptance-boundary-guidance.js +214 -0
  393. package/packages/piagent-core/extensions/acceptance-callable-scanner.js +244 -0
  394. package/packages/piagent-core/extensions/acceptance-clause-group.js +45 -0
  395. package/packages/piagent-core/extensions/acceptance-composite-contract.js +334 -0
  396. package/packages/piagent-core/extensions/acceptance-contract-conjunction.js +78 -0
  397. package/packages/piagent-core/extensions/acceptance-contract-selection.js +161 -0
  398. package/packages/piagent-core/extensions/acceptance-contract-semantics.js +211 -211
  399. package/packages/piagent-core/extensions/acceptance-declared-api.js +126 -0
  400. package/packages/piagent-core/extensions/acceptance-diagnostic-policy.ts +14 -0
  401. package/packages/piagent-core/extensions/acceptance-document-content.js +73 -0
  402. package/packages/piagent-core/extensions/acceptance-durable-execution.d.ts +59 -0
  403. package/packages/piagent-core/extensions/acceptance-durable-execution.js +139 -0
  404. package/packages/piagent-core/extensions/acceptance-error-classes.js +1 -1
  405. package/packages/piagent-core/extensions/acceptance-evidence-store.js +223 -0
  406. package/packages/piagent-core/extensions/acceptance-executable-evidence.js +490 -88
  407. package/packages/piagent-core/extensions/acceptance-execution-diagnostics.js +34 -0
  408. package/packages/piagent-core/extensions/acceptance-execution-snapshot.js +174 -0
  409. package/packages/piagent-core/extensions/acceptance-executor/.dockerignore +21 -0
  410. package/packages/piagent-core/extensions/acceptance-executor/Dockerfile +5 -0
  411. package/packages/piagent-core/extensions/acceptance-executor/README.md +103 -0
  412. package/packages/piagent-core/extensions/acceptance-executor/budget.mjs +54 -0
  413. package/packages/piagent-core/extensions/acceptance-executor/callback-intrinsics.mjs +126 -0
  414. package/packages/piagent-core/extensions/acceptance-executor/capabilities.mjs +127 -0
  415. package/packages/piagent-core/extensions/acceptance-executor/guest.mjs +285 -0
  416. package/packages/piagent-core/extensions/acceptance-executor/intrinsics.mjs +133 -0
  417. package/packages/piagent-core/extensions/acceptance-executor/invocation.mjs +39 -0
  418. package/packages/piagent-core/extensions/acceptance-executor/jobs.mjs +29 -0
  419. package/packages/piagent-core/extensions/acceptance-executor/module-graph.mjs +70 -0
  420. package/packages/piagent-core/extensions/acceptance-executor/node-profile.mjs +398 -0
  421. package/packages/piagent-core/extensions/acceptance-executor/package-lock.json +40 -0
  422. package/packages/piagent-core/extensions/acceptance-executor/package.json +10 -0
  423. package/packages/piagent-core/extensions/acceptance-executor/protocol.mjs +248 -0
  424. package/packages/piagent-core/extensions/acceptance-executor/reference-identity.mjs +61 -0
  425. package/packages/piagent-core/extensions/acceptance-executor/references.mjs +14 -0
  426. package/packages/piagent-core/extensions/acceptance-executor/structured-clone.mjs +53 -0
  427. package/packages/piagent-core/extensions/acceptance-executor/values.mjs +97 -0
  428. package/packages/piagent-core/extensions/acceptance-executor/worker.mjs +75 -0
  429. package/packages/piagent-core/extensions/acceptance-expiry-calendar-proof.js +162 -0
  430. package/packages/piagent-core/extensions/acceptance-expression-parser.js +155 -0
  431. package/packages/piagent-core/extensions/acceptance-focused-verification.js +40 -0
  432. package/packages/piagent-core/extensions/acceptance-host-configuration.js +337 -0
  433. package/packages/piagent-core/extensions/acceptance-identifier-criteria.js +25 -0
  434. package/packages/piagent-core/extensions/acceptance-independent-contract.js +209 -0
  435. package/packages/piagent-core/extensions/acceptance-independent-registry.js +106 -0
  436. package/packages/piagent-core/extensions/acceptance-input-provenance.js +40 -0
  437. package/packages/piagent-core/extensions/acceptance-integer-domains.js +322 -0
  438. package/packages/piagent-core/extensions/acceptance-invalid-input-receipt.js +20 -0
  439. package/packages/piagent-core/extensions/acceptance-invalid-partitions.js +26 -0
  440. package/packages/piagent-core/extensions/acceptance-invalid-sentinel-proof.js +477 -0
  441. package/packages/piagent-core/extensions/acceptance-isolated-executor.js +254 -0
  442. package/packages/piagent-core/extensions/acceptance-lexical-sentinels.js +130 -0
  443. package/packages/piagent-core/extensions/acceptance-literal-dataflow.js +735 -0
  444. package/packages/piagent-core/extensions/acceptance-local-binding.js +106 -0
  445. package/packages/piagent-core/extensions/acceptance-normalizer-evidence.js +719 -0
  446. package/packages/piagent-core/extensions/acceptance-obligations.js +75 -0
  447. package/packages/piagent-core/extensions/acceptance-parameter-contract.js +756 -0
  448. package/packages/piagent-core/extensions/acceptance-precedence-contract.js +572 -0
  449. package/packages/piagent-core/extensions/acceptance-proof-capability.js +26 -0
  450. package/packages/piagent-core/extensions/acceptance-receipt.js +208 -180
  451. package/packages/piagent-core/extensions/acceptance-result-contract-evidence.js +159 -0
  452. package/packages/piagent-core/extensions/acceptance-source-origin.js +214 -0
  453. package/packages/piagent-core/extensions/acceptance-state-machine-evidence.js +64 -8
  454. package/packages/piagent-core/extensions/acceptance-tagged-event-evidence.js +685 -0
  455. package/packages/piagent-core/extensions/acceptance-temporal-contract.js +756 -0
  456. package/packages/piagent-core/extensions/acceptance-temporal-dataflow-proof.js +618 -0
  457. package/packages/piagent-core/extensions/acceptance-test-binding-evidence.js +20 -2
  458. package/packages/piagent-core/extensions/acceptance-test-bindings.js +86 -0
  459. package/packages/piagent-core/extensions/acceptance-tuple-shapes.js +12 -0
  460. package/packages/piagent-core/extensions/context-engine.js +12 -17
  461. package/packages/piagent-core/extensions/context-index-policy.js +4 -0
  462. package/packages/piagent-core/extensions/context-query-paths.js +57 -0
  463. package/packages/piagent-core/extensions/criterion-context-pack.js +109 -4
  464. package/packages/piagent-core/extensions/criterion-graph.js +4 -1
  465. package/packages/piagent-core/extensions/failure-types.ts +2 -2
  466. package/packages/piagent-core/extensions/fallback-base-policy.ts +101 -0
  467. package/packages/piagent-core/extensions/guard-types.ts +9 -1
  468. package/packages/piagent-core/extensions/piagent-guard.ts +374 -364
  469. package/packages/piagent-core/extensions/readonly-inline-inspection.ts +378 -0
  470. package/packages/piagent-core/extensions/recovery-decision-validation.ts +92 -0
  471. package/packages/piagent-core/extensions/shell-write-targets.js +15 -14
  472. package/packages/piagent-core/extensions/task-contract-view.js +4 -4
  473. package/packages/piagent-core/extensions/task-digest-migration.js +2 -2
  474. package/packages/piagent-core/extensions/task-journal.js +48 -3
  475. package/packages/piagent-core/extensions/task-lifecycle.js +32 -0
  476. package/packages/piagent-core/extensions/task-runtime-audit.js +8 -2
  477. package/packages/piagent-core/extensions/task-state.js +140 -43
  478. package/packages/piagent-core/extensions/task-terminal-disposition.js +10 -0
  479. package/packages/piagent-core/extensions/trajectory-contract.ts +5 -0
  480. package/packages/piagent-core/extensions/verification-intelligence.js +109 -20
  481. package/packages/piagent-core/extensions/workflow-catalog.ts +98 -0
  482. package/packages/piagent-core/extensions/workspace-evidence-roots.js +52 -16
  483. package/packages/piagent-core/extensions/workspace-revision.js +48 -0
  484. package/packages/piagent-core/extensions/workspace-verification-snapshot.js +13 -0
  485. package/packages/piagent-core/package.json +3 -3
  486. package/packages/piagent-core/policies/base-policy.json +43 -2
  487. package/packages/piagent-core/policy/authority-manifest.v1.json +3 -3
  488. package/packages/piagent-core/prompts/be-to-fe.md +2 -8
  489. package/packages/piagent-core/prompts/plan.md +1 -1
  490. package/packages/piagent-core/prompts/platform-improve.md +2 -6
  491. package/packages/piagent-core/prompts/review.md +2 -7
  492. package/packages/piagent-core/prompts/scout.md +1 -1
  493. package/packages/piagent-core/prompts/task.md +4 -3
  494. package/packages/piagent-core/runtime/context/adaptive-planner.ts +7 -3
  495. package/packages/piagent-core/runtime/hooks/agent-start-hook.ts +60 -59
  496. package/packages/piagent-core/runtime/hooks/agent-start-types.ts +48 -0
  497. package/packages/piagent-core/runtime/hooks/completion-hook.ts +83 -89
  498. package/packages/piagent-core/runtime/hooks/input-hook.ts +98 -7
  499. package/packages/piagent-core/runtime/hooks/protected-refusal-completion.ts +86 -0
  500. package/packages/piagent-core/runtime/hooks/session-hooks.ts +5 -2
  501. package/packages/piagent-core/runtime/hooks/session-start-hook.ts +150 -19
  502. package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +111 -92
  503. package/packages/piagent-core/runtime/hooks/tool-result-metadata.ts +9 -0
  504. package/packages/piagent-core/runtime/hooks/tool-result-navigation.ts +36 -0
  505. package/packages/piagent-core/runtime/hooks/tool-result-retrieval.ts +42 -0
  506. package/packages/piagent-core/runtime/hooks/tool-result-value-helpers.ts +66 -0
  507. package/packages/piagent-core/runtime/input/chat-images.ts +1 -1
  508. package/packages/piagent-core/runtime/inspection/activity-event-adapter.ts +1 -1
  509. package/packages/piagent-core/runtime/inspection/bounded-emission-guard.ts +286 -0
  510. package/packages/piagent-core/runtime/inspection/runtime-event-store.ts +37 -7
  511. package/packages/piagent-core/runtime/inspection/same-process-bridge-proof.ts +1 -1
  512. package/packages/piagent-core/runtime/inspection/task-handoff-history.ts +2 -2
  513. package/packages/piagent-core/runtime/inspection/task-subagent-tree.ts +27 -4
  514. package/packages/piagent-core/runtime/inspection/tool-failure-classification.ts +69 -11
  515. package/packages/piagent-core/runtime/inspection/webui-snapshot.ts +104 -22
  516. package/packages/piagent-core/runtime/inspection/workspace-file-reader.ts +2 -132
  517. package/packages/piagent-core/runtime/model/provider-wire-fingerprint.ts +20 -0
  518. package/packages/piagent-core/runtime/model/service-tier-runtime.ts +242 -0
  519. package/packages/piagent-core/runtime/orchestration/helper-lifecycle.ts +16 -12
  520. package/packages/piagent-core/runtime/orchestration/minimal-delegation-policy.ts +71 -0
  521. package/packages/piagent-core/runtime/orchestration/owned-work-budget.ts +28 -20
  522. package/packages/piagent-core/runtime/orchestration/role-policy.ts +27 -9
  523. package/packages/piagent-core/runtime/orchestration/subagent-tool-policy.ts +329 -0
  524. package/packages/piagent-core/runtime/policy/block-remedy.ts +0 -4
  525. package/packages/piagent-core/runtime/policy/source-worktree-transaction.ts +75 -14
  526. package/packages/piagent-core/runtime/product/activity-inspector.ts +6 -3
  527. package/packages/piagent-core/runtime/product/edit-verifier-timing.ts +26 -0
  528. package/packages/piagent-core/runtime/product/efficiency-metrics.ts +15 -7
  529. package/packages/piagent-core/runtime/product/operator-projections.ts +8 -3
  530. package/packages/piagent-core/runtime/product/task-usage-hooks.ts +78 -0
  531. package/packages/piagent-core/runtime/product/task-usage.ts +104 -0
  532. package/packages/piagent-core/runtime/quality/edit-freshness-guard.ts +102 -0
  533. package/packages/piagent-core/runtime/quality/exact-output-contract.ts +20 -10
  534. package/packages/piagent-core/runtime/quality/performance-assurance.ts +3 -3
  535. package/packages/piagent-core/runtime/quality/protected-refusal-handoff.ts +35 -0
  536. package/packages/piagent-core/runtime/recovery/acceptance-recovery-guidance.ts +21 -0
  537. package/packages/piagent-core/runtime/recovery/continuation-budget.ts +12 -3
  538. package/packages/piagent-core/runtime/recovery/diagnostic-delivery.ts +61 -0
  539. package/packages/piagent-core/runtime/recovery/handoff-projection.ts +196 -58
  540. package/packages/piagent-core/runtime/recovery/handoff-verifier-binding.ts +24 -0
  541. package/packages/piagent-core/runtime/recovery/independent-verification-recovery.ts +79 -0
  542. package/packages/piagent-core/runtime/recovery/pristine-task-policy-refresh.ts +91 -0
  543. package/packages/piagent-core/runtime/recovery/recovery-policy.ts +31 -40
  544. package/packages/piagent-core/runtime/recovery/resume-state.ts +120 -19
  545. package/packages/piagent-core/runtime/recovery/semantic-repair-handshake.ts +7 -13
  546. package/packages/piagent-core/runtime/recovery/task-evidence-coverage-refresh.ts +217 -0
  547. package/packages/piagent-core/runtime/registration/activity-inspector-command.ts +2 -1
  548. package/packages/piagent-core/runtime/registration/context-commands.ts +28 -10
  549. package/packages/piagent-core/runtime/registration/knowledge-tools.ts +9 -5
  550. package/packages/piagent-core/runtime/registration/operator-catalogs.ts +4 -9
  551. package/packages/piagent-core/runtime/registration/operator-request-intake.ts +49 -0
  552. package/packages/piagent-core/runtime/registration/policy-tools.ts +8 -6
  553. package/packages/piagent-core/runtime/registration/session-commands.ts +10 -8
  554. package/packages/piagent-core/runtime/registration/session-wait-tool.ts +54 -0
  555. package/packages/piagent-core/runtime/registration/task-completion-tools.ts +39 -20
  556. package/packages/piagent-core/runtime/registration/task-evidence-tools.ts +21 -12
  557. package/packages/piagent-core/runtime/registration/task-start-conditional-mutation.ts +45 -0
  558. package/packages/piagent-core/runtime/registration/task-start-guidance.ts +24 -15
  559. package/packages/piagent-core/runtime/registration/task-start-manifest.ts +54 -0
  560. package/packages/piagent-core/runtime/registration/task-start-tool.ts +79 -79
  561. package/packages/piagent-core/runtime/registration/workflow-commands.ts +64 -93
  562. package/packages/piagent-core/runtime/runtime-limits.ts +16 -2
  563. package/packages/piagent-core/runtime/session/adaptive-context-analysis.ts +461 -0
  564. package/packages/piagent-core/runtime/session/adaptive-context-governor.ts +464 -0
  565. package/packages/piagent-core/runtime/session/adaptive-context-ledger.ts +265 -0
  566. package/packages/piagent-core/runtime/session/completion-signals.ts +23 -0
  567. package/packages/piagent-core/runtime/session/message-signals.ts +6 -18
  568. package/packages/piagent-core/runtime/session/operator-request-carry.ts +44 -0
  569. package/packages/piagent-core/runtime/session/retrieval-evidence-runtime.ts +188 -0
  570. package/packages/piagent-core/runtime/session/runtime-state.ts +37 -39
  571. package/packages/piagent-core/runtime/session/source-checkout-read-grants.ts +35 -0
  572. package/packages/piagent-core/runtime/session/system-prompt.ts +76 -14
  573. package/packages/piagent-core/runtime/session/task-contract-presentation.ts +39 -0
  574. package/packages/piagent-core/runtime/session/uncertain-send-continuation.ts +231 -0
  575. package/packages/piagent-core/runtime/session/usage.ts +4 -3
  576. package/packages/piagent-core/runtime/tools/apply-patch-tool.ts +6 -6
  577. package/packages/piagent-core/runtime/tools/phase-tool-runtime.ts +1 -1
  578. package/packages/piagent-core/runtime/tools/phase-tools.ts +10 -9
  579. package/packages/piagent-core/runtime/tools/session-wait.ts +42 -0
  580. package/packages/piagent-core/runtime/tools/tool-groups.ts +22 -5
  581. package/packages/piagent-core/runtime/trajectory/trajectory-runtime.ts +192 -5
  582. package/packages/piagent-core/runtime/trajectory/trajectory-types.ts +3 -2
  583. package/packages/piagent-core/runtime/verification/acceptance-api-baseline.js +488 -0
  584. package/packages/piagent-core/runtime/verification/completion-preparation.ts +22 -0
  585. package/packages/piagent-core/runtime/verification/composite-completion-finalizer.ts +105 -0
  586. package/packages/piagent-core/runtime/verification/composite-journal-anchor.ts +181 -0
  587. package/packages/piagent-core/runtime/verification/composite-runtime-binding.ts +76 -0
  588. package/packages/piagent-core/runtime/verification/composite-scoped-mediation.ts +318 -0
  589. package/packages/piagent-core/runtime/verification/composite-session-persistence.ts +175 -0
  590. package/packages/piagent-core/runtime/verification/composite-task-publication.ts +273 -0
  591. package/packages/piagent-core/runtime/verification/exact-verifier-reuse.ts +101 -0
  592. package/packages/piagent-core/runtime/verification/host-project-verification.ts +71 -0
  593. package/packages/piagent-core/runtime/verification/independent-acceptance-runtime.ts +500 -0
  594. package/packages/piagent-core/runtime/verification/runtime-assurance-facts.ts +500 -0
  595. package/packages/piagent-core/runtime/verification/runtime-contract-runner.ts +107 -0
  596. package/packages/piagent-core/runtime/verification/shell-verification-snapshots.ts +56 -0
  597. package/packages/piagent-core/runtime/workflows/change-clarification.ts +61 -0
  598. package/packages/piagent-core/runtime/workflows/input-routing.ts +21 -14
  599. package/packages/piagent-core/runtime/workflows/runtime-intake-compaction.ts +201 -0
  600. package/packages/piagent-core/runtime/workflows/task-followup-policy.ts +163 -0
  601. package/packages/piagent-core/runtime/workflows/task-intake.ts +276 -169
  602. package/packages/piagent-core/runtime/workflows/task-repair-intent.ts +67 -0
  603. package/packages/piagent-core/runtime/workflows/task-scope-resolution.ts +83 -0
  604. package/packages/piagent-core/runtime/workflows/webui-runtime-command.ts +5 -2
  605. package/packages/piagent-core/runtime/workflows/webui-workflow.ts +39 -32
  606. package/packages/piagent-core/runtime/workflows/workflow-follow-up.ts +33 -0
  607. package/packages/piagent-core/security/workspace-file-reader.ts +132 -0
  608. package/packages/piagent-core/subagents/piagent-oracle.md +5 -3
  609. package/packages/piagent-core/subagents/piagent-planner.md +6 -4
  610. package/packages/piagent-core/subagents/piagent-reviewer.md +5 -3
  611. package/packages/piagent-core/subagents/piagent-scout.md +4 -2
  612. package/packages/piagent-core/subagents/piagent-worker.md +6 -4
  613. package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-CxeZqTte.js → MarkdownMessage-DGk34zJT.js} +1 -1
  614. package/packages/piagent-webui/dist/client/assets/{index-BV-_03yl.css → index-DVahUVWy.css} +1 -1
  615. package/packages/piagent-webui/dist/client/assets/index-DiKRmCEP.js +176 -0
  616. package/packages/piagent-webui/dist/client/index.html +2 -2
  617. package/packages/piagent-webui/extension/dispatch-user-entry.ts +13 -0
  618. package/packages/piagent-webui/extension/piagent-webui.ts +13 -3
  619. package/packages/piagent-webui/extension/review-controller.ts +29 -6
  620. package/packages/piagent-webui/extension/same-session-bridge.ts +7 -8
  621. package/packages/piagent-webui/extension/session-stream-adapter.ts +88 -16
  622. package/packages/piagent-webui/extension/source-mutation-controller.ts +29 -3
  623. package/packages/piagent-webui/extension/source-open-controller.ts +29 -7
  624. package/packages/piagent-webui/extension/source-revert-controller.ts +26 -3
  625. package/packages/piagent-webui/gateway/gateway-events.ts +22 -5
  626. package/packages/piagent-webui/gateway/gateway-service.ts +7 -2
  627. package/packages/piagent-webui/gateway/gateway-session-stream.ts +170 -32
  628. package/packages/piagent-webui/gateway/rpc-ui-context.ts +34 -9
  629. package/packages/piagent-webui/gateway/runtime-command-controller.ts +46 -6
  630. package/packages/piagent-webui/gateway/runtime-session-controls.ts +17 -2
  631. package/packages/piagent-webui/gateway/session-catalog.ts +9 -3
  632. package/packages/piagent-webui/gateway/session-command-controller.ts +29 -9
  633. package/packages/piagent-webui/gateway/session-effective-options.ts +2 -9
  634. package/packages/piagent-webui/gateway/session-inspection-registry.ts +11 -2
  635. package/packages/piagent-webui/gateway/session-operation-lifecycle.ts +237 -0
  636. package/packages/piagent-webui/gateway/session-operation-retry-control.ts +38 -0
  637. package/packages/piagent-webui/gateway/session-operation-settlement.ts +28 -0
  638. package/packages/piagent-webui/gateway/session-operation-watchdog.ts +9 -2
  639. package/packages/piagent-webui/gateway/session-prompt-dispatch.ts +37 -0
  640. package/packages/piagent-webui/gateway/session-runtime-close.ts +36 -0
  641. package/packages/piagent-webui/gateway/session-runtime-factory.ts +183 -6
  642. package/packages/piagent-webui/gateway/session-runtime-ownership.ts +48 -0
  643. package/packages/piagent-webui/gateway/session-runtime-state.ts +24 -0
  644. package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +118 -117
  645. package/packages/piagent-webui/ownership/session-lease-store.ts +5 -2
  646. package/packages/piagent-webui/server/core-inspection-provider.ts +75 -15
  647. package/packages/piagent-webui/server/loopback-server.ts +9 -7
  648. package/packages/piagent-webui/server/terminal-delivery-receipt.ts +144 -0
  649. package/packages/piagent-webui/server/transcript-projection.ts +150 -11
  650. package/packages/piagent-webui/shared/message-correlation.ts +25 -0
  651. package/schemas/approved-host-contracts.schema.json +973 -0
  652. package/schemas/benchmark-attempt-outcome.schema.json +303 -0
  653. package/schemas/benchmark-independent-verification-plan.schema.json +34 -0
  654. package/schemas/codex-relative-efficiency-v1.schema.json +155 -0
  655. package/schemas/composite-criterion.schema.json +788 -0
  656. package/schemas/contract-family-library.schema.json +28 -0
  657. package/schemas/contract-selection-recipe.schema.json +31 -0
  658. package/schemas/failure-evidence.schema.json +2 -2
  659. package/schemas/helper-request.schema.json +16 -4
  660. package/schemas/host-contract-plan.schema.json +25 -0
  661. package/schemas/piagent-webui/gateway-protocol-v1.schema.json +16 -2
  662. package/schemas/piagent-webui/runtime-command-v1.schema.json +26 -3
  663. package/schemas/piagent-webui/runtime-event-v2.schema.json +46 -5
  664. package/schemas/piagent-webui/session-live-state-v1.schema.json +2 -0
  665. package/schemas/piagent-webui/snapshot-v1.schema.json +3 -0
  666. package/schemas/piagent-webui/source-change-v1.schema.json +12 -0
  667. package/schemas/piagent-webui/subagent-tree-v1.schema.json +11 -1
  668. package/schemas/piagent-webui/transcript-v1.schema.json +2 -1
  669. package/schemas/project-profile.schema.json +1 -1
  670. package/schemas/public-contracts/codex-mcp-metadata-v1.schema.json +206 -0
  671. package/schemas/public-contracts/codex-mcp-metadata-v2.schema.json +228 -0
  672. package/schemas/public-contracts/codex-mcp-metadata-v3.schema.json +233 -0
  673. package/schemas/public-contracts/revocation-v1.schema.json +87 -0
  674. package/schemas/public-contracts/subscription-contract-v1.schema.json +76 -0
  675. package/schemas/scoped-project-verification-receipt-v2.schema.json +83 -0
  676. package/schemas/scoped-project-verification-receipt-v3.schema.json +295 -0
  677. package/schemas/scoped-verification-receipt-v1.schema.json +76 -0
  678. package/schemas/task-contract.schema.json +45 -0
  679. package/scripts/approve-independent-verification.mjs +57 -0
  680. package/scripts/benchmark-arm-observer.mjs +320 -0
  681. package/scripts/benchmark-budget-ipc.mjs +34 -0
  682. package/scripts/benchmark-budget-launcher.mjs +91 -0
  683. package/scripts/benchmark-budget-processes.mjs +133 -0
  684. package/scripts/benchmark-budget-publication.mjs +228 -0
  685. package/scripts/benchmark-budget-runtime.mjs +136 -0
  686. package/scripts/benchmark-candidate-ablation.mjs +265 -0
  687. package/scripts/benchmark-codex-journey.mjs +406 -0
  688. package/scripts/benchmark-independent-verification.mjs +628 -0
  689. package/scripts/benchmark-journey-outcome.mjs +92 -0
  690. package/scripts/benchmark-production-v3-human-review.mjs +192 -0
  691. package/scripts/benchmark-public-input-catalog.mjs +158 -0
  692. package/scripts/benchmark-registered-plan-author.mjs +355 -0
  693. package/scripts/benchmark-registered-plan-recipe-support.mjs +85 -0
  694. package/scripts/benchmark-registered-plan-recipes-backend.mjs +165 -0
  695. package/scripts/benchmark-registered-plan-recipes-data.mjs +164 -0
  696. package/scripts/benchmark-registered-plan-recipes-platform.mjs +165 -0
  697. package/scripts/benchmark-runner-completion.mjs +133 -0
  698. package/scripts/benchmark-runner-configuration.mjs +159 -0
  699. package/scripts/benchmark-runner-core.mjs +224 -387
  700. package/scripts/benchmark-runner-finalization.mjs +144 -27
  701. package/scripts/benchmark-runner-provider-boundary.mjs +44 -0
  702. package/scripts/benchmark-runner-schedule.mjs +256 -0
  703. package/scripts/benchmark-runner-support.mjs +136 -4
  704. package/scripts/benchmark-runner.mjs +95 -18
  705. package/scripts/benchmark-scoped-broker-custody.mjs +483 -0
  706. package/scripts/benchmark-scoped-docs-verifier.mjs +203 -0
  707. package/scripts/benchmark-scoped-frozen-qualification.mjs +676 -0
  708. package/scripts/benchmark-scoped-pi-router.mjs +196 -0
  709. package/scripts/benchmark-scoped-project-verification-receipt.mjs +49 -0
  710. package/scripts/benchmark-scoped-project-verifier.mjs +461 -0
  711. package/scripts/benchmark-scoped-session-custody.mjs +599 -0
  712. package/scripts/benchmark-scoped-session-factory.mjs +342 -0
  713. package/scripts/benchmark-scoped-tool-broker.mjs +523 -0
  714. package/scripts/benchmark-scoped-verification-supervisor.mjs +773 -0
  715. package/scripts/benchmark-session-evaluator.mjs +169 -0
  716. package/scripts/benchmark-session-provider-boundary.mjs +62 -0
  717. package/scripts/benchmark-session-usage.mjs +28 -0
  718. package/scripts/benchmark-session.mjs +343 -50
  719. package/scripts/benchmark-webui-journey.mjs +678 -0
  720. package/scripts/check-public-wording.mjs +46 -0
  721. package/scripts/configure-subagents.sh +42 -34
  722. package/scripts/fs4-readiness-evaluation.mjs +7 -1
  723. package/scripts/helper-evaluation.mjs +1 -1
  724. package/scripts/phase-tools-evaluation.mjs +1 -0
  725. package/scripts/pi-auto.sh +7 -1
  726. package/scripts/pi-usage-history.mjs +201 -11
  727. package/scripts/piagent-cli.mjs +8 -0
  728. package/scripts/private-holdout-readiness.mjs +7 -1
  729. package/scripts/public-evaluation-exposure.mjs +140 -0
  730. package/scripts/select-independent-verification.mjs +62 -0
  731. package/scripts/team-doctor.sh +1 -1
  732. package/scripts/typescript-loader.mjs +135 -1
  733. package/scripts/update-global.mjs +6 -7
  734. package/scripts/verify-local.sh +41 -55
  735. package/scripts/verify-release-identity.mjs +5 -3
  736. package/packages/piagent-webui/dist/client/assets/index-DynIMe8I.js +0 -176
@@ -1,18 +1,15 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- import { exactFinalOutputGuidance } from "../quality/exact-output-contract.ts";
3
- import { taskPerformanceAssurance } from "../quality/performance-assurance.ts";
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { exactFinalOutputGuidance } from "../quality/exact-output-contract.ts"; import { taskPerformanceAssurance } from "../quality/performance-assurance.ts";
4
2
  import { automaticTaskSummary, boundedRuntimeIntakeMessage } from "../workflows/task-intake.ts";
5
3
  import { WORKING_TREE_DIGEST_ALGORITHM } from "../../extensions/working-tree-digest.js";
4
+ import { TASK_ACCEPTANCE_CRITERIA_MAX, TASK_ACCEPTANCE_CRITERION_MAX_CHARS, TASK_EXPECTED_OUTPUT_MAX_CHARS, TASK_SUMMARY_MAX_CHARS, operatorRequestDigest } from "../../extensions/task-state.js";
6
5
  import { createEnvironmentBoundTaskAuthority } from "../policy/task-authority-runtime.ts";
7
6
  import { authorityReplacementState } from "../policy/authority-resume-policy.ts";
7
+ import { uncertainSendRuntimeIntake } from "../session/uncertain-send-continuation.ts";
8
8
  import { compileCriterionGraph, criterionGraphContextSelection, criterionGraphContextSelectionDetails, criterionGraphGuidance, criterionGraphMode } from "../../extensions/criterion-graph.js";
9
9
  import { captureTaskStartBaseline } from "../inspection/task-baseline-start-capture.ts";
10
- import { sameStringRecord, satisfiesAuthorityReplacement } from "./task-start-retry-helpers.ts";
11
- import {
12
- automaticTaskExecutionGuidance, EXACT_VERIFIER_EXECUTION_GUIDANCE, RUNTIME_SOURCE_REUSE_GUIDANCE,
13
- taskCriticalProofSection
14
- } from "./task-start-guidance.ts";
15
- type ExtensionContext = any; type TaskContract = any; type TaskStartParameters = any;
10
+ import { sameStringRecord, satisfiesAuthorityReplacement } from "./task-start-retry-helpers.ts"; import { automaticTaskExecutionGuidance, EXACT_VERIFIER_EXECUTION_GUIDANCE, RUNTIME_SOURCE_REUSE_GUIDANCE, taskCriticalProofSection } from "./task-start-guidance.ts";
11
+ import { resolveTaskStartRepositoryManifestProvider } from "./task-start-manifest.ts"; import { boundedOperatorRequest, latestOperatorRequest } from "./operator-request-intake.ts"; import { automaticTaskExpectedOutput, conditionalMutationPreTaskContext, taskStartLifecycleGuidance } from "./task-start-conditional-mutation.ts";
12
+ type ExtensionContext = any; type TaskContract = any; type TaskStartParameters = Record<string, any> & { operatorRequest?: string }; function taskReferenceDetails(task: TaskContract, reasonCode: string): Record<string, unknown> { const scope = Array.isArray(task.scope) ? task.scope.slice(0, 50) : []; return { reasonCode, taskId: task.taskId, taskRunId: task.taskRunId, outcome: task.trace?.outcome, attempt: task.attempt, ...(reasonCode === "task-already-active" ? { scope, scopeTruncated: scope.length < task.scope.length } : {}) }; }
16
13
  export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any>): any {
17
14
  const {
18
15
  DEFAULT_MAX_TASK_ATTEMPTS, ORCHESTRATION_ROLES, REVIEW_LENSES, StringEnum, Type,
@@ -20,12 +17,13 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
20
17
  applyRuntimeLifecycleObservation, automaticAcceptanceCriteria, automaticReadOnlyTaskScope, automaticReviewLenses, automaticTaskIntakeMode, automaticTaskMutationPolicy, automaticTaskRiskLane, automaticTaskScope,
21
18
  acceptanceBaselineGuidance, acceptanceLanguageAdapterForPath, acceptanceProofGuidance, bindSessionTask, buildAcceptanceReceipt, compactTaskDetails, contextBudgetConfig, createTaskRunId,
22
19
  currentSessionName, defaultWorkPlan, effectiveProtectedPaths, hasGitEvidenceRoot, hasOperatorSessionName,
23
- isAcceptanceTestPath, loadProfileFromContext, matchesProtectedPath, normalizeReviewLenses, normalizeWorkPlanSteps, nowIso, policy,
20
+ isAcceptanceTestPath, loadProfileFromContext, matchesAnyPath, matchesProtectedPath, normalizeReviewLenses, normalizeWorkPlanSteps, nowIso, policy,
24
21
  priorTaskAttempts, recordTaskStartCheckpoint, redactText, redactTextArray, registerRuntimeTool,
25
- repositoryFileManifest, repositoryFileManifestDetails, resolveOrchestrationPolicy, resolveTaskScopePatterns, runtimeLifecycleMode, runtimeState, safeTaskId, selectVerificationPlan,
22
+ repositoryFileManifest, resolveOrchestrationPolicy, resolveTaskScopePatterns, runtimeLifecycleMode, runtimeState, safeTaskId, selectVerificationPlan,
26
23
  summarizeAttempt, telemetry, validTaskScopePattern, validateNewWorkPlan, verifierCommandInstructions, workingTreeEvidenceDigest, workingTreeSnapshot, workingTreeSnapshotHasUnavailableEvidence,
27
24
  writeTask
28
25
  } = deps;
26
+ const repositoryManifestProvider = resolveTaskStartRepositoryManifestProvider(deps);
29
27
  const taskStartTool = {
30
28
  name: "piagent_task_start",
31
29
  label: "Piagent Task Start",
@@ -33,27 +31,27 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
33
31
  promptSnippet: "Start a governed project task and persist the task contract.",
34
32
  promptGuidelines: [
35
33
  "Call this exactly once before source edits in a project managed by Pi Agent Platform.",
36
- "Use source-change for project verifier execution or edits. For an assessment, report, or plan with no source changes, set mutationPolicy=forbidden; use read-only when no project verifier needs to execute.",
34
+ "Use source-change for project verifier execution or edits. Set mutationPolicy=required when a task-local diff is mandatory, allowed when verification/review may conditionally repair findings but zero delta is valid, and forbidden when source mutation is prohibited; use read-only when no project verifier needs to execute.",
37
35
  "Do not call context, status, policy, evidence-recording, trace, or gate tools first; runtime hooks provide those checks automatically.",
38
36
  "Use tiny for a bounded low-risk change, normal for ordinary multi-file work, and high-risk for security, data, release, migration, or external-impact work.",
39
- "Every scope entry must be a project-relative path or glob such as src/file.ts, src/**, or test/**; never put prose in scope.",
37
+ "Every scope entry is an initial retrieval/review focus and must be a project-relative path or glob such as src/file.ts, src/**, or test/**; it is not a source-mutation boundary.",
40
38
  "Leave workPlan unset for ordinary tiny/normal tasks so runtime automation stays active; pass a custom workPlan only when the operator explicitly requests custom subagent or checkpoint orchestration.",
41
39
  "Tiny tasks use automatic lifecycle evidence; normal tasks retain one explicit review step; high-risk/custom plans keep manual checkpoints."
42
40
  ],
43
41
  parameters: Type.Object({
44
42
  taskId: Type.Optional(Type.String({ minLength: 1 })),
45
- summary: Type.String({ minLength: 10 }),
43
+ summary: Type.String({ minLength: 10, maxLength: TASK_SUMMARY_MAX_CHARS }),
46
44
  riskLane: StringEnum(["tiny", "normal", "high-risk"] as const),
47
45
  changeMode: Type.Optional(StringEnum(["source-change", "read-only"] as const, {
48
46
  description: "Use source-change for project verifier execution or edits; use read-only for bounded inspection."
49
47
  })),
50
- mutationPolicy: Type.Optional(StringEnum(["required", "forbidden"] as const, { description: "Required demands a final diff; forbidden allows exact verification, rejects source mutation, and requires a zero task delta." })),
48
+ mutationPolicy: Type.Optional(StringEnum(["required", "allowed", "forbidden"] as const, { description: "Required demands a final diff; allowed accepts zero or scoped source changes while retaining exact verification and mutation guards; forbidden rejects source mutation and requires a zero task delta." })),
51
49
  maxAttempts: Type.Optional(Type.Number({ minimum: 1, maximum: 10 })),
52
- expectedOutput: Type.String({ minLength: 10 }),
53
- acceptanceCriteria: Type.Array(Type.String({ minLength: 1 }), { minItems: 1, maxItems: 12 }),
50
+ expectedOutput: Type.String({ minLength: 10, maxLength: TASK_EXPECTED_OUTPUT_MAX_CHARS }),
51
+ acceptanceCriteria: Type.Array(Type.String({ minLength: 1, maxLength: TASK_ACCEPTANCE_CRITERION_MAX_CHARS }), { minItems: 1, maxItems: TASK_ACCEPTANCE_CRITERIA_MAX }),
54
52
  scope: Type.Array(Type.String({
55
53
  minLength: 1,
56
- description: "Project-relative path or glob only (for example src/file.ts, src/**, or test/**); do not use prose."
54
+ description: "Advisory retrieval/review focus as a project-relative path or glob (for example src/file.ts, src/**, or test/**); source changes may follow repository evidence beyond it."
57
55
  }), { minItems: 1, maxItems: 2000 }),
58
56
  outOfScope: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
59
57
  reviewLenses: Type.Optional(Type.Array(StringEnum(REVIEW_LENSES))),
@@ -74,12 +72,13 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
74
72
  _onUpdate: ((update: unknown) => void) | undefined,
75
73
  ctx: ExtensionContext
76
74
  ) {
77
- const profile = loadProfileFromContext(ctx);
78
- const createdAt = nowIso();
79
- const safeSummary = redactText(params.summary);
75
+ const profile = loadProfileFromContext(ctx), createdAt = nowIso();
76
+ const operatorRequest = typeof params.operatorRequest === "string"
77
+ ? params.operatorRequest
78
+ : latestOperatorRequest(ctx);
79
+ const safeSummary = redactText(params.summary), safeOperatorRequest = boundedOperatorRequest(operatorRequest, redactText);
80
80
  const taskId = safeTaskId(redactText(params.taskId ?? params.summary));
81
- const sessionId = ctx.sessionManager.getSessionId();
82
- const sessionName = currentSessionName(ctx);
81
+ const sessionId = ctx.sessionManager.getSessionId(), sessionName = currentSessionName(ctx);
83
82
  const active = activeSessionTask(ctx.cwd, sessionId) as TaskContract | undefined;
84
83
  if (active && active.trace.outcome !== "pending" && runtimeState.taskIdentity(ctx)?.taskRunId === active.taskRunId) {
85
84
  runtimeState.clearTaskBoundary(ctx, active.taskRunId);
@@ -135,12 +134,12 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
135
134
  }
136
135
  return {
137
136
  content: [{ type: "text", text: `Task already active in this session: ${active.taskId} (${active.taskRunId}). Reusing it instead of overwriting state.` }],
138
- details: compactTaskDetails(active)
137
+ details: taskReferenceDetails(active, "task-already-active")
139
138
  };
140
139
  }
141
140
  return {
142
141
  content: [{ type: "text", text: `Session already has pending task ${active.taskId} (${active.taskRunId}). Complete or stop it before starting another task in this conversation.` }],
143
- details: active,
142
+ details: taskReferenceDetails(active, "session-task-already-pending"),
144
143
  isError: true
145
144
  };
146
145
  }
@@ -155,24 +154,15 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
155
154
  };
156
155
  }
157
156
  const scopeResolution = resolveTaskScopePatterns(params.scope, repositoryFileManifest(ctx.cwd));
158
- if (scopeResolution.ambiguous.length > 0) {
159
- const details = scopeResolution.ambiguous
160
- .map((item) => `${item.input}: ${item.candidates.join(", ")}`)
161
- .join("; ");
162
- return {
163
- content: [{ type: "text", text: `Task start refused: scope is ambiguous (${details}). Use one exact project-relative candidate for each ambiguous entry.` }],
164
- details: scopeResolution,
165
- isError: true
166
- };
167
- }
168
- if (scopeResolution.unmatched.length > 0) {
169
- return {
170
- content: [{ type: "text", text: `Task start refused: scope entries do not identify an existing repository path (${scopeResolution.unmatched.join(", ")}). Use an exact project-relative path for a new file, such as src/name.ts, instead of a basename or guessed top-level alias.` }],
171
- details: scopeResolution,
172
- isError: true
173
- };
174
- }
175
- const resolvedScope = scopeResolution.scope;
157
+ // Scope guides context selection and review; it is not filesystem
158
+ // authority. Keep unresolved focus entries instead of preventing work in
159
+ // a parent workspace where several child repositories share names such
160
+ // as src/, app/, tests/, or package.json.
161
+ const unresolvedFocus = [
162
+ ...scopeResolution.ambiguous.map((item) => item.input),
163
+ ...scopeResolution.unmatched
164
+ ];
165
+ const resolvedScope = [...new Set([...scopeResolution.scope, ...unresolvedFocus])];
176
166
  const priorAttempts = priorTaskAttempts(ctx.cwd, taskId) as TaskContract[];
177
167
  const authorityStates = new Map(priorAttempts.map((task) => [task.taskRunId, authorityReplacementState(ctx.cwd, task)]));
178
168
  const unsafeAuthorityState = [...authorityStates.entries()].find(([, state]) => !state.enforcementSafe);
@@ -189,7 +179,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
189
179
  if (pendingElsewhere) {
190
180
  return {
191
181
  content: [{ type: "text", text: `Task ${taskId} is already active in session ${pendingElsewhere.sessionName ?? pendingElsewhere.sessionId} (${pendingElsewhere.taskRunId}).` }],
192
- details: pendingElsewhere,
182
+ details: taskReferenceDetails(pendingElsewhere, "task-active-in-another-session"),
193
183
  isError: true
194
184
  };
195
185
  }
@@ -197,7 +187,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
197
187
  if (latestCompleted) {
198
188
  return {
199
189
  content: [{ type: "text", text: `Task ${taskId} already completed as ${latestCompleted.taskRunId}. Use a distinct taskId for new work instead of replacing its evidence.` }],
200
- details: latestCompleted,
190
+ details: taskReferenceDetails(latestCompleted, "task-already-completed"),
201
191
  isError: true
202
192
  };
203
193
  }
@@ -238,8 +228,10 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
238
228
  }
239
229
  const orchestration = resolveOrchestrationPolicy(profile, policy);
240
230
  const changeMode = params.changeMode === "read-only" ? "read-only" : "source-change";
241
- const mutationPolicy = changeMode === "read-only" || params.mutationPolicy === "forbidden" ? "forbidden" : "required";
242
- if (changeMode === "read-only" && params.mutationPolicy === "required") return { content: [{ type: "text", text: "Task start refused: read-only tasks cannot require source mutation." }], isError: true };
231
+ const mutationPolicy = changeMode === "read-only" || params.mutationPolicy === "forbidden"
232
+ ? "forbidden"
233
+ : params.mutationPolicy === "allowed" ? "allowed" : "required";
234
+ if (changeMode === "read-only" && params.mutationPolicy !== undefined && params.mutationPolicy !== "forbidden") return { content: [{ type: "text", text: "Task start refused: read-only tasks must forbid source mutation." }], isError: true };
243
235
  if (changeMode === "source-change" && !hasGitEvidenceRoot(ctx.cwd)) {
244
236
  return {
245
237
  content: [{ type: "text", text: "Task start refused: source-change tasks require a Git working tree, or a workspace parent with direct child Git repositories, so changed-file evidence cannot silently disappear. Initialize Git, open the parent that contains the repos, or use read-only mode." }],
@@ -260,11 +252,11 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
260
252
  const workPlan = providedWorkPlan.length ? providedWorkPlan : defaultWorkPlan(safeSummary, defaultPlanLane, changeMode, mutationPolicy);
261
253
  const workPlanError = validateNewWorkPlan(workPlan);
262
254
  if (workPlanError) {
263
- return { content: [{ type: "text", text: `Task start refused: ${workPlanError}.` }], details: workPlan, isError: true };
255
+ return { content: [{ type: "text", text: `Task start refused: ${workPlanError}.` }], details: { reasonCode: "invalid-work-plan" }, isError: true };
264
256
  }
265
257
  const firstReady = workPlan.find((step) => (step.dependsOn ?? []).length === 0);
266
258
  if (!firstReady) {
267
- return { content: [{ type: "text", text: "Task start refused: work plan has no dependency-ready first step." }], details: workPlan, isError: true };
259
+ return { content: [{ type: "text", text: "Task start refused: work plan has no dependency-ready first step." }], details: { reasonCode: "work-plan-has-no-ready-step" }, isError: true };
268
260
  }
269
261
  firstReady.status = "in-progress";
270
262
  firstReady.updatedAt = createdAt;
@@ -287,16 +279,20 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
287
279
  expectedOutput: redactText(params.expectedOutput),
288
280
  acceptanceCriteria: redactTextArray(params.acceptanceCriteria),
289
281
  changeMode,
282
+ mutationPolicy,
283
+ outOfScope: redactTextArray(params.outOfScope),
284
+ protectedPaths: profile.protectedPaths ?? [],
290
285
  source: params.intakeMode === "runtime" ? "runtime" : "model",
291
286
  generatedAt: createdAt
292
287
  });
293
288
  const criterionGraph = compileCriterionGraph({ acceptanceCriteria: acceptance.acceptanceCriteria, scope: resolvedScope,
294
289
  verifyCommands: verifyPlan.commands, changeMode, mode: criterionGraphMode(), createdAt });
295
- const projectManifest = repositoryFileManifestDetails(ctx.cwd), projectFiles = projectManifest.files;
290
+ const projectManifest = repositoryManifestProvider.read(ctx.cwd), projectFiles = projectManifest.files;
296
291
  const maxManifestFiles = contextBudgetConfig(policy).maxManifestFiles;
297
292
  const plannedSelection = criterionGraphContextSelectionDetails(criterionGraph, projectFiles, [], maxManifestFiles, projectManifest.complete, resolvedScope);
298
293
  const plannedContext = plannedSelection.entries;
299
- const observedContext = criterionGraphContextSelection(undefined, [], runtimeState.preTaskContext(ctx), maxManifestFiles);
294
+ const observedContext = criterionGraphContextSelection(undefined, [], conditionalMutationPreTaskContext(runtimeState.preTaskContext(ctx), resolvedScope,
295
+ params.intakeMode === "runtime" && mutationPolicy === "allowed", matchesAnyPath), maxManifestFiles);
300
296
  const task: TaskContract = {
301
297
  schemaVersion: 2,
302
298
  taskRunId,
@@ -309,6 +305,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
309
305
  maxAttempts,
310
306
  previousAttempts: priorAttempts.filter((task) => task.trace.outcome !== "pending").slice(0, 10).reverse().map(summarizeAttempt),
311
307
  summary: safeSummary,
308
+ ...(safeOperatorRequest ? { operatorRequest: safeOperatorRequest, operatorRequestDigest: operatorRequestDigest(safeOperatorRequest) } : {}),
312
309
  riskLane: params.riskLane,
313
310
  intakeMode: params.intakeMode === "runtime" ? "runtime" : "model",
314
311
  expectedOutput: redactText(params.expectedOutput),
@@ -331,7 +328,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
331
328
  orchestration: {
332
329
  mode: orchestration.defaultMode,
333
330
  subagents: "not-used",
334
- reason: "Task starts in solo-first mode; use bounded subagents only for independent scout, planning, or review work.",
331
+ reason: "Parent works directly by default. One fresh read-only helper is eligible only with two independent lanes and at least 30% projected net token savings; workers and retries are disabled.",
335
332
  fieldGuidePath: orchestration.fieldGuide.enabled ? orchestration.fieldGuide.path : undefined,
336
333
  modelRoles: orchestration.roleModelGuidance
337
334
  },
@@ -355,11 +352,11 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
355
352
  ? acceptanceBaselineGuidance(written, { cwd: ctx.cwd })
356
353
  : [];
357
354
  const exactOutputGuidance = mutationPolicy === "forbidden"
358
- ? exactFinalOutputGuidance(written.summary)
355
+ ? exactFinalOutputGuidance(written)
359
356
  : [];
360
357
  const criticalProof = taskCriticalProofSection(
361
- written, plannedContext, projectFiles, acceptanceProofGuidance, isAcceptanceTestPath, acceptanceLanguageAdapterForPath
362
- );
358
+ written, plannedContext, projectFiles, acceptanceProofGuidance, isAcceptanceTestPath, acceptanceLanguageAdapterForPath,
359
+ taskPerformanceAssurance(written).requiresReview);
363
360
  bindSessionTask(ctx.cwd, sessionId, sessionName, written);
364
361
  runtimeState.cacheTaskIdentity(ctx, written);
365
362
  if (written.intakeMode !== "runtime") {
@@ -370,8 +367,8 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
370
367
  }
371
368
  const lifecycleMode = runtimeLifecycleMode(written);
372
369
  const scopeMappings = scopeResolution.mappings.map((item) => `${item.from} -> ${item.to}`);
373
- appendTrace(ctx.cwd, { taskId, taskRunId, sessionId, sessionName, attempt, event: "task_start", turnId: runtimeState.currentTurn(ctx)?.turnId, summary: task.summary, riskLane: params.riskLane, intakeMode: task.intakeMode, changeMode: task.changeMode, mutationPolicy: task.mutationPolicy, lifecycleMode, criterionGraphMode: written.criterionGraph.mode, criterionGraphDigest: written.criterionGraph.graphDigest, authorityProfile: written.authoritySnapshot.profile, authoritySnapshotDigest: written.authoritySnapshot.snapshotDigest, scopeMappings, plannedContext: plannedContext.map((item) => item.path), plannedContextComplete: plannedSelection.complete, plannedContextCandidateCount: plannedSelection.candidateCount, observedContext: observedContext.map((item) => item.path) });
374
- appendSessionTrace(pi, { taskId, taskRunId, sessionId, sessionName, attempt, event: "task_start", turnId: runtimeState.currentTurn(ctx)?.turnId, summary: task.summary, riskLane: params.riskLane, intakeMode: task.intakeMode, changeMode: task.changeMode, mutationPolicy: task.mutationPolicy, lifecycleMode, criterionGraphMode: written.criterionGraph.mode, criterionGraphDigest: written.criterionGraph.graphDigest, authorityProfile: written.authoritySnapshot.profile, authoritySnapshotDigest: written.authoritySnapshot.snapshotDigest, scopeMappings, plannedContext: plannedContext.map((item) => item.path), plannedContextComplete: plannedSelection.complete, plannedContextCandidateCount: plannedSelection.candidateCount, observedContext: observedContext.map((item) => item.path) });
370
+ appendTrace(ctx.cwd, { taskId, taskRunId, sessionId, sessionName, attempt, event: "task_start", turnId: runtimeState.currentTurn(ctx)?.turnId, summary: task.summary, riskLane: params.riskLane, intakeMode: task.intakeMode, changeMode: task.changeMode, mutationPolicy: task.mutationPolicy, lifecycleMode, criterionGraphMode: written.criterionGraph.mode, criterionGraphDigest: written.criterionGraph.graphDigest, authorityProfile: written.authoritySnapshot.profile, authoritySnapshotDigest: written.authoritySnapshot.snapshotDigest, scopeMappings, plannedContext: plannedContext.map((item) => item.path), plannedContextComplete: plannedSelection.complete, plannedContextCandidateCount: plannedSelection.candidateCount, repositoryManifestProvider: projectManifest.provider, repositoryManifestCompatibilityReason: projectManifest.compatibilityReason, observedContext: observedContext.map((item) => item.path) });
371
+ appendSessionTrace(pi, { taskId, taskRunId, sessionId, sessionName, attempt, event: "task_start", turnId: runtimeState.currentTurn(ctx)?.turnId, summary: task.summary, riskLane: params.riskLane, intakeMode: task.intakeMode, changeMode: task.changeMode, mutationPolicy: task.mutationPolicy, lifecycleMode, criterionGraphMode: written.criterionGraph.mode, criterionGraphDigest: written.criterionGraph.graphDigest, authorityProfile: written.authoritySnapshot.profile, authoritySnapshotDigest: written.authoritySnapshot.snapshotDigest, scopeMappings, plannedContext: plannedContext.map((item) => item.path), plannedContextComplete: plannedSelection.complete, plannedContextCandidateCount: plannedSelection.candidateCount, repositoryManifestProvider: projectManifest.provider, repositoryManifestCompatibilityReason: projectManifest.compatibilityReason, observedContext: observedContext.map((item) => item.path) });
375
372
  telemetry(ctx, { event: "turn_task_bound", turnId: runtimeState.currentTurn(ctx)?.turnId, taskRunId });
376
373
  recordTaskStartCheckpoint(ctx, written, firstReady.id, lifecycleMode);
377
374
  return {
@@ -379,7 +376,13 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
379
376
  type: "text",
380
377
  text: [
381
378
  `Task ${taskId} started (${params.riskLane}, ${lifecycleMode}; attempt ${attempt}/${maxAttempts}).`,
382
- ...(scopeMappings.length > 0 ? [`Canonical scope: ${scopeMappings.join("; ")}.`] : []),
379
+ ...(scopeMappings.length > 0 ? [`Initial focus mapping: ${scopeMappings.join("; ")}.`] : []),
380
+ ...(scopeResolution.ambiguous.length > 0
381
+ ? [`Ambiguous focus retained as advisory: ${scopeResolution.ambiguous.map((item) => item.input).join(", ")}.`]
382
+ : []),
383
+ ...(scopeResolution.unmatched.length > 0
384
+ ? [`Unmatched focus retained for discovery or new files: ${scopeResolution.unmatched.join(", ")}.`]
385
+ : []),
383
386
  written.verifyCommands.length > 0
384
387
  ? ["Exact verifier commands:", ...verifierCommandInstructions(written.verifyCommands)].join("\n")
385
388
  : "Verify: none (read-only).",
@@ -397,16 +400,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
397
400
  ...(baselineGuidance.length > 0
398
401
  ? [["Existing public contract:", ...baselineGuidance.map((item: string) => `- ${item}`)].join("\n")]
399
402
  : []),
400
- lifecycleMode === "automatic-readonly"
401
- ? "Runtime records targeted reads and final completion automatically. Stay read-only and report cited evidence."
402
- : lifecycleMode === "assisted-readonly"
403
- ? "Runtime records read-only evidence automatically; complete only the explicit evidence-review step before handoff."
404
- : mutationPolicy === "forbidden" ? "Runtime permits bounded inspection and exact configured verifier commands only. Source mutation is blocked, and completion requires a zero task delta."
405
- : lifecycleMode === "automatic"
406
- ? "Runtime will record reads, changes, exact verifier results, and final completion automatically. Continue with ordinary read/edit/bash work."
407
- : lifecycleMode === "assisted"
408
- ? `Runtime records objective evidence automatically; after verification, complete only step \`review\` with piagent_task_progress using taskId \`${written.taskId}\` and stepId \`review\`.`
409
- : "Use the active progress/recovery tools for the custom or high-risk checkpoints."
403
+ taskStartLifecycleGuidance(lifecycleMode, mutationPolicy, written.taskId)
410
404
  ].join("\n")
411
405
  }],
412
406
  details: compactTaskDetails(written)
@@ -414,31 +408,36 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
414
408
  }
415
409
  };
416
410
  registerRuntimeTool(pi, taskStartTool);
417
- async function maybeStartAutomaticTask(prompt: string, ctx: ExtensionContext): Promise<{ started: boolean; text: string; task?: TaskContract; plannedContext?: Array<{ path: string; reason: string }>; plannedContextComplete?: boolean } | undefined> {
411
+ async function maybeStartAutomaticTask(prompt: string, ctx: ExtensionContext): Promise<{ started: boolean; text: string; task?: TaskContract; plannedContext?: Array<{ path: string; reason: string }>; plannedContextComplete?: boolean; continuation?: "terminal-uncertain-send" } | undefined> {
412
+ const active = activeSessionTask(ctx.cwd, ctx.sessionManager.getSessionId()) as TaskContract | undefined,
413
+ uncertainSend = uncertainSendRuntimeIntake(ctx.cwd, active, prompt, ctx.sessionManager.getSessionId());
414
+ if (uncertainSend) {
415
+ if (uncertainSend.task) { appendTrace(ctx.cwd, uncertainSend.trace); appendSessionTrace(pi, uncertainSend.trace); }
416
+ telemetry(ctx, uncertainSend.trace); return uncertainSend.intake;
417
+ }
418
418
  const profile = loadProfileFromContext(ctx);
419
419
  const readProtectedPaths = effectiveProtectedPaths(policy, profile).readProtectedPaths;
420
420
  const intakeMode = automaticTaskIntakeMode(prompt, readProtectedPaths);
421
421
  if (!intakeMode) return undefined;
422
- const mutationPolicy = automaticTaskMutationPolicy(prompt, intakeMode), active = activeSessionTask(ctx.cwd, ctx.sessionManager.getSessionId()) as TaskContract | undefined;
422
+ const mutationPolicy = automaticTaskMutationPolicy(prompt, intakeMode);
423
423
  if (active?.trace.outcome === "pending") return undefined;
424
424
  const summary = redactText(automaticTaskSummary(prompt));
425
425
  const sessionName = currentSessionName(ctx);
426
- const projectManifest = repositoryFileManifestDetails(ctx.cwd), projectFiles = projectManifest.files;
426
+ const projectManifest = repositoryManifestProvider.read(ctx.cwd), projectFiles = projectManifest.files;
427
427
  const scope = intakeMode === "read-only"
428
428
  ? automaticReadOnlyTaskScope(prompt, runtimeState.preTaskContext(ctx))
429
- : automaticTaskScope(prompt, runtimeState.preTaskContext(ctx), projectFiles);
429
+ : automaticTaskScope(prompt, runtimeState.preTaskContext(ctx), projectFiles, active);
430
430
  const started = await taskStartTool.execute(
431
431
  `runtime-intake-${ctx.sessionManager.getSessionId()}`,
432
432
  {
433
433
  taskId: active && active.trace.outcome !== "pending" ? summary : hasOperatorSessionName(sessionName) ? sessionName : summary,
434
- summary,
434
+ summary, operatorRequest: prompt,
435
435
  riskLane: automaticTaskRiskLane(prompt),
436
436
  intakeMode: "runtime",
437
437
  changeMode: intakeMode,
438
438
  mutationPolicy,
439
- expectedOutput: mutationPolicy === "forbidden" ? "The requested read-only investigation is answered from observed project evidence without mutating files."
440
- : "The requested bounded change is implemented and passes the configured verification.",
441
- acceptanceCriteria: automaticAcceptanceCriteria(prompt, mutationPolicy === "forbidden" ? "read-only" : intakeMode),
439
+ expectedOutput: automaticTaskExpectedOutput(mutationPolicy),
440
+ acceptanceCriteria: automaticAcceptanceCriteria(prompt, mutationPolicy === "forbidden" ? "read-only" : intakeMode, mutationPolicy),
442
441
  scope,
443
442
  outOfScope: ["Unrelated files and behavior outside the operator request."],
444
443
  reviewLenses: automaticReviewLenses(prompt)
@@ -469,9 +468,10 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
469
468
  const baselineGuidance = task.changeMode === "source-change" && task.mutationPolicy !== "forbidden"
470
469
  ? acceptanceBaselineGuidance(task, { cwd: ctx.cwd })
471
470
  : [];
472
- const exactOutputGuidance = task.changeMode === "read-only" || task.mutationPolicy === "forbidden" ? exactFinalOutputGuidance(task.summary) : [];
471
+ const exactOutputGuidance = task.changeMode === "read-only" || task.mutationPolicy === "forbidden" ? exactFinalOutputGuidance(task) : [];
473
472
  const criticalProof = taskCriticalProofSection(
474
- task, plannedContext, projectFiles, acceptanceProofGuidance, isAcceptanceTestPath, acceptanceLanguageAdapterForPath
473
+ task, plannedContext, projectFiles, acceptanceProofGuidance, isAcceptanceTestPath, acceptanceLanguageAdapterForPath,
474
+ assurance.requiresReview
475
475
  );
476
476
  return {
477
477
  started: true,
@@ -479,7 +479,7 @@ export function registerTaskStartTool(pi: ExtensionAPI, deps: Record<string, any
479
479
  plannedContext,
480
480
  plannedContextComplete: plannedSelection.complete,
481
481
  text: boundedRuntimeIntakeMessage([
482
- `Piagent runtime task: ${task.taskId}; scope: ${task.scope.join(", ")}.`,
482
+ `Piagent runtime task: ${task.taskId}; initial focus (advisory): ${task.scope.join(", ")}.`,
483
483
  "The complete operator request above is the authoritative acceptance contract; runtime keeps its full criteria, so do not restate or re-scout it.",
484
484
  `Assurance: ${assurance.tier} (${assurance.reasonCodes.join(", ") || "bounded-runtime"}).`,
485
485
  ...criticalProof,