@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
@@ -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,18 +49,21 @@ 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,
@@ -94,10 +108,15 @@ function writeMcpFixture(
94
108
  resources?: Array<{ name: string; uri: string; description?: string }>;
95
109
  configPath?: string;
96
110
  cachedAt?: number;
111
+ configHash?: string;
97
112
  } = {},
98
113
  ): void {
99
114
  const serverName = options.serverName ?? "chrome-devtools";
100
- const definition = { command: "npx", args: ["chrome-devtools-mcp"], ...(options.definition ?? {}) };
115
+ const definition = {
116
+ command: "npx",
117
+ args: ["chrome-devtools-mcp"],
118
+ ...(options.definition ?? {}),
119
+ };
101
120
  writeJson(options.configPath ?? path.join(fixture.agentDir, "mcp.json"), {
102
121
  ...(options.settings ? { settings: options.settings } : {}),
103
122
  mcpServers: {
@@ -108,7 +127,7 @@ function writeMcpFixture(
108
127
  version: 1,
109
128
  servers: {
110
129
  [serverName]: {
111
- configHash: computeMcpServerHash(definition),
130
+ configHash: options.configHash ?? computeMcpServerHash(definition),
112
131
  cachedAt: options.cachedAt ?? Date.now(),
113
132
  tools: options.tools ?? [
114
133
  { name: "take_screenshot" },
@@ -136,8 +155,16 @@ afterEach(() => {
136
155
 
137
156
  describe("buildPiArgs session wiring", () => {
138
157
  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");
158
+ const privateExt = path.join(
159
+ os.tmpdir(),
160
+ "private-extension-root",
161
+ "secret-extension.ts",
162
+ );
163
+ const toolExt = path.join(
164
+ os.tmpdir(),
165
+ "tool-extension-root",
166
+ "tool-extension.ts",
167
+ );
141
168
  const plan = resolvePiLaunchToolPlan({
142
169
  tools: ["read", toolExt],
143
170
  extensions: [privateExt],
@@ -149,13 +176,26 @@ describe("buildPiArgs session wiring", () => {
149
176
  assert.equal(projection.version, 1);
150
177
  assert.equal(projection.source, "launch-resolved");
151
178
  assert.equal(projection.disableAmbientExtensions, true);
152
- assert.equal(projection.runtime.length, 1);
179
+ assert.ok(
180
+ projection.runtime.length >= 1,
181
+ `expected at least 1 runtime extension, got ${projection.runtime.length}`,
182
+ );
153
183
  assert.equal(projection.configured.length, 3);
154
- assert.equal(projection.effective.length, 4);
155
- for (const id of [...projection.runtime, ...projection.configured, ...projection.effective]) {
184
+ assert.ok(
185
+ projection.effective.length >= 4,
186
+ `expected at least 4 effective extensions, got ${projection.effective.length}`,
187
+ );
188
+ for (const id of [
189
+ ...projection.runtime,
190
+ ...projection.configured,
191
+ ...projection.effective,
192
+ ]) {
156
193
  assert.match(id, /^sha256:[a-f0-9]{16}$/);
157
194
  }
158
- assert.ok(!JSON.stringify(projection).includes(os.tmpdir()), "projection should not expose raw extension paths");
195
+ assert.ok(
196
+ !JSON.stringify(projection).includes(os.tmpdir()),
197
+ "projection should not expose raw extension paths",
198
+ );
159
199
  });
160
200
 
161
201
  it("uses --session when sessionFile is provided", () => {
@@ -175,8 +215,14 @@ describe("buildPiArgs session wiring", () => {
175
215
  assert.ok(args.includes("--session"));
176
216
  assert.ok(args.includes(sessionFile));
177
217
  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");
218
+ assert.ok(
219
+ !args.includes("--session-dir"),
220
+ "--session-dir should not be emitted with --session",
221
+ );
222
+ assert.ok(
223
+ !args.includes("--no-session"),
224
+ "--no-session should not be emitted with --session",
225
+ );
180
226
  } finally {
181
227
  fs.rmSync(tempDir, { recursive: true, force: true });
182
228
  }
@@ -225,16 +271,28 @@ describe("buildPiArgs session wiring", () => {
225
271
  });
226
272
 
227
273
  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");
274
+ assert.equal(
275
+ buildPiArgs({
276
+ baseArgs: [],
277
+ task: "test",
278
+ sessionEnabled: false,
279
+ inheritProjectContext: true,
280
+ inheritSkills: true,
281
+ waitToolEnabled: false,
282
+ }).env[WAIT_TOOL_ENABLED_ENV],
283
+ "false",
284
+ );
285
+ assert.equal(
286
+ buildPiArgs({
287
+ baseArgs: [],
288
+ task: "test",
289
+ sessionEnabled: false,
290
+ inheritProjectContext: true,
291
+ inheritSkills: true,
292
+ waitToolEnabled: true,
293
+ }).env[WAIT_TOOL_ENABLED_ENV],
294
+ "true",
295
+ );
238
296
  });
239
297
 
240
298
  it("passes child watchdog config only when explicitly provided", () => {
@@ -256,7 +314,7 @@ describe("buildPiArgs session wiring", () => {
256
314
  childWatchdog: {
257
315
  enabled: true,
258
316
  runId: "run-1",
259
- agent: "builder",
317
+ agent: "worker",
260
318
  childIndex: 2,
261
319
  watchdogTailTimeoutMs: 1234,
262
320
  agentEndTimeoutMs: 500,
@@ -272,7 +330,7 @@ describe("buildPiArgs session wiring", () => {
272
330
  assert.deepEqual(JSON.parse(encoded ?? "{}"), {
273
331
  enabled: true,
274
332
  runId: "run-1",
275
- agent: "builder",
333
+ agent: "worker",
276
334
  childIndex: 2,
277
335
  watchdogTailTimeoutMs: 1234,
278
336
  agentEndTimeoutMs: 500,
@@ -316,7 +374,6 @@ describe("buildPiArgs model wiring", () => {
316
374
  assert.ok(!args.includes("--models"));
317
375
  });
318
376
 
319
-
320
377
  it("preserves thinking suffixes on model args", () => {
321
378
  const { args } = buildPiArgs({
322
379
  baseArgs: ["-p"],
@@ -328,7 +385,10 @@ describe("buildPiArgs model wiring", () => {
328
385
  inheritSkills: false,
329
386
  });
330
387
 
331
- assert.equal(applyThinkingSuffix("openai-codex/gpt-5.4-mini", "high"), "openai-codex/gpt-5.4-mini:high");
388
+ assert.equal(
389
+ applyThinkingSuffix("openai-codex/gpt-5.4-mini", "high"),
390
+ "openai-codex/gpt-5.4-mini:high",
391
+ );
332
392
  assert.ok(args.includes("--model"));
333
393
  assert.ok(args.includes("openai-codex/gpt-5.4-mini:high"));
334
394
  });
@@ -344,9 +404,18 @@ describe("buildPiArgs model wiring", () => {
344
404
  inheritSkills: false,
345
405
  });
346
406
 
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");
407
+ assert.equal(
408
+ applyThinkingSuffix("openai/gpt-5", "max"),
409
+ "openai/gpt-5:max",
410
+ );
411
+ assert.equal(
412
+ applyThinkingSuffix("openai/gpt-5:max", "high"),
413
+ "openai/gpt-5:max",
414
+ );
415
+ assert.equal(
416
+ applyThinkingSuffix("openai/gpt-5:max", "high", true),
417
+ "openai/gpt-5:high",
418
+ );
350
419
  assert.ok(args.includes("--model"));
351
420
  assert.ok(args.includes("openai/gpt-5:max"));
352
421
  });
@@ -362,8 +431,14 @@ describe("buildPiArgs model wiring", () => {
362
431
  inheritSkills: false,
363
432
  });
364
433
 
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");
434
+ assert.equal(
435
+ applyThinkingSuffix("anthropic/claude-haiku-4-5", "off"),
436
+ "anthropic/claude-haiku-4-5:off",
437
+ );
438
+ assert.equal(
439
+ applyThinkingSuffix("anthropic/claude-haiku-4-5:high", "off", true),
440
+ "anthropic/claude-haiku-4-5:off",
441
+ );
367
442
  assert.ok(args.includes("--model"));
368
443
  assert.ok(args.includes("anthropic/claude-haiku-4-5:off"));
369
444
  });
@@ -412,7 +487,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
412
487
  baseArgs: ["-p"],
413
488
  task: "hello",
414
489
  sessionEnabled: false,
415
- systemPrompt: "You are a builder",
490
+ systemPrompt: "You are a worker",
416
491
  inheritProjectContext: false,
417
492
  inheritSkills: false,
418
493
  });
@@ -426,7 +501,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
426
501
  baseArgs: ["-p"],
427
502
  task: "hello",
428
503
  sessionEnabled: false,
429
- systemPrompt: "You are a builder",
504
+ systemPrompt: "You are a worker",
430
505
  systemPromptMode: "replace",
431
506
  inheritProjectContext: false,
432
507
  inheritSkills: false,
@@ -445,8 +520,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
445
520
  inheritSkills: true,
446
521
  });
447
522
 
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"))));
523
+ const extensionArgs = args.filter(
524
+ (arg, index) => args[index - 1] === "--extension",
525
+ );
526
+ assert.ok(
527
+ extensionArgs.some((arg) =>
528
+ arg.endsWith(
529
+ path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"),
530
+ ),
531
+ ),
532
+ );
450
533
  assert.ok(args.includes("--no-context-files"));
451
534
  assert.equal(env.SELESAI_SUBAGENT_CHILD, "1");
452
535
  assert.equal(env.SELESAI_SUBAGENT_INHERIT_PROJECT_CONTEXT, "0");
@@ -475,7 +558,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
475
558
  toolBudget: { soft: 2, hard: 3, block: ["read"] },
476
559
  });
477
560
 
478
- assert.deepEqual(JSON.parse(env[TOOL_BUDGET_ENV] ?? "{}"), { soft: 2, hard: 3, block: ["read"] });
561
+ assert.deepEqual(JSON.parse(env[TOOL_BUDGET_ENV] ?? "{}"), {
562
+ soft: 2,
563
+ hard: 3,
564
+ block: ["read"],
565
+ });
479
566
  assert.equal(env[TOOL_BUDGET_ZERO_AUTH_ENV], undefined);
480
567
  });
481
568
 
@@ -528,24 +615,33 @@ describe("buildPiArgs system prompt mode wiring", () => {
528
615
  sessionEnabled: false,
529
616
  inheritProjectContext: true,
530
617
  inheritSkills: true,
531
- intercomSessionName: "subagent-builder-78f659a3",
618
+ intercomSessionName: "subagent-worker-78f659a3",
532
619
  orchestratorIntercomTarget: "subagent-chat-parent",
533
620
  parentSessionId: "session-parent-123",
534
621
  runId: "78f659a3",
535
- childAgentName: "builder",
622
+ childAgentName: "worker",
536
623
  childIndex: 2,
537
624
  });
538
625
 
539
- assert.equal(env.SELESAI_SUBAGENT_INTERCOM_SESSION_NAME, "subagent-builder-78f659a3");
540
- assert.equal(env[PI_INTERCOM_STABLE_ID_ENV], "subagent-builder-78f659a3");
626
+ assert.equal(
627
+ env.SELESAI_SUBAGENT_INTERCOM_SESSION_NAME,
628
+ "subagent-worker-78f659a3",
629
+ );
630
+ assert.equal(env[PI_INTERCOM_STABLE_ID_ENV], "subagent-worker-78f659a3");
541
631
  assert.equal(env[PI_INTERCOM_SESSION_ID_ENV], undefined);
542
632
  assert.equal(env.SELESAI_SUBAGENT_ORCHESTRATOR_TARGET, "subagent-chat-parent");
543
- assert.equal(env[SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV], "session-parent-123");
633
+ assert.equal(
634
+ env[SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV],
635
+ "session-parent-123",
636
+ );
544
637
  assert.equal(env.SELESAI_SUBAGENT_RUN_ID, "78f659a3");
545
- assert.equal(env.SELESAI_SUBAGENT_CHILD_AGENT, "builder");
638
+ assert.equal(env.SELESAI_SUBAGENT_CHILD_AGENT, "worker");
546
639
  assert.equal(env.SELESAI_SUBAGENT_CHILD_INDEX, "2");
547
640
  assert.equal(typeof env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV], "string");
548
- assert.match(env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV] ?? "", /supervisor-channels/);
641
+ assert.match(
642
+ env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV] ?? "",
643
+ /supervisor-channels/,
644
+ );
549
645
  });
550
646
 
551
647
  it("clears inherited pi-intercom identity when no child intercom session name is set", () => {
@@ -572,7 +668,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
572
668
  inheritSkills: true,
573
669
  parentSessionId: "session-parent-123",
574
670
  runId: "permission-run",
575
- childAgentName: "builder",
671
+ childAgentName: "worker",
576
672
  childIndex: 3,
577
673
  permissionRules: { write: "ask" },
578
674
  });
@@ -580,7 +676,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
580
676
  assert.equal(env.SELESAI_SUBAGENT_ORCHESTRATOR_TARGET, undefined);
581
677
  assert.equal(env[PERMISSION_POLICY_ENV], JSON.stringify({ write: "ask" }));
582
678
  assert.equal(env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV], undefined);
583
- assert.equal(env[PERMISSION_AUDIT_PATH_ENV], path.join(tempDir!, "permission-audit.jsonl"));
679
+ assert.equal(
680
+ env[PERMISSION_AUDIT_PATH_ENV],
681
+ path.join(tempDir!, "permission-audit.jsonl"),
682
+ );
584
683
  });
585
684
 
586
685
  it("does not create a supervisor channel without an exact parent session id", () => {
@@ -592,7 +691,7 @@ describe("buildPiArgs system prompt mode wiring", () => {
592
691
  inheritSkills: true,
593
692
  orchestratorIntercomTarget: "subagent-chat-parent",
594
693
  runId: "78f659a3",
595
- childAgentName: "builder",
694
+ childAgentName: "worker",
596
695
  childIndex: 2,
597
696
  });
598
697
 
@@ -607,15 +706,46 @@ describe("buildPiArgs system prompt mode wiring", () => {
607
706
  sessionEnabled: false,
608
707
  inheritProjectContext: false,
609
708
  inheritSkills: false,
610
- tools: ["read", "grep", "find", "ls", "bash", "edit", "write", "contact_supervisor"],
709
+ tools: [
710
+ "read",
711
+ "grep",
712
+ "find",
713
+ "ls",
714
+ "bash",
715
+ "edit",
716
+ "write",
717
+ "contact_supervisor",
718
+ ],
611
719
  });
612
720
 
613
721
  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(","));
722
+ assert.equal(
723
+ toolsArg,
724
+ "read,grep,find,ls,bash,edit,write,contact_supervisor",
725
+ );
726
+ assert.deepEqual(
727
+ JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"),
728
+ toolsArg.split(","),
729
+ );
616
730
  assert.equal(env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV], toolDiagnosticPath);
617
731
  });
618
732
 
733
+ it("launches the bundled reviewer without mutation-capable tools", () => {
734
+ const reviewer = discoverAgents(process.cwd(), "project").agents.find((agent) => agent.name === "reviewer");
735
+ assert.ok(reviewer, "expected bundled reviewer");
736
+ const { args } = buildPiArgs({
737
+ baseArgs: ["-p"],
738
+ task: "Review this change.",
739
+ sessionEnabled: false,
740
+ inheritProjectContext: false,
741
+ inheritSkills: false,
742
+ tools: reviewer.tools,
743
+ });
744
+
745
+ assert.equal(args[args.indexOf("--tools") + 1], "read,grep,find,ls,intercom");
746
+ assert.doesNotMatch(args[args.indexOf("--tools") + 1] ?? "", /\b(?:bash|edit|write)\b/);
747
+ });
748
+
619
749
  it("keeps structured_output available under explicit tool allowlists", () => {
620
750
  const { args, env } = buildPiArgs({
621
751
  baseArgs: ["-p"],
@@ -631,8 +761,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
631
761
  },
632
762
  });
633
763
 
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"]);
764
+ assert.equal(
765
+ args[args.indexOf("--tools") + 1],
766
+ "read,fixture_search,structured_output",
767
+ );
768
+ assert.deepEqual(JSON.parse(env[REQUIRED_CHILD_TOOLS_ENV] ?? "[]"), [
769
+ "read",
770
+ "fixture_search",
771
+ "structured_output",
772
+ ]);
636
773
  });
637
774
 
638
775
  it("forwards the Pi package root to child processes for host peer resolution", () => {
@@ -676,16 +813,20 @@ describe("buildPiArgs system prompt mode wiring", () => {
676
813
  assert.equal(args[args.indexOf("--tools") + 1], "read,bash");
677
814
  });
678
815
 
679
- it("includes adapter tool filters in MCP cache identity", () => {
816
+ it("includes adapter tool filters and protocol version in MCP cache identity", () => {
680
817
  const base = { command: "npx", args: ["browser-mcp"] };
681
818
 
682
819
  assert.notEqual(
683
820
  computeMcpServerHash(base),
684
821
  computeMcpServerHash({ ...base, includeTools: ["browser_navigate"] }),
685
822
  );
823
+ assert.notEqual(
824
+ computeMcpServerHash(base),
825
+ computeMcpServerHash({ ...base, protocolVersion: "2025-03-26" }),
826
+ );
686
827
  });
687
828
 
688
- it("matches pi-mcp-adapter 2.15.0 metadata cache hashes", () => {
829
+ it("matches pi-mcp-adapter 2.20.1 metadata cache hashes", () => {
689
830
  process.env.MCP_HASH_ROOT = "/tmp/mcp-root";
690
831
  process.env.MCP_HASH_TOKEN = "token-value";
691
832
 
@@ -702,16 +843,19 @@ describe("buildPiArgs system prompt mode wiring", () => {
702
843
  }),
703
844
  computeMcpServerHash({
704
845
  url: "https://example.test/$env:MCP_HASH_TOKEN",
705
- headers: { Authorization: "Bearer ${MCP_HASH_TOKEN}", Secret: "!op read test" },
846
+ headers: {
847
+ Authorization: "Bearer ${MCP_HASH_TOKEN}",
848
+ Secret: "!op read test",
849
+ },
706
850
  auth: "bearer",
707
851
  bearerTokenEnv: "MCP_HASH_TOKEN",
708
852
  }),
709
853
  computeMcpServerHash({ socket: "{env:MCP_HASH_ROOT}/rmcp.sock" }),
710
854
  ],
711
855
  [
712
- "8af47bd5a801f42bd252789826df883c6f4db6f1d425b82f8561d75063fbe3a8",
713
- "77db141e556d24c3740a4b4f0cd50d8c23309a28062282cc1ca724207359ef5a",
714
- "77f7f77a3e8df990d8c78e99ca81508fd8d1f954e814ee7cbfa46719f71eb46b",
856
+ "e78fc93f972eabed6a17c81a253765e013089b082dc8c0a05e9dfe6cb0cb8248",
857
+ "90c5d968d664477fe0c72f3978c744ae9e44c8b0adc529685d0c5f337061b4a5",
858
+ "a1d6c326455134aa82feb4523939d6f987f85577fa4cae410f6fb8408cbf750d",
715
859
  ],
716
860
  );
717
861
  });
@@ -730,10 +874,49 @@ describe("buildPiArgs system prompt mode wiring", () => {
730
874
  mcpDirectTools: ["chrome-devtools"],
731
875
  });
732
876
 
733
- assert.equal(args[args.indexOf("--tools") + 1], "read,bash,chrome_devtools_take_screenshot,chrome_devtools_click");
877
+ assert.equal(
878
+ args[args.indexOf("--tools") + 1],
879
+ "read,bash,chrome_devtools_take_screenshot,chrome_devtools_click",
880
+ );
734
881
  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"]));
882
+ assert.equal(
883
+ env[REQUIRED_CHILD_TOOLS_ENV],
884
+ JSON.stringify([
885
+ "read",
886
+ "bash",
887
+ "chrome_devtools_take_screenshot",
888
+ "chrome_devtools_click",
889
+ ]),
890
+ );
891
+ assert.equal(
892
+ env[MCP_DIRECT_CHILD_TOOLS_ENV],
893
+ JSON.stringify([
894
+ "chrome_devtools_take_screenshot",
895
+ "chrome_devtools_click",
896
+ ]),
897
+ );
898
+ });
899
+
900
+ it("resolves direct MCP tool selections from adapter-style protocol version cache entries", () => {
901
+ const fixture = createMcpFixture();
902
+ writeMcpFixture(fixture, {
903
+ serverName: "github",
904
+ definition: { command: "github-mcp", protocolVersion: "2025-03-26" },
905
+ configHash: "25b77b7189f1c5fe80b028cb84eb393532528231ac39081fe97c4e2ee7fa086b",
906
+ tools: [{ name: "search_repositories" }],
907
+ });
908
+
909
+ const { args } = buildPiArgs({
910
+ baseArgs: ["-p"],
911
+ task: "hello",
912
+ sessionEnabled: false,
913
+ inheritProjectContext: false,
914
+ inheritSkills: false,
915
+ tools: ["read"],
916
+ mcpDirectTools: ["github/search_repositories"],
917
+ });
918
+
919
+ assert.equal(args[args.indexOf("--tools") + 1], "read,github_search_repositories");
737
920
  });
738
921
 
739
922
  it("emits --no-tools for explicit empty tool allowlists", () => {
@@ -769,7 +952,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
769
952
  mcpDirectTools: ["chrome-devtools"],
770
953
  });
771
954
 
772
- assert.equal(args[args.indexOf("--tools") + 1], "chrome_devtools_take_screenshot,chrome_devtools_click");
955
+ assert.equal(
956
+ args[args.indexOf("--tools") + 1],
957
+ "chrome_devtools_take_screenshot,chrome_devtools_click",
958
+ );
773
959
  assert.equal(env.MCP_DIRECT_TOOLS, "chrome-devtools");
774
960
  }
775
961
  });
@@ -778,7 +964,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
778
964
  for (const requireReadTool of [false, true]) {
779
965
  const fixture = createMcpFixture();
780
966
  writeJson(path.join(fixture.agentDir, "mcp.json"), {
781
- mcpServers: { "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] } },
967
+ mcpServers: {
968
+ "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] },
969
+ },
782
970
  });
783
971
 
784
972
  const { args, env } = buildPiArgs({
@@ -815,7 +1003,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
815
1003
  mcpDirectTools: ["github/search_repositories"],
816
1004
  });
817
1005
 
818
- assert.equal(args[args.indexOf("--tools") + 1], "read,github_search_repositories");
1006
+ assert.equal(
1007
+ args[args.indexOf("--tools") + 1],
1008
+ "read,github_search_repositories",
1009
+ );
819
1010
  });
820
1011
 
821
1012
  it("matches adapter prefix modes for direct MCP names", () => {
@@ -864,13 +1055,18 @@ describe("buildPiArgs system prompt mode wiring", () => {
864
1055
  mcpDirectTools: ["browser-mcp"],
865
1056
  });
866
1057
 
867
- assert.equal(args[args.indexOf("--tools") + 1], "read,browser_mcp_navigate,browser_mcp_get_console_logs");
1058
+ assert.equal(
1059
+ args[args.indexOf("--tools") + 1],
1060
+ "read,browser_mcp_navigate,browser_mcp_get_console_logs",
1061
+ );
868
1062
  });
869
1063
 
870
1064
  it("falls back to explicit builtins when direct MCP cache or config is missing or invalid", () => {
871
1065
  const missingFixture = createMcpFixture();
872
1066
  writeJson(path.join(missingFixture.agentDir, "mcp.json"), {
873
- mcpServers: { "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] } },
1067
+ mcpServers: {
1068
+ "chrome-devtools": { command: "npx", args: ["chrome-devtools-mcp"] },
1069
+ },
874
1070
  });
875
1071
  const missingCache = buildPiArgs({
876
1072
  baseArgs: ["-p"],
@@ -881,10 +1077,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
881
1077
  tools: ["read", "bash"],
882
1078
  mcpDirectTools: ["chrome-devtools"],
883
1079
  });
884
- assert.equal(missingCache.args[missingCache.args.indexOf("--tools") + 1], "read,bash");
1080
+ assert.equal(
1081
+ missingCache.args[missingCache.args.indexOf("--tools") + 1],
1082
+ "read,bash",
1083
+ );
885
1084
 
886
1085
  const invalidFixture = createMcpFixture();
887
- writeMcpFixture(invalidFixture, { cachedAt: Date.now() - 8 * 24 * 60 * 60 * 1000 });
1086
+ writeMcpFixture(invalidFixture, {
1087
+ cachedAt: Date.now() - 8 * 24 * 60 * 60 * 1000,
1088
+ });
888
1089
  const staleCache = buildPiArgs({
889
1090
  baseArgs: ["-p"],
890
1091
  task: "hello",
@@ -894,7 +1095,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
894
1095
  tools: ["read", "bash"],
895
1096
  mcpDirectTools: ["chrome-devtools"],
896
1097
  });
897
- assert.equal(staleCache.args[staleCache.args.indexOf("--tools") + 1], "read,bash");
1098
+ assert.equal(
1099
+ staleCache.args[staleCache.args.indexOf("--tools") + 1],
1100
+ "read,bash",
1101
+ );
898
1102
  });
899
1103
 
900
1104
  it("resolves project MCP config from the child cwd and expands SELESAI_CODING_AGENT_DIR", () => {
@@ -936,9 +1140,20 @@ describe("buildPiArgs system prompt mode wiring", () => {
936
1140
  mcpDirectTools: ["chrome-devtools"],
937
1141
  });
938
1142
 
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"))));
1143
+ const extensionArgs = args.filter(
1144
+ (arg, index) => args[index - 1] === "--extension",
1145
+ );
1146
+ assert.equal(
1147
+ args[args.indexOf("--tools") + 1],
1148
+ "read,chrome_devtools_take_screenshot",
1149
+ );
1150
+ assert.ok(
1151
+ extensionArgs.some((arg) =>
1152
+ arg.endsWith(
1153
+ path.join("src", "runs", "shared", "subagent-prompt-runtime.ts"),
1154
+ ),
1155
+ ),
1156
+ );
942
1157
  assert.ok(extensionArgs.includes("./custom-tool.ts"));
943
1158
  assert.ok(extensionArgs.includes("./allowed-ext.ts"));
944
1159
  });
@@ -955,7 +1170,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
955
1170
  subagentOnlyExtensions: ["./child-tool.ts"],
956
1171
  });
957
1172
 
958
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1173
+ const extensionArgs = args.filter(
1174
+ (arg, index) => args[index - 1] === "--extension",
1175
+ );
959
1176
  assert.ok(args.includes("--no-extensions"));
960
1177
  assert.equal(args[args.indexOf("--tools") + 1], "read");
961
1178
  assert.ok(extensionArgs.includes("./main-allowed-ext.ts"));
@@ -978,7 +1195,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
978
1195
  parentCapabilityToken: "token-1",
979
1196
  });
