@selesai/code 0.6.2 → 0.7.0

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 (997) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/README.md +1 -1
  3. package/dist/bun/cli.d.ts +0 -1
  4. package/dist/bun/cli.js +0 -1
  5. package/dist/bun/register-bedrock.d.ts +0 -1
  6. package/dist/bun/register-bedrock.js +0 -1
  7. package/dist/bun/restore-sandbox-env.d.ts +0 -1
  8. package/dist/bun/restore-sandbox-env.js +0 -1
  9. package/dist/cli/args.d.ts +0 -1
  10. package/dist/cli/args.js +0 -1
  11. package/dist/cli/config-selector.d.ts +0 -1
  12. package/dist/cli/config-selector.js +0 -1
  13. package/dist/cli/credential-print.d.ts +0 -1
  14. package/dist/cli/credential-print.js +0 -1
  15. package/dist/cli/file-processor.d.ts +0 -1
  16. package/dist/cli/file-processor.js +0 -1
  17. package/dist/cli/initial-message.d.ts +0 -1
  18. package/dist/cli/initial-message.js +0 -1
  19. package/dist/cli/list-models.d.ts +0 -1
  20. package/dist/cli/list-models.js +0 -1
  21. package/dist/cli/project-trust.d.ts +0 -1
  22. package/dist/cli/project-trust.js +0 -1
  23. package/dist/cli/session-picker.d.ts +0 -1
  24. package/dist/cli/session-picker.js +0 -1
  25. package/dist/cli/startup-ui.d.ts +0 -1
  26. package/dist/cli/startup-ui.js +0 -1
  27. package/dist/cli.d.ts +0 -1
  28. package/dist/cli.js +0 -1
  29. package/dist/config.d.ts +0 -1
  30. package/dist/config.js +0 -1
  31. package/dist/core/agent-session-auto-handoff.test.d.ts +0 -1
  32. package/dist/core/agent-session-auto-handoff.test.js +0 -1
  33. package/dist/core/agent-session-runtime.d.ts +0 -1
  34. package/dist/core/agent-session-runtime.js +0 -1
  35. package/dist/core/agent-session-services.d.ts +0 -1
  36. package/dist/core/agent-session-services.js +0 -1
  37. package/dist/core/agent-session-skill-block.test.d.ts +0 -1
  38. package/dist/core/agent-session-skill-block.test.js +0 -1
  39. package/dist/core/agent-session.d.ts +0 -1
  40. package/dist/core/agent-session.js +0 -1
  41. package/dist/core/agents.d.ts +0 -1
  42. package/dist/core/agents.js +0 -1
  43. package/dist/core/auth-guidance.d.ts +0 -1
  44. package/dist/core/auth-guidance.js +0 -1
  45. package/dist/core/auth-storage.d.ts +0 -1
  46. package/dist/core/auth-storage.js +0 -1
  47. package/dist/core/bash-executor.d.ts +0 -1
  48. package/dist/core/bash-executor.js +0 -1
  49. package/dist/core/built-in-extensions.d.ts +0 -1
  50. package/dist/core/built-in-extensions.js +0 -1
  51. package/dist/core/cache-stats.d.ts +0 -1
  52. package/dist/core/cache-stats.js +0 -1
  53. package/dist/core/compaction/branch-summarization.d.ts +0 -1
  54. package/dist/core/compaction/branch-summarization.js +0 -1
  55. package/dist/core/compaction/compaction.d.ts +0 -1
  56. package/dist/core/compaction/compaction.js +0 -1
  57. package/dist/core/compaction/index.d.ts +0 -1
  58. package/dist/core/compaction/index.js +0 -1
  59. package/dist/core/compaction/utils.d.ts +0 -1
  60. package/dist/core/compaction/utils.js +0 -1
  61. package/dist/core/defaults.d.ts +0 -1
  62. package/dist/core/defaults.js +0 -1
  63. package/dist/core/diagnostics.d.ts +0 -1
  64. package/dist/core/diagnostics.js +0 -1
  65. package/dist/core/event-bus.d.ts +0 -1
  66. package/dist/core/event-bus.js +0 -1
  67. package/dist/core/exec.d.ts +0 -1
  68. package/dist/core/exec.js +0 -1
  69. package/dist/core/experimental.d.ts +0 -1
  70. package/dist/core/experimental.js +0 -1
  71. package/dist/core/export-html/ansi-to-html.d.ts +0 -1
  72. package/dist/core/export-html/ansi-to-html.js +0 -1
  73. package/dist/core/export-html/index.d.ts +0 -1
  74. package/dist/core/export-html/index.js +0 -1
  75. package/dist/core/export-html/tool-renderer.d.ts +0 -1
  76. package/dist/core/export-html/tool-renderer.js +0 -1
  77. package/dist/core/extensions/index.d.ts +0 -1
  78. package/dist/core/extensions/index.js +0 -1
  79. package/dist/core/extensions/loader.d.ts +0 -1
  80. package/dist/core/extensions/loader.js +0 -1
  81. package/dist/core/extensions/runner.d.ts +0 -1
  82. package/dist/core/extensions/runner.js +0 -1
  83. package/dist/core/extensions/types.d.ts +0 -1
  84. package/dist/core/extensions/types.js +0 -1
  85. package/dist/core/extensions/wrapper.d.ts +0 -1
  86. package/dist/core/extensions/wrapper.js +0 -1
  87. package/dist/core/footer-data-provider.d.ts +0 -1
  88. package/dist/core/footer-data-provider.js +0 -1
  89. package/dist/core/git-command.d.ts +0 -1
  90. package/dist/core/git-command.js +0 -1
  91. package/dist/core/http-dispatcher.d.ts +0 -1
  92. package/dist/core/http-dispatcher.js +0 -1
  93. package/dist/core/index.d.ts +0 -1
  94. package/dist/core/index.js +0 -1
  95. package/dist/core/keybindings.d.ts +0 -1
  96. package/dist/core/keybindings.js +0 -1
  97. package/dist/core/llama/client.d.ts +0 -1
  98. package/dist/core/llama/client.js +0 -1
  99. package/dist/core/llama/huggingface.d.ts +0 -1
  100. package/dist/core/llama/huggingface.js +0 -1
  101. package/dist/core/llama/index.d.ts +0 -1
  102. package/dist/core/llama/index.js +0 -1
  103. package/dist/core/llama/provider.d.ts +0 -1
  104. package/dist/core/llama/provider.js +0 -1
  105. package/dist/core/llama/ui.d.ts +0 -1
  106. package/dist/core/llama/ui.js +0 -1
  107. package/dist/core/messages.d.ts +0 -1
  108. package/dist/core/messages.js +0 -1
  109. package/dist/core/model-config.d.ts +0 -1
  110. package/dist/core/model-config.js +0 -1
  111. package/dist/core/model-registry.d.ts +0 -1
  112. package/dist/core/model-registry.js +0 -1
  113. package/dist/core/model-resolver.d.ts +0 -1
  114. package/dist/core/model-resolver.js +0 -1
  115. package/dist/core/model-runtime.d.ts +0 -1
  116. package/dist/core/model-runtime.js +0 -1
  117. package/dist/core/models-store.d.ts +0 -1
  118. package/dist/core/models-store.js +0 -1
  119. package/dist/core/output-guard.d.ts +0 -1
  120. package/dist/core/output-guard.js +0 -1
  121. package/dist/core/package-manager.d.ts +0 -1
  122. package/dist/core/package-manager.js +0 -1
  123. package/dist/core/package-manager.test.d.ts +0 -1
  124. package/dist/core/package-manager.test.js +0 -1
  125. package/dist/core/project-trust.d.ts +0 -1
  126. package/dist/core/project-trust.js +0 -1
  127. package/dist/core/prompt-templates.d.ts +0 -1
  128. package/dist/core/prompt-templates.js +0 -1
  129. package/dist/core/provider-attribution.d.ts +0 -1
  130. package/dist/core/provider-attribution.js +0 -1
  131. package/dist/core/provider-composer.d.ts +0 -1
  132. package/dist/core/provider-composer.js +0 -1
  133. package/dist/core/radius.d.ts +0 -1
  134. package/dist/core/radius.js +0 -1
  135. package/dist/core/remote-catalog-provider.d.ts +0 -1
  136. package/dist/core/remote-catalog-provider.js +0 -1
  137. package/dist/core/resolve-config-value.d.ts +0 -1
  138. package/dist/core/resolve-config-value.js +0 -1
  139. package/dist/core/resource-loader.d.ts +0 -1
  140. package/dist/core/resource-loader.js +0 -1
  141. package/dist/core/runtime-credentials.d.ts +0 -1
  142. package/dist/core/runtime-credentials.js +0 -1
  143. package/dist/core/sdk.d.ts +0 -1
  144. package/dist/core/sdk.js +0 -1
  145. package/dist/core/session-cwd.d.ts +0 -1
  146. package/dist/core/session-cwd.js +0 -1
  147. package/dist/core/session-manager.d.ts +0 -1
  148. package/dist/core/session-manager.js +0 -1
  149. package/dist/core/settings-manager-auto-handoff.test.d.ts +0 -1
  150. package/dist/core/settings-manager-auto-handoff.test.js +0 -1
  151. package/dist/core/settings-manager.d.ts +0 -4
  152. package/dist/core/settings-manager.js +0 -12
  153. package/dist/core/skills.d.ts +0 -1
  154. package/dist/core/skills.js +0 -1
  155. package/dist/core/slash-commands.d.ts +0 -1
  156. package/dist/core/slash-commands.js +0 -1
  157. package/dist/core/source-info.d.ts +0 -1
  158. package/dist/core/source-info.js +0 -1
  159. package/dist/core/system-prompt.d.ts +0 -1
  160. package/dist/core/system-prompt.js +0 -1
  161. package/dist/core/system-prompt.test.d.ts +0 -1
  162. package/dist/core/system-prompt.test.js +0 -1
  163. package/dist/core/telemetry.d.ts +0 -1
  164. package/dist/core/telemetry.js +0 -1
  165. package/dist/core/timings.d.ts +0 -1
  166. package/dist/core/timings.js +0 -1
  167. package/dist/core/tools/bash.d.ts +0 -1
  168. package/dist/core/tools/bash.js +0 -1
  169. package/dist/core/tools/edit-diff.d.ts +0 -1
  170. package/dist/core/tools/edit-diff.js +0 -1
  171. package/dist/core/tools/edit.d.ts +0 -1
  172. package/dist/core/tools/edit.js +0 -1
  173. package/dist/core/tools/file-mutation-queue.d.ts +0 -1
  174. package/dist/core/tools/file-mutation-queue.js +0 -1
  175. package/dist/core/tools/find.d.ts +0 -1
  176. package/dist/core/tools/find.js +0 -1
  177. package/dist/core/tools/grep.d.ts +0 -1
  178. package/dist/core/tools/grep.js +0 -1
  179. package/dist/core/tools/index.d.ts +0 -1
  180. package/dist/core/tools/index.js +0 -1
  181. package/dist/core/tools/ls.d.ts +0 -1
  182. package/dist/core/tools/ls.js +0 -1
  183. package/dist/core/tools/output-accumulator.d.ts +0 -1
  184. package/dist/core/tools/output-accumulator.js +0 -1
  185. package/dist/core/tools/path-utils.d.ts +0 -1
  186. package/dist/core/tools/path-utils.js +0 -1
  187. package/dist/core/tools/read.d.ts +0 -1
  188. package/dist/core/tools/read.js +0 -1
  189. package/dist/core/tools/render-utils.d.ts +0 -1
  190. package/dist/core/tools/render-utils.js +0 -1
  191. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -1
  192. package/dist/core/tools/tool-definition-wrapper.js +0 -1
  193. package/dist/core/tools/truncate.d.ts +0 -1
  194. package/dist/core/tools/truncate.js +0 -1
  195. package/dist/core/tools/write.d.ts +0 -1
  196. package/dist/core/tools/write.js +0 -1
  197. package/dist/core/trust-manager.d.ts +0 -1
  198. package/dist/core/trust-manager.js +0 -1
  199. package/dist/core/usage-totals.d.ts +0 -1
  200. package/dist/core/usage-totals.js +0 -1
  201. package/dist/defaults/models.json +8 -0
  202. package/dist/defaults/settings.json +6 -7
  203. package/dist/extensions/inline-skills.test.ts +13 -13
  204. package/dist/extensions/inline-skills.ts +6 -6
  205. package/dist/extensions/pi-subagents/CHANGELOG.md +89 -12
  206. package/dist/extensions/pi-subagents/README.md +339 -604
  207. package/dist/extensions/pi-subagents/package-lock.json +190 -2079
  208. package/dist/extensions/pi-subagents/package.json +13 -5
  209. package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +1 -1
  210. package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +1 -1
  211. package/dist/extensions/pi-subagents/prompts/review-loop.md +1 -1
  212. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +10 -10
  213. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +32 -43
  214. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +106 -105
  215. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +3 -3
  216. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +28 -35
  217. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +167 -124
  218. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +19 -0
  219. package/dist/extensions/pi-subagents/src/agents/agents.ts +163 -75
  220. package/dist/extensions/pi-subagents/src/agents/chain-serializer.ts +10 -7
  221. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +5 -3
  222. package/dist/extensions/pi-subagents/src/agents/identity.ts +1 -1
  223. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +14 -11
  224. package/dist/extensions/pi-subagents/src/agents/skills.ts +23 -6
  225. package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +8 -1
  226. package/dist/extensions/pi-subagents/src/api/control-channel.ts +4 -0
  227. package/dist/extensions/pi-subagents/src/api/delegation.ts +26 -194
  228. package/dist/extensions/pi-subagents/src/api/external-runs.ts +129 -0
  229. package/dist/extensions/pi-subagents/src/api/intercom-bridge.ts +3 -0
  230. package/dist/extensions/pi-subagents/src/api/pi-args.ts +5 -0
  231. package/dist/extensions/pi-subagents/src/api/preflight.ts +4 -4
  232. package/dist/extensions/pi-subagents/src/api/shared-types.ts +19 -0
  233. package/dist/extensions/pi-subagents/src/extension/config.ts +10 -0
  234. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +5 -39
  235. package/dist/extensions/pi-subagents/src/extension/doctor.ts +10 -9
  236. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +7 -4
  237. package/dist/extensions/pi-subagents/src/extension/index.ts +243 -77
  238. package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -6
  239. package/dist/extensions/pi-subagents/src/extension/schemas.ts +50 -39
  240. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +36 -103
  241. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +229 -0
  242. package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +130 -0
  243. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +141 -0
  244. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +154 -0
  245. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +330 -0
  246. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +3 -2
  247. package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +5 -1
  248. package/dist/extensions/pi-subagents/src/missions/actions.ts +372 -0
  249. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +314 -0
  250. package/dist/extensions/pi-subagents/src/missions/store.ts +442 -0
  251. package/dist/extensions/pi-subagents/src/missions/types.ts +135 -0
  252. package/dist/extensions/pi-subagents/src/policy/authority.ts +46 -0
  253. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +32 -6
  254. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +103 -72
  255. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +10 -2
  256. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +6 -6
  257. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +29 -1
  258. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +3 -3
  259. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -2
  260. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +9 -7
  261. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +3 -4
  262. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +3 -28
  263. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +5 -5
  264. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +18 -68
  265. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +3 -3
  266. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +35 -8
  267. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +602 -375
  268. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +3 -3
  269. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +612 -464
  270. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +50 -9
  271. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +253 -0
  272. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +12 -4
  273. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +3 -3
  274. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +8 -4
  275. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +74 -102
  276. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +21 -22
  277. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1050 -396
  278. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +44 -18
  279. package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +0 -1
  280. package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +302 -22
  281. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  282. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +130 -0
  283. package/dist/extensions/pi-subagents/src/runs/shared/long-running-guard.ts +42 -1
  284. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +1 -1
  285. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +59 -5
  286. package/dist/extensions/pi-subagents/src/runs/shared/nested-render.ts +9 -4
  287. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +86 -2
  288. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +11 -2
  289. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +95 -0
  290. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +11 -1
  291. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +15 -6
  292. package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +1 -1
  293. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +9 -63
  294. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +37 -6
  295. package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +5 -2
  296. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +2 -23
  297. package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +6 -6
  298. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +124 -13
  299. package/dist/extensions/pi-subagents/src/shared/accessible-dir.ts +29 -7
  300. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +18 -1
  301. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +3 -2
  302. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +1 -0
  303. package/dist/extensions/pi-subagents/src/shared/settings.ts +10 -0
  304. package/dist/extensions/pi-subagents/src/shared/types.ts +158 -55
  305. package/dist/extensions/pi-subagents/src/shared/utils.ts +16 -66
  306. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +33 -199
  307. package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +43 -126
  308. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +103 -0
  309. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +158 -205
  310. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +22 -58
  311. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +14 -0
  312. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +44 -642
  313. package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +18 -14
  314. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +156 -21
  315. package/dist/extensions/pi-subagents/src/tui/fleet-transcript.ts +110 -5
  316. package/dist/extensions/pi-subagents/src/tui/fleet.ts +60 -24
  317. package/dist/extensions/pi-subagents/src/tui/render.ts +296 -140
  318. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +14 -0
  319. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
  320. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +13 -7
  321. package/dist/extensions/pi-subagents/src/watchdog/model-selection.ts +2 -2
  322. package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +145 -0
  323. package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +1 -1
  324. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +1 -1
  325. package/dist/extensions/pi-subagents/src/watchdog/review.ts +4 -1
  326. package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +3 -2
  327. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +140 -0
  328. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +415 -0
  329. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +41 -144
  330. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +16 -16
  331. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +415 -298
  332. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +149 -82
  333. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +40 -40
  334. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +15 -15
  335. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +193 -133
  336. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -49
  337. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +62 -0
  338. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +56 -58
  339. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +81 -68
  340. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +20 -25
  341. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +425 -317
  342. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +73 -73
  343. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +123 -98
  344. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +653 -240
  345. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +20 -1661
  346. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  347. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +3 -3
  348. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  349. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +8 -5
  350. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +6 -6
  351. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -20
  352. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +25 -4
  353. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
  354. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +280 -295
  355. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +47 -207
  356. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  357. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +89 -89
  358. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  359. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +10 -0
  360. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +33 -9
  361. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +24 -2
  362. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +11 -9
  363. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +2 -2
  364. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +40 -40
  365. package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +22 -0
  366. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +1 -1
  367. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +5 -39
  368. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +19 -19
  369. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  370. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  371. package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +99 -0
  372. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  373. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +41 -0
  374. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  375. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +35 -5
  376. package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +7 -0
  377. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +16 -82
  378. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +162 -620
  379. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
  380. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  381. package/dist/extensions/pi-subagents/test/unit/ensure-accessible-dir.test.ts +125 -0
  382. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +94 -0
  383. package/dist/extensions/pi-subagents/test/unit/external-runs.test.ts +66 -0
  384. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  385. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +242 -52
  386. package/dist/extensions/pi-subagents/test/unit/fleet-transcript.test.ts +127 -0
  387. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +197 -36
  388. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +4 -4
  389. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +245 -0
  390. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +494 -0
  391. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +261 -31
  392. package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +52 -0
  393. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +6 -6
  394. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +217 -0
  395. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +182 -0
  396. package/dist/extensions/pi-subagents/test/unit/mock-pi.test.ts +22 -0
  397. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +1 -1
  398. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +10 -10
  399. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +20 -12
  400. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +47 -5
  401. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +49 -55
  402. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +20 -3
  403. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +37 -7
  404. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  405. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  406. package/dist/extensions/pi-subagents/test/unit/permissions.test.ts +46 -0
  407. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +31 -10
  408. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +40 -16
  409. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +42 -44
  410. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  411. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +4 -4
  412. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +75 -9
  413. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +20 -84
  414. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +15 -16
  415. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +28 -28
  416. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +19 -12
  417. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +37 -21
  418. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  419. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +50 -50
  420. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +396 -433
  421. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +76 -153
  422. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +411 -0
  423. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +1 -91
  424. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +139 -0
  425. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +29 -0
  426. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  427. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -2
  428. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  429. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  430. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +53 -18
  431. package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +13 -1
  432. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +44 -11
  433. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +2 -26
  434. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +24 -148
  435. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +11 -9
  436. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +351 -0
  437. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  438. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  439. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +79 -0
  440. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  441. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  442. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +45 -9
  443. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +197 -0
  444. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  445. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +142 -12
  446. package/dist/extensions/pi-subagents/tsconfig.json +15 -0
  447. package/dist/extensions/pi-web-agent/package.json +1 -1
  448. package/dist/extensions/rtk.test.ts +126 -0
  449. package/dist/extensions/rtk.ts +56 -20
  450. package/dist/index.d.ts +1 -1
  451. package/dist/index.js +1 -1
  452. package/dist/main.d.ts +0 -1
  453. package/dist/main.js +0 -1
  454. package/dist/migrations.d.ts +0 -1
  455. package/dist/migrations.js +0 -1
  456. package/dist/modes/index.d.ts +0 -1
  457. package/dist/modes/index.js +0 -1
  458. package/dist/modes/interactive/components/armin.d.ts +0 -1
  459. package/dist/modes/interactive/components/armin.js +0 -1
  460. package/dist/modes/interactive/components/assistant-message.d.ts +0 -1
  461. package/dist/modes/interactive/components/assistant-message.js +0 -1
  462. package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
  463. package/dist/modes/interactive/components/bash-execution.js +0 -1
  464. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -1
  465. package/dist/modes/interactive/components/bordered-loader.js +0 -1
  466. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -1
  467. package/dist/modes/interactive/components/branch-summary-message.js +0 -1
  468. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -1
  469. package/dist/modes/interactive/components/compaction-summary-message.js +0 -1
  470. package/dist/modes/interactive/components/config-selector.d.ts +0 -1
  471. package/dist/modes/interactive/components/config-selector.js +0 -1
  472. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -1
  473. package/dist/modes/interactive/components/countdown-timer.js +0 -1
  474. package/dist/modes/interactive/components/custom-editor.d.ts +0 -1
  475. package/dist/modes/interactive/components/custom-editor.js +0 -1
  476. package/dist/modes/interactive/components/custom-entry.d.ts +0 -1
  477. package/dist/modes/interactive/components/custom-entry.js +0 -1
  478. package/dist/modes/interactive/components/custom-message.d.ts +0 -1
  479. package/dist/modes/interactive/components/custom-message.js +0 -1
  480. package/dist/modes/interactive/components/daxnuts.d.ts +0 -1
  481. package/dist/modes/interactive/components/daxnuts.js +0 -1
  482. package/dist/modes/interactive/components/diff.d.ts +0 -1
  483. package/dist/modes/interactive/components/diff.js +0 -1
  484. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -1
  485. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  486. package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -1
  487. package/dist/modes/interactive/components/earendil-announcement.js +0 -1
  488. package/dist/modes/interactive/components/extension-editor.d.ts +0 -1
  489. package/dist/modes/interactive/components/extension-editor.js +0 -1
  490. package/dist/modes/interactive/components/extension-input.d.ts +0 -1
  491. package/dist/modes/interactive/components/extension-input.js +0 -1
  492. package/dist/modes/interactive/components/extension-selector.d.ts +0 -1
  493. package/dist/modes/interactive/components/extension-selector.js +0 -1
  494. package/dist/modes/interactive/components/first-time-setup.d.ts +0 -1
  495. package/dist/modes/interactive/components/first-time-setup.js +0 -1
  496. package/dist/modes/interactive/components/footer.d.ts +0 -1
  497. package/dist/modes/interactive/components/footer.js +0 -1
  498. package/dist/modes/interactive/components/index.d.ts +0 -1
  499. package/dist/modes/interactive/components/index.js +0 -1
  500. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -1
  501. package/dist/modes/interactive/components/keybinding-hints.js +0 -1
  502. package/dist/modes/interactive/components/login-dialog.d.ts +0 -1
  503. package/dist/modes/interactive/components/login-dialog.js +0 -1
  504. package/dist/modes/interactive/components/model-selector.d.ts +0 -1
  505. package/dist/modes/interactive/components/model-selector.js +0 -1
  506. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -1
  507. package/dist/modes/interactive/components/oauth-selector.js +0 -1
  508. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -1
  509. package/dist/modes/interactive/components/scoped-models-selector.js +0 -1
  510. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -1
  511. package/dist/modes/interactive/components/session-selector-search.js +0 -1
  512. package/dist/modes/interactive/components/session-selector.d.ts +0 -1
  513. package/dist/modes/interactive/components/session-selector.js +0 -1
  514. package/dist/modes/interactive/components/settings-selector.d.ts +0 -3
  515. package/dist/modes/interactive/components/settings-selector.js +1 -14
  516. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -1
  517. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  518. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -1
  519. package/dist/modes/interactive/components/skill-invocation-message.js +0 -1
  520. package/dist/modes/interactive/components/status-indicator.d.ts +0 -1
  521. package/dist/modes/interactive/components/status-indicator.js +0 -1
  522. package/dist/modes/interactive/components/theme-selector.d.ts +0 -1
  523. package/dist/modes/interactive/components/theme-selector.js +0 -1
  524. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -1
  525. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  526. package/dist/modes/interactive/components/tool-execution.d.ts +0 -1
  527. package/dist/modes/interactive/components/tool-execution.js +0 -1
  528. package/dist/modes/interactive/components/tree-selector.d.ts +0 -1
  529. package/dist/modes/interactive/components/tree-selector.js +0 -1
  530. package/dist/modes/interactive/components/trust-selector.d.ts +0 -1
  531. package/dist/modes/interactive/components/trust-selector.js +0 -1
  532. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -1
  533. package/dist/modes/interactive/components/user-message-selector.js +0 -1
  534. package/dist/modes/interactive/components/user-message.d.ts +0 -1
  535. package/dist/modes/interactive/components/user-message.js +0 -1
  536. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -1
  537. package/dist/modes/interactive/components/visual-truncate.js +0 -1
  538. package/dist/modes/interactive/external-editor.d.ts +0 -1
  539. package/dist/modes/interactive/external-editor.js +0 -1
  540. package/dist/modes/interactive/interactive-mode.d.ts +0 -2
  541. package/dist/modes/interactive/interactive-mode.js +1 -22
  542. package/dist/modes/interactive/model-search.d.ts +0 -1
  543. package/dist/modes/interactive/model-search.js +0 -1
  544. package/dist/modes/interactive/theme/theme-controller.d.ts +0 -1
  545. package/dist/modes/interactive/theme/theme-controller.js +0 -1
  546. package/dist/modes/interactive/theme/theme.d.ts +0 -1
  547. package/dist/modes/interactive/theme/theme.js +0 -1
  548. package/dist/modes/print-mode.d.ts +0 -1
  549. package/dist/modes/print-mode.js +0 -1
  550. package/dist/modes/rpc/jsonl.d.ts +0 -1
  551. package/dist/modes/rpc/jsonl.js +0 -1
  552. package/dist/modes/rpc/rpc-client.d.ts +1 -2
  553. package/dist/modes/rpc/rpc-client.js +1 -2
  554. package/dist/modes/rpc/rpc-mode.d.ts +0 -1
  555. package/dist/modes/rpc/rpc-mode.js +0 -9
  556. package/dist/modes/rpc/rpc-types.d.ts +0 -1
  557. package/dist/modes/rpc/rpc-types.js +0 -1
  558. package/dist/package-manager-cli.d.ts +0 -1
  559. package/dist/package-manager-cli.js +0 -1
  560. package/dist/rpc-entry.d.ts +0 -1
  561. package/dist/rpc-entry.js +0 -1
  562. package/dist/utils/ansi.d.ts +0 -1
  563. package/dist/utils/ansi.js +0 -1
  564. package/dist/utils/changelog.d.ts +0 -1
  565. package/dist/utils/changelog.js +0 -1
  566. package/dist/utils/child-process.d.ts +0 -1
  567. package/dist/utils/child-process.js +0 -1
  568. package/dist/utils/clipboard-image.d.ts +0 -1
  569. package/dist/utils/clipboard-image.js +0 -1
  570. package/dist/utils/clipboard-native.d.ts +0 -1
  571. package/dist/utils/clipboard-native.js +0 -1
  572. package/dist/utils/clipboard.d.ts +0 -1
  573. package/dist/utils/clipboard.js +0 -1
  574. package/dist/utils/deprecation.d.ts +0 -1
  575. package/dist/utils/deprecation.js +0 -1
  576. package/dist/utils/exif-orientation.d.ts +0 -1
  577. package/dist/utils/exif-orientation.js +0 -1
  578. package/dist/utils/frontmatter.d.ts +0 -1
  579. package/dist/utils/frontmatter.js +0 -1
  580. package/dist/utils/fs-watch.d.ts +0 -1
  581. package/dist/utils/fs-watch.js +0 -1
  582. package/dist/utils/git.d.ts +0 -1
  583. package/dist/utils/git.js +0 -1
  584. package/dist/utils/html.d.ts +0 -1
  585. package/dist/utils/html.js +0 -1
  586. package/dist/utils/image-convert.d.ts +0 -1
  587. package/dist/utils/image-convert.js +0 -1
  588. package/dist/utils/image-process.d.ts +0 -1
  589. package/dist/utils/image-process.js +0 -1
  590. package/dist/utils/image-resize-core.d.ts +0 -1
  591. package/dist/utils/image-resize-core.js +0 -1
  592. package/dist/utils/image-resize-worker.d.ts +0 -1
  593. package/dist/utils/image-resize-worker.js +0 -1
  594. package/dist/utils/image-resize.d.ts +0 -1
  595. package/dist/utils/image-resize.js +0 -1
  596. package/dist/utils/json.d.ts +0 -1
  597. package/dist/utils/json.js +0 -1
  598. package/dist/utils/mime.d.ts +0 -1
  599. package/dist/utils/mime.js +0 -1
  600. package/dist/utils/open-browser.d.ts +0 -1
  601. package/dist/utils/open-browser.js +0 -1
  602. package/dist/utils/paths.d.ts +0 -1
  603. package/dist/utils/paths.js +0 -1
  604. package/dist/utils/photon.d.ts +0 -1
  605. package/dist/utils/photon.js +0 -1
  606. package/dist/utils/pi-user-agent.d.ts +0 -1
  607. package/dist/utils/pi-user-agent.js +0 -1
  608. package/dist/utils/shell.d.ts +0 -1
  609. package/dist/utils/shell.js +0 -1
  610. package/dist/utils/sleep.d.ts +0 -1
  611. package/dist/utils/sleep.js +0 -1
  612. package/dist/utils/syntax-highlight.d.ts +0 -1
  613. package/dist/utils/syntax-highlight.js +0 -1
  614. package/dist/utils/thinking-tags.d.ts +0 -1
  615. package/dist/utils/thinking-tags.js +0 -1
  616. package/dist/utils/tools-manager.d.ts +3 -3
  617. package/dist/utils/tools-manager.js +125 -42
  618. package/dist/utils/version-check.d.ts +0 -1
  619. package/dist/utils/version-check.js +0 -1
  620. package/dist/utils/windows-self-update.d.ts +0 -1
  621. package/dist/utils/windows-self-update.js +0 -1
  622. package/docs/rpc.md +1 -2
  623. package/docs/settings.md +0 -1
  624. package/docs/skills.md +10 -18
  625. package/package.json +4 -3
  626. package/dist/bun/cli.d.ts.map +0 -1
  627. package/dist/bun/cli.js.map +0 -1
  628. package/dist/bun/register-bedrock.d.ts.map +0 -1
  629. package/dist/bun/register-bedrock.js.map +0 -1
  630. package/dist/bun/restore-sandbox-env.d.ts.map +0 -1
  631. package/dist/bun/restore-sandbox-env.js.map +0 -1
  632. package/dist/cli/args.d.ts.map +0 -1
  633. package/dist/cli/args.js.map +0 -1
  634. package/dist/cli/config-selector.d.ts.map +0 -1
  635. package/dist/cli/config-selector.js.map +0 -1
  636. package/dist/cli/credential-print.d.ts.map +0 -1
  637. package/dist/cli/credential-print.js.map +0 -1
  638. package/dist/cli/file-processor.d.ts.map +0 -1
  639. package/dist/cli/file-processor.js.map +0 -1
  640. package/dist/cli/initial-message.d.ts.map +0 -1
  641. package/dist/cli/initial-message.js.map +0 -1
  642. package/dist/cli/list-models.d.ts.map +0 -1
  643. package/dist/cli/list-models.js.map +0 -1
  644. package/dist/cli/project-trust.d.ts.map +0 -1
  645. package/dist/cli/project-trust.js.map +0 -1
  646. package/dist/cli/session-picker.d.ts.map +0 -1
  647. package/dist/cli/session-picker.js.map +0 -1
  648. package/dist/cli/startup-ui.d.ts.map +0 -1
  649. package/dist/cli/startup-ui.js.map +0 -1
  650. package/dist/cli.d.ts.map +0 -1
  651. package/dist/cli.js.map +0 -1
  652. package/dist/config.d.ts.map +0 -1
  653. package/dist/config.js.map +0 -1
  654. package/dist/core/agent-session-auto-handoff.test.d.ts.map +0 -1
  655. package/dist/core/agent-session-auto-handoff.test.js.map +0 -1
  656. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  657. package/dist/core/agent-session-runtime.js.map +0 -1
  658. package/dist/core/agent-session-services.d.ts.map +0 -1
  659. package/dist/core/agent-session-services.js.map +0 -1
  660. package/dist/core/agent-session-skill-block.test.d.ts.map +0 -1
  661. package/dist/core/agent-session-skill-block.test.js.map +0 -1
  662. package/dist/core/agent-session.d.ts.map +0 -1
  663. package/dist/core/agent-session.js.map +0 -1
  664. package/dist/core/agents.d.ts.map +0 -1
  665. package/dist/core/agents.js.map +0 -1
  666. package/dist/core/auth-guidance.d.ts.map +0 -1
  667. package/dist/core/auth-guidance.js.map +0 -1
  668. package/dist/core/auth-storage.d.ts.map +0 -1
  669. package/dist/core/auth-storage.js.map +0 -1
  670. package/dist/core/bash-executor.d.ts.map +0 -1
  671. package/dist/core/bash-executor.js.map +0 -1
  672. package/dist/core/built-in-extensions.d.ts.map +0 -1
  673. package/dist/core/built-in-extensions.js.map +0 -1
  674. package/dist/core/cache-stats.d.ts.map +0 -1
  675. package/dist/core/cache-stats.js.map +0 -1
  676. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  677. package/dist/core/compaction/branch-summarization.js.map +0 -1
  678. package/dist/core/compaction/compaction.d.ts.map +0 -1
  679. package/dist/core/compaction/compaction.js.map +0 -1
  680. package/dist/core/compaction/index.d.ts.map +0 -1
  681. package/dist/core/compaction/index.js.map +0 -1
  682. package/dist/core/compaction/utils.d.ts.map +0 -1
  683. package/dist/core/compaction/utils.js.map +0 -1
  684. package/dist/core/defaults.d.ts.map +0 -1
  685. package/dist/core/defaults.js.map +0 -1
  686. package/dist/core/diagnostics.d.ts.map +0 -1
  687. package/dist/core/diagnostics.js.map +0 -1
  688. package/dist/core/event-bus.d.ts.map +0 -1
  689. package/dist/core/event-bus.js.map +0 -1
  690. package/dist/core/exec.d.ts.map +0 -1
  691. package/dist/core/exec.js.map +0 -1
  692. package/dist/core/experimental.d.ts.map +0 -1
  693. package/dist/core/experimental.js.map +0 -1
  694. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  695. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  696. package/dist/core/export-html/index.d.ts.map +0 -1
  697. package/dist/core/export-html/index.js.map +0 -1
  698. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  699. package/dist/core/export-html/tool-renderer.js.map +0 -1
  700. package/dist/core/extensions/index.d.ts.map +0 -1
  701. package/dist/core/extensions/index.js.map +0 -1
  702. package/dist/core/extensions/loader.d.ts.map +0 -1
  703. package/dist/core/extensions/loader.js.map +0 -1
  704. package/dist/core/extensions/runner.d.ts.map +0 -1
  705. package/dist/core/extensions/runner.js.map +0 -1
  706. package/dist/core/extensions/types.d.ts.map +0 -1
  707. package/dist/core/extensions/types.js.map +0 -1
  708. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  709. package/dist/core/extensions/wrapper.js.map +0 -1
  710. package/dist/core/footer-data-provider.d.ts.map +0 -1
  711. package/dist/core/footer-data-provider.js.map +0 -1
  712. package/dist/core/git-command.d.ts.map +0 -1
  713. package/dist/core/git-command.js.map +0 -1
  714. package/dist/core/http-dispatcher.d.ts.map +0 -1
  715. package/dist/core/http-dispatcher.js.map +0 -1
  716. package/dist/core/index.d.ts.map +0 -1
  717. package/dist/core/index.js.map +0 -1
  718. package/dist/core/keybindings.d.ts.map +0 -1
  719. package/dist/core/keybindings.js.map +0 -1
  720. package/dist/core/llama/client.d.ts.map +0 -1
  721. package/dist/core/llama/client.js.map +0 -1
  722. package/dist/core/llama/huggingface.d.ts.map +0 -1
  723. package/dist/core/llama/huggingface.js.map +0 -1
  724. package/dist/core/llama/index.d.ts.map +0 -1
  725. package/dist/core/llama/index.js.map +0 -1
  726. package/dist/core/llama/provider.d.ts.map +0 -1
  727. package/dist/core/llama/provider.js.map +0 -1
  728. package/dist/core/llama/ui.d.ts.map +0 -1
  729. package/dist/core/llama/ui.js.map +0 -1
  730. package/dist/core/messages.d.ts.map +0 -1
  731. package/dist/core/messages.js.map +0 -1
  732. package/dist/core/model-config.d.ts.map +0 -1
  733. package/dist/core/model-config.js.map +0 -1
  734. package/dist/core/model-registry.d.ts.map +0 -1
  735. package/dist/core/model-registry.js.map +0 -1
  736. package/dist/core/model-resolver.d.ts.map +0 -1
  737. package/dist/core/model-resolver.js.map +0 -1
  738. package/dist/core/model-runtime.d.ts.map +0 -1
  739. package/dist/core/model-runtime.js.map +0 -1
  740. package/dist/core/models-store.d.ts.map +0 -1
  741. package/dist/core/models-store.js.map +0 -1
  742. package/dist/core/output-guard.d.ts.map +0 -1
  743. package/dist/core/output-guard.js.map +0 -1
  744. package/dist/core/package-manager.d.ts.map +0 -1
  745. package/dist/core/package-manager.js.map +0 -1
  746. package/dist/core/package-manager.test.d.ts.map +0 -1
  747. package/dist/core/package-manager.test.js.map +0 -1
  748. package/dist/core/project-trust.d.ts.map +0 -1
  749. package/dist/core/project-trust.js.map +0 -1
  750. package/dist/core/prompt-templates.d.ts.map +0 -1
  751. package/dist/core/prompt-templates.js.map +0 -1
  752. package/dist/core/provider-attribution.d.ts.map +0 -1
  753. package/dist/core/provider-attribution.js.map +0 -1
  754. package/dist/core/provider-composer.d.ts.map +0 -1
  755. package/dist/core/provider-composer.js.map +0 -1
  756. package/dist/core/radius.d.ts.map +0 -1
  757. package/dist/core/radius.js.map +0 -1
  758. package/dist/core/remote-catalog-provider.d.ts.map +0 -1
  759. package/dist/core/remote-catalog-provider.js.map +0 -1
  760. package/dist/core/resolve-config-value.d.ts.map +0 -1
  761. package/dist/core/resolve-config-value.js.map +0 -1
  762. package/dist/core/resource-loader.d.ts.map +0 -1
  763. package/dist/core/resource-loader.js.map +0 -1
  764. package/dist/core/runtime-credentials.d.ts.map +0 -1
  765. package/dist/core/runtime-credentials.js.map +0 -1
  766. package/dist/core/sdk.d.ts.map +0 -1
  767. package/dist/core/sdk.js.map +0 -1
  768. package/dist/core/session-cwd.d.ts.map +0 -1
  769. package/dist/core/session-cwd.js.map +0 -1
  770. package/dist/core/session-manager.d.ts.map +0 -1
  771. package/dist/core/session-manager.js.map +0 -1
  772. package/dist/core/settings-manager-auto-handoff.test.d.ts.map +0 -1
  773. package/dist/core/settings-manager-auto-handoff.test.js.map +0 -1
  774. package/dist/core/settings-manager.d.ts.map +0 -1
  775. package/dist/core/settings-manager.js.map +0 -1
  776. package/dist/core/skills.d.ts.map +0 -1
  777. package/dist/core/skills.js.map +0 -1
  778. package/dist/core/slash-commands.d.ts.map +0 -1
  779. package/dist/core/slash-commands.js.map +0 -1
  780. package/dist/core/source-info.d.ts.map +0 -1
  781. package/dist/core/source-info.js.map +0 -1
  782. package/dist/core/system-prompt.d.ts.map +0 -1
  783. package/dist/core/system-prompt.js.map +0 -1
  784. package/dist/core/system-prompt.test.d.ts.map +0 -1
  785. package/dist/core/system-prompt.test.js.map +0 -1
  786. package/dist/core/telemetry.d.ts.map +0 -1
  787. package/dist/core/telemetry.js.map +0 -1
  788. package/dist/core/timings.d.ts.map +0 -1
  789. package/dist/core/timings.js.map +0 -1
  790. package/dist/core/tools/bash.d.ts.map +0 -1
  791. package/dist/core/tools/bash.js.map +0 -1
  792. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  793. package/dist/core/tools/edit-diff.js.map +0 -1
  794. package/dist/core/tools/edit.d.ts.map +0 -1
  795. package/dist/core/tools/edit.js.map +0 -1
  796. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  797. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  798. package/dist/core/tools/find.d.ts.map +0 -1
  799. package/dist/core/tools/find.js.map +0 -1
  800. package/dist/core/tools/grep.d.ts.map +0 -1
  801. package/dist/core/tools/grep.js.map +0 -1
  802. package/dist/core/tools/index.d.ts.map +0 -1
  803. package/dist/core/tools/index.js.map +0 -1
  804. package/dist/core/tools/ls.d.ts.map +0 -1
  805. package/dist/core/tools/ls.js.map +0 -1
  806. package/dist/core/tools/output-accumulator.d.ts.map +0 -1
  807. package/dist/core/tools/output-accumulator.js.map +0 -1
  808. package/dist/core/tools/path-utils.d.ts.map +0 -1
  809. package/dist/core/tools/path-utils.js.map +0 -1
  810. package/dist/core/tools/read.d.ts.map +0 -1
  811. package/dist/core/tools/read.js.map +0 -1
  812. package/dist/core/tools/render-utils.d.ts.map +0 -1
  813. package/dist/core/tools/render-utils.js.map +0 -1
  814. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  815. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  816. package/dist/core/tools/truncate.d.ts.map +0 -1
  817. package/dist/core/tools/truncate.js.map +0 -1
  818. package/dist/core/tools/write.d.ts.map +0 -1
  819. package/dist/core/tools/write.js.map +0 -1
  820. package/dist/core/trust-manager.d.ts.map +0 -1
  821. package/dist/core/trust-manager.js.map +0 -1
  822. package/dist/core/usage-totals.d.ts.map +0 -1
  823. package/dist/core/usage-totals.js.map +0 -1
  824. package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  825. package/dist/extensions/pi-subagents/test/unit/slash-chain-groups.test.ts +0 -464
  826. package/dist/index.d.ts.map +0 -1
  827. package/dist/index.js.map +0 -1
  828. package/dist/main.d.ts.map +0 -1
  829. package/dist/main.js.map +0 -1
  830. package/dist/migrations.d.ts.map +0 -1
  831. package/dist/migrations.js.map +0 -1
  832. package/dist/modes/index.d.ts.map +0 -1
  833. package/dist/modes/index.js.map +0 -1
  834. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  835. package/dist/modes/interactive/components/armin.js.map +0 -1
  836. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  837. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  838. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  839. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  840. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  841. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  842. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  843. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  844. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  845. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  846. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  847. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  848. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  849. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  850. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  851. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  852. package/dist/modes/interactive/components/custom-entry.d.ts.map +0 -1
  853. package/dist/modes/interactive/components/custom-entry.js.map +0 -1
  854. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  855. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  856. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  857. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  858. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  859. package/dist/modes/interactive/components/diff.js.map +0 -1
  860. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  861. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  862. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  863. package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  864. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  865. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  866. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  867. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  868. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  869. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  870. package/dist/modes/interactive/components/first-time-setup.d.ts.map +0 -1
  871. package/dist/modes/interactive/components/first-time-setup.js.map +0 -1
  872. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  873. package/dist/modes/interactive/components/footer.js.map +0 -1
  874. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  875. package/dist/modes/interactive/components/index.js.map +0 -1
  876. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  877. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  878. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  879. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  880. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  881. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  882. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  883. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  884. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  885. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  886. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  887. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  888. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  889. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  890. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  891. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  892. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  893. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  894. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  895. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  896. package/dist/modes/interactive/components/status-indicator.d.ts.map +0 -1
  897. package/dist/modes/interactive/components/status-indicator.js.map +0 -1
  898. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  899. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  900. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  901. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  902. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  903. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  904. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  905. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  906. package/dist/modes/interactive/components/trust-selector.d.ts.map +0 -1
  907. package/dist/modes/interactive/components/trust-selector.js.map +0 -1
  908. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  909. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  910. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  911. package/dist/modes/interactive/components/user-message.js.map +0 -1
  912. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  913. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  914. package/dist/modes/interactive/external-editor.d.ts.map +0 -1
  915. package/dist/modes/interactive/external-editor.js.map +0 -1
  916. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  917. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  918. package/dist/modes/interactive/model-search.d.ts.map +0 -1
  919. package/dist/modes/interactive/model-search.js.map +0 -1
  920. package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
  921. package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
  922. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  923. package/dist/modes/interactive/theme/theme.js.map +0 -1
  924. package/dist/modes/print-mode.d.ts.map +0 -1
  925. package/dist/modes/print-mode.js.map +0 -1
  926. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  927. package/dist/modes/rpc/jsonl.js.map +0 -1
  928. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  929. package/dist/modes/rpc/rpc-client.js.map +0 -1
  930. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  931. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  932. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  933. package/dist/modes/rpc/rpc-types.js.map +0 -1
  934. package/dist/package-manager-cli.d.ts.map +0 -1
  935. package/dist/package-manager-cli.js.map +0 -1
  936. package/dist/rpc-entry.d.ts.map +0 -1
  937. package/dist/rpc-entry.js.map +0 -1
  938. package/dist/utils/ansi.d.ts.map +0 -1
  939. package/dist/utils/ansi.js.map +0 -1
  940. package/dist/utils/changelog.d.ts.map +0 -1
  941. package/dist/utils/changelog.js.map +0 -1
  942. package/dist/utils/child-process.d.ts.map +0 -1
  943. package/dist/utils/child-process.js.map +0 -1
  944. package/dist/utils/clipboard-image.d.ts.map +0 -1
  945. package/dist/utils/clipboard-image.js.map +0 -1
  946. package/dist/utils/clipboard-native.d.ts.map +0 -1
  947. package/dist/utils/clipboard-native.js.map +0 -1
  948. package/dist/utils/clipboard.d.ts.map +0 -1
  949. package/dist/utils/clipboard.js.map +0 -1
  950. package/dist/utils/deprecation.d.ts.map +0 -1
  951. package/dist/utils/deprecation.js.map +0 -1
  952. package/dist/utils/exif-orientation.d.ts.map +0 -1
  953. package/dist/utils/exif-orientation.js.map +0 -1
  954. package/dist/utils/frontmatter.d.ts.map +0 -1
  955. package/dist/utils/frontmatter.js.map +0 -1
  956. package/dist/utils/fs-watch.d.ts.map +0 -1
  957. package/dist/utils/fs-watch.js.map +0 -1
  958. package/dist/utils/git.d.ts.map +0 -1
  959. package/dist/utils/git.js.map +0 -1
  960. package/dist/utils/html.d.ts.map +0 -1
  961. package/dist/utils/html.js.map +0 -1
  962. package/dist/utils/image-convert.d.ts.map +0 -1
  963. package/dist/utils/image-convert.js.map +0 -1
  964. package/dist/utils/image-process.d.ts.map +0 -1
  965. package/dist/utils/image-process.js.map +0 -1
  966. package/dist/utils/image-resize-core.d.ts.map +0 -1
  967. package/dist/utils/image-resize-core.js.map +0 -1
  968. package/dist/utils/image-resize-worker.d.ts.map +0 -1
  969. package/dist/utils/image-resize-worker.js.map +0 -1
  970. package/dist/utils/image-resize.d.ts.map +0 -1
  971. package/dist/utils/image-resize.js.map +0 -1
  972. package/dist/utils/json.d.ts.map +0 -1
  973. package/dist/utils/json.js.map +0 -1
  974. package/dist/utils/mime.d.ts.map +0 -1
  975. package/dist/utils/mime.js.map +0 -1
  976. package/dist/utils/open-browser.d.ts.map +0 -1
  977. package/dist/utils/open-browser.js.map +0 -1
  978. package/dist/utils/paths.d.ts.map +0 -1
  979. package/dist/utils/paths.js.map +0 -1
  980. package/dist/utils/photon.d.ts.map +0 -1
  981. package/dist/utils/photon.js.map +0 -1
  982. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  983. package/dist/utils/pi-user-agent.js.map +0 -1
  984. package/dist/utils/shell.d.ts.map +0 -1
  985. package/dist/utils/shell.js.map +0 -1
  986. package/dist/utils/sleep.d.ts.map +0 -1
  987. package/dist/utils/sleep.js.map +0 -1
  988. package/dist/utils/syntax-highlight.d.ts.map +0 -1
  989. package/dist/utils/syntax-highlight.js.map +0 -1
  990. package/dist/utils/thinking-tags.d.ts.map +0 -1
  991. package/dist/utils/thinking-tags.js.map +0 -1
  992. package/dist/utils/tools-manager.d.ts.map +0 -1
  993. package/dist/utils/tools-manager.js.map +0 -1
  994. package/dist/utils/version-check.d.ts.map +0 -1
  995. package/dist/utils/version-check.js.map +0 -1
  996. package/dist/utils/windows-self-update.d.ts.map +0 -1
  997. package/dist/utils/windows-self-update.js.map +0 -1
