@selesai/code 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -1
  3. package/dist/core/slash-commands.js +1 -0
  4. package/dist/defaults/models.json +41 -55
  5. package/dist/defaults/settings.json +7 -8
  6. package/dist/extensions/handoff-new.ts +1 -1
  7. package/dist/extensions/inline-skills.test.ts +1 -0
  8. package/dist/extensions/inline-skills.ts +1 -1
  9. package/dist/extensions/pi-intercom/CHANGELOG.md +25 -3
  10. package/dist/extensions/pi-intercom/README.md +34 -15
  11. package/dist/extensions/pi-intercom/broker/broker.ts +38 -141
  12. package/dist/extensions/pi-intercom/broker/client-liveness.test.ts +173 -0
  13. package/dist/extensions/pi-intercom/broker/client.ts +78 -150
  14. package/dist/extensions/pi-intercom/broker/extension-state.ts +18 -7
  15. package/dist/extensions/pi-intercom/broker/framing.ts +1 -1
  16. package/dist/extensions/pi-intercom/broker/protocol.ts +182 -0
  17. package/dist/extensions/pi-intercom/broker/spawn.test.ts +106 -7
  18. package/dist/extensions/pi-intercom/broker/spawn.ts +37 -11
  19. package/dist/extensions/pi-intercom/config.test.ts +8 -10
  20. package/dist/extensions/pi-intercom/config.ts +3 -3
  21. package/dist/extensions/pi-intercom/index.ts +218 -147
  22. package/dist/extensions/pi-intercom/intercom.integration.test.ts +891 -103
  23. package/dist/extensions/pi-intercom/package.json +3 -2
  24. package/dist/extensions/pi-intercom/project-agent.test.ts +145 -0
  25. package/dist/extensions/pi-intercom/project-agent.ts +324 -0
  26. package/dist/extensions/pi-intercom/reply-tracker.test.ts +86 -1
  27. package/dist/extensions/pi-intercom/reply-tracker.ts +41 -9
  28. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +49 -9
  29. package/dist/extensions/pi-intercom/test/inline-message.test.ts +9 -9
  30. package/dist/extensions/pi-intercom/types.ts +3 -1
  31. package/dist/extensions/pi-intercom/ui/inline-message.ts +7 -7
  32. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +2 -2
  33. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +14 -1
  34. package/dist/extensions/pi-powerline-footer/README.md +20 -37
  35. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +40 -25
  36. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +149 -18
  37. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +1 -0
  38. package/dist/extensions/pi-powerline-footer/editor-performance.ts +99 -0
  39. package/dist/extensions/pi-powerline-footer/git-status.ts +15 -0
  40. package/dist/extensions/pi-powerline-footer/index.ts +394 -317
  41. package/dist/extensions/pi-powerline-footer/package.json +1 -1
  42. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -12
  43. package/dist/extensions/pi-powerline-footer/queue/store.ts +8 -56
  44. package/dist/extensions/pi-powerline-footer/queue/types.ts +1 -2
  45. package/dist/extensions/pi-powerline-footer/segments.ts +0 -3
  46. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +231 -1
  47. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +5 -19
  48. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +43 -0
  49. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +64 -0
  50. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +116 -0
  51. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +19 -149
  52. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +6 -0
  53. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +5 -5
  54. package/dist/extensions/pi-powerline-footer/types.ts +1 -2
  55. package/dist/extensions/pi-subagents/CHANGELOG.md +225 -14
  56. package/dist/extensions/pi-subagents/README.md +66 -1613
  57. package/dist/extensions/pi-subagents/agents/builder.md +0 -1
  58. package/dist/extensions/pi-subagents/agents/delegate.md +14 -0
  59. package/dist/extensions/pi-subagents/agents/oracle.md +74 -0
  60. package/dist/extensions/pi-subagents/agents/reviewer.md +78 -0
  61. package/dist/extensions/pi-subagents/agents/scout.md +50 -0
  62. package/dist/extensions/pi-subagents/agents/worker.md +58 -0
  63. package/dist/extensions/pi-subagents/docs/configuration.md +372 -0
  64. package/dist/extensions/pi-subagents/docs/extension-api.md +308 -0
  65. package/dist/extensions/pi-subagents/docs/missions.md +119 -0
  66. package/dist/extensions/pi-subagents/docs/models.md +192 -0
  67. package/dist/extensions/pi-subagents/docs/observability.md +174 -0
  68. package/dist/extensions/pi-subagents/docs/tool-reference.md +343 -0
  69. package/dist/extensions/pi-subagents/docs/watchdog.md +176 -0
  70. package/dist/extensions/pi-subagents/docs/workflows.md +163 -0
  71. package/dist/extensions/pi-subagents/inspector-runner.mjs +11 -0
  72. package/dist/extensions/pi-subagents/package-lock.json +152 -194
  73. package/dist/extensions/pi-subagents/package.json +9 -10
  74. package/dist/extensions/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
  75. package/dist/extensions/pi-subagents/prompts/parallel-cleanup.md +9 -9
  76. package/dist/extensions/pi-subagents/prompts/parallel-research.md +6 -6
  77. package/dist/extensions/pi-subagents/prompts/parallel-review.md +8 -8
  78. package/dist/extensions/pi-subagents/prompts/review-loop.md +12 -12
  79. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +22 -17
  80. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +77 -72
  81. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +177 -69
  82. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +28 -8
  83. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +88 -66
  84. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +3 -3
  85. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +624 -0
  86. package/dist/extensions/pi-subagents/src/agents/agents.ts +38 -19
  87. package/dist/extensions/pi-subagents/src/agents/frontmatter.ts +7 -3
  88. package/dist/extensions/pi-subagents/src/agents/proactive-skills.ts +2 -2
  89. package/dist/extensions/pi-subagents/src/agents/skills.ts +2 -9
  90. package/dist/extensions/pi-subagents/src/api/delegation.ts +1 -2
  91. package/dist/extensions/pi-subagents/src/api/project-panes.ts +30 -0
  92. package/dist/extensions/pi-subagents/src/extension/config.ts +62 -8
  93. package/dist/extensions/pi-subagents/src/extension/control-notices.ts +2 -2
  94. package/dist/extensions/pi-subagents/src/extension/doctor.ts +40 -0
  95. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +51 -26
  96. package/dist/extensions/pi-subagents/src/extension/index.ts +140 -50
  97. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +77 -0
  98. package/dist/extensions/pi-subagents/src/extension/rpc.ts +18 -24
  99. package/dist/extensions/pi-subagents/src/extension/schemas.ts +58 -21
  100. package/dist/extensions/pi-subagents/src/extension/subagent-guide.ts +39 -0
  101. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +47 -25
  102. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +3 -3
  103. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +460 -64
  104. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +4 -1
  105. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +102 -4
  106. package/dist/extensions/pi-subagents/src/missions/actions.ts +77 -16
  107. package/dist/extensions/pi-subagents/src/missions/goal-driver.ts +162 -0
  108. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +65 -17
  109. package/dist/extensions/pi-subagents/src/missions/store.ts +151 -9
  110. package/dist/extensions/pi-subagents/src/missions/types.ts +58 -3
  111. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +260 -0
  112. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +8 -8
  113. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +374 -0
  114. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +46 -0
  115. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +158 -36
  116. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +294 -134
  117. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +26 -4
  118. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -6
  119. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +33 -15
  120. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +267 -0
  121. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +145 -60
  122. package/dist/extensions/pi-subagents/src/runs/background/owned-process-tree.ts +104 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +17 -3
  124. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +114 -6
  125. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +33 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +68 -0
  127. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +71 -0
  128. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +26 -3
  129. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +42 -14
  130. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +12 -24
  131. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +7 -5
  132. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +233 -101
  133. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -4
  134. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +146 -0
  135. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +21 -5
  136. package/dist/extensions/pi-subagents/src/runs/foreground/async-dismiss-action.ts +85 -0
  137. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +43 -18
  138. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +20 -19
  139. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +40 -2
  140. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +188 -46
  141. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +12 -0
  142. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +137 -0
  143. package/dist/extensions/pi-subagents/src/runs/foreground/prompt-audit.ts +171 -0
  144. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1365 -252
  145. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +187 -0
  146. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +178 -26
  147. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  148. package/dist/extensions/pi-subagents/src/runs/shared/llm-intent-arbiter.ts +286 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +2 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +32 -5
  151. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +12 -2
  152. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +3 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +509 -117
  154. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +10 -10
  155. package/dist/extensions/pi-subagents/src/runs/shared/run-fanout-budget.ts +280 -0
  156. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +4 -2
  157. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +189 -32
  158. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -5
  159. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +20 -8
  160. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +128 -3
  161. package/dist/extensions/pi-subagents/src/shared/display-text.ts +100 -0
  162. package/dist/extensions/pi-subagents/src/shared/file-coalescer.ts +9 -0
  163. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +13 -0
  164. package/dist/extensions/pi-subagents/src/shared/formatters.ts +4 -6
  165. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +51 -0
  166. package/dist/extensions/pi-subagents/src/shared/settings.ts +41 -11
  167. package/dist/extensions/pi-subagents/src/shared/types.ts +192 -3
  168. package/dist/extensions/pi-subagents/src/shared/utf8.ts +11 -0
  169. package/dist/extensions/pi-subagents/src/shared/utils.ts +46 -34
  170. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -14
  171. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +1 -1
  172. package/dist/extensions/pi-subagents/src/slash/prompt-template-bridge.ts +14 -12
  173. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +176 -21
  174. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +12 -6
  175. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +52 -18
  176. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +36 -5
  177. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +37 -21
  178. package/dist/extensions/pi-subagents/src/tui/fleet.ts +375 -42
  179. package/dist/extensions/pi-subagents/src/tui/render.ts +201 -68
  180. package/dist/extensions/pi-subagents/src/types/pi-runtime-compat.d.ts +0 -6
  181. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +5 -4
  182. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +0 -1
  183. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +332 -27
  184. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +15 -15
  185. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  186. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  187. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  188. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  189. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  190. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  191. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  192. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  193. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  194. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  195. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  196. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  197. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  198. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  199. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  200. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +84 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/package.json +14 -0
  362. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +102 -15
  363. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +507 -306
  364. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +309 -123
  365. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +124 -58
  366. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +62 -16
  367. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +167 -113
  368. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +1 -1
  369. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +4 -2
  370. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +139 -58
  371. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +324 -59
  372. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +98 -22
  373. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +106 -106
  374. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +416 -106
  375. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +287 -17
  376. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1122 -96
  377. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +107 -20
  378. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +9 -9
  379. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +26 -6
  380. package/dist/extensions/pi-subagents/test/integration/top-level-async.test.ts +2 -2
  381. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  382. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +1 -1
  383. package/dist/extensions/pi-subagents/test/support/ts-loader.mjs +0 -8
  384. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +194 -59
  385. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +317 -0
  386. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +15 -15
  387. package/dist/extensions/pi-subagents/test/unit/agent-eject-disable.test.ts +66 -66
  388. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +334 -248
  389. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +52 -52
  390. package/dist/extensions/pi-subagents/test/unit/agent-memory.test.ts +26 -26
  391. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +118 -99
  392. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +160 -0
  393. package/dist/extensions/pi-subagents/test/unit/agent-selection.test.ts +9 -9
  394. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +43 -1
  395. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +36 -10
  396. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +387 -30
  397. package/dist/extensions/pi-subagents/test/unit/async-permission-session.test.ts +9 -9
  398. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +18 -3
  399. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +99 -40
  400. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +5 -3
  401. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +7 -7
  402. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +19 -19
  403. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +94 -23
  404. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +9 -9
  405. package/dist/extensions/pi-subagents/test/unit/chain-serializer.test.ts +20 -20
  406. package/dist/extensions/pi-subagents/test/unit/child-transcript.test.ts +9 -9
  407. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +35 -5
  408. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +2 -2
  409. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +70 -52
  410. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +187 -0
  411. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +125 -71
  412. package/dist/extensions/pi-subagents/test/unit/control-notices.test.ts +18 -3
  413. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +12 -12
  414. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +17 -23
  415. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +30 -2
  416. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +25 -25
  417. package/dist/extensions/pi-subagents/test/unit/extra-agent-dirs.test.ts +3 -3
  418. package/dist/extensions/pi-subagents/test/unit/file-coalescer.test.ts +15 -0
  419. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +91 -47
  420. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +468 -38
  421. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +14 -4
  422. package/dist/extensions/pi-subagents/test/unit/foreground-tool-call-compaction.test.ts +37 -0
  423. package/dist/extensions/pi-subagents/test/unit/herdr-inspector-bootstrap.test.ts +69 -0
  424. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +79 -2
  425. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +102 -49
  426. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +98 -32
  427. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +7 -6
  428. package/dist/extensions/pi-subagents/test/unit/llm-intent-arbiter.test.ts +171 -0
  429. package/dist/extensions/pi-subagents/test/unit/mission-goal-driver.test.ts +116 -0
  430. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +81 -7
  431. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +289 -13
  432. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +42 -1
  433. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +2 -2
  434. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +11 -2
  435. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +84 -10
  436. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +122 -8
  437. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +8 -8
  438. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +24 -24
  439. package/dist/extensions/pi-subagents/test/unit/owned-process-tree.test.ts +69 -0
  440. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +16 -2
  441. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +7 -7
  442. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +10 -10
  443. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +3 -3
  444. package/dist/extensions/pi-subagents/test/unit/path-resolution.test.ts +26 -17
  445. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +405 -0
  446. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +440 -92
  447. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +24 -8
  448. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +6 -6
  449. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +43 -43
  450. package/dist/extensions/pi-subagents/test/unit/proactive-skills.test.ts +13 -13
  451. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +59 -6
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +19 -19
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +243 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-template-bridge.test.ts +68 -168
  455. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +58 -15
  456. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +51 -0
  457. package/dist/extensions/pi-subagents/test/unit/reads-resolution.test.ts +66 -0
  458. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +47 -28
  459. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +12 -12
  460. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +57 -0
  461. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +111 -31
  462. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +121 -0
  463. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +1 -1
  464. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +65 -50
  465. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +69 -28
  466. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  467. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +60 -44
  468. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +424 -49
  469. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +28 -0
  470. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +23 -1
  471. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +32 -5
  472. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +13 -13
  473. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +130 -92
  474. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +2 -2
  475. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +85 -0
  476. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +35 -35
  477. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +24 -0
  478. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +312 -22
  479. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +150 -15
  480. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +65 -26
  481. package/dist/extensions/pi-subagents/test/unit/timeout-defaults.test.ts +138 -0
  482. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +76 -25
  483. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +5 -5
  484. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +55 -6
  485. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +13 -13
  486. package/dist/extensions/pi-subagents/test/unit/watchdog-lsp-diagnostics.test.ts +1 -1
  487. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +1 -1
  488. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +8 -8
  489. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +6 -6
  490. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +138 -11
  491. package/dist/extensions/pi-subagents/test/unit/workflow-graph.test.ts +8 -8
  492. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +113 -0
  493. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +68 -7
  494. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +6 -6
  495. package/dist/extensions/workflow/extension.ts +21 -19
  496. package/dist/extensions/workflow/modes.ts +65 -0
  497. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  498. package/dist/modes/interactive/interactive-mode.js +48 -1
  499. package/dist/skills/pi-subagents/SKILL.md +20 -15
  500. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +77 -83
  501. package/dist/skills/pi-subagents/references/execution-controls.md +215 -106
  502. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +29 -9
  503. package/dist/skills/pi-subagents/references/prompting-and-roles.md +58 -43
  504. package/docs/plans/workflow-autoloop-reference.md +192 -0
  505. package/docs/plans/workflow-subagent-consolidation-planb.md +374 -0
  506. package/docs/plans/workflow-subagent-scripted-merge.md +406 -0
  507. package/docs/quickstart.md +27 -43
  508. package/docs/settings.md +4 -0
  509. package/docs/usage.md +1 -0
  510. package/package.json +2 -1
  511. package/dist/extensions/workflow/adapter.ts +0 -949
  512. package/dist/extensions/workflow/modes/loop.ts +0 -74
  513. package/dist/extensions/workflow/modes/prototype.ts +0 -170
  514. package/dist/extensions/workflow/modes/quicktype.ts +0 -150
  515. package/dist/extensions/workflow/modes/task.ts +0 -105
  516. package/dist/extensions/workflow/run-state.ts +0 -124
  517. package/dist/extensions/workflow/state-machine.ts +0 -484
  518. package/dist/extensions/workflow/validators.ts +0 -42