980
1197
 
981
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1198
+ const extensionArgs = args.filter(
1199
+ (arg, index) => args[index - 1] === "--extension",
1200
+ );
982
1201
  assert.equal(args[args.indexOf("--tools") + 1], "read,subagent");
983
1202
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "1");
984
1203
  assert.equal(env[SUBAGENT_PARENT_EVENT_SINK_ENV], "/tmp/root/events");
@@ -987,9 +1206,15 @@ describe("buildPiArgs system prompt mode wiring", () => {
987
1206
  assert.equal(env[SUBAGENT_PARENT_RUN_ID_ENV], "parent-run");
988
1207
  assert.equal(env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "1");
989
1208
  assert.equal(env[SUBAGENT_PARENT_DEPTH_ENV], "1");
990
- assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [{ runId: "parent-run", stepIndex: 1 }]);
1209
+ assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1210
+ { runId: "parent-run", stepIndex: 1 },
1211
+ ]);
991
1212
  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"))));
1213
+ assert.ok(
1214
+ extensionArgs.some((arg) =>
1215
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1216
+ ),
1217
+ );
993
1218
  });
994
1219
 
995
1220
  it("clears all fanout routing env values for non-fanout children", () => {
@@ -1008,7 +1233,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
1008
1233
  parentCapabilityToken: "token-should-not-leak",
1009
1234
  });
