@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
@@ -3,13 +3,24 @@ import * as fs from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
5
  import { afterEach, describe, it } from "node:test";
6
+ import { discoverAgents } from "../../src/agents/agents.ts";
6
7
  import { computeMcpServerHash } from "../../src/runs/shared/mcp-direct-tool-allowlist.ts";
7
- import { TOOL_BUDGET_ENV, TOOL_BUDGET_ZERO_AUTH_ENV } from "../../src/runs/shared/tool-budget.ts";
8
+ import {
9
+ TOOL_BUDGET_ENV,
10
+ TOOL_BUDGET_ZERO_AUTH_ENV,
11
+ } from "../../src/runs/shared/tool-budget.ts";
8
12
  import { WAIT_TOOL_ENABLED_ENV } from "../../src/runs/background/wait-config.ts";
9
13
  import { SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV } from "../../src/shared/utils.ts";
10
- import { CHILD_TOOL_DIAGNOSTIC_PATH_ENV, MCP_DIRECT_CHILD_TOOLS_ENV, REQUIRED_CHILD_TOOLS_ENV } from "../../src/runs/shared/tool-availability.ts";
14
+ import {
15
+ CHILD_TOOL_DIAGNOSTIC_PATH_ENV,
16
+ MCP_DIRECT_CHILD_TOOLS_ENV,
17
+ REQUIRED_CHILD_TOOLS_ENV,
18
+ } from "../../src/runs/shared/tool-availability.ts";
11
19
  import { CHILD_WATCHDOG_CONFIG_ENV } from "../../src/watchdog/child-status.ts";
12
- import { PERMISSION_AUDIT_PATH_ENV, PERMISSION_POLICY_ENV } from "../../src/runs/shared/permissions.ts";
20
+ import {
21
+ PERMISSION_AUDIT_PATH_ENV,
22
+ PERMISSION_POLICY_ENV,
23
+ } from "../../src/runs/shared/permissions.ts";
13
24
  import {
14
25
  SUBAGENT_FANOUT_CHILD_ENV,
15
26
  SUBAGENT_PARENT_CHILD_INDEX_ENV,
@@ -38,22 +49,26 @@ const originalEnv = {
38
49
  SELESAI_CODING_AGENT_DIR: process.env.SELESAI_CODING_AGENT_DIR,
39
50
  SELESAI_SUBAGENT_FANOUT_CHILD: process.env.SELESAI_SUBAGENT_FANOUT_CHILD,
40
51
  SELESAI_SUBAGENT_PARENT_EVENT_SINK: process.env.SELESAI_SUBAGENT_PARENT_EVENT_SINK,
41
- SELESAI_SUBAGENT_PARENT_CONTROL_INBOX: process.env.SELESAI_SUBAGENT_PARENT_CONTROL_INBOX,
52
+ SELESAI_SUBAGENT_PARENT_CONTROL_INBOX:
53
+ process.env.SELESAI_SUBAGENT_PARENT_CONTROL_INBOX,
42
54
  SELESAI_SUBAGENT_PARENT_ROOT_RUN_ID: process.env.SELESAI_SUBAGENT_PARENT_ROOT_RUN_ID,
43
55
  SELESAI_SUBAGENT_PARENT_RUN_ID: process.env.SELESAI_SUBAGENT_PARENT_RUN_ID,
44
56
  SELESAI_SUBAGENT_PARENT_CHILD_INDEX: process.env.SELESAI_SUBAGENT_PARENT_CHILD_INDEX,
45
57
  SELESAI_SUBAGENT_PARENT_DEPTH: process.env.SELESAI_SUBAGENT_PARENT_DEPTH,
46
58
  SELESAI_SUBAGENT_PARENT_PATH: process.env.SELESAI_SUBAGENT_PARENT_PATH,
47
- SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN: process.env.SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN,
59
+ SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN:
60
+ process.env.SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN,
48
61
  SELESAI_SUBAGENT_PARENT_SESSION: process.env.SELESAI_SUBAGENT_PARENT_SESSION,
49
62
  SELESAI_SUBAGENT_RUN_ID: process.env.SELESAI_SUBAGENT_RUN_ID,
50
63
  [MCP_DIRECT_CHILD_TOOLS_ENV]: process.env[MCP_DIRECT_CHILD_TOOLS_ENV],
51
64
  [TOOL_BUDGET_ZERO_AUTH_ENV]: process.env[TOOL_BUDGET_ZERO_AUTH_ENV],
52
- [SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV]: process.env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV],
65
+ [SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV]:
66
+ process.env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV],
53
67
  [PI_INTERCOM_STABLE_ID_ENV]: process.env[PI_INTERCOM_STABLE_ID_ENV],
54
68
  [PI_INTERCOM_SESSION_ID_ENV]: process.env[PI_INTERCOM_SESSION_ID_ENV],
55
69
  MCP_HASH_ROOT: process.env.MCP_HASH_ROOT,
56
70
  MCP_HASH_TOKEN: process.env.MCP_HASH_TOKEN,
71
+ SELESAI_SUBAGENT_TASK_DELIVERY: process.env.SELESAI_SUBAGENT_TASK_DELIVERY,
57
72
  };
58
73
  const originalCwd = process.cwd();
59
74
  const tempRoots: string[] = [];
@@ -94,10 +109,15 @@ function writeMcpFixture(
94
109
  resources?: Array<{ name: string; uri: string; description?: string }>;
95
110
  configPath?: string;
96
111
  cachedAt?: number;
112
+ configHash?: string;
97
113
  } = {},
