@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
@@ -19,6 +19,7 @@ import {
19
19
  import { ASYNC_DIR, type SubagentState } from "../../src/shared/types.ts";
20
20
 
21
21
  const routeRoots: string[] = [];
22
+ const fanoutListenerCleanupKey = "__piSubagentFanoutChildNestedControlInboxCleanups";
22
23
  const savedEnv = {
23
24
  [SUBAGENT_CHILD_ENV]: process.env[SUBAGENT_CHILD_ENV],
24
25
  [SUBAGENT_FANOUT_CHILD_ENV]: process.env[SUBAGENT_FANOUT_CHILD_ENV],
@@ -31,6 +32,15 @@ const savedEnv = {
31
32
  };
32
33
 
33
34
  afterEach(() => {
35
+ const globalStore = globalThis as Record<string, unknown>;
36
+ const listenerCleanups = globalStore[fanoutListenerCleanupKey];
37
+ if (listenerCleanups instanceof Map) {
38
+ for (const entry of listenerCleanups.values()) {
39
+ if (typeof entry === "function") entry();
40
+ else if (entry && typeof entry === "object" && typeof (entry as { cleanup?: unknown }).cleanup === "function") (entry as { cleanup: () => void }).cleanup();
41
+ }
42
+ }
43
+ delete globalStore[fanoutListenerCleanupKey];
34
44
  for (const root of routeRoots.splice(0)) fs.rmSync(root, { recursive: true, force: true });
35
45
  for (const [key, value] of Object.entries(savedEnv)) {
36
46
  if (value === undefined) delete process.env[key];
@@ -88,7 +98,7 @@ function createNestedRun(id = "nested-live", state: "running" | "complete" | "fa
88
98
  ts: 100,
89
99
  parentRunId: "root-control",
90
100
  parentStepIndex: 0,
91
- child: { id, parentRunId: "root-control", parentStepIndex: 0, depth: 1, path: [{ runId: "root-control", stepIndex: 0 }], state, agent: "builder", ownerState: state === "running" ? "live" : "gone", ...extras },
101
+ child: { id, parentRunId: "root-control", parentStepIndex: 0, depth: 1, path: [{ runId: "root-control", stepIndex: 0 }], state, agent: "worker", ownerState: state === "running" ? "live" : "gone", ...extras },
92
102
  });
93
103
  return route;
94
104
  }
@@ -186,11 +196,52 @@ describe("nested control routing", () => {
186
196
  const result = await createExecutor(state).execute("status", { action: "status", id: "root-control" }, new AbortController().signal, undefined, ctx(root));
187
197
 
188
198
  assert.equal(result.isError, undefined);
199
+ assert.match(text(result), /^Status target: run root-control\nSpawn budget:/);
189
200
  assert.match(text(result), /Run: root-control/);
190
- assert.match(text(result), /↳ builder \[nested-foreground\] running/);
201
+ assert.match(text(result), /↳ worker \[nested-foreground\] running/);
191
202
  assert.match(text(result), /Status: subagent\(\{ action: "status", id: "nested-foreground" \}\)/);
203
+
204
+ const transcript = await createExecutor(state).execute("transcript", { action: "status", id: "root-control", index: 0, view: "transcript" }, new AbortController().signal, undefined, ctx(root));
205
+ assert.equal(transcript.isError, undefined);
206
+ assert.match(text(transcript), /^Transcript target: run root-control · child 0\nSpawn budget:/);
207
+ } finally {
208
+ fs.rmSync(root, { recursive: true, force: true });
209
+ }
210
+ });
211
+
212
+ it("labels dir-target status output", async () => {
213
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-status-dir-label-"));
214
+ const runId = `status-dir-${Date.now().toString(36)}`;
215
+ const asyncDir = path.join(ASYNC_DIR, runId);
216
+ try {
217
+ fs.mkdirSync(asyncDir, { recursive: true });
218
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
219
+ runId,
220
+ mode: "single",
221
+ state: "running",
222
+ startedAt: 1,
223
+ lastUpdate: 1,
224
+ cwd: root,
225
+ steps: [{ agent: "worker", status: "running" }],
226
+ }), "utf-8");
227
+
228
+ const state = createState();
229
+ state.foregroundControls.set("foreground-live", { runId: "foreground-live", mode: "single", startedAt: 1, updatedAt: 1, currentAgent: "worker", currentIndex: 0 });
230
+ state.lastForegroundControlId = "foreground-live";
231
+ const executor = createExecutor(state);
232
+ const result = await executor.execute("status-dir", { action: "status", dir: asyncDir }, new AbortController().signal, undefined, ctx(root));
233
+
234
+ assert.equal(result.isError, undefined);
235
+ assert.ok(text(result).startsWith(`Status target: dir ${asyncDir}\nSpawn budget:`), text(result));
236
+ assert.match(text(result), new RegExp(`Run: ${runId}`));
237
+ assert.doesNotMatch(text(result), /foreground-live/);
238
+
239
+ const transcript = await executor.execute("transcript-dir", { action: "status", dir: asyncDir, view: "transcript" }, new AbortController().signal, undefined, ctx(root));
240
+ assert.ok(text(transcript).startsWith(`Transcript target: dir ${asyncDir}\nSpawn budget:`), text(transcript));
241
+ assert.doesNotMatch(text(transcript), /Live foreground transcript/);
192
242
  } finally {
193
243
  fs.rmSync(root, { recursive: true, force: true });
244
+ fs.rmSync(asyncDir, { recursive: true, force: true });
194
245
  }
195
246
  });