1010
1235
 
1011
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1236
+ const extensionArgs = args.filter(
1237
+ (arg, index) => args[index - 1] === "--extension",
1238
+ );
1012
1239
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "0");
1013
1240
  assert.equal(env[SUBAGENT_PARENT_EVENT_SINK_ENV], "");
1014
1241
  assert.equal(env[SUBAGENT_PARENT_CONTROL_INBOX_ENV], "");
@@ -1018,7 +1245,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
1018
1245
  assert.equal(env[SUBAGENT_PARENT_DEPTH_ENV], "");
1019
1246
  assert.equal(env[SUBAGENT_PARENT_PATH_ENV], "");
1020
1247
  assert.equal(env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV], "");
1021
- assert.ok(!extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1248
+ assert.ok(
1249
+ !extensionArgs.some((arg) =>
1250
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1251
+ ),
1252
+ );
1022
1253
  });
1023
1254
 
1024
1255
  it("inherits routing env only for authorized fanout children", () => {
@@ -1029,7 +1260,11 @@ describe("buildPiArgs system prompt mode wiring", () => {
1029
1260
  process.env[SUBAGENT_RUN_ID_ENV] = "owner-run";
1030
1261
  process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = "4";
1031
1262
  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 }]);
1263
+ process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([
1264
+ { runId: "root-run", stepIndex: 0 },
1265
+ { runId: "../unsafe", stepIndex: 1 },
1266
+ { runId: "owner-run", stepIndex: 1 },
1267
+ ]);
1033
1268
  process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] = "inherited-token";