@@ -3,41 +3,127 @@ import * as fs from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
- import { encodeNestedPathEnv, parseNestedPathEnv, type NestedPathEntry } from "./nested-path.ts";
7
- import { resolveMcpDirectToolSelections, type ResolvedMcpDirectToolSelection } from "./mcp-direct-tool-allowlist.ts";
6
+ import {
7
+ encodeNestedPathEnv,
8
+ parseNestedPathEnv,
9
+ type NestedPathEntry,
10
+ } from "./nested-path.ts";
11
+ import {
12
+ resolveMcpDirectToolSelections,
13
+ type ResolvedMcpDirectToolSelection,
14
+ } from "./mcp-direct-tool-allowlist.ts";
8
15
  import { resolvePiPackageRoot } from "./pi-spawn.ts";
9
16
  import { RUNTIME_EXTENSION_ACK_PATH_ENV } from "./runtime-acknowledged-extensions.ts";
10
- import { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV } from "./structured-output.ts";
11
- import { TEMP_ROOT_DIR, type JsonSchemaObject, type LaunchResolvedChildExtensionsV1, type ResolvedToolBudget } from "../../shared/types.ts";
17
+ import {
18
+ STRUCTURED_OUTPUT_CAPTURE_ENV,
19
+ STRUCTURED_OUTPUT_SCHEMA_ENV,
20
+ } from "./structured-output.ts";
21
+ import {
22
+ TEMP_ROOT_DIR,
23
+ type JsonSchemaObject,
24
+ type LaunchResolvedChildExtensionsV1,
25
+ type ResolvedToolBudget,
26
+ type RunFanoutBudgetDescriptor,
27
+ } from "../../shared/types.ts";
12
28
  import { THINKING_LEVELS } from "../../shared/model-info.ts";
