@selesai/code 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -1
  3. package/dist/core/slash-commands.js +1 -0
  4. package/dist/defaults/models.json +41 -55
  5. package/dist/defaults/settings.json +7 -8
  6. package/dist/extensions/handoff-new.ts +1 -1
  7. package/dist/extensions/inline-skills.test.ts +1 -0
  8. package/dist/extensions/inline-skills.ts +1 -1
  9. package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
  10. package/dist/extensions/pi-intercom/README.md +34 -15
  11. package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
  12. package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
  13. package/dist/extensions/pi-intercom/broker/client.ts +78 -150
  14. package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
  15. package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
  16. package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
  17. package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
  18. package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
  19. package/dist/extensions/pi-intercom/config.test.ts +8 -10
  20. package/dist/extensions/pi-intercom/config.ts +3 -3
  21. package/dist/extensions/pi-intercom/index.ts +218 -147
  22. package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
  23. package/dist/extensions/pi-intercom/package.json +3 -2
  24. package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
  25. package/dist/extensions/pi-intercom/project-agent.ts +324 -0
  26. package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
  27. package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
  28. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
  29. package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
  30. package/dist/extensions/pi-intercom/types.ts +3 -1
  31. package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
  32. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
  33. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
  34. package/dist/extensions/pi-powerline-footer/README.md +20 -37
  35. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
  36. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
  37. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
  38. package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
  39. package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
  40. package/dist/extensions/pi-powerline-footer/index.ts +394 -317
  41. package/dist/extensions/pi-powerline-footer/package.json +1 -1
  42. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
  43. package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
  44. package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
  45. package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
  46. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
  47. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
  48. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
  49. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
  50. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
  51. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
  52. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
  53. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
  54. package/dist/extensions/pi-powerline-footer/types.ts +1 -2
  55. package/dist/extensions/pi-subagents/CHANGELOG.md +225 -14
  56. package/dist/extensions/pi-subagents/README.md +66 -1613
  57. package/dist/extensions/pi-subagents/agents/builder.md +0 -1
  58. package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
  59. package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
  60. package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
  61. package/dist/extensions/pi-subagents/agents/scout.md +50 -0
  62. package/dist/extensions/pi-subagents/agents/worker.md +58 -0
  63. package/dist/extensions/pi-subagents/docs/configuration.md +372 -0
  64. package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
  65. package/dist/extensions/pi-subagents/docs/missions.md +119 -0
  66. package/dist/extensions/pi-subagents/docs/models.md +192 -0
  67. package/dist/extensions/pi-subagents/docs/observability.md +174 -0
  68. package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
  69. package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
  70. package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
  71. package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
  72. package/dist/extensions/pi-subagents/package-lock.json +152 -194
  73. package/dist/extensions/pi-subagents/package.json +9 -10
  74. package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
  75. package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
  76. package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
  77. package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
  78. package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
  79. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
  80. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
  81. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
  82. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
  83. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
  84. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
  85. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
  86. package/dist/extensions/pi-subagents/src/agents/agents.ts +38 -19
  87. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
  88. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
  89. package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
  90. package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
  91. package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
  92. package/dist/extensions/pi-subagents/src/extension/config.ts +62 -8
  93. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
  94. package/dist/extensions/pi-subagents/src/extension/doctor.ts +40 -0
  95. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
  96. package/dist/extensions/pi-subagents/src/extension/index.ts +140 -50
  97. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +77 -0
  98. package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -24
  99. package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
  100. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
  101. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
  102. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
  103. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
  104. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +4 -1
  105. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
  106. package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
  107. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
  108. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -17
  109. package/dist/extensions/pi-subagents/src/missions/store.ts +151 -9
  110. package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
  111. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +260 -0
  112. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
  113. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +374 -0
  114. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +46 -0
  115. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +158 -36
  116. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
  117. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +26 -4
  118. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -6
  119. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +33 -15
  120. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
  121. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
  122. package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +17 -3
  124. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
  125. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
  127. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
  128. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +26 -3
  129. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
  130. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
  131. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
  132. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +233 -101
  133. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
  134. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
  135. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
  136. package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
  137. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
  138. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
  139. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +40 -2
  140. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +188 -46
  141. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +12 -0
  142. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
  143. package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +171 -0
  144. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1365 -252
  145. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
  146. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +178 -26
  147. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  148. package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +286 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +32 -5
  151. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
  152. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +509 -117
  154. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
  155. package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
  156. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +4 -2
  157. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
  158. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -5
  159. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +20 -8
  160. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
  161. package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
  162. package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
  163. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
  164. package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
  165. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
  166. package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
  167. package/dist/extensions/pi-subagents/src/shared/types.ts +192 -3
  168. package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
  169. package/dist/extensions/pi-subagents/src/shared/utils.ts +46 -34
  170. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
  171. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
  172. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
  173. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
  174. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
  175. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
  176. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
  177. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +37 -21
  178. package/dist/extensions/pi-subagents/src/tui/fleet.ts +375 -42
  179. package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
  180. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
  181. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
  182. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
  183. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +332 -27
  184. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
  185. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  186. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  187. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  188. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  189. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  190. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  191. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  192. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  193. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  194. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  195. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  196. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  197. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  198. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  199. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  200. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
  362. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +102 -15
  363. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +507 -306
  364. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
  365. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +124 -58
  366. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
  367. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +167 -113
  368. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
  369. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
  370. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +139 -58
  371. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +324 -59
  372. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +98 -22
  373. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
  374. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
  375. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
  376. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1122 -96
  377. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
  378. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  379. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
  380. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  381. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  382. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
  383. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
  384. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +194 -59
  385. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +317 -0
  386. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
  387. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
  388. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
  389. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
  390. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  391. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +118 -99
  392. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
  393. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  394. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
  395. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
  396. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
  397. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
  398. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +18 -3
  399. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +99 -40
  400. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
  401. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
  402. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
  403. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +94 -23
  404. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  405. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  406. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  407. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
  408. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  409. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +70 -52
  410. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
  411. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
  412. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
  413. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
  414. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
  415. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +30 -2
  416. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  417. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  418. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
  419. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +91 -47
  420. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +468 -38
  421. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +14 -4
  422. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
  423. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
  424. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
  425. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
  426. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
  427. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +7 -6
  428. package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +171 -0
  429. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
  430. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +81 -7
  431. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
  432. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +42 -1
  433. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
  434. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
  435. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
  436. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
  437. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
  438. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
  439. package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +69 -0
  440. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
  441. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
  442. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  443. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  444. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
  445. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
  446. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +440 -92
  447. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +24 -8
  448. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
  449. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
  450. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  451. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +59 -6
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
  455. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
  456. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +51 -0
  457. package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
  458. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
  459. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
  460. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
  461. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +111 -31
  462. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +121 -0
  463. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  464. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +65 -50
  465. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
  466. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  467. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +60 -44
  468. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
  469. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +28 -0
  470. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
  471. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
  472. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  473. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +130 -92
  474. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  475. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
  476. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  477. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
  478. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
  479. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
  480. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +65 -26
  481. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +138 -0
  482. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
  483. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
  484. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
  485. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  486. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  487. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  488. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  489. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
  490. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
  491. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  492. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
  493. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +68 -7
  494. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
  495. package/dist/extensions/workflow/extension.ts +21 -19
  496. package/dist/extensions/workflow/modes.ts +65 -0
  497. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  498. package/dist/modes/interactive/interactive-mode.js +48 -1
  499. package/dist/skills/pi-subagents/SKILL.md +20 -15
  500. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
  501. package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
  502. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
  503. package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
  504. package/docs/plans/workflow-autoloop-reference.md +192 -0
  505. package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
  506. package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
  507. package/docs/quickstart.md +27 -43
  508. package/docs/settings.md +4 -0
  509. package/docs/usage.md +1 -0
  510. package/package.json +2 -1
  511. package/dist/extensions/workflow/adapter.ts +0 -949
  512. package/dist/extensions/workflow/modes/loop.ts +0 -74
  513. package/dist/extensions/workflow/modes/prototype.ts +0 -170
  514. package/dist/extensions/workflow/modes/quicktype.ts +0 -150
  515. package/dist/extensions/workflow/modes/task.ts +0 -105
  516. package/dist/extensions/workflow/run-state.ts +0 -124
  517. package/dist/extensions/workflow/state-machine.ts +0 -484
  518. package/dist/extensions/workflow/validators.ts +0 -42
