@selesai/code 0.8.3 → 0.8.4

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 (493) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/extensions/handoff-new.ts +1 -1
  3. package/dist/extensions/inline-skills.test.ts +1 -0
  4. package/dist/extensions/inline-skills.ts +1 -1
  5. package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
  6. package/dist/extensions/pi-intercom/README.md +34 -15
  7. package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
  8. package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
  9. package/dist/extensions/pi-intercom/broker/client.ts +78 -150
  10. package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
  11. package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
  12. package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
  13. package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
  14. package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
  15. package/dist/extensions/pi-intercom/config.test.ts +8 -10
  16. package/dist/extensions/pi-intercom/config.ts +3 -3
  17. package/dist/extensions/pi-intercom/index.ts +218 -147
  18. package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
  19. package/dist/extensions/pi-intercom/package.json +3 -2
  20. package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
  21. package/dist/extensions/pi-intercom/project-agent.ts +324 -0
  22. package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
  23. package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
  24. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
  25. package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
  26. package/dist/extensions/pi-intercom/types.ts +3 -1
  27. package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
  28. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
  29. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
  30. package/dist/extensions/pi-powerline-footer/README.md +20 -37
  31. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
  32. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
  33. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
  34. package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
  35. package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
  36. package/dist/extensions/pi-powerline-footer/index.ts +394 -317
  37. package/dist/extensions/pi-powerline-footer/package.json +1 -1
  38. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
  39. package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
  40. package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
  41. package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
  42. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
  43. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
  44. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
  45. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
  46. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
  47. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
  48. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
  49. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
  50. package/dist/extensions/pi-powerline-footer/types.ts +1 -2
  51. package/dist/extensions/pi-subagents/CHANGELOG.md +202 -14
  52. package/dist/extensions/pi-subagents/README.md +65 -1614
  53. package/dist/extensions/pi-subagents/agents/builder.md +0 -1
  54. package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
  55. package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
  56. package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
  57. package/dist/extensions/pi-subagents/agents/scout.md +50 -0
  58. package/dist/extensions/pi-subagents/agents/worker.md +58 -0
  59. package/dist/extensions/pi-subagents/docs/configuration.md +328 -0
  60. package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
  61. package/dist/extensions/pi-subagents/docs/missions.md +119 -0
  62. package/dist/extensions/pi-subagents/docs/models.md +192 -0
  63. package/dist/extensions/pi-subagents/docs/observability.md +174 -0
  64. package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
  65. package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
  66. package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
  67. package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
  68. package/dist/extensions/pi-subagents/package-lock.json +152 -194
  69. package/dist/extensions/pi-subagents/package.json +9 -10
  70. package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
  71. package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
  72. package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
  73. package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
  74. package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
  75. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
  76. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
  77. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
  78. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
  79. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
  80. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
  81. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
  82. package/dist/extensions/pi-subagents/src/agents/agents.ts +29 -16
  83. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
  84. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
  85. package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
  86. package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
  87. package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
  88. package/dist/extensions/pi-subagents/src/extension/config.ts +56 -8
  89. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
  90. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
  91. package/dist/extensions/pi-subagents/src/extension/index.ts +119 -50
  92. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +72 -0
  93. package/dist/extensions/pi-subagents/src/extension/rpc.ts +15 -15
  94. package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
  95. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
  96. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
  97. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
  98. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
  99. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
  100. package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
  101. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
  102. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -14
  103. package/dist/extensions/pi-subagents/src/missions/store.ts +147 -5
  104. package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
  105. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +256 -0
  106. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
  107. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +42 -0
  108. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +41 -7
  109. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
  110. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +19 -3
  111. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +39 -6
  112. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
  113. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
  114. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
  115. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
  116. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
  117. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
  118. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +21 -2
  119. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
  120. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
  121. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
  122. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +152 -68
  123. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
  124. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
  125. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
  126. package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
  127. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
  128. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
  129. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +3 -0
  130. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +55 -26
  131. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
  132. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +798 -112
  133. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
  134. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +165 -22
  135. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  136. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
  137. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +9 -5
  138. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
  139. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +1 -0
  140. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +465 -116
  141. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
  142. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
  143. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +2 -2
  144. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +3 -3
  145. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
  146. package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
  147. package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
  148. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
  149. package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
  150. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
  151. package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
  152. package/dist/extensions/pi-subagents/src/shared/types.ts +100 -3
  153. package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
  154. package/dist/extensions/pi-subagents/src/shared/utils.ts +43 -33
  155. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
  156. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
  157. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
  158. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
  159. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
  160. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
  161. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
  162. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +30 -16
  163. package/dist/extensions/pi-subagents/src/tui/fleet.ts +151 -31
  164. package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
  165. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
  166. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
  167. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
  168. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +313 -25
  169. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
  170. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  171. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  172. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  173. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  174. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  175. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  176. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  177. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  178. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  179. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  180. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  181. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  182. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  183. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  184. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  185. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  186. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  187. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  188. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  189. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  190. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  191. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  192. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  193. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  194. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  195. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  196. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  197. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  198. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  199. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  200. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
  347. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +15 -15
  348. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +411 -300
  349. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
  350. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +99 -56
  351. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
  352. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +159 -108
  353. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
  354. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
  355. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +56 -56
  356. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +114 -45
  357. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +57 -19
  358. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
  359. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
  360. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
  361. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +809 -87
  362. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
  363. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  364. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
  365. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  366. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  367. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
  368. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
  369. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +163 -58
  370. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
  371. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
  372. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
  373. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
  374. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  375. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +99 -99
  376. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
  377. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  378. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
  379. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
  380. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
  381. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
  382. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +2 -2
  383. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +94 -40
  384. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
  385. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
  386. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
  387. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +19 -19
  388. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  389. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  390. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  391. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
  392. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  393. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +52 -52
  394. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
  395. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
  396. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
  397. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
  398. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
  399. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
  400. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  401. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  402. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
  403. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +62 -44
  404. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +329 -37
  405. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +4 -4
  406. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
  407. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
  408. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
  409. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
  410. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
  411. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +5 -5
  412. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
  413. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +55 -7
  414. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
  415. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +28 -1
  416. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
  417. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
  418. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
  419. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
  420. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
  421. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
  422. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
  423. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
  424. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  425. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  426. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
  427. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
  428. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +357 -92
  429. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +22 -6
  430. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
  431. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
  432. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  433. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +4 -4
  434. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
  435. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
  436. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
  437. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
  438. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +40 -0
  439. package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
  440. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
  441. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
  442. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
  443. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +107 -27
  444. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  445. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +56 -50
  446. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
  447. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  448. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +59 -44
  449. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
  450. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
  451. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
  452. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  453. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +120 -91
  454. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  455. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
  456. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  457. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
  458. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
  459. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
  460. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +26 -26
  461. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +73 -0
  462. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
  463. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
  464. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
  465. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  466. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  467. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  468. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  469. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
  470. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
  471. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  472. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
  473. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +7 -7
  474. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
  475. package/dist/extensions/workflow/extension.ts +21 -19
  476. package/dist/extensions/workflow/modes.ts +65 -0
  477. package/dist/skills/pi-subagents/SKILL.md +20 -15
  478. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
  479. package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
  480. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
  481. package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
  482. package/docs/plans/workflow-autoloop-reference.md +192 -0
  483. package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
  484. package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
  485. package/package.json +1 -1
  486. package/dist/extensions/workflow/adapter.ts +0 -949
  487. package/dist/extensions/workflow/modes/loop.ts +0 -74
  488. package/dist/extensions/workflow/modes/prototype.ts +0 -170
  489. package/dist/extensions/workflow/modes/quicktype.ts +0 -150
  490. package/dist/extensions/workflow/modes/task.ts +0 -105
  491. package/dist/extensions/workflow/run-state.ts +0 -124
  492. package/dist/extensions/workflow/state-machine.ts +0 -484
  493. package/dist/extensions/workflow/validators.ts +0 -42