13
- import { TOOL_BUDGET_ENV, TOOL_BUDGET_ZERO_AUTH_ENV, encodeToolBudgetEnv } from "./tool-budget.ts";
14
- import { CHILD_TOOL_DIAGNOSTIC_PATH_ENV, MCP_DIRECT_CHILD_TOOLS_ENV, REQUIRED_CHILD_TOOLS_ENV } from "./tool-availability.ts";
15
- import { CHILD_WATCHDOG_CONFIG_ENV, encodeChildWatchdogConfig, type ChildWatchdogConfig } from "../../watchdog/child-status.ts";
29
+ import { encodeRunFanoutBudgetDescriptor, RUN_FANOUT_BUDGET_ENV } from "./run-fanout-budget.ts";
30
+ import {
31
+ TOOL_BUDGET_ENV,
32
+ TOOL_BUDGET_ZERO_AUTH_ENV,
33
+ encodeToolBudgetEnv,
34
+ } from "./tool-budget.ts";
35
+ import {
36
+ CHILD_TOOL_DIAGNOSTIC_PATH_ENV,
37
+ MCP_DIRECT_CHILD_TOOLS_ENV,
38
+ REQUIRED_CHILD_TOOLS_ENV,
39
+ } from "./tool-availability.ts";
40
+ import {
41
+ CHILD_WATCHDOG_CONFIG_ENV,
42
+ encodeChildWatchdogConfig,
43
+ type ChildWatchdogConfig,
44
+ } from "../../watchdog/child-status.ts";
16
45
  import { WAIT_TOOL_ENABLED_ENV } from "../background/wait-config.ts";
17
- import { SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV } from "../../shared/utils.ts";
18
- import { encodePermissionRules, PERMISSION_AUDIT_PATH_ENV, PERMISSION_POLICY_ENV, type PermissionRules } from "./permissions.ts";
19
- import { SUBAGENT_CAPABILITY_CEILING_ENV, capabilityCeilingAgentRestrictionSources, decodeSubagentCapabilityCeiling, encodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, isAgentAllowedByCapabilityCeiling, type ResolvedSubagentCapabilityCeiling, type SubagentCapabilityAudit } from "./capability-ceiling.ts";
46
+ import {
47
+ SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV,
48
+ getAgentDir,
49
+ } from "../../shared/utils.ts";
50
+ import {
51
+ encodePermissionRules,
52
+ PERMISSION_AUDIT_PATH_ENV,
53
+ PERMISSION_POLICY_ENV,
54
+ type PermissionRules,
55
+ } from "./permissions.ts";
56
+ import {
57
+ SUBAGENT_CAPABILITY_CEILING_ENV,
58
+ capabilityCeilingAgentRestrictionSources,
59
+ decodeSubagentCapabilityCeiling,
60
+ encodeSubagentCapabilityCeiling,
61
+ intersectSubagentCapabilityCeilings,
62
+ isAgentAllowedByCapabilityCeiling,
63
+ type ResolvedSubagentCapabilityCeiling,
64
+ type SubagentCapabilityAudit,
65
+ } from "./capability-ceiling.ts";
20
66
 
21
67
  const TASK_ARG_LIMIT = 8000;
68
+
69
+ /**
70
+ * Env override for how the task text reaches the child process. Endpoint
71
+ * protection (EDR) pre-execution command-line scanning may deny exec of
72
+ * children whose argv embeds a long natural-language task, which surfaces
73
+ * as an immediate zero-activity SIGKILL. File delivery keeps the task out
74
+ * of argv entirely.
75
+ */
76
+ export const SUBAGENT_TASK_DELIVERY_ENV = "SELESAI_SUBAGENT_TASK_DELIVERY";
77
+
78
+ export type SubagentTaskDelivery = "auto" | "file";
79
+
80
+ export function resolveSubagentTaskDelivery(
81
+ env: NodeJS.ProcessEnv = process.env,
82
+ ): SubagentTaskDelivery {
83
+ return env[SUBAGENT_TASK_DELIVERY_ENV]?.trim().toLowerCase() === "file"
84
+ ? "file"
85
+ : "auto";
86
+ }
87
+
88
+ function shouldDeliverTaskViaFile(
89
+ task: string,
90
+ delivery: SubagentTaskDelivery,
91
+ ): boolean {
92
+ return delivery === "file" || task.length > TASK_ARG_LIMIT;
93
+ }
22
94
  const MAX_LAUNCH_RESOLVED_EXTENSION_IDS = 32;
23
- const PROMPT_RUNTIME_EXTENSION_PATH = path.join(path.dirname(fileURLToPath(import.meta.url)), "subagent-prompt-runtime.ts");
24
- const FANOUT_CHILD_EXTENSION_PATH = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "extension", "fanout-child.ts");
95
+ const PROMPT_RUNTIME_EXTENSION_PATH = path.join(
96
+ path.dirname(fileURLToPath(import.meta.url)),
97
+ "subagent-prompt-runtime.ts",
98
+ );
99
+ const FANOUT_CHILD_EXTENSION_PATH = path.join(
100
+ path.dirname(fileURLToPath(import.meta.url)),
101
+ "..",
102
+ "..",
103
+ "extension",
104
+ "fanout-child.ts",
105
+ );
25
106
  export const SUBAGENT_CHILD_ENV = "SELESAI_SUBAGENT_CHILD";
26
- export const SUBAGENT_ORCHESTRATOR_TARGET_ENV = "SELESAI_SUBAGENT_ORCHESTRATOR_TARGET";
27
- export const SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV = "SELESAI_SUBAGENT_ORCHESTRATOR_SESSION_ID";
28
- export const SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV = "SELESAI_SUBAGENT_SUPERVISOR_CHANNEL_DIR";
107
+ export const SUBAGENT_ORCHESTRATOR_TARGET_ENV =
108
+ "SELESAI_SUBAGENT_ORCHESTRATOR_TARGET";
109
+ export const SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV =
110
+ "SELESAI_SUBAGENT_ORCHESTRATOR_SESSION_ID";
111
+ export const SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV =
112
+ "SELESAI_SUBAGENT_SUPERVISOR_CHANNEL_DIR";
29
113
  export const SUBAGENT_RUN_ID_ENV = "SELESAI_SUBAGENT_RUN_ID";