@@ -6,7 +6,7 @@ import { afterEach, describe, it } from "node:test";
6
6
  import { handleManagementAction } from "../../src/agents/agent-management.ts";
7
7
  import { serializeAgent } from "../../src/agents/agent-serializer.ts";
8
8
  import { parseChain, serializeChain } from "../../src/agents/chain-serializer.ts";
9
- import { BUILTIN_AGENT_NAMES, discoverAgents, discoverAgentsAll, type AgentConfig } from "../../src/agents/agents.ts";
9
+ import { discoverAgents, discoverAgentsAll, type AgentConfig } from "../../src/agents/agents.ts";
10
10
  import { parseFrontmatter } from "../../src/agents/frontmatter.ts";
11
11
  import { buildPiArgs } from "../../src/runs/shared/pi-args.ts";
12
12
  import { THINKING_LEVELS } from "../../src/shared/model-info.ts";
@@ -60,7 +60,7 @@ describe("folded frontmatter blocks", () => {
60
60
  it("folds ordinary lines and paragraph breaks for > and >-", () => {
61
61
  const expected = "first line second line\nthird line";
62
62
  const folded = parseFrontmatter(`---
63
- name: worker
63
+ name: builder
64
64
  description: >
65
65
  first line
66
66
  second line
@@ -69,7 +69,7 @@ description: >
69
69
  ---
70
70
  body`);
71
71
  const stripped = parseFrontmatter(`---
72
- name: worker
72
+ name: builder
73
73
  description: >-
74
74
  first line
75
75
  second line
@@ -80,7 +80,7 @@ body`);
80
80
 
81
81
  assert.equal(folded.frontmatter.description, expected);
82
82
  assert.equal(stripped.frontmatter.description, expected);
83
- assert.equal(folded.frontmatter.name, "worker");
83
+ assert.equal(folded.frontmatter.name, "builder");
84
84
  });
85
85
 
86
86
  it("keeps quoted indicators as literal values", () => {
@@ -105,12 +105,12 @@ description: >
105
105
 
106
106
  ${" ".repeat(3)}
107
107
  second
108
- name: worker
108
+ name: builder
109
109
  ---
110
110
  body`);
111
111
 
112
112
  assert.equal(parsed.frontmatter.description, "normal\n code\nnext\nfirst\n\nsecond");
113
- assert.equal(parsed.frontmatter.name, "worker");
113
+ assert.equal(parsed.frontmatter.name, "builder");
114
114
  });
115
115
 
116
116
  it("keeps paragraph breaks adjacent to more-indented lines", () => {
@@ -136,20 +136,63 @@ body`);
136
136
  });
137
137
  });
