@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
@@ -91,12 +91,13 @@ describe("SELESAI_CODING_AGENT_DIR runtime paths", () => {
91
91
 
92
92
  process.env.SELESAI_CODING_AGENT_DIR = agentDir;
93
93
  const configPath = path.join(agentDir, "extensions", "subagent", "config.json");
94
- writeFile(configPath, JSON.stringify({ asyncByDefault: true, maxSubagentDepth: 3, artifactDir: "session" }));
94
+ writeFile(configPath, JSON.stringify({ asyncByDefault: true, maxSubagentDepth: 3, artifactDir: "session", artifactConfig: { cleanupDays: 9007199254740991 } }));
95
95
 
96
96
  const config = loadConfig();
97
97
  assert.equal(config.asyncByDefault, true);
98
98
  assert.equal(config.maxSubagentDepth, 3);
99
99
  assert.equal(config.artifactDir, "session");
100
+ assert.equal(config.artifactConfig?.cleanupDays, Number.MAX_SAFE_INTEGER);
100
101
  });
101
102
 
102
103
  it("discovers user agents, chains, and settings under the configured agent dir", () => {
@@ -120,7 +121,7 @@ Inspect env.
120
121
  writeFile(settingsPath, JSON.stringify({
121
122
  subagents: {
122
123
  agentOverrides: {
123
- builder: { systemPrompt: "Use env-rooted settings." },
124
+ worker: { systemPrompt: "Use env-rooted settings." },
124
125
  },
125
126
  },
126
127
  }, null, 2));
@@ -132,10 +133,10 @@ Inspect env.
132
133
  assert.ok(discovered.user.find((agent) => agent.name === "env-agent" && agent.filePath === path.join(agentDir, "agents", "env-agent.md")));
133
134
  assert.ok(discovered.chains.find((chain) => chain.name === "env-chain" && chain.filePath === path.join(agentDir, "chains", "env-chain.chain.md")));
134
135
 
135
- const builder = discovered.builtin.find((agent) => agent.name === "builder");
136
- assert.equal(builder?.systemPrompt, "Use env-rooted settings.");
137
- assert.equal(builder?.override?.path, settingsPath);
138
- assert.equal(builder?.override?.scope, "user");
136
+ const worker = discovered.builtin.find((agent) => agent.name === "worker");
137
+ assert.equal(worker?.systemPrompt, "Use env-rooted settings.");
138
+ assert.equal(worker?.override?.path, settingsPath);
139
+ assert.equal(worker?.override?.scope, "user");
139
140
 
140
141
  const createdName = "created-env-agent";
141
142
  const created = handleCreate(
@@ -181,14 +182,14 @@ Package skill content.
181
182
  });
182
183
 
183
184
  it("records private redacted run history and cleans session artifacts under the configured agent dir", () => {
184
- const task = "Inspect customer ACME token=SECRET";
185
+ const task = "PROMPT_AUDIT_SENTINEL_1021 Inspect customer ACME token=SECRET";
185
186
  recordRun("env-agent", task, 0, 42);
186
187
  const historyPath = path.join(agentDir, "run-history.jsonl");
187
188
  assert.equal(fs.existsSync(historyPath), true);
188
189
  assertPrivateHistoryModes(historyPath);
189
190
 
190
191
  const rawHistory = fs.readFileSync(historyPath, "utf-8");
191
- assert.doesNotMatch(rawHistory, /Inspect customer|ACME|SECRET/);
192
+ assert.doesNotMatch(rawHistory, /PROMPT_AUDIT_SENTINEL_1021|Inspect customer|ACME|SECRET/);
192
193
  assert.match(rawHistory, /"task":"\[redacted\]"/);
193
194
  assert.match(rawHistory, /"taskHash":"[a-f0-9]{64}"/);
194
195
 
@@ -204,6 +205,9 @@ Package skill content.
204
205
  fs.utimesSync(artifactPath, oldTime, oldTime);
205
206
 
206
207
  cleanupAllArtifactDirs(0);
208
+ assert.equal(fs.existsSync(artifactPath), true);
209
+
210
+ cleanupAllArtifactDirs(1 / 24 / 60 / 60 / 1000);
207
211
  assert.equal(fs.existsSync(artifactPath), false);
208
212
  });
209
213
 
@@ -225,6 +229,18 @@ Package skill content.
225
229
  assert.throws(() => updateConfig((config) => config), /config\.artifactDir must be "project", "session", or "temp"/);
226
230
  });
