@selesai/code 0.8.3 → 0.8.5

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 (518) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -1
  3. package/dist/core/slash-commands.js +1 -0
  4. package/dist/defaults/models.json +41 -55
  5. package/dist/defaults/settings.json +7 -8
  6. package/dist/extensions/handoff-new.ts +1 -1
  7. package/dist/extensions/inline-skills.test.ts +1 -0
  8. package/dist/extensions/inline-skills.ts +1 -1
  9. package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
  10. package/dist/extensions/pi-intercom/README.md +34 -15
  11. package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
  12. package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
  13. package/dist/extensions/pi-intercom/broker/client.ts +78 -150
  14. package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
  15. package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
  16. package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
  17. package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
  18. package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
  19. package/dist/extensions/pi-intercom/config.test.ts +8 -10
  20. package/dist/extensions/pi-intercom/config.ts +3 -3
  21. package/dist/extensions/pi-intercom/index.ts +218 -147
  22. package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
  23. package/dist/extensions/pi-intercom/package.json +3 -2
  24. package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
  25. package/dist/extensions/pi-intercom/project-agent.ts +324 -0
  26. package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
  27. package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
  28. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
  29. package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
  30. package/dist/extensions/pi-intercom/types.ts +3 -1
  31. package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
  32. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
  33. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
  34. package/dist/extensions/pi-powerline-footer/README.md +20 -37
  35. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
  36. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
  37. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
  38. package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
  39. package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
  40. package/dist/extensions/pi-powerline-footer/index.ts +394 -317
  41. package/dist/extensions/pi-powerline-footer/package.json +1 -1
  42. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
  43. package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
  44. package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
  45. package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
  46. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
  47. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
  48. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
  49. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
  50. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
  51. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
  52. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
  53. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
  54. package/dist/extensions/pi-powerline-footer/types.ts +1 -2
  55. package/dist/extensions/pi-subagents/CHANGELOG.md +225 -14
  56. package/dist/extensions/pi-subagents/README.md +66 -1613
  57. package/dist/extensions/pi-subagents/agents/builder.md +0 -1
  58. package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
  59. package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
  60. package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
  61. package/dist/extensions/pi-subagents/agents/scout.md +50 -0
  62. package/dist/extensions/pi-subagents/agents/worker.md +58 -0
  63. package/dist/extensions/pi-subagents/docs/configuration.md +372 -0
  64. package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
  65. package/dist/extensions/pi-subagents/docs/missions.md +119 -0
  66. package/dist/extensions/pi-subagents/docs/models.md +192 -0
  67. package/dist/extensions/pi-subagents/docs/observability.md +174 -0
  68. package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
  69. package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
  70. package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
  71. package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
  72. package/dist/extensions/pi-subagents/package-lock.json +152 -194
  73. package/dist/extensions/pi-subagents/package.json +9 -10
  74. package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
  75. package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
  76. package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
  77. package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
  78. package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
  79. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
  80. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
  81. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
  82. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
  83. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
  84. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
  85. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
  86. package/dist/extensions/pi-subagents/src/agents/agents.ts +38 -19
  87. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
  88. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
  89. package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
  90. package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
  91. package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
  92. package/dist/extensions/pi-subagents/src/extension/config.ts +62 -8
  93. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
  94. package/dist/extensions/pi-subagents/src/extension/doctor.ts +40 -0
  95. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
  96. package/dist/extensions/pi-subagents/src/extension/index.ts +140 -50
  97. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +77 -0
  98. package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -24
  99. package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
  100. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
  101. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
  102. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
  103. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
  104. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +4 -1
  105. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
  106. package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
  107. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
  108. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -17
  109. package/dist/extensions/pi-subagents/src/missions/store.ts +151 -9
  110. package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
  111. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +260 -0
  112. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
  113. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +374 -0
  114. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +46 -0
  115. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +158 -36
  116. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
  117. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +26 -4
  118. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -6
  119. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +33 -15
  120. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
  121. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
  122. package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +17 -3
  124. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
  125. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
  127. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
  128. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +26 -3
  129. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
  130. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
  131. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
  132. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +233 -101
  133. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
  134. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
  135. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
  136. package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
  137. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
  138. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
  139. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +40 -2
  140. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +188 -46
  141. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +12 -0
  142. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
  143. package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +171 -0
  144. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1365 -252
  145. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
  146. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +178 -26
  147. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  148. package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +286 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +32 -5
  151. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
  152. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +509 -117
  154. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
  155. package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
  156. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +4 -2
  157. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
  158. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -5
  159. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +20 -8
  160. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
  161. package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
  162. package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
  163. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
  164. package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
  165. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
  166. package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
  167. package/dist/extensions/pi-subagents/src/shared/types.ts +192 -3
  168. package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
  169. package/dist/extensions/pi-subagents/src/shared/utils.ts +46 -34
  170. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
  171. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
  172. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
  173. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
  174. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
  175. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
  176. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
  177. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +37 -21
  178. package/dist/extensions/pi-subagents/src/tui/fleet.ts +375 -42
  179. package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
  180. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
  181. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
  182. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
  183. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +332 -27
  184. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
  185. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  186. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  187. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  188. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  189. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  190. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  191. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  192. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  193. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  194. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  195. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  196. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  197. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  198. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  199. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  200. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
  362. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +102 -15
  363. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +507 -306
  364. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
  365. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +124 -58
  366. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
  367. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +167 -113
  368. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
  369. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
  370. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +139 -58
  371. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +324 -59
  372. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +98 -22
  373. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
  374. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
  375. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
  376. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1122 -96
  377. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
  378. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  379. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
  380. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  381. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  382. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
  383. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
  384. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +194 -59
  385. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +317 -0
  386. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
  387. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
  388. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
  389. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
  390. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  391. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +118 -99
  392. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
  393. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  394. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
  395. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
  396. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
  397. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
  398. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +18 -3
  399. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +99 -40
  400. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
  401. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
  402. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
  403. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +94 -23
  404. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  405. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  406. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  407. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
  408. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  409. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +70 -52
  410. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
  411. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
  412. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
  413. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
  414. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
  415. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +30 -2
  416. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  417. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  418. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
  419. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +91 -47
  420. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +468 -38
  421. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +14 -4
  422. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
  423. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
  424. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
  425. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
  426. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
  427. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +7 -6
  428. package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +171 -0
  429. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
  430. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +81 -7
  431. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
  432. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +42 -1
  433. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
  434. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
  435. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
  436. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
  437. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
  438. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
  439. package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +69 -0
  440. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
  441. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
  442. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  443. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  444. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
  445. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
  446. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +440 -92
  447. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +24 -8
  448. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
  449. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
  450. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  451. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +59 -6
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
  455. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
  456. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +51 -0
  457. package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
  458. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
  459. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
  460. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
  461. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +111 -31
  462. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +121 -0
  463. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  464. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +65 -50
  465. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
  466. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  467. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +60 -44
  468. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
  469. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +28 -0
  470. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
  471. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
  472. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  473. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +130 -92
  474. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  475. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
  476. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  477. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
  478. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
  479. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
  480. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +65 -26
  481. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +138 -0
  482. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
  483. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
  484. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
  485. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  486. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  487. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  488. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  489. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
  490. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
  491. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  492. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
  493. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +68 -7
  494. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
  495. package/dist/extensions/workflow/extension.ts +21 -19
  496. package/dist/extensions/workflow/modes.ts +65 -0
  497. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  498. package/dist/modes/interactive/interactive-mode.js +48 -1
  499. package/dist/skills/pi-subagents/SKILL.md +20 -15
  500. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
  501. package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
  502. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
  503. package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
  504. package/docs/plans/workflow-autoloop-reference.md +192 -0
  505. package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
  506. package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
  507. package/docs/quickstart.md +27 -43
  508. package/docs/settings.md +4 -0
  509. package/docs/usage.md +1 -0
  510. package/package.json +2 -1
  511. package/dist/extensions/workflow/adapter.ts +0 -949
  512. package/dist/extensions/workflow/modes/loop.ts +0 -74
  513. package/dist/extensions/workflow/modes/prototype.ts +0 -170
  514. package/dist/extensions/workflow/modes/quicktype.ts +0 -150
  515. package/dist/extensions/workflow/modes/task.ts +0 -105
  516. package/dist/extensions/workflow/run-state.ts +0 -124
  517. package/dist/extensions/workflow/state-machine.ts +0 -484
  518. package/dist/extensions/workflow/validators.ts +0 -42