138
138
 
139
+ describe("agent runner frontmatter", () => {
140
+ it("parses and serializes an external-cli runner", () => withTempHome(() => {
141
+ const project = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-runner-agent-"));
142
+ tempDirs.push(project);
143
+ writeAgent(path.join(project, ".selesai", "agents", "external.md"), `---
144
+ name: external
145
+ description: External runner
146
+ runner:
147
+ type: external-cli
148
+ command: ${JSON.stringify(process.execPath)}
149
+ args: ["-e", "process.stdin.pipe(process.stdout)"]
150
+ promptDelivery: stdin
151
+ async: true
152
+ ---
153
+ Review carefully.`.replace(" description:", "description:"));
154
+
155
+ const external = discoverAgents(project, "project").agents.find((agent) => agent.name === "external")!;
156
+ assert.deepEqual(external.runner, { type: "external-cli", command: process.execPath, args: ["-e", "process.stdin.pipe(process.stdout)"], promptDelivery: "stdin" });
157
+ assert.match(serializeAgent(external), /runner:\n type: external-cli\n command:/);
158
+ assert.deepEqual(discoverAgents(project, "project").agents.find((agent) => agent.name === "external")?.runner, external.runner);
159
+ }));
160
+
161
+ it("rejects invalid and Pi-only external runner fields", () => withTempHome(() => {
162
+ const invalidCases = [
163
+ "type: unknown\n command: node",
164
+ "type: external-cli\n command: ''",
165
+ "type: external-cli\n command: node\n args: nope",
166
+ "type: external-cli\n command: node\n args: [ok, 1]",
167
+ "type: external-cli\n command: node\n promptDelivery: argv",
168
+ ];
169
+ for (const [index, runner] of invalidCases.entries()) {
170
+ const project = fs.mkdtempSync(path.join(os.tmpdir(), `pi-subagents-invalid-runner-${index}-`));
171
+ tempDirs.push(project);
172
+ writeAgent(path.join(project, ".selesai", "agents", "external.md"), `---\nname: external\ndescription: External\nrunner:\n ${runner}\n---\nBody`);
173
+ assert.throws(() => discoverAgents(project, "project"), /invalid runner\.type|non-empty command|args must be an array of strings|promptDelivery must be 'stdin'/);
174
+ }
175
+ const project = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-runner-pi-only-"));
176
+ tempDirs.push(project);
177
+ writeAgent(path.join(project, ".selesai", "agents", "external.md"), `---\nname: external\ndescription: External\nrunner:\n type: external-cli\n command: node\nmodel: provider/model\n---\nBody`);
178
+ assert.throws(() => discoverAgents(project, "project"), /unsupported Pi-only fields: model/);
179
+ }));
180
+ });
181
+
139
182
  describe("agent skillPath frontmatter", () => {
140
183
  it("parses and serializes comma-separated paths", () => withTempHome(() => {
141
184
  const project = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-skill-path-agent-"));
142
185
  tempDirs.push(project);
143
- writeAgent(path.join(project, ".selesai", "agents", "worker.md"), `---
144
- name: worker
186
+ writeAgent(path.join(project, ".selesai", "agents", "builder.md"), `---
187
+ name: builder
145
188
  description: Worker
146
189
  skillPath: ./skills, ../shared-skills
147
190
  ---
148
191
  body`);
149
192
 
150
- const worker = discoverAgents(project, "both").agents.find((agent) => agent.name === "worker")!;
151
- assert.deepEqual(worker.skillPath, ["./skills", "../shared-skills"]);
152
- assert.match(serializeAgent(worker), /^skillPath: \.\/skills, \.\.\/shared-skills$/m);
193
+ const builder = discoverAgents(project, "both").agents.find((agent) => agent.name === "builder")!;
194
+ assert.deepEqual(builder.skillPath, ["./skills", "../shared-skills"]);
195
+ assert.match(serializeAgent(builder), /^skillPath: \.\/skills, \.\.\/shared-skills$/m);
153
196
  }));
154
197
  });
155
198
 
@@ -157,20 +200,20 @@ describe("agent aliases", () => {
157
200
  it("parses and serializes agent aliases", () => withTempHome(() => {
158
201
  const project = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-alias-agent-"));
159
202
  tempDirs.push(project);
160
- writeAgent(path.join(project, ".selesai", "agents", "worker.md"), `---
161
- name: worker
203
+ writeAgent(path.join(project, ".selesai", "agents", "builder.md"), `---
204
+ name: builder
162
205
  description: Worker
163
- aliases: shipper, tester, worker
206
+ aliases: developer, coder, builder
164
207
  ---
165
208
  body`);
166
209
 
167
- const worker = discoverAgents(project, "both").agents.find((agent) => agent.name === "worker")!;
168
- assert.deepEqual(worker.aliases, ["shipper", "tester"]);
169
- assert.match(serializeAgent(worker), /^aliases: shipper, tester$/m);
210
+ const builder = discoverAgents(project, "both").agents.find((agent) => agent.name === "builder")!;
211
+ assert.deepEqual(builder.aliases, ["developer", "coder"]);
212
+ assert.match(serializeAgent(builder), /^aliases: developer, coder$/m);
170
213
 
171
214
  const ctx = { cwd: project, modelRegistry: { getAvailable: () => [] } };
172
- assert.match(handleManagementAction("list", {}, ctx).content[0]?.text ?? "", /aliases: shipper, tester/);
173
- assert.match(handleManagementAction("get", { agent: "shipper" }, ctx).content[0]?.text ?? "", /Agent: worker/);
215
+ assert.match(handleManagementAction("list", {}, ctx).content[0]?.text ?? "", /aliases: developer, coder/);
216
+ assert.match(handleManagementAction("get", { agent: "developer" }, ctx).content[0]?.text ?? "", /Agent: builder/);
174
217
  }));
175
218
 
176
219
  it("reports management alias collisions as ambiguous", () => withTempHome(() => {
@@ -178,7 +221,7 @@ body`);
178
221
  tempDirs.push(project);
179
222
  writeAgent(path.join(project, ".selesai", "agents", "review-agent.md"), `---
180
223
  name: review-agent
181
- description: Custom reviewer
224
+ description: Custom commentator
182
225
  aliases: developer
183
226
  ---
184
227
  body`);
@@ -186,7 +229,7 @@ body`);
186
229
  const ctx = { cwd: project, modelRegistry: { getAvailable: () => [] } };
187
230
  const getResult = handleManagementAction("get", { agent: "developer" }, ctx);
188
231
  assert.equal(getResult.isError, true);
189
- assert.match(getResult.content[0]?.text ?? "", /Ambiguous agent alias or name 'developer': builder, review-agent|Ambiguous agent alias or name 'developer': review-agent, builder/);
232
+ assert.match(getResult.content[0]?.text ?? "", /Ambiguous agent alias or name 'developer': (?:review-agent, builder|builder, review-agent)/);
190
233
 
191
234
  const disableResult = handleManagementAction("disable", { agent: "developer" }, ctx);
192
235
  assert.equal(disableResult.isError, true);
@@ -198,8 +241,8 @@ describe("agent simple-scalar list frontmatter", () => {
198
241
  it("discovers newline block lists for all list fields and routes MCP tools", () => {
199
242
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-block-list-frontmatter-"));
200
243
  tempDirs.push(dir);
201
- writeAgent(path.join(dir, ".selesai", "agents", "worker.md"), `---
202
- name: worker
244
+ writeAgent(path.join(dir, ".selesai", "agents", "builder.md"), `---
245
+ name: builder
203
246
  description: Worker
204
247
  tools:
205
248
  - read-only
@@ -227,15 +270,15 @@ subagentOnlyExtensions:
227
270
  Do work
228
271
  `);
229
272
 
230
- const worker = discoverAgents(dir, "project").agents.find((agent) => agent.name === "worker");
231
- assert.deepEqual(worker?.tools, ["read-only"]);
232
- assert.deepEqual(worker?.mcpDirectTools, ["github/search_repositories"]);
233
- assert.deepEqual(worker?.defaultReads, ["input-one.md", "input-two.md"]);
234
- assert.deepEqual(worker?.skills, ["review-checklist", "safe-bash"]);
235
- assert.deepEqual(worker?.skillPath, ["./private-skills", "../shared-skills"]);
236
- assert.deepEqual(worker?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
237
- assert.deepEqual(worker?.extensions, ["./extension-one.ts", "./extension-two.ts"]);
238
- assert.deepEqual(worker?.subagentOnlyExtensions, ["./child-only.ts", "./child-helper.ts"]);
273
+ const builder = discoverAgents(dir, "project").agents.find((agent) => agent.name === "builder");
274
+ assert.deepEqual(builder?.tools, ["read-only"]);
275
+ assert.deepEqual(builder?.mcpDirectTools, ["github/search_repositories"]);
276
+ assert.deepEqual(builder?.defaultReads, ["input-one.md", "input-two.md"]);
277
+ assert.deepEqual(builder?.skills, ["review-checklist", "safe-bash"]);
278
+ assert.deepEqual(builder?.skillPath, ["./private-skills", "../shared-skills"]);
279
+ assert.deepEqual(builder?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
280
+ assert.deepEqual(builder?.extensions, ["./extension-one.ts", "./extension-two.ts"]);
281
+ assert.deepEqual(builder?.subagentOnlyExtensions, ["./child-only.ts", "./child-helper.ts"]);
239
282
  });
240
283
 
241
284
  it("preserves MCP-only tools as an explicit empty builtin allowlist", () => {
@@ -259,8 +302,8 @@ Do MCP work
259
302
  it("preserves comma-separated syntax across all list fields", () => {
260
303
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-comma-list-frontmatter-"));
261
304
  tempDirs.push(dir);
262
- writeAgent(path.join(dir, ".selesai", "agents", "worker.md"), `---
263
- name: worker
305
+ writeAgent(path.join(dir, ".selesai", "agents", "builder.md"), `---
306
+ name: builder
264
307
  description: Worker
265
308
  tools: read-only, mcp:github/search_repositories
266
309
  defaultReads: input-one.md, input-two.md
@@ -274,63 +317,67 @@ subagentOnlyExtensions: ./child-only.ts, ./child-helper.ts
274
317
  Do work
275
318
  `);
276
319
 
277
- const worker = discoverAgents(dir, "project").agents.find((agent) => agent.name === "worker");
278
- assert.deepEqual(worker?.tools, ["read-only"]);
279
- assert.deepEqual(worker?.mcpDirectTools, ["github/search_repositories"]);
280
- assert.deepEqual(worker?.defaultReads, ["input-one.md", "input-two.md"]);
281
- assert.deepEqual(worker?.skills, ["review-checklist", "safe-bash"]);
282
- assert.deepEqual(worker?.skillPath, ["./private-skills", "../shared-skills"]);
283
- assert.deepEqual(worker?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
284
- assert.deepEqual(worker?.extensions, ["./extension-one.ts", "./extension-two.ts"]);
285
- assert.deepEqual(worker?.subagentOnlyExtensions, ["./child-only.ts", "./child-helper.ts"]);
320
+ const builder = discoverAgents(dir, "project").agents.find((agent) => agent.name === "builder");
321
+ assert.deepEqual(builder?.tools, ["read-only"]);
322
+ assert.deepEqual(builder?.mcpDirectTools, ["github/search_repositories"]);
323
+ assert.deepEqual(builder?.defaultReads, ["input-one.md", "input-two.md"]);
324
+ assert.deepEqual(builder?.skills, ["review-checklist", "safe-bash"]);
325
+ assert.deepEqual(builder?.skillPath, ["./private-skills", "../shared-skills"]);
326
+ assert.deepEqual(builder?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
327
+ assert.deepEqual(builder?.extensions, ["./extension-one.ts", "./extension-two.ts"]);
328
+ assert.deepEqual(builder?.subagentOnlyExtensions, ["./child-only.ts", "./child-helper.ts"]);
286
329
  });
287
330
  });
288
331
 
289
332
  describe("agent permission frontmatter", () => {
290
- it("preserves nested permission YAML blocks through discovery and serialization", () => {
333
+ it("parses and preserves explicit non-bash permission rules", () => {
291
334
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-permission-frontmatter-"));
292
335
  tempDirs.push(dir);
293
336
  const agentsDir = path.join(dir, ".selesai", "agents");
294
337
  fs.mkdirSync(agentsDir, { recursive: true });
295
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
296
- name: worker
338
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
339
+ name: builder
297
340
  description: Worker
298
341
  tools: bash,read,write
299
342
  permission:
300
- "*": ask
301
343
  read: allow
302
- bash:
303
- "*": ask
304
- "git *": allow
344
+ write: ask
345
+ edit: deny
305
346
  ---
306
347
 
307
348
  Do work
308
349
  `, "utf-8");
309
350
 
310
- const result = discoverAgents(dir, "project");
311
- const worker = result.agents.find((agent) => agent.name === "worker");
312
- assert.equal(worker?.extraFields?.permission, `"*": ask
313
- read: allow
314
- bash:
315
- "*": ask
316
- "git *": allow`);
317
-
318
- const serialized = serializeAgent(worker!);
319
- assert.match(serialized, /^permission:\n "\*": ask\n read: allow\n bash:\n "\*": ask\n "git \*": allow$/m);
351
+ const builder = discoverAgents(dir, "project").agents.find((agent) => agent.name === "builder");
352
+ assert.deepEqual(builder?.permissions, { read: "allow", write: "ask", edit: "deny" });
353
+ assert.equal(builder?.extraFields?.permission, undefined);
354
+ assert.match(serializeAgent(builder!), /^permissions:\n read: allow\n write: ask\n edit: deny$/m);
355
+ });
356
+
357
+ it("rejects bash permission rules and conflicting aliases", () => {
358
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-permission-invalid-"));
359
+ tempDirs.push(dir);
360
+ const agentsDir = path.join(dir, ".selesai", "agents");
361
+ fs.mkdirSync(agentsDir, { recursive: true });
362
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---\nname: builder\ndescription: Worker\npermission:\n bash: deny\n---\n`, "utf-8");
363
+ assert.throws(() => discoverAgents(dir, "project"), /pi-guard/);
364
+
365
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---\nname: builder\ndescription: Worker\npermission:\n write: ask\npermissions:\n edit: deny\n---\n`, "utf-8");
366
+ assert.throws(() => discoverAgents(dir, "project"), /cannot declare both permission and permissions/);
320
367
  });
321
368
  });
322
369
 
323
370
  describe("agent frontmatter defaultContext", () => {
324
371
  it("serializes defaultContext into agent frontmatter", () => {
325
372
  const agent: AgentConfig = {
326
- name: "worker",
373
+ name: "builder",
327
374
  description: "Worker",
328
375
  systemPrompt: "Do work",
329
376
  systemPromptMode: "replace",
330
377
  inheritProjectContext: true,
331
378
  inheritSkills: false,
332
379
  source: "project",
333
- filePath: "/tmp/worker.md",
380
+ filePath: "/tmp/builder.md",
334
381
  defaultContext: "fork",
335
382
  };
336
383
 
@@ -343,8 +390,8 @@ describe("agent frontmatter defaultContext", () => {
343
390
  tempDirs.push(dir);
344
391
  const agentsDir = path.join(dir, ".selesai", "agents");
345
392
  fs.mkdirSync(agentsDir, { recursive: true });
346
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
347
- name: worker
393
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
394
+ name: builder
348
395
  description: Worker
349
396
  defaultContext: fork
350
397
  ---
@@ -353,59 +400,18 @@ Do work
353
400
  `, "utf-8");
354
401
 
355
402
  const result = discoverAgents(dir, "project");
356
- const worker = result.agents.find((agent) => agent.name === "worker");
357
- assert.equal(worker?.defaultContext, "fork");
403
+ const builder = result.agents.find((agent) => agent.name === "builder");
404
+ assert.equal(builder?.defaultContext, "fork");
358
405
  });
359
406
 
360
- it("loads builtin agents with the authoritative six-agent defaultContext map", () => {
407
+ it("loads bundled architect, builder, and commentator context defaults", () => {
361
408
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-default-context-"));
362
409
  tempDirs.push(dir);
363
410
  const agents = discoverAgentsAll(dir).builtin;
364
411
 
365
- const expected: Record<string, "fresh" | "fork"> = {
366
- architect: "fork",
367
- recapper: "fork",
368
- builder: "fresh",
369
- commentator: "fresh",
370
- explorer: "fresh",
371
- researcher: "fresh",
372
- };
373
- assert.deepEqual(
374
- agents.map((agent) => agent.name).sort(),
375
- [...BUILTIN_AGENT_NAMES].sort(),
376
- );
377
- for (const [name, context] of Object.entries(expected)) {
378
- const agent = agents.find((candidate) => candidate.name === name);
379
- assert.equal(agent?.defaultContext, context, `${name} should default to ${context} context`);
380
- }
381
- });
382
- });
383
-
384
- describe("bundled agent descriptions and acceptance roles", () => {
385
- it("survives discovery with declared descriptions and acceptance roles", () => {
386
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-bundled-catalog-roles-"));
387
- tempDirs.push(dir);
388
- const agents = discoverAgentsAll(dir).builtin;
389
-
390
- const expected: Record<string, { description: string; acceptanceRole: "read-only" | "writer" }> = {
391
- architect: { description: "Read-only architecture and implementation planning", acceptanceRole: "read-only" },
392
- builder: { description: "Mutation-capable scoped implementation", acceptanceRole: "writer" },
393
- commentator: { description: "Read-only evidence-based review", acceptanceRole: "read-only" },
394
- explorer: { description: "Read-only local codebase reconnaissance", acceptanceRole: "read-only" },
395
- recapper: { description: "Read-only handoff and context synthesis", acceptanceRole: "read-only" },
396
- researcher: { description: "Read-only external and code-first research", acceptanceRole: "read-only" },
397
- };
398
-
399
- assert.deepEqual(
400
- agents.map((agent) => agent.name).sort(),
401
- [...BUILTIN_AGENT_NAMES].sort(),
402
- );
403
- for (const [name, expectedEntry] of Object.entries(expected)) {
404
- const agent = agents.find((candidate) => candidate.name === name);
405
- assert.ok(agent, `bundled agent ${name} not discovered`);
406
- assert.equal(agent.description, expectedEntry.description, `${name} description`);
407
- assert.equal(agent.acceptanceRole, expectedEntry.acceptanceRole, `${name} acceptanceRole`);
408
- }
412
+ assert.equal(agents.find((candidate) => candidate.name === "architect")?.defaultContext, "fork");
413
+ assert.equal(agents.find((candidate) => candidate.name === "builder")?.defaultContext, "fresh");
414
+ assert.equal(agents.find((candidate) => candidate.name === "commentator")?.defaultContext, "fresh");
409
415
  });
410
416
  });
411
417
 
@@ -413,9 +419,9 @@ describe("agent frontmatter launch defaults", () => {
413
419
  it("serializes and discovers single-agent launch defaults", () => {
414
420
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-launch-defaults-"));
415
421
  tempDirs.push(dir);
416
- const filePath = path.join(dir, ".selesai", "agents", "worker.md");
422
+ const filePath = path.join(dir, ".selesai", "agents", "builder.md");
417
423
  const agent: AgentConfig = {
418
- name: "worker",
424
+ name: "builder",
419
425
  description: "Worker",
420
426
  systemPrompt: "Do work",
421
427
  systemPromptMode: "replace",
@@ -436,29 +442,29 @@ describe("agent frontmatter launch defaults", () => {
436
442
  assert.match(serialized, /^acceptance: \{"level":"none","reason":"lightweight lookup"\}$/m);
437
443
  writeAgent(filePath, serialized);
438
444
 
439
- const worker = discoverAgents(dir, "project").agents.find((candidate) => candidate.name === "worker");
440
- assert.equal(worker?.defaultAsync, false);
441
- assert.equal(worker?.defaultTimeoutMs, 90_000);
442
- assert.deepEqual(worker?.defaultTurnBudget, { maxTurns: 12, graceTurns: 2 });
443
- assert.deepEqual(worker?.defaultAcceptance, { level: "none", reason: "lightweight lookup" });
445
+ const builder = discoverAgents(dir, "project").agents.find((candidate) => candidate.name === "builder");
446
+ assert.equal(builder?.defaultAsync, false);
447
+ assert.equal(builder?.defaultTimeoutMs, 90_000);
448
+ assert.deepEqual(builder?.defaultTurnBudget, { maxTurns: 12, graceTurns: 2 });
449
+ assert.deepEqual(builder?.defaultAcceptance, { level: "none", reason: "lightweight lookup" });
444
450
  });
445
451
 
446
452
  it("parses scalar acceptance defaults and rejects invalid policies", () => {
447
453
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-acceptance-defaults-"));
448
454
  tempDirs.push(dir);
449
- const filePath = path.join(dir, ".selesai", "agents", "worker.md");
455
+ const filePath = path.join(dir, ".selesai", "agents", "builder.md");
450
456
  writeAgent(filePath, `---
451
- name: worker
457
+ name: builder
452
458
  description: Worker
453
459
  acceptance: checked
454
460
  ---
455
461
 
456
462
  Do work
457
463
  `);
458
- assert.equal(discoverAgents(dir, "project").agents.find((agent) => agent.name === "worker")?.defaultAcceptance, "checked");
464
+ assert.equal(discoverAgents(dir, "project").agents.find((agent) => agent.name === "builder")?.defaultAcceptance, "checked");
459
465
 
460
466
  writeAgent(filePath, `---
461
- name: worker
467
+ name: builder
462
468
  description: Worker
463
469
  acceptance: { level: "none", reason: "NA" }
464
470
  ---
@@ -466,12 +472,12 @@ acceptance: { level: "none", reason: "NA" }
466
472
  Do work
467
473
  `);
468
474
  assert.deepEqual(
469
- discoverAgents(dir, "project").agents.find((agent) => agent.name === "worker")?.defaultAcceptance,
475
+ discoverAgents(dir, "project").agents.find((agent) => agent.name === "builder")?.defaultAcceptance,
470
476
  { level: "none", reason: "NA" },
471
477
  );
472
478
 
473
479
  writeAgent(filePath, `---
474
- name: worker
480
+ name: builder
475
481
  description: Worker
476
482
  acceptance: none
477
483
  ---
@@ -480,7 +486,7 @@ Do work
480
486
  `);
481
487
  assert.throws(
482
488
  () => discoverAgents(dir, "project"),
483
- /Agent 'worker' acceptance frontmatter level "none" requires a reason/,
489
+ /Agent 'builder' acceptance frontmatter level "none" requires a reason/,
484
490
  );
485
491
  });
486
492
 
@@ -519,8 +525,8 @@ Explore the codebase
519
525
  it("rejects invalid launch defaults instead of silently ignoring them", () => {
520
526
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-invalid-launch-defaults-"));
521
527
  tempDirs.push(dir);
522
- writeAgent(path.join(dir, ".selesai", "agents", "worker.md"), `---
523
- name: worker
528
+ writeAgent(path.join(dir, ".selesai", "agents", "builder.md"), `---
529
+ name: builder
524
530
  description: Worker
525
531
  async: sometimes
526
532
  ---
@@ -530,7 +536,7 @@ Do work
530
536
 
531
537
  assert.throws(
532
538
  () => discoverAgents(dir, "project"),
533
- /Agent 'worker' has invalid async frontmatter; expected true or false/,
539
+ /Agent 'builder' has invalid async frontmatter; expected true or false/,
534
540
  );
535
541
  });
536
542
  });
@@ -546,7 +552,7 @@ name: dynamic-review
546
552
  description: Markdown fallback
547
553
  ---
548
554
 
549
- ## scout
555
+ ## explorer
550
556
 
551
557
  Run the markdown chain
552
558
  `, "utf-8");
@@ -555,14 +561,14 @@ Run the markdown chain
555
561
  description: "JSON dynamic chain",
556
562
  chain: [
557
563
  {
558
- agent: "scout",
564
+ agent: "explorer",
559
565
  task: "Return targets",
560
566
  as: "targets",
561
567
  outputSchema: { type: "object" },
562
568
  },
563
569
  {
564
570
  expand: { from: { output: "targets", path: "/items" }, maxItems: 4 },
565
- parallel: { agent: "reviewer", task: "Review {item.path}" },
571
+ parallel: { agent: "commentator", task: "Review {item.path}" },
566
572
  collect: { as: "reviews" },
567
573
  },
568
574
  ],
@@ -588,8 +594,8 @@ describe("package-provided agents and chains", () => {
588
594
  agents: ["./agents"],
589
595
  },
590
596
  });
591
- writeAgent(path.join(workflowRoot, "agents", "reviewer.md"), `---
592
- name: reviewer
597
+ writeAgent(path.join(workflowRoot, "agents", "commentator.md"), `---
598
+ name: commentator
593
599
  package: my-workflow
594
600
  description: Review changes for this workflow.
595
601
  ---
@@ -610,22 +616,22 @@ package: my-workflow
610
616
  description: Run workflow review.
611
617
  ---
612
618
 
613
- ## my-workflow.reviewer
619
+ ## my-workflow.commentator
614
620
 
615
621
  Review the task.
616
622
  `);
617
623
 
618
624
  const all = discoverAgentsAll(dir);
619
- const packagedAgent = all.package.find((agent) => agent.name === "my-workflow.reviewer");
625
+ const packagedAgent = all.package.find((agent) => agent.name === "my-workflow.commentator");
620
626
  assert.ok(packagedAgent);
621
627
  assert.equal(packagedAgent.source, "package");
622
- assert.equal(packagedAgent.filePath, path.join(workflowRoot, "agents", "reviewer.md"));
623
- assert.equal(discoverAgents(dir, "both").agents.find((agent) => agent.name === "my-workflow.reviewer")?.source, "package");
628
+ assert.equal(packagedAgent.filePath, path.join(workflowRoot, "agents", "commentator.md"));
629
+ assert.equal(discoverAgents(dir, "both").agents.find((agent) => agent.name === "my-workflow.commentator")?.source, "package");
624
630
 
625
631
  const packagedChain = all.chains.find((chain) => chain.name === "my-workflow.review");
626
632
  assert.ok(packagedChain);
627
633
  assert.equal(packagedChain.source, "package");
628
- assert.equal(packagedChain.steps[0]?.agent, "my-workflow.reviewer");
634
+ assert.equal(packagedChain.steps[0]?.agent, "my-workflow.commentator");
629
635
  }));
630
636
 
631
637
  it("loads packages referenced from Pi settings", () => withTempHome(() => {
@@ -643,8 +649,8 @@ Review the task.
643
649
  },
644
650
  },
645
651
  });
646
- writeAgent(path.join(packageRoot, "agents", "planner.md"), `---
647
- name: planner
652
+ writeAgent(path.join(packageRoot, "agents", "architect.md"), `---
653
+ name: architect
648
654
  package: settings-workflow
649
655
  description: Plan from a settings-installed package.
650
656
  ---
@@ -652,7 +658,7 @@ description: Plan from a settings-installed package.
652
658
  Plan the work.
653
659
  `);
654
660
 
655
- const agent = discoverAgents(dir, "both").agents.find((candidate) => candidate.name === "settings-workflow.planner");
661
+ const agent = discoverAgents(dir, "both").agents.find((candidate) => candidate.name === "settings-workflow.architect");
656
662
  assert.ok(agent);
657
663
  assert.equal(agent.source, "package");
658
664
  }));
@@ -669,8 +675,8 @@ Plan the work.
669
675
  agents: ["./agents"],
670
676
  },
671
677
  });
672
- writeAgent(path.join(packageRoot, "agents", "reviewer.md"), `---
673
- name: reviewer
678
+ writeAgent(path.join(packageRoot, "agents", "commentator.md"), `---
679
+ name: commentator
674
680
  package: nested-workflow
675
681
  description: Review from a project package.
676
682
  ---
@@ -678,10 +684,10 @@ description: Review from a project package.
678
684
  Review nested project work.
679
685
  `);
680
686
 
681
- const agent = discoverAgents(nested, "both").agents.find((candidate) => candidate.name === "nested-workflow.reviewer");
687
+ const agent = discoverAgents(nested, "both").agents.find((candidate) => candidate.name === "nested-workflow.commentator");
682
688
  assert.ok(agent);
683
689
  assert.equal(agent.source, "package");
684
- assert.equal(agent.filePath, path.join(packageRoot, "agents", "reviewer.md"));
690
+ assert.equal(agent.filePath, path.join(packageRoot, "agents", "commentator.md"));
685
691
  }));
686
692
 
687
693
  it("keeps nearest project root discovery by default when a nested .pi exists", () => withTempHome(() => {
@@ -697,8 +703,8 @@ Review nested project work.
697
703
  name: "outer-workflow",
698
704
  "pi-subagents": { agents: ["./agents"] },
699
705
  });
700
- writeAgent(path.join(packageRoot, "agents", "planner.md"), `---
701
- name: planner
706
+ writeAgent(path.join(packageRoot, "agents", "architect.md"), `---
707
+ name: architect
702
708
  package: outer-workflow
703
709
  description: Plan from the outer project package.
704
710
  ---
@@ -706,7 +712,7 @@ description: Plan from the outer project package.
706
712
  Plan outer project work.
707
713
  `);
708
714
 
709
- const agent = discoverAgents(nested, "both").agents.find((candidate) => candidate.name === "outer-workflow.planner");
715
+ const agent = discoverAgents(nested, "both").agents.find((candidate) => candidate.name === "outer-workflow.architect");
710
716
  assert.equal(agent, undefined);
711
717
  }));
712
718
 
@@ -731,8 +737,8 @@ Plan outer project work.
731
737
  name: "outer-workflow",
732
738
  "pi-subagents": { agents: ["./agents"] },
733
739
  });
734
- writeAgent(path.join(packageRoot, "agents", "planner.md"), `---
735
- name: planner
740
+ writeAgent(path.join(packageRoot, "agents", "architect.md"), `---
741
+ name: architect
736
742
  package: outer-workflow
737
743
  description: Plan from the outer project package.
738
744
  ---
@@ -741,10 +747,10 @@ Plan outer project work.
741
747
  `);
742
748
 
743
749
  const agents = discoverAgents(nested, "both").agents;
744
- const packageAgent = agents.find((candidate) => candidate.name === "outer-workflow.planner");
750
+ const packageAgent = agents.find((candidate) => candidate.name === "outer-workflow.architect");
745
751
  assert.ok(packageAgent);
746
752
  assert.equal(packageAgent.source, "package");
747
- assert.equal(packageAgent.filePath, path.join(packageRoot, "agents", "planner.md"));
753
+ assert.equal(packageAgent.filePath, path.join(packageRoot, "agents", "architect.md"));
748
754
  const commentator = agents.find((candidate) => candidate.name === "commentator");
749
755
  assert.equal(commentator?.model, "openai/gpt-5.4");
750
756
  assert.equal(commentator?.override?.path, path.join(dir, ".selesai", "settings.json"));
@@ -877,42 +883,42 @@ Ignored
877
883
  chains: ["./chains"],
878
884
  },
879
885
  });
880
- writeAgent(path.join(packageRoot, "agents", "scout.md"), `---
881
- name: scout
882
- description: Package scout
886
+ writeAgent(path.join(packageRoot, "agents", "explorer.md"), `---
887
+ name: explorer
888
+ description: Package explorer
883
889
  ---
884
890
 
885
- Package scout.
891
+ Package explorer.
886
892
  `);
887
893
  writeAgent(path.join(packageRoot, "chains", "shared.chain.md"), `---
888
894
  name: shared
889
895
  description: Package chain
890
896
  ---
891
897
 
892
- ## scout
898
+ ## explorer
893
899
 
894
900
  Package chain.
895
901
  `);
896
- writeAgent(path.join(home, ".selesai", "agent", "agents", "scout.md"), `---
897
- name: scout
898
- description: User scout
902
+ writeAgent(path.join(home, ".selesai", "agent", "agents", "explorer.md"), `---
903
+ name: explorer
904
+ description: User explorer
899
905
  ---
900
906
 
901
- User scout.
907
+ User explorer.
902
908
  `);
903
- writeAgent(path.join(dir, ".selesai", "agents", "scout.md"), `---
904
- name: scout
905
- description: Project scout
909
+ writeAgent(path.join(dir, ".selesai", "agents", "explorer.md"), `---
910
+ name: explorer
911
+ description: Project explorer
906
912
  ---
907
913
 
908
- Project scout.
914
+ Project explorer.
909
915
  `);
910
916
  writeAgent(path.join(home, ".selesai", "agent", "chains", "shared.chain.md"), `---
911
917
  name: shared
912
918
  description: User chain
913
919
  ---
914
920
 
915
- ## scout
921
+ ## explorer
916
922
 
917
923
  User chain.
918
924
  `);
@@ -921,13 +927,13 @@ name: shared
921
927
  description: Project chain
922
928
  ---
923
929
 
924
- ## scout
930
+ ## explorer
925
931
 
926
932
  Project chain.
927
933
  `);
928
934
 
929
- assert.equal(discoverAgents(dir, "user").agents.find((agent) => agent.name === "scout")?.source, "user");
930
- assert.equal(discoverAgents(dir, "project").agents.find((agent) => agent.name === "scout")?.source, "project");
935
+ assert.equal(discoverAgents(dir, "user").agents.find((agent) => agent.name === "explorer")?.source, "user");
936
+ assert.equal(discoverAgents(dir, "project").agents.find((agent) => agent.name === "explorer")?.source, "project");
931
937
  const chainByName = new Map(discoverAgentsAll(dir).chains.map((chain) => [chain.name, chain]));
932
938
  assert.equal(chainByName.get("shared")?.source, "project");
933
939
  }));
@@ -942,17 +948,17 @@ Project chain.
942
948
  agents: ["./agents"],
943
949
  },
944
950
  });
945
- writeAgent(path.join(packageRoot, "agents", "reviewer.md"), `---
946
- name: reviewer
951
+ writeAgent(path.join(packageRoot, "agents", "commentator.md"), `---
952
+ name: commentator
947
953
  package: readonly-workflow
948
- description: Read-only package reviewer.
954
+ description: Read-only package commentator.
949
955
  ---
950
956
 
951
957
  Review only.
952
958
  `);
953
959
 
954
960
  const result = handleManagementAction("update", {
955
- agent: "readonly-workflow.reviewer",
961
+ agent: "readonly-workflow.commentator",
956
962
  config: { description: "Changed" },
957
963
  }, {
958
964
  cwd: dir,
@@ -1023,14 +1029,14 @@ Validate changes
1023
1029
  describe("agent frontmatter maxSubagentDepth", () => {
1024
1030
  it("serializes maxSubagentDepth into agent frontmatter", () => {
1025
1031
  const agent: AgentConfig = {
1026
- name: "scout",
1032
+ name: "explorer",
1027
1033
  description: "Scout",
1028
1034
  systemPrompt: "Inspect code",
1029
1035
  systemPromptMode: "replace",
1030
1036
  inheritProjectContext: false,
1031
1037
  inheritSkills: false,
1032
1038
  source: "project",
1033
- filePath: "/tmp/scout.md",
1039
+ filePath: "/tmp/explorer.md",
1034
1040
  maxSubagentDepth: 1,
1035
1041
  };
1036
1042
 
@@ -1043,8 +1049,8 @@ describe("agent frontmatter maxSubagentDepth", () => {
1043
1049
  tempDirs.push(dir);
1044
1050
  const agentsDir = path.join(dir, ".selesai", "agents");
1045
1051
  fs.mkdirSync(agentsDir, { recursive: true });
1046
- fs.writeFileSync(path.join(agentsDir, "scout.md"), `---
1047
- name: scout
1052
+ fs.writeFileSync(path.join(agentsDir, "explorer.md"), `---
1053
+ name: explorer
1048
1054
  description: Scout
1049
1055
  maxSubagentDepth: 1
1050
1056
  ---
@@ -1053,8 +1059,8 @@ Inspect code
1053
1059
  `, "utf-8");
1054
1060
 
1055
1061
  const result = discoverAgents(dir, "project");
1056
- const scout = result.agents.find((agent) => agent.name === "scout");
1057
- assert.equal(scout?.maxSubagentDepth, 1);
1062
+ const explorer = result.agents.find((agent) => agent.name === "explorer");
1063
+ assert.equal(explorer?.maxSubagentDepth, 1);
1058
1064
  });
1059
1065
  });
