@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
@@ -5,6 +5,7 @@ import * as path from "node:path";
5
5
  import { describe, it } from "node:test";
6
6
  import { visibleWidth, type MarkdownTheme } from "@earendil-works/pi-tui";
7
7
  import { collectFleetSnapshot, openSubagentFleet, SubagentFleetComponent } from "../../src/tui/fleet.ts";
8
+ import { persistForegroundRunHistory, restoreForegroundRunHistory } from "../../src/runs/foreground/foreground-history.ts";
8
9
  import { FLEET_STATUS_WIDGET_KEY } from "../../src/tui/fleet-status.ts";
9
10
  import { getArtifactPaths, getArtifactsDir, getProjectArtifactsDir } from "../../src/shared/artifacts.ts";
10
11
  import type { SubagentState } from "../../src/shared/types.ts";
@@ -42,7 +43,7 @@ function writeAsyncRun(root: string, input: {
42
43
  }): string {
43
44
  const asyncDir = path.join(root, input.id);
44
45
  fs.mkdirSync(asyncDir, { recursive: true });
45
- const agents = input.agents ?? ["builder"];
46
+ const agents = input.agents ?? ["worker"];
46
47
  if (input.output !== undefined) fs.writeFileSync(path.join(asyncDir, "output-0.log"), input.output, "utf-8");
47
48
  const transcriptPath = input.transcript ? path.join(asyncDir, "transcript-0.jsonl") : undefined;
48
49
  if (transcriptPath && input.transcript) fs.writeFileSync(transcriptPath, `${input.transcript.map((record) => JSON.stringify(record)).join("\n")}\n`, "utf-8");
@@ -94,7 +95,7 @@ describe("native subagent fleet", () => {
94
95
  it("collects current-session foreground and flattened async children", () => {
95
96
  const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-collect-"));
96
97
  try {
97
- writeAsyncRun(root, { id: "async-current", agents: ["builder", "commentator"], output: "CURRENT OUTPUT" });
98
+ writeAsyncRun(root, { id: "async-current", agents: ["worker", "reviewer"], output: "CURRENT OUTPUT" });
98
99
  writeAsyncRun(root, { id: "async-other", sessionId: "session-other", output: "OTHER OUTPUT" });
99
100
  const state = stateForTest();
100
101
  state.foregroundControls.set("foreground-live", {
@@ -102,7 +103,7 @@ describe("native subagent fleet", () => {
102
103
  mode: "chain",
103
104
  startedAt: 10,
104
105
  updatedAt: 30,
105
- currentAgent: "explorer",
106
+ currentAgent: "scout",
106
107
  currentIndex: 1,
107
108
  });
108
109
  state.foregroundRuns!.set("foreground-recent", {
@@ -111,7 +112,7 @@ describe("native subagent fleet", () => {
111
112
  cwd: root,
112
113
  sessionId: "session-current",
113
114
  updatedAt: 20,
114
- children: [{ agent: "architect", index: 0, status: "completed", finalOutput: "PLAN COMPLETE" }],
115
+ children: [{ agent: "planner", index: 0, status: "completed", finalOutput: "PLAN COMPLETE" }],
115
116
  });
116
117
  state.foregroundRuns!.set("foreground-other", {
117
118
  runId: "foreground-other",
@@ -147,7 +148,7 @@ describe("native subagent fleet", () => {
147
148
  sessionId: "session-current",
148
149
  status: "running",
149
150
  mode: "workflow",
150
- agents: ["builder"],
151
+ agents: ["worker"],
151
152
  startedAt: 100,
152
153
  updatedAt: 200,
153
154
  }]]);
@@ -228,6 +229,54 @@ describe("native subagent fleet", () => {
228
229
  assert.equal(snapshot.items[0]?.agent, "workflow");
229
230
  });
230
231
 
232
+ it("labels workflow-owned foreground children and opens their parent Herdr inspector", async () => {
233
+ const state = stateForTest();
234
+ state.asyncJobs.set("workflow-1", {
235
+ asyncId: "workflow-1",
236
+ asyncDir: "/tmp/workflow-1",
237
+ status: "running",
238
+ mode: "workflow",
239
+ startedAt: 10,
240
+ updatedAt: 20,
241
+ });
242
+ state.foregroundControls.set("child-1", {
243
+ runId: "child-1",
244
+ parentWorkflowRunId: "workflow-1",
245
+ workflowKey: "review",
246
+ mode: "single",
247
+ startedAt: 10,
248
+ updatedAt: 20,
249
+ activeChildren: new Map([[0, { index: 0, agent: "reviewer", startedAt: 10, updatedAt: 20 }]]),
250
+ });
251
+ const snapshot = collectFleetSnapshot(state);
252
+ const child = snapshot.items.find((item) => item.key === "foreground-active:child-1:0");
253
+ assert.equal(child?.kind, "foreground-active");
254
+ const calls: Array<{ runId: string; asyncDir: string; index?: number }> = [];
255
+ const component = new SubagentFleetComponent(
256
+ { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
257
+ theme as never,
258
+ state,
259
+ () => {},
260
+ {
261
+ initialKey: "foreground-active:child-1:0",
262
+ refreshMs: 60_000,
263
+ actions: {
264
+ async steer() { return { text: "unused" }; },
265
+ stop() { return { text: "unused" }; },
266
+ async inspect(input) { calls.push(input); return { text: "Inspector opened." }; },
267
+ },
268
+ },
269
+ );
270
+ try {
271
+ assert.ok(component.render(100).some((line) => line.includes("Workflow child of: workflow-1 (review)")));
272
+ component.handleInput("H");
273
+ await new Promise((resolve) => setImmediate(resolve));
274
+ assert.deepEqual(calls, [{ runId: "workflow-1", asyncDir: "/tmp/workflow-1" }]);
275
+ } finally {
276
+ component.dispose();
277
+ }
278
+ });
279
+
231
280
  it("keeps every active async run ahead of the bounded recent-completion window", () => {
232
281
  const state = stateForTest();
233
282
  for (let index = 0; index < 22; index++) {
@@ -238,7 +287,7 @@ describe("native subagent fleet", () => {
238
287
  sessionId: "session-current",
239
288
  status: "complete",
240
289
  mode: "single",
241
- agents: ["builder"],
290
+ agents: ["worker"],
242
291
  startedAt: index,
243
292
  updatedAt: index,
244
293
  });
@@ -249,7 +298,7 @@ describe("native subagent fleet", () => {
249
298
  sessionId: "session-current",
250
299
  status: "running",
251
300
  mode: "single",
252
- agents: ["explorer"],
301
+ agents: ["scout"],
253
302
  startedAt: 0,
254
303
  updatedAt: 0,
255
304
  });
@@ -261,6 +310,247 @@ describe("native subagent fleet", () => {
261
310
  assert.ok(!snapshot.items.some((item) => item.runId === "terminal-0"));
262
311
  });
263
312
 
313
+ it("accepts default Fleet navigation from Kitty CSI-u input", () => {
314
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-kitty-default-"));
315
+ try {
316
+ writeAsyncRun(root, { id: "newer", lastUpdate: 300 });
317
+ writeAsyncRun(root, { id: "older", lastUpdate: 200 });
318
+ const component = new SubagentFleetComponent(
319
+ { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
320
+ theme as never,
321
+ stateForTest(),
322
+ () => {},
323
+ { asyncDirRoot: root, resultsDir: path.join(root, "results"), refreshMs: 60_000 },
324
+ );
325
+ try {
326
+ const selectedLine = () => component.render(100).find((line) => line.includes("›")) ?? "";
327
+ assert.match(selectedLine(), /newer/);
328
+ component.handleInput("\x1b[106;1u");
329
+ assert.match(selectedLine(), /older/);
330
+ } finally {
331
+ component.dispose();
332
+ }
333
+ } finally {
334
+ fs.rmSync(root, { recursive: true, force: true });
335
+ }
336
+ });
337
+
338
+ it("uses custom Fleet keybindings without applying them inside modal text input", () => {
339
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-custom-keys-"));
340
+ try {
341
+ writeAsyncRun(root, { id: "newer", lastUpdate: 300 });
342
+ writeAsyncRun(root, { id: "older", lastUpdate: 200 });
343
+ const state = stateForTest();
344
+ let closed = false;
345
+ const component = new SubagentFleetComponent(
346
+ { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
347
+ theme as never,
348
+ state,
349
+ () => { closed = true; },
350
+ {
351
+ asyncDirRoot: root,
352
+ resultsDir: path.join(root, "results"),
353
+ refreshMs: 60_000,
354
+ fleetKeybindings: {
355
+ selectDown: ["n"],
356
+ selectUp: ["p"],
357
+ steer: ["m"],
358
+ close: ["z"],
359
+ },
360
+ actions: {
361
+ async steer() { return { text: "unused" }; },
362
+ stop() { return { text: "unused" }; },
363
+ },
364
+ },
365
+ );
366
+ try {
367
+ const selectedLine = () => component.render(100).find((line) => line.includes("›")) ?? "";
368
+ assert.match(selectedLine(), /newer/);
369
+ component.handleInput("j");
370
+ assert.match(selectedLine(), /newer/, "default j should not move when selectDown is overridden");
371
+ component.handleInput("\x1b[110;1u");
372
+ assert.match(selectedLine(), /older/, "custom selectDown should accept Kitty CSI-u input");
373
+ component.handleInput("p");
374
+ assert.match(selectedLine(), /newer/);
375
+ component.handleInput("m");
376
+ component.handleInput("m");
377
+ assert.ok(component.render(100).some((line) => line.includes("Steer message (steer): m")));
378
+ component.handleInput("\x1b");
379
+ component.handleInput("z");
380
+ assert.equal(closed, true);
381
+ } finally {
382
+ component.dispose();
383
+ }
384
+ } finally {
385
+ fs.rmSync(root, { recursive: true, force: true });
386
+ }
387
+ });
388
+
389
+ it("restores current-session completed foreground history from the compact index", () => {
390
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-foreground-history-"));
391
+ try {
392
+ const resultsDir = path.join(root, "results");
393
+ const cwd = path.join(root, "project");
394
+ const artifactsRoot = getProjectArtifactsDir(cwd);
395
+ fs.mkdirSync(artifactsRoot, { recursive: true });
396
+ const outputPath = path.join(artifactsRoot, "outputs", "restored", "output.md");
397
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
398
+ fs.writeFileSync(outputPath, "restored foreground output", "utf-8");
399
+
400
+ const state = stateForTest();
401
+ state.foregroundRuns!.set("restored", {
402
+ runId: "restored",
403
+ mode: "single",
404
+ cwd,
405
+ sessionId: "session-current",
406
+ updatedAt: 200,
407
+ children: [{ agent: "worker", index: 0, status: "completed", finalOutput: "do not persist this when an artifact exists", savedOutputPath: outputPath }],
408
+ });
409
+ state.foregroundRuns!.set("other-session", {
410
+ runId: "other-session",
411
+ mode: "single",
412
+ cwd,
413
+ sessionId: "session-other",
414
+ updatedAt: 300,
415
+ children: [{ agent: "outsider", index: 0, status: "completed", savedOutputPath: outputPath }],
416
+ });
417
+ persistForegroundRunHistory(state, { resultsDir });
418
+
419
+ const restored = stateForTest();
420
+ restored.baseCwd = cwd;
421
+ assert.equal(restoreForegroundRunHistory(restored, { resultsDir }), 1);
422
+ const snapshot = collectFleetSnapshot(restored);
423
+ assert.deepEqual(snapshot.items.map((item) => item.key), ["foreground-recent:restored:0"]);
424
+
425
+ const component = new SubagentFleetComponent(
426
+ { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
427
+ theme as never,
428
+ restored,
429
+ () => {},
430
+ { refreshMs: 60_000 },
431
+ );
432
+ try {
433
+ const lines = component.render(100);
434
+ assert.ok(lines.some((line) => line.includes("restored foreground output")));
435
+ assert.ok(!lines.some((line) => line.includes("do not persist")));
436
+ } finally {
437
+ component.dispose();
438
+ }
439
+ } finally {
440
+ fs.rmSync(root, { recursive: true, force: true });
441
+ }
442
+ });
443
+
444
+ it("does not restore nonterminal foreground history rows", () => {
445
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-foreground-terminal-"));
446
+ try {
447
+ const resultsDir = path.join(root, "results");
448
+ fs.mkdirSync(resultsDir, { recursive: true });
449
+ fs.writeFileSync(path.join(resultsDir, "foreground-history.json"), JSON.stringify({
450
+ version: 1,
451
+ runs: [
452
+ {
453
+ runId: "stale-running",
454
+ mode: "single",
455
+ cwd: root,
456
+ sessionId: "session-current",
457
+ updatedAt: 300,
458
+ children: [{ agent: "worker", index: 0, status: "running", currentTool: "bash" }],
459
+ },
460
+ {
461
+ runId: "terminal",
462
+ mode: "single",
463
+ cwd: root,
464
+ sessionId: "session-current",
465
+ updatedAt: 200,
466
+ children: [{ agent: "reviewer", index: 0, status: "completed", finalOutput: "done" }],
467
+ },
468
+ ],
469
+ }, null, 2), "utf-8");
470
+
471
+ const restored = stateForTest();
472
+ restored.baseCwd = root;
473
+ assert.equal(restoreForegroundRunHistory(restored, { resultsDir }), 1);
474
+ assert.deepEqual([...restored.foregroundRuns!.keys()], ["terminal"]);
475
+ assert.deepEqual(collectFleetSnapshot(restored).items.map((item) => item.key), ["foreground-recent:terminal:0"]);
476
+
477
+ const state = stateForTest();
478
+ state.foregroundRuns!.set("stale-running", {
479
+ runId: "stale-running",
480
+ mode: "single",
481
+ cwd: root,
482
+ sessionId: "session-current",
483
+ updatedAt: 400,
484
+ children: [{ agent: "worker", index: 0, status: "running" as never }],
485
+ });
486
+ persistForegroundRunHistory(state, { resultsDir });
487
+ const persisted = JSON.parse(fs.readFileSync(path.join(resultsDir, "foreground-history.json"), "utf-8")) as { runs: Array<{ runId: string }> };
488
+ assert.deepEqual(persisted.runs.map((run) => run.runId), ["terminal"]);
489
+ } finally {
490
+ fs.rmSync(root, { recursive: true, force: true });
491
+ }
492
+ });
493
+
494
+ it("keeps restored foreground rows when output artifacts are unavailable and bounds history", () => {
495
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-foreground-missing-"));
496
+ try {
497
+ const resultsDir = path.join(root, "results");
498
+ const cwd = path.join(root, "project");
499
+ const artifactsRoot = getProjectArtifactsDir(cwd);
500
+ const state = stateForTest();
501
+ for (let index = 0; index < 3; index++) {
502
+ const outputPath = path.join(artifactsRoot, "outputs", `run-${index}`, "output.md");
503
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
504
+ fs.writeFileSync(outputPath, `output ${index}`, "utf-8");
505
+ state.foregroundRuns!.set(`run-${index}`, {
506
+ runId: `run-${index}`,
507
+ mode: "single",
508
+ cwd,
509
+ sessionId: "session-current",
510
+ updatedAt: index,
511
+ children: [{ agent: "worker", index: 0, status: "completed", savedOutputPath: outputPath }],
512
+ });
513
+ }
514
+ persistForegroundRunHistory(state, { resultsDir, limit: 2 });
515
+ fs.rmSync(path.join(artifactsRoot, "outputs", "run-2", "output.md"), { force: true });
516
+
517
+ const restored = stateForTest();
518
+ restored.baseCwd = cwd;
519
+ assert.equal(restoreForegroundRunHistory(restored, { resultsDir, limit: 2 }), 2);
520
+ assert.deepEqual([...restored.foregroundRuns!.keys()], ["run-2", "run-1"]);
521
+
522
+ const component = new SubagentFleetComponent(
523
+ { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
524
+ theme as never,
525
+ restored,
526
+ () => {},
527
+ { initialKey: "foreground-recent:run-2:0", refreshMs: 60_000 },
528
+ );
529
+ try {
530
+ assert.ok(component.render(100).some((line) => line.includes("output artifact unavailable")));
531
+ } finally {
532
+ component.dispose();
533
+ }
534
+ } finally {
535
+ fs.rmSync(root, { recursive: true, force: true });
536
+ }
537
+ });
538
+
539
+ it("uses the full 85% terminal-height budget for the inspector", () => {
540
+ const component = new SubagentFleetComponent(
541
+ { terminal: { rows: 60, columns: 100 }, requestRender() {} } as never,
542
+ theme as never,
543
+ stateForTest(),
544
+ () => {},
545
+ { refreshMs: 60_000 },
546
+ );
547
+ try {
548
+ assert.equal(component.render(100).length, 51);
549
+ } finally {
550
+ component.dispose();
551
+ }
552
+ });
553
+
264
554
  it("renders selectable transcript detail and completed artifact paths within terminal width", () => {
265
555
  const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-render-"));
266
556
  try {
@@ -280,8 +570,8 @@ describe("native subagent fleet", () => {
280
570
  const lines = component.render(100);
281
571
  assert.ok(lines.some((line) => line.includes("FINAL ASYNC OUTPUT")));
282
572
  assert.ok(lines.some((line) => line.includes("output-0.log")));
283
- assert.ok(lines.some((line) => line.includes("builder") && line.includes("[fork]")));
284
- assert.ok(lines.some((line) => line.includes("builder.jsonl")));
573
+ assert.ok(lines.some((line) => line.includes("worker") && line.includes("[fork]")));
574
+ assert.ok(lines.some((line) => line.includes("worker.jsonl")));
285
575
  for (const line of lines) assert.ok(visibleWidth(line) <= 100, `line exceeded width: ${line}`);
286
576
  tui.terminal.rows = 10;
287
577
  assert.ok(component.render(100).length <= 8, "short-terminal render should fit the overlay's 85% height cap");
@@ -383,7 +673,7 @@ describe("native subagent fleet", () => {
383
673
  mode: "single",
384
674
  startedAt: 100,
385
675
  updatedAt: 200,
386
- steps: [{ agent: "builder", index: 0, status: "running", transcriptPath }],
676
+ steps: [{ agent: "worker", index: 0, status: "running", transcriptPath }],
387
677
  });
388
678
  const component = new SubagentFleetComponent(
389
679
  { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
@@ -463,17 +753,17 @@ describe("native subagent fleet", () => {
463
753
  startedAt: now - 1_000,
464
754
  updatedAt: now,
465
755
  cwd: effectiveCwd,
466
- currentAgent: "commentator",
756
+ currentAgent: "reviewer",
467
757
  currentIndex: 1,
468
758
  description: "Review the active task",
469
759
  activeChildren: new Map([
470
- [0, { index: 0, agent: "builder", description: "Implement the active task", startedAt: now - 900, updatedAt: now - 100, tokens: 120, model: "provider/live-model", thinking: "high" }],
471
- [1, { index: 1, agent: "commentator", description: "Review the active task", startedAt: now - 800, updatedAt: now, tokens: 240 }],
760
+ [0, { index: 0, agent: "worker", description: "Implement the active task", startedAt: now - 900, updatedAt: now - 100, tokens: 120, model: "provider/live-model", thinking: "high" }],
761
+ [1, { index: 1, agent: "reviewer", description: "Review the active task", startedAt: now - 800, updatedAt: now, tokens: 240 }],
472
762
  ]),
473
763
  });
474
764
  const artifactsRoot = getProjectArtifactsDir(effectiveCwd);
475
765
  fs.mkdirSync(artifactsRoot, { recursive: true });
476
- const transcriptPath = getArtifactPaths(artifactsRoot, "foreground-live", "builder", 0).transcriptPath;
766
+ const transcriptPath = getArtifactPaths(artifactsRoot, "foreground-live", "worker", 0).transcriptPath;
477
767
  fs.writeFileSync(transcriptPath, `${JSON.stringify({ recordType: "message", role: "assistant", model: "test-model", text: "**Worker live result**" })}\n`, "utf-8");
478
768
  const component = new SubagentFleetComponent(
479
769
  { terminal: { rows: 28, columns: 90 }, requestRender() {} } as never,
@@ -484,8 +774,8 @@ describe("native subagent fleet", () => {
484
774
  );
485
775
  try {
486
776
  const lines = component.render(90);
487
- assert.ok(lines.some((line) => line.includes("builder")));
488
- assert.ok(lines.some((line) => line.includes("commentator")));
777
+ assert.ok(lines.some((line) => line.includes("worker")));
778
+ assert.ok(lines.some((line) => line.includes("reviewer")));
489
779
  assert.ok(lines.some((line) => line.includes("foreground · live")));
490
780
  assert.ok(lines.some((line) => line.includes("live-model · thinking high")));
491
781
  assert.ok(lines.some((line) => line.includes("Task") && line.includes("Implement the active task")));
@@ -519,9 +809,9 @@ describe("native subagent fleet", () => {
519
809
  const activeId = `${prefix}-active`;
520
810
  const recentId = `${prefix}-recent`;
521
811
  const asyncId = `${prefix}-async`;
522
- transcript(activeId, "builder", 0, `${preference} active foreground transcript`);
523
- const recentTranscript = transcript(recentId, "commentator", 0, `${preference} completed foreground transcript`);
524
- const asyncTranscript = transcript(asyncId, "explorer", 0, `${preference} async transcript`);
812
+ transcript(activeId, "worker", 0, `${preference} active foreground transcript`);
813
+ const recentTranscript = transcript(recentId, "reviewer", 0, `${preference} completed foreground transcript`);
814
+ const asyncTranscript = transcript(asyncId, "scout", 0, `${preference} async transcript`);
525
815
 
526
816
  const state = stateForTest();
527
817
  state.baseCwd = baseCwd;
@@ -533,7 +823,7 @@ describe("native subagent fleet", () => {
533
823
  cwd: baseCwd,
534
824
  startedAt: 100,
535
825
  updatedAt: 300,
536
- currentAgent: "builder",
826
+ currentAgent: "worker",
537
827
  currentIndex: 0,
538
828
  });
539
829
  state.foregroundRuns!.set(recentId, {
@@ -542,7 +832,7 @@ describe("native subagent fleet", () => {
542
832
  cwd: baseCwd,
543
833
  sessionId: "session-current",
544
834
  updatedAt: 200,
545
- children: [{ agent: "commentator", index: 0, status: "completed", transcriptPath: recentTranscript, model: "provider/recent-model", thinking: "xhigh" }],
835
+ children: [{ agent: "reviewer", index: 0, status: "completed", transcriptPath: recentTranscript, model: "provider/recent-model", thinking: "xhigh" }],
546
836
  });
547
837
  state.asyncJobs.set(asyncId, {
548
838
  asyncId,
@@ -553,7 +843,7 @@ describe("native subagent fleet", () => {
553
843
  mode: "single",
554
844
  startedAt: 100,
555
845
  updatedAt: 250,
556
- steps: [{ agent: "explorer", index: 0, status: "complete", transcriptPath: asyncTranscript }],
846
+ steps: [{ agent: "scout", index: 0, status: "complete", transcriptPath: asyncTranscript }],
557
847
  });
558
848
 
559
849
  for (const [initialKey, expected] of [
@@ -588,7 +878,7 @@ describe("native subagent fleet", () => {
588
878
  it("shows disk-only current-session async runs when the overlay opens", async () => {
589
879
  const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-overlay-reconcile-"));
590
880
  try {
591
- writeAsyncRun(root, { id: "disk-only", agents: ["builder"] });
881
+ writeAsyncRun(root, { id: "disk-only", agents: ["worker"] });
592
882
  const state = stateForTest();
593
883
  let rendered = "";
594
884
  const ctx = {
@@ -607,7 +897,7 @@ describe("native subagent fleet", () => {
607
897
  };
608
898
 
609
899
  await openSubagentFleet(ctx as never, state, { asyncDirRoot: root, resultsDir: path.join(root, "results") });
610
- assert.match(rendered, /builder/);
900
+ assert.match(rendered, /worker/);
611
901
  } finally {
612
902
  fs.rmSync(root, { recursive: true, force: true });
613
903
  }
@@ -640,22 +930,22 @@ describe("native subagent fleet", () => {
640
930
 
641
931
  it("focuses the selected child and renders raw foreground model details", () => {
642
932
  const state = stateForTest();
643
- state.foregroundControls.set("run-builder", {
644
- runId: "run-builder",
933
+ state.foregroundControls.set("run-worker", {
934
+ runId: "run-worker",
645
935
  mode: "single",
646
936
  startedAt: 10,
647
937
  updatedAt: 20,
648
- currentAgent: "builder",
938
+ currentAgent: "worker",
649
939
  currentIndex: 0,
650
940
  model: "provider/raw-model",
651
941
  thinking: "medium",
652
942
  });
653
- state.foregroundControls.set("run-commentator", {
654
- runId: "run-commentator",
943
+ state.foregroundControls.set("run-reviewer", {
944
+ runId: "run-reviewer",
655
945
  mode: "single",
656
946
  startedAt: 11,
657
947
  updatedAt: 21,
658
- currentAgent: "commentator",
948
+ currentAgent: "reviewer",
659
949
  currentIndex: 0,
660
950
  });
661
951
  state.foregroundRuns!.set("run-recent", {
@@ -664,19 +954,19 @@ describe("native subagent fleet", () => {
664
954
  cwd: process.cwd(),
665
955
  sessionId: "session-current",
666
956
  updatedAt: 19,
667
- children: [{ agent: "commentator", index: 0, status: "completed", model: "provider/recent-raw-model", thinking: "xhigh" }],
957
+ children: [{ agent: "reviewer", index: 0, status: "completed", model: "provider/recent-raw-model", thinking: "xhigh" }],
668
958
  });
669
959
  const component = new SubagentFleetComponent(
670
960
  { terminal: { rows: 28, columns: 90 }, requestRender() {} } as never,
671
961
  theme as never,
672
962
  state,
673
963
  () => {},
674
- { initialKey: "foreground-active:run-builder:0", refreshMs: 60_000 },
964
+ { initialKey: "foreground-active:run-worker:0", refreshMs: 60_000 },
675
965
  );
676
966
  try {
677
967
  const lines = component.render(90);
678
968
  const selectedLine = lines.find((line) => line.includes("›"));
679
- assert.ok(selectedLine?.includes("builder"), `unexpected selected row: ${selectedLine}`);
969
+ assert.ok(selectedLine?.includes("run-work"), `unexpected selected row: ${selectedLine}`);
680
970
  assert.ok(lines.some((line) => line.includes("Model: raw-model · thinking medium")));
681
971
  } finally {
682
972
  component.dispose();
@@ -699,9 +989,9 @@ describe("native subagent fleet", () => {
699
989
  it("steers the selected async child with an inline message", async () => {
700
990
  const root = fs.mkdtempSync(path.join(os.tmpdir(), "pi-fleet-steer-"));
701
991
  try {
702
- const asyncDir = writeAsyncRun(root, { id: "async-steer", agents: ["builder", "commentator"] });
992
+ const asyncDir = writeAsyncRun(root, { id: "async-steer", agents: ["worker", "reviewer"] });
703
993
  const state = stateForTest();
704
- const calls: Array<{ runId: string; asyncDir: string; index?: number; message: string }> = [];
994
+ const calls: Array<{ runId: string; asyncDir: string; index?: number; message: string; mode: string }> = [];
705
995
  const component = new SubagentFleetComponent(
706
996
  { terminal: { rows: 28, columns: 100 }, requestRender() {} } as never,
707
997
  theme as never,
@@ -725,11 +1015,13 @@ describe("native subagent fleet", () => {
725
1015
  );
726
1016
  try {
727
1017
  component.handleInput("s");
728
- assert.ok(component.render(100).some((line) => line.includes("Steer message:")));
1018
+ assert.ok(component.render(100).some((line) => line.includes("Steer message (steer):")));
1019
+ component.handleInput("\t");
1020
+ assert.ok(component.render(100).some((line) => line.includes("Steer message (follow_up):")));
729
1021
  for (const char of "please continue") component.handleInput(char);
730
1022
  component.handleInput("\r");
731
1023
  await new Promise((resolve) => setImmediate(resolve));
732
- assert.deepEqual(calls, [{ runId: "async-steer", asyncDir, index: 0, message: "please continue" }]);
1024
+ assert.deepEqual(calls, [{ runId: "async-steer", asyncDir, index: 0, message: "please continue", mode: "follow_up" }]);
733
1025
  assert.ok(component.render(100).some((line) => line.includes("Steering queued.")));
734
1026
  } finally {
735
1027
  component.dispose();
@@ -42,21 +42,21 @@ describe("foreground child control", () => {
42
42
  let firstDetaches = 0;
43
43
  beginForegroundChild(control, {
44
44
  index: 0,
45
- agent: "commentator",
45
+ agent: "reviewer",
46
46
  description: "Review correctness",
47
47
  interrupt: () => { firstInterrupts++; return true; },
48
48
  detach: () => { firstDetaches++; return true; },
49
49
  });
50
50
  beginForegroundChild(control, {
51
51
  index: 1,
52
- agent: "commentator",
52
+ agent: "reviewer",
53
53
  description: "Review quality",
54
54
  interrupt: () => { secondInterrupts++; return true; },
55
55
  });
56
56
 
57
57
  assert.equal(control.activeChildren?.size, 2);
58
58
  assert.equal(control.currentIndex, 1);
59
- updateForegroundChild(control, 0, progress(0, "commentator", 120));
59
+ updateForegroundChild(control, 0, progress(0, "reviewer", 120));
60
60
  assert.equal(control.currentIndex, 0);
61
61
  assert.equal(control.tokens, 120);
62
62
  assert.equal(control.inputTokens, 100);
@@ -70,7 +70,7 @@ describe("foreground child control", () => {
70
70
  assert.equal(control.detach?.(), true);
71
71
  assert.equal(firstDetaches, 1);
72
72
 
73
- updateForegroundChild(control, 1, progress(1, "commentator", 240));
73
+ updateForegroundChild(control, 1, progress(1, "reviewer", 240));
74
74
  finishForegroundChild(control, 1);
75
75
  assert.equal(control.currentIndex, 0);
76
76
  assert.equal(control.tokens, 120);
@@ -50,6 +50,43 @@ describe("foreground tool-call compaction", () => {
50
50
  assert.equal(result.toolCalls, undefined);
51
51
  });
52
52
 
53
+ it("keeps live tool argument previews on one terminal line", () => {
54
+ const preview = extractToolArgsPreview({
55
+ command: "set +e\r\n\t\x1b[31mrun\x1b[0m \x1b]0;title\x07now\u0000",
56
+ });
57
+
58
+ assert.equal(preview, "set +e run now");
59
+ assert.doesNotMatch(preview, /[\r\n\t\x1b]/);
60
+ });
61
+
62
+ it("keeps completed bash tool-call previews on one terminal line", () => {
63
+ const preview = formatToolCall("bash", { command: "first\n\x1b[32msecond\x1b[0m" });
64
+
65
+ assert.equal(preview, "$ first second");
66
+ assert.doesNotMatch(preview, /[\r\n\t\x1b]/);
67
+ });
68
+
69
+ it("does not split surrogate pairs when truncating previews", () => {
70
+ const preview = extractToolArgsPreview({ command: "😀".repeat(31) });
71
+
72
+ assert.equal(preview, `${"😀".repeat(28)}...`);
73
+ assert.doesNotMatch(preview, /[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/u);
74
+ assert.equal(extractToolArgsPreview({ command: `safe\ud800tail\udc00end` }), "safe tail end");
75
+ });
76
+
77
+ it("normalizes fallback argument keys before display", () => {
78
+ const preview = extractToolArgsPreview({ "bad\r\n\t\x1b[31mkey\x1b[0m\u0000": "value" });
79
+
80
+ assert.equal(preview, "bad key=value");
81
+ assert.doesNotMatch(preview, /[\u0000-\u001f\u007f-\u009f]/);
82
+ });
83
+
84
+ it("discards terminal string payloads while preserving readable suffixes", () => {
85
+ for (const control of ["\x1b]0;title\x07", "\x1bPpayload\x1b\\", "\x9d0;title\x9c"]) {
86
+ assert.equal(extractToolArgsPreview({ command: `before${control}after` }), "before after");
87
+ }
88
+ });
89
+
53
90
  it("formats array-based web search previews clearly", () => {
54
91
  assert.equal(
55
92
  extractToolArgsPreview({