@@ -16,7 +16,7 @@ const outputs: ChainOutputMap = {
16
16
  targets: {
17
17
  text: "{\"items\":[{\"path\":\"src/a.ts\"},{\"path\":\"src/b.ts\"}]}",
18
18
  structured: { items: [{ path: "src/a.ts" }, { path: "src/b.ts" }] },
19
- agent: "explorer",
19
+ agent: "scout",
20
20
  stepIndex: 0,
21
21
  },
22
22
  };
@@ -26,7 +26,7 @@ describe("dynamic fanout helpers", () => {
26
26
  assert.deepEqual(resolveJsonPointer({ items: [1, 2] }, "/items/1", "path"), 2);
27
27
  const step: ChainStep = {
28
28
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
29
- parallel: { agent: "commentator", task: "Review {target.path}", label: "Review {target.path}" },
29
+ parallel: { agent: "reviewer", task: "Review {target.path}", label: "Review {target.path}" },
30
30
  collect: { as: "reviews" },
31
31
  };
32
32
  const materialized = materializeDynamicParallelStep(step, outputs, 1);
@@ -38,7 +38,7 @@ describe("dynamic fanout helpers", () => {
38
38
  it("rejects missing structured sources, over-limit arrays, duplicate keys, colliding ids, and bad templates", () => {
39
39
  const base: ChainStep = {
40
40
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path", maxItems: 4 },
41
- parallel: { agent: "commentator", task: "Review {target.path}" },
41
+ parallel: { agent: "reviewer", task: "Review {target.path}" },
42
42
  collect: { as: "reviews" },
43
43
  };
44
44
  assert.throws(
@@ -46,7 +46,7 @@ describe("dynamic fanout helpers", () => {
46
46
  /exceeding maxItems/,
47
47
  );
48
48
  assert.throws(
49
- () => materializeDynamicParallelStep(base, { targets: { text: "plain", agent: "explorer", stepIndex: 0 } }, 1),
49
+ () => materializeDynamicParallelStep(base, { targets: { text: "plain", agent: "scout", stepIndex: 0 } }, 1),
50
50
  /requires structured output/,
51
51
  );
52
52
  assert.throws(
@@ -58,15 +58,15 @@ describe("dynamic fanout helpers", () => {
58
58
  /colliding item id/,
59
59
  );
60
60
  assert.throws(
61
- () => materializeDynamicParallelStep({ ...base, parallel: { agent: "commentator", task: "Review {other.path}" } }, outputs, 1),
61
+ () => materializeDynamicParallelStep({ ...base, parallel: { agent: "reviewer", task: "Review {other.path}" } }, outputs, 1),
62
62
  /Unsupported template reference/,
63
63
  );
64
64
  assert.throws(
65
- () => materializeDynamicParallelStep({ ...base, parallel: { agent: "commentator", task: "Review {target[path]}" } }, outputs, 1),
65
+ () => materializeDynamicParallelStep({ ...base, parallel: { agent: "reviewer", task: "Review {target[path]}" } }, outputs, 1),
66
66
  /Invalid item reference/,
67
67
  );
68
68
  assert.throws(
69
- () => materializeDynamicParallelStep({ ...base, parallel: { agent: "commentator", task: "Review {target.path" } }, outputs, 1),
69
+ () => materializeDynamicParallelStep({ ...base, parallel: { agent: "reviewer", task: "Review {target.path" } }, outputs, 1),
70
70
  /Invalid item reference/,
71
71
  );
72
72
  });
@@ -74,13 +74,13 @@ describe("dynamic fanout helpers", () => {
74
74
  it("allows config maxItems defaults and handles empty arrays deterministically", () => {
75
75
  const base: ChainStep = {
76
76
  expand: { from: { output: "targets", path: "/items" }, item: "target", key: "/path" },
77
- parallel: { agent: "commentator", task: "Review {target.path}" },
77
+ parallel: { agent: "reviewer", task: "Review {target.path}" },
78
78
  collect: { as: "reviews" },
79
79
  };
80
80
  const materialized = materializeDynamicParallelStep(base, outputs, 1, { maxItems: 4 });
81
81
  assert.equal(materialized.parallel.length, 2);
82
82
  assert.doesNotThrow(() => validateChainOutputBindings([
83
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
83
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
84
84
  base,
85
85
  ], { maxItems: 4 }));
86
86
  const empty = materializeDynamicParallelStep(base, { targets: { ...outputs.targets, structured: { items: [] } } }, 1, { maxItems: 4 });
@@ -95,29 +95,29 @@ describe("dynamic fanout helpers", () => {
95
95
  const malformed = [
96
96
  {
97
97
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
98
- parallel: [{ agent: "commentator", task: "Review" }],
98
+ parallel: [{ agent: "reviewer", task: "Review" }],
99
99
  collect: { as: "reviews" },
100
100
  },
101
101
  {
102
102
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
103
- parallel: { agent: "commentator", task: "Review {item.path}" },
103
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
104
104
  },
105
105
  {
106
106
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
107
- parallel: { agent: "commentator", task: "Review {item.path}" },
107
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
108
108
  collect: { as: "reviews" },
109
109
  when: "later",
110
110
  },
111
111
  {
112
112
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
113
- parallel: { agent: "commentator", task: "Review {item.path}", as: "child" },
113
+ parallel: { agent: "reviewer", task: "Review {item.path}", as: "child" },
114
114
  collect: { as: "reviews" },
115
115
  },
116
116
  ] as ChainStep[];
117
117
 
118
118
  for (const step of malformed) {
119
119
  assert.throws(
120
- () => validateChainOutputBindings([{ agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } }, step]),
120
+ () => validateChainOutputBindings([{ agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } }, step]),
121
121
  ChainOutputValidationError,
122
122
  );
123
123
  }
@@ -129,7 +129,7 @@ describe("dynamic fanout helpers", () => {
129
129
  // (allowRunnerFields) without leaking into the user-facing dynamic field whitelist.
130
130
  const runnerStep = {
131
131
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
132
- parallel: { agent: "commentator", task: "Review {item.path}", parentSessionId: "session-parent" },
132
+ parallel: { agent: "reviewer", task: "Review {item.path}", parentSessionId: "session-parent" },
133
133
  collect: { as: "reviews" },
134
134
  } as unknown as Parameters<typeof validateDynamicStepShape>[0];
135
135
  assert.doesNotThrow(() => validateDynamicStepShape(runnerStep, 1, { allowRunnerFields: true }));
@@ -142,7 +142,7 @@ describe("dynamic fanout helpers", () => {
142
142
  it("accepts toolBudget on dynamic parallel templates", () => {
143
143
  const step = {
144
144
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
145
- parallel: { agent: "commentator", task: "Review {item.path}", toolBudget: { hard: 3 } },
145
+ parallel: { agent: "reviewer", task: "Review {item.path}", toolBudget: { hard: 3 } },
146
146
  collect: { as: "reviews" },
147
147
  } as unknown as Parameters<typeof validateDynamicStepShape>[0];
148
148
 
@@ -151,10 +151,10 @@ describe("dynamic fanout helpers", () => {
151
151
 
152
152
  it("validates source ordering and collect name collisions", () => {
153
153
  const chain: ChainStep[] = [
154
- { agent: "explorer", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
154
+ { agent: "scout", task: "Return targets", as: "targets", outputSchema: { type: "object" } },
155
155
  {
156
156
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
157
- parallel: { agent: "commentator", task: "Review {item.path}" },
157
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
158
158
  collect: { as: "targets" },
159
159
  },
160
160
  ];
@@ -167,24 +167,24 @@ describe("dynamic fanout helpers", () => {
167
167
 
168
168
  it("validates appended steps against prior and reserved output names", () => {
169
169
  assert.doesNotThrow(() => validateChainOutputBindingsWithContext([
170
- { agent: "builder", task: "Use {outputs.targets}", as: "summary" },
170
+ { agent: "worker", task: "Use {outputs.targets}", as: "summary" },
171
171
  ], {}, { priorOutputNames: ["targets"], startStepIndex: 2 }));
172
172
  assert.throws(
173
173
  () => validateChainOutputBindingsWithContext([
174
- { agent: "builder", task: "Use {outputs.missing}" },
174
+ { agent: "worker", task: "Use {outputs.missing}" },
175
175
  ], {}, { priorOutputNames: ["targets"], startStepIndex: 2 }),
176
176
  /Unknown chain output reference '\{outputs\.missing\}' at step 3/,
177
177
  );
178
178
  assert.throws(
179
179
  () => validateChainOutputBindingsWithContext([
180
- { agent: "builder", task: "Use {previous}", as: "targets" },
180
+ { agent: "worker", task: "Use {previous}", as: "targets" },
181
181
  ], {}, { priorOutputNames: ["targets"], startStepIndex: 2 }),
182
182
  /Duplicate chain output name 'targets'/,
183
183
  );
184
184
  assert.doesNotThrow(() => validateChainOutputBindingsWithContext([
185
185
  {
186
186
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
187
- parallel: { agent: "commentator", task: "Review {item.path}" },
187
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
188
188
  collect: { as: "reviews" },
189
189
  },
190
190
  ], {}, { priorOutputNames: ["targets"], startStepIndex: 2 }));
@@ -193,7 +193,7 @@ describe("dynamic fanout helpers", () => {
193
193
  it("collects ordered child result records and validates aggregate schema", async () => {
194
194
  const step: ChainStep = {
195
195
  expand: { from: { output: "targets", path: "/items" }, key: "/path", maxItems: 4 },
196
- parallel: { agent: "commentator", task: "Review {item.path}" },
196
+ parallel: { agent: "reviewer", task: "Review {item.path}" },
197
197
  collect: { as: "reviews" },
198
198
  };
199
199
  const materialized = materializeDynamicParallelStep(step, outputs, 1);
@@ -207,8 +207,8 @@ describe("dynamic fanout helpers", () => {
207
207
  finalOutput: "ok",
208
208
  structuredOutput,
209
209
  });
210
- const timedOut = { ...result("commentator", { ok: "b" }), exitCode: 1, error: "Subagent timed out after 300ms.", timedOut: true };
211
- const collected = collectDynamicResults(step, materialized.items, [result("commentator", { ok: "a" }), timedOut]);
210
+ const timedOut = { ...result("reviewer", { ok: "b" }), exitCode: 1, error: "Subagent timed out after 300ms.", timedOut: true };
211
+ const collected = collectDynamicResults(step, materialized.items, [result("reviewer", { ok: "a" }), timedOut]);
212
212
  assert.deepEqual(collected.map((item) => item.key), ["src/a.ts", "src/b.ts"]);
213
213
  assert.deepEqual(collected.map((item) => item.structured), [{ ok: "a" }, { ok: "b" }]);
214
214
  assert.equal(collected[1]?.timedOut, true);
@@ -44,16 +44,16 @@ describe("SELESAI_SUBAGENT_EXTRA_AGENT_DIRS discovery", () => {
44
44
 
45
45
  it("discovers agents from the env-provided dirs as a 'user' source", () => {
46
46
  const bundledDir = path.join(tempDir, "store", "agents");
47
- const bundledAgent = writeAgent(bundledDir, "bundled-commentator");
47
+ const bundledAgent = writeAgent(bundledDir, "bundled-reviewer");
48
48
  process.env[EXTRA_AGENT_DIRS_ENV] = bundledDir;
49
49
 
50
50
  const scoped = discoverAgents(cwd, "user");
51
- const found = scoped.agents.find((agent) => agent.name === "bundled-commentator");
51
+ const found = scoped.agents.find((agent) => agent.name === "bundled-reviewer");
52
52
  assert.ok(found, "expected bundled agent under 'user' scope");
53
53
  assert.equal(found?.filePath, bundledAgent);
54
54
 
55
55
  const all = discoverAgentsAll(cwd);
56
- assert.ok(all.user.find((agent) => agent.name === "bundled-commentator" && agent.filePath === bundledAgent));
56
+ assert.ok(all.user.find((agent) => agent.name === "bundled-reviewer" && agent.filePath === bundledAgent));
57
57
  });
58
58
 
59
59
  it("scans every directory listed (PATH-style delimiter)", () => {
@@ -53,6 +53,21 @@ describe("createFileCoalescer", () => {
53
53
  assert.deepEqual(events.sort(), ["a.json", "b.json"]);
54
54
  });
55
55
 
56
+ it("flushes a pending file immediately without a duplicate timer write", () => {
57
+ const events: string[] = [];
58
+ const timers = createFakeTimers();
59
+ const coalescer = createFileCoalescer((file) => events.push(file), 50, timers.timerApi);
60
+ coalescer.schedule("status.json");
61
+ coalescer.schedule("status.json");
62
+ assert.equal(timers.pendingCount(), 1);
63
+ assert.equal(coalescer.flush("status.json"), true);
64
+ assert.deepEqual(events, ["status.json"]);
65
+ assert.equal(timers.pendingCount(), 0);
66
+ timers.runAll();
67
+ assert.deepEqual(events, ["status.json"]);
68
+ assert.equal(coalescer.flush("status.json"), false);
69
+ });
70
+
56
71
  it("clear cancels all pending handlers", () => {
57
72
  const events: string[] = [];
58
73
  const timers = createFakeTimers();
@@ -55,6 +55,7 @@ describe("below-editor subagent FleetView", () => {
55
55
 
56
56
  it("renders main plus active children below the editor and bounds every line", () => {
57
57
  const state = stateForTest();
58
+ state.activeAsyncCapacity = { used: 2, limit: 4 };
58
59
  const now = Date.now();
59
60
  for (let index = 0; index < 7; index++) {
60
61
  state.foregroundControls.set(`run-${index}`, {
@@ -62,7 +63,7 @@ describe("below-editor subagent FleetView", () => {
62
63
  mode: "single",
63
64
  startedAt: now - 11_000 + index,
64
65
  updatedAt: now,
65
- currentAgent: `builder-${index}`,
66
+ currentAgent: `worker-${index}`,
66
67
  description: index === 0 ? "Inspect\nmodule 0" : `Inspect module ${index}`,
67
68
  ...(index === 0 ? { model: "anthropic/fable-5", thinking: "low" } : {}),
68
69
  tokens: index === 0 ? 13_100 : 100,
@@ -98,7 +99,7 @@ describe("below-editor subagent FleetView", () => {
98
99
  const component = widgetFactory!(tui, theme);
99
100
  const compactLines = component.render(80);
100
101
  assert.equal(compactLines.length, 1);
101
- assert.ok(compactLines[0]!.includes("7 active agents"));
102
+ assert.ok(compactLines[0]!.includes("7 active agents · Async runs 2/4"));
102
103
  assert.ok(compactLines[0]!.includes("↓ 13.7k tokens"));
103
104
  assert.ok(compactLines[0]!.includes("↓/← to inspect"));
104
105
  assert.ok(visibleWidth(compactLines[0]!) <= 80);
@@ -106,9 +107,9 @@ describe("below-editor subagent FleetView", () => {
106
107
  assert.deepEqual(fleet.handleKey("\x1b[B"), { consume: true });
107
108
  const expandedLines = component.render(80);
108
109
  assert.ok(expandedLines.some((line) => line.includes("> main")));
109
- assert.ok(expandedLines.some((line) => line.includes(" builder-0")), "unselected agents use blank focus space");
110
+ assert.ok(expandedLines.some((line) => line.includes(" worker-0")), "unselected agents use blank focus space");
110
111
  assert.ok(expandedLines.every((line) => !/[⏺◯]/u.test(line)), "selection avoids terminal-ambiguous circle glyphs");
111
- assert.ok(expandedLines.some((line) => line.includes("builder-0 (fable-5 · thinking low)")));
112
+ assert.ok(expandedLines.some((line) => line.includes("worker-0 (fable-5 · thinking low)")));
112
113
  assert.ok(expandedLines.some((line) => line.includes("11s · ↓ 13.1k tokens")));
113
114
  assert.ok(expandedLines.some((line) => line.includes("↓ 1 more")));
114
115
  for (const line of expandedLines) assert.ok(visibleWidth(line) <= 80, `line exceeded width: ${line}`);
@@ -122,11 +123,36 @@ describe("below-editor subagent FleetView", () => {
122
123
  }
123
124
  });
124
125
 
126
+ it("keeps occupied capacity visible without active child rows", () => {
127
+ const state = stateForTest();
128
+ state.activeAsyncCapacity = { used: 1, limit: 2 };
129
+ let widgetFactory: ((tui: unknown, theme: typeof theme) => { render(width: number): string[] }) | undefined;
130
+ const ctx = {
131
+ hasUI: true,
132
+ ui: {
133
+ setWidget(_key: string, content: typeof widgetFactory | undefined) { if (content) widgetFactory = content; },
134
+ onTerminalInput() { return () => {}; },
135
+ getEditorText() { return ""; },
136
+ requestRender() {},
137
+ notify() {},
138
+ theme,
139
+ },
140
+ } as unknown as ExtensionContext;
141
+ const fleet = new SubagentFleetStatus(state, () => {}, { refreshMs: 60_000 });
142
+ try {
143
+ fleet.setContext(ctx);
144
+ assert.ok(widgetFactory);
145
+ assert.deepEqual(widgetFactory!({ requestRender() {} }, theme).render(80), [" Async runs 1/2 · ↓ 0 tokens · ↓/← to inspect"]);
146
+ } finally {
147
+ fleet.dispose();
148
+ }
149
+ });
150
+
125
151
  it("keeps one queued agent visible in the compact summary", () => {
126
152
  const state = stateForTest();
127
- state.asyncJobs.set("run-builder", {
128
- asyncId: "run-builder",
129
- asyncDir: "/tmp/run-builder",
153
+ state.asyncJobs.set("run-worker", {
154
+ asyncId: "run-worker",
155
+ asyncDir: "/tmp/run-worker",
130
156
  status: "queued",
131
157
  mode: "single",
132
158
  startedAt: 10,
@@ -160,12 +186,12 @@ describe("below-editor subagent FleetView", () => {
160
186
 
161
187
  it("registers above the editor when configured", () => {
162
188
  const state = stateForTest();
163
- state.foregroundControls.set("run-builder", {
164
- runId: "run-builder",
189
+ state.foregroundControls.set("run-worker", {
190
+ runId: "run-worker",
165
191
  mode: "single",
166
192
  startedAt: 10,
167
193
  updatedAt: 20,
168
- currentAgent: "builder",
194
+ currentAgent: "worker",
169
195
  });
170
196
  let placement: string | undefined;
171
197
  const ctx = {
@@ -191,12 +217,12 @@ describe("below-editor subagent FleetView", () => {
191
217
 
192
218
  it("stops refreshing when the captured extension context becomes stale", () => {
193
219
  const state = stateForTest();
194
- state.foregroundControls.set("run-builder", {
195
- runId: "run-builder",
220
+ state.foregroundControls.set("run-worker", {
221
+ runId: "run-worker",
196
222
  mode: "single",
197
223
  startedAt: 10,
198
224
  updatedAt: 20,
199
- currentAgent: "builder",
225
+ currentAgent: "worker",
200
226
  });
201
227
  let stale = false;
202
228
  let contextReads = 0;
@@ -238,12 +264,12 @@ describe("below-editor subagent FleetView", () => {
238
264
 
239
265
  it("does not swallow unrelated widget cleanup errors", () => {
240
266
  const state = stateForTest();
241
- state.foregroundControls.set("run-builder", {
242
- runId: "run-builder",
267
+ state.foregroundControls.set("run-worker", {
268
+ runId: "run-worker",
243
269
  mode: "single",
244
270
  startedAt: 10,
245
271
  updatedAt: 20,
246
- currentAgent: "builder",
272
+ currentAgent: "worker",
247
273
  });
248
274
  const ctx = {
249
275
  hasUI: true,
@@ -264,12 +290,12 @@ describe("below-editor subagent FleetView", () => {
264
290
 
265
291
  it("preserves multiple unrelated UI cleanup errors", () => {
266
292
  const state = stateForTest();
267
- state.foregroundControls.set("run-builder", {
268
- runId: "run-builder",
293
+ state.foregroundControls.set("run-worker", {
294
+ runId: "run-worker",
269
295
  mode: "single",
270
296
  startedAt: 10,
271
297
  updatedAt: 20,
272
- currentAgent: "builder",
298
+ currentAgent: "worker",
273
299
  });
274
300
  const ctx = {
275
301
  hasUI: true,
@@ -297,12 +323,12 @@ describe("below-editor subagent FleetView", () => {
297
323
 
298
324
  it("keeps widget ownership through invalidation so an empty refresh removes it", () => {
299
325
  const state = stateForTest();
300
- state.foregroundControls.set("run-builder", {
301
- runId: "run-builder",
326
+ state.foregroundControls.set("run-worker", {
327
+ runId: "run-worker",
302
328
  mode: "single",
303
329
  startedAt: 10,
304
330
  updatedAt: 20,
305
- currentAgent: "builder",
331
+ currentAgent: "worker",
306
332
  });
307
333
  let widgetFactory: ((tui: unknown, theme: typeof theme) => { render(width: number): string[]; invalidate(): void }) | undefined;
308
334
  let removals = 0;
@@ -335,12 +361,12 @@ describe("below-editor subagent FleetView", () => {
335
361
 
336
362
  it("removes the dynamic widget while the fleet inspector owns the viewport", () => {
337
363
  const state = stateForTest();
338
- state.foregroundControls.set("run-builder", {
339
- runId: "run-builder",
364
+ state.foregroundControls.set("run-worker", {
365
+ runId: "run-worker",
340
366
  mode: "single",
341
367
  startedAt: 10,
342
368
  updatedAt: 20,
343
- currentAgent: "builder",
369
+ currentAgent: "worker",
344
370
  });
345
371
  const registrations: string[] = [];
346
372
  const ctx = {
@@ -500,9 +526,9 @@ describe("below-editor subagent FleetView", () => {
500
526
  startedAt: 50,
501
527
  updatedAt: 200,
502
528
  steps: [
503
- { agent: "explorer", index: 0, status: "complete" },
504
- { agent: "builder", index: 1, status: "running" },
505
- { agent: "commentator", index: 2, status: "pending" },
529
+ { agent: "scout", index: 0, status: "complete" },
530
+ { agent: "worker", index: 1, status: "running" },
531
+ { agent: "reviewer", index: 2, status: "pending" },
506
532
  ],
507
533
  });
508
534
  state.asyncJobs.set("parallel-group", {
@@ -515,7 +541,7 @@ describe("below-editor subagent FleetView", () => {
515
541
  startedAt: 100,
516
542
  updatedAt: 200,
517
543
  steps: [
518
- { agent: "commentator", index: 3, status: "running" },
544
+ { agent: "reviewer", index: 3, status: "running" },
519
545
  { agent: "tester", index: 4, status: "pending" },
520
546
  ],
521
547
  });
@@ -534,9 +560,9 @@ describe("below-editor subagent FleetView", () => {
534
560
  startedAt: 10,
535
561
  updatedAt: 30,
536
562
  activeChildren: new Map([
537
- [0, { index: 0, agent: "commentator", description: "Review correctness", startedAt: 11, updatedAt: 21, tokens: 100 }],
538
- [1, { index: 1, agent: "commentator", description: "Review quality", startedAt: 12, updatedAt: 22, tokens: 200 }],
539
- [2, { index: 2, agent: "commentator", description: "Review tests", startedAt: 13, updatedAt: 23, tokens: 300 }],
563
+ [0, { index: 0, agent: "reviewer", description: "Review correctness", startedAt: 11, updatedAt: 21, tokens: 100 }],
564
+ [1, { index: 1, agent: "reviewer", description: "Review quality", startedAt: 12, updatedAt: 22, tokens: 200 }],
565
+ [2, { index: 2, agent: "reviewer", description: "Review tests", startedAt: 13, updatedAt: 23, tokens: 300 }],
540
566
  ]),
541
567
  });
542
568
 
@@ -550,6 +576,24 @@ describe("below-editor subagent FleetView", () => {
550
576
  assert.deepEqual(collectFleetSnapshot(state).items.map((item) => item.key), entries.map((entry) => entry.key));
551
577
  });
552
578
 
579
+ it("labels workflow-owned foreground children", () => {
580
+ const state = stateForTest();
581
+ state.foregroundControls.set("child-1", {
582
+ runId: "child-1",
583
+ parentWorkflowRunId: "workflow-1",
584
+ workflowKey: "review",
585
+ mode: "single",
586
+ startedAt: 10,
587
+ updatedAt: 20,
588
+ activeChildren: new Map([[0, { index: 0, agent: "reviewer", description: "Review the change", startedAt: 10, updatedAt: 20 }]]),
589
+ });
590
+
591
+ assert.deepEqual(collectFleetStatusEntries(state).map((entry) => ({ agent: entry.agent, description: entry.description })), [{
592
+ agent: "reviewer",
593
+ description: "workflow child: workflow-1 (review) · Review the change",
594
+ }]);
595
+ });
596
+
553
597
  it("uses the same item keys as the full inspector", () => {
554
598
  const state = stateForTest();
555
599
  state.foregroundControls.set("foreground", {
@@ -557,7 +601,7 @@ describe("below-editor subagent FleetView", () => {
557
601
  mode: "single",
558
602
  startedAt: 10,
559
603
  updatedAt: 20,
560
- currentAgent: "builder",
604
+ currentAgent: "worker",
561
605
  currentIndex: 2,
562
606
  });
563
607
  const asyncJob = {
@@ -568,7 +612,7 @@ describe("below-editor subagent FleetView", () => {
568
612
  mode: "single" as const,
569
613
  startedAt: 10,
570
614
  updatedAt: 20,
571
- steps: [{ agent: "commentator", index: 0, status: "running" as const }],
615
+ steps: [{ agent: "reviewer", index: 0, status: "running" as const }],
572
616
  };
573
617
  state.asyncJobs.set(asyncJob.asyncId, asyncJob);
574
618
  state.fleetJobs!.set(asyncJob.asyncId, asyncJob);
@@ -578,7 +622,7 @@ describe("below-editor subagent FleetView", () => {
578
622
  assert.deepEqual(statusKeys, inspectorKeys);
579
623
  });
580
624
 
581
- it("uses tracked async task descriptions and per-child token totals", () => {
625
+ it("hides tracked async task descriptions and shows per-child token totals", () => {
582
626
  const state = stateForTest();
583
627
  state.asyncJobs.set("async-run", {
584
628
  asyncId: "async-run",
@@ -589,8 +633,8 @@ describe("below-editor subagent FleetView", () => {
589
633
  startedAt: 100,
590
634
  updatedAt: 200,
591
635
  steps: [
592
- { agent: "commentator", index: 0, status: "running", description: "Review only authentication", startedAt: 120, model: "openai/gpt-5", thinking: "medium", tokens: { input: 4_000, output: 200, total: 4_200 } },
593
- { agent: "builder", index: 1, status: "running", description: "Implement only billing", startedAt: 121, tokens: { input: 100, output: 20, total: 120 } },
636
+ { agent: "reviewer", index: 0, status: "running", description: "Review only authentication", startedAt: 120, model: "openai/gpt-5", thinking: "medium", tokens: { input: 4_000, output: 200, total: 4_200 } },
637
+ { agent: "worker", index: 1, status: "running", description: "Implement only billing", startedAt: 121, tokens: { input: 100, output: 20, total: 120 } },
594
638
  ],
595
639
  });
596
640
  const fleet = new SubagentFleetStatus(state, () => {}, { refreshMs: 60_000 });
@@ -612,9 +656,9 @@ describe("below-editor subagent FleetView", () => {
612
656
  const component = widgetFactory!(tui, theme);
613
657
  assert.deepEqual(fleet.handleKey("\x1b[B"), { consume: true });
614
658
  const lines = component.render(180);
615
- assert.ok(lines.some((line) => line.includes("commentator (gpt-5 · thinking medium)") && line.includes("Review only authentication")));
616
- assert.ok(lines.some((line) => line.includes("builder") && line.includes("Implement only billing")));
617
- assert.ok(lines.every((line) => !line.includes("Review the authentication changes")), "per-child descriptions should replace the run-level fallback when present");
659
+ assert.ok(lines.some((line) => line.includes("reviewer (gpt-5 · thinking medium)")));
660
+ assert.ok(lines.some((line) => line.includes("worker")));
661
+ assert.ok(lines.every((line) => !line.includes("Review only authentication") && !line.includes("Implement only billing") && !line.includes("Review the authentication changes")));
618
662
  assert.ok(lines.some((line) => line.includes("↓ 4.2k tokens")));
619
663
  } finally {
620
664
  fleet.dispose();
@@ -623,12 +667,12 @@ describe("below-editor subagent FleetView", () => {
623
667
 
624
668
  it("only captures navigation at an empty editor and opens the selected child", async () => {
625
669
  const state = stateForTest();
626
- state.foregroundControls.set("run-builder", {
627
- runId: "run-builder",
670
+ state.foregroundControls.set("run-worker", {
671
+ runId: "run-worker",
628
672
  mode: "single",
629
673
  startedAt: Date.now() - 1_000,
630
674
  updatedAt: Date.now(),
631
- currentAgent: "builder",
675
+ currentAgent: "worker",
632
676
  description: "Implement FleetView",
633
677
  });
634
678
  let editorText = "draft";
@@ -682,16 +726,16 @@ describe("below-editor subagent FleetView", () => {
682
726
  assert.deepEqual(inputHandler!("\x1b[B"), { consume: true }, "custom editors should activate FleetView across jiti boundaries");
683
727
  assert.ok(component.render(100).length > 1, "keyboard activation should expand the roster");
684
728
  assert.deepEqual(inputHandler!("j"), { consume: true }, "active FleetView should navigate down with j");
685
- assert.ok(component.render(100).some((line) => line.includes("> builder")));
729
+ assert.ok(component.render(100).some((line) => line.includes("> worker")));
686
730
  assert.deepEqual(inputHandler!("k"), { consume: true }, "active FleetView should navigate up with k");
687
731
  assert.ok(component.render(100).some((line) => line.includes("> main")));
688
732
 
689
733
  tui.focusedComponent = Object.create(Editor.prototype) as Editor;
690
734
  assert.deepEqual(inputHandler!("\x1b[B"), { consume: true });
691
- assert.ok(component.render(100).some((line) => line.includes("> builder")));
735
+ assert.ok(component.render(100).some((line) => line.includes("> worker")));
692
736
  assert.deepEqual(inputHandler!("\r"), { consume: true });
693
737
  await Promise.resolve();
694
- assert.deepEqual(opened, ["foreground-active:run-builder:0"]);
738
+ assert.deepEqual(opened, ["foreground-active:run-worker:0"]);
695
739
  assert.equal(widgetFactory, undefined, "the widget should unregister while the inspector owns the viewport");
696
740
 
697
741
  closeInspector!();
@@ -699,7 +743,7 @@ describe("below-editor subagent FleetView", () => {
699
743
  assert.ok(widgetFactory, "closing should restore the FleetView widget");
700
744
  assert.notEqual(widgetFactory, component, "restoration should install a new component factory");
701
745
  const restoredComponent = widgetFactory!(tui, theme);
702
- assert.ok(restoredComponent.render(100).some((line) => line.includes("> builder")), "closing should restore the prior selected roster row");
746
+ assert.ok(restoredComponent.render(100).some((line) => line.includes("> worker")), "closing should restore the prior selected roster row");
703
747
  assert.deepEqual(inputHandler!("\x1b"), { consume: true });
704
748
  assert.equal(restoredComponent.render(100).length, 1, "Escape should return to the compact summary");
705
749
  } finally {