@selesai/code 0.9.11 → 0.9.12

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 (580) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/config.d.ts +4 -6
  3. package/dist/config.js +10 -14
  4. package/dist/core/agent-session.d.ts +0 -1
  5. package/dist/core/agent-session.js +3 -49
  6. package/dist/core/extensions/types.d.ts +0 -2
  7. package/dist/core/settings-manager.d.ts +0 -2
  8. package/dist/core/settings-manager.js +0 -3
  9. package/dist/core/tools/index.d.ts +0 -1
  10. package/dist/core/tools/index.js +0 -1
  11. package/dist/defaults/settings.json +0 -1
  12. package/dist/extensions/model-prompt-injector/index.test.ts +0 -10
  13. package/dist/extensions/model-prompt-injector/index.ts +0 -3
  14. package/dist/extensions/pi-intercom/CHANGELOG.md +53 -16
  15. package/dist/extensions/pi-intercom/README.md +41 -8
  16. package/dist/extensions/pi-intercom/banner.png +0 -0
  17. package/dist/extensions/pi-intercom/broker/broker.ts +498 -215
  18. package/dist/extensions/pi-intercom/broker/client.ts +39 -12
  19. package/dist/extensions/pi-intercom/broker/extension.test.ts +102 -3
  20. package/dist/extensions/pi-intercom/broker/paths.test.ts +2 -2
  21. package/dist/extensions/pi-intercom/broker/protocol.ts +26 -0
  22. package/dist/extensions/pi-intercom/broker/spawn.test.ts +5 -20
  23. package/dist/extensions/pi-intercom/config.test.ts +41 -0
  24. package/dist/extensions/pi-intercom/config.ts +21 -0
  25. package/dist/extensions/pi-intercom/extension-api.ts +40 -0
  26. package/dist/extensions/pi-intercom/index.ts +362 -26
  27. package/dist/extensions/pi-intercom/intercom.integration.test.ts +819 -13
  28. package/dist/extensions/pi-intercom/package.json +1 -1
  29. package/dist/extensions/pi-intercom/project-agent.ts +2 -2
  30. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +8 -110
  31. package/dist/extensions/pi-intercom/types.ts +32 -5
  32. package/dist/extensions/pi-intercom/ui/inline-message.ts +6 -0
  33. package/dist/extensions/pi-subagents/.github/assets/subagent-fleet-inspector.png +0 -0
  34. package/dist/extensions/pi-subagents/.github/workflows/release.yml +28 -0
  35. package/dist/extensions/pi-subagents/.github/workflows/test.yml +51 -0
  36. package/dist/extensions/pi-subagents/.greptile/config.json +33 -0
  37. package/dist/extensions/pi-subagents/.greptile/files.json +8 -0
  38. package/dist/extensions/pi-subagents/.greptile/rules.md +16 -0
  39. package/dist/extensions/pi-subagents/CHANGELOG.md +309 -87
  40. package/dist/extensions/pi-subagents/README.md +15 -17
  41. package/dist/extensions/pi-subagents/agents/oracle.md +3 -1
  42. package/dist/extensions/pi-subagents/agents/researcher.md +32 -13
  43. package/dist/extensions/pi-subagents/agents/reviewer.md +13 -2
  44. package/dist/extensions/pi-subagents/agents/scout.md +2 -2
  45. package/dist/extensions/pi-subagents/agents/worker.md +2 -1
  46. package/dist/extensions/pi-subagents/async-retention-discovery-worker.mjs +180 -0
  47. package/dist/extensions/pi-subagents/docs/configuration.md +106 -27
  48. package/dist/extensions/pi-subagents/docs/extension-api.md +85 -21
  49. package/dist/extensions/pi-subagents/docs/missions.md +41 -4
  50. package/dist/extensions/pi-subagents/docs/models.md +52 -9
  51. package/dist/extensions/pi-subagents/docs/observability.md +103 -16
  52. package/dist/extensions/pi-subagents/docs/tool-reference.md +60 -45
  53. package/dist/extensions/pi-subagents/docs/watchdog.md +60 -3
  54. package/dist/extensions/pi-subagents/docs/workflows.md +181 -7
  55. package/dist/extensions/pi-subagents/index.ts +10 -1
  56. package/dist/extensions/pi-subagents/install.mjs +4 -4
  57. package/dist/extensions/pi-subagents/package-lock.json +1483 -1470
  58. package/dist/extensions/pi-subagents/package.json +6 -3
  59. package/dist/extensions/pi-subagents/prompts/council.md +60 -0
  60. package/dist/extensions/pi-subagents/prompts/parallel-review.md +5 -1
  61. package/dist/extensions/pi-subagents/prompts/review-loop.md +9 -5
  62. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +254 -0
  63. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +18 -17
  64. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  65. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +107 -140
  66. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  67. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  68. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +44 -92
  69. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +261 -368
  70. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +6 -2
  71. package/dist/extensions/pi-subagents/src/agents/agents.ts +388 -85
  72. package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +14 -0
  73. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +418 -0
  74. package/dist/extensions/pi-subagents/src/agents/skills.ts +1 -1
  75. package/dist/extensions/pi-subagents/src/api/agents.ts +7 -0
  76. package/dist/extensions/pi-subagents/src/api/external-job-provider.ts +195 -0
  77. package/dist/extensions/pi-subagents/src/api/preflight.ts +88 -27
  78. package/dist/extensions/pi-subagents/src/api/project-panes.ts +2 -0
  79. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
  80. package/dist/extensions/pi-subagents/src/extension/config.ts +20 -11
  81. package/dist/extensions/pi-subagents/src/extension/doctor.ts +14 -6
  82. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -4
  83. package/dist/extensions/pi-subagents/src/extension/index.ts +270 -187
  84. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +65 -28
  85. package/dist/extensions/pi-subagents/src/extension/rpc.ts +120 -11
  86. package/dist/extensions/pi-subagents/src/extension/schemas.ts +46 -64
  87. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +51 -37
  88. package/dist/extensions/pi-subagents/src/extension/tool-result.ts +19 -0
  89. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -2
  90. package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +3 -3
  91. package/dist/extensions/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
  92. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -1
  93. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -46
  94. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +26 -4
  95. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +32 -10
  96. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +6 -1
  97. package/dist/extensions/pi-subagents/src/missions/store.ts +4 -9
  98. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +2 -2
  99. package/dist/extensions/pi-subagents/src/policy/authority.ts +2 -0
  100. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +3 -1
  101. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +31 -8
  102. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +210 -52
  103. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +63 -33
  104. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +71 -17
  105. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +886 -0
  106. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +14 -5
  107. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +49 -56
  108. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +1 -0
  109. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -33
  110. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +5 -0
  111. package/dist/extensions/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
  112. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +22 -12
  113. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +105 -71
  114. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +68 -19
  115. package/dist/extensions/pi-subagents/src/runs/background/index-segment.ts +59 -0
  116. package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
  117. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +94 -10
  118. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +158 -90
  119. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +141 -53
  120. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +8 -5
  121. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +14 -4
  122. package/dist/extensions/pi-subagents/src/runs/background/run-id-query.ts +7 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +13 -14
  124. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +46 -25
  125. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +823 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +9 -3
  127. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +11 -1
  128. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +594 -216
  129. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -13
  130. package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
  131. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +23 -4
  132. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +82 -4
  133. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +5 -3
  134. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +21 -14
  135. package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
  136. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +153 -58
  137. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +7 -9
  138. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1283 -1657
  139. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +274 -0
  140. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
  141. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +59 -10
  142. package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
  143. package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
  144. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +36 -0
  145. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +52 -2
  146. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  147. package/dist/extensions/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
  148. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +2 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
  151. package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
  152. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +14 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +243 -0
  154. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +201 -85
  155. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +106 -39
  156. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +145 -0
  157. package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +150 -27
  158. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +46 -4
  159. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +19 -15
  160. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +5 -1
  161. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +86 -2
  162. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +9 -9
  163. package/dist/extensions/pi-subagents/src/runs/shared/session-lease.ts +0 -6
  164. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +18 -4
  165. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +51 -7
  166. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +62 -21
  167. package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
  168. package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -3
  169. package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +1 -23
  170. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +14 -2
  171. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +2 -2
  172. package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +22 -2
  173. package/dist/extensions/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
  174. package/dist/extensions/pi-subagents/src/shared/completion-owner.ts +14 -0
  175. package/dist/extensions/pi-subagents/src/shared/file-system-retry.ts +49 -1
  176. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +59 -1
  177. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +12 -5
  178. package/dist/extensions/pi-subagents/src/shared/model-info.ts +20 -0
  179. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +0 -40
  180. package/dist/extensions/pi-subagents/src/shared/settings.ts +11 -30
  181. package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
  182. package/dist/extensions/pi-subagents/src/shared/types.ts +228 -49
  183. package/dist/extensions/pi-subagents/src/shared/utils.ts +11 -3
  184. package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +10 -0
  185. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +0 -162
  186. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +2 -5
  187. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +105 -13
  188. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +6 -36
  189. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +829 -0
  190. package/dist/extensions/pi-subagents/src/tui/fleet.ts +1415 -0
  191. package/dist/extensions/pi-subagents/src/tui/render.ts +78 -7
  192. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
  193. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
  194. package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +59 -51
  195. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +8 -2
  196. package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +2 -1
  197. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +4 -4
  198. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +471 -86
  199. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +140 -0
  200. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +1 -1
  377. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +0 -54
  378. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1053 -414
  379. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +194 -4
  380. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +59 -4
  381. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +0 -77
  382. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +107 -6
  383. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +211 -897
  384. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +265 -375
  385. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +77 -7
  386. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +1 -1
  387. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +10 -10
  388. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +547 -30
  389. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +2112 -310
  390. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +274 -34
  391. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +1 -1
  392. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +20 -3
  393. package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +9 -0
  394. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +30 -5
  395. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
  396. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -2
  397. package/dist/extensions/pi-subagents/test/support/register-loader.mjs +1 -0
  398. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +197 -0
  399. package/dist/extensions/pi-subagents/test/unit/agent-contract.test.ts +14 -0
  400. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
  401. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +204 -27
  402. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +444 -145
  403. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +256 -4
  404. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +9 -7
  405. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +152 -22
  406. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +29 -0
  407. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +205 -23
  408. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +579 -0
  409. package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +24 -0
  410. package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +1 -0
  411. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +3 -3
  412. package/dist/extensions/pi-subagents/test/unit/capacity-resilient-json.test.ts +155 -0
  413. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +2 -2
  414. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +7 -0
  415. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +123 -0
  416. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +81 -3
  417. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +109 -7
  418. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
  419. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +5 -2
  420. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +3 -2
  421. package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +79 -0
  422. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +22 -0
  423. package/dist/extensions/pi-subagents/test/unit/external-job-runner.test.ts +961 -0
  424. package/dist/extensions/pi-subagents/test/unit/file-system-retry.test.ts +64 -0
  425. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +1110 -0
  426. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +1664 -0
  427. package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +81 -1
  428. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +138 -11
  429. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +41 -2
  430. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +210 -79
  431. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +95 -0
  432. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +596 -0
  433. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
  434. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +3 -5
  435. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +167 -0
  436. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +319 -18
  437. package/dist/extensions/pi-subagents/test/unit/model-info.test.ts +78 -0
  438. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +19 -5
  439. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +44 -0
  440. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +129 -0
  441. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +231 -2
  442. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +28 -1
  443. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +106 -2
  444. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +204 -7
  445. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +59 -4
  446. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +2 -6
  447. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +34 -2
  448. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -6
  449. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +12 -3
  450. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +56 -61
  451. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +416 -1
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +9 -2
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +42 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +21 -30
  455. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +86 -11
  456. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +49 -1
  457. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +233 -5
  458. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +28 -5
  459. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +323 -20
  460. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +66 -10
  461. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -5
  462. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +174 -0
  463. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +679 -0
  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 +55 -44
  466. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +399 -84
  467. package/dist/extensions/pi-subagents/test/unit/session-lease.test.ts +13 -0
  468. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  469. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +15 -10
  470. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +11 -7
  471. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -0
  472. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +40 -1
  473. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +10 -2
  474. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +38 -3
  475. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +110 -12
  476. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +204 -19
  477. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +25 -0
  478. package/dist/extensions/pi-subagents/test/unit/thinking-ceiling.test.ts +73 -0
  479. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +90 -50
  480. package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +1 -2
  481. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +234 -7
  482. package/dist/extensions/pi-subagents/test/unit/watch-strategy.test.ts +24 -0
  483. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +36 -0
  484. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +37 -9
  485. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +302 -0
  486. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +167 -7
  487. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +113 -0
  488. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +6 -6
  489. package/dist/extensions/ponytail/index.js +31 -25
  490. package/dist/extensions/ponytail/ponytail-config.cjs +34 -7
  491. package/dist/extensions/ponytail/ponytail-instructions.cjs +7 -9
  492. package/dist/extensions/ponytail/test/extension.test.js +7 -8
  493. package/dist/extensions/ponytail/test/helpers.test.js +1 -1
  494. package/dist/skills/brandkit/SKILL.md +799 -0
  495. package/dist/skills/design-taste-frontend/SKILL.md +1207 -0
  496. package/dist/skills/design-taste-frontend-v1/SKILL.md +227 -0
  497. package/dist/skills/full-output-enforcement/SKILL.md +50 -0
  498. package/dist/skills/gpt-taste/SKILL.md +75 -0
  499. package/dist/skills/high-end-visual-design/SKILL.md +99 -0
  500. package/dist/skills/image-to-code/SKILL.md +1229 -0
  501. package/dist/skills/imagegen-frontend-mobile/SKILL.md +1466 -0
  502. package/dist/skills/imagegen-frontend-web/SKILL.md +988 -0
  503. package/dist/skills/industrial-brutalist-ui/SKILL.md +93 -0
  504. package/dist/skills/minimalist-ui/SKILL.md +86 -0
  505. package/dist/skills/pi-subagents/SKILL.md +18 -17
  506. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  507. package/dist/skills/pi-subagents/references/execution-controls.md +95 -143
  508. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  509. package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  510. package/dist/skills/pi-subagents/references/prompting-and-roles.md +45 -94
  511. package/dist/skills/ponytail/SKILL.md +12 -8
  512. package/dist/skills/ponytail-audit/SKILL.md +0 -1
  513. package/dist/skills/ponytail-debt/SKILL.md +0 -1
  514. package/dist/skills/ponytail-gain/SKILL.md +0 -1
  515. package/dist/skills/ponytail-help/SKILL.md +4 -3
  516. package/dist/skills/ponytail-review/SKILL.md +0 -1
  517. package/dist/skills/redesign-existing-projects/SKILL.md +179 -0
  518. package/dist/skills/stitch-design-taste/SKILL.md +185 -0
  519. package/dist/skills/unlazy/CHANGELOG.md +100 -0
  520. package/dist/skills/unlazy/CONTRIBUTING.md +66 -0
  521. package/dist/skills/unlazy/LICENSE +21 -0
  522. package/dist/skills/unlazy/README.md +242 -0
  523. package/dist/skills/unlazy/SECURITY.md +70 -0
  524. package/dist/skills/unlazy/SKILL.md +100 -0
  525. package/dist/skills/unlazy/package.json +13 -0
  526. package/dist/skills/unlazy/references/dispatch.md +82 -0
  527. package/dist/skills/unlazy/references/gates.md +132 -0
  528. package/dist/skills/unlazy/references/method.md +49 -0
  529. package/dist/skills/unlazy/references/orchestration.md +99 -0
  530. package/dist/skills/unlazy/references/parallel.md +123 -0
  531. package/dist/skills/unlazy/references/token-economy.md +39 -0
  532. package/dist/skills/unlazy/research/validation-protocol.md +81 -0
  533. package/dist/skills/unlazy/scripts/dispatch-check.mjs +108 -0
  534. package/dist/skills/unlazy/scripts/gate-check.mjs +894 -0
  535. package/dist/skills/unlazy/scripts/gate-lint.mjs +178 -0
  536. package/dist/skills/unlazy/scripts/install-hooks.mjs +206 -0
  537. package/dist/skills/unlazy/scripts/lib/check-supervisor.mjs +46 -0
  538. package/dist/skills/unlazy/scripts/lib/dispatch.mjs +283 -0
  539. package/dist/skills/unlazy/scripts/lib/gates.mjs +629 -0
  540. package/dist/skills/unlazy/scripts/lib/process-tree.mjs +161 -0
  541. package/dist/skills/unlazy/scripts/lib/regex-worker.mjs +9 -0
  542. package/dist/skills/unlazy/scripts/stop-hook.mjs +174 -0
  543. package/dist/skills/unlazy/templates/PLAN.md +65 -0
  544. package/dist/skills/unlazy/templates/gates-leaf.md +51 -0
  545. package/dist/skills/unlazy/templates/gates-node.md +50 -0
  546. package/dist/skills/unlazy/tests/contract-tests.mjs +127 -0
  547. package/dist/skills/unlazy/tests/dispatch-tests.mjs +481 -0
  548. package/dist/skills/unlazy/tests/hardening-tests.mjs +903 -0
  549. package/dist/skills/unlazy/tests/lint-tests.mjs +242 -0
  550. package/dist/skills/unlazy/tests/run-tests.mjs +554 -0
  551. package/dist/skills/unlazy/tests/self-check.mjs +165 -0
  552. package/dist/skills/unlazy/tests/stress-tests.mjs +356 -0
  553. package/dist/skills/web-design-guidelines/SKILL.md +40 -0
  554. package/docs/settings.md +0 -5
  555. package/package.json +1 -1
  556. package/dist/core/tools/schema-prune.d.ts +0 -16
  557. package/dist/core/tools/schema-prune.js +0 -39
  558. package/dist/core/tools/schema-prune.test.d.ts +0 -1
  559. package/dist/core/tools/schema-prune.test.js +0 -111
  560. package/dist/extensions/pi-subagents/UPSTREAM-V0.50-MAPPING.md +0 -172
  561. package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +0 -55
  562. package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +0 -61
  563. package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +0 -132
  564. package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +0 -181
  565. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
  566. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1581
  567. package/dist/extensions/pi-subagents/src/shared/env.ts +0 -16
  568. package/dist/extensions/pi-subagents/src/shared/session-lineage.ts +0 -71
  569. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +0 -136
  570. package/dist/extensions/pi-subagents/src/workflows/workflow-auto-relaunch.ts +0 -41
  571. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +0 -466
  572. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +0 -1859
  573. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +0 -733
  574. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +0 -63
  575. package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +0 -326
  576. package/dist/extensions/pi-subagents/test/unit/handoff-adoption.test.ts +0 -103
  577. package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +0 -127
  578. package/dist/extensions/pi-subagents/test/unit/session-lineage.test.ts +0 -73
  579. package/dist/extensions/pi-subagents/test/unit/task-aware-routing.test.ts +0 -213
  580. package/dist/extensions/pi-subagents/test/unit/workflow-auto-relaunch.test.ts +0 -65