30
114
  export const SUBAGENT_CHILD_AGENT_ENV = "SELESAI_SUBAGENT_CHILD_AGENT";
31
115
  export const SUBAGENT_CHILD_INDEX_ENV = "SELESAI_SUBAGENT_CHILD_INDEX";
32
116
  export const SUBAGENT_FANOUT_CHILD_ENV = "SELESAI_SUBAGENT_FANOUT_CHILD";
33
117
  export const SUBAGENT_PARENT_EVENT_SINK_ENV = "SELESAI_SUBAGENT_PARENT_EVENT_SINK";
34
- export const SUBAGENT_PARENT_CONTROL_INBOX_ENV = "SELESAI_SUBAGENT_PARENT_CONTROL_INBOX";
118
+ export const SUBAGENT_PARENT_CONTROL_INBOX_ENV =
119
+ "SELESAI_SUBAGENT_PARENT_CONTROL_INBOX";
35
120
  export const SUBAGENT_PARENT_ROOT_RUN_ID_ENV = "SELESAI_SUBAGENT_PARENT_ROOT_RUN_ID";
36
121
  export const SUBAGENT_PARENT_RUN_ID_ENV = "SELESAI_SUBAGENT_PARENT_RUN_ID";
37
122
  export const SUBAGENT_PARENT_CHILD_INDEX_ENV = "SELESAI_SUBAGENT_PARENT_CHILD_INDEX";
38
123
  export const SUBAGENT_PARENT_DEPTH_ENV = "SELESAI_SUBAGENT_PARENT_DEPTH";
39
124
  export const SUBAGENT_PARENT_PATH_ENV = "SELESAI_SUBAGENT_PARENT_PATH";
40
- export const SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV = "SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN";
125
+ export const SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV =
126
+ "SELESAI_SUBAGENT_PARENT_CAPABILITY_TOKEN";
41
127
  export const SUBAGENT_PARENT_SESSION_ENV = "SELESAI_SUBAGENT_PARENT_SESSION";
42
128
  export const SUBAGENT_STEER_INBOX_ENV = "SELESAI_SUBAGENT_STEER_INBOX";
43
129
  export const SUBAGENT_STEER_CAPABILITY_ENV = "SELESAI_SUBAGENT_STEER_CAPABILITY";
