@selesai/code 0.8.2 → 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 (528) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +4 -2
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.js +18 -0
  5. package/dist/cli/config-selector.js +2 -2
  6. package/dist/cli/startup-ui.d.ts +1 -1
  7. package/dist/cli/startup-ui.js +2 -2
  8. package/dist/core/keybindings.d.ts +44 -4
  9. package/dist/core/llama/provider.js +22 -7
  10. package/dist/core/model-resolver.js +2 -0
  11. package/dist/core/model-runtime.d.ts +4 -2
  12. package/dist/core/model-runtime.js +23 -2
  13. package/dist/core/remote-catalog-provider.js +72 -67
  14. package/dist/core/settings-manager.d.ts +8 -0
  15. package/dist/core/settings-manager.js +18 -0
  16. package/dist/extensions/handoff-new.ts +1 -1
  17. package/dist/extensions/inline-skills.test.ts +1 -0
  18. package/dist/extensions/inline-skills.ts +1 -1
  19. package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
  20. package/dist/extensions/pi-intercom/README.md +34 -15
  21. package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
  22. package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
  23. package/dist/extensions/pi-intercom/broker/client.ts +78 -150
  24. package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
  25. package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
  26. package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
  27. package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
  28. package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
  29. package/dist/extensions/pi-intercom/config.test.ts +8 -10
  30. package/dist/extensions/pi-intercom/config.ts +3 -3
  31. package/dist/extensions/pi-intercom/index.ts +218 -147
  32. package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
  33. package/dist/extensions/pi-intercom/package.json +3 -2
  34. package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
  35. package/dist/extensions/pi-intercom/project-agent.ts +324 -0
  36. package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
  37. package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
  38. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
  39. package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
  40. package/dist/extensions/pi-intercom/types.ts +3 -1
  41. package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
  42. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
  43. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +15 -1
  44. package/dist/extensions/pi-powerline-footer/README.md +20 -37
  45. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
  46. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
  47. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
  48. package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
  49. package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
  50. package/dist/extensions/pi-powerline-footer/index.ts +394 -586
  51. package/dist/extensions/pi-powerline-footer/package.json +5 -6
  52. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -18
  53. package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
  54. package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
  55. package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
  56. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
  57. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
  58. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
  59. package/dist/extensions/pi-powerline-footer/tests/fixed-editor-border.test.ts +2 -2
  60. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
  61. package/dist/extensions/pi-powerline-footer/tests/guide.test.ts +1 -1
  62. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +86 -19
  63. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
  64. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
  65. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
  66. package/dist/extensions/pi-powerline-footer/tsconfig.json +1 -1
  67. package/dist/extensions/pi-powerline-footer/types.ts +1 -2
  68. package/dist/extensions/pi-subagents/CHANGELOG.md +202 -14
  69. package/dist/extensions/pi-subagents/README.md +65 -1614
  70. package/dist/extensions/pi-subagents/agents/builder.md +0 -1
  71. package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
  72. package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
  73. package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
  74. package/dist/extensions/pi-subagents/agents/scout.md +50 -0
  75. package/dist/extensions/pi-subagents/agents/worker.md +58 -0
  76. package/dist/extensions/pi-subagents/docs/configuration.md +328 -0
  77. package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
  78. package/dist/extensions/pi-subagents/docs/missions.md +119 -0
  79. package/dist/extensions/pi-subagents/docs/models.md +192 -0
  80. package/dist/extensions/pi-subagents/docs/observability.md +174 -0
  81. package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
  82. package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
  83. package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
  84. package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
  85. package/dist/extensions/pi-subagents/package-lock.json +152 -194
  86. package/dist/extensions/pi-subagents/package.json +9 -10
  87. package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
  88. package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
  89. package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
  90. package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
  91. package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
  92. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
  93. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
  94. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
  95. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
  96. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
  97. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
  98. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
  99. package/dist/extensions/pi-subagents/src/agents/agents.ts +29 -16
  100. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
  101. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
  102. package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
  103. package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
  104. package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
  105. package/dist/extensions/pi-subagents/src/extension/config.ts +56 -8
  106. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
  107. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
  108. package/dist/extensions/pi-subagents/src/extension/index.ts +119 -50
  109. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +72 -0
  110. package/dist/extensions/pi-subagents/src/extension/rpc.ts +15 -15
  111. package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
  112. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
  113. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
  114. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
  115. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
  116. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
  117. package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
  118. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
  119. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -14
  120. package/dist/extensions/pi-subagents/src/missions/store.ts +147 -5
  121. package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
  122. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +256 -0
  123. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
  124. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +42 -0
  125. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +41 -7
  126. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
  127. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +19 -3
  128. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +39 -6
  129. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
  130. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
  131. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
  132. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
  133. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
  134. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
  135. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +21 -2
  136. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
  137. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
  138. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
  139. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +152 -68
  140. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
  141. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
  142. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
  143. package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
  144. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
  145. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
  146. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +3 -0
  147. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +55 -26
  148. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
  149. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +798 -112
  150. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
  151. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +165 -22
  152. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  153. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
  154. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +9 -5
  155. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
  156. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +1 -0
  157. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +465 -116
  158. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
  159. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
  160. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +2 -2
  161. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +3 -3
  162. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
  163. package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
  164. package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
  165. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
  166. package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
  167. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
  168. package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
  169. package/dist/extensions/pi-subagents/src/shared/types.ts +100 -3
  170. package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
  171. package/dist/extensions/pi-subagents/src/shared/utils.ts +43 -33
  172. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
  173. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
  174. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
  175. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
  176. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
  177. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
  178. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
  179. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +30 -16
  180. package/dist/extensions/pi-subagents/src/tui/fleet.ts +151 -31
  181. package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
  182. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
  183. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
  184. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
  185. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +313 -25
  186. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
  187. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  188. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  189. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  190. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  191. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  192. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  193. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  194. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  195. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  196. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  197. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  198. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  199. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  200. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
  364. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +15 -15
  365. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +411 -300
  366. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
  367. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +99 -56
  368. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
  369. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +159 -108
  370. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
  371. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
  372. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +56 -56
  373. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +114 -45
  374. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +57 -19
  375. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
  376. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
  377. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
  378. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +809 -87
  379. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
  380. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  381. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
  382. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  383. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  384. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
  385. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
  386. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +163 -58
  387. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
  388. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
  389. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
  390. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
  391. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  392. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +99 -99
  393. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
  394. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  395. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
  396. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
  397. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
  398. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
  399. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +2 -2
  400. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +94 -40
  401. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
  402. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
  403. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
  404. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +19 -19
  405. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  406. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  407. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  408. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
  409. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  410. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +52 -52
  411. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
  412. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
  413. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
  414. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
  415. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
  416. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
  417. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  418. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  419. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
  420. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +62 -44
  421. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +329 -37
  422. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +4 -4
  423. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
  424. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
  425. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
  426. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
  427. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
  428. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +5 -5
  429. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
  430. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +55 -7
  431. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
  432. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +28 -1
  433. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
  434. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
  435. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
  436. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
  437. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
  438. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
  439. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
  440. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
  441. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  442. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  443. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
  444. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
  445. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +357 -92
  446. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +22 -6
  447. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
  448. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
  449. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  450. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +4 -4
  451. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
  452. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
  453. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
  454. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
  455. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +40 -0
  456. package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
  457. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
  458. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
  459. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
  460. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +107 -27
  461. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  462. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +56 -50
  463. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
  464. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  465. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +59 -44
  466. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
  467. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
  468. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
  469. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  470. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +120 -91
  471. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  472. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
  473. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  474. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
  475. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
  476. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
  477. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +26 -26
  478. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +73 -0
  479. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
  480. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
  481. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
  482. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  483. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  484. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  485. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  486. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
  487. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
  488. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  489. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
  490. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +7 -7
  491. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
  492. package/dist/extensions/workflow/extension.ts +21 -19
  493. package/dist/extensions/workflow/modes.ts +65 -0
  494. package/dist/index.d.ts +1 -1
  495. package/dist/main.js +1 -0
  496. package/dist/modes/interactive/components/settings-selector.d.ts +6 -2
  497. package/dist/modes/interactive/components/settings-selector.js +20 -0
  498. package/dist/modes/interactive/interactive-mode.d.ts +28 -0
  499. package/dist/modes/interactive/interactive-mode.js +214 -28
  500. package/dist/modes/interactive/theme/dark.json +1 -0
  501. package/dist/modes/interactive/theme/light.json +1 -0
  502. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
  503. package/dist/modes/interactive/theme/theme-controller.js +10 -1
  504. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  505. package/dist/modes/interactive/theme/theme.js +24 -6
  506. package/dist/skills/pi-subagents/SKILL.md +20 -15
  507. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
  508. package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
  509. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
  510. package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
  511. package/docs/keybindings.md +35 -7
  512. package/docs/plans/workflow-autoloop-reference.md +192 -0
  513. package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
  514. package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
  515. package/docs/settings.md +16 -14
  516. package/docs/usage.md +5 -0
  517. package/package.json +5 -5
  518. package/dist/extensions/pi-powerline-footer/fixed-editor/cluster.ts +0 -113
  519. package/dist/extensions/pi-powerline-footer/fixed-editor/terminal-split.ts +0 -1080
  520. package/dist/extensions/pi-powerline-footer/tests/fixed-editor.test.ts +0 -1452
  521. package/dist/extensions/workflow/adapter.ts +0 -949
  522. package/dist/extensions/workflow/modes/loop.ts +0 -74
  523. package/dist/extensions/workflow/modes/prototype.ts +0 -170
  524. package/dist/extensions/workflow/modes/quicktype.ts +0 -150
  525. package/dist/extensions/workflow/modes/task.ts +0 -105
  526. package/dist/extensions/workflow/run-state.ts +0 -124
  527. package/dist/extensions/workflow/state-machine.ts +0 -484
  528. package/dist/extensions/workflow/validators.ts +0 -42