@@ -26,6 +26,7 @@ interface ExecutorResult {
26
26
  runId?: string;
27
27
  results?: Array<{ agent?: string; finalOutput?: string; sessionFile?: string; acceptance?: { status?: string }; artifactPaths?: { metadataPath?: string } }>;
28
28
  asyncId?: string;
29
+ workflow?: { value?: unknown };
29
30
  };
30
31
  }
31
32
 
@@ -198,19 +199,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
198
199
  tempArtifactsDir: tempDir,
199
200
  getSubagentSessionRoot: () => tempDir,
200
201
  expandTilde: (value: string) => value,
201
- discoverAgents: () => ({ agents: options.agents ?? [makeAgent("builder")] }),
202
+ discoverAgents: () => ({ agents: options.agents ?? [makeAgent("worker")] }),
202
203
  kill: options.kill,
203
204
  });
204
205
  return { executor, events, state };
205
206
  }
206
207
 
207
208
  it("single foreground runs emit one grouped event and return a compact receipt", async () => {
208
- mockPi.onCall({ output: "Full child output from builder" });
209
+ mockPi.onCall({ output: "Full child output from worker" });
209
210
  const { executor, events } = makeExecutor({ resultDelivery: true });
210
211
 
211
212
  const result = await executor.execute(
212
213
  "single-intercom",
213
- { agent: "builder", task: "Implement feature" },
214
+ { agent: "worker", task: "Implement feature" },
214
215
  new AbortController().signal,
215
216
  undefined,
216
217
  makeMinimalCtx(tempDir),
@@ -221,14 +222,82 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
221
222
  const payload = intercomEvents[0]!.payload as { children?: Array<{ agent?: string; intercomTarget?: string }>; message?: string; mode?: string };
222
223
  assert.equal(payload.mode, "single");
223
224
  assert.equal(payload.children?.length, 1);
224
- assert.equal(payload.children?.[0]?.agent, "builder");
225
- assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-builder-[a-f0-9]+-1$/);
225
+ assert.equal(payload.children?.[0]?.agent, "worker");
226
+ assert.match(payload.children?.[0]?.intercomTarget ?? "", /^subagent-worker-[a-f0-9]+-1$/);
226
227
  assert.match(String(payload.message ?? ""), /Intercom targets below identify child sessions used while they were running/);
227
- assert.match(String(payload.message ?? ""), /Run intercom target: subagent-builder-[a-f0-9]+-1/);
228
+ assert.match(String(payload.message ?? ""), /Run intercom target: subagent-worker-[a-f0-9]+-1/);
228
229
  assert.match(result.content[0]?.text ?? "", /Delivered single subagent result via intercom\./);
229
- assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from builder/);
230
+ assert.doesNotMatch(result.content[0]?.text ?? "", /Full child output from worker/);
230
231
  assert.equal(result.details?.results?.[0]?.finalOutput, undefined);
231
- assert.match(String(payload.message ?? ""), /Full child output from builder/);
232
+ assert.match(String(payload.message ?? ""), /Full child output from worker/);
233
+ });
234
+
235
+ it("keeps child output available to workflow runs after grouped delivery", async () => {
236
+ mockPi.onCall({ output: "Workflow child output" });
237
+ const { executor, events } = makeExecutor({ resultDelivery: true });
238
+
239
+ const result = await executor.execute(
240
+ "workflow-intercom-output",
241
+ { workflowScript: "const result = await runs.run('worker', { agent: 'worker', task: 'task' }); return result.output;", async: false },
242
+ new AbortController().signal,
243
+ undefined,
244
+ makeMinimalCtx(tempDir),
245
+ );
246
+
247
+ assert.equal(events.emitted.filter((entry) => entry.channel === "subagent:result-intercom").length, 1);
248
+ assert.match(result.content[0]?.text ?? "", /Workflow child output/);
249
+ assert.doesNotMatch(result.content[0]?.text ?? "", /Delivered single subagent result via intercom\./);
250
+ });
251
+
252
+ it("waits for retained workflow resume loops and returns each completed revived child", async () => {
253
+ mockPi.onCall({ output: "Completed retained follow-up one" });
254
+ mockPi.onCall({ output: "Completed retained follow-up two" });
255
+ const sourceRunId = `workflow-resume-source-${Date.now()}`;
256
+ const sourceAsyncDir = path.join(ASYNC_DIR, sourceRunId);
257
+ const sessionFile = path.join(tempDir, "workflow-resume-session.jsonl");
258
+ let revivedIds: string[] = [];
259
+ try {
260
+ fs.mkdirSync(sourceAsyncDir, { recursive: true });
261
+ fs.writeFileSync(sessionFile, "", "utf-8");
262
+ fs.writeFileSync(path.join(sourceAsyncDir, "status.json"), JSON.stringify({
263
+ runId: sourceRunId,
264
+ sessionId: "session-123",
265
+ mode: "single",
266
+ state: "complete",
267
+ startedAt: 100,
268
+ lastUpdate: 200,
269
+ cwd: tempDir,
270
+ sessionFile,
271
+ steps: [{ agent: "worker", status: "complete", sessionFile }],
272
+ }, null, 2), "utf-8");
273
+ const { executor } = makeExecutor();
274
+
275
+ const result = await executor.execute(
276
+ "workflow-retained-resume",
277
+ {
278
+ workflowScript: `const first = await runs.run("followup-1", { resume: "${sourceRunId}", task: "Continue once" }); const second = await runs.run("followup-2", { resume: first.runId, task: "Continue twice" }); return { firstRunId: first.runId, firstOutput: first.output, runId: second.runId, output: second.output };`,
279
+ async: false,
280
+ },
281
+ new AbortController().signal,
282
+ undefined,
283
+ makeMinimalCtx(tempDir),
284
+ );
285
+
286
+ assert.equal(result.isError, undefined, result.content[0]?.text);
287
+ assert.match(result.content[0]?.text ?? "", /Completed retained follow-up two/);
288
+ assert.doesNotMatch(result.content[0]?.text ?? "", /detached and running in the background/);
289
+ const value = result.details?.workflow?.value as { firstRunId?: string; firstOutput?: string; runId?: string; output?: string } | undefined;
290
+ revivedIds = [value?.firstRunId, value?.runId].filter((id): id is string => Boolean(id));
291
+ assert.equal(revivedIds.length, 2);
292
+ assert.notEqual(revivedIds[0], sourceRunId);
293
+ assert.notEqual(revivedIds[1], revivedIds[0], "expected the latest revived run id from pass two");
294
+ assert.equal(value?.firstOutput, "Completed retained follow-up one");
295
+ assert.equal(value?.output, "Completed retained follow-up two");
296
+ assert.equal(revivedIds.every((id) => !fs.existsSync(path.join(ASYNC_DIR, id, "workflow-result.json"))), true);
297
+ } finally {
298
+ fs.rmSync(sourceAsyncDir, { recursive: true, force: true });
299
+ for (const id of revivedIds) fs.rmSync(path.join(ASYNC_DIR, id), { recursive: true, force: true });
300
+ }
232
301
  });