@@ -5,8 +5,11 @@ import * as path from "node:path";
5
5
  import { beforeEach, describe, it } from "node:test";
6
6
  import { visibleWidth } from "@earendil-works/pi-tui";
7
7
 
8
+ import { registerAgent } from "../../src/api/agents.ts";
9
+ import { clearRuntimeAgentsForPi } from "../../src/agents/runtime-agent-registry.ts";
10
+ import { scheduledRunStorePath } from "../../src/runs/background/scheduled-runs.ts";
8
11
  import { SUBAGENT_FANOUT_CHILD_ENV } from "../../src/runs/shared/pi-args.ts";
9
- import { ASYNC_DIR } from "../../src/shared/types.ts";
12
+ import { ASYNC_DIR, DIRS } from "../../src/shared/types.ts";
10
13
  import type { WatchdogReviewFunction } from "../../src/watchdog/runtime.ts";
11
14
 
12
15
  const SLASH_RESULT_TYPE = "subagent-slash-result";
@@ -19,6 +22,15 @@ interface EventBus {
19
22
  emit(event: string, data: unknown): void;
20
23
  }
21
24
 
25
+ interface RuntimeSlashPi {
26
+ events: EventBus;
27
+ on(event: string, handler: (data: unknown) => void): () => void;
28
+ registerTool(tool: unknown): void;
29
+ registerCommand(name: string, spec: RegisteredSlashCommand): void;
30
+ registerShortcut(key: string, spec: { handler(ctx: unknown): Promise<void> }): void;
31
+ sendMessage(message: unknown): void;
32
+ }
33
+
22
34
  type RegisteredSlashCommand = { handler(args: string, ctx: unknown): Promise<void>; getArgumentCompletions?: (prefix: string) => unknown };