1060
1066
 
@@ -1128,14 +1134,14 @@ Do work
1128
1134
  describe("agent frontmatter fallbackModels", () => {
1129
1135
  it("serializes fallbackModels into agent frontmatter", () => {
1130
1136
  const agent: AgentConfig = {
1131
- name: "worker",
1137
+ name: "builder",
1132
1138
  description: "Worker",
1133
1139
  systemPrompt: "Do work",
1134
1140
  systemPromptMode: "replace",
1135
1141
  inheritProjectContext: false,
1136
1142
  inheritSkills: false,
1137
1143
  source: "project",
1138
- filePath: "/tmp/worker.md",
1144
+ filePath: "/tmp/builder.md",
1139
1145
  fallbackModels: ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"],
1140
1146
  };
1141
1147
 
@@ -1148,8 +1154,8 @@ describe("agent frontmatter fallbackModels", () => {
1148
1154
  tempDirs.push(dir);
1149
1155
  const agentsDir = path.join(dir, ".selesai", "agents");
1150
1156
  fs.mkdirSync(agentsDir, { recursive: true });
1151
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
1152
- name: worker
1157
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
1158
+ name: builder
1153
1159
  description: Worker
1154
1160
  fallbackModels: openai/gpt-5-mini, anthropic/claude-sonnet-4
1155
1161
  ---
@@ -1158,22 +1164,22 @@ Do work
1158
1164
  `, "utf-8");
1159
1165
 
1160
1166
  const result = discoverAgents(dir, "project");
1161
- const worker = result.agents.find((agent) => agent.name === "worker");
1162
- assert.deepEqual(worker?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
1167
+ const builder = result.agents.find((agent) => agent.name === "builder");
1168
+ assert.deepEqual(builder?.fallbackModels, ["openai/gpt-5-mini", "anthropic/claude-sonnet-4"]);
1163
1169
  });
1164
1170
  });
1165
1171
 
1166
1172
  describe("agent frontmatter systemPromptMode", () => {
1167
1173
  it("serializes systemPromptMode into agent frontmatter", () => {
1168
1174
  const agent: AgentConfig = {
1169
- name: "worker",
1175
+ name: "builder",
1170
1176
  description: "Worker",
1171
1177
  systemPrompt: "Do work",
1172
1178
  systemPromptMode: "replace",
1173
1179
  inheritProjectContext: false,
1174
1180
  inheritSkills: false,
1175
1181
  source: "project",
1176
- filePath: "/tmp/worker.md",
1182
+ filePath: "/tmp/builder.md",
1177
1183
  };
1178
1184
 
1179
1185
  const serialized = serializeAgent(agent);
@@ -1185,8 +1191,8 @@ describe("agent frontmatter systemPromptMode", () => {
1185
1191
  tempDirs.push(dir);
1186
1192
  const agentsDir = path.join(dir, ".selesai", "agents");
1187
1193
  fs.mkdirSync(agentsDir, { recursive: true });
1188
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
1189
- name: worker
1194
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
1195
+ name: builder
1190
1196
  description: Worker
1191
1197
  systemPromptMode: replace
1192
1198
  ---
@@ -1195,22 +1201,22 @@ Do work
1195
1201
  `, "utf-8");
1196
1202
 
1197
1203
  const result = discoverAgents(dir, "project");
1198
- const worker = result.agents.find((agent) => agent.name === "worker");
1199
- assert.equal(worker?.systemPromptMode, "replace");
1204
+ const builder = result.agents.find((agent) => agent.name === "builder");
1205
+ assert.equal(builder?.systemPromptMode, "replace");
1200
1206
  });
1201
1207
  });
1202
1208
 
1203
1209
  describe("agent frontmatter prompt inheritance flags", () => {
1204
1210
  it("serializes inheritProjectContext and inheritSkills into agent frontmatter", () => {
1205
1211
  const agent: AgentConfig = {
1206
- name: "worker",
1212
+ name: "builder",
1207
1213
  description: "Worker",
1208
1214
  systemPrompt: "Do work",
1209
1215
  systemPromptMode: "replace",
1210
1216
  inheritProjectContext: true,
1211
1217
  inheritSkills: true,
1212
1218
  source: "project",
1213
- filePath: "/tmp/worker.md",
1219
+ filePath: "/tmp/builder.md",
1214
1220
  };
1215
1221
 
1216
1222
  const serialized = serializeAgent(agent);
@@ -1223,8 +1229,8 @@ describe("agent frontmatter prompt inheritance flags", () => {
1223
1229
  tempDirs.push(dir);
1224
1230
  const agentsDir = path.join(dir, ".selesai", "agents");
1225
1231
  fs.mkdirSync(agentsDir, { recursive: true });
1226
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
1227
- name: worker
1232
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
1233
+ name: builder
1228
1234
  description: Worker
1229
1235
  inheritProjectContext: true
1230
1236
  inheritSkills: true
@@ -1234,23 +1240,23 @@ Do work
1234
1240
  `, "utf-8");
1235
1241
 
1236
1242
  const result = discoverAgents(dir, "project");
1237
- const worker = result.agents.find((agent) => agent.name === "worker");
1238
- assert.equal(worker?.inheritProjectContext, true);
1239
- assert.equal(worker?.inheritSkills, true);
1243
+ const builder = result.agents.find((agent) => agent.name === "builder");
1244
+ assert.equal(builder?.inheritProjectContext, true);
1245
+ assert.equal(builder?.inheritSkills, true);
1240
1246
  });
1241
1247
  });
1242
1248
 
1243
1249
  describe("agent frontmatter subagentOnlyExtensions", () => {
1244
1250
  it("serializes subagentOnlyExtensions into agent frontmatter", () => {
1245
1251
  const agent: AgentConfig = {
1246
- name: "worker",
1252
+ name: "builder",
1247
1253
  description: "Worker",
1248
1254
  systemPrompt: "Do work",
1249
1255
  systemPromptMode: "replace",
1250
1256
  inheritProjectContext: false,
1251
1257
  inheritSkills: false,
1252
1258
  source: "project",
1253
- filePath: "/tmp/worker.md",
1259
+ filePath: "/tmp/builder.md",
1254
1260
  subagentOnlyExtensions: ["./tools/child-search.ts", "/opt/pi/child-only.ts"],
1255
1261
  };
1256
1262
 
@@ -1263,8 +1269,8 @@ describe("agent frontmatter subagentOnlyExtensions", () => {
1263
1269
  tempDirs.push(dir);
1264
1270
  const agentsDir = path.join(dir, ".selesai", "agents");
1265
1271
  fs.mkdirSync(agentsDir, { recursive: true });
1266
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
1267
- name: worker
1272
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
1273
+ name: builder
1268
1274
  description: Worker
1269
1275
  subagentOnlyExtensions: ./tools/child-search.ts, /opt/pi/child-only.ts
1270
1276
  ---
@@ -1273,8 +1279,8 @@ Do work
1273
1279
  `, "utf-8");
1274
1280
 
1275
1281
  const result = discoverAgents(dir, "project");
1276
- const worker = result.agents.find((agent) => agent.name === "worker");
1277
- assert.deepEqual(worker?.subagentOnlyExtensions, ["./tools/child-search.ts", "/opt/pi/child-only.ts"]);
1282
+ const builder = result.agents.find((agent) => agent.name === "builder");
1283
+ assert.deepEqual(builder?.subagentOnlyExtensions, ["./tools/child-search.ts", "/opt/pi/child-only.ts"]);
1278
1284
  });
1279
1285
  });
1280
1286
 
@@ -1284,8 +1290,8 @@ describe("agent frontmatter prompt assembly defaults", () => {
1284
1290
  tempDirs.push(dir);
1285
1291
  const agentsDir = path.join(dir, ".selesai", "agents");
1286
1292
  fs.mkdirSync(agentsDir, { recursive: true });
1287
- fs.writeFileSync(path.join(agentsDir, "worker.md"), `---
1288
- name: worker
1293
+ fs.writeFileSync(path.join(agentsDir, "builder.md"), `---
1294
+ name: builder
1289
1295
  description: Worker
1290
1296
  ---
1291
1297
 
@@ -1293,10 +1299,10 @@ Do work
1293
1299
  `, "utf-8");
1294
1300
 
1295
1301
  const result = discoverAgents(dir, "project");
1296
- const worker = result.agents.find((agent) => agent.name === "worker");
1297
- assert.equal(worker?.systemPromptMode, "replace");
1298
- assert.equal(worker?.inheritProjectContext, false);
1299
- assert.equal(worker?.inheritSkills, false);
1302
+ const builder = result.agents.find((agent) => agent.name === "builder");
1303
+ assert.equal(builder?.systemPromptMode, "replace");
1304
+ assert.equal(builder?.inheritProjectContext, false);
1305
+ assert.equal(builder?.inheritSkills, false);
1300
1306
  });
1301
1307
 
1302
1308
  it("builtin agents inherit project context by default", () => {
@@ -1312,12 +1318,12 @@ Do work
1312
1318
  process.env.USERPROFILE = homeDir;
1313
1319
 
1314
1320
  const result = discoverAgents(dir, "both");
1315
- const architect = result.agents.find((agent) => agent.name === "architect");
1316
- const builder = result.agents.find((agent) => agent.name === "builder");
1321
+ const explorer = result.agents.find((agent) => agent.name === "explorer");
1317
1322
  const commentator = result.agents.find((agent) => agent.name === "commentator");
1318
- assert.equal(architect?.inheritProjectContext, true);
1319
- assert.equal(builder?.inheritProjectContext, true);
1323
+ const recapper = result.agents.find((agent) => agent.name === "recapper");
1324
+ assert.equal(explorer?.inheritProjectContext, true);
1320
1325
  assert.equal(commentator?.inheritProjectContext, true);
1326
+ assert.equal(recapper?.inheritProjectContext, true);
1321
1327
  } finally {
1322
1328
  if (previousHome === undefined) delete process.env.HOME;
1323
1329
  else process.env.HOME = previousHome;
@@ -1353,14 +1359,16 @@ Do work
1353
1359
  it("keeps the bundled architect read-only for repository tools", () => {
1354
1360
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-architect-tools-"));
1355
1361
  const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-architect-home-"));
1356
- tempDirs.push(dir, homeDir);
1362
+ tempDirs.push(dir);
1363
+ tempDirs.push(homeDir);
1357
1364
  const previousHome = process.env.HOME;
1358
1365
  const previousUserProfile = process.env.USERPROFILE;
1366
+
1359
1367
  try {
1360
1368
  process.env.HOME = homeDir;
1361
1369
  process.env.USERPROFILE = homeDir;
1362
- const architect = discoverAgentsAll(dir).builtin.find((candidate) => candidate.name === "architect");
1363
- assert.ok(architect);
1370
+ const architect = discoverAgentsAll(dir).builtin.find((agent) => agent.name === "architect");
1371
+ assert.ok(architect, "architect builtin should be discovered");
1364
1372
  assert.deepEqual(architect.tools, ["read", "grep", "find", "ls"]);
1365
1373
  assert.equal(architect.acceptanceRole, "read-only");
1366
1374
  } finally {
@@ -1371,7 +1379,7 @@ Do work
1371
1379
  }
1372
1380
  });
1373
1381
 
1374
- it("builder builtin tools exclude the bridge-injected supervisor tool", () => {
1382
+ it("builder includes the child-facing supervisor tool", () => {
1375
1383
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-supervisor-tool-"));
1376
1384
  const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-supervisor-tool-home-"));
1377
1385
  tempDirs.push(dir);
@@ -1382,10 +1390,10 @@ Do work
1382
1390
  try {
1383
1391
  process.env.HOME = homeDir;
1384
1392
  process.env.USERPROFILE = homeDir;
1385
- const agent = discoverAgentsAll(dir).builtin.find((candidate) => candidate.name === "builder");
1393
+ const agents = discoverAgentsAll(dir).builtin;
1394
+ const agent = agents.find((candidate) => candidate.name === "builder");
1386
1395
  assert.ok(agent, "builder builtin should be discovered");
1387
1396
  assert.deepEqual(agent?.tools, ["read", "grep", "find", "ls", "bash", "edit", "write"]);
1388
- assert.equal(agent?.tools?.includes("contact_supervisor"), false);
1389
1397
  } finally {
1390
1398
  if (previousHome === undefined) delete process.env.HOME;
1391
1399
  else process.env.HOME = previousHome;
@@ -1394,36 +1402,13 @@ Do work
1394
1402
  }
1395
1403
  });
1396
1404
 
1397
- it("researcher builtin routes grep.app tools into mcpDirectTools", () => {
1398
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-researcher-tools-"));
1399
- const homeDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-builtin-researcher-tools-home-"));
1400
- tempDirs.push(dir);
1401
- tempDirs.push(homeDir);
1402
- const previousHome = process.env.HOME;
1403
- const previousUserProfile = process.env.USERPROFILE;
1404
-
1405
- try {
1406
- process.env.HOME = homeDir;
1407
- process.env.USERPROFILE = homeDir;
1408
- const agent = discoverAgentsAll(dir).builtin.find((candidate) => candidate.name === "researcher");
1409
- assert.ok(agent, "researcher builtin should be discovered");
1410
- assert.deepEqual(agent?.tools, ["read", "web_explore"]);
1411
- assert.deepEqual(agent?.mcpDirectTools, ["grep_app_search", "grep_app_fetch"]);
1412
- } finally {
1413
- if (previousHome === undefined) delete process.env.HOME;
1414
- else process.env.HOME = previousHome;
1415
- if (previousUserProfile === undefined) delete process.env.USERPROFILE;
1416
- else process.env.USERPROFILE = previousUserProfile;
1417
- }
1418
- });
1419
-
1420
- it("defaults delegate to append mode with inherited project context", () => {
1421
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-delegate-default-prompt-settings-"));
1405
+ it("defaults recapper to replace mode with inherited project context", () => {
1406
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagents-agent-recapper-default-prompt-settings-"));
1422
1407
  tempDirs.push(dir);
1423
1408
  const agentsDir = path.join(dir, ".selesai", "agents");
1424
1409
  fs.mkdirSync(agentsDir, { recursive: true });
1425
- fs.writeFileSync(path.join(agentsDir, "delegate.md"), `---
1426
- name: delegate
1410
+ fs.writeFileSync(path.join(agentsDir, "recapper.md"), `---
1411
+ name: recapper
1427
1412
  description: Delegate
1428
1413
  ---
1429
1414
 
@@ -1431,10 +1416,10 @@ Do work
1431
1416
  `, "utf-8");
1432
1417
 
1433
1418
  const result = discoverAgents(dir, "project");
1434
- const delegate = result.agents.find((agent) => agent.name === "delegate");
1435
- assert.equal(delegate?.systemPromptMode, "append");
1436
- assert.equal(delegate?.inheritProjectContext, true);
1437
- assert.equal(delegate?.inheritSkills, false);
1419
+ const recapper = result.agents.find((agent) => agent.name === "recapper");
1420
+ assert.equal(recapper?.systemPromptMode, "replace");
1421
+ assert.equal(recapper?.inheritProjectContext, false);
1422
+ assert.equal(recapper?.inheritSkills, false);
1438
1423
  });
1439
1424
  });
1440
1425
 
@@ -1446,9 +1431,9 @@ describe("packaged agent and chain discovery", () => {
1446
1431
  const nestedChainDir = path.join(dir, ".selesai", "chains", "code-analysis", "deep");
1447
1432
  fs.mkdirSync(nestedDir, { recursive: true });
1448
1433
  fs.mkdirSync(nestedChainDir, { recursive: true });
1449
- fs.writeFileSync(path.join(nestedDir, "scout.md"), `---
1450
- name: scout
1451
- description: Nested scout
1434
+ fs.writeFileSync(path.join(nestedDir, "explorer.md"), `---
1435
+ name: explorer
1436
+ description: Nested explorer
1452
1437
  ---
1453
1438
 
1454
1439
  Inspect code
@@ -1458,13 +1443,13 @@ name: review-flow
1458
1443
  description: Review flow
1459
1444
  ---
1460
1445
 
1461
- ## scout
1446
+ ## explorer
1462
1447
 
1463
1448
  Review
1464
1449
  `, "utf-8");
1465
1450
 
1466
1451
  const result = discoverAgentsAll(dir);
1467
- assert.ok(result.project.find((agent) => agent.name === "scout" && agent.filePath === path.join(nestedDir, "scout.md")));
1452
+ assert.ok(result.project.find((agent) => agent.name === "explorer" && agent.filePath === path.join(nestedDir, "explorer.md")));
1468
1453
  assert.ok(result.chains.find((chain) => chain.name === "review-flow" && chain.filePath === path.join(nestedChainDir, "review.chain.md")));
1469
1454
  assert.equal(result.project.some((agent) => agent.filePath.endsWith("review.chain.md")), false);
1470
1455
  });
@@ -1474,8 +1459,8 @@ Review
1474
1459
  tempDirs.push(dir);
1475
1460
  const agentsDir = path.join(dir, ".selesai", "agents");
1476
1461
  fs.mkdirSync(agentsDir, { recursive: true });
1477
- fs.writeFileSync(path.join(agentsDir, "scout.md"), `---
1478
- name: scout
1462
+ fs.writeFileSync(path.join(agentsDir, "explorer.md"), `---
1463
+ name: explorer
1479
1464
  package: code-analysis
1480
1465
  description: Fast recon
1481
1466
  ---
@@ -1483,14 +1468,14 @@ description: Fast recon
1483
1468
  Inspect code
1484
1469
  `, "utf-8");
1485
1470
 
1486
- const scout = discoverAgents(dir, "project").agents.find((agent) => agent.name === "code-analysis.scout");
1487
- assert.ok(scout);
1488
- assert.equal(scout.localName, "scout");
1489
- assert.equal(scout.packageName, "code-analysis");
1490
- const serialized = serializeAgent(scout);
1491
- assert.match(serialized, /^name: scout$/m);
1471
+ const explorer = discoverAgents(dir, "project").agents.find((agent) => agent.name === "code-analysis.explorer");
1472
+ assert.ok(explorer);
1473
+ assert.equal(explorer.localName, "explorer");
1474
+ assert.equal(explorer.packageName, "code-analysis");
1475
+ const serialized = serializeAgent(explorer);
1476
+ assert.match(serialized, /^name: explorer$/m);
1492
1477
  assert.match(serialized, /^package: code-analysis$/m);
1493
- assert.doesNotMatch(serialized, /^name: code-analysis\.scout$/m);
1478
+ assert.doesNotMatch(serialized, /^name: code-analysis\.explorer$/m);
1494
1479
  });
1495
1480
 
1496
1481
  it("recursively discovers packaged chains by runtime name and preserves package on serialize", () => {
@@ -1504,7 +1489,7 @@ package: code-analysis
1504
1489
  description: Review flow
1505
1490
  ---
1506
1491
 
1507
- ## code-analysis.scout
1492
+ ## code-analysis.explorer
1508
1493
 
1509
1494
  Inspect {task}
1510
1495
  `;
@@ -1514,11 +1499,11 @@ Inspect {task}
1514
1499
  assert.ok(chain);
1515
1500
  assert.equal(chain.localName, "review-flow");
1516
1501
  assert.equal(chain.packageName, "code-analysis");
1517
- assert.equal(chain.steps[0]?.agent, "code-analysis.scout");
1502
+ assert.equal(chain.steps[0]?.agent, "code-analysis.explorer");
1518
1503
  const serialized = serializeChain(chain);
1519
1504
  assert.match(serialized, /^name: review-flow$/m);
1520
1505
  assert.match(serialized, /^package: code-analysis$/m);
1521
- assert.match(serialized, /^## code-analysis\.scout$/m);
1506
+ assert.match(serialized, /^## code-analysis\.explorer$/m);
1522
1507
  assert.doesNotMatch(serialized, /^name: code-analysis\.review-flow$/m);
1523
1508
  });
1524
1509
 
@@ -1527,35 +1512,35 @@ Inspect {task}
1527
1512
  tempDirs.push(dir);
1528
1513
  fs.mkdirSync(path.join(dir, ".agents"), { recursive: true });
1529
1514
  fs.mkdirSync(path.join(dir, ".selesai", "agents"), { recursive: true });
1530
- fs.writeFileSync(path.join(dir, ".agents", "scout.md"), `---
1531
- name: scout
1532
- description: Legacy scout
1515
+ fs.writeFileSync(path.join(dir, ".agents", "explorer.md"), `---
1516
+ name: explorer
1517
+ description: Legacy explorer
1533
1518
  ---
1534
1519
 
1535
1520
  Legacy
1536
1521
  `, "utf-8");
1537
- fs.writeFileSync(path.join(dir, ".selesai", "agents", "scout.md"), `---
1538
- name: scout
1539
- description: Project scout
1522
+ fs.writeFileSync(path.join(dir, ".selesai", "agents", "explorer.md"), `---
1523
+ name: explorer
1524
+ description: Project explorer
1540
1525
  ---
1541
1526
 
1542
1527
  Project
1543
1528
  `, "utf-8");
1544
1529
  fs.writeFileSync(path.join(dir, ".selesai", "agents", "packaged.md"), `---
1545
- name: scout
1530
+ name: explorer
1546
1531
  package: code-analysis
1547
- description: Packaged scout
1532
+ description: Packaged explorer
1548
1533
  ---
1549
1534
 
1550
1535
  Packaged
1551
1536
  `, "utf-8");
1552
1537
 
1553
1538
  const agents = discoverAgents(dir, "project").agents;
1554
- const unqualified = agents.find((agent) => agent.name === "scout");
1555
- const packaged = agents.find((agent) => agent.name === "code-analysis.scout");
1556
- assert.equal(unqualified?.description, "Project scout");
1557
- assert.equal(unqualified?.filePath, path.join(dir, ".selesai", "agents", "scout.md"));
1558
- assert.equal(packaged?.description, "Packaged scout");
1539
+ const unqualified = agents.find((agent) => agent.name === "explorer");
1540
+ const packaged = agents.find((agent) => agent.name === "code-analysis.explorer");
1541
+ assert.equal(unqualified?.description, "Project explorer");
1542
+ assert.equal(unqualified?.filePath, path.join(dir, ".selesai", "agents", "explorer.md"));
1543
+ assert.equal(packaged?.description, "Packaged explorer");
1559
1544
  });
1560
1545
 
1561
1546
  it("parses packaged chains directly from serializer helpers", () => {
@@ -1565,7 +1550,7 @@ package: code-analysis
1565
1550
  description: Review flow
1566
1551
  ---
1567
1552
 
1568
- ## code-analysis.scout
1553
+ ## code-analysis.explorer
1569
1554
 
1570
1555
  Inspect
1571
1556
  `, "project", "/tmp/review.chain.md");
@@ -1583,8 +1568,8 @@ Inspect
1583
1568
  const chainsDir = path.join(dir, ".selesai", "chains");
1584
1569
  fs.mkdirSync(agentsDir, { recursive: true });
1585
1570
  fs.mkdirSync(chainsDir, { recursive: true });
1586
- fs.writeFileSync(path.join(agentsDir, "scout.md"), `---
1587
- name: scout
1571
+ fs.writeFileSync(path.join(agentsDir, "explorer.md"), `---
1572
+ name: explorer
1588
1573
  package: Code Analysis!
1589
1574
  description: Fast recon
1590
1575
  ---
@@ -1597,13 +1582,13 @@ package: Code Analysis!
1597
1582
  description: Review flow
1598
1583
  ---
1599
1584
 
1600
- ## code-analysis.scout
1585
+ ## code-analysis.explorer
1601
1586
 
1602
1587
  Review
1603
1588
  `, "utf-8");
1604
1589
 
1605
1590
  const result = discoverAgentsAll(dir);
1606
- assert.ok(result.project.find((agent) => agent.name === "code-analysis.scout"));
1591
+ assert.ok(result.project.find((agent) => agent.name === "code-analysis.explorer"));
1607
1592
  assert.ok(result.chains.find((chain) => chain.name === "code-analysis.review-flow"));
1608
1593
  });
1609
1594
 
@@ -1614,8 +1599,8 @@ Review
1614
1599
  const chainsDir = path.join(dir, ".selesai", "chains");
1615
1600
  fs.mkdirSync(agentsDir, { recursive: true });
1616
1601
  fs.mkdirSync(chainsDir, { recursive: true });
1617
- fs.writeFileSync(path.join(agentsDir, "scout.md"), `---
1618
- name: scout
1602
+ fs.writeFileSync(path.join(agentsDir, "explorer.md"), `---
1603
+ name: explorer
1619
1604
  package: !!!
1620
1605
  description: Fast recon
1621
1606
  ---
@@ -1628,13 +1613,13 @@ package: !!!
1628
1613
  description: Review flow
1629
1614
  ---
1630
1615
 
1631
- ## scout
1616
+ ## explorer
1632
1617
 
1633
1618
  Review
1634
1619
  `, "utf-8");
1635
1620
 
1636
1621
  const result = discoverAgentsAll(dir);
1637
- assert.equal(result.project.some((agent) => agent.filePath.endsWith("scout.md")), false);
1622
+ assert.equal(result.project.some((agent) => agent.filePath.endsWith("explorer.md")), false);
1638
1623
  assert.equal(result.chains.some((chain) => chain.filePath.endsWith("review.chain.md")), false);
1639
1624
  });
1640
1625
  });
@@ -1778,7 +1763,7 @@ name: ignored-chain
1778
1763
  description: Ignored chain
1779
1764
  ---
1780
1765
 
1781
- ## scout
1766
+ ## explorer
1782
1767
 
1783
1768
  Ignore
1784
1769
  `, "utf-8");
@@ -1787,7 +1772,7 @@ name: canonical-chain
1787
1772
  description: Canonical chain
1788
1773
  ---
1789
1774
 
1790
- ## worker
1775
+ ## builder
1791
1776
 
1792
1777
  Inspect canonical
1793
1778
  `, "utf-8");
@@ -1816,7 +1801,7 @@ name: shared-chain
1816
1801
  description: User chain
1817
1802
  ---
1818
1803
 
1819
- ## scout
1804
+ ## explorer
1820
1805
 
1821
1806
  Inspect user
1822
1807
  `, "utf-8");
@@ -1825,7 +1810,7 @@ name: shared-chain
1825
1810
  description: Project chain
1826
1811
  ---
1827
1812
 
1828
- ## worker
1813
+ ## builder
1829
1814
 
1830
1815
  Inspect project
1831
1816
  `, "utf-8");
@@ -1838,7 +1823,7 @@ Inspect project
1838
1823
  assert.ok(shared);
1839
1824
  assert.equal(shared.filePath, path.join(dir, ".selesai", "chains", "shared.chain.md"));
1840
1825
  assert.equal(shared.description, "Project chain");
1841
- assert.equal(shared.steps[0]?.agent, "worker");
1826
+ assert.equal(shared.steps[0]?.agent, "builder");
1842
1827
  assert.equal(shared.steps[0]?.task, "Inspect project");
1843
1828
  } finally {
1844
1829
  if (oldHome === undefined) delete process.env.HOME;