@@ -78,6 +164,7 @@ export interface BuildPiArgsInput {
78
164
  parentDepth?: number;
79
165
  parentPath?: NestedPathEntry[];
80
166
  parentCapabilityToken?: string;
167
+ runFanoutBudget?: RunFanoutBudgetDescriptor;
81
168
  steerInboxDir?: string;
82
169
  steerCapabilityPath?: string;
83
170
  steerAckDir?: string;
@@ -91,6 +178,12 @@ export interface BuildPiArgsInput {
91
178
  permissionRules?: PermissionRules;
92
179
  permissionAuditPath?: string;
93
180
  childWatchdog?: ChildWatchdogConfig;
181
+ /**
182
+ * Per-launch override of the task delivery mode. Startup-retry paths set
183
+ * this to "file" after an unexplained zero-activity SIGKILL so the retry
184
+ * keeps the task text out of the child's argv.
185
+ */
186
+ taskDelivery?: SubagentTaskDelivery;
94
187
  waitToolEnabled?: boolean;
95
188
  capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
96
189
  }
@@ -105,17 +198,37 @@ export interface BuildPiArgsResult {
105
198
  }
106
199
 
107
200
  function sanitizeSupervisorChannelSegment(value: string): string {
108
- return value.trim().replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "unknown";
201
+ return (
202
+ value
203
+ .trim()
204
+ .replace(/[^A-Za-z0-9._-]+/g, "-")
205
+ .replace(/^-+|-+$/g, "") || "unknown"
206
+ );
109
207
  }
110
208
 
111
- function supervisorChannelDir(runId: string, agent: string, childIndex: number): string {
112
- return path.join(TEMP_ROOT_DIR, "supervisor-channels", `${sanitizeSupervisorChannelSegment(runId)}-${sanitizeSupervisorChannelSegment(agent)}-${childIndex}`);
209
+ function supervisorChannelDir(
210
+ runId: string,
211
+ agent: string,
212
+ childIndex: number,
213
+ ): string {
214
+ return path.join(
215
+ TEMP_ROOT_DIR,
216
+ "supervisor-channels",
217
+ `${sanitizeSupervisorChannelSegment(runId)}-${sanitizeSupervisorChannelSegment(agent)}-${childIndex}`,
218
+ );
113
219
  }
114
220
 
115
- export function applyThinkingSuffix(model: string | undefined, thinking: string | false | undefined, replaceExisting = false): string | undefined {
221
+ export function applyThinkingSuffix(
222
+ model: string | undefined,
223
+ thinking: string | false | undefined,
224
+ replaceExisting = false,
225
+ ): string | undefined {
116
226
  if (!model || !thinking) return model;
117
227
  const colonIdx = model.lastIndexOf(":");
118
- if (colonIdx !== -1 && THINKING_LEVELS.some((level) => level === model.substring(colonIdx + 1))) {
228
+ if (
229
+ colonIdx !== -1 &&
230
+ THINKING_LEVELS.some((level) => level === model.substring(colonIdx + 1))
231
+ ) {
119
232
  return replaceExisting ? `${model.slice(0, colonIdx)}:${thinking}` : model;
120
233
  }
121
234
  return `${model}:${thinking}`;
@@ -128,11 +241,13 @@ export interface ResolvePiLaunchToolPlanInput {
128
241
  mcpDirectTools?: string[];
129
242
  cwd?: string;
130
243
  requireReadTool?: boolean;
131
- structuredOutput?: boolean | {
132
- schema: JsonSchemaObject;
133
- schemaPath: string;
134
- outputPath: string;
135
- };
244
+ structuredOutput?:
245
+ | boolean
246
+ | {
247
+ schema: JsonSchemaObject;
248
+ schemaPath: string;
249
+ outputPath: string;
250
+ };
136
251
  capabilityCeiling?: ResolvedSubagentCapabilityCeiling;
137
252
  inheritedCapabilityCeiling?: ResolvedSubagentCapabilityCeiling;
138
253
  agentName?: string;
@@ -162,7 +277,10 @@ function extensionIdentifier(value: string): string {
162
277
  return `sha256:${createHash("sha256").update(path.normalize(value.trim())).digest("hex").slice(0, 16)}`;
163
278
  }
164
279
 
165
- function boundedExtensionIdentifiers(values: string[]): { ids: string[]; omitted: number } {
280
+ function boundedExtensionIdentifiers(values: string[]): {
281
+ ids: string[];
282
+ omitted: number;
283
+ } {
166
284
  const ids = [...new Set(values.map(extensionIdentifier))];
167
285
  return {
168
286
  ids: ids.slice(0, MAX_LAUNCH_RESOLVED_EXTENSION_IDS),
@@ -170,7 +288,15 @@ function boundedExtensionIdentifiers(values: string[]): { ids: string[]; omitted
170
288
  };
171
289
  }
172
290
 
173
- export function projectLaunchResolvedChildExtensions(toolPlan: Pick<PiLaunchToolPlan, "runtimeExtensions" | "configuredExtensions" | "extensionArgs" | "disableAmbientExtensions">): LaunchResolvedChildExtensionsV1 {
291
+ export function projectLaunchResolvedChildExtensions(
292
+ toolPlan: Pick<
293
+ PiLaunchToolPlan,
294
+ | "runtimeExtensions"
295
+ | "configuredExtensions"
296
+ | "extensionArgs"
297
+ | "disableAmbientExtensions"
298
+ >,
299
+ ): LaunchResolvedChildExtensionsV1 {
174
300
  const runtime = boundedExtensionIdentifiers(toolPlan.runtimeExtensions);
175
301
  const configured = boundedExtensionIdentifiers(toolPlan.configuredExtensions);
176
302
  const effective = boundedExtensionIdentifiers(toolPlan.extensionArgs);
@@ -189,55 +315,207 @@ export function projectLaunchResolvedChildExtensions(toolPlan: Pick<PiLaunchTool
189
315
  };
190
316
  }
191
317
 
192
- export function resolvePiLaunchToolPlan(input: ResolvePiLaunchToolPlanInput): PiLaunchToolPlan {
193
- const capabilityCeiling = intersectSubagentCapabilityCeilings(input.capabilityCeiling, input.inheritedCapabilityCeiling);
194
- const allowedToolSet = capabilityCeiling?.allowedTools === undefined ? undefined : new Set(capabilityCeiling.allowedTools);
195
- const requestedBuiltinTools = input.tools?.filter((tool) => !(tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js"))) ?? [];
318
+ /**
319
+ * Resolve the permission-system extension entry point when installed.
320
+ * Returns the absolute path to the extension's main module, or undefined
321
+ * when the package is not installed. Callers can check `autoInject` config
322
+ * to decide whether to include it in child processes.
323
+ */
324
+ export function resolvePermissionSystemExtension(): string | undefined {
325
+ const agentDir = getAgentDir();
326
+ const candidates = [
327
+ // npm-scoped package (most common)
328
+ path.join(
329
+ agentDir,
330
+ "npm",
331
+ "node_modules",
332
+ "@gotgenes",
333
+ "pi-permission-system",
334
+ ),
335
+ // direct extension directory (some layouts)
336
+ path.join(agentDir, "extensions", "pi-permission-system"),
337
+ ];
338
+ const errors: Error[] = [];
339
+ for (const extDir of candidates) {
340
+ if (!fs.existsSync(extDir)) continue;
341
+ const pkgPath = path.join(extDir, "package.json");
342
+ if (!fs.existsSync(pkgPath)) {
343
+ errors.push(new Error(`Permission-system package manifest is missing at ${pkgPath}.`));
344
+ continue;
345
+ }
346
+ try {
347
+ let pkg: { pi?: { extensions?: string[] } };
348
+ const parsed: unknown = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
349
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
350
+ throw new Error("manifest root must be an object");
351
+ }
352
+ pkg = parsed as typeof pkg;
353
+ const extensions = pkg.pi?.extensions;
354
+ const entry = Array.isArray(extensions) ? extensions[0] : undefined;
355
+ if (typeof entry !== "string" || !entry.trim()) {
356
+ throw new Error(
357
+ `Permission-system package manifest at ${pkgPath} must declare pi.extensions[0] as a non-empty string.`,
358
+ );
359
+ }
360
+ const resolved = path.resolve(extDir, entry);
361
+ if (fs.existsSync(resolved)) return resolved;
362
+ throw new Error(
363
+ `Permission-system extension entry ${JSON.stringify(entry)} in ${pkgPath} does not exist at ${resolved}.`,
364
+ );
365
+ } catch (error) {
366
+ const message = error instanceof Error ? error.message : String(error);
367
+ errors.push(message.startsWith("Permission-system") ? new Error(message) : new Error(`Cannot read permission-system package manifest at ${pkgPath}: ${message}`));
368
+ }
369
+ }
370
+ if (errors.length > 0) throw errors[0]!;
371
+ return undefined;
372
+ }
373
+
374
+ export function resolvePiLaunchToolPlan(
375
+ input: ResolvePiLaunchToolPlanInput,
376
+ ): PiLaunchToolPlan {
377
+ const capabilityCeiling = intersectSubagentCapabilityCeilings(
378
+ input.capabilityCeiling,
379
+ input.inheritedCapabilityCeiling,
380
+ );
381
+ const allowedToolSet =
382
+ capabilityCeiling?.allowedTools === undefined
383
+ ? undefined
384
+ : new Set(capabilityCeiling.allowedTools);
385
+ const requestedBuiltinTools =
386
+ input.tools?.filter(
387
+ (tool) =>
388
+ !(tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js")),
389
+ ) ?? [];
196
390
  if (input.requireReadTool && allowedToolSet && !allowedToolSet.has("read")) {
197
- throw new Error(`Capability ceiling from ${capabilityCeiling?.sources.join(", ") || "unknown source"} excludes required tool 'read' for lazy skill loading.`);
391
+ throw new Error(
392
+ `Capability ceiling from ${capabilityCeiling?.sources.join(", ") || "unknown source"} excludes required tool 'read' for lazy skill loading.`,
393
+ );
198
394
  }
199
- const declaredBuiltinTools = input.tools === undefined
200
- ? (allowedToolSet ? [...allowedToolSet] : [])
201
- : (input.requireReadTool && requestedBuiltinTools.length > 0 && !requestedBuiltinTools.includes("read") && !allowedToolSet
202
- ? ["read", ...requestedBuiltinTools]
203
- : requestedBuiltinTools).filter((tool) => !allowedToolSet || allowedToolSet.has(tool));
395
+ const declaredBuiltinTools =
396
+ input.tools === undefined
397
+ ? allowedToolSet
398
+ ? [...allowedToolSet]
399
+ : []
400
+ : (input.requireReadTool &&
401
+ requestedBuiltinTools.length > 0 &&
402
+ !requestedBuiltinTools.includes("read") &&
403
+ !allowedToolSet
404
+ ? ["read", ...requestedBuiltinTools]
405
+ : requestedBuiltinTools
406
+ ).filter((tool) => !allowedToolSet || allowedToolSet.has(tool));
204
407
  const fanoutAuthorized = declaredBuiltinTools.includes("subagent");
205
- const toolExtensionPaths: string[] = capabilityCeiling?.denyExtensions ? [] : (input.tools ?? []).filter((tool) => !requestedBuiltinTools.includes(tool) && (tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js")));
206
- const resolvedMcpSelections = capabilityCeiling?.denyExtensions ? [] : resolveMcpDirectToolSelections(input.mcpDirectTools, input.cwd);
207
- const effectiveMcpSelections = resolvedMcpSelections.filter((selection) => !allowedToolSet || allowedToolSet.has(selection.name));
208
- const effectiveMcpTools = effectiveMcpSelections.map((selection) => selection.name);
209
- const explicitToolAllowlist = input.tools !== undefined || (input.mcpDirectTools?.length ?? 0) > 0 || allowedToolSet !== undefined;
408
+ const toolExtensionPaths: string[] = capabilityCeiling?.denyExtensions
409
+ ? []
410
+ : (input.tools ?? []).filter(
411
+ (tool) =>
412
+ !requestedBuiltinTools.includes(tool) &&
413
+ (tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js")),
414
+ );
415
+ const resolvedMcpSelections = capabilityCeiling?.denyExtensions
416
+ ? []
417
+ : resolveMcpDirectToolSelections(input.mcpDirectTools, input.cwd);
418
+ const effectiveMcpSelections = resolvedMcpSelections.filter(
419
+ (selection) => !allowedToolSet || allowedToolSet.has(selection.name),
420
+ );
421
+ const effectiveMcpTools = effectiveMcpSelections.map(
422
+ (selection) => selection.name,
423
+ );
424
+ const explicitToolAllowlist =
425
+ input.tools !== undefined ||
426
+ (input.mcpDirectTools?.length ?? 0) > 0 ||
427
+ allowedToolSet !== undefined;
210
428
  const internalTools = input.structuredOutput ? ["structured_output"] : [];
211
- const effectiveToolAllowlist = [...new Set([...declaredBuiltinTools, ...effectiveMcpTools, ...internalTools])];
212
- const requiredChildTools = explicitToolAllowlist ? [...new Set([
213
- ...(input.tools !== undefined ? declaredBuiltinTools : []),
214
- ...(input.mcpDirectTools?.length ? effectiveMcpTools : []),
215
- ...internalTools,
216
- ])] : [];
217
- const runtimeExtensions = fanoutAuthorized
218
- ? [PROMPT_RUNTIME_EXTENSION_PATH, FANOUT_CHILD_EXTENSION_PATH]
219
- : [PROMPT_RUNTIME_EXTENSION_PATH];
220
- const disableAmbientExtensions = capabilityCeiling?.denyExtensions === true || input.extensions !== undefined;
221
- const configuredExtensions = capabilityCeiling?.denyExtensions ? [] : [...toolExtensionPaths, ...(input.extensions ?? []), ...(input.subagentOnlyExtensions ?? [])];
429
+ const effectiveToolAllowlist = [
430
+ ...new Set([
431
+ ...declaredBuiltinTools,
432
+ ...effectiveMcpTools,
433
+ ...internalTools,
434
+ ]),
435
+ ];
436
+ const requiredChildTools = explicitToolAllowlist
437
+ ? [
438
+ ...new Set([
439
+ ...(input.tools !== undefined ? declaredBuiltinTools : []),
440
+ ...(input.mcpDirectTools?.length ? effectiveMcpTools : []),
441
+ ...internalTools,
442
+ ]),
443
+ ]
444
+ : [];
445
+ const permSystemExt = capabilityCeiling?.denyExtensions
446
+ ? undefined
447
+ : resolvePermissionSystemExtension();
448
+ const runtimeExtensions = [
449
+ PROMPT_RUNTIME_EXTENSION_PATH,
450
+ ...(fanoutAuthorized ? [FANOUT_CHILD_EXTENSION_PATH] : []),
451
+ ...(permSystemExt ? [permSystemExt] : []),
452
+ ];
453
+ const disableAmbientExtensions =
454
+ capabilityCeiling?.denyExtensions === true ||
455
+ input.extensions !== undefined;
456
+ const configuredExtensions = capabilityCeiling?.denyExtensions
457
+ ? []
458
+ : [
459
+ ...toolExtensionPaths,
460
+ ...(input.extensions ?? []),
461
+ ...(input.subagentOnlyExtensions ?? []),
462
+ ];
222
463
  const extensionArgs = disableAmbientExtensions
223
464
  ? [...new Set([...runtimeExtensions, ...configuredExtensions])]
224
- : [...new Set([...runtimeExtensions, ...toolExtensionPaths, ...(input.subagentOnlyExtensions ?? [])])];
225
- const requestedToolNames = input.tools !== undefined
226
- ? [...new Set([...requestedBuiltinTools, ...resolvedMcpSelections.map((selection) => selection.name)])]
465
+ : [
466
+ ...new Set([
467
+ ...runtimeExtensions,
468
+ ...toolExtensionPaths,
469
+ ...(input.subagentOnlyExtensions ?? []),
470
+ ]),
471
+ ];
472
+ const requestedToolNames =
473
+ input.tools !== undefined
474
+ ? [
475
+ ...new Set([
476
+ ...requestedBuiltinTools,
477
+ ...resolvedMcpSelections.map((selection) => selection.name),
478
+ ]),
479
+ ]
480
+ : undefined;
481
+ const capabilityAudit = capabilityCeiling
482
+ ? ({
483
+ ceiling: capabilityCeiling,
484
+ ...(requestedToolNames ? { requestedTools: requestedToolNames } : {}),
485
+ effectiveTools: effectiveToolAllowlist,
486
+ removedTools:
487
+ requestedToolNames?.filter(
488
+ (tool) => !effectiveToolAllowlist.includes(tool),
489
+ ) ?? [],
490
+ internalTools,
491
+ extensionsDenied: capabilityCeiling.denyExtensions,
492
+ removedExtensionCount: capabilityCeiling.denyExtensions
493
+ ? (input.extensions?.length ?? 0) +
494
+ (input.subagentOnlyExtensions?.length ?? 0) +
495
+ (input.tools ?? []).filter(
496
+ (tool) =>
497
+ tool.includes("/") ||
498
+ tool.endsWith(".ts") ||
499
+ tool.endsWith(".js"),
500
+ ).length
501
+ : 0,
502
+ requestedMcpToolCount: input.mcpDirectTools?.length ?? 0,
503
+ effectiveMcpTools,
504
+ agentAllowed:
505
+ input.agentName === undefined
506
+ ? true
507
+ : isAgentAllowedByCapabilityCeiling(
508
+ input.agentName,
509
+ capabilityCeiling,
510
+ ),
511
+ ...(capabilityCeilingAgentRestrictionSources(capabilityCeiling)
512
+ ? {
513
+ agentRestrictionSources:
514
+ capabilityCeilingAgentRestrictionSources(capabilityCeiling),
515
+ }
516
+ : {}),
517
+ } satisfies SubagentCapabilityAudit)
227
518
  : undefined;
228
- const capabilityAudit = capabilityCeiling ? {
229
- ceiling: capabilityCeiling,
230
- ...(requestedToolNames ? { requestedTools: requestedToolNames } : {}),
231
- effectiveTools: effectiveToolAllowlist,
232
- removedTools: requestedToolNames?.filter((tool) => !effectiveToolAllowlist.includes(tool)) ?? [],
233
- internalTools,
234
- extensionsDenied: capabilityCeiling.denyExtensions,
235
- removedExtensionCount: capabilityCeiling.denyExtensions ? (input.extensions?.length ?? 0) + (input.subagentOnlyExtensions?.length ?? 0) + ((input.tools ?? []).filter((tool) => tool.includes("/") || tool.endsWith(".ts") || tool.endsWith(".js")).length) : 0,
236
- requestedMcpToolCount: input.mcpDirectTools?.length ?? 0,
237
- effectiveMcpTools,
238
- agentAllowed: input.agentName === undefined ? true : isAgentAllowedByCapabilityCeiling(input.agentName, capabilityCeiling),
239
- ...(capabilityCeilingAgentRestrictionSources(capabilityCeiling) ? { agentRestrictionSources: capabilityCeilingAgentRestrictionSources(capabilityCeiling) } : {}),
240
- } satisfies SubagentCapabilityAudit : undefined;
241
519
  return {
242
520
  ...(capabilityCeiling ? { capabilityCeiling } : {}),
243
521
  requestedBuiltinTools,
@@ -259,6 +537,15 @@ export function resolvePiLaunchToolPlan(input: ResolvePiLaunchToolPlanInput): Pi
259
537
  };
260
538
  }
261
539
 
540
+ /** Escape XML-significant characters in a string for safe attribute interpolation. */
541
+ function escapeXmlAttr(value: string): string {
542
+ return value
543
+ .replace(/&/g, "&amp;")
544
+ .replace(/"/g, "&quot;")
545
+ .replace(/</g, "&lt;")
546
+ .replace(/>/g, "&gt;");
547
+ }
548
+
262
549
  export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
263
550
  const args = [...input.baseArgs];
264
551
 
@@ -289,17 +576,23 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
289
576
  requireReadTool: input.requireReadTool,
290
577
  structuredOutput: input.structuredOutput,
291
578
  capabilityCeiling: input.capabilityCeiling,
292
- inheritedCapabilityCeiling: decodeSubagentCapabilityCeiling(process.env[SUBAGENT_CAPABILITY_CEILING_ENV]),
579
+ inheritedCapabilityCeiling: decodeSubagentCapabilityCeiling(
580
+ process.env[SUBAGENT_CAPABILITY_CEILING_ENV],
581
+ ),
293
582
  agentName: input.childAgentName,
294
583
  });
295
584
  if (toolPlan.explicitToolAllowlist) {
296
- args.push(toolPlan.effectiveToolAllowlist.length > 0 ? "--tools" : "--no-tools");
297
- if (toolPlan.effectiveToolAllowlist.length > 0) args.push(toolPlan.effectiveToolAllowlist.join(","));
585
+ args.push(
586
+ toolPlan.effectiveToolAllowlist.length > 0 ? "--tools" : "--no-tools",
587
+ );
588
+ if (toolPlan.effectiveToolAllowlist.length > 0)
589
+ args.push(toolPlan.effectiveToolAllowlist.join(","));
298
590
  }
299
591
  if (toolPlan.disableAmbientExtensions) {
300
592
  args.push("--no-extensions");
301
593
  }
302
- for (const extPath of toolPlan.extensionArgs) args.push("--extension", extPath);
594
+ for (const extPath of toolPlan.extensionArgs)
595
+ args.push("--extension", extPath);
303
596
 
304
597
  if (!input.inheritProjectContext) {
305
598
  args.push("--no-context-files");
@@ -313,11 +606,26 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
313
606
  tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
314
607
  const stem = (input.promptFileStem ?? "prompt").replace(/[^\w.-]/g, "_");
315
608
  const promptPath = path.join(tempDir, `${stem}.md`);
316
- fs.writeFileSync(promptPath, input.systemPrompt, { mode: 0o600 });
317
- args.push(input.systemPromptMode === "replace" ? "--system-prompt" : "--append-system-prompt", promptPath);
609
+ // Inject <active_agent> tag so @gotgenes/pi-permission-system can
610
+ // resolve per-agent policy inside the child session.
611
+ const taggedPrompt = input.childAgentName
612
+ ? `<active_agent name="${escapeXmlAttr(input.childAgentName)}"/>\n\n${input.systemPrompt}`
613
+ : input.systemPrompt;
614
+ fs.writeFileSync(promptPath, taggedPrompt, { mode: 0o600 });
615
+ args.push(
616
+ input.systemPromptMode === "replace"
617
+ ? "--system-prompt"
618
+ : "--append-system-prompt",
619
+ promptPath,
620
+ );
318
621
  }
319
622
 
320
- if (input.task.length > TASK_ARG_LIMIT) {
623
+ if (
624
+ shouldDeliverTaskViaFile(
625
+ input.task,
626
+ input.taskDelivery ?? resolveSubagentTaskDelivery(),
627
+ )
628
+ ) {
321
629
  if (!tempDir) {
322
630
  tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
323
631
  }
@@ -329,58 +637,109 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
329
637
  }
330
638
 
331
639
  const env: Record<string, string | undefined> = {};
332
- const piPackageRoot = process.env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV] ?? resolvePiPackageRoot();
640
+ const piPackageRoot =
641
+ process.env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV] ?? resolvePiPackageRoot();
333
642
  if (piPackageRoot) env[SELESAI_CODING_AGENT_PACKAGE_ROOT_ENV] = piPackageRoot;
334
- if (!tempDir) tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
335
- const runtimeAcknowledgedExtensionsPath = path.join(tempDir, "runtime-acknowledged-extensions.json");
643
+ if (!tempDir)
644
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
645
+ const runtimeAcknowledgedExtensionsPath = path.join(
646
+ tempDir,
647
+ "runtime-acknowledged-extensions.json",
648
+ );
336
649
  env[RUNTIME_EXTENSION_ACK_PATH_ENV] = runtimeAcknowledgedExtensionsPath;
337
650
  let toolDiagnosticPath: string | undefined;
338
651
  if (toolPlan.requiredChildTools.length > 0) {
339
- if (!tempDir) tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
652
+ if (!tempDir)
653
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "pi-subagent-"));
340
654
  toolDiagnosticPath = path.join(tempDir, "tool-diagnostic.json");
341
655
  env[REQUIRED_CHILD_TOOLS_ENV] = JSON.stringify(toolPlan.requiredChildTools);
342
656
  env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV] = toolDiagnosticPath;
343
657
  }
344
- env[MCP_DIRECT_CHILD_TOOLS_ENV] = toolPlan.effectiveMcpTools.length > 0 ? JSON.stringify(toolPlan.effectiveMcpTools) : undefined;
658
+ env[MCP_DIRECT_CHILD_TOOLS_ENV] =
659
+ toolPlan.effectiveMcpTools.length > 0
660
+ ? JSON.stringify(toolPlan.effectiveMcpTools)
661
+ : undefined;
345
662
  env[SUBAGENT_CHILD_ENV] = "1";
346
663
  env[SUBAGENT_FANOUT_CHILD_ENV] = toolPlan.fanoutAuthorized ? "1" : "0";
347
664
  if (input.waitToolEnabled !== undefined) {
348
665
  env[WAIT_TOOL_ENABLED_ENV] = input.waitToolEnabled ? "true" : "false";
349
666
  }
350
- const inheritedNestedRoute = Boolean(process.env[SUBAGENT_PARENT_EVENT_SINK_ENV] && process.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV] && process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV]);
351
- const parentRunId = input.parentRunId ?? input.runId ?? (inheritedNestedRoute ? process.env[SUBAGENT_RUN_ID_ENV] : undefined) ?? process.env[SUBAGENT_PARENT_RUN_ID_ENV] ?? "";
352
- const parentChildIndex = input.parentChildIndex !== undefined
353
- ? String(input.parentChildIndex)
354
- : input.childIndex !== undefined
355
- ? String(input.childIndex)
356
- : process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] ?? "";
667
+ const inheritedNestedRoute = Boolean(
668
+ process.env[SUBAGENT_PARENT_EVENT_SINK_ENV] &&
669
+ process.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV] &&
670
+ process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV],
671
+ );
672
+ const parentRunId =
673
+ input.parentRunId ??
674
+ input.runId ??
675
+ (inheritedNestedRoute ? process.env[SUBAGENT_RUN_ID_ENV] : undefined) ??
676
+ process.env[SUBAGENT_PARENT_RUN_ID_ENV] ??
677
+ "";
678
+ const parentChildIndex =
679
+ input.parentChildIndex !== undefined
680
+ ? String(input.parentChildIndex)
681
+ : input.childIndex !== undefined
682
+ ? String(input.childIndex)
683
+ : (process.env[SUBAGENT_PARENT_CHILD_INDEX_ENV] ?? "");
357
684
  const inheritedDepth = Number(process.env[SUBAGENT_PARENT_DEPTH_ENV]);
358
- const parentDepth = input.parentDepth ?? (inheritedNestedRoute && Number.isFinite(inheritedDepth) ? inheritedDepth + 1 : 1);
685
+ const parentDepth =
686
+ input.parentDepth ??
687
+ (inheritedNestedRoute && Number.isFinite(inheritedDepth)
688
+ ? inheritedDepth + 1
689
+ : 1);
359
690
  const parentPath = input.parentPath ?? [
360
691
  ...parseNestedPathEnv(process.env[SUBAGENT_PARENT_PATH_ENV]),
361
- ...(parentRunId ? [{
362
- runId: parentRunId,
363
- ...(parentChildIndex && /^\d+$/.test(parentChildIndex) ? { stepIndex: Number(parentChildIndex) } : {}),
364
- ...(input.childAgentName ? { agent: input.childAgentName } : {}),
365
- }] : []),
692
+ ...(parentRunId
693
+ ? [
694
+ {
695
+ runId: parentRunId,
696
+ ...(parentChildIndex && /^\d+$/.test(parentChildIndex)
697
+ ? { stepIndex: Number(parentChildIndex) }
698
+ : {}),
699
+ ...(input.childAgentName ? { agent: input.childAgentName } : {}),
700
+ },
701
+ ]
702
+ : []),
366
703
  ];
367
704
  env[SUBAGENT_PARENT_EVENT_SINK_ENV] = toolPlan.fanoutAuthorized
368
- ? input.parentEventSink ?? process.env[SUBAGENT_PARENT_EVENT_SINK_ENV] ?? ""
705
+ ? (input.parentEventSink ??
706
+ process.env[SUBAGENT_PARENT_EVENT_SINK_ENV] ??
707
+ "")
369
708
  : "";
370
709
  env[SUBAGENT_PARENT_CONTROL_INBOX_ENV] = toolPlan.fanoutAuthorized
371
- ? input.parentControlInbox ?? process.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV] ?? ""
710
+ ? (input.parentControlInbox ??
711
+ process.env[SUBAGENT_PARENT_CONTROL_INBOX_ENV] ??
712
+ "")
372
713
  : "";
373
714
  env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV] = toolPlan.fanoutAuthorized
374
- ? input.parentRootRunId ?? process.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV] ?? input.runId ?? ""
715
+ ? (input.parentRootRunId ??
716
+ process.env[SUBAGENT_PARENT_ROOT_RUN_ID_ENV] ??
717
+ input.runId ??
718
+ "")
719
+ : "";
720
+ env[SUBAGENT_PARENT_RUN_ID_ENV] = toolPlan.fanoutAuthorized
721
+ ? parentRunId
722
+ : "";
723
+ env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = toolPlan.fanoutAuthorized
724
+ ? parentChildIndex
725
+ : "";
726
+ env[SUBAGENT_PARENT_DEPTH_ENV] = toolPlan.fanoutAuthorized
727
+ ? String(parentDepth)
728
+ : "";
729
+ env[SUBAGENT_PARENT_PATH_ENV] = toolPlan.fanoutAuthorized
730
+ ? encodeNestedPathEnv(parentPath)
375
731
  : "";
376
- env[SUBAGENT_PARENT_RUN_ID_ENV] = toolPlan.fanoutAuthorized ? parentRunId : "";
377
- env[SUBAGENT_PARENT_CHILD_INDEX_ENV] = toolPlan.fanoutAuthorized ? parentChildIndex : "";
378
- env[SUBAGENT_PARENT_DEPTH_ENV] = toolPlan.fanoutAuthorized ? String(parentDepth) : "";
379
- env[SUBAGENT_PARENT_PATH_ENV] = toolPlan.fanoutAuthorized ? encodeNestedPathEnv(parentPath) : "";
380
732
  env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] = toolPlan.fanoutAuthorized
381
- ? input.parentCapabilityToken ?? process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] ?? ""
733
+ ? (input.parentCapabilityToken ??
734
+ process.env[SUBAGENT_PARENT_CAPABILITY_TOKEN_ENV] ??
735
+ "")
382
736
  : "";