233
302
 
234
303
  it("falls back to legacy foreground output when the bridge is inactive", async () => {
@@ -237,7 +306,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
237
306
 
238
307
  const result = await executor.execute(
239
308
  "single-no-intercom",
240
- { agent: "builder", task: "Summarize feature" },
309
+ { agent: "worker", task: "Summarize feature" },
241
310
  new AbortController().signal,
242
311
  undefined,
243
312
  makeMinimalCtx(tempDir),
@@ -253,7 +322,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
253
322
 
254
323
  const result = await executor.execute(
255
324
  "single-native-delivery",
256
- { agent: "builder", task: "Summarize feature" },
325
+ { agent: "worker", task: "Summarize feature" },
257
326
  new AbortController().signal,
258
327
  undefined,
259
328
  makeMinimalCtx(tempDir),
@@ -269,7 +338,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
269
338
 
270
339
  const result = await executor.execute(
271
340
  "single-no-ack",
272
- { agent: "builder", task: "Summarize feature" },
341
+ { agent: "worker", task: "Summarize feature" },
273
342
  new AbortController().signal,
274
343
  undefined,
275
344
  makeMinimalCtx(tempDir),
@@ -317,7 +386,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
317
386
 
318
387
  const result = await executor.execute(
319
388
  "workflow-worktree-live-card",
320
- { workflowScript: "const result = await runs.run('builder', { agent: 'builder', task: 'task', worktree: true }); return result.output;", async: false, chatProgress: "live-card" },
389
+ { workflowScript: "const result = await runs.run('worker', { agent: 'worker', task: 'task', worktree: true }); return result.output;", async: false, chatProgress: "live-card" },
321
390
  new AbortController().signal,
322
391
  undefined,
323
392
  makeMinimalCtx(tempDir),
@@ -349,7 +418,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
349
418
  );
350
419
  assert.equal(rejected, true);
351
420
  assert.equal(result.isError, true);
352
- assert.equal(state.foregroundControls.size, 1, "remaining builder still owns queued scheduling");
421
+ assert.equal(state.foregroundControls.size, 1, "remaining worker still owns queued scheduling");
353
422
  await waitForCallCount(3);
354
423
  const liveControl = [...state.foregroundControls.values()][0];
355
424
  assert.equal(liveControl?.currentAgent, "c", "later queued child must remain discoverable after launch");
@@ -379,7 +448,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
379
448
  );
380
449
  assert.equal(rejected, true);
381
450
  assert.equal(result.isError, true);
382
- assert.equal(state.foregroundControls.size, 1, "remaining chain builder still owns queued scheduling");
451
+ assert.equal(state.foregroundControls.size, 1, "remaining chain worker still owns queued scheduling");
383
452
  await waitForCallCount(3);
384
453
  const liveControl = [...state.foregroundControls.values()][0];
385
454
  assert.equal(liveControl?.currentAgent, "c", "later queued chain child must remain discoverable after launch");
@@ -391,12 +460,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
391
460
 
392
461
  it("cleans a rejected sequential chain child and releases foreground ownership", async () => {
393
462
  mockPi.onCall({ output: "sequential child output" });
394
- const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
463
+ const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
395
464
  let rejected = false;
396
465
  let ownedControl: { schedulingOwners?: number; activeChildren?: Map<number, unknown> } | undefined;
397
466
  const result = await executor.execute(
398
467
  "chain-sequential-rejection-cleanup",
399
- { chain: [{ agent: "builder", task: "sequential task" }] },
468
+ { chain: [{ agent: "worker", task: "sequential task" }] },
400
469
  new AbortController().signal,
401
470
  (update: { details?: { progress?: Array<{ status?: string }> } }) => {
402
471
  if (rejected || !update.details?.progress?.some((entry) => entry.status === "completed")) return;
@@ -415,10 +484,10 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
415
484
  });
416
485
 
417
486
  it("cleans a sequential chain child after an early tool-budget validation return", async () => {
418
- const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
487
+ const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
419
488
  const execution = executor.execute(
420
489
  "chain-sequential-budget-cleanup",
421
- { chain: [{ agent: "builder", task: "invalid budget task", toolBudget: { hard: 0 } }] },
490
+ { chain: [{ agent: "worker", task: "invalid budget task", toolBudget: { hard: 0 } }] },
422
491
  new AbortController().signal,
423
492
  undefined,
424
493
  makeMinimalCtx(tempDir),
@@ -443,11 +512,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
443
512
  ].map((entry) => JSON.stringify(entry)).join("\n") + "\n",
444
513
  structuredOutputCapture: { ok: true },
445
514
  });
446
- const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("builder")] });
515
+ const { executor, state } = makeExecutor({ bridgeMode: "off", agents: [makeAgent("worker")] });
447
516
  let structuredDir: string | undefined;
448
517
  const result = await executor.execute(
449
518
  "single-rejection-cleanup",
450
- { agent: "builder", task: "structured task", artifacts: false, outputSchema: { type: "object", properties: { ok: { type: "boolean" } }, required: ["ok"] } },
519
+ { agent: "worker", task: "structured task", artifacts: false, outputSchema: { type: "object", properties: { ok: { type: "boolean" } }, required: ["ok"] } },
451
520
  new AbortController().signal,
452
521
  (update: { details?: { results?: Array<{ structuredOutputPath?: string }>; progress?: Array<{ status?: string }> } }) => {
453
522
  const outputPath = update.details?.results?.[0]?.structuredOutputPath;
@@ -541,7 +610,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
541
610
  pid: process.pid,
542
611
  startedAt: 100,
543
612
  lastUpdate: Date.now(),
544
- steps: [{ agent: "builder", status: "running" }],
613
+ steps: [{ agent: "worker", status: "running" }],
545
614
  }, null, 2), "utf-8");
546
615
  const { executor, events } = makeExecutor({
547
616
  kill: (pid, signal) => {
@@ -583,7 +652,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
583
652
  pid: process.pid,
584
653
  startedAt: 100,
585
654
  lastUpdate: Date.now(),
586
- steps: [{ agent: "builder", status: "running" }],
655
+ steps: [{ agent: "worker", status: "running" }],
587
656
  }, null, 2), "utf-8");
588
657
  const { executor } = makeExecutor();
589
658
 
@@ -607,9 +676,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
607
676
  it("resume action rejects explicit reviewed acceptance before launching", async () => {
608
677
  for (const [index, params] of [
609
678
  { message: "Continue", acceptance: "reviewed" },
610
- { chain: [{ agent: "commentator", task: "Review {previous}", acceptance: { level: "reviewed" } }] },
679
+ { chain: [{ agent: "reviewer", task: "Review {previous}", acceptance: { level: "reviewed" } }] },
611
680
  ].entries()) {
612
- const { executor, events } = makeExecutor({ agents: [makeAgent("commentator")] });
681
+ const { executor, events } = makeExecutor({ agents: [makeAgent("reviewer")] });
613
682
  const result = await executor.execute(
614
683
  `resume-invalid-acceptance-${index}`,
615
684
  { action: "resume", id: "missing-source-run", ...params },
@@ -642,26 +711,26 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
642
711
  startedAt: 100,
643
712
  lastUpdate: 100,
644
713
  cwd: tempDir,
645
- steps: [{ agent: "builder", status: "running", sessionFile: sourceSession }],
714
+ steps: [{ agent: "worker", status: "running", sessionFile: sourceSession }],
646
715
  }, null, 2), "utf-8");
647
716
  fs.writeFileSync(sourceResultPath, JSON.stringify({
648
717
  id: sourceRunId,
649
718
  sessionId: "session-123",
650
- agent: "builder",
719
+ agent: "worker",
651
720
  mode: "single",
652
721
  success: true,
653
722
  state: "complete",
654
723
  summary: "root output",
655
- results: [{ agent: "builder", output: "root output", success: true, sessionFile: sourceSession }],
724
+ results: [{ agent: "worker", output: "root output", success: true, sessionFile: sourceSession }],
656
725
  }, null, 2), "utf-8");
657
- const { executor, events } = makeExecutor({ agents: [makeAgent("builder"), makeAgent("commentator")] });
726
+ const { executor, events } = makeExecutor({ agents: [makeAgent("worker"), makeAgent("reviewer")] });
658
727
 
659
728
  const result = await executor.execute(
660
729
  "resume-chain-root",
661
730
  {
662
731
  action: "resume",
663
732
  id: sourceRunId,
664
- chain: [{ agent: "commentator", task: "Review this root result: {previous}" }],
733
+ chain: [{ agent: "reviewer", task: "Review this root result: {previous}" }],
665
734
  },
666
735
  new AbortController().signal,
667
736
  undefined,
@@ -671,9 +740,9 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
671
740
  assert.equal(result.isError, undefined);
672
741
  assert.match(result.content[0]?.text ?? "", /Attached async subagent/);
673
742
  const startedEvent = events.emitted.find((entry) => entry.channel === SUBAGENT_ASYNC_STARTED_EVENT)?.payload as { agent?: string; agents?: string[]; chain?: string[]; chainStepCount?: number; goal?: string } | undefined;
674
- assert.equal(startedEvent?.agent, "builder");
675
- assert.deepEqual(startedEvent?.agents, ["builder", "commentator"]);
676
- assert.deepEqual(startedEvent?.chain, ["builder", "commentator"]);
743
+ assert.equal(startedEvent?.agent, "worker");
744
+ assert.deepEqual(startedEvent?.agents, ["worker", "reviewer"]);
745
+ assert.deepEqual(startedEvent?.chain, ["worker", "reviewer"]);
677
746
  assert.equal(startedEvent?.chainStepCount, 2);
678
747
  assert.equal(startedEvent?.goal, "Review this root result: {previous}");
679
748
  const attachedId = result.details?.asyncId;
@@ -684,7 +753,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
684
753
  const attachedStatus = JSON.parse(fs.readFileSync(statusPath, "utf-8")) as { mode?: string; chainStepCount?: number; steps?: Array<{ agent?: string; label?: string; status?: string }> };
685
754
  assert.equal(attachedStatus.mode, "chain");
686
755
  assert.equal(attachedStatus.chainStepCount, 2);
687
- assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["builder", "commentator"]);
756
+ assert.deepEqual(attachedStatus.steps?.map((step) => step.agent), ["worker", "reviewer"]);
688
757
  assert.match(attachedStatus.steps?.[0]?.label ?? "", /Attached resume-chain-root-/);
689
758
  await waitForFile(path.join(RESULTS_DIR, `${attachedId}.json`));
690
759
  } finally {
@@ -708,19 +777,19 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
708
777
  startedAt: 100,
709
778
  lastUpdate: 200,
710
779
  cwd: tempDir,
711
- steps: [{ agent: "builder", status: "complete" }],
780
+ steps: [{ agent: "worker", status: "complete" }],
712
781
  }, null, 2), "utf-8");