@@ -221,12 +221,12 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
221
221
  it("pauses foreground chains at approval checkpoints without launching the next child", async () => {
222
222
  mockPi.onCall({ output: "analysis done" });
223
223
  mockPi.onCall({ output: "should not run" });
224
- const agents = [makeAgent("analyst"), makeAgent("builder")];
224
+ const agents = [makeAgent("analyst"), makeAgent("worker")];
225
225
 
226
226
  const result = await executeChain!(makeChainParams([
227
227
  { agent: "analyst", task: "Analyze" },
228
228
  { checkpoint: "review", message: "Approve implementation?" },
229
- { agent: "builder", task: "Implement" },
229
+ { agent: "worker", task: "Implement" },
230
230
  ], agents));
231
231
 
232
232
  assert.equal(result.isError, undefined);
@@ -241,10 +241,10 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
241
241
 
242
242
  it("applies global permissions to foreground chain children", async () => {
243
243
  mockPi.onCall({ echoEnv: [PERMISSION_POLICY_ENV, PERMISSION_AUDIT_PATH_ENV] });
244
- const agents = [makeAgent("builder")];
244
+ const agents = [makeAgent("worker")];
245
245
 
246
246
  const result = await executeChain!(makeChainParams(
247
- [{ agent: "builder", task: "Work" }],
247
+ [{ agent: "worker", task: "Work" }],
248
248
  agents,
249
249
  { permissions: { rules: { write: "ask" } } },
250
250
  ));
@@ -410,11 +410,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
410
410
  "```",
411
411
  ].join("\n"),
412
412
  });
413
- const agents = [makeAgent("builder", { completionGuard: false })];
413
+ const agents = [makeAgent("worker", { completionGuard: false })];
414
414
 
415
415
  const result = await executeChain(
416
416
  makeChainParams(
417
- [{ agent: "builder", task: "Implement fix", output: "accepted.md", outputMode: "file-only", acceptance: { level: "checked", criteria: ["Patch bug"] } }],
417
+ [{ agent: "worker", task: "Implement fix", output: "accepted.md", outputMode: "file-only", acceptance: { level: "checked", criteria: ["Patch bug"] } }],
418
418
  agents,
419
419
  { chainDir: tempDir },
420
420
  ),
@@ -442,7 +442,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
442
442
 
443
443
  const failed = await executeChain(
444
444
  makeChainParams(
445
- [{ agent: "builder", task: "Implement fix", acceptance: { level: "checked" } }],
445
+ [{ agent: "worker", task: "Implement fix", acceptance: { level: "checked" } }],
446
446
  agents,
447
447
  ),
448
448
  );
@@ -467,11 +467,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
467
467
  "```",
468
468
  ].join("\n");
469
469
  mockPi.onCall({ output: acceptanceReport });
470
- const agents = [makeAgent("builder", { completionGuard: false })];
470
+ const agents = [makeAgent("worker", { completionGuard: false })];
471
471
 
472
472
  const result = await executeChain(
473
473
  makeChainParams(
474
- [{ agent: "builder", task: "Implement fix", acceptance: { level: "verified", verify: [{ id: "runtime-pass", command: "node -e \"process.exit(0)\"" }] } }],
474
+ [{ agent: "worker", task: "Implement fix", acceptance: { level: "verified", verify: [{ id: "runtime-pass", command: "node -e \"process.exit(0)\"" }] } }],
475
475
  agents,
476
476
  ),
477
477
  );
@@ -482,7 +482,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
482
482
  mockPi.onCall({ output: acceptanceReport });
483
483
  const failed = await executeChain(
484
484
  makeChainParams(
485
- [{ agent: "builder", task: "Implement fix", acceptance: { level: "verified", verify: [{ id: "runtime-fail", command: "node -e \"process.exit(5)\"" }] } }],
485
+ [{ agent: "worker", task: "Implement fix", acceptance: { level: "verified", verify: [{ id: "runtime-fail", command: "node -e \"process.exit(5)\"" }] } }],
486
486
  agents,
487
487
  ),
488
488
  );
@@ -560,8 +560,8 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
560
560
 
561
561
  const result = await executeChain(
562
562
  makeChainParams(
563
- [{ agent: "builder", task: "Do work" }],
564
- [makeAgent("builder")],
563
+ [{ agent: "worker", task: "Do work" }],
564
+ [makeAgent("worker")],
565
565
  {
566
566
  ctx: {
567
567
  ...makeMinimalCtx(tempDir),
@@ -582,8 +582,8 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
582
582
 
583
583
  const result = await executeChain(
584
584
  makeChainParams(
585
- [{ agent: "builder", task: "Do work", model: "inherit" }],
586
- [makeAgent("builder")],
585
+ [{ agent: "worker", task: "Do work", model: "inherit" }],
586
+ [makeAgent("worker")],
587
587
  {
588
588
  ctx: {
589
589
  ...makeMinimalCtx(tempDir),
@@ -601,11 +601,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
601
601
 
602
602
  it("suppresses progress for {task} chain templates when the top-level task is review-only", async () => {
603
603
  mockPi.onCall({ output: "Review done" });
604
- const agents = [makeAgent("commentator", { defaultProgress: true })];
604
+ const agents = [makeAgent("reviewer", { defaultProgress: true })];
605
605
 
606
606
  await executeChain(
607
607
  makeChainParams(
608
- [{ agent: "commentator" }],
608
+ [{ agent: "reviewer" }],
609
609
  agents,
610
610
  { task: "Review-only. Do not edit files. Return findings." },
611
611
  ),
@@ -616,15 +616,36 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
616
616
  assert.equal(fs.existsSync(path.join(tempDir, "progress.md")), false);
617
617
  });
618
618
 
619
+ it("foreground chains resolve explicit reads inside the chain directory", async () => {
620
+ mockPi.onCall({ output: "Review done" });
621
+ const chainDir = path.join(tempDir, "chain-reads");
622
+ const runId = "chain-reads-run";
623
+ const runDir = path.join(chainDir, runId);
624
+ fs.mkdirSync(runDir, { recursive: true });
625
+ fs.writeFileSync(path.join(runDir, "plan.md"), "chain plan");
626
+ fs.writeFileSync(path.join(runDir, "progress.md"), "chain progress");
627
+
628
+ await executeChain!(makeChainParams(
629
+ [{ agent: "reviewer", task: "Review the chain artifacts.", reads: ["plan.md", "progress.md"] }],
630
+ [makeAgent("reviewer")],
631
+ { chainDir, runId },
632
+ ));
633
+
634
+ const taskArg = readCallArgs(0).at(-1) ?? "";
635
+ assert.ok(taskArg.includes("[Read from: "));
636
+ assert.ok(taskArg.includes(path.join(runDir, "plan.md")));
637
+ assert.ok(taskArg.includes(path.join(runDir, "progress.md")));
638
+ });
639
+
619
640
  it("foreground chains still resolve defaultProgress inside the chain directory", async () => {
620
641
  mockPi.onCall({ output: "Progress done" });
621
- const agents = [makeAgent("commentator", { defaultProgress: true })];
642
+ const agents = [makeAgent("reviewer", { defaultProgress: true })];
622
643
  const chainDir = path.join(tempDir, "chain-progress");
623
644
  const runId = "chain-progress-run";
624
645
 
625
646
  await executeChain(
626
647
  makeChainParams(
627
- [{ agent: "commentator", task: "Track chain work" }],
648
+ [{ agent: "reviewer", task: "Track chain work" }],
628
649
  agents,
629
650
  { chainDir, runId },
630
651
  ),
@@ -646,10 +667,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
646
667
  );
647
668
 
648
669
  assert.ok(!result.isError);
649
- const step2Task = result.details.results[1].task;
670
+ assert.equal(result.details.results[1].task, "[prompt redacted]");
671
+ const step2Task = readCallArgs(1).at(-1) ?? "";
650
672
  assert.ok(
651
673
  step2Task.includes("MARKER_ABC_123"),
652
- `step 2 task should contain step 1 output via {previous}: ${step2Task.slice(0, 200)}`,
674
+ `step 2 invocation should contain step 1 output via {previous}: ${step2Task.slice(0, 200)}`,
653
675
  );
654
676
  });
655
677
 
@@ -681,16 +703,16 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
681
703
  mockPi.onCall({ output: "review-a", structuredOutput: { ok: "a" } });
682
704
  mockPi.onCall({ output: "review-b", structuredOutput: { ok: "b" } });
683
705
  mockPi.onCall({ output: "synthesized" });
684
- const agents = [makeAgent("explorer"), makeAgent("commentator"), makeAgent("writer")];
706
+ const agents = [makeAgent("scout"), makeAgent("reviewer"), makeAgent("writer")];
685
707
 
686
708
  const result = await executeChain(
687
709
  makeChainParams(
688
710
  [
689
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
711
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
690
712
  {
691
713
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
692
714
  parallel: {
693
- agent: "commentator",
715
+ agent: "reviewer",
694
716
  task: "Review {target.path}",
695
717
  label: "Review {target.path}",
696
718
  outputSchema: { type: "object" },
@@ -724,14 +746,14 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
724
746
  });
725
747
  mockPi.onCall({ echoEnv: [PERMISSION_POLICY_ENV, PERMISSION_AUDIT_PATH_ENV], structuredOutput: { ok: "a" } });
726
748
  mockPi.onCall({ echoEnv: [PERMISSION_POLICY_ENV, PERMISSION_AUDIT_PATH_ENV], structuredOutput: { ok: "b" } });
727
- const agents = [makeAgent("explorer"), makeAgent("commentator")];
749
+ const agents = [makeAgent("scout"), makeAgent("reviewer")];
728
750
 
729
751
  const result = await executeChain!(makeChainParams(
730
752
  [
731
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
753
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
732
754
  {
733
755
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
734
- parallel: { agent: "commentator", task: "Review {item.path}", outputSchema: { type: "object" } },
756
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputSchema: { type: "object" } },
735
757
  collect: { as: "reviews" },
736
758
  concurrency: 1,
737
759
  },
@@ -741,7 +763,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
741
763
  ));
742
764
 
743
765
  assert.equal(result.isError, undefined);
744
- const reviewerResults = result.details.results.filter((entry) => entry.agent === "commentator");
766
+ const reviewerResults = result.details.results.filter((entry) => entry.agent === "reviewer");
745
767
  assert.equal(reviewerResults.length, 2);
746
768
  for (const child of reviewerResults) {
747
769
  const env = JSON.parse(child.finalOutput ?? "{}") as Record<string, string | null>;
@@ -757,15 +779,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
757
779
  });
758
780
  mockPi.onCall({ output: acceptanceReport({ changedFiles: ["src/a.ts"] }), structuredOutput: { ok: "a" } });
759
781
  mockPi.onCall({ output: acceptanceReport({ changedFiles: ["src/b.ts"] }), structuredOutput: { ok: "b" } });
760
- const agents = [makeAgent("explorer"), makeAgent("commentator", { completionGuard: false })];
782
+ const agents = [makeAgent("scout"), makeAgent("reviewer", { completionGuard: false })];
761
783
 
762
784
  const result = await executeChain(
763
785
  makeChainParams(
764
786
  [
765
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
787
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
766
788
  {
767
789
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
768
- parallel: { agent: "commentator", task: "Review {item.path}", outputSchema: { type: "object" }, acceptance: { level: "checked" } },
790
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputSchema: { type: "object" }, acceptance: { level: "checked" } },
769
791
  collect: { as: "reviews" },
770
792
  acceptance: { level: "checked" },
771
793
  concurrency: 1,
@@ -779,7 +801,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
779
801
  const dynamicNode = result.details.workflowGraph?.nodes[1];
780
802
  assert.equal(dynamicNode?.acceptanceStatus, "review-required");
781
803
  assert.deepEqual(dynamicNode?.children?.map((child) => child.acceptanceStatus), ["checked", "checked"]);
782
- assert.deepEqual(result.details.results.filter((child) => child.agent === "commentator").map((child) => child.acceptance?.evidenceStatus), ["checked", "checked"]);
804
+ assert.deepEqual(result.details.results.filter((child) => child.agent === "reviewer").map((child) => child.acceptance?.evidenceStatus), ["checked", "checked"]);
783
805
  });
784
806
 
785
807
  it("applies read-only acceptance roles to dynamic children and their aggregate group", async () => {
@@ -796,15 +818,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
796
818
  });
797
819
  mockPi.onCall({ output: readOnlyReport, structuredOutput: { ok: "a" } });
798
820
  mockPi.onCall({ output: readOnlyReport, structuredOutput: { ok: "b" } });
799
- const agents = [makeAgent("explorer"), makeAgent("recapper", { acceptanceRole: "read-only" })];
821
+ const agents = [makeAgent("scout"), makeAgent("explorer", { acceptanceRole: "read-only" })];
800
822
 
801
823
  const result = await executeChain(
802
824
  makeChainParams(
803
825
  [
804
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
826
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
805
827
  {
806
828
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
807
- parallel: { agent: "recapper", task: "Explore {item.path}", outputSchema: { type: "object" } },
829
+ parallel: { agent: "explorer", task: "Explore {item.path}", outputSchema: { type: "object" } },
808
830
  collect: { as: "reviews" },
809
831
  concurrency: 1,
810
832
  },
@@ -814,7 +836,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
814
836
  );
815
837
 
816
838
  assert.ok(!result.isError, `chain should succeed: ${JSON.stringify(result.content)}`);
817
- const explorerResults = result.details.results.filter((child) => child.agent === "recapper");
839
+ const explorerResults = result.details.results.filter((child) => child.agent === "explorer");
818
840
  assert.deepEqual(explorerResults.map((child) => child.acceptance?.effectiveAcceptance.level), ["attested", "attested"]);
819
841
  const dynamicNode = result.details.workflowGraph?.nodes[1];
820
842
  assert.equal(dynamicNode?.acceptanceStatus, "attested");
@@ -828,15 +850,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
828
850
  });
829
851
  mockPi.onCall({ output: acceptanceReport({ changedFiles: ["src/a.ts"] }), structuredOutput: { ok: "a" } });
830
852
  mockPi.onCall({ output: acceptanceReport({ changedFiles: ["src/b.ts"] }), structuredOutput: { ok: "b" } });
831
- const agents = [makeAgent("explorer"), makeAgent("recapper", { acceptanceRole: "read-only" })];
853
+ const agents = [makeAgent("scout"), makeAgent("explorer", { acceptanceRole: "read-only" })];
832
854
 
833
855
  const result = await executeChain(
834
856
  makeChainParams(
835
857
  [
836
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
858
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
837
859
  {
838
860
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
839
- parallel: { agent: "recapper", task: "Patch {item.path}", outputSchema: { type: "object" } },
861
+ parallel: { agent: "explorer", task: "Patch {item.path}", outputSchema: { type: "object" } },
840
862
  collect: { as: "reviews" },
841
863
  concurrency: 1,
842
864
  },
@@ -846,7 +868,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
846
868
  );
847
869
 
848
870
  assert.ok(!result.isError, `chain should succeed: ${JSON.stringify(result.content)}`);
849
- const explorerResults = result.details.results.filter((child) => child.agent === "recapper");
871
+ const explorerResults = result.details.results.filter((child) => child.agent === "explorer");
850
872
  assert.deepEqual(explorerResults.map((child) => child.acceptance?.effectiveAcceptance.level), ["checked", "checked"]);
851
873
  const dynamicNode = result.details.workflowGraph?.nodes[1];
852
874
  assert.equal(dynamicNode?.acceptanceStatus, "rejected");
@@ -860,15 +882,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
860
882
  });
861
883
  mockPi.onCall({ output: "review-a", structuredOutput: { ok: "a" } });
862
884
  mockPi.onCall({ exitCode: 1, stderr: "review-b failed" });
863
- const agents = [makeAgent("explorer"), makeAgent("commentator")];
885
+ const agents = [makeAgent("scout"), makeAgent("reviewer")];
864
886
 
865
887
  const result = await executeChain(
866
888
  makeChainParams(
867
889
  [
868
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
890
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
869
891
  {
870
892
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
871
- parallel: { agent: "commentator", task: "Review {item.path}", outputSchema: { type: "object" } },
893
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputSchema: { type: "object" } },
872
894
  collect: { as: "reviews" },
873
895
  concurrency: 1,
874
896
  },
@@ -885,15 +907,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
885
907
 
886
908
  it("fails dynamic fanout before spawning children for invalid source arrays", async () => {
887
909
  mockPi.onCall({ output: "targets", structuredOutput: { items: [{ path: "a" }, { path: "b" }] } });
888
- const agents = [makeAgent("explorer"), makeAgent("commentator")];
910
+ const agents = [makeAgent("scout"), makeAgent("reviewer")];
889
911
 
890
912
  const result = await executeChain(
891
913
  makeChainParams(
892
914
  [
893
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
915
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
894
916
  {
895
917
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 1 },
896
- parallel: { agent: "commentator", task: "Review {item.path}" },
918
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
897
919
  collect: { as: "reviews" },
898
920
  },
899
921
  ],
@@ -910,15 +932,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
910
932
 
911
933
  it("marks dynamic file-only validation failures as failed graph groups before spawning children", async () => {
912
934
  mockPi.onCall({ output: "targets", structuredOutput: { items: [{ path: "src/a.ts" }] } });
913
- const agents = [makeAgent("explorer"), makeAgent("commentator")];
935
+ const agents = [makeAgent("scout"), makeAgent("reviewer")];
914
936
 
915
937
  const result = await executeChain(
916
938
  makeChainParams(
917
939
  [
918
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
940
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
919
941
  {
920
942
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
921
- parallel: { agent: "commentator", task: "Review {item.path}", outputMode: "file-only" },
943
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputMode: "file-only" },
922
944
  collect: { as: "reviews" },
923
945
  },
924
946
  ],
@@ -937,15 +959,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
937
959
  it("marks empty dynamic fanout skip as a completed graph group", async () => {
938
960
  mockPi.onCall({ output: "targets", structuredOutput: { items: [] } });
939
961
  mockPi.onCall({ output: "used empty reviews" });
940
- const agents = [makeAgent("explorer"), makeAgent("commentator"), makeAgent("writer")];
962
+ const agents = [makeAgent("scout"), makeAgent("reviewer"), makeAgent("writer")];
941
963
 
942
964
  const result = await executeChain(
943
965
  makeChainParams(
944
966
  [
945
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
967
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
946
968
  {
947
969
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4, onEmpty: "skip" },
948
- parallel: { agent: "commentator", task: "Review {item.path}" },
970
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
949
971
  collect: { as: "reviews" },
950
972
  },
951
973
  { agent: "writer", task: "Use {outputs.reviews}" },
@@ -964,15 +986,15 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
964
986
  it("marks dynamic collect schema failures as failed graph groups", async () => {
965
987
  mockPi.onCall({ output: "targets", structuredOutput: { items: [{ path: "src/a.ts" }] } });
966
988
  mockPi.onCall({ output: "review-a", structuredOutput: { ok: "a" } });
967
- const agents = [makeAgent("explorer"), makeAgent("commentator")];
989
+ const agents = [makeAgent("scout"), makeAgent("reviewer")];
968
990
 
969
991
  const result = await executeChain(
970
992
  makeChainParams(
971
993
  [
972
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
994
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
973
995
  {
974
996
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
975
- parallel: { agent: "commentator", task: "Review {item.path}", outputSchema: { type: "object" } },
997
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputSchema: { type: "object" } },
976
998
  collect: { as: "reviews", outputSchema: { type: "object" } },
977
999
  },
978
1000
  ],
@@ -993,16 +1015,16 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
993
1015
  mockPi.onCall({ output: "review-a", structuredOutput: { ok: "a" } });
994
1016
  mockPi.onCall({ output: "review-b", structuredOutput: { ok: "b" } });
995
1017
  mockPi.onCall({ steps: [{ jsonl: [events.assistantMessage("writer started")] }] });
996
- const agents = [makeAgent("explorer"), makeAgent("commentator"), makeAgent("writer")];
1018
+ const agents = [makeAgent("scout"), makeAgent("reviewer"), makeAgent("writer")];
997
1019
  let writerUpdateChildren: Array<{ itemKey?: string; status?: string }> | undefined;
998
1020
 
999
1021
  const result = await executeChain(
1000
1022
  makeChainParams(
1001
1023
  [
1002
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
1024
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
1003
1025
  {
1004
1026
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
1005
- parallel: { agent: "commentator", task: "Review {item.path}", outputSchema: { type: "object" } },
1027
+ parallel: { agent: "reviewer", task: "Review {item.path}", outputSchema: { type: "object" } },
1006
1028
  collect: { as: "reviews" },
1007
1029
  concurrency: 1,
1008
1030
  },
@@ -1063,10 +1085,10 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1063
1085
  properties: { ok: { type: "boolean" }, note: { type: "string" } },
1064
1086
  };
1065
1087
  mockPi.onCall({ output: "prose", structuredOutput: { ok: true, note: "captured" } });
1066
- const agents = [makeAgent("builder")];
1088
+ const agents = [makeAgent("worker")];
1067
1089
 
1068
1090
  const result = await executeChain(
1069
- makeChainParams([{ agent: "builder", task: "Return structured", outputSchema: schema }], agents),
1091
+ makeChainParams([{ agent: "worker", task: "Return structured", outputSchema: schema }], agents),
1070
1092
  );
1071
1093
 
1072
1094
  assert.ok(!result.isError);
@@ -1075,7 +1097,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1075
1097
  mockPi.reset();
1076
1098
  mockPi.onCall({ structuredOutput: { ok: true, note: "tool-only" } });
1077
1099
  const structuredOnly = await executeChain(
1078
- makeChainParams([{ agent: "builder", task: "Return structured", outputSchema: schema }], agents),
1100
+ makeChainParams([{ agent: "worker", task: "Return structured", outputSchema: schema }], agents),
1079
1101
  );
1080
1102
  assert.ok(!structuredOnly.isError);
1081
1103
  assert.deepEqual(structuredOnly.details.results[0]?.structuredOutput, { ok: true, note: "tool-only" });
@@ -1083,15 +1105,23 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1083
1105
  mockPi.reset();
1084
1106
  mockPi.onCall({ output: "prose only" });
1085
1107
  const missing = await executeChain(
1086
- makeChainParams([{ agent: "builder", task: "Return structured", outputSchema: schema }], agents),
1108
+ makeChainParams([{ agent: "worker", task: "Return structured", outputSchema: schema }], agents),
1087
1109
  );
1088
1110
  assert.equal(missing.isError, true);
1089
1111
  assert.match(missing.details.results[0]?.error ?? "", /Missing structured_output call/);
1090
1112
 
1113
+ mockPi.reset();
1114
+ mockPi.onCall({ output: "prose only" });
1115
+ const missingImplementation = await executeChain(
1116
+ makeChainParams([{ agent: "worker", task: "Implement the fix and return structured data", outputSchema: schema }], agents),
1117
+ );
1118
+ assert.equal(missingImplementation.isError, true);
1119
+ assert.match(missingImplementation.details.results[0]?.error ?? "", /Missing structured_output call/);
1120
+
1091
1121
  mockPi.reset();
1092
1122
  mockPi.onCall({ output: "invalid", structuredOutput: { ok: "yes" } });
1093
1123
  const invalid = await executeChain(
1094
- makeChainParams([{ agent: "builder", task: "Return structured", outputSchema: schema, phase: "Validate", label: "Structured builder", as: "result" }], agents),
1124
+ makeChainParams([{ agent: "worker", task: "Return structured", outputSchema: schema, phase: "Validate", label: "Structured worker", as: "result" }], agents),
1095
1125
  );
1096
1126
  assert.equal(invalid.isError, true);
1097
1127
  assert.match(invalid.details.results[0]?.error ?? "", /Structured output validation failed/);
@@ -1100,33 +1130,56 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1100
1130
  assert.match(invalid.details.workflowGraph?.nodes[0]?.error ?? "", /Structured output validation failed/);
1101
1131
  });
1102
1132
 
1133
+ it("accepts recovered tool errors before valid structured output", async () => {
1134
+ mockPi.onCall({
1135
+ jsonl: [{
1136
+ type: "tool_result_end",
1137
+ message: { role: "toolResult", toolName: "read", isError: true, content: [{ type: "text", text: "EISDIR" }] },
1138
+ }],
1139
+ structuredOutput: { ok: true },
1140
+ });
1141
+ const agents = [makeAgent("worker")];
1142
+
1143
+ const result = await executeChain(
1144
+ makeChainParams([{
1145
+ agent: "worker",
1146
+ task: "Recover and return structured data",
1147
+ outputSchema: { type: "object", required: ["ok"], properties: { ok: { type: "boolean" } } },
1148
+ }], agents),
1149
+ );
1150
+
1151
+ assert.ok(!result.isError, `chain should succeed: ${JSON.stringify(result.content)}`);
1152
+ assert.deepEqual(result.details.results[0]?.structuredOutput, { ok: true });
1153
+ });
1154
+
1103
1155
  it("substitutes {task} in templates", async () => {
1104
1156
  mockPi.onCall({ output: "Done" });
1105
- const agents = [makeAgent("builder")];
1157
+ const agents = [makeAgent("worker")];
1106
1158
 
1107
1159
  const result = await executeChain(
1108
1160
  makeChainParams(
1109
- [{ agent: "builder", task: "Review {task} carefully" }],
1161
+ [{ agent: "worker", task: "Review {task} carefully" }],
1110
1162
  agents,
1111
1163
  { task: "the authentication module" },
1112
1164
  ),
1113
1165
  );
1114
1166
 
1115
1167
  assert.ok(!result.isError);
1116
- const workerTask = result.details.results[0].task;
1168
+ assert.equal(result.details.results[0].task, "[prompt redacted]");
1169
+ const workerTask = readCallArgs(0).at(-1) ?? "";
1117
1170
  assert.ok(
1118
1171
  workerTask.includes("the authentication module"),
1119
- `should substitute {task}: ${workerTask.slice(0, 200)}`,
1172
+ `should substitute {task} in the child invocation: ${workerTask.slice(0, 200)}`,
1120
1173
  );
1121
1174
  });
1122
1175
 
1123
1176
  it("creates and uses chain_dir", async () => {
1124
1177
  mockPi.onCall({ output: "Done" });
1125
- const agents = [makeAgent("builder")];
1178
+ const agents = [makeAgent("worker")];
1126
1179
 
1127
1180
  const result = await executeChain(
1128
1181
  makeChainParams(
1129
- [{ agent: "builder", task: "Write to {chain_dir}" }],
1182
+ [{ agent: "worker", task: "Write to {chain_dir}" }],
1130
1183
  agents,
1131
1184
  ),
1132
1185
  );
@@ -1199,13 +1252,13 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1199
1252
 
1200
1253
  it("runs a 3-step chain end-to-end", async () => {
1201
1254
  mockPi.onCall({ output: "Step output" });
1202
- const agents = [makeAgent("explorer"), makeAgent("architect"), makeAgent("executor")];
1255
+ const agents = [makeAgent("scout"), makeAgent("planner"), makeAgent("executor")];
1203
1256
 
1204
1257
  const result = await executeChain(
1205
1258
  makeChainParams(
1206
1259
  [
1207
- { agent: "explorer", task: "Survey the codebase" },
1208
- { agent: "architect" },
1260
+ { agent: "scout", task: "Survey the codebase" },
1261
+ { agent: "planner" },
1209
1262
  { agent: "executor" },
1210
1263
  ],
1211
1264
  agents,
@@ -1217,16 +1270,16 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1217
1270
  assert.ok(result.details.results.every((r) => r.exitCode === 0));
1218
1271
  });
1219
1272
 
1220
- it("runs a 40-step alternating builder and commentator chain", async () => {
1273
+ it("runs a 40-step alternating worker and reviewer chain", async () => {
1221
1274
  const chainLength = 40;
1222
1275
  for (let i = 0; i < chainLength; i++) {
1223
1276
  mockPi.onCall({ output: `step-${i}-output` });
1224
1277
  }
1225
1278
  const chain = Array.from({ length: chainLength }, (_, i): TestSequentialStep => ({
1226
- agent: i % 2 === 0 ? "builder" : "commentator",
1227
- ...(i === 0 ? { task: "Start long builder/commentator chain" } : {}),
1279
+ agent: i % 2 === 0 ? "worker" : "reviewer",
1280
+ ...(i === 0 ? { task: "Start long worker/reviewer chain" } : {}),
1228
1281
  }));
1229
- const agents = [makeAgent("builder"), makeAgent("commentator")];
1282
+ const agents = [makeAgent("worker"), makeAgent("reviewer")];
1230
1283
 
1231
1284
  const result = await executeChain(makeChainParams(chain, agents));
1232
1285
 
@@ -1236,7 +1289,7 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1236
1289
  assert.equal(result.details.totalSteps, chainLength);
1237
1290
  assert.equal(result.details.chainAgents?.length, chainLength);
1238
1291
  assert.equal(result.details.workflowGraph?.nodes.length, chainLength);
1239
- assert.equal(result.details.workflowGraph?.nodes.at(-1)?.agent, "commentator");
1292
+ assert.equal(result.details.workflowGraph?.nodes.at(-1)?.agent, "reviewer");
1240
1293
  assert.equal(result.details.workflowGraph?.nodes.at(-1)?.flatIndex, chainLength - 1);
1241
1294
  assert.ok(result.details.results.every((r) => r.exitCode === 0));
1242
1295
  assert.deepEqual(
@@ -1251,11 +1304,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1251
1304
  });
1252
1305
 
1253
1306
  it("returns error for unknown agent in chain", async () => {
1254
- const agents = [makeAgent("explorer")];
1307
+ const agents = [makeAgent("scout")];
1255
1308
 
1256
1309
  const result = await executeChain(
1257
1310
  makeChainParams(
1258
- [{ agent: "explorer", task: "Start" }, { agent: "nonexistent" }],
1311
+ [{ agent: "scout", task: "Start" }, { agent: "nonexistent" }],
1259
1312
  agents,
1260
1313
  ),
1261
1314
  );
@@ -1301,12 +1354,12 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1301
1354
 
1302
1355
  it("uses custom chainDir when provided", async () => {
1303
1356
  mockPi.onCall({ output: "Done" });
1304
- const agents = [makeAgent("builder")];
1357
+ const agents = [makeAgent("worker")];
1305
1358
  const customChainDir = path.join(tempDir, "my-chain");
1306
1359
 
1307
1360
  const result = await executeChain(
1308
1361
  makeChainParams(
1309
- [{ agent: "builder", task: "Use {chain_dir}" }],
1362
+ [{ agent: "worker", task: "Use {chain_dir}" }],
1310
1363
  agents,
1311
1364
  { chainDir: customChainDir },
1312
1365
  ),
@@ -1323,11 +1376,11 @@ describe("chain execution — sequential", { skip: !available ? "pi packages not
1323
1376
  delete process.env.SELESAI_SUBAGENT_MAX_DEPTH;
1324
1377
  try {
1325
1378
  mockPi.onCall({ echoEnv: ["SELESAI_SUBAGENT_DEPTH", "SELESAI_SUBAGENT_MAX_DEPTH"] });
1326
- const agents = [makeAgent("builder", { maxSubagentDepth: 1 })];
1379
+ const agents = [makeAgent("worker", { maxSubagentDepth: 1 })];
1327
1380
 
1328
1381
  const result = await executeChain(
1329
1382
  makeChainParams(
1330
- [{ agent: "builder", task: "Inspect env" }],
1383
+ [{ agent: "worker", task: "Inspect env" }],
1331
1384
  agents,
1332
1385
  { maxSubagentDepth: 3 },
1333
1386
  ),
@@ -1416,15 +1469,15 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1416
1469
 
1417
1470
  it("runs parallel tasks within a chain step", async () => {
1418
1471
  mockPi.onCall({ output: "Parallel task done" });
1419
- const agents = [makeAgent("commentator-a"), makeAgent("commentator-b")];
1472
+ const agents = [makeAgent("reviewer-a"), makeAgent("reviewer-b")];
1420
1473
 
1421
1474
  const result = await executeChain(
1422
1475
  makeChainParams(
1423
1476
  [
1424
1477
  {
1425
1478
  parallel: [
1426
- { agent: "commentator-a", task: "Review auth module" },
1427
- { agent: "commentator-b", task: "Review data layer" },
1479
+ { agent: "reviewer-a", task: "Review auth module" },
1480
+ { agent: "reviewer-b", task: "Review data layer" },
1428
1481
  ],
1429
1482
  },
1430
1483
  ],
@@ -1440,13 +1493,13 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1440
1493
  it("applies global permissions to foreground static parallel children", async () => {
1441
1494
  mockPi.onCall({ echoEnv: [PERMISSION_POLICY_ENV, PERMISSION_AUDIT_PATH_ENV] });
1442
1495
  mockPi.onCall({ echoEnv: [PERMISSION_POLICY_ENV, PERMISSION_AUDIT_PATH_ENV] });
1443
- const agents = [makeAgent("commentator-a"), makeAgent("commentator-b")];
1496
+ const agents = [makeAgent("reviewer-a"), makeAgent("reviewer-b")];
1444
1497
 
1445
1498
  const result = await executeChain!(makeChainParams(
1446
1499
  [{
1447
1500
  parallel: [
1448
- { agent: "commentator-a", task: "Review A" },
1449
- { agent: "commentator-b", task: "Review B" },
1501
+ { agent: "reviewer-a", task: "Review A" },
1502
+ { agent: "reviewer-b", task: "Review B" },
1450
1503
  ],
1451
1504
  }],
1452
1505
  agents,
@@ -1474,8 +1527,8 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1474
1527
  const artifactsDir = path.join(tempDir, "artifacts");
1475
1528
  const result = await executeChain(
1476
1529
  makeChainParams(
1477
- [{ parallel: [{ agent: "commentator-a", task: "Review in isolation" }], worktree: true }],
1478
- [makeAgent("commentator-a")],
1530
+ [{ parallel: [{ agent: "reviewer-a", task: "Review in isolation" }], worktree: true }],
1531
+ [makeAgent("reviewer-a")],
1479
1532
  { runId, artifactsDir },
1480
1533
  ),
1481
1534
  );
@@ -1488,7 +1541,7 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1488
1541
  groups: Array<{ stepIndex: number; children: Array<{ agent: string; patch: { path: string } }>; cleanup: { state: string } }>;
1489
1542
  };
1490
1543
  assert.equal(handoff.groups[0]!.stepIndex, 0);
1491
- assert.equal(handoff.groups[0]!.children[0]!.agent, "commentator-a");
1544
+ assert.equal(handoff.groups[0]!.children[0]!.agent, "reviewer-a");
1492
1545
  assert.equal(handoff.groups[0]!.cleanup.state, "complete");
1493
1546
  assert.equal(fs.existsSync(handoff.groups[0]!.children[0]!.patch.path), true);
1494
1547
  assert.match(handoff.groups[0]!.children[0]!.patch.path, /worktree-diffs\/foreground-chain-handoff\/step-0\//);
@@ -1496,15 +1549,15 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1496
1549
 
1497
1550
  it("aggregates parallel outputs for next sequential step", async () => {
1498
1551
  mockPi.onCall({ output: "Review findings here" });
1499
- const agents = [makeAgent("commentator-a"), makeAgent("commentator-b"), makeAgent("synthesizer")];
1552
+ const agents = [makeAgent("reviewer-a"), makeAgent("reviewer-b"), makeAgent("synthesizer")];
1500
1553
 
1501
1554
  const result = await executeChain(
1502
1555
  makeChainParams(
1503
1556
  [
1504
1557
  {
1505
1558
  parallel: [
1506
- { agent: "commentator-a", task: "Review security" },
1507
- { agent: "commentator-b", task: "Review performance" },
1559
+ { agent: "reviewer-a", task: "Review security" },
1560
+ { agent: "reviewer-b", task: "Review performance" },
1508
1561
  ],
1509
1562
  },
1510
1563
  { agent: "synthesizer" },
@@ -1515,14 +1568,15 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1515
1568
 
1516
1569
  assert.ok(!result.isError);
1517
1570
  assert.equal(result.details.results.length, 3);
1518
- const synthTask = result.details.results[2].task;
1571
+ assert.equal(result.details.results[2].task, "[prompt redacted]");
1572
+ const synthTask = readCallArgs(2).at(-1) ?? "";
1519
1573
  assert.ok(
1520
- synthTask.includes("=== Parallel Task 1 (commentator-a) ==="),
1521
- "synthesizer should include commentator-a output block",
1574
+ synthTask.includes("=== Parallel Task 1 (reviewer-a) ==="),
1575
+ "synthesizer should include reviewer-a output block",
1522
1576
  );
1523
1577
  assert.ok(
1524
- synthTask.includes("=== Parallel Task 2 (commentator-b) ==="),
1525
- "synthesizer should include commentator-b output block",
1578
+ synthTask.includes("=== Parallel Task 2 (reviewer-b) ==="),
1579
+ "synthesizer should include reviewer-b output block",
1526
1580
  );
1527
1581
  });
1528
1582
 
@@ -1559,15 +1613,15 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1559
1613
  mockPi.onCall({ matchArgIncludes: "Synthesize:", output: "Funnel synthesis" });
1560
1614
  mockPi.onCall({ matchArgIncludes: "Review funnel A:", output: "Reviewer A done" });
1561
1615
  mockPi.onCall({ matchArgIncludes: "Review funnel B:", output: "Reviewer B done" });
1562
- const agents = [makeAgent("explorer-a"), makeAgent("explorer-b"), makeAgent("synthesizer"), makeAgent("review-a"), makeAgent("review-b")];
1616
+ const agents = [makeAgent("scout-a"), makeAgent("scout-b"), makeAgent("synthesizer"), makeAgent("review-a"), makeAgent("review-b")];
1563
1617
 
1564
1618
  const result = await executeChain(
1565
1619
  makeChainParams(
1566
1620
  [
1567
1621
  {
1568
1622
  parallel: [
1569
- { agent: "explorer-a", task: "Scout API" },
1570
- { agent: "explorer-b", task: "Scout UI" },
1623
+ { agent: "scout-a", task: "Scout API" },
1624
+ { agent: "scout-b", task: "Scout UI" },
1571
1625
  ],
1572
1626
  },
1573
1627
  { agent: "synthesizer", task: "Synthesize:\n{previous}" },
@@ -1583,12 +1637,12 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1583
1637
  );
1584
1638
 
1585
1639
  assert.ok(!result.isError, `should succeed: ${JSON.stringify(result.content)}`);
1586
- assert.deepEqual(result.details.results.map((entry) => entry.agent), ["explorer-a", "explorer-b", "synthesizer", "review-a", "review-b"]);
1640
+ assert.deepEqual(result.details.results.map((entry) => entry.agent), ["scout-a", "scout-b", "synthesizer", "review-a", "review-b"]);
1587
1641
  assert.equal(result.details.totalSteps, 3);
1588
1642
  const funnelTask = readCallArgsMatching("Synthesize:").at(-1) ?? "";
1589
- assert.match(funnelTask, /=== Parallel Task 1 \(explorer-a\) ===/);
1643
+ assert.match(funnelTask, /=== Parallel Task 1 \(scout-a\) ===/);
1590
1644
  assert.match(funnelTask, /Scout A findings/);
1591
- assert.match(funnelTask, /=== Parallel Task 2 \(explorer-b\) ===/);
1645
+ assert.match(funnelTask, /=== Parallel Task 2 \(scout-b\) ===/);
1592
1646
  assert.match(funnelTask, /Scout B findings/);
1593
1647
  const fanoutTaskA = readCallArgsMatching("Review funnel A:").at(-1) ?? "";
1594
1648
  const fanoutTaskB = readCallArgsMatching("Review funnel B:").at(-1) ?? "";
@@ -1601,15 +1655,15 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1601
1655
 
1602
1656
  it("aggregates file-only parallel outputs as file references for the next step", async () => {
1603
1657
  mockPi.onCall({ output: "full parallel chain output\nwith details" });
1604
- const agents = [makeAgent("commentator-a"), makeAgent("commentator-b"), makeAgent("synthesizer")];
1658
+ const agents = [makeAgent("reviewer-a"), makeAgent("reviewer-b"), makeAgent("synthesizer")];
1605
1659
 
1606
1660
  const result = await executeChain(
1607
1661
  makeChainParams(
1608
1662
  [
1609
1663
  {
1610
1664
  parallel: [
1611
- { agent: "commentator-a", task: "Review A", output: "a.md", outputMode: "file-only" },
1612
- { agent: "commentator-b", task: "Review B", output: "b.md", outputMode: "file-only" },
1665
+ { agent: "reviewer-a", task: "Review A", output: "a.md", outputMode: "file-only" },
1666
+ { agent: "reviewer-b", task: "Review B", output: "b.md", outputMode: "file-only" },
1613
1667
  ],
1614
1668
  },
1615
1669
  { agent: "synthesizer" },
@@ -1629,14 +1683,14 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1629
1683
  });
1630
1684
 
1631
1685
  it("rejects chain parallel file-only output without spawning siblings", async () => {
1632
- const agents = [makeAgent("commentator-a"), makeAgent("commentator-b")];
1686
+ const agents = [makeAgent("reviewer-a"), makeAgent("reviewer-b")];
1633
1687
 
1634
1688
  const result = await executeChain(
1635
1689
  makeChainParams(
1636
1690
  [{
1637
1691
  parallel: [
1638
- { agent: "commentator-a", task: "Review A", outputMode: "file-only" },
1639
- { agent: "commentator-b", task: "Review B", output: "b.md" },
1692
+ { agent: "reviewer-a", task: "Review A", outputMode: "file-only" },
1693
+ { agent: "reviewer-b", task: "Review B", output: "b.md" },
1640
1694
  ],
1641
1695
  }],
1642
1696
  agents,
@@ -1779,12 +1833,12 @@ describe("chain execution — parallel steps", { skip: !available ? "pi packages
1779
1833
 
1780
1834
  it("sequential → parallel → sequential (mixed chain)", async () => {
1781
1835
  mockPi.onCall({ output: "Step complete" });
1782
- const agents = [makeAgent("explorer"), makeAgent("rev-a"), makeAgent("rev-b"), makeAgent("writer")];
1836
+ const agents = [makeAgent("scout"), makeAgent("rev-a"), makeAgent("rev-b"), makeAgent("writer")];
1783
1837
 
1784
1838
  const result = await executeChain(
1785
1839
  makeChainParams(
1786
1840
  [
1787
- { agent: "explorer", task: "Initial scan" },
1841
+ { agent: "scout", task: "Initial scan" },
1788
1842
  {
1789
1843
  parallel: [
1790
1844
  { agent: "rev-a", task: "Deep review A" },