383
- env.SELESAI_SUBAGENT_INHERIT_PROJECT_CONTEXT = input.inheritProjectContext ? "1" : "0";
737
+ env[RUN_FANOUT_BUDGET_ENV] = toolPlan.fanoutAuthorized
738
+ ? (input.runFanoutBudget ? encodeRunFanoutBudgetDescriptor(input.runFanoutBudget) : process.env[RUN_FANOUT_BUDGET_ENV])
739
+ : undefined;
740
+ env.SELESAI_SUBAGENT_INHERIT_PROJECT_CONTEXT = input.inheritProjectContext
741
+ ? "1"
742
+ : "0";
384
743
  env.SELESAI_SUBAGENT_INHERIT_SKILLS = input.inheritSkills ? "1" : "0";
385
744
  env[PI_INTERCOM_STABLE_ID_ENV] = input.intercomSessionName || undefined;
386
745
  env[PI_INTERCOM_SESSION_ID_ENV] = undefined;
@@ -394,14 +753,25 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
394
753
  env[SUBAGENT_ORCHESTRATOR_SESSION_ID_ENV] = input.parentSessionId;
395
754
  }
396
755
  const encodedPermissionRules = encodePermissionRules(input.permissionRules);
397
- if (input.orchestratorIntercomTarget && input.parentSessionId && input.runId && input.childAgentName) {
756
+ if (
757
+ input.orchestratorIntercomTarget &&
758
+ input.parentSessionId &&
759
+ input.runId &&
760
+ input.childAgentName
761
+ ) {
398
762
  const childIndex = input.childIndex ?? 0;
399
- const channelDir = supervisorChannelDir(input.runId, input.childAgentName, childIndex);
763
+ const channelDir = supervisorChannelDir(
764
+ input.runId,
765
+ input.childAgentName,
766
+ childIndex,
767
+ );
400
768
  fs.mkdirSync(path.join(channelDir, "requests"), { recursive: true });
401
769
  fs.mkdirSync(path.join(channelDir, "replies"), { recursive: true });
402
770
  env[SUBAGENT_SUPERVISOR_CHANNEL_DIR_ENV] = channelDir;
403
771
  }
404
- if (encodedPermissionRules) env[PERMISSION_AUDIT_PATH_ENV] = input.permissionAuditPath ?? path.join(tempDir, "permission-audit.jsonl");
772
+ if (encodedPermissionRules)
773
+ env[PERMISSION_AUDIT_PATH_ENV] =
774
+ input.permissionAuditPath ?? path.join(tempDir, "permission-audit.jsonl");
405
775
  if (input.runId) {
406
776
  env[SUBAGENT_RUN_ID_ENV] = input.runId;
407
777
  }
@@ -411,12 +781,24 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
411
781
  if (input.childIndex !== undefined) {
412
782
  env[SUBAGENT_CHILD_INDEX_ENV] = String(input.childIndex);
413
783
  }
414
- if (!toolPlan.capabilityCeiling && input.mcpDirectTools?.length) env.MCP_DIRECT_TOOLS = input.mcpDirectTools.join(",");
415
- else if (toolPlan.capabilityCeiling && toolPlan.effectiveMcpSelections.length && !toolPlan.capabilityCeiling.denyExtensions) env.MCP_DIRECT_TOOLS = toolPlan.effectiveMcpSelections.map((selection) => selection.selector).join(",");
784
+ if (!toolPlan.capabilityCeiling && input.mcpDirectTools?.length)
785
+ env.MCP_DIRECT_TOOLS = input.mcpDirectTools.join(",");
786
+ else if (
787
+ toolPlan.capabilityCeiling &&
788
+ toolPlan.effectiveMcpSelections.length &&
789
+ !toolPlan.capabilityCeiling.denyExtensions
790
+ )
791
+ env.MCP_DIRECT_TOOLS = toolPlan.effectiveMcpSelections
792
+ .map((selection) => selection.selector)
793
+ .join(",");
416
794
  else env.MCP_DIRECT_TOOLS = "__none__";
417
- const encodedCapabilityCeiling = encodeSubagentCapabilityCeiling(toolPlan.capabilityCeiling);
418
- if (encodedCapabilityCeiling) env[SUBAGENT_CAPABILITY_CEILING_ENV] = encodedCapabilityCeiling;
419
- if (encodedPermissionRules) env[PERMISSION_POLICY_ENV] = encodedPermissionRules;
795
+ const encodedCapabilityCeiling = encodeSubagentCapabilityCeiling(
796
+ toolPlan.capabilityCeiling,
797
+ );
798
+ if (encodedCapabilityCeiling)
799
+ env[SUBAGENT_CAPABILITY_CEILING_ENV] = encodedCapabilityCeiling;
800
+ if (encodedPermissionRules)
801
+ env[PERMISSION_POLICY_ENV] = encodedPermissionRules;
420
802
  if (input.structuredOutput) {
421
803
  env[STRUCTURED_OUTPUT_CAPTURE_ENV] = input.structuredOutput.outputPath;
422
804
  env[STRUCTURED_OUTPUT_SCHEMA_ENV] = input.structuredOutput.schemaPath;
@@ -424,17 +806,27 @@ export function buildPiArgs(input: BuildPiArgsInput): BuildPiArgsResult {
424
806
  if (input.steerInboxDir) {
425
807
  env[SUBAGENT_STEER_INBOX_ENV] = input.steerInboxDir;
426
808
  }
427
- if (input.steerCapabilityPath) env[SUBAGENT_STEER_CAPABILITY_ENV] = input.steerCapabilityPath;
809
+ if (input.steerCapabilityPath)
810
+ env[SUBAGENT_STEER_CAPABILITY_ENV] = input.steerCapabilityPath;
428
811
  if (input.steerAckDir) env[SUBAGENT_STEER_ACK_DIR_ENV] = input.steerAckDir;
429
812
  const encodedToolBudget = encodeToolBudgetEnv(input.toolBudget);
430
813
  if (encodedToolBudget) env[TOOL_BUDGET_ENV] = encodedToolBudget;
431
814
  env[TOOL_BUDGET_ZERO_AUTH_ENV] = input.allowZeroToolBudget ? "1" : undefined;
432
815
  const encodedChildWatchdog = encodeChildWatchdogConfig(input.childWatchdog);
433
- if (encodedChildWatchdog) env[CHILD_WATCHDOG_CONFIG_ENV] = encodedChildWatchdog;
816
+ if (encodedChildWatchdog)
817
+ env[CHILD_WATCHDOG_CONFIG_ENV] = encodedChildWatchdog;
434
818
 
435
- env[SUBAGENT_PARENT_SESSION_ENV] = input.parentSessionId ?? process.env[SUBAGENT_PARENT_SESSION_ENV] ?? "";
819
+ env[SUBAGENT_PARENT_SESSION_ENV] =
820
+ input.parentSessionId ?? process.env[SUBAGENT_PARENT_SESSION_ENV] ?? "";
436
821
 
437
- return { args, env, tempDir, toolDiagnosticPath, runtimeAcknowledgedExtensionsPath, capabilityAudit: toolPlan.capabilityAudit };
822
+ return {
823
+ args,
824
+ env,
825
+ tempDir,
826
+ toolDiagnosticPath,
827
+ runtimeAcknowledgedExtensionsPath,
828
+ capabilityAudit: toolPlan.capabilityAudit,
829
+ };
438
830
  }
439
831
 
440
832
  export const parseParentPathEnv = parseNestedPathEnv;