713
782
  fs.writeFileSync(sourceResultPath, JSON.stringify({
714
783
  id: sourceRunId,
715
784
  sessionId: "session-123",
716
- agent: "builder",
785
+ agent: "worker",
717
786
  mode: "single",
718
787
  success: true,
719
788
  state: "complete",
720
789
  summary: "completed root output",
721
- results: [{ agent: "builder", output: "completed root output", success: true }],
790
+ results: [{ agent: "worker", output: "completed root output", success: true }],
722
791
  }, null, 2), "utf-8");
723
- const { executor } = makeExecutor({ agents: [makeAgent("builder"), makeAgent("commentator")] });
792
+ const { executor } = makeExecutor({ agents: [makeAgent("worker"), makeAgent("reviewer")] });
724
793
 
725
794
  const reviveOnly = await executor.execute(
726
795
  "resume-chain-complete-root-revive-only",
@@ -737,7 +806,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
737
806
  {
738
807
  action: "resume",
739
808
  id: sourceRunId,
740
- chain: [{ agent: "commentator", task: "Review this completed root result: {previous}" }],
809
+ chain: [{ agent: "reviewer", task: "Review this completed root result: {previous}" }],
741
810
  },
742
811
  new AbortController().signal,
743
812
  undefined,
@@ -816,7 +885,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
816
885
  lastUpdate: 200,
817
886
  cwd: tempDir,
818
887
  sessionFile,
819
- steps: [{ agent: "builder", status: "complete", launchContractDigest: "source-launch-contract-digest" }],
888
+ steps: [{ agent: "worker", status: "complete", launchContractDigest: "source-launch-contract-digest" }],
820
889
  }, null, 2), "utf-8");