98
114
  ): void {
99
115
  const serverName = options.serverName ?? "chrome-devtools";
100
- const definition = { command: "npx", args: ["chrome-devtools-mcp"], ...(options.definition ?? {}) };
116
+ const definition = {
117
+ command: "npx",
118
+ args: ["chrome-devtools-mcp"],
119
+ ...(options.definition ?? {}),
120
+ };
101
121
  writeJson(options.configPath ?? path.join(fixture.agentDir, "mcp.json"), {
102
122
  ...(options.settings ? { settings: options.settings } : {}),
103
123
  mcpServers: {
@@ -108,7 +128,7 @@ function writeMcpFixture(
108
128
  version: 1,
109
129
  servers: {
110
130
  [serverName]: {
111
- configHash: computeMcpServerHash(definition),
131
+ configHash: options.configHash ?? computeMcpServerHash(definition),
112
132
  cachedAt: options.cachedAt ?? Date.now(),
113
133
  tools: options.tools ?? [
114
134
  { name: "take_screenshot" },
@@ -136,8 +156,16 @@ afterEach(() => {
136
156
 
137
157
  describe("buildPiArgs session wiring", () => {
138
158
  it("projects launch-resolved extension identifiers without raw paths", () => {
139
- const privateExt = path.join(os.tmpdir(), "private-extension-root", "secret-extension.ts");
140
- const toolExt = path.join(os.tmpdir(), "tool-extension-root", "tool-extension.ts");
159
+ const privateExt = path.join(
160
+ os.tmpdir(),
161
+ "private-extension-root",
162
+ "secret-extension.ts",
163
+ );
164
+ const toolExt = path.join(
165
+ os.tmpdir(),
166
+ "tool-extension-root",
167
+ "tool-extension.ts",
168
+ );
141
169
  const plan = resolvePiLaunchToolPlan({
142
170
  tools: ["read", toolExt],
143
171
  extensions: [privateExt],
@@ -149,13 +177,26 @@ describe("buildPiArgs session wiring", () => {
149
177
  assert.equal(projection.version, 1);
150
178
  assert.equal(projection.source, "launch-resolved");
151
179
  assert.equal(projection.disableAmbientExtensions, true);
152
- assert.equal(projection.runtime.length, 1);
180
+ assert.ok(
181
+ projection.runtime.length >= 1,
182
+ `expected at least 1 runtime extension, got ${projection.runtime.length}`,
183
+ );
153
184
  assert.equal(projection.configured.length, 3);
154
- assert.equal(projection.effective.length, 4);
155
- for (const id of [...projection.runtime, ...projection.configured, ...projection.effective]) {
185
+ assert.ok(
186
+ projection.effective.length >= 4,
187
+ `expected at least 4 effective extensions, got ${projection.effective.length}`,
188
+ );
189
+ for (const id of [
190
+ ...projection.runtime,
191
+ ...projection.configured,
192
+ ...projection.effective,
193
+ ]) {
156
194
  assert.match(id, /^sha256:[a-f0-9]{16}$/);
157
195
  }
158
- assert.ok(!JSON.stringify(projection).includes(os.tmpdir()), "projection should not expose raw extension paths");
196
+ assert.ok(
197
+ !JSON.stringify(projection).includes(os.tmpdir()),
198
+ "projection should not expose raw extension paths",
199
+ );
159
200
  });
160
201
 
161
202
  it("uses --session when sessionFile is provided", () => {
@@ -175,8 +216,14 @@ describe("buildPiArgs session wiring", () => {
175
216
  assert.ok(args.includes("--session"));
176
217
  assert.ok(args.includes(sessionFile));
177
218
  assert.ok(fs.existsSync(path.dirname(sessionFile)));
178
- assert.ok(!args.includes("--session-dir"), "--session-dir should not be emitted with --session");
179
- assert.ok(!args.includes("--no-session"), "--no-session should not be emitted with --session");
219
+ assert.ok(
220
+ !args.includes("--session-dir"),
221
+ "--session-dir should not be emitted with --session",
222
+ );
223
+ assert.ok(
224
+ !args.includes("--no-session"),
225
+ "--no-session should not be emitted with --session",
226
+ );
180
227
  } finally {
181
228
  fs.rmSync(tempDir, { recursive: true, force: true });
182
229
  }
@@ -225,16 +272,28 @@ describe("buildPiArgs session wiring", () => {
225
272
  });
226
273
 
227
274
  it("passes the effective wait-tool setting explicitly to children", () => {
228
- assert.equal(buildPiArgs({
229
- baseArgs: [], task: "test", sessionEnabled: false,
230
- inheritProjectContext: true, inheritSkills: true,
231
- waitToolEnabled: false,
232
- }).env[WAIT_TOOL_ENABLED_ENV], "false");
233
- assert.equal(buildPiArgs({
234
- baseArgs: [], task: "test", sessionEnabled: false,
235
- inheritProjectContext: true, inheritSkills: true,
236
- waitToolEnabled: true,
237
- }).env[WAIT_TOOL_ENABLED_ENV], "true");
275
+ assert.equal(
276
+ buildPiArgs({
277
+ baseArgs: [],
278
+ task: "test",
279
+ sessionEnabled: false,
280
+ inheritProjectContext: true,
281
+ inheritSkills: true,
282
+ waitToolEnabled: false,
283
+ }).env[WAIT_TOOL_ENABLED_ENV],
284
+ "false",
285
+ );
286
+ assert.equal(
287
+ buildPiArgs({
288
+ baseArgs: [],
289
+ task: "test",
290
+ sessionEnabled: false,
291
+ inheritProjectContext: true,
292
+ inheritSkills: true,
293
+ waitToolEnabled: true,
294
+ }).env[WAIT_TOOL_ENABLED_ENV],
295
+ "true",
296
+ );
238
297
  });
239
298
 
240
299
  it("passes child watchdog config only when explicitly provided", () => {
@@ -256,7 +315,7 @@ describe("buildPiArgs session wiring", () => {
256
315
  childWatchdog: {
257
316
  enabled: true,
258
317
  runId: "run-1",
259
- agent: "builder",
318
+ agent: "worker",
260
319
  childIndex: 2,
261
320
  watchdogTailTimeoutMs: 1234,
262
321
  agentEndTimeoutMs: 500,
@@ -272,7 +331,7 @@ describe("buildPiArgs session wiring", () => {
272
331
  assert.deepEqual(JSON.parse(encoded ?? "{}"), {
273
332
  enabled: true,
274
333
  runId: "run-1",
275
- agent: "builder",
334
+ agent: "worker",
276
335
  childIndex: 2,
277
336
  watchdogTailTimeoutMs: 1234,
278
337
  agentEndTimeoutMs: 500,
@@ -316,7 +375,6 @@ describe("buildPiArgs model wiring", () => {
316
375
  assert.ok(!args.includes("--models"));
317
376
  });
318
377
 
319
-
320
378
  it("preserves thinking suffixes on model args", () => {
321
379
  const { args } = buildPiArgs({
322
380
  baseArgs: ["-p"],
@@ -328,7 +386,10 @@ describe("buildPiArgs model wiring", () => {
328
386
  inheritSkills: false,
329
387
  });
330
388
 
331
- assert.equal(applyThinkingSuffix("openai-codex/gpt-5.4-mini", "high"), "openai-codex/gpt-5.4-mini:high");
389
+ assert.equal(
390
+ applyThinkingSuffix("openai-codex/gpt-5.4-mini", "high"),
391
+ "openai-codex/gpt-5.4-mini:high",
392
+ );
332
393
  assert.ok(args.includes("--model"));
333
394
  assert.ok(args.includes("openai-codex/gpt-5.4-mini:high"));
334
395
  });
@@ -344,9 +405,18 @@ describe("buildPiArgs model wiring", () => {
344
405
  inheritSkills: false,
345
406
  });
346
407
 
347
- assert.equal(applyThinkingSuffix("openai/gpt-5", "max"), "openai/gpt-5:max");
348
- assert.equal(applyThinkingSuffix("openai/gpt-5:max", "high"), "openai/gpt-5:max");
349
- assert.equal(applyThinkingSuffix("openai/gpt-5:max", "high", true), "openai/gpt-5:high");
408
+ assert.equal(
409
+ applyThinkingSuffix("openai/gpt-5", "max"),
410
+ "openai/gpt-5:max",
411
+ );
412
+ assert.equal(
413
+ applyThinkingSuffix("openai/gpt-5:max", "high"),
414
+ "openai/gpt-5:max",
415
+ );
416
+ assert.equal(
417
+ applyThinkingSuffix("openai/gpt-5:max", "high", true),
418
+ "openai/gpt-5:high",
419
+ );
350
420
  assert.ok(args.includes("--model"));
351
421
  assert.ok(args.includes("openai/gpt-5:max"));
352
422
  });
@@ -362,8 +432,14 @@ describe("buildPiArgs model wiring", () => {
362
432
  inheritSkills: false,
363
433
  });
364
434
 
365
- assert.equal(applyThinkingSuffix("anthropic/claude-haiku-4-5", "off"), "anthropic/claude-haiku-4-5:off");
366
- assert.equal(applyThinkingSuffix("anthropic/claude-haiku-4-5:high", "off", true), "anthropic/claude-haiku-4-5:off");
435
+ assert.equal(
436
+ applyThinkingSuffix("anthropic/claude-haiku-4-5", "off"),
437
+ "anthropic/claude-haiku-4-5:off",
438
+ );
439
+ assert.equal(
440
+ applyThinkingSuffix("anthropic/claude-haiku-4-5:high", "off", true),
441
+ "anthropic/claude-haiku-4-5:off",
442
+ );
367
443
  assert.ok(args.includes("--model"));
368
444
  assert.ok(args.includes("anthropic/claude-haiku-4-5:off"));
369
445
  });
@@ -406,13 +482,95 @@ describe("buildPiArgs model wiring", () => {
406
482
  });
407
483
  });
408
484
 
485
+ describe("buildPiArgs task delivery", () => {
486
+ const longTask = "x".repeat(8001);
487
+
488
+ function taskFileFromArgs(args: string[]): string | undefined {
489
+ const ref = args.find((arg) => arg.startsWith("@") && arg.endsWith("task.md"));
490
+ return ref ? ref.slice(1) : undefined;
491
+ }
492
+
493
+ it("delivers short tasks inline by default", () => {
494
+ const { args } = buildPiArgs({
495
+ baseArgs: ["-p"],
496
+ task: "hello",
497
+ sessionEnabled: false,
498
+ inheritProjectContext: false,
499
+ inheritSkills: false,
500
+ });
501
+
502
+ assert.ok(args.includes("Task: hello"));
503
+ assert.equal(taskFileFromArgs(args), undefined);
504
+ });
505
+
506
+ it("delivers tasks over the argv limit via a temp file by default", () => {
507
+ const { args } = buildPiArgs({
508
+ baseArgs: ["-p"],
509
+ task: longTask,
510
+ sessionEnabled: false,
511
+ inheritProjectContext: false,
512
+ inheritSkills: false,
513
+ });
514
+
515
+ const taskFile = taskFileFromArgs(args);
516
+ assert.ok(taskFile, "expected an @task.md argv reference");
517
+ assert.equal(fs.readFileSync(taskFile, "utf-8"), `Task: ${longTask}`);
518
+ assert.ok(!args.includes(`Task: ${longTask}`));
519
+ });
520
+
521
+ it("delivers short tasks via file when SELESAI_SUBAGENT_TASK_DELIVERY=file", () => {
522
+ process.env.SELESAI_SUBAGENT_TASK_DELIVERY = "file";
523
+ const { args } = buildPiArgs({
524
+ baseArgs: ["-p"],
525
+ task: "hello",
526
+ sessionEnabled: false,
527
+ inheritProjectContext: false,
528
+ inheritSkills: false,
529
+ });
530
+
531
+ const taskFile = taskFileFromArgs(args);
532
+ assert.ok(taskFile, "expected an @task.md argv reference");
533
+ assert.equal(fs.readFileSync(taskFile, "utf-8"), "Task: hello");
534
+ assert.ok(!args.includes("Task: hello"));
535
+ });
536
+
537
+
538
+ it("falls back to auto when SELESAI_SUBAGENT_TASK_DELIVERY is invalid", () => {
539
+ process.env.SELESAI_SUBAGENT_TASK_DELIVERY = "carrier-pigeon";
540
+ const { args } = buildPiArgs({
541
+ baseArgs: ["-p"],
542
+ task: longTask,
543
+ sessionEnabled: false,
544
+ inheritProjectContext: false,
545
+ inheritSkills: false,
546
+ });
547
+
548
+ assert.ok(taskFileFromArgs(args), "expected file delivery for over-limit task");
549
+ });
550
+
551
+ it("lets the per-launch taskDelivery override beat the env setting", () => {
552
+ delete process.env.SELESAI_SUBAGENT_TASK_DELIVERY;
553
+ const { args } = buildPiArgs({
554
+ baseArgs: ["-p"],
555
+ task: "hello",
556
+ taskDelivery: "file",
557
+ sessionEnabled: false,
558
+ inheritProjectContext: false,
559
+ inheritSkills: false,
560
+ });
561
+
562
+ assert.ok(taskFileFromArgs(args), "expected an @task.md argv reference");
563
+ assert.ok(!args.includes("Task: hello"));
564
+ });
565
+ });
566
+
409
567
  describe("buildPiArgs system prompt mode wiring", () => {
410
568
  it("uses --append-system-prompt by default", () => {
411
569
  const { args } = buildPiArgs({
412
570
  baseArgs: ["-p"],
413
571
  task: "hello",
414
572
  sessionEnabled: false,
415
- systemPrompt: "You are a builder",
573
+ systemPrompt: "You are a worker",
416
574
  inheritProjectContext: false,
417
575
  inheritSkills: false,
418
576
  });
@@ -426,7 +584,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
426
584
  baseArgs: ["-p"],
427
585
  task: "hello",
428
586
  sessionEnabled: false,
429
- systemPrompt: "You are a builder",
587
+ systemPrompt: "You are a worker",
430
588
  systemPromptMode: "replace",
431
589
  inheritProjectContext: false,
432
590
  inheritSkills: false,
@@ -445,8 +603,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
445
603
  inheritSkills: true,
446
604
  });
447
605
 
448
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
449
- assert.ok(extensionArgs.some((arg) => arg.endsWith(path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"))));
606
+ const extensionArgs = args.filter(
607
+ (arg, index) => args[index - 1] === "--extension",
608
+ );
609
+ assert.ok(
610
+ extensionArgs.some((arg) =>
611
+ arg.endsWith(
612
+ path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"),
613
+ ),
614
+ ),
615
+ );
450
616
  assert.ok(args.includes("--no-context-files"));
451
617
  assert.equal(env.SELESAI_SUBAGENT_CHILD, "1");
452
618
  assert.equal(env.SELESAI_SUBAGENT_INHERIT_PROJECT_CONTEXT, "0");
@@ -475,7 +641,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
475
641
  toolBudget: { soft: 2, hard: 3, block: ["read"] },
476
642
  });
477
643
 
478
- assert.deepEqual(JSON.parse(env[TOOL_BUDGET_ENV] ?? "{}"), { soft: 2, hard: 3, block: ["read"] });
644
+ assert.deepEqual(JSON.parse(env[TOOL_BUDGET_ENV] ?? "{}"), {
645
+ soft: 2,
646
+ hard: 3,
647
+ block: ["read"],
648
+ });
479
649
  assert.equal(env[TOOL_BUDGET_ZERO_AUTH_ENV], undefined);
480
650
  });
481
651
 
@@ -528,24 +698,33 @@ describe("buildPiArgs system prompt mode wiring", () => {
528
698
  sessionEnabled: false,
529
699
  inheritProjectContext: true,
530
700
  inheritSkills: true,
531
- intercomSessionName: "subagent-builder-78f659a3",
701
+ intercomSessionName: "subagent-worker-78f659a3",
532
702
  orchestratorIntercomTarget: "subagent-chat-parent",
533
703
  parentSessionId: "session-parent-123",
534
704
  runId: "78f659a3",
535
- childAgentName: "builder",
705
+ childAgentName: "worker",
536
706
  childIndex: 2,
537
707
  });
538
708
 
539
- assert.equal(env.SELESAI_SUBAGENT_INTERCOM_SESSION_NAME, "subagent-builder-78f659a3");
540
- assert.equal(env[PI_INTERCOM_STABLE_ID_ENV], "subagent-builder-78f659a3");
709
+ assert.equal(
710
+ env.SELESAI_SUBAGENT_INTERCOM_SESSION_NAME,
711
+ "subagent-worker-78f659a3",
712
+ );
713
+ assert.equal(env[PI_INTERCOM_STABLE_ID_ENV], "subagent-worker-78f659a3");
541
714
  assert.equal(env[PI_INTERCOM_SESSION_ID_ENV], undefined);
542
715
  assert.equal(env.SELESAI_SUBAGENT_ORCHESTRATOR_TARGET, "subagent-chat-parent");
543
- assert.equal(env[SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV], "session-parent-123");
716
+ assert.equal(
717
+ env[SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV],
718
+ "session-parent-123",
719
+ );
544
720
  assert.equal(env.SELESAI_SUBAGENT_RUN_ID, "78f659a3");
545
- assert.equal(env.SELESAI_SUBAGENT_CHILD_AGENT, "builder");
721
+ assert.equal(env.SELESAI_SUBAGENT_CHILD_AGENT, "worker");
546
722
  assert.equal(env.SELESAI_SUBAGENT_CHILD_INDEX, "2");
547
723
  assert.equal(typeof env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV], "string");
548
- assert.match(env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV] ?? "", /supervisor-channels/);
724
+ assert.match(
725
+ env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV] ?? "",
726
+ /supervisor-channels/,
727
+ );
549
728
  });
550
729
 
551
730
  it("clears inherited pi-intercom identity when no child intercom session name is set", () => {
@@ -572,7 +751,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
572
751
  inheritSkills: true,
573
752
  parentSessionId: "session-parent-123",
574
753
  runId: "permission-run",
575
- childAgentName: "builder",
754
+ childAgentName: "worker",
576
755
  childIndex: 3,
577
756
  permissionRules: { write: "ask" },
578
757
  });
@@ -580,7 +759,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
580
759
  assert.equal(env.SELESAI_SUBAGENT_ORCHESTRATOR_TARGET, undefined);
581
760
  assert.equal(env[PERMISSION_POLICY_ENV], JSON.stringify({ write: "ask" }));
582
761
  assert.equal(env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV], undefined);
583
- assert.equal(env[PERMISSION_AUDIT_PATH_ENV], path.join(tempDir!, "permission-audit.jsonl"));
762
+ assert.equal(
763
+ env[PERMISSION_AUDIT_PATH_ENV],
764
+ path.join(tempDir!, "permission-audit.jsonl"),
765
+ );
584
766
  });
585
767
 
586
768
  it("does not create a supervisor channel without an exact parent session id", () => {
@@ -592,7 +774,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
592
774
  inheritSkills: true,
593
775
  orchestratorIntercomTarget: "subagent-chat-parent",
594
776
  runId: "78f659a3",
595
- childAgentName: "builder",
777
+ childAgentName: "worker",
596
778
  childIndex: 2,
597
779
  });
598
780
 
@@ -607,15 +789,46 @@ describe("buildPiArgs system prompt mode wiring", () => {
607
789
  sessionEnabled: false,
608
790
  inheritProjectContext: false,
609
791
  inheritSkills: false,
610
- tools: ["read", "grep", "find", "ls", "bash", "edit", "write", "contact_supervisor"],
792
+ tools: [
793
+ "read",
794
+ "grep",
795
+ "find",
796
+ "ls",
797
+ "bash",
798
+ "edit",
799
+ "write",
800
+ "contact_supervisor",
801
+ ],
611
802
  });
612
803
 
613
804
  const toolsArg = args[args.indexOf("--tools") + 1];
614
- assert.equal(toolsArg, "read,grep,find,ls,bash,edit,write,contact_supervisor");
615
- assert.deepEqual(JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"), toolsArg.split(","));
805
+ assert.equal(
806
+ toolsArg,
807
+ "read,grep,find,ls,bash,edit,write,contact_supervisor",
808
+ );
809
+ assert.deepEqual(
810
+ JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"),
811
+ toolsArg.split(","),
812
+ );
616
813
  assert.equal(env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV], toolDiagnosticPath);
617
814
  });
618
815
 
816
+ it("launches the bundled reviewer without mutation-capable tools", () => {
817
+ const reviewer = discoverAgents(process.cwd(), "project").agents.find((agent) => agent.name === "reviewer");
818
+ assert.ok(reviewer, "expected bundled reviewer");
819
+ const { args } = buildPiArgs({
820
+ baseArgs: ["-p"],
821
+ task: "Review this change.",
822
+ sessionEnabled: false,
823
+ inheritProjectContext: false,
824
+ inheritSkills: false,
825
+ tools: reviewer.tools,
826
+ });
827
+
828
+ assert.equal(args[args.indexOf("--tools") + 1], "read,grep,find,ls,intercom");
829
+ assert.doesNotMatch(args[args.indexOf("--tools") + 1] ?? "", /\b(?:bash|edit|write)\b/);
830
+ });
831
+
619
832
  it("keeps structured_output available under explicit tool allowlists", () => {
620
833
  const { args, env } = buildPiArgs({
621
834
  baseArgs: ["-p"],
@@ -631,8 +844,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
631
844
  },
632
845
  });
633
846
 
634
- assert.equal(args[args.indexOf("--tools") + 1], "read,fixture_search,structured_output");
635
- assert.deepEqual(JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"), ["read", "fixture_search", "structured_output"]);
847
+ assert.equal(
848
+ args[args.indexOf("--tools") + 1],
849
+ "read,fixture_search,structured_output",
850
+ );
851
+ assert.deepEqual(JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"), [
852
+ "read",
853
+ "fixture_search",
854
+ "structured_output",
855
+ ]);
636
856
  });
637
857
 
638
858
  it("forwards the Pi package root to child processes for host peer resolution", () => {
@@ -676,16 +896,20 @@ describe("buildPiArgs system prompt mode wiring", () => {
676
896
  assert.equal(args[args.indexOf("--tools") + 1], "read,bash");
677
897
  });
678
898
 
679
- it("includes adapter tool filters in MCP cache identity", () => {
899
+ it("includes adapter tool filters and protocol version in MCP cache identity", () => {
680
900
  const base = { command: "npx", args: ["browser-mcp"] };
681
901
 
682
902
  assert.notEqual(
683
903
  computeMcpServerHash(base),
684
904
  computeMcpServerHash({ ...base, includeTools: ["browser_navigate"] }),
685
905
  );
906
+ assert.notEqual(
907
+ computeMcpServerHash(base),
908
+ computeMcpServerHash({ ...base, protocolVersion: "2025-03-26" }),
909
+ );
686
910
  });
687
911
 
688
- it("matches pi-mcp-adapter 2.15.0 metadata cache hashes", () => {
912
+ it("matches pi-mcp-adapter 2.20.1 metadata cache hashes", () => {
689
913
  process.env.MCP_HASH_ROOT = "/tmp/mcp-root";
690
914
  process.env.MCP_HASH_TOKEN = "token-value";
691
915
 
@@ -702,16 +926,19 @@ describe("buildPiArgs system prompt mode wiring", () => {
702
926
  }),
703
927
  computeMcpServerHash({
704
928
  url: "https://example.test/$env:MCP_HASH_TOKEN",
705
- headers: { Authorization: "Bearer ${MCP_HASH_TOKEN}", Secret: "!op read test" },
929
+ headers: {
930
+ Authorization: "Bearer ${MCP_HASH_TOKEN}",
931
+ Secret: "!op read test",
932
+ },
706
933
  auth: "bearer",
707
934
  bearerTokenEnv: "MCP_HASH_TOKEN",
708
935
  }),
709
936
  computeMcpServerHash({ socket: "{env:MCP_HASH_ROOT}/rmcp.sock" }),
710
937
  ],
711
938
  [
712
- "8af47bd5a801f42bd252789826df883c6f4db6f1d425b82f8561d75063fbe3a8",
713
- "77db141e556d24c3740a4b4f0cd50d8c23309a28062282cc1ca724207359ef5a",
714
- "77f7f77a3e8df990d8c78e99ca81508fd8d1f954e814ee7cbfa46719f71eb46b",
939
+ "e78fc93f972eabed6a17c81a253765e013089b082dc8c0a05e9dfe6cb0cb8248",
940
+ "90c5d968d664477fe0c72f3978c744ae9e44c8b0adc529685d0c5f337061b4a5",
941
+ "a1d6c326455134aa82feb4523939d6f987f85577fa4cae410f6fb8408cbf750d",
715
942
  ],
716
943
  );
717
944
  });
@@ -730,10 +957,49 @@ describe("buildPiArgs system prompt mode wiring", () => {
730
957
  mcpDirectTools: ["chrome-devtools"],
731
958
  });
732
959
 
733
- assert.equal(args[args.indexOf("--tools") + 1], "read,bash,chrome_devtools_take_screenshot,chrome_devtools_click");
960
+ assert.equal(
961
+ args[args.indexOf("--tools") + 1],
962
+ "read,bash,chrome_devtools_take_screenshot,chrome_devtools_click",
963
+ );
734
964
  assert.equal(env.MCP_DIRECT_TOOLS, "chrome-devtools");
735
- assert.equal(env[REQUIRED_CHILD_TOOLS_ENV], JSON.stringify(["read", "bash", "chrome_devtools_take_screenshot", "chrome_devtools_click"]));
736
- assert.equal(env[MCP_DIRECT_CHILD_TOOLS_ENV], JSON.stringify(["chrome_devtools_take_screenshot", "chrome_devtools_click"]));
965
+ assert.equal(
966
+ env[REQUIRED_CHILD_TOOLS_ENV],
967
+ JSON.stringify([
968
+ "read",
969
+ "bash",
970
+ "chrome_devtools_take_screenshot",
971
+ "chrome_devtools_click",
972
+ ]),
973
+ );
974
+ assert.equal(
975
+ env[MCP_DIRECT_CHILD_TOOLS_ENV],
976
+ JSON.stringify([
977
+ "chrome_devtools_take_screenshot",
978
+ "chrome_devtools_click",
979
+ ]),
980
+ );
981
+ });
982
+
983
+ it("resolves direct MCP tool selections from adapter-style protocol version cache entries", () => {
984
+ const fixture = createMcpFixture();
985
+ writeMcpFixture(fixture, {
986
+ serverName: "github",
987
+ definition: { command: "github-mcp", protocolVersion: "2025-03-26" },
988
+ configHash: "25b77b7189f1c5fe80b028cb84eb393532528231ac39081fe97c4e2ee7fa086b",
989
+ tools: [{ name: "search_repositories" }],
990
+ });
991
+
992
+ const { args } = buildPiArgs({
993
+ baseArgs: ["-p"],
994
+ task: "hello",
995
+ sessionEnabled: false,
996
+ inheritProjectContext: false,
997
+ inheritSkills: false,
998
+ tools: ["read"],
999
+ mcpDirectTools: ["github/search_repositories"],
1000
+ });
1001
+
1002
+ assert.equal(args[args.indexOf("--tools") + 1], "read,github_search_repositories");
737
1003
  });
738
1004
 
739
1005
  it("emits --no-tools for explicit empty tool allowlists", () => {
@@ -769,7 +1035,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
769
1035
  mcpDirectTools: ["chrome-devtools"],
770
1036
  });
771
1037
 
772
- assert.equal(args[args.indexOf("--tools") + 1], "chrome_devtools_take_screenshot,chrome_devtools_click");
1038
+ assert.equal(
1039
+ args[args.indexOf("--tools") + 1],
1040
+ "chrome_devtools_take_screenshot,chrome_devtools_click",
1041
+ );
773
1042
  assert.equal(env.MCP_DIRECT_TOOLS, "chrome-devtools");
774
1043
  }
775
1044
  });
@@ -778,7 +1047,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
778
1047
  for (const requireReadTool of [false, true]) {
779
1048
  const fixture = createMcpFixture();
780
1049
  writeJson(path.join(fixture.agentDir, "mcp.json"), {
781
- mcpServers: { "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] } },
1050
+ mcpServers: {
1051
+ "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] },
1052
+ },
782
1053
  });
783
1054
 
784
1055
  const { args, env } = buildPiArgs({
@@ -815,7 +1086,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
815
1086
  mcpDirectTools: ["github/search_repositories"],
816
1087
  });
817
1088
 
818
- assert.equal(args[args.indexOf("--tools") + 1], "read,github_search_repositories");
1089
+ assert.equal(
1090
+ args[args.indexOf("--tools") + 1],
1091
+ "read,github_search_repositories",
1092
+ );
819
1093
  });
820
1094
 
821
1095
  it("matches adapter prefix modes for direct MCP names", () => {
@@ -864,13 +1138,18 @@ describe("buildPiArgs system prompt mode wiring", () => {
864
1138
  mcpDirectTools: ["browser-mcp"],
865
1139
  });
866
1140
 
867
- assert.equal(args[args.indexOf("--tools") + 1], "read,browser_mcp_navigate,browser_mcp_get_console_logs");
1141
+ assert.equal(
1142
+ args[args.indexOf("--tools") + 1],
1143
+ "read,browser_mcp_navigate,browser_mcp_get_console_logs",
1144
+ );
868
1145
  });
869
1146
 
870
1147
  it("falls back to explicit builtins when direct MCP cache or config is missing or invalid", () => {
871
1148
  const missingFixture = createMcpFixture();
872
1149
  writeJson(path.join(missingFixture.agentDir, "mcp.json"), {
873
- mcpServers: { "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] } },
1150
+ mcpServers: {
1151
+ "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] },
1152
+ },
874
1153
  });
875
1154
  const missingCache = buildPiArgs({
876
1155
  baseArgs: ["-p"],
@@ -881,10 +1160,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
881
1160
  tools: ["read", "bash"],
882
1161
  mcpDirectTools: ["chrome-devtools"],
883
1162
  });
884
- assert.equal(missingCache.args[missingCache.args.indexOf("--tools") + 1], "read,bash");
1163
+ assert.equal(
1164
+ missingCache.args[missingCache.args.indexOf("--tools") + 1],
1165
+ "read,bash",
1166
+ );
885
1167
 
886
1168
  const invalidFixture = createMcpFixture();
887
- writeMcpFixture(invalidFixture, { cachedAt: Date.now() - 8 * 24 * 60 * 60 * 1000 });
1169
+ writeMcpFixture(invalidFixture, {
1170
+ cachedAt: Date.now() - 8 * 24 * 60 * 60 * 1000,
1171
+ });
888
1172
  const staleCache = buildPiArgs({
889
1173
  baseArgs: ["-p"],
890
1174
  task: "hello",
@@ -894,7 +1178,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
894
1178
  tools: ["read", "bash"],
895
1179
  mcpDirectTools: ["chrome-devtools"],
896
1180
  });
897
- assert.equal(staleCache.args[staleCache.args.indexOf("--tools") + 1], "read,bash");
1181
+ assert.equal(
1182
+ staleCache.args[staleCache.args.indexOf("--tools") + 1],
1183
+ "read,bash",
1184
+ );
898
1185
  });
899
1186
 
900
1187
  it("resolves project MCP config from the child cwd and expands SELESAI_CODING_AGENT_DIR", () => {
@@ -936,9 +1223,20 @@ describe("buildPiArgs system prompt mode wiring", () => {
936
1223
  mcpDirectTools: ["chrome-devtools"],
937
1224
  });
938
1225
 
939
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
940
- assert.equal(args[args.indexOf("--tools") + 1], "read,chrome_devtools_take_screenshot");
941
- assert.ok(extensionArgs.some((arg) => arg.endsWith(path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"))));
1226
+ const extensionArgs = args.filter(
1227
+ (arg, index) => args[index - 1] === "--extension",
1228
+ );
1229
+ assert.equal(
1230
+ args[args.indexOf("--tools") + 1],
1231
+ "read,chrome_devtools_take_screenshot",
1232
+ );
1233
+ assert.ok(
1234
+ extensionArgs.some((arg) =>
1235
+ arg.endsWith(
1236
+ path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"),
1237
+ ),
1238
+ ),
1239
+ );
942
1240
  assert.ok(extensionArgs.includes("./custom-tool.ts"));
943
1241
  assert.ok(extensionArgs.includes("./allowed-ext.ts"));
944
1242
  });
@@ -955,7 +1253,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
955
1253
  subagentOnlyExtensions: ["./child-tool.ts"],
956
1254
  });
957
1255
 
958
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1256
+ const extensionArgs = args.filter(
1257
+ (arg, index) => args[index - 1] === "--extension",
1258
+ );
959
1259
  assert.ok(args.includes("--no-extensions"));
960
1260
  assert.equal(args[args.indexOf("--tools") + 1], "read");
961
1261
  assert.ok(extensionArgs.includes("./main-allowed-ext.ts"));
@@ -978,7 +1278,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
978
1278
  parentCapabilityToken: "token-1",
979
1279
  });
980
1280
 
981
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1281
+ const extensionArgs = args.filter(
1282
+ (arg, index) => args[index - 1] === "--extension",
1283
+ );
982
1284
  assert.equal(args[args.indexOf("--tools") + 1], "read,subagent");
983
1285
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "1");
984
1286
  assert.equal(env[SUBAGENT_PARENT_EVENT_SINK_ENV], "/tmp/root/events");
@@ -987,9 +1289,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
987
1289
  assert.equal(env[SUBAGENT_PARENT_RUN_ID_ENV], "parent-run");
988
1290
  assert.equal(env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "1");
989
1291
  assert.equal(env[SUBAGENT_PARENT_DEPTH_ENV], "1");
990
- assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [{ runId: "parent-run", stepIndex: 1 }]);
1292
+ assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1293
+ { runId: "parent-run", stepIndex: 1 },
1294
+ ]);
991
1295
  assert.equal(env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV], "token-1");
992
- assert.ok(extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1296
+ assert.ok(
1297
+ extensionArgs.some((arg) =>
1298
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1299
+ ),
1300
+ );
993
1301
  });
994
1302
 
995
1303
  it("clears all fanout routing env values for non-fanout children", () => {
@@ -1008,7 +1316,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
1008
1316
  parentCapabilityToken: "token-should-not-leak",
1009
1317
  });
1010
1318
 
1011
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1319
+ const extensionArgs = args.filter(
1320
+ (arg, index) => args[index - 1] === "--extension",
1321
+ );
1012
1322
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "0");
1013
1323
  assert.equal(env[SUBAGENT_PARENT_EVENT_SINK_ENV], "");
1014
1324
  assert.equal(env[SUBAGENT_PARENT_CONTROL_INBOX_ENV], "");
@@ -1018,7 +1328,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
1018
1328
  assert.equal(env[SUBAGENT_PARENT_DEPTH_ENV], "");
1019
1329
  assert.equal(env[SUBAGENT_PARENT_PATH_ENV], "");
1020
1330
  assert.equal(env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV], "");
1021
- assert.ok(!extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1331
+ assert.ok(
1332
+ !extensionArgs.some((arg) =>
1333
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1334
+ ),
1335
+ );
1022
1336
  });
1023
1337
 
1024
1338
  it("inherits routing env only for authorized fanout children", () => {
@@ -1029,7 +1343,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
1029
1343
  process.env[SUBAGENT_RUN_ID_ENV] = "owner-run";
1030
1344
  process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = "4";
1031
1345
  process.env[SUBAGENT_PARENT_DEPTH_ENV] = "2";
1032
- process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([{ runId: "root-run", stepIndex: 0 }, { runId: "../unsafe", stepIndex: 1 }, { runId: "owner-run", stepIndex: 1 }]);
1346
+ process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([
1347
+ { runId: "root-run", stepIndex: 0 },
1348
+ { runId: "../unsafe", stepIndex: 1 },
1349
+ { runId: "owner-run", stepIndex: 1 },
1350
+ ]);
1033
1351
  process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] = "inherited-token";
1034
1352
 
1035
1353
  const fanout = buildPiArgs({
@@ -1040,14 +1358,27 @@ describe("buildPiArgs system prompt mode wiring", () => {
1040
1358
  inheritSkills: false,
1041
1359
  tools: ["subagent"],
1042
1360
  });
1043
- assert.equal(fanout.env[SUBAGENT_PARENT_EVENT_SINK_ENV], "/tmp/inherited/events");
1044
- assert.equal(fanout.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV], "/tmp/inherited/control");
1361
+ assert.equal(
1362
+ fanout.env[SUBAGENT_PARENT_EVENT_SINK_ENV],
1363
+ "/tmp/inherited/events",
1364
+ );
1365
+ assert.equal(
1366
+ fanout.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV],
1367
+ "/tmp/inherited/control",
1368
+ );
1045
1369
  assert.equal(fanout.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV], "inherited-root");
1046
1370
  assert.equal(fanout.env[SUBAGENT_PARENT_RUN_ID_ENV], "owner-run");
1047
1371
  assert.equal(fanout.env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "4");
1048
1372
  assert.equal(fanout.env[SUBAGENT_PARENT_DEPTH_ENV], "3");
1049
- assert.deepEqual(JSON.parse(fanout.env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [{ runId: "root-run", stepIndex: 0 }, { runId: "owner-run", stepIndex: 1 }, { runId: "owner-run", stepIndex: 4 }]);
1050
- assert.equal(fanout.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV], "inherited-token");
1373
+ assert.deepEqual(JSON.parse(fanout.env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1374
+ { runId: "root-run", stepIndex: 0 },
1375
+ { runId: "owner-run", stepIndex: 1 },
1376
+ { runId: "owner-run", stepIndex: 4 },
1377
+ ]);
1378
+ assert.equal(
1379
+ fanout.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV],
1380
+ "inherited-token",
1381
+ );
1051
1382
 
1052
1383
  const nonFanout = buildPiArgs({
1053
1384
  baseArgs: ["-p"],
@@ -1076,7 +1407,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
1076
1407
  process.env[SUBAGENT_RUN_ID_ENV] = "ancestor-run";
1077
1408
  process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = "4";
1078
1409
  process.env[SUBAGENT_PARENT_DEPTH_ENV] = "1";
1079
- process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([{ runId: "root-run", stepIndex: 0 }]);
1410
+ process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([
1411
+ { runId: "root-run", stepIndex: 0 },
1412
+ ]);
1080
1413
  process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] = "inherited-token";
1081
1414
 
1082
1415
  const { env } = buildPiArgs({
@@ -1093,7 +1426,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
1093
1426
  assert.equal(env[SUBAGENT_PARENT_RUN_ID_ENV], "current-nested-run");
1094
1427
  assert.equal(env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "2");
1095
1428
  assert.equal(env[SUBAGENT_PARENT_DEPTH_ENV], "2");
1096
- assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [{ runId: "root-run", stepIndex: 0 }, { runId: "current-nested-run", stepIndex: 2 }]);
1429
+ assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1430
+ { runId: "root-run", stepIndex: 0 },
1431
+ { runId: "current-nested-run", stepIndex: 2 },
1432
+ ]);
1097
1433
  });
1098
1434
 
1099
1435
  it("does not let direct MCP tools authorize child fanout", () => {
@@ -1114,10 +1450,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
1114
1450
  mcpDirectTools: ["delegator"],
1115
1451
  });
1116
1452
 
1117
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1453
+ const extensionArgs = args.filter(
1454
+ (arg, index) => args[index - 1] === "--extension",
1455
+ );
1118
1456
  assert.equal(args[args.indexOf("--tools") + 1], "read,delegator_subagent");
1119
1457
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "0");
1120
- assert.ok(!extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1458
+ assert.ok(
1459
+ !extensionArgs.some((arg) =>
1460
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1461
+ ),
1462
+ );
1121
1463
  });
1122
1464
 
1123
1465
  it("keeps child-safe fanout registration in explicit extensions mode", () => {
@@ -1131,10 +1473,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
1131
1473
  extensions: ["./agent-allowed-ext.ts"],
1132
1474
  });
1133
1475
 
1134
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1476
+ const extensionArgs = args.filter(
1477
+ (arg, index) => args[index - 1] === "--extension",
1478
+ );
1135
1479
  assert.ok(args.includes("--no-extensions"));
1136
1480
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "1");
1137
- assert.ok(extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1481
+ assert.ok(
1482
+ extensionArgs.some((arg) =>
1483
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1484
+ ),
1485
+ );
1138
1486
  assert.ok(extensionArgs.includes("./agent-allowed-ext.ts"));
1139
1487
  });
1140
1488