227
231
 
232
+ it("loads and validates Fleet keybinding config", () => {
233
+ const configPath = path.join(agentDir, "extensions", "subagent", "config.json");
234
+ writeFile(configPath, JSON.stringify({ fleetKeybindings: { pageUp: ["u"], pageDown: ["d"] } }));
235
+ assert.deepEqual(loadConfig().fleetKeybindings, { pageUp: ["u"], pageDown: ["d"] });
236
+
237
+ writeFile(configPath, JSON.stringify({ fleetKeybindings: { missing: ["m"] } }));
238
+ assert.throws(() => updateConfig((config) => config), /config\.fleetKeybindings\.missing is not a supported Fleet action/);
239
+
240
+ writeFile(configPath, JSON.stringify({ fleetKeybindings: { pageUp: [""] } }));
241
+ assert.throws(() => updateConfig((config) => config), /config\.fleetKeybindings\.pageUp entries must be non-empty strings/);
242
+ });
243
+
228
244
  it("hardens and redacts existing run history while recording", () => {
229
245
  const historyPath = path.join(agentDir, "run-history.jsonl");
230
246
  fs.mkdirSync(agentDir, { recursive: true, mode: 0o755 });
@@ -70,7 +70,7 @@ describe("getPiSpawnCommand", () => {
70
70
  },
71
71
  env: { SELESAI_SUBAGENT_PI_BINARY: " " },
72
72
  });
73
- assert.deepEqual(result, { command: "selesai", args });
73
+ assert.deepEqual(result, { command: "pi", args });
74
74
  });
75
75
 
76
76
  for (const [platform, execPath] of [
@@ -152,7 +152,7 @@ describe("getPiSpawnCommand", () => {
152
152
  });
153
153
  });
154
154
 