821
890
  const { executor, events } = makeExecutor();
822
891
 
@@ -861,12 +930,12 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
861
930
  fs.writeFileSync(sessionFile, "", "utf-8");
862
931
  fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
863
932
  runId, sessionId: "session-123", mode: "single", state: "paused", startedAt: 100, lastUpdate: 200, cwd: tempDir,
864
- steps: [{ agent: "removed-builder", status: "paused", sessionFile }],
933
+ steps: [{ agent: "removed-worker", status: "paused", sessionFile }],
865
934
  }, null, 2), "utf-8");
866
935
  fs.writeFileSync(path.join(asyncDir, "recovery-descriptor.json"), JSON.stringify({
867
936
  version: 1,
868
937
  sourceRunId: runId,
869
- agent: "removed-builder",
938
+ agent: "removed-worker",
870
939
  cwd: tempDir,
871
940
  model: "anthropic/claude-sonnet-4:high",
872
941
  tools: ["read"],
@@ -921,7 +990,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
921
990
  lastUpdate: 200,
922
991
  cwd: tempDir,
923
992
  sessionFile,
924
- steps: [{ agent: "builder", status: "complete" }],
993
+ steps: [{ agent: "worker", status: "complete" }],
925
994
  }, null, 2), "utf-8");
926
995
  try {
927
996
  const { executor } = makeExecutor();
@@ -1031,7 +1100,7 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
1031
1100
  try {
1032
1101
  const original = await executor.execute(
1033
1102
  "foreground-lease-original",
1034
- { agent: "builder", task: "Original task" },
1103
+ { agent: "worker", task: "Original task" },
1035
1104
  new AbortController().signal,
1036
1105
  undefined,
1037
1106
  makeMinimalCtx(tempDir),
@@ -1746,11 +1815,11 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
1746
1815
 
1747
1816
  it("does not treat a synthetic foreground startup error as child output", async () => {
1748
1817
  mockPi.onCall({ output: "", stderr: "mock startup failure", exitCode: 1 });
1749
- const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("builder")] });
1818
+ const { executor, events } = makeExecutor({ resultDelivery: true, agents: [makeAgent("worker")] });
1750
1819
 
1751
1820
  await executor.execute(
1752
1821
  "foreground-synthetic-error",
1753
- { agent: "builder", task: "synthetic-error-task" },
1822
+ { agent: "worker", task: "synthetic-error-task" },
1754
1823
  new AbortController().signal,
1755
1824
  undefined,
1756
1825
  makeMinimalCtx(tempDir),
@@ -15,6 +15,7 @@ import * as fs from "node:fs";
15
15
  import * as os from "node:os";
16
16
  import * as path from "node:path";
17
17
  import type { MockPi } from "../support/helpers.ts";
18
+ import { discoverAgents } from "../../src/agents/agents.ts";
18
19
  import {
19
20
  createEventBus,
20
21
  createMockPi,
@@ -185,7 +186,7 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
185
186
 
186
187
  it("tracks every concurrently running foreground child", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
187
188
  for (let index = 0; index < 3; index++) mockPi.onCall({ output: `Review ${index} complete`, delay: 250 });
188
- const agents = [makeAgent("commentator")];
189
+ const agents = [makeAgent("reviewer")];
189
190
  const state = {
190
191
  baseCwd: tempDir,
191
192
  currentSessionId: null,
@@ -198,9 +199,9 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
198
199
  "parallel-foreground-fleet",
199
200
  {
200
201
  tasks: [
201
- { agent: "commentator", task: "Review correctness" },
202
- { agent: "commentator", task: "Review quality" },
203
- { agent: "commentator", task: "Review tests" },
202
+ { agent: "reviewer", task: "Review correctness" },
203
+ { agent: "reviewer", task: "Review quality" },
204
+ { agent: "reviewer", task: "Review tests" },
204
205
  ],
205
206
  },
206
207
  new AbortController().signal,
@@ -337,13 +338,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
337
338
  }
338
339
  });
339
340
 
340
- it("treats parallel action aliases with tasks as top-level parallel execution", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
341
+ it("rejects parallel action aliases at the public boundary", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
341
342
  for (const action of ["parallel", "PARALLEL", "tasks"]) {
342
343
  mockPi.reset();
343
- mockPi.onCall({ output: `${action} alias finished` });
344
344
  const executor = makeExecutor();
345
345
 
346
- const result = await executor.execute(
346
+ const result = await executor.executePublic(
347
347
  `parallel-alias-${action}`,
348
348
  { action, tasks: [{ agent: "echo", task: `Run ${action}` }] },
349
349
  new AbortController().signal,
@@ -351,9 +351,9 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
351
351
  makeMinimalCtx(tempDir),
352
352
  );
353
353
 
354
- assert.equal(result.isError, undefined);
355
- assert.equal(result.details?.mode, "parallel");
356
- assert.match(result.content[0]?.text ?? "", new RegExp(`${action} alias finished`));
354
+ assert.equal(result.isError, true);
355
+ assert.match(result.content[0]?.text ?? "", /is not a management action/);
356
+ assert.equal(mockPi.callCount(), 0);
357
357
  }
358
358
  });
359
359
 
@@ -379,12 +379,12 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
379
379
  it("applies agent acceptance roles to inferred parallel acceptance", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
380
380
  mockPi.onCall({ output: "exploration complete" });
381
381
  const executor = makeExecutor([
382
- makeAgent("builder", { acceptanceRole: "read-only" }),
382
+ makeAgent("worker", { acceptanceRole: "read-only" }),
383
383
  ]);
384
384
 
385
385
  const result = await executor.execute(
386
386
  "parallel-agent-acceptance-role",
387
- { tasks: [{ agent: "builder", task: "Explore the authentication flow" }] },
387
+ { tasks: [{ agent: "worker", task: "Explore the authentication flow" }] },
388
388
  new AbortController().signal,
389
389
  undefined,
390
390
  makeMinimalCtx(tempDir),
@@ -588,25 +588,63 @@ describe("parallel agent execution", { skip: !piAvailable ? "pi packages not ava
588
588
  assert.equal(fs.existsSync(path.join(tempDir, "false")), false);
589
589
  });
590
590
 
591
- it("top-level parallel reads are injected once with chain-style prefix", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
591
+ it("top-level parallel reviewer runs do not inherit bundled chain artifact reads", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
592
+ fs.writeFileSync(path.join(tempDir, "plan.md"), "chain plan");
593
+ fs.writeFileSync(path.join(tempDir, "progress.md"), "chain progress");
594
+ mockPi.onCall({ output: "Review done" });
595
+ const reviewer = discoverAgents(tempDir, "project").agents.find((agent) => agent.name === "reviewer");
596
+ assert.ok(reviewer, "expected bundled reviewer");
597
+ assert.equal(reviewer.defaultReads, undefined);
598
+ const executor = makeExecutor([reviewer]);
599
+
600
+ await executor.execute(
601
+ "parallel-reviewer-without-chain-artifacts",
602
+ { tasks: [{ agent: "reviewer", task: "Review the supplied files." }] },
603
+ new AbortController().signal,
604
+ undefined,
605
+ makeMinimalCtx(tempDir),
606
+ );
607
+
608
+ const taskArg = readLastCallArgs().at(-1) ?? "";
609
+ assert.doesNotMatch(taskArg, /\[Read from:/);
610
+ assert.doesNotMatch(taskArg, /plan\.md|progress\.md/);
611
+ });
612
+
613
+ it("top-level parallel reads include existing files and omit missing files", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
614
+ fs.writeFileSync(path.join(tempDir, "a.md"), "context");
592
615
  mockPi.onCall({ output: "Read done" });
593
616
  const executor = makeExecutor();
594
617
 
595
618
  await executor.execute(
596
619
  "parallel-reads",
597
- { tasks: [{ agent: "echo", task: "Inspect", reads: ["a.md", "b.md"] }] },
620
+ { tasks: [{ agent: "echo", task: "Inspect", reads: ["a.md", "missing.md"] }] },
598
621
  new AbortController().signal,
599
622
  undefined,
600
623
  makeMinimalCtx(tempDir),
601
624
  );
602
625
 
603
- const args = readLastCallArgs();
604
- const taskArg = args.at(-1) ?? "";
605
- assert.ok(taskArg.startsWith(`Task: [Read from: ${path.join(tempDir, "a.md")}, ${path.join(tempDir, "b.md")}]
626
+ const taskArg = readLastCallArgs().at(-1) ?? "";
627
+ assert.ok(taskArg.startsWith(`Task: [Read from: ${path.join(tempDir, "a.md")}]
606
628
 
607
629
  Inspect
608
630
 
609
631
  ## Acceptance Contract`));
632
+ assert.doesNotMatch(taskArg, /missing\.md/);
633
+ });
634
+
635
+ it("top-level parallel omits the read prefix when all files are missing", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
636
+ mockPi.onCall({ output: "Read done" });
637
+ const executor = makeExecutor();
638
+
639
+ await executor.execute(
640
+ "parallel-missing-reads",
641
+ { tasks: [{ agent: "echo", task: "Inspect", reads: ["missing.md"] }] },
642
+ new AbortController().signal,
643
+ undefined,
644
+ makeMinimalCtx(tempDir),
645
+ );
646
+
647
+ assert.doesNotMatch(readLastCallArgs().at(-1) ?? "", /\[Read from:/);
610
648
  });
611
649
 
612
650
  it("top-level parallel defaultProgress uses isolated run storage", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
@@ -640,11 +678,11 @@ Inspect
640
678
 
641
679
  it("top-level parallel suppresses progress when the task is review-only", { skip: !createSubagentExecutor ? "executor not importable" : undefined }, async () => {
642
680
  mockPi.onCall({ output: "Review done" });
643
- const executor = makeExecutor([makeAgent("commentator", { defaultProgress: true })]);
681
+ const executor = makeExecutor([makeAgent("reviewer", { defaultProgress: true })]);
644
682
 
645
683
  await executor.execute(
646
684
  "parallel-read-only-progress",
647
- { tasks: [{ agent: "commentator", task: "Review-only. Do not edit files. Return findings." }] },
685
+ { tasks: [{ agent: "reviewer", task: "Review-only. Do not edit files. Return findings." }] },
648
686
  new AbortController().signal,
649
687
  undefined,
650
688
  makeMinimalCtx(tempDir),