23
35
 
24
36
  interface RegisterSlashCommandsModule {
@@ -116,17 +128,17 @@ function createState(cwd: string) {
116
128
 
117
129
  async function withIsolatedHome<T>(fn: () => Promise<T>): Promise<T> {
118
130
  const home = fs.mkdtempSync(path.join(os.tmpdir(), "pi-slash-home-"));
119
- const previousAgentDir = process.env.PI_CODING_AGENT_DIR;
131
+ const previousAgentDir = process.env.SELESAI_CODING_AGENT_DIR;
120
132
  const previousHome = process.env.HOME;
121
133
  const previousUserProfile = process.env.USERPROFILE;
122
- process.env.PI_CODING_AGENT_DIR = path.join(home, ".selesai", "agent");
134
+ process.env.SELESAI_CODING_AGENT_DIR = path.join(home, ".selesai", "agent");
123
135
  process.env.HOME = home;
124
136
  process.env.USERPROFILE = home;
125
137
  try {
126
138
  return await fn();
127
139
  } finally {
128
- if (previousAgentDir === undefined) delete process.env.PI_CODING_AGENT_DIR;
129
- else process.env.PI_CODING_AGENT_DIR = previousAgentDir;
140
+ if (previousAgentDir === undefined) delete process.env.SELESAI_CODING_AGENT_DIR;
141
+ else process.env.SELESAI_CODING_AGENT_DIR = previousAgentDir;
130
142
  if (previousHome === undefined) delete process.env.HOME;
131
143
  else process.env.HOME = previousHome;
132
144
  if (previousUserProfile === undefined) delete process.env.USERPROFILE;
@@ -219,10 +231,9 @@ async function captureSlashCommandParams(
219
231
  commandName: string,
220
232
  args: string,
221
233
  cwd: string,
222
- setup?: () => void,
234
+ setup?: (pi: RuntimeSlashPi) => void,
223
235
  ): Promise<{ params: unknown; notifications: string[] }> {
224
236
  return withIsolatedHome(async () => {
225
- setup?.();
226
237
  const commands = new Map<string, RegisteredSlashCommand>();
227
238
  const events = createEventBus();
228
239
  let requestedParams: unknown;
@@ -243,7 +254,8 @@ async function captureSlashCommandParams(
243
254
 
244
255
  const pi = {
245
256
  events,
246
- on() {},
257
+ on() { return () => {}; },
258
+ registerTool() {},
247
259
  registerCommand(name: string, spec: RegisteredSlashCommand) {
248
260
  commands.set(name, spec);
249
261
  },
@@ -251,14 +263,19 @@ async function captureSlashCommandParams(
251
263
  sendMessage(_message: unknown) {},
252
264
  };
253
265
 
254
- registerSlashCommands!(pi, createState(cwd));
255
- await commands.get(commandName)!.handler(args, createCommandContext({
256
- cwd,
257
- notify: (message) => {
258
- notifications.push(message);
259
- },
260
- }));
261
- return { params: requestedParams, notifications };
266
+ try {
267
+ setup?.(pi);
268
+ registerSlashCommands!(pi, createState(cwd));
269
+ await commands.get(commandName)!.handler(args, createCommandContext({
270
+ cwd,
271
+ notify: (message) => {
272
+ notifications.push(message);
273
+ },
274
+ }));
275
+ return { params: requestedParams, notifications };
276
+ } finally {
277
+ clearRuntimeAgentsForPi(pi as never);
278
+ }
262
279
  });
263
280
  }
264
281
 
@@ -279,6 +296,35 @@ describe("subagents watchdog slash command", { skip: !available ? "watchdog comm
279
296
  });
280
297
  });
281
298
 
299
+ it("recommends and saves a strong complementary watchdog model", async () => {
300
+ await withIsolatedHome(async () => {
301
+ await withTempProject("pi-watchdog-model-", async (root) => {
302
+ const gpt = { provider: "openai-codex", id: "gpt-5.5", reasoning: true };
303
+ const opus = { provider: "anthropic", id: "claude-opus-4-8", reasoning: true };
304
+ const models = [gpt, opus];
305
+ const modelRegistry = {
306
+ getAvailable: () => models,
307
+ find: (provider: string, id: string) => models.find((entry) => entry.provider === provider && entry.id === id),
308
+ hasConfiguredAuth: (model: unknown) => Boolean(model),
309
+ };
310
+ const ctx = createCommandContext({ cwd: root, model: gpt, modelRegistry });
311
+ const { commands, sent } = createWatchdogHarness();
312
+
313
+ await commands.get("subagents-watchdog")!.handler("recommend-model", ctx);
314
+ await commands.get("subagents-watchdog")!.handler("model recommended", ctx);
315
+
316
+ const recommendation = String((sent[0] as { content?: unknown }).content ?? "");
317
+ assert.match(recommendation, /Recommended: anthropic\/claude-opus-4-8:high/);
318
+ const settingsPath = path.join(process.env.HOME!, ".selesai", "agent", "settings.json");
319
+ const settings = JSON.parse(fs.readFileSync(settingsPath, "utf-8"));
320
+ assert.equal(settings.subagents.watchdog.main.model, "anthropic/claude-opus-4-8");
321
+ assert.equal(settings.subagents.watchdog.main.thinking, "high");
322
+ assert.equal(settings.subagents.watchdog.enabled, undefined);
323
+ assert.match(String((sent[1] as { content?: unknown }).content ?? ""), /Run \/subagents-watchdog on if the watchdog is still off/);
324
+ });
325
+ });
326
+ });
327
+
282
328
  it("supports session-scoped recommended watchdog models without writing settings", async () => {
283
329
  await withIsolatedHome(async () => {
284
330
  await withTempProject("pi-watchdog-session-model-", async (root) => {
@@ -469,8 +515,6 @@ describe("slash command custom message delivery", { skip: !available ? "slash-co
469
515
 
470
516
  registerSlashCommands!({
471
517
  events: createEventBus(),
472
- on() {},
473
- on() {},
474
518
  registerCommand() {},
475
519
  registerShortcut(key: string, spec: { handler(ctx: unknown): Promise<void> }) {
476
520
  shortcuts.set(key, spec);
@@ -488,8 +532,6 @@ describe("slash command custom message delivery", { skip: !available ? "slash-co
488
532
  const shortcuts = new Map<string, unknown>();
489
533
  registerSlashCommands!({
490
534
  events: createEventBus(),
491
- on() {},
492
- on() {},
493
535
  registerCommand() {},
494
536
  registerShortcut(key: string, spec: unknown) { shortcuts.set(key, spec); },
495
537
  sendMessage() {},
@@ -499,11 +541,27 @@ describe("slash command custom message delivery", { skip: !available ? "slash-co
499
541
 
500
542
  it("/subagents-stop keeps the selector within its allocated width", async () => {
501
543
  await withTempProject("pi-stop-selector-width-", async (root) => {
544
+ const id = "scheduled-width-check";
545
+ const nextRunAt = "2099-01-01T00:00:00.000Z";
546
+ const scheduleDir = path.join(scheduledRunStorePath(root), id);
547
+ fs.mkdirSync(scheduleDir, { recursive: true });
548
+ fs.writeFileSync(path.join(scheduleDir, "schedule.json"), JSON.stringify({
549
+ schemaVersion: 1,
550
+ id,
551
+ name: "A very long scheduled run name with wide characters 中文🙂",
552
+ cwd: root,
553
+ trigger: { kind: "once", at: nextRunAt, nextRunAt },
554
+ target: { agent: "scout", task: "Inspect" },
555
+ overlap: "skip",
556
+ catchUp: "latest",
557
+ paused: false,
558
+ createdAt: "2026-08-06T00:00:00.000Z",
559
+ updatedAt: "2026-08-06T00:00:00.000Z",
560
+ }), "utf-8");
502
561
 
503
562
  const commands = new Map<string, RegisteredSlashCommand>();
504
563
  const pi = {
505
564
  events: createEventBus(),
506
- on() {},
507
565
  registerCommand(name: string, spec: RegisteredSlashCommand) { commands.set(name, spec); },
508
566
  registerShortcut() {},
509
567
  sendMessage() {},
@@ -570,7 +628,6 @@ describe("slash command custom message delivery", { skip: !available ? "slash-co
570
628
 
571
629
  const pi = {
572
630
  events,
573
- on() {},
574
631
  registerCommand(name: string, spec: { handler(args: string, ctx: unknown): Promise<void> }) {
575
632
  commands.set(name, spec);
576
633
  },
@@ -589,13 +646,60 @@ describe("slash command custom message delivery", { skip: !available ? "slash-co
589
646
  assert.equal(requestedCtx, ctx);
590
647
  assert.equal(sent.length, 2);
591
648
  assert.equal((sent[0] as { display?: boolean }).display, true);
592
- assert.equal((sent[0] as { content?: string }).content, "Workflow running.");
649
+ assert.equal((sent[0] as { content?: string }).content, "Running subagent...");
593
650
  assert.equal((sent[1] as { display?: boolean }).display, true);
594
651
  assert.match((sent[1] as { content?: string }).content ?? "", /Commit finished/);
595
652
  assert.equal(sessionManager.rewrites, 2);
596
653
  assert.equal(sessionManager.flushed, true);
597
654
  });
598
655
 
656
+ it("/run reports malformed agent configuration", async () => {
657
+ await withTempProject("pi-slash-invalid-agent-", async (root) => {
658
+ fs.writeFileSync(path.join(root, ".selesai", "agents", "broken.md"), "---\nname: broken\ndescription: Broken\nrunner:\n type: unknown\n---\nBroken agent.\n");
659
+
660
+ const run = await captureSlashCommandParams("run", "broken", root);
661
+ assert.equal(run.params, undefined);
662
+ assert.match(run.notifications[0] ?? "", /Agent 'broken' has invalid configuration: Agent 'broken' has invalid runner\.type/);
663
+ });
664
+ });
665
+
666
+ it("/run blocks a malformed project agent from falling back to builtin", async () => {
667
+ await withTempProject("pi-slash-invalid-agent-shadow-", async (root) => {
668
+ fs.writeFileSync(path.join(root, ".selesai", "agents", "reviewer.md"), "---\nname: reviewer\ndescription: Broken reviewer\nrunner:\n type: unknown\n---\nBroken agent.\n");
669
+
670
+ const run = await captureSlashCommandParams("run", "reviewer", root);
671
+ assert.equal(run.params, undefined);
672
+ assert.match(run.notifications[0] ?? "", /Agent 'reviewer' has invalid configuration: Agent 'reviewer' has invalid runner\.type/);
673
+ });
674
+ });
675
+
676
+ it("/run reports malformed packaged agent configuration by runtime name", async () => {
677
+ await withTempProject("pi-slash-invalid-packaged-agent-", async (root) => {
678
+ fs.writeFileSync(path.join(root, ".selesai", "agents", "code-analysis.zeta-worker.md"), "---\nname: zeta-worker\npackage: code-analysis\ndescription: Broken packaged worker\nrunner:\n type: unknown\n---\nBroken agent.\n");
679
+
680
+ const run = await captureSlashCommandParams("run", "code-analysis.zeta-worker", root);
681
+ assert.equal(run.params, undefined);
682
+ assert.match(run.notifications[0] ?? "", /Agent 'code-analysis\.zeta-worker' has invalid configuration: Agent 'zeta-worker' has invalid runner\.type/);
683
+ });
684
+ });
685
+
686
+ it("/run accepts runtime-registered agents", async () => {
687
+ await withTempProject("pi-slash-runtime-agent-", async (root) => {
688
+ const run = await captureSlashCommandParams("run", "runtime-helper Inspect", root, (pi) => {
689
+ registerAgent({
690
+ pi: pi as never,
691
+ name: "runtime-helper",
692
+ definition: { description: "Runtime helper", systemPrompt: "Help at runtime." },
693
+ });
694
+ });
695
+
696
+ assert.deepEqual(run.params, {
697
+ workflowScript: "return runs.run(\"run\", {\"agent\":\"runtime-helper\",\"task\":\"Inspect\",\"agentScope\":\"both\"})",
698
+ async: false,
699
+ });
700
+ });
701
+ });
702
+
599
703
  it("/run preserves existing relative reads and omits missing reads", async () => {
600
704
  await withTempProject("pi-slash-reads-", async (root) => {
601
705
  fs.writeFileSync(path.join(root, ".selesai", "agents", "scout.md"), `---
@@ -635,8 +739,6 @@ Inspect
635
739
 
636
740
  const pi = {
637
741
  events,
638
- on() {},
639
- on() {},
640
742
  registerCommand(name: string, spec: { handler(args: string, ctx: unknown): Promise<void> }) {
641
743
  commands.set(name, spec);
642
744
  },
@@ -688,7 +790,6 @@ Inspect
688
790
 
689
791
  const pi = {
690
792
  events,
691
- on() {},
692
793
  registerCommand(name: string, spec: { handler(args: string, ctx: unknown): Promise<void> }) {
693
794
  commands.set(name, spec);
694
795
  },
@@ -728,7 +829,6 @@ Inspect
728
829
 
729
830
  const pi = {
730
831
  events,
731
- on() {},
732
832
  registerCommand(name: string, spec: { handler(args: string, ctx: unknown): Promise<void> }) {
733
833
  commands.set(name, spec);
734
834
  },
@@ -781,7 +881,6 @@ Inspect
781
881
  const commands = new Map<string, RegisteredSlashCommand>();
782
882
  registerSlashCommands!({
783
883
  events: createEventBus(),
784
- on() {},
785
884
  registerCommand(name: string, spec: RegisteredSlashCommand) { commands.set(name, spec); },
786
885
  registerShortcut() {},
787
886
  sendMessage() {},
@@ -792,18 +891,159 @@ Inspect
792
891
  });
793
892
  });
794
893
 
795
- it("registers the Selesai-native chain/parallel orchestration commands", async () => {
894
+ it("/run reports malformed packaged local-name fallback configuration", async () => {
895
+ await withTempProject("pi-packaged-agent-local-slash-", async (root) => {
896
+ const highPackage = path.join(root, "high-package");
897
+ const lowPackage = path.join(root, "low-package");
898
+ for (const packageRoot of [highPackage, lowPackage]) {
899
+ fs.mkdirSync(path.join(packageRoot, "agents"), { recursive: true });
900
+ fs.writeFileSync(path.join(packageRoot, "package.json"), JSON.stringify({ "pi-subagents": { agents: ["agents"] } }));
901
+ }
902
+ fs.writeFileSync(path.join(highPackage, "agents", "foo.md"), `---
903
+ name: foo
904
+ package: acme
905
+ description: Broken high package foo
906
+ runner:
907
+ type: unknown
908
+ ---
909
+ Broken foo.
910
+ `, "utf-8");
911
+ fs.writeFileSync(path.join(lowPackage, "agents", "foo.md"), `---
912
+ name: foo
913
+ package: acme
914
+ description: Valid low package foo
915
+ ---
916
+ Valid foo.
917
+ `, "utf-8");
918
+ fs.writeFileSync(path.join(root, ".selesai", "settings.json"), JSON.stringify({ packages: [highPackage, lowPackage] }));
919
+
920
+ const run = await captureSlashCommandParams("run", "foo Investigate", root);
921
+ assert.equal(run.params, undefined);
922
+ assert.match(run.notifications[0] ?? "", /Agent 'foo' has invalid configuration: Agent 'foo' has invalid runner\.type/);
923
+ });
924
+ });
925
+
926
+ it("does not register legacy orchestration commands", async () => {
796
927
  const commands = new Map<string, unknown>();
797
928
  registerSlashCommands!({
798
- on() {},
799
929
  registerCommand(name: string, command: unknown) { commands.set(name, command); },
800
930
  registerShortcut() {},
801
931
  events: createEventBus(),
802
932
  } as never, { baseCwd: process.cwd() } as never);
803
933
  assert.equal(commands.has("run"), true);
804
- assert.equal(commands.has("chain"), true);
805
- assert.equal(commands.has("parallel"), true);
806
- assert.equal(commands.has("run-chain"), true);
807
- assert.equal(commands.has("chain-prompts"), true);
934
+ assert.equal(commands.has("chain"), false);
935
+ assert.equal(commands.has("parallel"), false);
936
+ assert.equal(commands.has("run-chain"), false);
937
+ });
938
+ });
939
+
940
+ describe("subagents-inspect-rpc command", { skip: !available ? "slash-commands.ts not importable" : undefined }, () => {
941
+ function writeInspectableRun(runId: string, sessionId: string) {
942
+ const asyncDir = path.join(ASYNC_DIR, runId);
943
+ fs.mkdirSync(asyncDir, { recursive: true });
944
+ fs.mkdirSync(DIRS.results, { recursive: true });
945
+ const sessionRoot = fs.mkdtempSync(path.join(os.tmpdir(), "pi-inspect-itest-session-"));
946
+ const sessionFile = path.join(sessionRoot, "session.jsonl");
947
+ fs.writeFileSync(sessionFile, [
948
+ JSON.stringify({ message: { role: "user", content: "inspect me" } }),
949
+ JSON.stringify({ message: { role: "assistant", content: [{ type: "text", text: "inspected" }] } }),
950
+ ].join("\n") + "\n", "utf-8");
951
+ fs.writeFileSync(path.join(asyncDir, "status.json"), JSON.stringify({
952
+ runId,
953
+ sessionId,
954
+ mode: "single",
955
+ state: "complete",
956
+ startedAt: 100,
957
+ endedAt: 200,
958
+ lastUpdate: 200,
959
+ sessionFile,
960
+ sessionRoot,
961
+ steps: [{ agent: "worker", status: "complete", startedAt: 100, endedAt: 150, sessionFile }],
962
+ }, null, 2), "utf-8");
963
+ return { asyncDir, sessionRoot };
964
+ }
965
+
966
+ function makeInspectCtx(mode: string) {
967
+ const widgetCalls: Array<{ key: string; value: unknown }> = [];
968
+ const notifications: string[] = [];
969
+ const ctx = {
970
+ mode,
971
+ hasUI: true,
972
+ cwd: process.cwd(),
973
+ ui: {
974
+ setWidget: (key: string, value: unknown) => { widgetCalls.push({ key, value }); },
975
+ notify: (message: string) => { notifications.push(message); },
976
+ setStatus: () => {},
977
+ setToolsExpanded: () => {},
978
+ },
979
+ sessionManager: { getSessionFile: () => null, getSessionId: () => "session-itest" },
980
+ };
981
+ return { ctx, widgetCalls, notifications };
982
+ }
983
+
984
+ function registerWithState(sessionId: string | null, trustedSessionRoots: string[] = []) {
985
+ const commands = new Map<string, RegisteredSlashCommand>();
986
+ const pi = {
987
+ events: createEventBus(),
988
+ registerCommand(name: string, spec: RegisteredSlashCommand) { commands.set(name, spec); },
989
+ registerShortcut() {},
990
+ sendMessage() {},
991
+ };
992
+ const state = { ...createState(process.cwd()), currentSessionId: sessionId, trustedSessionRoots };
993
+ registerSlashCommands!(pi as never, state as never);
994
+ return commands;
995
+ }
996
+
997
+ it("emits a correlated payload widget then retracts it on RPC surfaces", async () => {
998
+ writeInspectableRun("run-itest", "session-itest");
999
+ const commands = registerWithState("session-itest");
1000
+ const { ctx, widgetCalls, notifications } = makeInspectCtx("rpc");
1001
+ await commands.get("subagents-inspect-rpc")!.handler("req-itest run-itest", ctx);
1002
+
1003
+ assert.deepEqual(widgetCalls.map((call) => call.key), ["subagent-inspect", "subagent-inspect"]);
1004
+ const [set, clear] = widgetCalls;
1005
+ assert.equal(clear!.value, undefined);
1006
+ const lines = set!.value as string[];
1007
+ assert.equal(lines.length, 1);
1008
+ assert.ok(lines[0]!.startsWith("SELESAI_SUBAGENT_INSPECT_JSON:"));
1009
+ const reply = JSON.parse(lines[0]!.slice("SELESAI_SUBAGENT_INSPECT_JSON:".length));
1010
+ assert.equal(reply.kind, "pi-subagents.inspect-reply");
1011
+ assert.equal(reply.version, 1);
1012
+ assert.equal(reply.requestId, "req-itest");
1013
+ assert.equal(reply.status, "complete");
1014
+ assert.equal(reply.task, "inspect me");
1015
+ assert.equal(reply.error, undefined);
1016
+ assert.equal(JSON.stringify(reply).includes("session.jsonl"), false);
1017
+ assert.equal(notifications.length, 0);
1018
+ });
1019
+
1020
+ it("answers foreign_session for runs owned by another session", async () => {
1021
+ writeInspectableRun("run-itest-foreign", "session-other");
1022
+ const commands = registerWithState("session-itest");
1023
+ const { ctx, widgetCalls } = makeInspectCtx("rpc");
1024
+ await commands.get("subagents-inspect-rpc")!.handler("req-foreign run-itest-foreign", ctx);
1025
+ const lines = widgetCalls[0]!.value as string[];
1026
+ const reply = JSON.parse(lines[0]!.slice("SELESAI_SUBAGENT_INSPECT_JSON:".length));
1027
+ assert.equal(reply.error?.code, "foreign_session");
1028
+ assert.equal(reply.messages, undefined);
1029
+ });
1030
+
1031
+ it("answers invalid_request with the echoed requestId for malformed args", async () => {
1032
+ const commands = registerWithState("session-itest");
1033
+ const { ctx, widgetCalls } = makeInspectCtx("rpc");
1034
+ await commands.get("subagents-inspect-rpc")!.handler("req-bad", ctx);
1035
+ const lines = widgetCalls[0]!.value as string[];
1036
+ const reply = JSON.parse(lines[0]!.slice("SELESAI_SUBAGENT_INSPECT_JSON:".length));
1037
+ assert.equal(reply.error?.code, "invalid_request");
1038
+ assert.equal(reply.requestId, "req-bad");
1039
+ });
1040
+
1041
+ it("degrades to a notification in TUI mode without emitting widgets", async () => {
1042
+ writeInspectableRun("run-itest-tui", "session-itest");
1043
+ const commands = registerWithState("session-itest");
1044
+ const { ctx, widgetCalls, notifications } = makeInspectCtx("tui");
1045
+ await commands.get("subagents-inspect-rpc")!.handler("req-tui run-itest-tui", ctx);
1046
+ assert.equal(widgetCalls.length, 0);
1047
+ assert.match(notifications[0] ?? "", /RPC surfaces/);
808
1048
  });
809
1049
  });
@@ -70,7 +70,7 @@ describe("slash live state", { skip: !available ? "slash-live-state.ts not impor
70
70
  async: true,
71
71
  });
72
72
 
73
- assert.equal(details.result.details.mode, "workflow");
73
+ assert.equal(details.result.details.mode, "single");
74
74
  assert.equal(details.result.details.background, true);
75
75
  assert.equal(details.result.details.asyncId, undefined);
76
76
  });
@@ -151,12 +151,13 @@ describe("resolveStepBehavior", { skip: !available ? "pi packages not available"
151
151
  assert.equal(behavior.output, "custom.md");
152
152
  });
153
153
 
154
- it("defaults outputMode to inline unless a step overrides it", () => {
154
+ it("uses agent outputMode defaults unless a step overrides them", () => {
155
155
  const inlineBehavior = resolveStepBehavior({ name: "test", output: "report.md" }, {});
156
156
  assert.equal(inlineBehavior.outputMode, "inline");
157
+ assert.equal(resolveStepBehavior({ name: "test", output: "report.md", outputMode: "file-only" }, {}).outputMode, "file-only");
157
158
 
158
- const stepOverrideBehavior = resolveStepBehavior({ name: "test", output: "report.md" }, { outputMode: "file-only" });
159
- assert.equal(stepOverrideBehavior.outputMode, "file-only");
159
+ const stepOverrideBehavior = resolveStepBehavior({ name: "test", output: "report.md", outputMode: "file-only" }, { outputMode: "inline" });
160
+ assert.equal(stepOverrideBehavior.outputMode, "inline");
160
161
  });
161
162
 
162
163
  it("false disables output", () => {
@@ -189,6 +190,22 @@ describe("resolveStepBehavior", { skip: !available ? "pi packages not available"
189
190
  });
190
191
 
191
192
  describe("resolveParallelBehaviors", { skip: !available ? "pi packages not available" : undefined }, () => {
193
+ it("uses agent outputMode defaults unless a parallel task overrides them", () => {
194
+ const [defaultBehavior] = resolveParallelBehaviors(
195
+ [{ agent: "reviewer", task: "Review" }],
196
+ [{ name: "reviewer", output: "report.md", outputMode: "file-only" }],
197
+ 0,
198
+ );
199
+ assert.equal(defaultBehavior?.outputMode, "file-only");
200
+
201
+ const [overrideBehavior] = resolveParallelBehaviors(
202
+ [{ agent: "reviewer", task: "Review", outputMode: "inline" }],
203
+ [{ name: "reviewer", output: "report.md", outputMode: "file-only" }],
204
+ 0,
205
+ );
206
+ assert.equal(overrideBehavior?.outputMode, "inline");
207
+ });
208
+
192
209
  it("string false agent default disables output in chain parallel tasks", () => {
193
210
  const behaviors = resolveParallelBehaviors(
194
211
  [{ agent: "reviewer", task: "Review" }],
@@ -0,0 +1,9 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+
5
+ if (!process.env.SELESAI_SUBAGENTS_TEMP_ROOT) {
6
+ const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-test-root-"));
7
+ process.env.SELESAI_SUBAGENTS_TEMP_ROOT = tempRoot;
8
+ process.on("exit", () => fs.rmSync(tempRoot, { recursive: true, force: true }));
9
+ }
@@ -103,13 +103,20 @@ function claimNextResponse(dir, args) {
103
103
  return responseMatchesArgs(fallback, args) ? fallback : undefined;
104
104
  }
105
105
 
106
- function defaultAssistantMessage(output) {
106
+ function requestedModelArg(args) {
107
+ for (let i = 0; i < args.length; i++) {
108
+ if (args[i] === "--model" && typeof args[i + 1] === "string") return args[i + 1];
109
+ }
110
+ return "mock/test-model";
111
+ }
112
+
113
+ function defaultAssistantMessage(output, args) {
107
114
  return {
108
115
  type: "message_end",
109
116
  message: {
110
117
  role: "assistant",
111
118
  content: [{ type: "text", text: output }],
112
- model: "mock/test-model",
119
+ model: requestedModelArg(args),
113
120
  stopReason: "stop",
114
121
  usage: {
115
122
  input: 100,
@@ -183,6 +190,14 @@ function writeStructuredOutputCapture(response) {
183
190
  if (!outputPath) return;
184
191
  fs.mkdirSync(path.dirname(outputPath), { recursive: true });
185
192
  fs.writeFileSync(outputPath, JSON.stringify(response.structuredOutputCapture), "utf-8");
193
+ if (Object.prototype.hasOwnProperty.call(response, "structuredOutputAcceptanceReport")) {
194
+ const acceptancePath = process.env.SELESAI_SUBAGENT_STRUCTURED_OUTPUT_ACCEPTANCE_CAPTURE;
195
+ if (acceptancePath) fs.writeFileSync(acceptancePath, JSON.stringify(response.structuredOutputAcceptanceReport), "utf-8");
196
+ }
197
+ if (Object.prototype.hasOwnProperty.call(response, "structuredOutputAcceptanceReportRaw")) {
198
+ const acceptancePath = process.env.SELESAI_SUBAGENT_STRUCTURED_OUTPUT_ACCEPTANCE_CAPTURE;
199
+ if (acceptancePath) fs.writeFileSync(acceptancePath, response.structuredOutputAcceptanceReportRaw, "utf-8");
200
+ }
186
201
  }
187
202
 
188
203
  function writeRuntimeAcknowledgedExtensions(response) {
@@ -209,6 +224,16 @@ function writeToolDiagnostic(response) {
209
224
  }), "utf-8");
210
225
  }
211
226
 
227
+ function readRequiredToolsEnv() {
228
+ try {
229
+ const encoded = process.env.SELESAI_SUBAGENT_REQUIRED_TOOLS;
230
+ const parsed = encoded === undefined ? [] : JSON.parse(encoded);
231
+ return Array.isArray(parsed) ? parsed : undefined;
232
+ } catch {
233
+ return undefined;
234
+ }
235
+ }
236
+
212
237
  function isJsonMode(args) {
213
238
  for (let i = 0; i < args.length; i++) {
214
239
  if (args[i] === "--mode") {
@@ -337,7 +362,7 @@ async function main() {
337
362
  writeToolDiagnostic(response);
338
363
  const callPath = path.join(queueDir, `call-${Date.now()}-${process.pid}-${Math.random().toString(16).slice(2)}.json`);
339
364
  const callTempPath = `${callPath}.tmp-${process.pid}-${Date.now()}`;
340
- fs.writeFileSync(callTempPath, JSON.stringify({ args, cwd: process.cwd(), systemPrompts: readSystemPromptRecords(args) }), "utf-8");
365
+ fs.writeFileSync(callTempPath, JSON.stringify({ args, cwd: process.cwd(), systemPrompts: readSystemPromptRecords(args), requiredChildTools: readRequiredToolsEnv() }), "utf-8");
341
366
  fs.renameSync(callTempPath, callPath);
342
367
 
343
368
  if (typeof response.delay === "number" && response.delay > 0) {
@@ -378,11 +403,11 @@ async function main() {
378
403
  } else if (Array.isArray(response.echoEnv) && response.echoEnv.length > 0) {
379
404
  const envSnapshot = Object.fromEntries(response.echoEnv.map((key) => [key, process.env[key] ?? null]));
380
405
  const output = withAcceptanceReport(JSON.stringify(envSnapshot), args);
381
- if (jsonMode) await writeJsonlLine(defaultAssistantMessage(output));
406
+ if (jsonMode) await writeJsonlLine(defaultAssistantMessage(output, args));
382
407
  else await writeStdout(`${output}\n`);
383
408
  } else if (typeof response.output === "string") {
384
409
  const output = withAcceptanceReport(response.output, args);
385
- if (jsonMode) await writeJsonlLine(defaultAssistantMessage(output));
410
+ if (jsonMode) await writeJsonlLine(defaultAssistantMessage(output, args));
386
411
  else await writeStdout(`${output}\n`);
387
412
  }
388
413
  await maybeWriteStructuredOutput(response, jsonMode);
@@ -30,6 +30,8 @@ interface MockPiResponse {
30
30
  writeFiles?: Array<{ path: string; content: string }>;
31
31
  /** Writes the structured-output capture file without emitting a structured_output tool event. */
32
32
  structuredOutputCapture?: unknown;
33
+ structuredOutputAcceptanceReport?: unknown;
34
+ structuredOutputAcceptanceReportRaw?: string;
33
35
  runtimeAcknowledgedExtensions?: unknown;
34
36
  }
35
37
 
@@ -171,6 +171,7 @@ export async function runRealSubagentSession(options: RealSessionRunOptions): Pr
171
171
  const envSnapshot = new Map([
172
172
  ["HOME", process.env.HOME],
173
173
  ["USERPROFILE", process.env.USERPROFILE],
174
+ ["SELESAI_SUBAGENTS_TEMP_ROOT", process.env.SELESAI_SUBAGENTS_TEMP_ROOT],
174
175
  ["SELESAI_CODING_AGENT_DIR", process.env.SELESAI_CODING_AGENT_DIR],
175
176
  ["SELESAI_SUBAGENT_EXTRA_AGENT_DIRS", process.env.SELESAI_SUBAGENT_EXTRA_AGENT_DIRS],
176
177
  ["SELESAI_SUBAGENT_CHILD", process.env.SELESAI_SUBAGENT_CHILD],
@@ -179,7 +180,7 @@ export async function runRealSubagentSession(options: RealSessionRunOptions): Pr
179
180
  ["SELESAI_SUBAGENT_MAX_DEPTH", process.env.SELESAI_SUBAGENT_MAX_DEPTH],
180
181
  ["SELESAI_SUBAGENT_PARENT_SESSION", process.env.SELESAI_SUBAGENT_PARENT_SESSION],
181
182
  ["SELESAI_SUBAGENT_PI_BINARY", process.env.SELESAI_SUBAGENT_PI_BINARY],
182
- ["SELESAI_SUBAGENTS_SELESAI_PACKAGE_ROOT", process.env.SELESAI_SUBAGENTS_SELESAI_PACKAGE_ROOT],
183
+ ["SELESAI_SUBAGENTS_CODING_AGENT_PACKAGE_ROOT", process.env.SELESAI_SUBAGENTS_CODING_AGENT_PACKAGE_ROOT],
183
184
  ]);
184
185
  const uninstallChildPi = installChildPiShim(options.childText, options.reportChildTools);
185
186
  let session: AgentSession | undefined;
@@ -207,6 +208,7 @@ export async function runRealSubagentSession(options: RealSessionRunOptions): Pr
207
208
  process.chdir(cwd);
208
209
  process.env.HOME = home;
209
210
  process.env.USERPROFILE = home;
211
+ process.env.SELESAI_SUBAGENTS_TEMP_ROOT ??= path.join(home, "pi-subagents-temp");
210
212
  process.env.SELESAI_CODING_AGENT_DIR = home;
211
213
  delete process.env.SELESAI_SUBAGENT_EXTRA_AGENT_DIRS;
212
214
  delete process.env.SELESAI_SUBAGENT_CHILD;
@@ -214,7 +216,7 @@ export async function runRealSubagentSession(options: RealSessionRunOptions): Pr
214
216
  delete process.env.SELESAI_SUBAGENT_DEPTH;
215
217
  delete process.env.SELESAI_SUBAGENT_MAX_DEPTH;
216
218
  delete process.env.SELESAI_SUBAGENT_PARENT_SESSION;
217
- delete process.env.SELESAI_SUBAGENTS_SELESAI_PACKAGE_ROOT;
219
+ delete process.env.SELESAI_SUBAGENTS_CODING_AGENT_PACKAGE_ROOT;
218
220
  for (const [relativePath, content] of Object.entries(options.projectFiles ?? {})) {
219
221
  const target = path.resolve(cwd, relativePath);
220
222
  if (target !== cwd && !target.startsWith(`${cwd}${path.sep}`)) throw new Error(`E2E project file escapes cwd: ${relativePath}`);
@@ -11,5 +11,6 @@
11
11
  */
12
12
 
13
13
  import { register } from "node:module";
14
+ import "./isolated-temp-root.mjs";
14
15
 
15
16
  register(new URL("./ts-loader.mjs", import.meta.url));