196
247
 
@@ -318,7 +369,7 @@ describe("nested control routing", () => {
318
369
  try {
319
370
  const route = createNestedRun("nested-terminal-resume", "complete", { sessionFile: path.join(root, "missing-session.jsonl") });
320
371
 
321
- const result = await createExecutor(stateWithNestedRoute(route), [{ name: "builder", description: "Worker", prompt: "Do work" }])
372
+ const result = await createExecutor(stateWithNestedRoute(route), [{ name: "worker", description: "Worker", prompt: "Do work" }])
322
373
  .execute("resume", { action: "resume", id: "nested-terminal-resume", message: "continue" }, new AbortController().signal, undefined, ctx(root));
323
374
 
324
375
  assert.equal(result.isError, true);
@@ -333,7 +384,7 @@ describe("nested control routing", () => {
333
384
  try {
334
385
  const route = createNestedRun("nested-stopped-resume", "stopped", { sessionFile: path.join(root, "missing-session.jsonl") });
335
386
 
336
- const result = await createExecutor(stateWithNestedRoute(route), [{ name: "builder", description: "Worker", prompt: "Do work" }])
387
+ const result = await createExecutor(stateWithNestedRoute(route), [{ name: "worker", description: "Worker", prompt: "Do work" }])
337
388
  .execute("resume", { action: "resume", id: "nested-stopped-resume", message: "continue" }, new AbortController().signal, undefined, ctx(root));
338
389
 
339
390
  assert.equal(result.isError, true);
@@ -354,7 +405,7 @@ describe("nested control routing", () => {
354
405
  fs.writeFileSync(attackerSessionFile, "");
355
406
  const route = createNestedRun("nested-untrusted-resume", "complete", { sessionFile: attackerSessionFile });
356
407
 
357
- const result = await createExecutor(stateWithNestedRoute(route), [{ name: "builder", description: "Worker", prompt: "Do work" }])
408
+ const result = await createExecutor(stateWithNestedRoute(route), [{ name: "worker", description: "Worker", prompt: "Do work" }])
358
409
  .execute("resume", { action: "resume", id: "nested-untrusted-resume", message: "continue" }, new AbortController().signal, undefined, ctx(root, parentSessionFile));
359
410
 
360
411
  assert.equal(result.isError, true);
@@ -374,7 +425,7 @@ describe("nested control routing", () => {
374
425
  fs.writeFileSync(siblingSessionFile, "");
375
426
  const route = createNestedRun("nested-sibling-resume", "complete", { sessionFile: siblingSessionFile });
376
427
 
377
- const result = await createExecutor(stateWithNestedRoute(route), [{ name: "builder", description: "Worker", prompt: "Do work" }])
428
+ const result = await createExecutor(stateWithNestedRoute(route), [{ name: "worker", description: "Worker", prompt: "Do work" }])
378
429
  .execute("resume", { action: "resume", id: "nested-sibling-resume", message: "continue" }, new AbortController().signal, undefined, ctx(root, parentSessionFile));
379
430
 
380
431
  assert.equal(result.isError, true);
@@ -395,8 +446,8 @@ describe("nested control routing", () => {
395
446
  modelRegistry: { getAvailable() { throw new Error("model registry exploded"); } },
396
447
  };
397
448
 
398
- const result = await createExecutor(createState(), [{ name: "builder", description: "Worker", prompt: "Do work" }])
399
- .execute("run", { agent: "builder", task: "go" }, new AbortController().signal, undefined, throwingCtx);
449
+ const result = await createExecutor(createState(), [{ name: "worker", description: "Worker", prompt: "Do work" }])
450
+ .execute("run", { agent: "worker", task: "go" }, new AbortController().signal, undefined, throwingCtx);
400
451
 
401
452
  assert.equal(result.isError, true);
402
453
  assert.match(text(result), /model registry exploded/);
@@ -485,6 +536,69 @@ describe("nested control routing", () => {
485
536
  }
486
537
  });
487
538
 
539
+ it("cleans the prior listener on reload and processes a resume request once", async () => {
540
+ const route = createNestedRoute("root-reload-listener");
541
+ routeRoots.push(path.dirname(route.eventSink));
542
+ setNestedRouteEnv(route, "root-reload-listener");
543
+ process.env[SUBAGENT_CHILD_ENV] = "1";
544
+ process.env[SUBAGENT_FANOUT_CHILD_ENV] = "1";
545
+ const registrations: string[] = [];
546
+ const activeIntervals = new Set<ReturnType<typeof setInterval>>();
547
+ const originalSetInterval = globalThis.setInterval;
548
+ const originalClearInterval = globalThis.clearInterval;
549
+ globalThis.setInterval = ((...args: Parameters<typeof setInterval>) => {
550
+ const interval = originalSetInterval(...args);
551
+ activeIntervals.add(interval);
552
+ return interval;
553
+ }) as typeof setInterval;
554
+ globalThis.clearInterval = ((interval: ReturnType<typeof setInterval>) => {
555
+ activeIntervals.delete(interval);
556
+ return originalClearInterval(interval);
557
+ }) as typeof clearInterval;
558
+ try {
559
+ const makePi = () => ({
560
+ events: { emit() {}, on() { return () => {}; } },
561
+ registerTool() { registrations.push("subagent"); },
562
+ getSessionName() { return "child"; },
563
+ }) as any;
564
+ const firstPi = makePi();
565
+
566
+ registerFanoutChildSubagentExtension(firstPi);
567
+ registerFanoutChildSubagentExtension(firstPi);
568
+ registerFanoutChildSubagentExtension(makePi());
569
+ assert.equal(activeIntervals.size, 1);
570
+
571
+ const unrelatedRoute = createNestedRoute("root-unrelated-listener");
572
+ routeRoots.push(path.dirname(unrelatedRoute.eventSink));
573
+ setNestedRouteEnv(unrelatedRoute, "root-unrelated-listener");
574
+ registerFanoutChildSubagentExtension(makePi());
575
+ assert.equal(activeIntervals.size, 2);
576
+
577
+ delete process.env[SUBAGENT_PARENT_EVENT_SINK_ENV];
578
+ delete process.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV];
579
+ delete process.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV];
580
+ delete process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV];
581
+ registerFanoutChildSubagentExtension(makePi());
582
+ assert.equal(activeIntervals.size, 2);
583
+
584
+ setNestedRouteEnv(route, "root-reload-listener");
585
+ writeNestedControlRequest(route, {
586
+ ts: Date.now(),
587
+ requestId: "reload-resume-once",
588
+ targetRunId: "missing-run",
589
+ action: "resume",
590
+ message: "continue",
591
+ });
592
+
593
+ await waitFor(() => readNestedControlResults(route).length === 1);
594
+ assert.equal(registrations.length, 4);
595
+ assert.equal(readNestedControlResults(route)[0]?.requestId, "reload-resume-once");
596
+ } finally {
597
+ globalThis.setInterval = originalSetInterval;
598
+ globalThis.clearInterval = originalClearInterval;
599
+ }
600
+ });
601
+
488
602
  it("negatively acknowledges ownerless fanout child control requests and removes them", async () => {
489
603
  const route = createNestedRoute("root-ownerless");
490
604
  routeRoots.push(path.dirname(route.eventSink));
@@ -64,8 +64,8 @@ function child(id: string, state: "queued" | "running" | "complete" | "failed" |
64
64
  path: [{ runId: parentRunId, stepIndex: 1 }],
65
65
  mode: "single" as const,
66
66
  state,
67
- agent: "commentator",
68
- agents: ["commentator"],
67
+ agent: "reviewer",
68
+ agents: ["reviewer"],
69
69
  startedAt: 10,
70
70
  lastUpdate: ts,
71
71
  steps: [{ agent: "leaf", status: state === "running" ? "running" as const : "complete" as const }],
@@ -355,7 +355,7 @@ describe("nested event parsing and projection", () => {
355
355
  ...child("nested-model-bounds", "running", 100),
356
356
  model: "m".repeat(600),
357
357
  thinking: "turbo",
358
- steps: [{ agent: "leaf", status: "running", model: "builder", thinking: "xhigh" }],
358
+ steps: [{ agent: "leaf", status: "running", model: "worker", thinking: "xhigh" }],
359
359
  },
360
360
  });
361
361
  const summary = projectNestedEvents(route).children[0]!;
@@ -371,13 +371,13 @@ describe("nested event parsing and projection", () => {
371
371
  state: "running",
372
372
  startedAt: 1,
373
373
  steps: [
374
- { agent: "builder", status: "running", model: "provider/builder", thinking: "high" },
374
+ { agent: "worker", status: "running", model: "provider/worker", thinking: "high" },
375
375
  ],
376
376
  }, "/tmp/child-run", { id: "child-run", parentRunId: "parent-run", depth: 1, mode: "single", ts: 2 });
377
377
 
378
- assert.equal(summary.model, "provider/builder");
378
+ assert.equal(summary.model, "provider/worker");
379
379
  assert.equal(summary.thinking, "high");
380
- assert.equal(summary.steps?.[0]?.model, "provider/builder");
380
+ assert.equal(summary.steps?.[0]?.model, "provider/worker");
381
381
  assert.equal(summary.steps?.[0]?.thinking, "high");
382
382
  });
383
383
 
@@ -389,7 +389,7 @@ describe("nested event parsing and projection", () => {
389
389
  startedAt: 1,
390
390
  processTerminal: { version: 1, state: "bogus", runId: "child-run", runnerProcessInstanceId: "runner-1" } as never,
391
391
  steps: [{
392
- agent: "builder",
392
+ agent: "worker",
393
393
  status: "complete",
394
394
  processTerminal: { version: 1, state: "observed", runId: "wrong-run", runnerProcessInstanceId: "runner-1" } as never,
395
395
  }],
@@ -409,7 +409,7 @@ describe("nested event parsing and projection", () => {
409
409
  startedAt: 1,
410
410
  runtimeAcknowledgedExtensions: { version: 1, source: "child-runtime", ids: ["/Users/alice/.secret-extension", "ok-ext", "x".repeat(5000)], omitted: 0 } as never,
411
411
  steps: [{
412
- agent: "builder",
412
+ agent: "worker",
413
413
  status: "complete",
414
414
  runtimeAcknowledgedExtensions: { version: 1, source: "child-runtime", ids: ["C:/Users/alice/secret"], omitted: 0 } as never,
415
415
  }],
@@ -99,7 +99,7 @@ function createFakeClock() {
99
99
  function completionResult(overrides: Record<string, unknown> = {}) {
100
100
  return {
101
101
  id: `notify-${Math.random().toString(36).slice(2)}`,
102
- agent: "builder",
102
+ agent: "worker",
103
103
  success: true,
104
104
  summary: "Done",
105
105
  exitCode: 0,
@@ -115,7 +115,7 @@ describe("registerSubagentNotify", () => {
115
115
 
116
116
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
117
117
  id: "notify-empty-1",
118
- agent: "builder",
118
+ agent: "worker",
119
119
  success: true,
120
120
  summary: "",
121
121
  exitCode: 0,
@@ -127,7 +127,7 @@ describe("registerSubagentNotify", () => {
127
127
  assert.deepEqual(sent[0], {
128
128
  message: {
129
129
  customType: "subagent-notify",
130
- content: "Background task completed: **builder**\n\n(no output)",
130
+ content: "Background task completed: **worker**\n\n(no output)",
131
131
  display: false,
132
132
  },
133
133
  options: { triggerTurn: true },
@@ -169,7 +169,7 @@ describe("registerSubagentNotify", () => {
169
169
  id: "foreground-run:0",
170
170
  runId: "foreground-run",
171
171
  source: "foreground",
172
- agent: "commentator",
172
+ agent: "reviewer",
173
173
  success: true,
174
174
  summary: "Recovered final review",
175
175
  exitCode: 0,
@@ -181,7 +181,7 @@ describe("registerSubagentNotify", () => {
181
181
  assert.deepEqual(sent[0], {
182
182
  message: {
183
183
  customType: "subagent-notify",
184
- content: "Detached foreground task completed: **commentator**\n\nRecovered final review",
184
+ content: "Detached foreground task completed: **reviewer**\n\nRecovered final review",
185
185
  display: true,
186
186
  },
187
187
  options: { triggerTurn: true },
@@ -193,7 +193,7 @@ describe("registerSubagentNotify", () => {
193
193
  events.emit(SUBAGENT_FOREGROUND_COMPLETE_EVENT, {
194
194
  id: "foreground-run:0",
195
195
  source: "foreground",
196
- agent: "commentator",
196
+ agent: "reviewer",
197
197
  success: true,
198
198
  summary: "Recovered final review",
199
199
  timestamp: 123,
@@ -208,7 +208,7 @@ describe("registerSubagentNotify", () => {
208
208
 
209
209
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
210
210
  id: "notify-summary-1",
211
- agent: "builder",
211
+ agent: "worker",
212
212
  success: true,
213
213
  summary,
214
214
  exitCode: 0,
@@ -222,7 +222,7 @@ describe("registerSubagentNotify", () => {
222
222
  assert.deepEqual(sent[0], {
223
223
  message: {
224
224
  customType: "subagent-notify",
225
- content: `Background task completed: **builder** (2/3)\n\n${summary}`,
225
+ content: `Background task completed: **worker** (2/3)\n\n${summary}`,
226
226
  display: false,
227
227
  },
228
228
  options: { triggerTurn: true },
@@ -234,7 +234,7 @@ describe("registerSubagentNotify", () => {
234
234
 
235
235
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
236
236
  id: "notify-path-1",
237
- agent: "builder",
237
+ agent: "worker",
238
238
  success: true,
239
239
  summary: "Done",
240
240
  exitCode: 0,
@@ -246,7 +246,7 @@ describe("registerSubagentNotify", () => {
246
246
  assert.deepEqual(sent, [{
247
247
  message: {
248
248
  customType: "subagent-notify",
249
- content: "Background task completed: **builder**\n\nDone\n\nSession file: /tmp/session.jsonl",
249
+ content: "Background task completed: **worker**\n\nDone\n\nSession file: /tmp/session.jsonl",
250
250
  display: false,
251
251
  },
252
252
  options: { triggerTurn: true },
@@ -258,7 +258,7 @@ describe("registerSubagentNotify", () => {
258
258
 
259
259
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
260
260
  id: "notify-paused-1",
261
- agent: "builder",
261
+ agent: "worker",
262
262
  success: false,
263
263
  state: "paused",
264
264
  summary: "Paused after interrupt. Waiting for explicit next action.",
@@ -270,7 +270,7 @@ describe("registerSubagentNotify", () => {
270
270
  assert.deepEqual(sent[0], {
271
271
  message: {
272
272
  customType: "subagent-notify",
273
- content: "Background task paused: **builder**\n\nPaused after interrupt. Waiting for explicit next action.",
273
+ content: "Background task paused: **worker**\n\nPaused after interrupt. Waiting for explicit next action.",
274
274
  display: true,
275
275
  },
276
276
  options: { triggerTurn: true },
@@ -282,7 +282,7 @@ describe("registerSubagentNotify", () => {
282
282
 
283
283
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
284
284
  id: "notify-other-session",
285
- agent: "builder",
285
+ agent: "worker",
286
286
  success: true,
287
287
  summary: "Other done",
288
288
  timestamp: 100,
@@ -290,7 +290,7 @@ describe("registerSubagentNotify", () => {
290
290
  });
291
291
  events.emit(SUBAGENT_ASYNC_COMPLETE_EVENT, {
292
292
  id: "notify-sessionless",
293
- agent: "builder",
293
+ agent: "worker",
294
294
  success: true,
295
295
  summary: "Legacy cwd-scoped done",
296
296
  timestamp: 101,
@@ -407,16 +407,16 @@ describe("registerSubagentNotify", () => {
407
407
  describe("completion formatting helpers", () => {
408
408
  it("formats and parses a parallel handoff without folding it into the result preview", () => {
409
409
  const content = formatSingleCompletion({
410
- agent: "builder",
410
+ agent: "worker",
411
411
  status: "completed",
412
412
  resultPreview: "Done",
413
413
  handoffPath: "/tmp/run/handoff.json",
414
414
  sessionLabel: "Session file",
415
415
  sessionValue: "/tmp/session.jsonl",
416
416
  });
417
- assert.equal(content, "Background task completed: **builder**\n\nDone\n\nParallel handoff: /tmp/run/handoff.json\n\nSession file: /tmp/session.jsonl");
417
+ assert.equal(content, "Background task completed: **worker**\n\nDone\n\nParallel handoff: /tmp/run/handoff.json\n\nSession file: /tmp/session.jsonl");
418
418
  assert.deepEqual(parseSubagentNotifyContent(content), {
419
- agent: "builder",
419
+ agent: "worker",
420
420
  status: "completed",
421
421
  resultPreview: "Done",
422
422
  handoffPath: "/tmp/run/handoff.json",
@@ -425,7 +425,7 @@ describe("completion formatting helpers", () => {
425
425
  });
426
426
  assert.equal(buildCompletionDetails({
427
427
  id: "run",
428
- agent: "builder",
428
+ agent: "worker",
429
429
  success: true,
430
430
  summary: "Done",
431
431
  parallelHandoff: { path: "/tmp/run/handoff.json" },
@@ -434,32 +434,32 @@ describe("completion formatting helpers", () => {
434
434
 
435
435
  it("formatSingleCompletion mirrors the in-handler single message shape", () => {
436
436
  const content = formatSingleCompletion({
437
- agent: "builder",
437
+ agent: "worker",
438
438
  status: "completed",
439
439
  taskInfo: " (2/3)",
440
440
  resultPreview: "Done",
441
441
  sessionLabel: "Session file",
442
442
  sessionValue: "/tmp/session.jsonl",
443
443
  });
444
- assert.equal(content, "Background task completed: **builder** (2/3)\n\nDone\n\nSession file: /tmp/session.jsonl");
444
+ assert.equal(content, "Background task completed: **worker** (2/3)\n\nDone\n\nSession file: /tmp/session.jsonl");
445
445
  });
446
446
 
447
447
  it("parses detached foreground notification content for the custom renderer", () => {
448
448
  const content = formatSingleCompletion({
449
- agent: "commentator",
449
+ agent: "reviewer",
450
450
  status: "failed",
451
451
  source: "foreground",
452
452
  resultPreview: "Acceptance rejected",
453
453
  sessionLabel: "Session file",
454
- sessionValue: "/tmp/commentator.jsonl",
454
+ sessionValue: "/tmp/reviewer.jsonl",
455
455
  });
456
456
  assert.deepEqual(parseSubagentNotifyContent(content), {
457
- agent: "commentator",
457
+ agent: "reviewer",
458
458
  status: "failed",
459
459
  source: "foreground",
460
460
  resultPreview: "Acceptance rejected",
461
461
  sessionLabel: "session file",
462
- sessionValue: "/tmp/commentator.jsonl",
462
+ sessionValue: "/tmp/reviewer.jsonl",
463
463
  });
464
464
  });
465
465
 
@@ -26,9 +26,8 @@ const expectedHostPeerRanges = {
26
26
  const expectedHostDevVersions = {
27
27
  "@earendil-works/pi-agent-core": "0.81.0",
28
28
  "@earendil-works/pi-ai": "0.81.0",
29
- "@selesai/code": "0.8.2",
30
29
  "@earendil-works/pi-tui": "0.81.0",
31
- } satisfies Record<(typeof hostPeerPackages)[number], string>;
30
+ } satisfies Record<Exclude<(typeof hostPeerPackages)[number], "@selesai/code">, string>;
32
31
 
33
32
  function collectSourceFiles(dir: string): string[] {
34
33
  const files: string[] = [];
@@ -64,6 +63,7 @@ test("published extension APIs use supported package entrypoints", async () => {
64
63
  "./intercom-bridge": "./src/api/intercom-bridge.ts",
65
64
  "./pi-args": "./src/api/pi-args.ts",
66
65
  "./shared-types": "./src/api/shared-types.ts",
66
+ "./project-panes": "./src/api/project-panes.ts",
67
67
  });
68
68
  const backgroundWork = await import("pi-subagents/background-work");
69
69
  assert.equal(backgroundWork.BACKGROUND_WORK_PROTOCOL_VERSION, 1);
@@ -90,6 +90,11 @@ test("published extension APIs use supported package entrypoints", async () => {
90
90
  assert.equal(typeof sharedTypes.wrapForkTask, "function");
91
91
  assert.equal(typeof sharedTypes.DEFAULT_FORK_PREAMBLE, "string");
92
92
  assert.equal("TEMP_ROOT_DIR" in sharedTypes, false);
93
+ const projectPanes = await import("pi-subagents/project-panes");
94
+ assert.equal(projectPanes.PROJECT_PANES_API_VERSION, 1);
95
+ assert.equal(typeof projectPanes.openProjectPane, "function");
96
+ assert.equal(typeof projectPanes.getProjectPaneStatus, "function");
97
+ assert.equal(typeof projectPanes.closeProjectPane, "function");
93
98
  });
94
99
 
95
100
  test("direct @earendil-works runtime imports are declared for CI installs", () => {
@@ -118,6 +123,10 @@ test("direct dependency declarations are exact version pins", () => {
118
123
 
119
124
  for (const section of ["dependencies", "devDependencies"] as const) {
120
125
  for (const [name, version] of Object.entries<string>(packageJson[section] ?? {})) {
126
+ if (name === "@selesai/code") {
127
+ assert.equal(version, "file:./test/fixtures/pi-coding-agent-shim");
128
+ continue;
129
+ }
121
130
  assert.match(version, exactVersionPattern, `${section}.${name} should use an exact version`);
122
131
  }
123
132
  }
@@ -147,6 +156,11 @@ test("host-owned development packages use the supported SDK baseline", () => {
147
156
  for (const [name, version] of Object.entries(expectedHostDevVersions)) {
148
157
  assert.equal(packageJson.devDependencies?.[name], version, `${name} should use ${version}`);
149
158
  }
159
+ assert.equal(
160
+ packageJson.devDependencies?.["@selesai/code"],
161
+ "file:./test/fixtures/pi-coding-agent-shim",
162
+ "pi-coding-agent should use the local type/runtime shim until upstream Pi no longer pins vulnerable Undici",
163
+ );
150
164
  });
151
165
 
152
166
  test("old pi package scope is not used by source or tests", () => {
@@ -89,16 +89,16 @@ describe("parallel handoff", () => {
89
89
  stepIndex: 2,
90
90
  flatStartIndex: 3,
91
91
  setup: setup("/repo", "base-1"),
92
- diffs: [diff(dir, 0, "builder", true)],
92
+ diffs: [diff(dir, 0, "worker", true)],
93
93
  cleanup: cleanup(),
94
94
  results: [{
95
- agent: "builder",
95
+ agent: "worker",
96
96
  status: "completed",
97
97
  summary: "implemented",
98
98
  outputPath: "/artifacts/output.md",
99
99
  structuredOutput: { ok: true },
100
100
  structuredOutputPath: "/artifacts/structured.json",
101
- sessionPath: "/sessions/builder.jsonl",
101
+ sessionPath: "/sessions/worker.jsonl",
102
102
  }],
103
103
  now: 100,
104
104
  });
@@ -120,9 +120,9 @@ describe("parallel handoff", () => {
120
120
  stepIndex: 1,
121
121
  flatStartIndex: 1,
122
122
  setup: setup("/repo", "base-1"),
123
- diffs: [diff(dir, 1, "commentator", false)],
123
+ diffs: [diff(dir, 1, "reviewer", false)],
124
124
  cleanup: cleanup("partial"),
125
- results: [{ agent: "commentator", status: "failed", summary: "blocked" }],
125
+ results: [{ agent: "reviewer", status: "failed", summary: "blocked" }],
126
126
  now: 200,
127
127
  });
128
128
  assert.equal(second.groupCount, 2);
@@ -189,9 +189,9 @@ describe("parallel handoff", () => {
189
189
  stepIndex: 0,
190
190
  flatStartIndex: 0,
191
191
  setup: setup("/repo", "base-1"),
192
- diffs: [diff(dir, 0, "builder", false)],
192
+ diffs: [diff(dir, 0, "worker", false)],
193
193
  cleanup: cleanup(),
194
- results: [{ agent: "builder", status: "completed" as const, summary: "done" }],
194
+ results: [{ agent: "worker", status: "completed" as const, summary: "done" }],
195
195
  };
196
196
  writeParallelHandoffGroup({ ...common, runId: "run-1" });
197
197
  assert.throws(
@@ -49,11 +49,11 @@ describe("flattenSteps", () => {
49
49
 
50
50
  it("expands parallel groups into individual steps", () => {
51
51
  const steps: RunnerStep[] = [
52
- { agent: "explorer", task: "find info" },
52
+ { agent: "scout", task: "find info" },
53
53
  {
54
54
  parallel: [
55
- { agent: "commentator-a", task: "review part 1" },
56
- { agent: "commentator-b", task: "review part 2" },
55
+ { agent: "reviewer-a", task: "review part 1" },
56
+ { agent: "reviewer-b", task: "review part 2" },
57
57
  ],
58
58
  },
59
59
  { agent: "summarizer", task: "combine" },
@@ -62,7 +62,7 @@ describe("flattenSteps", () => {
62
62
  assert.equal(flat.length, 4);
63
63
  assert.deepEqual(
64
64
  flat.map((s) => s.agent),
65
- ["explorer", "commentator-a", "commentator-b", "summarizer"],
65
+ ["scout", "reviewer-a", "reviewer-b", "summarizer"],
66
66
  );
67
67
  });
68
68
 
@@ -149,8 +149,8 @@ describe("mapConcurrent", () => {
149
149
  // All workers should start nearly simultaneously
150
150
  const d1 = startTimes[1]! - startTimes[0]!;
151
151
  const d2 = startTimes[2]! - startTimes[0]!;
152
- assert.ok(d1 < 20, `builder 1 should start immediately, got ${d1}ms delay`);
153
- assert.ok(d2 < 20, `builder 2 should start immediately, got ${d2}ms delay`);
152
+ assert.ok(d1 < 20, `worker 1 should start immediately, got ${d1}ms delay`);
153
+ assert.ok(d2 < 20, `worker 2 should start immediately, got ${d2}ms delay`);
154
154
  });
155
155
 
156
156
  it("notifies scheduling settlement only after workers outliving an early rejection stop", async () => {
@@ -222,12 +222,12 @@ describe("DEFAULT_GLOBAL_CONCURRENCY_LIMIT", () => {
222
222
  describe("aggregateParallelOutputs", () => {
223
223
  it("aggregates successful outputs with headers", () => {
224
224
  const result = aggregateParallelOutputs([
225
- { agent: "commentator-a", output: "Looks good", exitCode: 0 },
226
- { agent: "commentator-b", output: "Needs fixes", exitCode: 0 },
225
+ { agent: "reviewer-a", output: "Looks good", exitCode: 0 },
226
+ { agent: "reviewer-b", output: "Needs fixes", exitCode: 0 },
227
227
  ]);
228
- assert.ok(result.includes("=== Parallel Task 1 (commentator-a) ==="));
228
+ assert.ok(result.includes("=== Parallel Task 1 (reviewer-a) ==="));
229
229
  assert.ok(result.includes("Looks good"));
230
- assert.ok(result.includes("=== Parallel Task 2 (commentator-b) ==="));
230
+ assert.ok(result.includes("=== Parallel Task 2 (reviewer-b) ==="));
231
231
  assert.ok(result.includes("Needs fixes"));
232
232
  });
233
233
 
@@ -96,7 +96,7 @@ describe("path.join vs template string concatenation", () => {
96
96
 
97
97
  it("parallel subdir naming should use path.join", () => {
98
98
  // settings.ts:302,306 pattern: `${subdir}/${task.output}`
99
- const subdir = "parallel-0/0-_code-commentator";
99
+ const subdir = "parallel-0/0-_code-reviewer";
100
100
  const output = "review.md";
101
101
 
102
102
  const templateResult = `${subdir}/${output}`;
@@ -104,10 +104,10 @@ describe("path.join vs template string concatenation", () => {
104
104
 
105
105
  // Both produce forward slashes here (subdir itself uses /).
106
106
  // But if subdir comes from path.join on Windows, it would have backslashes.
107
- const windowsSubdir = path.join("parallel-0", "0-_code-commentator");
107
+ const windowsSubdir = path.join("parallel-0", "0-_code-reviewer");
108
108
  const windowsJoin = path.join(windowsSubdir, output);
109
109
  // Consistent: all native separators
110
- assert.equal(windowsJoin, path.join("parallel-0", "0-_code-commentator", output));
110
+ assert.equal(windowsJoin, path.join("parallel-0", "0-_code-reviewer", output));
111
111
  });
112
112
  });
113
113