1034
1269
 
1035
1270
  const fanout = buildPiArgs({
@@ -1040,14 +1275,27 @@ describe("buildPiArgs system prompt mode wiring", () => {
1040
1275
  inheritSkills: false,
1041
1276
  tools: ["subagent"],
1042
1277
  });
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");
1278
+ assert.equal(
1279
+ fanout.env[SUBAGENT_PARENT_EVENT_SINK_ENV],
1280
+ "/tmp/inherited/events",
1281
+ );
1282
+ assert.equal(
1283
+ fanout.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV],
1284
+ "/tmp/inherited/control",
1285
+ );
1045
1286
  assert.equal(fanout.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV], "inherited-root");
1046
1287
  assert.equal(fanout.env[SUBAGENT_PARENT_RUN_ID_ENV], "owner-run");
1047
1288
  assert.equal(fanout.env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "4");
1048
1289
  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");
1290
+ assert.deepEqual(JSON.parse(fanout.env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1291
+ { runId: "root-run", stepIndex: 0 },
1292
+ { runId: "owner-run", stepIndex: 1 },
1293
+ { runId: "owner-run", stepIndex: 4 },
1294
+ ]);
1295
+ assert.equal(
1296
+ fanout.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV],
1297
+ "inherited-token",
1298
+ );
1051
1299
 
