@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
@@ -39,12 +39,12 @@ describe("async chain root attachment", () => {
39
39
  mode: "single",
40
40
  state: "complete",
41
41
  startedAt: 1,
42
- steps: [{ agent: "builder", status: "complete", sessionFile }],
42
+ steps: [{ agent: "worker", status: "complete", sessionFile }],
43
43
  });
44
44
  writeJson(importedRoot.resultPath, {
45
45
  state: "complete",
46
46
  success: true,
47
- results: [{ agent: "builder", output: "root output", success: true, sessionFile }],
47
+ results: [{ agent: "worker", output: "root output", success: true, sessionFile }],
48
48
  });
49
49
 
50
50
  const result = await waitForImportedAsyncRoot(importedRoot, { pollIntervalMs: 1 });
@@ -55,7 +55,7 @@ describe("async chain root attachment", () => {
55
55
  exitCode: result.exitCode,
56
56
  sessionFile: result.sessionFile,
57
57
  }, {
58
- agent: "builder",
58
+ agent: "worker",
59
59
  output: "root output",
60
60
  exitCode: 0,
61
61
  sessionFile,
@@ -69,7 +69,7 @@ describe("async chain root attachment", () => {
69
69
  mode: "single",
70
70
  state: "running",
71
71
  startedAt: 1,
72
- steps: [{ agent: "builder", status: "running" }],
72
+ steps: [{ agent: "worker", status: "running" }],
73
73
  });
74
74
 
75
75
  const waiting = waitForImportedAsyncRoot(importedRoot, { pollIntervalMs: 5 });
@@ -77,7 +77,7 @@ describe("async chain root attachment", () => {
77
77
  writeJson(importedRoot.resultPath, {
78
78
  state: "complete",
79
79
  success: true,
80
- results: [{ agent: "builder", output: "late root output", success: true }],
80
+ results: [{ agent: "worker", output: "late root output", success: true }],
81
81
  });
82
82
  }, 20);
83
83
 
@@ -95,13 +95,13 @@ describe("async chain root attachment", () => {
95
95
  state: "failed",
96
96
  startedAt: 1,
97
97
  error: "root failed",
98
- steps: [{ agent: "builder", status: "failed", error: "root failed" }],
98
+ steps: [{ agent: "worker", status: "failed", error: "root failed" }],
99
99
  });
100
100
  writeJson(importedRoot.resultPath, {
101
101
  state: "failed",
102
102
  success: false,
103
103
  summary: "root failed",
104
- results: [{ agent: "builder", output: "root failed", error: "root failed", success: false }],
104
+ results: [{ agent: "worker", output: "root failed", error: "root failed", success: false }],
105
105
  });
106
106
 
107
107
  const result = await waitForImportedAsyncRoot(importedRoot, { pollIntervalMs: 1 });
@@ -118,7 +118,7 @@ describe("async chain root attachment", () => {
118
118
  mode: "single",
119
119
  state: "complete",
120
120
  startedAt: 1,
121
- steps: [{ agent: "builder", status: "complete" }],
121
+ steps: [{ agent: "worker", status: "complete" }],
122
122
  });
123
123
 
124
124
  const result = await waitForImportedAsyncRoot(importedRoot, {
@@ -137,7 +137,7 @@ describe("async chain root attachment", () => {
137
137
  mode: "single",
138
138
  state: "running",
139
139
  startedAt: 1,
140
- steps: [{ agent: "builder", status: "running" }],
140
+ steps: [{ agent: "worker", status: "running" }],
141
141
  });
142
142
  let timedOut = false;
143
143
  const waiting = waitForImportedAsyncRoot(importedRoot, {
@@ -7,7 +7,7 @@ name: review-chain
7
7
  description: Review chain
8
8
  ---
9
9
 
10
- ## commentator
10
+ ## reviewer
11
11
  output: report.md
12
12
  outputMode: file-only
13
13
 
@@ -28,7 +28,7 @@ name: review-chain
28
28
  description: Review chain
29
29
  ---
30
30
 
31
- ## commentator
31
+ ## reviewer
32
32
  phase: Review
33
33
  label: correctness pass
34
34
  as: correctnessFindings
@@ -54,7 +54,7 @@ name: review-chain
54
54
  description: Review chain
55
55
  ---
56
56
 
57
- ## commentator
57
+ ## reviewer
58
58
  toolBudget: {"soft":3,"hard":5,"block":["read","grep"]}
59
59
 
60
60
  Review the diff
@@ -71,12 +71,12 @@ name: review-chain
71
71
  description: Review chain
72
72
  ---
73
73
 
74
- ## commentator
74
+ ## reviewer
75
75
  toolBudget: {"soft":6,"hard":5}
76
76
 
77
77
  Review the diff
78
78
  `, "project", "/tmp/review-chain.md"),
79
- /toolBudget for step 'commentator'\.soft must be <= toolBudget for step 'commentator'\.hard/,
79
+ /toolBudget for step 'reviewer'\.soft must be <= toolBudget for step 'reviewer'\.hard/,
80
80
  );
81
81
  });
82
82
 
@@ -87,7 +87,7 @@ name: review-chain
87
87
  description: Review chain
88
88
  ---
89
89
 
90
- ## commentator
90
+ ## reviewer
91
91
  outputSchema: {"type":"object"}
92
92
 
93
93
  Review the diff
@@ -102,10 +102,10 @@ Review the diff
102
102
  name: "bad-dynamic-review",
103
103
  description: "Bad dynamic targets",
104
104
  chain: [
105
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
105
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
106
106
  {
107
107
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
108
- parallel: [{ agent: "commentator", task: "Review" }],
108
+ parallel: [{ agent: "reviewer", task: "Review" }],
109
109
  collect: { as: "reviews" },
110
110
  },
111
111
  ],
@@ -124,10 +124,10 @@ Review the diff
124
124
  package: "code-analysis",
125
125
  description: "Review dynamic targets",
126
126
  chain: [
127
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
127
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
128
128
  {
129
129
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
130
- parallel: { agent: "commentator", task: "Review {target.path}", outputSchema: { type: "object" } },
130
+ parallel: { agent: "reviewer", task: "Review {target.path}", outputSchema: { type: "object" } },
131
131
  collect: { as: "reviews" },
132
132
  },
133
133
  ],
@@ -146,10 +146,10 @@ Review the diff
146
146
  name: "dynamic-review",
147
147
  description: "Review dynamic targets",
148
148
  chain: [
149
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" }, toolBudget: { hard: 4 } },
149
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" }, toolBudget: { hard: 4 } },
150
150
  {
151
151
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
152
- parallel: { agent: "commentator", task: "Review {target.path}", outputSchema: { type: "object" }, toolBudget: { soft: 3, hard: 5 } },
152
+ parallel: { agent: "reviewer", task: "Review {target.path}", outputSchema: { type: "object" }, toolBudget: { soft: 3, hard: 5 } },
153
153
  collect: { as: "reviews" },
154
154
  },
155
155
  ],
@@ -164,7 +164,7 @@ Review the diff
164
164
  () => parseJsonChain(JSON.stringify({
165
165
  name: "bad-tool-budget",
166
166
  description: "Bad tool budget",
167
- chain: [{ agent: "builder", toolBudget: { hard: 0 } }],
167
+ chain: [{ agent: "worker", toolBudget: { hard: 0 } }],
168
168
  }), "project", "/tmp/bad-tool-budget.chain.json"),
169
169
  /step 1 toolBudget\.hard must be an integer >= 1/,
170
170
  );
@@ -173,8 +173,8 @@ Review the diff
173
173
  name: "bad-dynamic-tool-budget",
174
174
  description: "Bad dynamic tool budget",
175
175
  chain: [
176
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
177
- { expand: { from: { output: "targets", path: "/items" }, maxItems: 4 }, parallel: { agent: "builder", toolBudget: { hard: 3, block: [] } }, collect: { as: "reviews" } },
176
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
177
+ { expand: { from: { output: "targets", path: "/items" }, maxItems: 4 }, parallel: { agent: "worker", toolBudget: { hard: 3, block: [] } }, collect: { as: "reviews" } },
178
178
  ],
179
179
  }), "project", "/tmp/bad-dynamic-tool-budget.chain.json"),
180
180
  /step 2 dynamic template toolBudget\.block must contain at least one tool name/,
@@ -186,10 +186,10 @@ Review the diff
186
186
  name: "dynamic-review",
187
187
  description: "Review dynamic targets",
188
188
  chain: [
189
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
189
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
190
190
  {
191
191
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
192
- parallel: { agent: "commentator", task: "Review {target.path}", outputSchema: { type: "object" } },
192
+ parallel: { agent: "reviewer", task: "Review {target.path}", outputSchema: { type: "object" } },
193
193
  collect: { as: "reviews" },
194
194
  },
195
195
  ],
@@ -206,10 +206,10 @@ Review the diff
206
206
  name: "accepted-chain",
207
207
  description: "Chain with acceptance gates",
208
208
  chain: [
209
- { agent: "builder", task: "Fix bug", acceptance: { level: "checked", evidence: ["changed-files", "commands-run"] } },
209
+ { agent: "worker", task: "Fix bug", acceptance: { level: "checked", evidence: ["changed-files", "commands-run"] } },
210
210
  {
211
211
  parallel: [
212
- { agent: "commentator", task: "Review", acceptance: "attested" },
212
+ { agent: "reviewer", task: "Review", acceptance: "attested" },
213
213
  ],
214
214
  },
215
215
  ],
@@ -221,7 +221,7 @@ Review the diff
221
221
  () => parseJsonChain(JSON.stringify({
222
222
  name: "bad-acceptance",
223
223
  description: "Bad acceptance",
224
- chain: [{ agent: "builder", acceptance: { level: "none" } }],
224
+ chain: [{ agent: "worker", acceptance: { level: "none" } }],
225
225
  }), "project", "/tmp/bad-acceptance.chain.json"),
226
226
  /step 1 acceptance\.reason is required/,
227
227
  );
@@ -21,7 +21,7 @@ describe("createChildTranscriptWriter", () => {
21
21
  transcriptPath,
22
22
  source: "foreground",
23
23
  runId: "run-1",
24
- agent: "builder",
24
+ agent: "worker",
25
25
  childIndex: 0,
26
26
  cwd: "/repo",
27
27
  });
@@ -35,7 +35,7 @@ describe("createChildTranscriptWriter", () => {
35
35
  assert.equal(record.recordType, "message");
36
36
  assert.equal(record.source, "foreground");
37
37
  assert.equal(record.runId, "run-1");
38
- assert.equal(record.agent, "builder");
38
+ assert.equal(record.agent, "worker");
39
39
  assert.equal(record.childIndex, 0);
40
40
  assert.equal(record.cwd, "/repo");
41
41
  assert.equal(record.sourceEventType, "initial_prompt");
@@ -52,7 +52,7 @@ describe("createChildTranscriptWriter", () => {
52
52
  transcriptPath,
53
53
  source: "async",
54
54
  runId: "run-2",
55
- agent: "commentator",
55
+ agent: "reviewer",
56
56
  cwd: "/repo",
57
57
  });
58
58
  writer.writeInitialUserMessage("review it");
@@ -68,7 +68,7 @@ describe("createChildTranscriptWriter", () => {
68
68
  transcriptPath,
69
69
  source: "async",
70
70
  runId: "run-3",
71
- agent: "builder",
71
+ agent: "worker",
72
72
  childIndex: 1,
73
73
  cwd: "/repo",
74
74
  });
@@ -119,7 +119,7 @@ describe("createChildTranscriptWriter", () => {
119
119
  transcriptPath,
120
120
  source: "foreground",
121
121
  runId: "run-4",
122
- agent: "builder",
122
+ agent: "worker",
123
123
  cwd: "/repo",
124
124
  });
125
125
  writer.writeChildEvent({ type: "tool_execution_start", toolCallId: "call-1", toolName: "bash", args: { command: "ls" } });
@@ -152,7 +152,7 @@ describe("createChildTranscriptWriter", () => {
152
152
  transcriptPath,
153
153
  source: "foreground",
154
154
  runId: "run-bounded",
155
- agent: "builder",
155
+ agent: "worker",
156
156
  cwd: "/repo",
157
157
  });
158
158
  writer.writeChildEvent({ type: "tool_execution_start", toolCallId: "large", toolName: "bash", args: { command: "🧪".repeat(10_000) } });
@@ -178,7 +178,7 @@ describe("createChildTranscriptWriter", () => {
178
178
  transcriptPath,
179
179
  source: "async",
180
180
  runId: "run-5",
181
- agent: "builder",
181
+ agent: "worker",
182
182
  cwd: "/repo",
183
183
  });
184
184
  writer.writeStdoutLine("first line");
@@ -202,7 +202,7 @@ describe("createChildTranscriptWriter", () => {
202
202
  transcriptPath,
203
203
  source: "foreground",
204
204
  runId: "run-6",
205
- agent: "builder",
205
+ agent: "worker",
206
206
  cwd: "/repo",
207
207
  maxBytes: 900,
208
208
  });
@@ -254,7 +254,7 @@ describe("createChildTranscriptWriter", () => {
254
254
  transcriptPath,
255
255
  source: "foreground",
256
256
  runId: "run-7",
257
- agent: "builder",
257
+ agent: "worker",
258
258
  cwd: "/repo",
259
259
  });
260
260
  writer.writeInitialUserMessage("should not be written");
@@ -15,23 +15,53 @@ describe("async compaction resume", () => {
15
15
  const handlers = new Map();
16
16
  const events = { listeners: new Map(), on(name, handler) { this.listeners.set(name, handler); return () => this.listeners.delete(name); }, emit(name, payload) { this.listeners.get(name)?.(payload); } };
17
17
  const sent = [];
18
+ const widgets = [];
19
+ let renders = 0;
18
20
  const pi = new Proxy({
19
21
  events,
20
22
  on(name, handler) { handlers.set(name, handler); },
21
23
  registerTool() {}, registerCommand() {}, registerShortcut() {}, registerMessageRenderer() {},
22
24
  sendMessage(message, options) { sent.push({ message, options }); }, getSessionName() { return undefined; },
23
25
  }, { get(target, prop) { return prop in target ? target[prop] : () => undefined; } });
24
- const ctx = { cwd: process.cwd(), hasUI: true, ui: { setWidget() {}, requestRender() {}, theme: { fg(_name, text) { return text; }, bg(_name, text) { return text; }, bold(text) { return text; } } }, sessionManager: { getSessionId() { return "compact-session"; }, getSessionFile() { return null; }, getEntries() { return []; } }, modelRegistry: { getAvailable() { return []; } } };
26
+ const ctx = { cwd: process.cwd(), hasUI: true, ui: { setWidget(key, value) { widgets.push([key, value]); }, requestRender() { renders++; }, onTerminalInput() { return () => {}; }, getEditorText() { return ""; }, notify() {}, theme: { fg(_name, text) { return text; }, bg(_name, text) { return text; }, bold(text) { return text; } } }, sessionManager: { getSessionId() { return "compact-session"; }, getSessionFile() { return null; }, getEntries() { return []; } }, modelRegistry: { getAvailable() { return []; } } };
25
27
  registerSubagentExtension(pi);
26
28
  handlers.get("session_start")({}, ctx);
27
29
  sent.length = 0;
28
- events.emit("subagent:async-started", { id: "running", pid: 1, sessionId: "compact-session", mode: "single", agent: "builder", asyncDir: path.join(os.tmpdir(), "pi-compaction-test-running") });
29
- handlers.get("session_compact")();
30
+ events.emit("subagent:async-started", { id: "running", pid: 1, sessionId: "compact-session", mode: "single", agent: "worker", asyncDir: path.join(os.tmpdir(), "pi-compaction-test-running") });
31
+ widgets.length = 0;
32
+ renders = 0;
33
+ handlers.get("session_before_compact")({ reason: "threshold", signal: new AbortController().signal });
34
+ const cleared = widgets.filter(([key, value]) => value === undefined).map(([key]) => key).sort();
35
+ if (JSON.stringify(cleared) !== JSON.stringify(["subagent-async", "subagent-fleet-status"])) throw new Error(JSON.stringify(widgets));
36
+ widgets.length = 0;
37
+ events.emit("subagent:async-complete", { id: "running", sessionId: "compact-session", agent: "worker", success: true, summary: "done" });
38
+ events.emit("subagent:async-started", { id: "running-2", pid: 2, sessionId: "compact-session", mode: "single", agent: "worker", asyncDir: path.join(os.tmpdir(), "pi-compaction-test-running-2") });
39
+ if (widgets.length !== 0 || renders !== 0) throw new Error("widgets repainted during compaction");
40
+ handlers.get("session_compact")({ reason: "threshold" });
41
+ if (widgets.length !== 0) throw new Error("widgets restored inside compaction hook");
42
+ handlers.get("agent_start")();
43
+ const restored = widgets.filter(([_, value]) => value !== undefined).map(([key]) => key).sort();
44
+ if (JSON.stringify(restored) !== JSON.stringify(["subagent-async", "subagent-fleet-status"])) throw new Error(JSON.stringify(widgets));
30
45
  if (sent.length !== 1 || sent[0].options?.triggerTurn !== true || sent[0].message?.customType !== "subagent-compaction-resume") throw new Error(JSON.stringify(sent));
46
+
31
47
  sent.length = 0;
32
- events.emit("subagent:async-complete", { id: "running", sessionId: "compact-session", agent: "builder", success: true, summary: "done" });
33
- handlers.get("session_compact")();
48
+ events.emit("subagent:async-complete", { id: "running-2", sessionId: "compact-session", agent: "worker", success: true, summary: "done" });
49
+ handlers.get("session_before_compact")({ reason: "threshold", signal: new AbortController().signal });
50
+ handlers.get("session_compact")({ reason: "threshold" });
51
+ handlers.get("agent_settled")();
34
52
  if (sent.some((entry) => entry.message?.customType === "subagent-compaction-resume")) throw new Error("resumed without active work");
53
+
54
+ events.emit("subagent:async-started", { id: "running-3", pid: 3, sessionId: "compact-session", mode: "single", agent: "worker", asyncDir: path.join(os.tmpdir(), "pi-compaction-test-running-3") });
55
+ widgets.length = 0;
56
+ handlers.get("session_before_compact")({ reason: "overflow", signal: new AbortController().signal });
57
+ widgets.length = 0;
58
+ handlers.get("agent_settled")();
59
+ if (!widgets.some(([_, value]) => value !== undefined)) throw new Error("widgets did not recover after compaction failure");
60
+
61
+ widgets.length = 0;
62
+ handlers.get("session_before_compact")({ reason: "manual", signal: new AbortController().signal });
63
+ if (widgets.length !== 0) throw new Error("manual compaction changed widget state");
64
+ await handlers.get("session_shutdown")();
35
65
  `;
36
66
  const env = { ...process.env };
37
67
  delete env.SELESAI_SUBAGENT_CHILD;
@@ -11,8 +11,8 @@ describe("buildCompletionKey", () => {
11
11
  });
12
12
 
13
13
  it("builds deterministic fallback key when id is missing", () => {
14
- const first = buildCompletionKey({ agent: "commentator", timestamp: 123, taskIndex: 1, totalTasks: 2, success: true }, "x");
15
- const second = buildCompletionKey({ agent: "commentator", timestamp: 123, taskIndex: 1, totalTasks: 2, success: true }, "x");
14
+ const first = buildCompletionKey({ agent: "reviewer", timestamp: 123, taskIndex: 1, totalTasks: 2, success: true }, "x");
15
+ const second = buildCompletionKey({ agent: "reviewer", timestamp: 123, taskIndex: 1, totalTasks: 2, success: true }, "x");
16
16
  assert.equal(first, second);
17
17
  });
18
18
  });
@@ -26,7 +26,7 @@ function assistantText(text: string): Message {
26
26
 
27
27
  test("implementation task with no mutation triggers the completion guard", () => {
28
28
  const result = evaluateCompletionMutationGuard({
29
- agent: "builder",
29
+ agent: "worker",
30
30
  task: "Implement the approved fix",
31
31
  messages: [assistantText("Plan: update the files...")],
32
32
  });
@@ -56,7 +56,7 @@ test("declared read-only builtin tools suppress implementation-word false positi
56
56
  test("read-only issue drafting tasks do not trigger on suggested fix wording", () => {
57
57
  const task = "Draft GitHub issue for pi-subagents bug from current conversation. Include title, environment/context, reproduction steps, actual/expected, logs excerpt, suspected cause, suggested fix. Terse but complete. No tools needed.";
58
58
  const result = evaluateCompletionMutationGuard({
59
- agent: "explorer",
59
+ agent: "delegate",
60
60
  task,
61
61
  messages: [assistantText("Title: completionGuard false positive\n\nSuggested fix: model read-only intent.")],
62
62
  tools: ["read", "grep", "find", "ls", "bash", "edit", "write", "contact_supervisor"],
@@ -67,9 +67,9 @@ test("read-only issue drafting tasks do not trigger on suggested fix wording", (
67
67
  attemptedMutation: false,
68
68
  triggered: false,
69
69
  });
70
- assert.equal(expectsImplementationMutation("builder", task), false);
70
+ assert.equal(expectsImplementationMutation("worker", task), false);
71
71
  assert.equal(
72
- expectsImplementationMutation("builder", "Draft GitHub issue for a bug. Include suspected cause and suggested fix."),
72
+ expectsImplementationMutation("worker", "Draft GitHub issue for a bug. Include suspected cause and suggested fix."),
73
73
  false,
74
74
  );
75
75
  });
@@ -89,9 +89,9 @@ test("omitted, bash, unknown, write, and MCP tool capabilities stay conservative
89
89
  assert.equal(evaluateCompletionMutationGuard({ ...base, tools: ["read", "grep"], mcpDirectTools: ["github/search"] }).triggered, true);
90
90
  });
91
91
 
92
- test("builder with mutating-capable tools still triggers when no mutation is observed", () => {
92
+ test("worker with mutating-capable tools still triggers when no mutation is observed", () => {
93
93
  const result = evaluateCompletionMutationGuard({
94
- agent: "builder",
94
+ agent: "worker",
95
95
  task: "Fix the test implementation",
96
96
  messages: [assistantText("I will edit it next")],
97
97
  tools: ["read", "edit"],
@@ -104,10 +104,10 @@ test("builder with mutating-capable tools still triggers when no mutation is obs
104
104
  });
105
105
  });
106
106
 
107
- test("commentator review tasks with bash available do not require mutation", () => {
107
+ test("oracle review tasks with bash available do not require mutation", () => {
108
108
  const task = "Review prep findings and determine what to implement with playbooks instead of before.";
109
109
  const result = evaluateCompletionMutationGuard({
110
- agent: "commentator",
110
+ agent: "oracle",
111
111
  task,
112
112
  messages: [assistantText("Review complete with file-backed findings.")],
113
113
  tools: ["read", "grep", "find", "ls", "bash", "intercom"],
@@ -121,57 +121,57 @@ test("commentator review tasks with bash available do not require mutation", ()
121
121
  });
122
122
 
123
123
  test("review-only, research, and framework output instructions do not expect mutation", () => {
124
- assert.equal(expectsImplementationMutation("builder", "Review only: return findings, do not edit"), false);
125
- assert.equal(expectsImplementationMutation("builder", "Do not edit files. Tell me how to fix the bug."), false);
126
- assert.equal(expectsImplementationMutation("builder", "Review the diff and suggest fixes only. Do not edit files."), false);
127
- assert.equal(expectsImplementationMutation("builder", "Implement this. Do not edit files outside this repo. Do not edit files."), false);
128
- assert.equal(expectsImplementationMutation("builder", "Investigate why this failed"), false);
124
+ assert.equal(expectsImplementationMutation("worker", "Review only: return findings, do not edit"), false);
125
+ assert.equal(expectsImplementationMutation("worker", "Do not edit files. Tell me how to fix the bug."), false);
126
+ assert.equal(expectsImplementationMutation("worker", "Review the diff and suggest fixes only. Do not edit files."), false);
127
+ assert.equal(expectsImplementationMutation("worker", "Implement this. Do not edit files outside this repo. Do not edit files."), false);
128
+ assert.equal(expectsImplementationMutation("worker", "Investigate why this failed"), false);
129
129
  assert.equal(expectsImplementationMutation("researcher", "Research the API behavior"), false);
130
130
  assert.equal(expectsImplementationMutation("researcher", "Research this and patch the bug"), false);
131
- assert.equal(expectsImplementationMutation("commentator", "Review this and fix any real issues"), false);
132
- assert.equal(expectsImplementationMutation("commentator", "Review this and fix any real issues; regardless of findings, apply changes directly"), true);
133
- assert.equal(expectsImplementationMutation("builder", "[Write to: /tmp/result.md]\n\nSummarize findings"), false);
134
- assert.equal(expectsImplementationMutation("builder", "Write report"), false);
135
- assert.equal(expectsImplementationMutation("builder", "Create a report"), false);
136
- assert.equal(expectsImplementationMutation("builder", "Create a summary"), false);
137
- assert.equal(expectsImplementationMutation("builder", "Add a report"), false);
138
- assert.equal(expectsImplementationMutation("builder", "Update a summary"), false);
139
- assert.equal(expectsImplementationMutation("builder", "Write to {chain_dir}"), false);
131
+ assert.equal(expectsImplementationMutation("reviewer", "Review this and fix any real issues"), false);
132
+ assert.equal(expectsImplementationMutation("reviewer", "Review this and fix any real issues; regardless of findings, apply changes directly"), true);
133
+ assert.equal(expectsImplementationMutation("worker", "[Write to: /tmp/result.md]\n\nSummarize findings"), false);
134
+ assert.equal(expectsImplementationMutation("worker", "Write report"), false);
135
+ assert.equal(expectsImplementationMutation("worker", "Create a report"), false);
136
+ assert.equal(expectsImplementationMutation("worker", "Create a summary"), false);
137
+ assert.equal(expectsImplementationMutation("worker", "Add a report"), false);
138
+ assert.equal(expectsImplementationMutation("worker", "Update a summary"), false);
139
+ assert.equal(expectsImplementationMutation("worker", "Write to {chain_dir}"), false);
140
140
  assert.equal(
141
- expectsImplementationMutation("builder", "Do async work\nUpdate progress at: /tmp/progress.md\n**Output:**\nWrite your findings to exactly this path: /tmp/out.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere."),
141
+ expectsImplementationMutation("worker", "Do async work\nUpdate progress at: /tmp/progress.md\n**Output:**\nWrite your findings to exactly this path: /tmp/out.md\nThis path is authoritative for this run.\nIgnore any other output filename or output path mentioned elsewhere."),
142
142
  false,
143
143
  );
144
144
  });
145
145
 
146
- test("builder implementation verbs win over investigative wording and scoped prohibitions", () => {
147
- assert.equal(expectsImplementationMutation("builder", "Investigate why the builder did not edit files and fix it"), true);
148
- assert.equal(expectsImplementationMutation("builder", "Do not modify tests; implement the fix"), true);
149
- assert.equal(expectsImplementationMutation("builder", "Do not modify tests — implement the fix"), true);
150
- assert.equal(expectsImplementationMutation("builder", "Research the current code path and patch the bug"), true);
151
- assert.equal(expectsImplementationMutation("builder", "Fix the bug where no edits were made"), true);
152
- assert.equal(expectsImplementationMutation("builder", "Fix lint"), true);
153
- assert.equal(expectsImplementationMutation("builder", "Fix the build"), true);
154
- assert.equal(expectsImplementationMutation("builder", "Fix TypeScript errors"), true);
155
- assert.equal(expectsImplementationMutation("builder", "Fix CI"), true);
156
- assert.equal(expectsImplementationMutation("builder", "Fix the failing test"), true);
157
- assert.equal(expectsImplementationMutation("builder", "Patch the cold start test"), true);
158
- assert.equal(expectsImplementationMutation("builder", "Implement the fix and return findings."), true);
146
+ test("worker implementation verbs win over investigative wording and scoped prohibitions", () => {
147
+ assert.equal(expectsImplementationMutation("worker", "Investigate why the worker did not edit files and fix it"), true);
148
+ assert.equal(expectsImplementationMutation("worker", "Do not modify tests; implement the fix"), true);
149
+ assert.equal(expectsImplementationMutation("worker", "Do not modify tests — implement the fix"), true);
150
+ assert.equal(expectsImplementationMutation("worker", "Research the current code path and patch the bug"), true);
151
+ assert.equal(expectsImplementationMutation("worker", "Fix the bug where no edits were made"), true);
152
+ assert.equal(expectsImplementationMutation("worker", "Fix lint"), true);
153
+ assert.equal(expectsImplementationMutation("worker", "Fix the build"), true);
154
+ assert.equal(expectsImplementationMutation("worker", "Fix TypeScript errors"), true);
155
+ assert.equal(expectsImplementationMutation("worker", "Fix CI"), true);
156
+ assert.equal(expectsImplementationMutation("worker", "Fix the failing test"), true);
157
+ assert.equal(expectsImplementationMutation("worker", "Patch the cold start test"), true);
158
+ assert.equal(expectsImplementationMutation("worker", "Implement the fix and return findings."), true);
159
159
  });
160
160
 
161
- test("non-builder implementation tasks still expect mutation", () => {
162
- assert.equal(expectsImplementationMutation("explorer", "Fix the bug where no edits were made"), true);
163
- assert.equal(expectsImplementationMutation("explorer", "Apply the suggested fix to src/runs/shared/completion-guard.ts"), true);
164
- assert.equal(expectsImplementationMutation("builder", "Draft a GitHub issue, then implement the fix"), true);
161
+ test("non-worker implementation tasks still expect mutation", () => {
162
+ assert.equal(expectsImplementationMutation("delegate", "Fix the bug where no edits were made"), true);
163
+ assert.equal(expectsImplementationMutation("delegate", "Apply the suggested fix to src/runs/shared/completion-guard.ts"), true);
164
+ assert.equal(expectsImplementationMutation("worker", "Draft a GitHub issue, then implement the fix"), true);
165
165
  });
166
166
 
167
- test("builder edit intent covers common docs, config, and source tasks", () => {
168
- assert.equal(expectsImplementationMutation("builder", "Update README to mention the native tool"), true);
169
- assert.equal(expectsImplementationMutation("builder", "Remove share functionality and all Vercel references"), true);
170
- assert.equal(expectsImplementationMutation("builder", "Replace the registered command with a render tool"), true);
171
- assert.equal(expectsImplementationMutation("builder", "Create completion-guard.ts"), true);
172
- assert.equal(expectsImplementationMutation("builder", "Add tests for the completion guard"), true);
173
- assert.equal(expectsImplementationMutation("builder", "Implement the approved fixes. Do not edit files outside this repo."), true);
174
- assert.equal(expectsImplementationMutation("builder", "Implement the fix. Do not edit unrelated files."), true);
167
+ test("worker edit intent covers common docs, config, and source tasks", () => {
168
+ assert.equal(expectsImplementationMutation("worker", "Update README to mention the native tool"), true);
169
+ assert.equal(expectsImplementationMutation("worker", "Remove share functionality and all Vercel references"), true);
170
+ assert.equal(expectsImplementationMutation("worker", "Replace the registered command with a render tool"), true);
171
+ assert.equal(expectsImplementationMutation("worker", "Create completion-guard.ts"), true);
172
+ assert.equal(expectsImplementationMutation("worker", "Add tests for the completion guard"), true);
173
+ assert.equal(expectsImplementationMutation("worker", "Implement the approved fixes. Do not edit files outside this repo."), true);
174
+ assert.equal(expectsImplementationMutation("worker", "Implement the fix. Do not edit unrelated files."), true);
175
175
  });
176
176
 
177
177
  test("edit and write tool calls count as mutation attempts", () => {
@@ -225,7 +225,7 @@ test("read-only and quoted git commands do not count as mutation attempts", () =
225
225
 
226
226
  test("implementation task with mutation attempts does not trigger", () => {
227
227
  const result = evaluateCompletionMutationGuard({
228
- agent: "builder",
228
+ agent: "worker",
229
229
  task: "Fix the failing test",
230
230
  messages: [assistantToolCall("edit", { path: "test.ts" })],
231
231
  });
@@ -309,7 +309,7 @@ test("provider checkpoint with a changed commit counts as mutation evidence", ()
309
309
  assert.equal(hasMutationToolCall([message]), true);
310
310
  assert.equal(
311
311
  evaluateCompletionMutationGuard({
312
- agent: "builder",
312
+ agent: "worker",
313
313
  task: "Edit the target source file",
314
314
  messages: [message],
315
315
  }).triggered,
@@ -327,7 +327,7 @@ test("unchanged provider checkpoint does not bypass the completion guard", () =>
327
327
  assert.equal(hasMutationToolCall([message]), false);
328
328
  assert.equal(
329
329
  evaluateCompletionMutationGuard({
330
- agent: "builder",
330
+ agent: "worker",
331
331
  task: "Edit the target source file",
332
332
  messages: [message],
333
333
  }).triggered,
@@ -338,7 +338,7 @@ test("unchanged provider checkpoint does not bypass the completion guard", () =>
338
338
 
339
339
  test("implementation task with Cursor edit thinking does not trigger", () => {
340
340
  const result = evaluateCompletionMutationGuard({
341
- agent: "builder",
341
+ agent: "worker",
342
342
  task: "Edit docs/BACKEND_ARCHITECTURE.md",
343
343
  messages: [
344
344
  assistantThinking("Cursor edit: docs/BACKEND_ARCHITECTURE.md added 1 line\n"),