155
- it("falls back to plain selesai command on POSIX when CLI script cannot be resolved", () => {
155
+ it("falls back to plain pi command on POSIX when CLI script cannot be resolved", () => {
156
156
  const args = ["--mode", "json", "Task: check output"];
157
157
  const result = getPiSpawnCommand(args, {
158
158
  platform: "darwin",
@@ -163,7 +163,7 @@ describe("getPiSpawnCommand", () => {
163
163
  },
164
164
  env: {},
165
165
  });
166
- assert.deepEqual(result, { command: "selesai", args });
166
+ assert.deepEqual(result, { command: "pi", args });
167
167
  });
168
168
 
169
169
  it("ignores embedded host entry points and resolves the Pi package bin on every platform", () => {
@@ -289,7 +289,7 @@ describe("getPiSpawnCommand", () => {
289
289
  assert.equal(result.args[0], cliPath);
290
290
  });
291
291
 
292
- it("falls back to selesai when Windows CLI script cannot be resolved", () => {
292
+ it("falls back to pi when Windows CLI script cannot be resolved", () => {
293
293
  const deps = makeDeps({
294
294
  platform: "win32",
295
295
  argv1: "/opt/pi/subagent-runner.ts",
@@ -297,7 +297,7 @@ describe("getPiSpawnCommand", () => {
297
297
  });
298
298
  const args = ["-p", "Task: hello"];
299
299
  const result = getPiSpawnCommand(args, deps);
300
- assert.deepEqual(result, { command: "selesai", args });
300
+ assert.deepEqual(result, { command: "pi", args });
301
301
  });
302
302
 
303
303
  it("walks from package main entry to resolve package bin", () => {
@@ -328,7 +328,7 @@ describe("getPiSpawnCommand", () => {
328
328
  platform: "win32",
329
329
  execPath: "/usr/local/bin/node",
330
330
  argv1: "/opt/pi/subagent-runner.ts",
331
- resolvePackageEntry: () => entry,
331
+ resolvePackageJson: () => path.join(packageRoot, "package.json"),
332
332
  env: {},
333
333
  });
334
334
  assert.equal(result.command, "/usr/local/bin/node");
@@ -75,9 +75,9 @@ describe("public launch contract preflight", () => {
75
75
  const cwd = path.join(tempDir, "repo");
76
76
  fs.mkdirSync(cwd, { recursive: true });
77
77
  writeSkill(cwd, "project-skill");
78
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
79
- name: builder
80
- description: Project builder
78
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
79
+ name: worker
80
+ description: Project worker
81
81
  tools:
82
82
  - read
83
83
  - write
@@ -97,7 +97,7 @@ Project prompt.
97
97
  try {
98
98
  const ceiling = resolveSubagentCapabilityCeiling("preflight-session");
99
99
  const result = await resolveSubagentLaunchContract({
100
- agent: "builder",
100
+ agent: "worker",
101
101
  cwd,
102
102
  task: "Inspect the repo",
103
103
  runId: "run-123",
@@ -115,7 +115,7 @@ Project prompt.
115
115
  assert.equal(result.contract.agent.definitionProjectionVersion, 1);
116
116
  assert.match(result.contract.agent.definitionDigest, /^[a-f0-9]{64}$/);
117
117
  assert.match(result.contract.launchContractDigest, /^[a-f0-9]{64}$/);
118
- assert.ok(result.contract.agent.shadowedCandidates.some((candidate) => candidate.name === "builder" && candidate.source === "builtin"));
118
+ assert.ok(result.contract.agent.shadowedCandidates.some((candidate) => candidate.name === "worker" && candidate.source === "builtin"));
119
119
  assert.equal(result.contract.model, "test/primary:high");
120
120
  assert.deepEqual(result.contract.modelCandidates, ["test/primary:high", "test/fallback:high"]);
121
121
  assert.equal(result.contract.thinking, "high");
@@ -133,7 +133,7 @@ Project prompt.
133
133
  assert.notEqual(result.contract.roots.lifecycle?.asyncDir, result.contract.roots.artifactsDir);
134
134
  assert.match(result.contract.digest, /^[a-f0-9]{64}$/);
135
135
  const repeated = await resolveSubagentLaunchContract({
136
- agent: "builder",
136
+ agent: "worker",
137
137
  cwd,
138
138
  task: "Inspect the repo",
139
139
  runId: "run-123",
@@ -156,9 +156,9 @@ Project prompt.
156
156
  it("resolves agent aliases to the canonical launch contract agent", async () => {
157
157
  const cwd = path.join(tempDir, "repo-alias");
158
158
  fs.mkdirSync(cwd, { recursive: true });
159
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
160
- name: builder
161
- description: Project builder
159
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
160
+ name: worker
161
+ description: Project worker
162
162
  aliases: developer, coder
163
163
  ---
164
164
  Project prompt.
@@ -171,22 +171,22 @@ Project prompt.
171
171
  });
172
172
 
173
173
  assert.equal(result.ok, true);
174
- assert.equal(result.contract.agent.name, "builder");
174
+ assert.equal(result.contract.agent.name, "worker");
175
175
  });
176
176
 
177
177
  it("reports alias collisions as ambiguous agents", async () => {
178
178
  const cwd = path.join(tempDir, "repo-alias-collision");
179
179
  fs.mkdirSync(cwd, { recursive: true });
180
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
181
- name: builder
182
- description: Project builder
180
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
181
+ name: worker
182
+ description: Project worker
183
183
  aliases: coder
184
184
  ---
185
185
  Project prompt.
186
186
  `);
187
- writeAgent(path.join(cwd, ".selesai", "agents", "commentator.md"), `---
188
- name: commentator
189
- description: Project commentator
187
+ writeAgent(path.join(cwd, ".selesai", "agents", "reviewer.md"), `---
188
+ name: reviewer
189
+ description: Project reviewer
190
190
  aliases: coder
191
191
  ---
192
192
  Review prompt.
@@ -196,32 +196,32 @@ Review prompt.
196
196
 
197
197
  assert.equal(result.ok, false);
198
198
  assert.equal(result.code, "ambiguous_agent");
199
- assert.match(result.message, /Ambiguous agent alias 'coder': commentator, builder|Ambiguous agent alias 'coder': builder, commentator/);
199
+ assert.match(result.message, /Ambiguous agent alias 'coder': reviewer, worker|Ambiguous agent alias 'coder': worker, reviewer/);
200
200
  });
201
201
 
202
202
  it("changes definition and launch digests when selected agent content changes", async () => {
203
203
  const cwd = path.join(tempDir, "repo");
204
204
  fs.mkdirSync(cwd, { recursive: true });
205
- const agentPath = path.join(cwd, ".selesai", "agents", "builder.md");
205
+ const agentPath = path.join(cwd, ".selesai", "agents", "worker.md");
206
206
  writeAgent(agentPath, `---
207
- name: digest-builder
208
- description: Digest builder
207
+ name: digest-worker
208
+ description: Digest worker
209
209
  tools:
210
210
  - read
211
211
  ---
212
212
  First prompt.
213
213
  `);
214
- const before = await resolveSubagentLaunchContract({ agent: "digest-builder", cwd, runId: "digest-test" });
214
+ const before = await resolveSubagentLaunchContract({ agent: "digest-worker", cwd, runId: "digest-test" });
215
215
  assert.equal(before.ok, true);
216
216
  writeAgent(agentPath, `---
217
- name: digest-builder
218
- description: Digest builder
217
+ name: digest-worker
218
+ description: Digest worker
219
219
  tools:
220
220
  - read
221
221
  ---
222
222
  Changed prompt.
223
223
  `);
224
- const after = await resolveSubagentLaunchContract({ agent: "digest-builder", cwd, runId: "digest-test" });
224
+ const after = await resolveSubagentLaunchContract({ agent: "digest-worker", cwd, runId: "digest-test" });
225
225
  assert.equal(after.ok, true);
226
226
  assert.notEqual(after.contract.agent.definitionDigest, before.contract.agent.definitionDigest);
227
227
  assert.notEqual(after.contract.launchContractDigest, before.contract.launchContractDigest);
@@ -232,9 +232,9 @@ Changed prompt.
232
232
  const cwd = path.join(tempDir, "repo");
233
233
  fs.mkdirSync(cwd, { recursive: true });
234
234
  writeSkill(cwd, "digest-skill");
235
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
236
- name: builder
237
- description: Project builder
235
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
236
+ name: worker
237
+ description: Project worker
238
238
  tools:
239
239
  - read
240
240
  skills:
@@ -242,12 +242,12 @@ skills:
242
242
  ---
243
243
  Project prompt.
244
244
  `);
245
- const before = await resolveSubagentLaunchContract({ agent: "builder", cwd, runId: "skill-digest-test" });
245
+ const before = await resolveSubagentLaunchContract({ agent: "worker", cwd, runId: "skill-digest-test" });
246
246
  assert.equal(before.ok, true);
247
247
  fs.writeFileSync(path.join(cwd, ".selesai", "skills", "digest-skill", "SKILL.md"), "---\ndescription: updated digest-skill\n---\n\nUse digest-skill.\n", "utf-8");
248
248
  clearSkillCache();
249
249
 
250
- const after = await resolveSubagentLaunchContract({ agent: "builder", cwd, runId: "skill-digest-test" });
250
+ const after = await resolveSubagentLaunchContract({ agent: "worker", cwd, runId: "skill-digest-test" });
251
251
  assert.equal(after.ok, true);
252
252
  assert.equal(after.contract.agent.definitionDigest, before.contract.agent.definitionDigest);
253
253
  assert.notEqual(after.contract.launchContractDigest, before.contract.launchContractDigest);
@@ -257,9 +257,9 @@ Project prompt.
257
257
  it("returns closed failures for missing agents and missing skills", async () => {
258
258
  const cwd = path.join(tempDir, "repo");
259
259
  fs.mkdirSync(cwd, { recursive: true });
260
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
261
- name: builder
262
- description: Project builder
260
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
261
+ name: worker
262
+ description: Project worker
263
263
  skills:
264
264
  - missing-skill
265
265
  ---
@@ -269,7 +269,7 @@ Project prompt.
269
269
  const missingAgent = await resolveSubagentLaunchContract({ agent: "missing", cwd });
270
270
  assert.deepEqual(missingAgent, { ok: false, code: "missing_agent", message: "Unknown agent: missing", diagnostics: [] });
271
271
 
272
- const missingSkill = await resolveSubagentLaunchContract({ agent: "builder", cwd });
272
+ const missingSkill = await resolveSubagentLaunchContract({ agent: "worker", cwd });
273
273
  assert.equal(missingSkill.ok, false);
274
274
  assert.equal(missingSkill.code, "missing_skill");
275
275
  assert.match(missingSkill.message, /missing-skill/);
@@ -278,22 +278,22 @@ Project prompt.
278
278
  it("fails closed for invalid runtime inputs", async () => {
279
279
  const cwd = path.join(tempDir, "repo");
280
280
  fs.mkdirSync(cwd, { recursive: true });
281
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
282
- name: builder
283
- description: Project builder
281
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
282
+ name: worker
283
+ description: Project worker
284
284
  ---
285
285
  Project prompt.
286
286
  `);
287
287
 
288
- const invalidCwd = await resolveSubagentLaunchContract({ agent: "builder", cwd: path.join(tempDir, "missing") });
288
+ const invalidCwd = await resolveSubagentLaunchContract({ agent: "worker", cwd: path.join(tempDir, "missing") });
289
289
  assert.equal(invalidCwd.ok, false);
290
290
  assert.equal(invalidCwd.code, "invalid_cwd");
291
291
 
292
- const unsupportedMode = await resolveSubagentLaunchContract({ agent: "builder", cwd, context: "bogus" as never });
292
+ const unsupportedMode = await resolveSubagentLaunchContract({ agent: "worker", cwd, context: "bogus" as never });
293
293
  assert.equal(unsupportedMode.ok, false);
294
294
  assert.equal(unsupportedMode.code, "unsupported_mode");
295
295
 
296
- const invalidArtifactDir = await resolveSubagentLaunchContract({ agent: "builder", cwd, artifactDir: "bogus" as never });
296
+ const invalidArtifactDir = await resolveSubagentLaunchContract({ agent: "worker", cwd, artifactDir: "bogus" as never });
297
297
  assert.equal(invalidArtifactDir.ok, false);
298
298
  assert.equal(invalidArtifactDir.code, "invalid_artifact_dir");
299
299
  });
@@ -345,9 +345,9 @@ Project prompt.
345
345
  const cwd = path.join(tempDir, "repo");
346
346
  fs.mkdirSync(cwd, { recursive: true });
347
347
  writeSkill(cwd, "project-skill");
348
- writeAgent(path.join(cwd, ".selesai", "agents", "builder.md"), `---
349
- name: builder
350
- description: Project builder
348
+ writeAgent(path.join(cwd, ".selesai", "agents", "worker.md"), `---
349
+ name: worker
350
+ description: Project worker
351
351
  tools:
352
352
  - read
353
353
  skills:
@@ -357,7 +357,7 @@ Project prompt.
357
357
  `);
358
358
 
359
359
  const result = await resolveSubagentLaunchContract({
360
- agent: "builder",
360
+ agent: "worker",
361
361
  cwd,
362
362
  capabilityCeiling: { version: 1, allowedTools: [], denyExtensions: false, sources: ["test"] },
363
363
  });
@@ -29,7 +29,7 @@ function chain(name: string, skills: string[]): ChainConfig {
29
29
  description: `${name} chain`,
30
30
  source: "project",
31
31
  filePath: `/tmp/${name}.chain.md`,
32
- steps: [{ agent: "builder", skills }],
32
+ steps: [{ agent: "worker", skills }],
33
33
  };
34
34
  }
35
35
 
@@ -37,9 +37,9 @@ describe("proactive skill subagent recommendations", () => {
37
37
  it("recommends available skills referenced by multiple enabled configs", () => {
38
38
  const recommendations = recommendProactiveSkillSubagents({
39
39
  agents: [
40
- agent("commentator"),
41
- agent("ui-commentator", ["accessibility"]),
42
- agent("disabled-commentator", ["accessibility"], true),
40
+ agent("reviewer"),
41
+ agent("ui-reviewer", ["accessibility"]),
42
+ agent("disabled-reviewer", ["accessibility"], true),
43
43
  ],
44
44
  chains: [chain("ui-check", ["accessibility"]), chain("cleanup", ["deslop"])],
45
45
  availableSkills: [
@@ -50,31 +50,31 @@ describe("proactive skill subagent recommendations", () => {
50
50
 
51
51
  assert.equal(recommendations.length, 1);
52
52
  assert.equal(recommendations[0]?.skill, "accessibility");
53
- assert.equal(recommendations[0]?.agent, "commentator");
53
+ assert.equal(recommendations[0]?.agent, "reviewer");
54
54
  assert.equal(recommendations[0]?.references, 2);
55
- assert.deepEqual(recommendations[0]?.sources, ["agent:ui-commentator", "chain:ui-check"]);
55
+ assert.deepEqual(recommendations[0]?.sources, ["agent:ui-reviewer", "chain:ui-check"]);
56
56
  });
57
57
 
58
58
  it("filters unavailable orchestration skills and honors config bounds", () => {
59
59
  const recommendations = recommendProactiveSkillSubagents({
60
60
  agents: [
61
- agent("explorer", ["pi-subagents", "alpha", "beta"]),
61
+ agent("delegate", ["pi-subagents", "alpha", "beta"]),
62
62
  agent("one", ["alpha", "beta"]),
63
63
  agent("two", ["gamma"]),
64
64
  agent("three", ["gamma"]),
65
65
  ],
66
66
  availableSkills: [{ name: "alpha" }, { name: "beta" }, { name: "gamma" }],
67
- config: { preferredAgent: "explorer", maxRecommendations: 2 },
67
+ config: { preferredAgent: "delegate", maxRecommendations: 2 },
68
68
  });
69
69
 
70
70
  assert.deepEqual(recommendations.map((entry) => entry.skill), ["alpha", "beta"]);
71
- assert.ok(recommendations.every((entry) => entry.agent === "explorer"));
71
+ assert.ok(recommendations.every((entry) => entry.agent === "delegate"));
72
72
  });
73
73
 
74
74
  it("can be disabled and formats guardrails for visible suggestions", () => {
75
75
  assert.equal(resolveProactiveSkillSubagentsConfig(false).enabled, false);
76
76
  assert.deepEqual(recommendProactiveSkillSubagents({
77
- agents: [agent("commentator", ["deslop"]), agent("cleanup", ["deslop"])],
77
+ agents: [agent("reviewer", ["deslop"]), agent("cleanup", ["deslop"])],
78
78
  availableSkills: [{ name: "deslop" }],
79
79
  config: false,
80
80
  }), []);
@@ -82,7 +82,7 @@ describe("proactive skill subagent recommendations", () => {
82
82
  const lines = formatProactiveSkillSubagentRecommendations([
83
83
  {
84
84
  skill: "deslop",
85
- agent: "commentator",
85
+ agent: "reviewer",
86
86
  references: 2,
87
87
  sources: ["agent:a", "chain:b"],
88
88
  reason: "referenced by 2 configured agents/chains",
@@ -95,7 +95,7 @@ describe("proactive skill subagent recommendations", () => {
95
95
  it("does not discover skills when disabled and treats discovery failures as no suggestions", () => {
96
96
  let discoveryCalls = 0;
97
97
  const disabledLines = buildProactiveSkillSubagentRecommendationLines({
98
- agents: [agent("commentator", ["deslop"]), agent("cleanup", ["deslop"])],
98
+ agents: [agent("reviewer", ["deslop"]), agent("cleanup", ["deslop"])],
99
99
  config: false,
100
100
  discoverAvailableSkills: () => {
101
101
  discoveryCalls++;
@@ -106,7 +106,7 @@ describe("proactive skill subagent recommendations", () => {
106
106
  assert.equal(discoveryCalls, 0);
107
107
 
108
108
  const failedDiscoveryLines = buildProactiveSkillSubagentRecommendationLines({
109
- agents: [agent("commentator", ["deslop"]), agent("cleanup", ["deslop"])],
109
+ agents: [agent("reviewer", ["deslop"]), agent("cleanup", ["deslop"])],
110
110
  discoverAvailableSkills: () => {
111
111
  discoveryCalls++;
112
112
  throw new Error("skill scan failed");
@@ -3,6 +3,7 @@ import * as fs from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
5
  import test from "node:test";
6
+ import { ACTIVE_RUN_INDEX_DIR, updateActiveRunIndex } from "../../src/runs/background/active-run-index.ts";
6
7
  import {
7
8
  finalizeProcessTerminal,
8
9
  processTerminalPath,
@@ -27,10 +28,11 @@ test("process-terminal proof requires the matching runner instance and writer cl
27
28
  closeObservedAt: 10,
28
29
  exitCode: 0,
29
30
  signal: null,
31
+ processTree: { state: "observed", mechanism: "posix-process-group", processGroupId: 123, verifiedAt: 11 },
30
32
  }],
31
33
  },
32
34
  });
33
- fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "run-1", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "builder", status: "complete" }] }));
35
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "run-1", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "worker", status: "complete" }] }));
34
36
  fs.writeFileSync(path.join(asyncDir, "events.jsonl"), "");
35
37
 
36
38
  const mismatch = finalizeProcessTerminal(asyncDir, "run-1", {
@@ -67,7 +69,7 @@ test("process-terminal rejects missing writer close evidence", () => {
67
69
  expectedWriters: { "0": 1 },
68
70
  writers: { "0": [] },
69
71
  });
70
- fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "run-missing-writer", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "builder", status: "complete" }] }));
72
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "run-missing-writer", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "worker", status: "complete" }] }));
71
73
  fs.writeFileSync(path.join(asyncDir, "events.jsonl"), "");
72
74
  const proof = finalizeProcessTerminal(asyncDir, "run-missing-writer", {
73
75
  processInstanceId: "runner-missing-writer",
@@ -82,6 +84,57 @@ test("process-terminal rejects missing writer close evidence", () => {
82
84
  }
83
85
  });
84
86
 
87
+ test("process-terminal fails closed when process-tree verification is unknown", () => {
88
+ const asyncDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-process-terminal-"));
89
+ try {
90
+ writeProcessTerminalCandidate(asyncDir, {
91
+ version: 1,
92
+ runId: "run-tree-unknown",
93
+ runnerProcessInstanceId: "runner-tree-unknown",
94
+ expectedWriters: { "0": 1 },
95
+ writers: {
96
+ "0": [{
97
+ processInstanceId: "writer-tree-unknown",
98
+ kind: "pi-writer",
99
+ attempt: 0,
100
+ closeObservedAt: 10,
101
+ exitCode: 1,
102
+ signal: "SIGKILL",
103
+ processTree: { state: "unknown", reason: "verification-failed", diagnostic: "still live" },
104
+ }],
105
+ },
106
+ });
107
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "run-tree-unknown", state: "failed", lifecycleArtifactVersion: 3, steps: [{ agent: "worker", status: "failed" }] }));
108
+ fs.writeFileSync(path.join(asyncDir, "events.jsonl"), "");
109
+ updateActiveRunIndex(asyncDir, "running");
110
+ const markerPath = path.join(path.dirname(asyncDir), ACTIVE_RUN_INDEX_DIR, path.basename(asyncDir));
111
+ const proof = finalizeProcessTerminal(asyncDir, "run-tree-unknown", {
112
+ processInstanceId: "runner-tree-unknown",
113
+ closeObservedAt: 20,
114
+ exitCode: 1,
115
+ signal: null,
116
+ });
117
+ assert.equal(proof.state, "unknown");
118
+ assert.equal(proof.reason, "process-tree-unverified");
119
+ assert.equal(fs.existsSync(markerPath), true);
120
+ fs.rmSync(processTerminalPath(asyncDir), { force: true });
121
+ const candidatePath = path.join(asyncDir, "process-terminal-candidate.json");
122
+ const candidate = JSON.parse(fs.readFileSync(candidatePath, "utf-8"));
123
+ candidate.writers["0"][0].processTree = { state: "observed", mechanism: "posix-process-group", processGroupId: 126, verifiedAt: 21 };
124
+ fs.writeFileSync(candidatePath, JSON.stringify(candidate));
125
+ const observed = finalizeProcessTerminal(asyncDir, "run-tree-unknown", {
126
+ processInstanceId: "runner-tree-unknown",
127
+ closeObservedAt: 30,
128
+ exitCode: 1,
129
+ signal: null,
130
+ });
131
+ assert.equal(observed.state, "observed");
132
+ assert.equal(fs.existsSync(markerPath), false);
133
+ } finally {
134
+ fs.rmSync(asyncDir, { recursive: true, force: true });
135
+ }
136
+ });
137
+
85
138
  test("malformed process-terminal sidecars project unknown instead of throwing", () => {
86
139
  const asyncDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-process-terminal-"));
87
140
  try {
@@ -112,12 +165,12 @@ test("process-terminal preserves stopped non-resumability and requires lease rel
112
165
  runnerProcessInstanceId: "stopped-runner",
113
166
  expectedWriters: { "0": 1 },
114
167
  writers: {
115
- "0": [{ processInstanceId: "stopped-writer", kind: "pi-writer", attempt: 0, closeObservedAt: 10, exitCode: 0, signal: null }],
168
+ "0": [{ processInstanceId: "stopped-writer", kind: "pi-writer", attempt: 0, closeObservedAt: 10, exitCode: 0, signal: null, processTree: { state: "observed", mechanism: "posix-process-group", processGroupId: 124, verifiedAt: 11 } }],
116
169
  },
117
170
  revivalLeaseToken: "lease-token",
118
171
  revivalLeaseReleaseAcknowledged: false,
119
172
  });
120
- fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "stopped-run", state: "stopped", lifecycleArtifactVersion: 3, steps: [{ agent: "builder", status: "stopped" }] }));
173
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "stopped-run", state: "stopped", lifecycleArtifactVersion: 3, steps: [{ agent: "worker", status: "stopped" }] }));
121
174
  fs.writeFileSync(path.join(asyncDir, "events.jsonl"), "");
122
175
  const unverified = finalizeProcessTerminal(asyncDir, "stopped-run", { processInstanceId: "stopped-runner", closeObservedAt: 20, exitCode: 0, signal: null });
123
176
  assert.equal(unverified.state, "unknown");
@@ -161,10 +214,10 @@ test("process-terminal rejects cross-run observed sidecars and inconsistent expe
161
214
  runnerProcessInstanceId: "runner-1",
162
215
  expectedWriters: { "0": 0 },
163
216
  writers: {
164
- "0": [{ processInstanceId: "unexpected-writer", kind: "pi-writer", attempt: 0, closeObservedAt: 10, exitCode: 0, signal: null }],
217
+ "0": [{ processInstanceId: "unexpected-writer", kind: "pi-writer", attempt: 0, closeObservedAt: 10, exitCode: 0, signal: null, processTree: { state: "observed", mechanism: "posix-process-group", processGroupId: 125, verifiedAt: 11 } }],
165
218
  },
166
219
  });
167
- fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "actual-run", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "builder", status: "complete" }] }));
220
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({ runId: "actual-run", state: "complete", lifecycleArtifactVersion: 3, steps: [{ agent: "worker", status: "complete" }] }));
168
221
  fs.writeFileSync(path.join(asyncDir, "events.jsonl"), "");
169
222
  const inconsistent = finalizeProcessTerminal(asyncDir, "actual-run", { processInstanceId: "runner-1", closeObservedAt: 30, exitCode: 0, signal: null });
170
223
  assert.equal(inconsistent.state, "unknown");