1052
1300
  const nonFanout = buildPiArgs({
1053
1301
  baseArgs: ["-p"],
@@ -1076,7 +1324,9 @@ describe("buildPiArgs system prompt mode wiring", () => {
1076
1324
  process.env[SUBAGENT_RUN_ID_ENV] = "ancestor-run";
1077
1325
  process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = "4";
1078
1326
  process.env[SUBAGENT_PARENT_DEPTH_ENV] = "1";
1079
- process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([{ runId: "root-run", stepIndex: 0 }]);
1327
+ process.env[SUBAGENT_PARENT_PATH_ENV] = JSON.stringify([
1328
+ { runId: "root-run", stepIndex: 0 },
1329
+ ]);
1080
1330
  process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] = "inherited-token";
1081
1331
 
1082
1332
  const { env } = buildPiArgs({
@@ -1093,7 +1343,10 @@ describe("buildPiArgs system prompt mode wiring", () => {
1093
1343
  assert.equal(env[SUBAGENT_PARENT_RUN_ID_ENV], "current-nested-run");
1094
1344
  assert.equal(env[SUBAGENT_PARENT_CHILD_INDEX_ENV], "2");
1095
1345
  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 }]);
1346
+ assert.deepEqual(JSON.parse(env[SUBAGENT_PARENT_PATH_ENV] ?? "[]"), [
1347
+ { runId: "root-run", stepIndex: 0 },
1348
+ { runId: "current-nested-run", stepIndex: 2 },
1349
+ ]);
1097
1350
  });
1098
1351
 
1099
1352
  it("does not let direct MCP tools authorize child fanout", () => {
@@ -1114,10 +1367,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
1114
1367
  mcpDirectTools: ["delegator"],
1115
1368
  });
1116
1369
 
1117
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1370
+ const extensionArgs = args.filter(
1371
+ (arg, index) => args[index - 1] === "--extension",
1372
+ );
1118
1373
  assert.equal(args[args.indexOf("--tools") + 1], "read,delegator_subagent");
1119
1374
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "0");
1120
- assert.ok(!extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1375
+ assert.ok(
1376
+ !extensionArgs.some((arg) =>
1377
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1378
+ ),
1379
+ );
1121
1380
  });
1122
1381
 
1123
1382
  it("keeps child-safe fanout registration in explicit extensions mode", () => {
@@ -1131,10 +1390,16 @@ describe("buildPiArgs system prompt mode wiring", () => {
1131
1390
  extensions: ["./agent-allowed-ext.ts"],
1132
1391
  });
1133
1392
 
1134
- const extensionArgs = args.filter((arg, index) => args[index - 1] === "--extension");
1393
+ const extensionArgs = args.filter(
1394
+ (arg, index) => args[index - 1] === "--extension",
1395
+ );
1135
1396
  assert.ok(args.includes("--no-extensions"));
1136
1397
  assert.equal(env[SUBAGENT_FANOUT_CHILD_ENV], "1");
1137
- assert.ok(extensionArgs.some((arg) => arg.endsWith(path.join("src", "extension", "fanout-child.ts"))));
1398
+ assert.ok(
1399
+ extensionArgs.some((arg) =>
1400
+ arg.endsWith(path.join("src", "extension", "fanout-child.ts")),
1401
+ ),
1402
+ );
1138
1403
  assert.ok(extensionArgs.includes("./agent-allowed-ext.ts"));
1139
1404
  });
1140
1405