@@ -160,7 +160,7 @@ describe("subagent extension RPC bridge", () => {
160
160
  asyncJobs: new Map([["async-private-id", {
161
161
  asyncId: "async-private-id", sessionId: "/sessions/parent.jsonl", status: "running", mode: "single",
162
162
  description: ["Review", "\u001b]8;;hostile\u0007", "the diff"].join("\n"),
163
- startedAt: 100, steps: [{ agent: "commentator", label: "opaque label", status: "running", startedAt: 120, model: "anthropic/claude-opus-4-8:high", thinking: "high", tokens: { input: 12, output: 34, total: 46 } }],
163
+ startedAt: 100, steps: [{ agent: "reviewer", label: "opaque label", status: "running", startedAt: 120, model: "anthropic/claude-opus-4-8:high", thinking: "high", tokens: { input: 12, output: 34, total: 46 } }],
164
164
  }]]),
165
165
  } as any;
166
166
  const bridge = registerSubagentRpcBridge({
@@ -173,13 +173,41 @@ describe("subagent extension RPC bridge", () => {
173
173
  assert.equal((fleet as { totalActive?: number }).totalActive, 1);
174
174
  assert.equal((fleet as { omitted?: number }).omitted, 0);
175
175
  assert.deepEqual(fleet.entries[0], {
176
- key: "fleet-1", agent: "commentator", role: "opaque label", model: "anthropic/claude-opus-4-8:high", effort: "high",
176
+ key: "fleet-1", agent: "reviewer", role: "opaque label", model: "anthropic/claude-opus-4-8:high", effort: "high",
177
177
  startedAt: 120, tokens: { input: 12, output: 34, total: 46 }, goal: "Review the diff",
178
178
  });
179
179
  assert.equal(JSON.stringify(fleet).includes("async-private-id"), false);
180
180
  bridge.dispose();
181
181
  });
182
182
 
183
+ it("projects fleet text without control characters or malformed UTF-16", async () => {
184
+ const events = new FakeEvents();
185
+ const state = {
186
+ currentSessionId: "session-123",
187
+ foregroundControls: new Map(),
188
+ asyncJobs: new Map([["unicode", {
189
+ asyncId: "unicode", sessionId: "session-123", status: "running", mode: "single", startedAt: 1,
190
+ description: "start\n" + "😀".repeat(257),
191
+ agents: [`worker\ud800broken\udc00${"😀".repeat(45)}`],
192
+ }]]),
193
+ } as any;
194
+ const bridge = registerSubagentRpcBridge({
195
+ events, getContext: () => ctx("session-123", "session-123"), state,
196
+ execute: async () => ({ content: [], details: { mode: "management", results: [] } } as any),
197
+ });
198
+ const reply = await request(events, "fleet-unicode", "status");
199
+ const entry = (reply as any).data.fleet.entries[0];
200
+ const malformedSurrogate = /[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/u;
201
+
202
+ assert.doesNotMatch(entry.agent, malformedSurrogate);
203
+ assert.doesNotMatch(entry.goal, malformedSurrogate);
204
+ assert.doesNotMatch(entry.goal, /[\r\n]/);
205
+ assert.ok(entry.agent.length <= 96);
206
+ assert.ok(entry.goal.length <= 512);
207
+ assert.match(entry.agent, /^worker broken/);
208
+ bridge.dispose();
209
+ });
210
+
183
211
  it("projects resolved foreground model, effort, split usage, and goal", async () => {
184
212
  const events = new FakeEvents();
185
213
  const state = {
@@ -191,7 +219,7 @@ describe("subagent extension RPC bridge", () => {
191
219
  startedAt: 90,
192
220
  activeChildren: new Map([[0, {
193
221
  index: 0,
194
- agent: "builder",
222
+ agent: "worker",
195
223
  description: "Implement the fix",
196
224
  startedAt: 100,
197
225
  updatedAt: 110,
@@ -209,7 +237,7 @@ describe("subagent extension RPC bridge", () => {
209
237
  sessionId: "old-session",
210
238
  mode: "single",
211
239
  startedAt: 50,
212
- currentAgent: "commentator",
240
+ currentAgent: "reviewer",
213
241
  description: "Old work",
214
242
  });
215
243
  const bridge = registerSubagentRpcBridge({
@@ -225,7 +253,7 @@ describe("subagent extension RPC bridge", () => {
225
253
  omitted: 0,
226
254
  entries: [{
227
255
  key: "fleet-1",
228
- agent: "builder",
256
+ agent: "worker",
229
257
  model: "openai/gpt-5.6-terra:high",
230
258
  effort: "high",
231
259
  startedAt: 100,
@@ -269,7 +297,7 @@ describe("subagent extension RPC bridge", () => {
269
297
  status: "running",
270
298
  mode: "single",
271
299
  startedAt: index + 1,
272
- agents: [`builder-${index}`],
300
+ agents: [`worker-${index}`],
273
301
  });
274
302
  }
275
303
  jobs.set("unattributed", { asyncId: "unattributed", status: "running", mode: "single", startedAt: 20, agents: ["hidden"] });
@@ -300,19 +328,18 @@ describe("subagent extension RPC bridge", () => {
300
328
  execute: async (_id, params) => {
301
329
  executedParams = params;
302
330
  return {
303
- content: [{ type: "text", text: "Async: builder [run-1]" }],
331
+ content: [{ type: "text", text: "Async: worker [run-1]" }],
304
332
  details: { mode: "single", results: [], asyncId: "run-1", asyncDir: "/tmp/run-1" },
305
333
  } as any;
306
334
  },
307
335
  });
308
336
 
309
- const reply = await request(events, "spawn-1", "spawn", { agent: "builder", task: "Do work" });
337
+ const reply = await request(events, "spawn-1", "spawn", { workflowScript: "return runs.run('main', { agent: 'worker', task: 'Do work' })" });
310
338
 
311
339
  assert.equal(reply.success, true);
312
- assert.equal(executedParams.agent, "builder");
313
- assert.equal(executedParams.task, "Do work");
340
+ assert.equal(executedParams.workflowScript, "return runs.run('main', { agent: 'worker', task: 'Do work' })");
314
341
  assert.equal(executedParams.async, true);
315
- assert.equal(executedParams.clarify, false);
342
+ assert.equal("clarify" in executedParams, false);
316
343
  assert.equal((reply as { data: { details?: { asyncId?: string } } }).data.details?.asyncId, "run-1");
317
344
 
318
345
  bridge.dispose();
@@ -326,11 +353,11 @@ describe("subagent extension RPC bridge", () => {
326
353
  getContext: () => ctx(),
327
354
  execute: async (_id, params) => {
328
355
  executedParams = params;
329
- return { content: [{ type: "text", text: "Async: builder [run-1]" }], details: { mode: "single", results: [] } } as any;
356
+ return { content: [{ type: "text", text: "Async: worker [run-1]" }], details: { mode: "single", results: [] } } as any;
330
357
  },
331
358
  });
332
359
 
333
- const reply = await request(events, "spawn-worktree", "spawn", { agent: "builder", task: "Do work", worktree: true });
360
+ const reply = await request(events, "spawn-worktree", "spawn", { workflowScript: "return runs.run('main', { agent: 'worker', task: 'Do work' })", worktree: true });
334
361
 
335
362
  assert.equal(reply.success, true);
336
363
  assert.equal(executedParams.worktree, true);
@@ -338,24 +365,25 @@ describe("subagent extension RPC bridge", () => {
338
365
  bridge.dispose();
339
366
  });
340
367
 
341
- it("rejects removed top-level chain and parallel spawn inputs", async () => {
368
+ it("accepts chain, parallel, single, and worktree spawn inputs", async () => {
342
369
  const events = new FakeEvents();
343
370
  let executeCalls = 0;
344
371
  const bridge = registerSubagentRpcBridge({
345
372
  events,
346
373
  getContext: () => ctx(),
347
- execute: async () => { executeCalls++; throw new Error("unreachable"); },
374
+ execute: async () => { executeCalls++; return { content: [], details: { mode: "workflow", results: [] } } as any; },
348
375
  });
349
376
 
350
- const chainReply = await request(events, "spawn-chain", "spawn", { chain: [{ agent: "builder" }] });
351
- const parallelReply = await request(events, "spawn-parallel", "spawn", { tasks: [{ agent: "builder", task: "work" }] });
352
- const worktreeReply = await request(events, "spawn-worktree", "spawn", { worktree: true });
377
+ const chainReply = await request(events, "spawn-chain", "spawn", { chain: [{ agent: "worker" }] });
378
+ const parallelReply = await request(events, "spawn-parallel", "spawn", { tasks: [{ agent: "worker", task: "work" }] });
379
+ const singleReply = await request(events, "spawn-single", "spawn", { agent: "worker", task: "work" });
380
+ const worktreeReply = await request(events, "spawn-worktree", "spawn", { worktree: true, workflowScript: "return 1" });
353
381
 
354
- assert.equal(chainReply.success, false);
355
- assert.equal(parallelReply.success, false);
356
- assert.equal(worktreeReply.success, false);
357
- assert.match((chainReply as { error?: { message?: string } }).error?.message ?? "", /workflowScript/);
358
- assert.equal(executeCalls, 0);
382
+ assert.equal(chainReply.success, true);
383
+ assert.equal(parallelReply.success, true);
384
+ assert.equal(singleReply.success, true);
385
+ assert.equal(worktreeReply.success, true);
386
+ assert.equal(executeCalls, 4);
359
387
  bridge.dispose();
360
388
  });
361
389
 
@@ -371,15 +399,19 @@ describe("subagent extension RPC bridge", () => {
371
399
  },
372
400
  });
373
401
 
374
- const foreground = await request(events, "spawn-foreground", "spawn", { agent: "builder", task: "Do work", async: false });
402
+ const direct = await request(events, "spawn-direct", "spawn", { agent: "worker", task: "Do work" });
403
+ const foreground = await request(events, "spawn-foreground", "spawn", { workflowScript: "return runs.run('main', { agent: 'worker' })", async: false });
375
404
  const management = await request(events, "spawn-management", "spawn", { action: "list" });
376
405
 
406
+ assert.equal(direct.success, true);
407
+ assert.equal(executeCalls, 1);
408
+
377
409
  assert.equal(foreground.success, false);
378
410
  assert.equal((foreground as { error: { code: string; message: string } }).error.code, "invalid_params");
379
411
  assert.match((foreground as { error: { message: string } }).error.message, /detached async/);
380
412
  assert.equal(management.success, false);
381
413
  assert.match((management as { error: { message: string } }).error.message, /does not accept management/);
382
- assert.equal(executeCalls, 0);
414
+ assert.equal(executeCalls, 1);
383
415
 
384
416
  bridge.dispose();
385
417
  });
@@ -403,6 +435,7 @@ describe("subagent extension RPC bridge", () => {
403
435
  id: "abc123",
404
436
  index: 0,
405
437
  message: " Focus on the failing test. ",
438
+ mode: "follow_up",
406
439
  });
407
440
 
408
441
  assert.equal(reply.success, true);
@@ -411,6 +444,7 @@ describe("subagent extension RPC bridge", () => {
411
444
  id: "abc123",
412
445
  index: 0,
413
446
  message: "Focus on the failing test.",
447
+ mode: "follow_up",
414
448
  steeringRecovery: false,
415
449
  });
416
450
  assert.equal((reply as { data: { text?: string } }).data.text, "Steering delivered.");
@@ -569,7 +603,7 @@ describe("subagent extension RPC bridge", () => {
569
603
  pid: 4242,
570
604
  startedAt: 100,
571
605
  lastUpdate: 100,
572
- steps: [{ agent: "builder", status: "running", startedAt: 100 }],
606
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
573
607
  }, null, 2), "utf-8");
574
608
  const bridge = registerSubagentRpcBridge({
575
609
  events,
@@ -594,6 +628,52 @@ describe("subagent extension RPC bridge", () => {
594
628
  }
595
629
  });
596
630
 
631
+ it("rejects stop requests for reload-recovered workflows", async () => {
632
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-rpc-stop-workflow-"));
633
+ try {
634
+ const events = new FakeEvents();
635
+ const asyncRoot = path.join(root, "runs");
636
+ const resultsDir = path.join(root, "results");
637
+ const asyncDir = path.join(asyncRoot, "workflow-run");
638
+ let killCalls = 0;
639
+ fs.mkdirSync(asyncDir, { recursive: true });
640
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
641
+ runId: "workflow-run",
642
+ sessionId: "/sessions/parent.jsonl",
643
+ mode: "workflow",
644
+ state: "running",
645
+ pid: 4242,
646
+ startedAt: 100,
647
+ lastUpdate: 100,
648
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
649
+ }, null, 2), "utf-8");
650
+ const bridge = registerSubagentRpcBridge({
651
+ events,
652
+ getContext: () => ctx(),
653
+ execute: async () => assert.fail("stop should not call executor"),
654
+ asyncDirRoot: asyncRoot,
655
+ resultsDir,
656
+ kill: () => {
657
+ killCalls++;
658
+ return true;
659
+ },
660
+ now: () => 150,
661
+ });
662
+
663
+ const reply = await request(events, "stop-workflow", "stop", { id: "workflow-run" });
664
+
665
+ assert.equal(reply.success, false);
666
+ assert.equal((reply as { error: { code: string; message: string } }).error.code, "invalid_state");
667
+ assert.match((reply as { error: { message: string } }).error.message, /reload recovery cannot stop it safely/);
668
+ assert.equal(fs.existsSync(stopRequestPath(asyncDir)), false);
669
+ assert.equal(killCalls, 0);
670
+
671
+ bridge.dispose();
672
+ } finally {
673
+ fs.rmSync(root, { recursive: true, force: true });
674
+ }
675
+ });
676
+
597
677
  it("rejects stop requests for async runs from a different session", async () => {
598
678
  const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-rpc-stop-session-"));
599
679
  try {
@@ -611,7 +691,7 @@ describe("subagent extension RPC bridge", () => {
611
691
  pid: 4242,
612
692
  startedAt: 100,
613
693
  lastUpdate: 100,
614
- steps: [{ agent: "builder", status: "running", startedAt: 100 }],
694
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
615
695
  }, null, 2), "utf-8");
616
696
  const bridge = registerSubagentRpcBridge({
617
697
  events,
@@ -45,7 +45,7 @@ function writeNestedChild(route: ReturnType<typeof createNestedRoute>, parentRun
45
45
  ts: 100,
46
46
  parentRunId,
47
47
  ...(parentStepIndex !== undefined ? { parentStepIndex } : {}),
48
- child: { id, parentRunId, ...(parentStepIndex !== undefined ? { parentStepIndex } : {}), depth: 1, path: [{ runId: parentRunId, ...(parentStepIndex !== undefined ? { stepIndex: parentStepIndex } : {}) }], state: "running", agent: "builder" },
48
+ child: { id, parentRunId, ...(parentStepIndex !== undefined ? { parentStepIndex } : {}), depth: 1, path: [{ runId: parentRunId, ...(parentStepIndex !== undefined ? { stepIndex: parentStepIndex } : {}) }], state: "running", agent: "worker" },
49
49
  });
50
50
  }
51
51
 
@@ -3,6 +3,7 @@ import * as fs from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
5
  import { describe, it } from "node:test";
6
+ import { updateActiveRunIndex } from "../../src/runs/background/active-run-index.ts";
6
7
  import { inspectSubagentStatus } from "../../src/runs/background/run-status.ts";
7
8
  import { createNestedRoute, writeNestedEvent } from "../../src/runs/shared/nested-events.ts";
8
9
  import { TEMP_ROOT_DIR, type SubagentState } from "../../src/shared/types.ts";
@@ -37,7 +38,7 @@ describe("async run status inspection", () => {
37
38
  lastUpdate: 100,
38
39
  currentStep: 0,
39
40
  sessionFile,
40
- steps: [{ agent: "explorer", status: "running", startedAt: 100, sessionFile }],
41
+ steps: [{ agent: "scout", status: "running", startedAt: 100, sessionFile }],
41
42
  }, null, 2), "utf-8");
42
43
 
43
44
  const result = inspectSubagentStatus({ id: "run-stale" }, {
@@ -52,7 +53,7 @@ describe("async run status inspection", () => {
52
53
  assert.match(text, /State: failed/);
53
54
  assert.match(text, /Diagnosis: Async runner process 12345 exited or disappeared/);
54
55
  assert.match(text, new RegExp(`Result: ${path.join(resultsDir, "run-stale.json").replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`));
55
- assert.match(text, /Step 1: explorer failed, error: Async runner process 12345 exited or disappeared/);
56
+ assert.match(text, /Step 1: scout failed, error: Async runner process 12345 exited or disappeared/);
56
57
  assert.match(text, /Revive: subagent\(\{ action: "resume", id: "run-stale", message: "\.\.\." \}\)/);
57
58
  const resultJson = JSON.parse(fs.readFileSync(path.join(resultsDir, "run-stale.json"), "utf-8"));
58
59
  assert.equal(resultJson.success, false);
@@ -71,8 +72,8 @@ describe("async run status inspection", () => {
71
72
  const runOutputPath = path.join(asyncDir, "combined-output.log");
72
73
  const firstStepOutputPath = path.join(asyncDir, "output-0.log");
73
74
  const secondStepOutputPath = path.join(asyncDir, "output-1.log");
74
- fs.writeFileSync(firstStepOutputPath, "commentator one", "utf-8");
75
- fs.writeFileSync(secondStepOutputPath, "commentator two", "utf-8");
75
+ fs.writeFileSync(firstStepOutputPath, "reviewer one", "utf-8");
76
+ fs.writeFileSync(secondStepOutputPath, "reviewer two", "utf-8");
76
77
  fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
77
78
  runId: "run-parallel",
78
79
  mode: "parallel",
@@ -86,9 +87,9 @@ describe("async run status inspection", () => {
86
87
  chainStepCount: 1,
87
88
  parallelGroups: [{ start: 0, count: 3, stepIndex: 0 }],
88
89
  steps: [
89
- { agent: "commentator", status: "running", startedAt: 100, model: "openai-codex/gpt-5.5:high" },
90
- { agent: "commentator", status: "running", startedAt: 100, model: "anthropic/claude-haiku-4-5", thinking: "low" },
91
- { agent: "commentator", status: "pending" },
90
+ { agent: "reviewer", status: "running", startedAt: 100, model: "openai-codex/gpt-5.5:high" },
91
+ { agent: "reviewer", status: "running", startedAt: 100, model: "anthropic/claude-haiku-4-5", thinking: "low" },
92
+ { agent: "reviewer", status: "pending" },
92
93
  ],
93
94
  }, null, 2), "utf-8");
94
95
 
@@ -104,13 +105,13 @@ describe("async run status inspection", () => {
104
105
  assert.match(text, /Error: top-level async status error/);
105
106
  assert.match(text, /Progress: 2 agents running · 0\/3 done/);
106
107
  assert.match(text, new RegExp(`Output: ${runOutputPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`));
107
- assert.match(text, /Agent 1\/3: commentator running \(gpt-5\.5 · thinking high\)/);
108
- assert.match(text, /Agent 2\/3: commentator running \(claude-haiku-4-5 · thinking low\)/);
109
- assert.match(text, /Agent 3\/3: commentator pending/);
108
+ assert.match(text, /Agent 1\/3: reviewer running \(gpt-5\.5 · thinking high\)/);
109
+ assert.match(text, /Agent 2\/3: reviewer running \(claude-haiku-4-5 · thinking low\)/);
110
+ assert.match(text, /Agent 3\/3: reviewer pending/);
110
111
  assert.doesNotMatch(text, /openai-codex\/gpt-5\.5/);
111
112
  assert.match(text, new RegExp(` Output: ${firstStepOutputPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`));
112
113
  assert.match(text, new RegExp(` Output: ${secondStepOutputPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`));
113
- assert.doesNotMatch(text, /Step 1: commentator/);
114
+ assert.doesNotMatch(text, /Step 1: reviewer/);
114
115
  } finally {
115
116
  fs.rmSync(root, { recursive: true, force: true });
116
117
  }
@@ -131,7 +132,7 @@ describe("async run status inspection", () => {
131
132
  startedAt: 100,
132
133
  lastUpdate: 200,
133
134
  currentStep: 0,
134
- steps: [{ agent: "builder", status: "running", startedAt: 100 }],
135
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
135
136
  }, null, 2), "utf-8");
136
137
 
137
138
  const result = inspectSubagentStatus({ id: "run-transcript", view: "transcript", lines: 2 }, {
@@ -144,7 +145,7 @@ describe("async run status inspection", () => {
144
145
  const text = textContent(result);
145
146
  assert.equal(result.isError, undefined);
146
147
  assert.match(text, /Run: run-transcript/);
147
- assert.match(text, /Step: 0 \(builder\) \| running/);
148
+ assert.match(text, /Step: 0 \(worker\) \| running/);
148
149
  assert.match(text, new RegExp(`Transcript tail from ${outputPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")} \\(tail truncated\\):`));
149
150
  assert.doesNotMatch(text, /first line/);
150
151
  assert.match(text, /second line/);
@@ -172,8 +173,8 @@ describe("async run status inspection", () => {
172
173
  currentStep: 0,
173
174
  outputFile: wrongOutputPath,
174
175
  steps: [
175
- { agent: "builder", status: "running", startedAt: 100 },
176
- { agent: "commentator", status: "pending", recentOutput: ["RIGHT_CHILD_RECENT"] },
176
+ { agent: "worker", status: "running", startedAt: 100 },
177
+ { agent: "reviewer", status: "pending", recentOutput: ["RIGHT_CHILD_RECENT"] },
177
178
  ],
178
179
  }, null, 2), "utf-8");
179
180
 
@@ -186,7 +187,7 @@ describe("async run status inspection", () => {
186
187
 
187
188
  const text = textContent(result);
188
189
  assert.equal(result.isError, undefined);
189
- assert.match(text, /Agent: 1 \(commentator\) \| pending/);
190
+ assert.match(text, /Agent: 1 \(reviewer\) \| pending/);
190
191
  assert.match(text, /Recent output from status\.json:/);
191
192
  assert.match(text, /RIGHT_CHILD_RECENT/);
192
193
  assert.doesNotMatch(text, /WRONG_CHILD_OUTPUT/);
@@ -246,7 +247,7 @@ describe("async run status inspection", () => {
246
247
  state: "complete",
247
248
  startedAt: 100,
248
249
  lastUpdate: 200,
249
- steps: [{ agent: "builder", status: "complete", sessionFile: linkedSession }],
250
+ steps: [{ agent: "worker", status: "complete", sessionFile: linkedSession }],
250
251
  }, null, 2), "utf-8");
251
252
 
252
253
  const result = inspectSubagentStatus({ id: "run-session-symlink", view: "transcript", index: 0 }, {
@@ -271,7 +272,7 @@ describe("async run status inspection", () => {
271
272
  const asyncRoot = path.join(root, "runs");
272
273
  const asyncDir = path.join(asyncRoot, "run-fleet");
273
274
  fs.mkdirSync(asyncDir, { recursive: true });
274
- fs.writeFileSync(path.join(asyncDir, "output-0.log"), "builder output", "utf-8");
275
+ fs.writeFileSync(path.join(asyncDir, "output-0.log"), "worker output", "utf-8");
275
276
  fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
276
277
  runId: "run-fleet",
277
278
  mode: "parallel",
@@ -282,17 +283,18 @@ describe("async run status inspection", () => {
282
283
  chainStepCount: 1,
283
284
  parallelGroups: [{ start: 0, count: 2, stepIndex: 0 }],
284
285
  steps: [
285
- { agent: "builder", status: "running", startedAt: 100 },
286
- { agent: "commentator", status: "pending" },
286
+ { agent: "worker", status: "running", startedAt: 100 },
287
+ { agent: "reviewer", status: "pending" },
287
288
  ],
288
289
  }, null, 2), "utf-8");
290
+ updateActiveRunIndex(asyncDir, "running");
289
291
  const state = {
290
292
  foregroundControls: new Map([["fg-run", {
291
293
  runId: "fg-run",
292
294
  mode: "single",
293
295
  startedAt: 100,
294
296
  updatedAt: 250,
295
- currentAgent: "explorer",
297
+ currentAgent: "scout",
296
298
  currentIndex: 0,
297
299
  lastActivityAt: 240,
298
300
  }]]),
@@ -310,7 +312,7 @@ describe("async run status inspection", () => {
310
312
  assert.equal(result.isError, undefined);
311
313
  assert.match(text, /Subagent fleet: 2 tracked/);
312
314
  assert.match(text, /Foreground runs:/);
313
- assert.match(text, /fg-run \| running \| explorer/);
315
+ assert.match(text, /fg-run \| running \| scout/);
314
316
  assert.match(text, /Async runs:/);
315
317
  assert.match(text, /run-fleet \| running .*\| parallel \| 1 agent running · 0\/2 done/);
316
318
  assert.match(text, /transcript: subagent\(\{ action: "status", id: "run-fleet", view: "transcript" \}\)/);
@@ -335,7 +337,7 @@ describe("async run status inspection", () => {
335
337
  state: "running",
336
338
  startedAt: 100,
337
339
  lastUpdate: 200,
338
- steps: [{ agent: "builder", status: "running", startedAt: 100 }],
340
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
339
341
  }, null, 2), "utf-8");
340
342
  fs.writeFileSync(path.join(otherDir, "status.json"), JSON.stringify({
341
343
  runId: "run-other",
@@ -344,8 +346,10 @@ describe("async run status inspection", () => {
344
346
  state: "running",
345
347
  startedAt: 100,
346
348
  lastUpdate: 200,
347
- steps: [{ agent: "commentator", status: "running", startedAt: 100 }],
349
+ steps: [{ agent: "reviewer", status: "running", startedAt: 100 }],
348
350
  }, null, 2), "utf-8");
351
+ updateActiveRunIndex(currentDir, "running");
352
+ updateActiveRunIndex(otherDir, "running");
349
353
  const state = {
350
354
  currentSessionId: "session-current",
351
355
  asyncJobs: new Map(),
@@ -384,7 +388,7 @@ describe("async run status inspection", () => {
384
388
  startedAt: 100,
385
389
  lastUpdate: 200,
386
390
  currentStep: 0,
387
- steps: [{ agent: "builder", status: "running", startedAt: 100 }],
391
+ steps: [{ agent: "worker", status: "running", startedAt: 100 }],
388
392
  }, null, 2), "utf-8");
389
393
  const state = {
390
394
  currentSessionId: "session-current",
@@ -421,8 +425,8 @@ describe("async run status inspection", () => {
421
425
  success: true,
422
426
  summary: "AGGREGATE_SENTINEL",
423
427
  results: [
424
- { agent: "builder", output: "first child" },
425
- { agent: "commentator" },
428
+ { agent: "worker", output: "first child" },
429
+ { agent: "reviewer" },
426
430
  ],
427
431
  }, null, 2), "utf-8");
428
432
 
@@ -433,7 +437,7 @@ describe("async run status inspection", () => {
433
437
 
434
438
  const text = textContent(result);
435
439
  assert.equal(result.isError, undefined);
436
- assert.match(text, /Child: 1 \(commentator\)/);
440
+ assert.match(text, /Child: 1 \(reviewer\)/);
437
441
  assert.match(text, /\(no transcript lines available yet\)/);
438
442
  assert.doesNotMatch(text, /AGGREGATE_SENTINEL/);
439
443
  assert.doesNotMatch(text, /first child/);
@@ -457,8 +461,9 @@ describe("async run status inspection", () => {
457
461
  lastUpdate: 200,
458
462
  currentStep: 0,
459
463
  steering: { requested: 2, scheduled: 1, pending: 1, delivered: 2, failed: 0, recovered: 1, lastRequestedAt: 150, lastDeliveredAt: 150, recent: [{ id: "request", requestedAt: 150, message: "guidance", targets: [{ index: 0, state: "recovered", recoveredAt: 180, lateDeliveredAt: 190 }] }] },
460
- steps: [{ agent: "builder", status: "running", startedAt: 100, steering: { requested: 2, scheduled: 1, pending: 1, delivered: 2, failed: 0, recovered: 1, lastRequestedAt: 150, lastDeliveredAt: 150, recent: [{ id: "request", requestedAt: 150, message: "guidance", targets: [{ index: 0, state: "recovered", recoveredAt: 180, lateDeliveredAt: 190 }] }] } }],
464
+ steps: [{ agent: "worker", status: "running", startedAt: 100, steering: { requested: 2, scheduled: 1, pending: 1, delivered: 2, failed: 0, recovered: 1, lastRequestedAt: 150, lastDeliveredAt: 150, recent: [{ id: "request", requestedAt: 150, message: "guidance", targets: [{ index: 0, state: "recovered", recoveredAt: 180, lateDeliveredAt: 190 }] }] } }],
461
465
  }, null, 2), "utf-8");
466
+ updateActiveRunIndex(asyncDir, "running");
462
467
 
463
468
  const exact = inspectSubagentStatus({ id: "run-steered" }, {
464
469
  asyncDirRoot: asyncRoot,
@@ -469,7 +474,7 @@ describe("async run status inspection", () => {
469
474
  const exactText = textContent(exact);
470
475
  assert.equal(exact.isError, undefined);
471
476
  assert.match(exactText, /Steering: 2 requested, 1 scheduled, 1 pending, 2 delivered, 0 failed, 1 recovered, 1 late acknowledged/);
472
- assert.match(exactText, /Step 1: builder running/);
477
+ assert.match(exactText, /Step 1: worker running/);
473
478
 
474
479
  const list = inspectSubagentStatus({}, {
475
480
  asyncDirRoot: asyncRoot,
@@ -513,7 +518,7 @@ describe("async run status inspection", () => {
513
518
  depth: 1,
514
519
  path: [{ runId: "run-nested-root", stepIndex: 0, agent: "orchestrator" }],
515
520
  state: "running",
516
- agent: "commentator",
521
+ agent: "reviewer",
517
522
  currentTool: "read",
518
523
  lastUpdate: 150,
519
524
  },
@@ -529,7 +534,7 @@ describe("async run status inspection", () => {
529
534
  const text = textContent(result);
530
535
  assert.equal(result.isError, undefined);
531
536
  assert.match(text, /Step 1: orchestrator running/);
532
- assert.match(text, /↳ commentator \[nested-status-child\] running \| tool read/);
537
+ assert.match(text, /↳ reviewer \[nested-status-child\] running \| tool read/);
533
538
  assert.match(text, /Status: subagent\(\{ action: "status", id: "nested-status-child" \}\)/);
534
539
  } finally {
535
540
  fs.rmSync(root, { recursive: true, force: true });
@@ -562,7 +567,7 @@ describe("async run status inspection", () => {
562
567
  pid: 54321,
563
568
  startedAt: 150,
564
569
  lastUpdate: 150,
565
- steps: [{ agent: "commentator", status: "running", startedAt: 150 }],
570
+ steps: [{ agent: "reviewer", status: "running", startedAt: 150 }],
566
571
  }, null, 2), "utf-8");
567
572
  writeNestedEvent(route, {
568
573
  type: "subagent.nested.updated",
@@ -578,7 +583,7 @@ describe("async run status inspection", () => {
578
583
  asyncDir: nestedAsyncDir,
579
584
  pid: 54321,
580
585
  state: "running",
581
- agent: "commentator",
586
+ agent: "reviewer",
582
587
  lastUpdate: 150,
583
588
  },
584
589
  });
@@ -592,8 +597,8 @@ describe("async run status inspection", () => {
592
597
 
593
598
  const text = textContent(result);
594
599
  assert.equal(result.isError, undefined);
595
- assert.match(text, /↳ commentator \[nested-stale\] failed/);
596
- assert.match(text, /1\. commentator failed \| error: Async runner process 54321 exited or disappeared/);
600
+ assert.match(text, /↳ reviewer \[nested-stale\] failed/);
601
+ assert.match(text, /1\. reviewer failed \| error: Async runner process 54321 exited or disappeared/);
597
602
  assert.ok(fs.existsSync(path.join(resultsDir, "nested", "run-stale-nested-root", "nested-stale.json")));
598
603
  } finally {
599
604
  fs.rmSync(root, { recursive: true, force: true });
@@ -649,6 +654,7 @@ describe("async run status inspection", () => {
649
654
  lastUpdate: 100,
650
655
  steps: [{ agent: "orchestrator", status: "running", startedAt: 100 }],
651
656
  }, null, 2), "utf-8");
657
+ updateActiveRunIndex(asyncDir, "running");
652
658
 
653
659
  const result = inspectSubagentStatus({}, { asyncDirRoot: asyncRoot, resultsDir, kill: () => true, now: () => 200 });
654
660
 
@@ -782,8 +788,8 @@ describe("async run status inspection", () => {
782
788
  chainStepCount: 3,
783
789
  parallelGroups: [{ start: 1, count: 2, stepIndex: 1 }],
784
790
  steps: [
785
- { agent: "explorer", status: "complete", startedAt: 100 },
786
- { agent: "commentator", status: "running", startedAt: 100 },
791
+ { agent: "scout", status: "complete", startedAt: 100 },
792
+ { agent: "reviewer", status: "running", startedAt: 100 },
787
793
  { agent: "auditor", status: "pending" },
788
794
  { agent: "writer", status: "pending" },
789
795
  ],
@@ -797,8 +803,8 @@ describe("async run status inspection", () => {
797
803
  });
798
804
 
799
805
  const text = textContent(result);
800
- assert.match(text, /Step 1\/3: explorer complete/);
801
- assert.match(text, /Step 2\/3 Agent 1\/2: commentator running/);
806
+ assert.match(text, /Step 1\/3: scout complete/);
807
+ assert.match(text, /Step 2\/3 Agent 1\/2: reviewer running/);
802
808
  assert.match(text, /Step 2\/3 Agent 2\/2: auditor pending/);
803
809
  assert.match(text, /Step 3\/3: writer pending/);
804
810
  } finally {
@@ -819,7 +825,7 @@ describe("async run status inspection", () => {
819
825
  pid: 12345,
820
826
  startedAt: 100,
821
827
  lastUpdate: 100,
822
- steps: [{ agent: "explorer", status: "running", startedAt: 100 }],
828
+ steps: [{ agent: "scout", status: "running", startedAt: 100 }],
823
829
  }, null, 2), "utf-8");
824
830
 
825
831
  const result = inspectSubagentStatus({ id: "run-live" }, {
@@ -830,8 +836,8 @@ describe("async run status inspection", () => {
830
836
  });
831
837
 
832
838
  const text = textContent(result);
833
- assert.match(text, /Step 1: explorer running/);
834
- assert.match(text, /Intercom target: subagent-explorer-run-live-1 \(if registered\)/);
839
+ assert.match(text, /Step 1: scout running/);
840
+ assert.match(text, /Intercom target: subagent-scout-run-live-1 \(if registered\)/);
835
841
  } finally {
836
842
  fs.rmSync(root, { recursive: true, force: true });
837
843
  }
@@ -913,7 +919,7 @@ describe("async run status inspection", () => {
913
919
  fs.writeFileSync(sessionFile, "", "utf-8");
914
920
  fs.writeFileSync(path.join(resultsDir, "run-result-transcript.json"), JSON.stringify({
915
921
  id: "run-result-transcript",
916
- agent: "builder",
922
+ agent: "worker",
917
923
  success: false,
918
924
  state: "failed",
919
925
  sessionFile,
@@ -927,7 +933,7 @@ describe("async run status inspection", () => {
927
933
 
928
934
  const text = textContent(result);
929
935
  assert.equal(result.isError, undefined);
930
- assert.match(text, /Child: 0 \(builder\)/);
936
+ assert.match(text, /Child: 0 \(worker\)/);
931
937
  assert.match(text, /legacy result transcript/);
932
938
  } finally {
933
939
  fs.rmSync(root, { recursive: true, force: true });
@@ -943,7 +949,7 @@ describe("async run status inspection", () => {
943
949
  fs.mkdirSync(resultsDir, { recursive: true });
944
950
  fs.writeFileSync(path.join(resultsDir, "run-result-index-validation.json"), JSON.stringify({
945
951
  id: "run-result-index-validation",
946
- agent: "builder",
952
+ agent: "worker",
947
953
  success: true,
948
954
  summary: "done",
949
955
  }, null, 2), "utf-8");
@@ -971,7 +977,7 @@ describe("async run status inspection", () => {
971
977
  fs.writeFileSync(sessionFile, "", "utf-8");
972
978
  fs.writeFileSync(path.join(resultsDir, "run-stopped-result.json"), JSON.stringify({
973
979
  id: "run-stopped-result",
974
- agent: "builder",
980
+ agent: "worker",
975
981
  success: false,
976
982
  state: "stopped",
977
983
  stopped: true,
@@ -1003,11 +1009,11 @@ describe("async run status inspection", () => {
1003
1009
  fs.mkdirSync(resultsDir, { recursive: true });
1004
1010
  fs.writeFileSync(path.join(resultsDir, "run-signal-result.json"), JSON.stringify({
1005
1011
  id: "run-signal-result",
1006
- agent: "builder",
1012
+ agent: "worker",
1007
1013
  success: false,
1008
1014
  state: "failed",
1009
1015
  summary: "Subagent process terminated by signal SIGTERM.",
1010
- results: [{ agent: "builder", success: false, exitCode: 1, processSignal: "SIGTERM" }],
1016
+ results: [{ agent: "worker", success: false, exitCode: 1, processSignal: "SIGTERM" }],
1011
1017
  }, null, 2), "utf-8");
1012
1018
 
1013
1019
  const result = inspectSubagentStatus({ id: "run-signal-result" }, {
@@ -1035,7 +1041,7 @@ describe("async run status inspection", () => {
1035
1041
  fs.writeFileSync(sessionFile, "", "utf-8");
1036
1042
  fs.writeFileSync(path.join(resultsDir, "run-result-only.json"), JSON.stringify({
1037
1043
  id: "run-result-only",
1038
- agent: "builder",
1044
+ agent: "worker",
1039
1045
  success: false,
1040
1046
  state: "failed",
1041
1047
  sessionFile,