@ashx-j/lunr 0.1.0 → 0.1.2

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 (869) hide show
  1. package/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
  2. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
  3. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
  5. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js +3 -3
  7. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
  9. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  10. package/dist/builtin-extensions/ashxj-tui.js +2 -2
  11. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  12. package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
  13. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
  17. package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
  18. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
  19. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  21. package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
  22. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
  24. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
  25. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
  26. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
  28. package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
  29. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  30. package/dist/builtin-extensions/lunr-todos.js +1 -1
  31. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
  34. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
  35. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  36. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  37. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
  38. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  39. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  40. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  41. package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
  42. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  44. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  45. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
  46. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
  48. package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
  49. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
  50. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
  52. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
  53. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
  54. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
  56. package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
  57. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
  61. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
  63. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  64. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
  65. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
  67. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
  68. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
  71. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
  72. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
  73. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  75. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
  76. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
  77. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
  78. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
  79. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
  81. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
  82. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
  83. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
  85. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
  86. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
  87. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
  89. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
  90. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
  91. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
  92. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
  93. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
  94. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
  95. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
  97. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
  98. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
  99. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
  101. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
  102. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
  103. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
  105. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
  106. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
  107. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  108. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  109. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
  110. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  112. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
  113. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
  115. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
  116. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  118. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
  119. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  121. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
  122. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
  123. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
  124. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
  125. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
  126. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
  127. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
  129. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
  130. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
  131. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  132. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  133. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
  134. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
  136. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
  137. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
  138. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  139. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  140. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
  141. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
  143. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
  144. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
  145. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
  146. package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
  147. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
  148. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
  149. package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
  150. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  151. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  152. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  153. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
  154. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
  156. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
  157. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
  158. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  159. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
  160. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
  162. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
  163. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
  164. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
  165. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
  166. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
  167. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  168. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  169. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
  172. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
  173. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
  175. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
  176. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
  178. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
  179. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
  181. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
  182. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  183. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
  184. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  185. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
  186. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
  188. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
  189. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
  190. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
  192. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
  193. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
  194. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  195. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +1 -1
  196. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  197. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
  198. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
  199. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
  200. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
  201. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  202. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  203. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  204. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  205. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
  206. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  207. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
  208. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  209. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  210. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  211. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
  212. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  214. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  215. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  216. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
  217. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  218. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
  219. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
  220. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
  221. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
  222. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
  223. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
  224. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
  225. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  226. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  227. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
  228. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
  229. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
  230. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +1 -1
  231. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  232. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  233. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +1 -1
  234. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  235. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  236. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
  237. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  238. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  239. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +1 -1
  240. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  241. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  242. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  243. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  244. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  245. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +1 -1
  246. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  247. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  248. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
  249. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  250. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  251. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  252. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  253. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
  254. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  255. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  256. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  257. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  258. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  259. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
  260. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
  261. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
  262. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
  263. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  264. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1 -1
  265. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  266. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +2 -2
  267. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  268. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  269. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  270. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  271. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
  272. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  273. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  274. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
  275. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
  276. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
  277. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
  278. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
  279. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
  280. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
  281. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
  282. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
  283. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
  284. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
  285. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  286. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  287. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
  288. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
  289. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
  290. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  291. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  292. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  293. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -3
  294. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  295. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  296. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  297. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  298. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
  299. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  300. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  301. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  302. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  303. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
  304. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
  305. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js.map +1 -1
  306. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  307. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  308. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +2 -2
  309. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  310. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
  311. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
  312. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
  313. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
  314. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  315. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
  316. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  317. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
  318. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
  319. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
  320. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
  321. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
  322. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  323. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
  324. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  325. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
  326. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
  327. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
  328. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
  329. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
  330. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
  331. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
  332. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  333. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
  334. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
  335. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
  336. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
  337. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
  338. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
  339. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
  340. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  341. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  342. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  343. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
  344. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
  345. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
  346. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
  347. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
  348. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  349. package/dist/builtin-extensions/pi-tps.d.ts +1 -1
  350. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  351. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  352. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  353. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  354. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  355. package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
  356. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  357. package/dist/builtin-extensions/pi-web-access/index.js +2 -2
  358. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  359. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
  360. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
  361. package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
  362. package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
  363. package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
  364. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  365. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  366. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
  367. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
  368. package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
  369. package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
  370. package/dist/bun/cli.d.ts.map +1 -1
  371. package/dist/bun/cli.js +1 -1
  372. package/dist/bun/cli.js.map +1 -1
  373. package/dist/bun/register-bedrock.d.ts.map +1 -1
  374. package/dist/bun/register-bedrock.js +2 -2
  375. package/dist/bun/register-bedrock.js.map +1 -1
  376. package/dist/catalog/models.json +1 -1
  377. package/dist/catalog/providers/opencode-go.json +1 -1
  378. package/dist/catalog/providers/openrouter.json +1 -1
  379. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
  380. package/dist/catalog/providers/qwen-token-plan.json +1 -1
  381. package/dist/catalog/publication.json +3 -3
  382. package/dist/cli/args.d.ts +1 -1
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js.map +1 -1
  385. package/dist/cli/config-selector.d.ts.map +1 -1
  386. package/dist/cli/config-selector.js +1 -1
  387. package/dist/cli/config-selector.js.map +1 -1
  388. package/dist/cli/file-processor.d.ts +1 -1
  389. package/dist/cli/file-processor.d.ts.map +1 -1
  390. package/dist/cli/file-processor.js.map +1 -1
  391. package/dist/cli/initial-message.d.ts +1 -1
  392. package/dist/cli/initial-message.d.ts.map +1 -1
  393. package/dist/cli/initial-message.js.map +1 -1
  394. package/dist/cli/list-models.d.ts.map +1 -1
  395. package/dist/cli/list-models.js +1 -1
  396. package/dist/cli/list-models.js.map +1 -1
  397. package/dist/cli/session-picker.d.ts.map +1 -1
  398. package/dist/cli/session-picker.js +1 -1
  399. package/dist/cli/session-picker.js.map +1 -1
  400. package/dist/cli/startup-ui.d.ts +1 -1
  401. package/dist/cli/startup-ui.d.ts.map +1 -1
  402. package/dist/cli/startup-ui.js +2 -2
  403. package/dist/cli/startup-ui.js.map +1 -1
  404. package/dist/config.d.ts.map +1 -1
  405. package/dist/config.js +1 -1
  406. package/dist/config.js.map +1 -1
  407. package/dist/core/agent-session-services.d.ts +2 -2
  408. package/dist/core/agent-session-services.d.ts.map +1 -1
  409. package/dist/core/agent-session-services.js.map +1 -1
  410. package/dist/core/agent-session.d.ts +2 -2
  411. package/dist/core/agent-session.d.ts.map +1 -1
  412. package/dist/core/agent-session.js +1 -1
  413. package/dist/core/agent-session.js.map +1 -1
  414. package/dist/core/auth-storage.d.ts +1 -1
  415. package/dist/core/auth-storage.d.ts.map +1 -1
  416. package/dist/core/auth-storage.js.map +1 -1
  417. package/dist/core/cache-stats.d.ts +1 -1
  418. package/dist/core/cache-stats.d.ts.map +1 -1
  419. package/dist/core/cache-stats.js.map +1 -1
  420. package/dist/core/catalog-merge.d.ts +1 -1
  421. package/dist/core/catalog-merge.d.ts.map +1 -1
  422. package/dist/core/catalog-merge.js +7 -1
  423. package/dist/core/catalog-merge.js.map +1 -1
  424. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  425. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  426. package/dist/core/compaction/branch-summarization.js +1 -1
  427. package/dist/core/compaction/branch-summarization.js.map +1 -1
  428. package/dist/core/compaction/compaction.d.ts +2 -2
  429. package/dist/core/compaction/compaction.d.ts.map +1 -1
  430. package/dist/core/compaction/compaction.js +1 -1
  431. package/dist/core/compaction/compaction.js.map +1 -1
  432. package/dist/core/compaction/utils.d.ts +2 -2
  433. package/dist/core/compaction/utils.d.ts.map +1 -1
  434. package/dist/core/compaction/utils.js.map +1 -1
  435. package/dist/core/context-breakdown.d.ts +1 -1
  436. package/dist/core/context-breakdown.d.ts.map +1 -1
  437. package/dist/core/context-breakdown.js.map +1 -1
  438. package/dist/core/defaults.d.ts +1 -1
  439. package/dist/core/defaults.d.ts.map +1 -1
  440. package/dist/core/defaults.js.map +1 -1
  441. package/dist/core/export-html/index.d.ts +1 -1
  442. package/dist/core/export-html/index.d.ts.map +1 -1
  443. package/dist/core/export-html/index.js.map +1 -1
  444. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  445. package/dist/core/export-html/tool-renderer.js.map +1 -1
  446. package/dist/core/extensions/loader.d.ts.map +1 -1
  447. package/dist/core/extensions/loader.js +25 -25
  448. package/dist/core/extensions/loader.js.map +1 -1
  449. package/dist/core/extensions/runner.d.ts +3 -3
  450. package/dist/core/extensions/runner.d.ts.map +1 -1
  451. package/dist/core/extensions/runner.js.map +1 -1
  452. package/dist/core/extensions/types.d.ts +5 -5
  453. package/dist/core/extensions/types.d.ts.map +1 -1
  454. package/dist/core/extensions/types.js.map +1 -1
  455. package/dist/core/extensions/wrapper.d.ts +1 -1
  456. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  457. package/dist/core/extensions/wrapper.js.map +1 -1
  458. package/dist/core/grok-cli-auth.d.ts +32 -0
  459. package/dist/core/grok-cli-auth.d.ts.map +1 -0
  460. package/dist/core/grok-cli-auth.js +218 -0
  461. package/dist/core/grok-cli-auth.js.map +1 -0
  462. package/dist/core/keybindings.d.ts +2 -2
  463. package/dist/core/keybindings.d.ts.map +1 -1
  464. package/dist/core/keybindings.js +1 -1
  465. package/dist/core/keybindings.js.map +1 -1
  466. package/dist/core/live-catalog.d.ts +1 -1
  467. package/dist/core/live-catalog.d.ts.map +1 -1
  468. package/dist/core/live-catalog.js.map +1 -1
  469. package/dist/core/messages.d.ts +3 -3
  470. package/dist/core/messages.d.ts.map +1 -1
  471. package/dist/core/messages.js.map +1 -1
  472. package/dist/core/model-registry.d.ts +1 -1
  473. package/dist/core/model-registry.d.ts.map +1 -1
  474. package/dist/core/model-registry.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +2 -2
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +1 -1
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/model-runtime.d.ts +10 -1
  480. package/dist/core/model-runtime.d.ts.map +1 -1
  481. package/dist/core/model-runtime.js +24 -5
  482. package/dist/core/model-runtime.js.map +1 -1
  483. package/dist/core/models-store.d.ts +1 -1
  484. package/dist/core/models-store.d.ts.map +1 -1
  485. package/dist/core/models-store.js.map +1 -1
  486. package/dist/core/official-catalog.d.ts +1 -1
  487. package/dist/core/official-catalog.d.ts.map +1 -1
  488. package/dist/core/official-catalog.js.map +1 -1
  489. package/dist/core/provider-attribution.d.ts +1 -1
  490. package/dist/core/provider-attribution.d.ts.map +1 -1
  491. package/dist/core/provider-attribution.js.map +1 -1
  492. package/dist/core/provider-composer.d.ts +1 -1
  493. package/dist/core/provider-composer.d.ts.map +1 -1
  494. package/dist/core/provider-composer.js +2 -2
  495. package/dist/core/provider-composer.js.map +1 -1
  496. package/dist/core/runtime-credentials.d.ts +1 -1
  497. package/dist/core/runtime-credentials.d.ts.map +1 -1
  498. package/dist/core/runtime-credentials.js.map +1 -1
  499. package/dist/core/sdk.d.ts +3 -3
  500. package/dist/core/sdk.d.ts.map +1 -1
  501. package/dist/core/sdk.js +3 -3
  502. package/dist/core/sdk.js.map +1 -1
  503. package/dist/core/session-manager.d.ts +2 -2
  504. package/dist/core/session-manager.d.ts.map +1 -1
  505. package/dist/core/session-manager.js +1 -1
  506. package/dist/core/session-manager.js.map +1 -1
  507. package/dist/core/settings-manager.d.ts +2 -2
  508. package/dist/core/settings-manager.d.ts.map +1 -1
  509. package/dist/core/settings-manager.js.map +1 -1
  510. package/dist/core/subscriptions.d.ts +1 -1
  511. package/dist/core/subscriptions.d.ts.map +1 -1
  512. package/dist/core/subscriptions.js.map +1 -1
  513. package/dist/core/tools/bash.d.ts +1 -1
  514. package/dist/core/tools/bash.d.ts.map +1 -1
  515. package/dist/core/tools/bash.js +1 -1
  516. package/dist/core/tools/bash.js.map +1 -1
  517. package/dist/core/tools/edit.d.ts +2 -2
  518. package/dist/core/tools/edit.d.ts.map +1 -1
  519. package/dist/core/tools/edit.js +1 -1
  520. package/dist/core/tools/edit.js.map +1 -1
  521. package/dist/core/tools/find.d.ts +1 -1
  522. package/dist/core/tools/find.d.ts.map +1 -1
  523. package/dist/core/tools/find.js +1 -1
  524. package/dist/core/tools/find.js.map +1 -1
  525. package/dist/core/tools/grep.d.ts +1 -1
  526. package/dist/core/tools/grep.d.ts.map +1 -1
  527. package/dist/core/tools/grep.js +1 -1
  528. package/dist/core/tools/grep.js.map +1 -1
  529. package/dist/core/tools/index.d.ts +1 -1
  530. package/dist/core/tools/index.d.ts.map +1 -1
  531. package/dist/core/tools/index.js.map +1 -1
  532. package/dist/core/tools/ls.d.ts +1 -1
  533. package/dist/core/tools/ls.d.ts.map +1 -1
  534. package/dist/core/tools/ls.js +1 -1
  535. package/dist/core/tools/ls.js.map +1 -1
  536. package/dist/core/tools/read.d.ts +1 -1
  537. package/dist/core/tools/read.d.ts.map +1 -1
  538. package/dist/core/tools/read.js +1 -1
  539. package/dist/core/tools/read.js.map +1 -1
  540. package/dist/core/tools/render-utils.d.ts +1 -1
  541. package/dist/core/tools/render-utils.d.ts.map +1 -1
  542. package/dist/core/tools/render-utils.js +1 -1
  543. package/dist/core/tools/render-utils.js.map +1 -1
  544. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  545. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  546. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  547. package/dist/core/tools/write.d.ts +1 -1
  548. package/dist/core/tools/write.d.ts.map +1 -1
  549. package/dist/core/tools/write.js +1 -1
  550. package/dist/core/tools/write.js.map +1 -1
  551. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  552. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  553. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  554. package/dist/core/usage-adapters/xai.js +4 -0
  555. package/dist/core/usage-adapters/xai.js.map +1 -1
  556. package/dist/core/usage-history.d.ts.map +1 -1
  557. package/dist/core/usage-history.js.map +1 -1
  558. package/dist/core/usage-service.d.ts +11 -1
  559. package/dist/core/usage-service.d.ts.map +1 -1
  560. package/dist/core/usage-service.js +45 -9
  561. package/dist/core/usage-service.js.map +1 -1
  562. package/dist/core/user-models.d.ts +1 -1
  563. package/dist/core/user-models.d.ts.map +1 -1
  564. package/dist/core/user-models.js.map +1 -1
  565. package/dist/gateway/agent-bridge.d.ts +3 -3
  566. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  567. package/dist/gateway/agent-bridge.js.map +1 -1
  568. package/dist/gateway/commands.d.ts.map +1 -1
  569. package/dist/gateway/commands.js.map +1 -1
  570. package/dist/gateway/cron.d.ts.map +1 -1
  571. package/dist/gateway/cron.js.map +1 -1
  572. package/dist/main.d.ts.map +1 -1
  573. package/dist/main.js +1 -1
  574. package/dist/main.js.map +1 -1
  575. package/dist/modes/interactive/components/armin.d.ts +1 -1
  576. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/armin.js.map +1 -1
  578. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  579. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  580. package/dist/modes/interactive/components/assistant-message.js +1 -1
  581. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  582. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  583. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/bash-execution.js +1 -1
  585. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  586. package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
  587. package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/boot-screen.js +1 -1
  589. package/dist/modes/interactive/components/boot-screen.js.map +1 -1
  590. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  593. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  594. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  595. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  597. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  598. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  599. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  601. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  602. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  603. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/config-selector.js +1 -1
  605. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  606. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  607. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  609. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  610. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/custom-editor.js +1 -1
  612. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  613. package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
  614. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/custom-entry.js +1 -1
  616. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  617. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  618. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  619. package/dist/modes/interactive/components/custom-message.js +1 -1
  620. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  621. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  622. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  623. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  624. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  625. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  627. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  628. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  630. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  631. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  632. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/extension-editor.js +1 -1
  634. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  635. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  636. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/extension-input.js +1 -1
  638. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  639. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  640. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  641. package/dist/modes/interactive/components/extension-selector.js +1 -1
  642. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  643. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  644. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  646. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  647. package/dist/modes/interactive/components/footer.d.ts +1 -1
  648. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  649. package/dist/modes/interactive/components/footer.js +1 -1
  650. package/dist/modes/interactive/components/footer.js.map +1 -1
  651. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  652. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  653. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  654. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  655. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  656. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  657. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  658. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  659. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  660. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  661. package/dist/modes/interactive/components/login-dialog.js +1 -1
  662. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  663. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  664. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  665. package/dist/modes/interactive/components/model-selector.js +2 -2
  666. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  667. package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
  668. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  669. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  670. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  671. package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
  672. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
  673. package/dist/modes/interactive/components/processes-selector.js +1 -1
  674. package/dist/modes/interactive/components/processes-selector.js.map +1 -1
  675. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  676. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  677. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  678. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  679. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  680. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  681. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  682. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  683. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  684. package/dist/modes/interactive/components/session-selector.js +1 -1
  685. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  686. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  687. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  688. package/dist/modes/interactive/components/settings-selector.js +1 -1
  689. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  690. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  691. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  692. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  693. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  694. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  695. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  696. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  697. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  698. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  699. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  700. package/dist/modes/interactive/components/status-indicator.js +1 -1
  701. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  702. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  703. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  704. package/dist/modes/interactive/components/theme-selector.js +1 -1
  705. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  706. package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
  707. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  708. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  709. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  710. package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
  711. package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
  712. package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
  713. package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
  714. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  715. package/dist/modes/interactive/components/thinking-tail.js +1 -1
  716. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  717. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  718. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  719. package/dist/modes/interactive/components/tool-execution.js +1 -1
  720. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  721. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  722. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  723. package/dist/modes/interactive/components/tree-selector.js +1 -1
  724. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  725. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  726. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  727. package/dist/modes/interactive/components/trust-selector.js +1 -1
  728. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  729. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/usage-view.js +1 -1
  731. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  732. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  733. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  734. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  735. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  736. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  737. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  738. package/dist/modes/interactive/components/user-message.js +1 -1
  739. package/dist/modes/interactive/components/user-message.js.map +1 -1
  740. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  741. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  742. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  743. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  744. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  745. package/dist/modes/interactive/interactive-mode.js +29 -4
  746. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  747. package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
  748. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  749. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  750. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  751. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  752. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  753. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  754. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  755. package/dist/modes/interactive/theme/theme.js +2 -2
  756. package/dist/modes/interactive/theme/theme.js.map +1 -1
  757. package/dist/modes/print-mode.d.ts +1 -1
  758. package/dist/modes/print-mode.d.ts.map +1 -1
  759. package/dist/modes/print-mode.js.map +1 -1
  760. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  761. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  762. package/dist/modes/rpc/rpc-client.js.map +1 -1
  763. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  764. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  765. package/dist/modes/rpc/rpc-types.js.map +1 -1
  766. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  767. package/examples/extensions/bash-spawn-hook.ts +2 -2
  768. package/examples/extensions/bookmark.ts +1 -1
  769. package/examples/extensions/border-status-editor.ts +3 -3
  770. package/examples/extensions/built-in-tool-renderer.ts +3 -3
  771. package/examples/extensions/claude-rules.ts +1 -1
  772. package/examples/extensions/commands.ts +1 -1
  773. package/examples/extensions/confirm-destructive.ts +1 -1
  774. package/examples/extensions/custom-compaction.ts +3 -3
  775. package/examples/extensions/custom-footer.ts +3 -3
  776. package/examples/extensions/custom-header.ts +2 -2
  777. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  778. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  779. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  780. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  781. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  782. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  783. package/examples/extensions/dirty-repo-guard.ts +1 -1
  784. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  785. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  786. package/examples/extensions/doom-overlay/index.ts +1 -1
  787. package/examples/extensions/dynamic-resources/index.ts +1 -1
  788. package/examples/extensions/dynamic-tools.ts +1 -1
  789. package/examples/extensions/entry-renderer.ts +2 -2
  790. package/examples/extensions/event-bus.ts +1 -1
  791. package/examples/extensions/file-trigger.ts +1 -1
  792. package/examples/extensions/git-checkpoint.ts +1 -1
  793. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  794. package/examples/extensions/github-issue-autocomplete.ts +2 -2
  795. package/examples/extensions/gondolin/index.ts +2 -2
  796. package/examples/extensions/gondolin/package-lock.json +2 -2
  797. package/examples/extensions/gondolin/package.json +1 -1
  798. package/examples/extensions/handoff.ts +4 -4
  799. package/examples/extensions/hello.ts +2 -2
  800. package/examples/extensions/hidden-thinking-label.ts +1 -1
  801. package/examples/extensions/inline-bash.ts +1 -1
  802. package/examples/extensions/input-transform-streaming.ts +1 -1
  803. package/examples/extensions/input-transform.ts +1 -1
  804. package/examples/extensions/interactive-shell.ts +1 -1
  805. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  806. package/examples/extensions/mac-system-theme.ts +1 -1
  807. package/examples/extensions/message-renderer.ts +2 -2
  808. package/examples/extensions/minimal-mode.ts +3 -3
  809. package/examples/extensions/modal-editor.ts +2 -2
  810. package/examples/extensions/model-status.ts +1 -1
  811. package/examples/extensions/notify.ts +1 -1
  812. package/examples/extensions/overlay-qa-tests.ts +3 -3
  813. package/examples/extensions/overlay-test.ts +2 -2
  814. package/examples/extensions/permission-gate.ts +1 -1
  815. package/examples/extensions/pirate.ts +1 -1
  816. package/examples/extensions/plan-mode/index.ts +4 -4
  817. package/examples/extensions/preset.ts +4 -4
  818. package/examples/extensions/project-trust.ts +1 -1
  819. package/examples/extensions/prompt-customizer.ts +1 -1
  820. package/examples/extensions/protected-paths.ts +1 -1
  821. package/examples/extensions/provider-payload.ts +1 -1
  822. package/examples/extensions/qna.ts +3 -3
  823. package/examples/extensions/question.ts +2 -2
  824. package/examples/extensions/questionnaire.ts +2 -2
  825. package/examples/extensions/rainbow-editor.ts +1 -1
  826. package/examples/extensions/reload-runtime.ts +1 -1
  827. package/examples/extensions/rpc-demo.ts +1 -1
  828. package/examples/extensions/sandbox/index.ts +2 -2
  829. package/examples/extensions/send-user-message.ts +1 -1
  830. package/examples/extensions/session-name.ts +1 -1
  831. package/examples/extensions/shutdown-command.ts +1 -1
  832. package/examples/extensions/snake.ts +2 -2
  833. package/examples/extensions/space-invaders.ts +2 -2
  834. package/examples/extensions/ssh.ts +2 -2
  835. package/examples/extensions/status-line.ts +1 -1
  836. package/examples/extensions/structured-output.ts +2 -2
  837. package/examples/extensions/subagent/agents.ts +1 -1
  838. package/examples/extensions/subagent/index.ts +5 -5
  839. package/examples/extensions/summarize.ts +4 -4
  840. package/examples/extensions/system-prompt-header.ts +1 -1
  841. package/examples/extensions/tic-tac-toe.ts +3 -3
  842. package/examples/extensions/timed-confirm.ts +1 -1
  843. package/examples/extensions/titlebar-spinner.ts +1 -1
  844. package/examples/extensions/todo.ts +3 -3
  845. package/examples/extensions/tool-override.ts +2 -2
  846. package/examples/extensions/tools.ts +3 -3
  847. package/examples/extensions/trigger-compact.ts +1 -1
  848. package/examples/extensions/truncated-tool.ts +3 -3
  849. package/examples/extensions/widget-placement.ts +1 -1
  850. package/examples/extensions/with-deps/index.ts +1 -1
  851. package/examples/extensions/with-deps/package-lock.json +2 -2
  852. package/examples/extensions/with-deps/package.json +1 -1
  853. package/examples/extensions/working-indicator.ts +1 -1
  854. package/examples/extensions/working-message-test.ts +1 -1
  855. package/examples/rpc-extension-ui.ts +1 -1
  856. package/examples/sdk/01-minimal.ts +1 -1
  857. package/examples/sdk/02-custom-model.ts +2 -2
  858. package/examples/sdk/03-custom-prompt.ts +1 -1
  859. package/examples/sdk/04-skills.ts +1 -1
  860. package/examples/sdk/05-tools.ts +1 -1
  861. package/examples/sdk/06-extensions.ts +2 -2
  862. package/examples/sdk/07-context-files.ts +1 -1
  863. package/examples/sdk/08-prompt-templates.ts +1 -1
  864. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  865. package/examples/sdk/10-settings.ts +1 -1
  866. package/examples/sdk/11-sessions.ts +1 -1
  867. package/examples/sdk/12-full-control.ts +2 -2
  868. package/examples/sdk/13-session-runtime.ts +1 -1
  869. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/profiles/profiles.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI, ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { BUILTIN_AGENT_NAMES } from \"../agents/agents.ts\";\nimport { findModelInfo, getSupportedThinkingLevels, splitKnownThinkingSuffix, toModelInfo } from \"../shared/model-info.ts\";\nimport { getAgentDir } from \"../shared/utils.ts\";\n\nexport const DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS = 7;\n\ntype BuiltinAgentName = typeof BUILTIN_AGENT_NAMES[number];\nexport type ProfileKind = \"quota\" | \"quality\";\nexport type ProbeStatus = \"ok\" | \"unavailable\" | \"auth\" | \"timeout\" | \"error\" | \"skipped\";\nexport type CostTier = \"cheap\" | \"medium\" | \"expensive\";\nexport type QualityTier = \"weak\" | \"medium\" | \"strong\";\nexport type LatencyTier = \"fast\" | \"medium\" | \"slow\";\nexport type RecommendedRoleTier = \"cheap\" | \"medium\" | \"strong\";\n\ninterface ProfileAgentOverride {\n\tmodel?: string;\n}\n\nexport interface SubagentProfileFile {\n\tsubagents: {\n\t\tagentOverrides: Record<string, ProfileAgentOverride>;\n\t};\n}\n\nexport type ClassificationSource = \"official-metadata\" | \"heuristic-name\";\n\nexport interface ProviderModelCatalogModel {\n\tid: string;\n\tfullId: string;\n\tobserved: {\n\t\tavailableInRegistry: boolean;\n\t\tname?: string;\n\t\treasoning?: boolean;\n\t\tthinkingLevels: string[];\n\t\tcontextWindow?: number;\n\t\tmaxTokens?: number;\n\t\tcost?: {\n\t\t\tinput?: number;\n\t\t\toutput?: number;\n\t\t\tcacheRead?: number;\n\t\t\tcacheWrite?: number;\n\t\t};\n\t\tprobe: {\n\t\t\tstatus: ProbeStatus;\n\t\t\tcheckedAt: string;\n\t\t\tmessage?: string;\n\t\t};\n\t};\n\tderived: {\n\t\tprofileRank: number;\n\t\tcostTier: CostTier;\n\t\tqualityTier: QualityTier;\n\t\tlatencyTier: LatencyTier;\n\t\trecommendedRoleTier: RecommendedRoleTier;\n\t\trecommendedAgents: BuiltinAgentName[];\n\t\tclassificationSources: ClassificationSource[];\n\t};\n\twarnings: string[];\n\tnotes: string[];\n}\n\nexport interface ProviderModelCatalogFile {\n\tprovider: string;\n\trefreshedAt: string;\n\tmaxAgeDays: number;\n\tsources: string[];\n\tmodels: ProviderModelCatalogModel[];\n}\n\nexport interface ProfileCheckResult {\n\tprofileName: string;\n\tfilePath: string;\n\tresults: Array<{\n\t\tagent: string;\n\t\tmodel: string;\n\t\tinRegistry: boolean;\n\t\tprobe: { status: ProbeStatus; message?: string };\n\t}>;\n}\n\nfunction readJsonObjectFile(filePath: string): Record<string, unknown> {\n\tconst raw = fs.readFileSync(filePath, \"utf-8\");\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`File '${filePath}' must contain a JSON object.`);\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n\nfunction writeJsonFile(filePath: string, value: unknown): void {\n\tfs.mkdirSync(path.dirname(filePath), { recursive: true });\n\tfs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\\n`, \"utf-8\");\n}\n\nconst SAFE_PATH_TOKEN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\n\nfunction normalizePathToken(value: string, label: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) throw new Error(`${label} is required.`);\n\tif (!SAFE_PATH_TOKEN.test(trimmed) || trimmed === \".\" || trimmed === \"..\" || trimmed.includes(\"/\") || trimmed.includes(\"\\\\\")) {\n\t\tthrow new Error(`${label} must be a safe file name using only letters, numbers, dots, underscores, and hyphens.`);\n\t}\n\treturn trimmed;\n}\n\nfunction normalizeProfileName(name: string): string {\n\tconst trimmed = name.trim();\n\tconst stem = trimmed.endsWith(\".json\") ? trimmed.slice(0, -5) : trimmed;\n\treturn normalizePathToken(stem, \"Profile name\");\n}\n\nfunction normalizeProviderName(provider: string): string {\n\treturn normalizePathToken(provider, \"Provider\");\n}\n\nfunction validateSubagentProfile(filePath: string, parsed: Record<string, unknown>): SubagentProfileFile {\n\tconst subagents = parsed.subagents;\n\tif (!subagents || typeof subagents !== \"object\" || Array.isArray(subagents)) {\n\t\tthrow new Error(`Profile '${filePath}' must contain a 'subagents' object.`);\n\t}\n\tconst agentOverrides = (subagents as Record<string, unknown>).agentOverrides;\n\tif (!agentOverrides || typeof agentOverrides !== \"object\" || Array.isArray(agentOverrides)) {\n\t\tthrow new Error(`Profile '${filePath}' must contain 'subagents.agentOverrides' as an object.`);\n\t}\n\tfor (const [name, value] of Object.entries(agentOverrides)) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\tthrow new Error(`Profile '${filePath}' has invalid override '${name}'; expected an object.`);\n\t\t}\n\t\tconst model = (value as Record<string, unknown>).model;\n\t\tif (model !== undefined && typeof model !== \"string\") {\n\t\t\tthrow new Error(`Profile '${filePath}' has invalid model for '${name}'; expected a string.`);\n\t\t}\n\t}\n\treturn parsed as unknown as SubagentProfileFile;\n}\n\nfunction getUserSettingsPath(): string {\n\treturn path.join(getAgentDir(), \"settings.json\");\n}\n\nfunction readSettingsFile(filePath: string): Record<string, unknown> {\n\tif (!fs.existsSync(filePath)) return {};\n\treturn readJsonObjectFile(filePath);\n}\n\nfunction extractVersionScore(id: string): number {\n\tconst match = id.match(/(\\d+(?:\\.\\d+)?)/g);\n\tif (!match || match.length === 0) return 0;\n\treturn Math.max(...match.map((value) => Number.parseFloat(value)).filter((value) => Number.isFinite(value)));\n}\n\nfunction modelNameTokens(modelName: string): string[] {\n\treturn modelName\n\t\t.toLowerCase()\n\t\t.replace(/([a-z])([0-9])/g, \"$1 $2\")\n\t\t.replace(/([0-9])([a-z])/g, \"$1 $2\")\n\t\t.split(/[^a-z0-9.]+/)\n\t\t.filter(Boolean);\n}\n\nfunction inferProfileBand(modelName: string): 0 | 1 | 2 | 3 | 4 {\n\tconst tokens = new Set(modelNameTokens(modelName));\n\tif ([\"spark\", \"flash\", \"nano\", \"tiny\", \"instant\"].some((token) => tokens.has(token))) return 0;\n\tif ([\"mini\", \"haiku\", \"small\"].some((token) => tokens.has(token))) return 1;\n\tif ([\"opus\", \"max\", \"ultra\", \"pro\"].some((token) => tokens.has(token))) return 4;\n\tif ([\"sonnet\", \"turbo\", \"plus\"].some((token) => tokens.has(token))) return 3;\n\treturn 2;\n}\n\ninterface ModelClassificationInput {\n\tid: string;\n\tname?: string;\n\treasoning?: boolean;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n\tcost?: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t};\n}\n\ninterface NumericStats {\n\tmin: number;\n\tmax: number;\n}\n\ninterface ClassificationContext {\n\tcost?: NumericStats;\n\tcontextWindow?: NumericStats;\n\tmaxTokens?: NumericStats;\n}\n\nfunction combinedCost(cost: ModelClassificationInput[\"cost\"]): number | undefined {\n\tif (!cost) return undefined;\n\tconst values = [cost.input, cost.output, cost.cacheRead, cost.cacheWrite].filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n\tif (values.length === 0) return undefined;\n\treturn values.reduce((sum, value) => sum + value, 0);\n}\n\nfunction collectStats(values: Array<number | undefined>): NumericStats | undefined {\n\tconst filtered = values.filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n\tif (filtered.length === 0) return undefined;\n\treturn { min: Math.min(...filtered), max: Math.max(...filtered) };\n}\n\nfunction normalize(value: number | undefined, stats: NumericStats | undefined): number | undefined {\n\tif (value === undefined || !stats) return undefined;\n\tif (stats.max <= stats.min) return 0.5;\n\treturn (value - stats.min) / (stats.max - stats.min);\n}\n\nfunction buildClassificationContext(models: ModelClassificationInput[]): ClassificationContext {\n\treturn {\n\t\tcost: collectStats(models.map((model) => combinedCost(model.cost))),\n\t\tcontextWindow: collectStats(models.map((model) => model.contextWindow)),\n\t\tmaxTokens: collectStats(models.map((model) => model.maxTokens)),\n\t};\n}\n\nfunction rankToCostTier(rank: number): CostTier {\n\tif (rank <= 0.33) return \"cheap\";\n\tif (rank <= 0.66) return \"medium\";\n\treturn \"expensive\";\n}\n\nfunction scoreToQualityTier(score: number): QualityTier {\n\tif (score <= 0.33) return \"weak\";\n\tif (score <= 0.66) return \"medium\";\n\treturn \"strong\";\n}\n\nfunction qualityTierToRoleTier(quality: QualityTier, cost: CostTier): RecommendedRoleTier {\n\tif (quality === \"strong\") return \"strong\";\n\tif (quality === \"medium\") return cost === \"cheap\" ? \"cheap\" : \"medium\";\n\treturn \"cheap\";\n}\n\nfunction agentsForRoleTier(roleTier: RecommendedRoleTier): BuiltinAgentName[] {\n\tif (roleTier === \"cheap\") return [\"scout\", \"delegate\"];\n\tif (roleTier === \"medium\") return [\"planner\", \"context-builder\", \"researcher\"];\n\treturn [\"worker\", \"reviewer\", \"oracle\"];\n}\n\nfunction classifyModel(input: ModelClassificationInput, context: ClassificationContext): {\n\tprofileRank: number;\n\tcostTier: CostTier;\n\tqualityTier: QualityTier;\n\tlatencyTier: LatencyTier;\n\trecommendedRoleTier: RecommendedRoleTier;\n\trecommendedAgents: BuiltinAgentName[];\n\tclassificationSources: ClassificationSource[];\n} {\n\tconst modelName = input.name?.trim() || input.id;\n\tconst tokens = new Set(modelNameTokens(modelName));\n\tconst band = inferProfileBand(modelName);\n\tconst versionScore = extractVersionScore(input.id);\n\tconst costNorm = normalize(combinedCost(input.cost), context.cost);\n\tconst contextNorm = normalize(input.contextWindow, context.contextWindow);\n\tconst maxTokensNorm = normalize(input.maxTokens, context.maxTokens);\n\tconst hasOfficialMetadata = costNorm !== undefined || contextNorm !== undefined || maxTokensNorm !== undefined;\n\tconst classificationSources: ClassificationSource[] = hasOfficialMetadata\n\t\t? [\"official-metadata\", \"heuristic-name\"]\n\t\t: [\"heuristic-name\"];\n\tconst heuristicBase = band / 4;\n\tconst qualitySignals = [\n\t\theuristicBase,\n\t\t...(contextNorm !== undefined ? [contextNorm] : []),\n\t\t...(maxTokensNorm !== undefined ? [maxTokensNorm] : []),\n\t\t...(input.reasoning === true ? [1] : []),\n\t\t...(input.reasoning === false ? [0] : []),\n\t];\n\tconst latencyHintsFast = tokens.has(\"highspeed\") || tokens.has(\"flash\") || tokens.has(\"instant\") || tokens.has(\"turbo\");\n\tconst latencyHintsSlow = tokens.has(\"pro\") || tokens.has(\"ultra\") || tokens.has(\"opus\") || tokens.has(\"max\");\n\tlet qualityScore = qualitySignals.reduce((sum, value) => sum + value, 0) / qualitySignals.length;\n\tif (latencyHintsFast) {\n\t\tqualityScore -= 0.2;\n\t}\n\tqualityScore = Math.max(0, Math.min(1, qualityScore));\n\tconst costTier = costNorm !== undefined\n\t\t? rankToCostTier(costNorm)\n\t\t: band === 0 ? \"cheap\" : band >= 3 ? \"expensive\" : \"medium\";\n\tconst qualityTier = scoreToQualityTier(qualityScore);\n\tconst latencyTier: LatencyTier = latencyHintsFast\n\t\t? \"fast\"\n\t\t: latencyHintsSlow\n\t\t\t? \"slow\"\n\t\t\t: costNorm !== undefined\n\t\t\t\t? (costNorm <= 0.33 ? \"fast\" : costNorm <= 0.66 ? \"medium\" : \"slow\")\n\t\t\t\t: (band <= 1 ? \"fast\" : band >= 3 ? \"slow\" : \"medium\");\n\tconst recommendedRoleTier = qualityTierToRoleTier(qualityTier, costTier);\n\tconst latencyPenalty = latencyHintsFast ? 125 : 0;\n\tconst profileRank = Math.round((qualityScore * 100) * 10) + Math.round(versionScore * 25) - latencyPenalty;\n\treturn {\n\t\tprofileRank,\n\t\tcostTier,\n\t\tqualityTier,\n\t\tlatencyTier,\n\t\trecommendedRoleTier,\n\t\trecommendedAgents: agentsForRoleTier(recommendedRoleTier),\n\t\tclassificationSources,\n\t};\n}\n\nfunction resolveProbeStatus(text: string, timedOut: boolean): ProbeStatus {\n\tif (timedOut) return \"timeout\";\n\tif (!text) return \"error\";\n\tif (/(unauthori[sz]ed|forbidden|api key|auth|billing|credit|quota)/i.test(text)) return \"auth\";\n\tif (/(not found|unknown model|model unavailable|model disabled|unsupported model|unavailable)/i.test(text)) return \"unavailable\";\n\treturn \"error\";\n}\n\nasync function probeModel(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\">,\n\tfullId: string,\n): Promise<{ status: ProbeStatus; message?: string }> {\n\tif (typeof pi.exec !== \"function\") {\n\t\treturn { status: \"skipped\", message: \"pi.exec is unavailable in this runtime.\" };\n\t}\n\tconst result = await pi.exec(\"pi\", [\"-p\", \"--model\", fullId, \"--no-tools\", 'Reply with exactly \"OK\".'], {\n\t\tcwd: os.tmpdir(),\n\t\ttimeout: 45_000,\n\t} as Record<string, unknown>);\n\tconst stdout = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\tconst stderr = typeof result.stderr === \"string\" ? result.stderr.trim() : \"\";\n\tconst combined = [stderr, stdout].filter(Boolean).join(\"\\n\").trim();\n\tif (result.code === 0) return { status: \"ok\", message: stdout || \"Probe succeeded.\" };\n\treturn { status: resolveProbeStatus(combined, result.killed === true), message: combined || `Probe exited with code ${result.code ?? \"unknown\"}.` };\n}\n\nfunction roundIndex(count: number, position: number): number {\n\tif (count <= 1) return 0;\n\treturn Math.max(0, Math.min(count - 1, Math.round((count - 1) * position)));\n}\n\nfunction profilePositions(kind: ProfileKind): { cheap: number; medium: number; strong: number } {\n\treturn kind === \"quota\"\n\t\t? { cheap: 0, medium: 1 / 3, strong: 2 / 3 }\n\t\t: { cheap: 1 / 3, medium: 2 / 3, strong: 1 };\n}\n\nfunction pickTierModels(models: ProviderModelCatalogModel[], kind: ProfileKind): { cheap: string; medium: string; strong: string } {\n\tif (models.length === 0) throw new Error(\"No provider models are available for profile generation.\");\n\tconst selectionPool = kind === \"quota\" && models.length > 1\n\t\t? models.slice(0, -1)\n\t\t: models;\n\tconst positions = profilePositions(kind);\n\treturn {\n\t\tcheap: selectionPool[roundIndex(selectionPool.length, positions.cheap)]!.fullId,\n\t\tmedium: selectionPool[roundIndex(selectionPool.length, positions.medium)]!.fullId,\n\t\tstrong: selectionPool[roundIndex(selectionPool.length, positions.strong)]!.fullId,\n\t};\n}\n\nfunction observedCombinedCost(model: ProviderModelCatalogModel): number | undefined {\n\treturn combinedCost(model.observed.cost);\n}\n\nfunction dominatesModel(a: ProviderModelCatalogModel, b: ProviderModelCatalogModel): boolean {\n\tconst costA = observedCombinedCost(a);\n\tconst costB = observedCombinedCost(b);\n\tif (costA === undefined || costB === undefined) return false;\n\tif (costA > costB) return false;\n\tif (a.derived.profileRank < b.derived.profileRank) return false;\n\tif ((a.observed.reasoning === true ? 1 : 0) < (b.observed.reasoning === true ? 1 : 0)) return false;\n\tif ((a.observed.contextWindow ?? 0) < (b.observed.contextWindow ?? 0)) return false;\n\tif ((a.observed.maxTokens ?? 0) < (b.observed.maxTokens ?? 0)) return false;\n\treturn costA < costB\n\t\t|| a.derived.profileRank > b.derived.profileRank\n\t\t|| (a.observed.reasoning === true && b.observed.reasoning !== true)\n\t\t|| (a.observed.contextWindow ?? 0) > (b.observed.contextWindow ?? 0)\n\t\t|| (a.observed.maxTokens ?? 0) > (b.observed.maxTokens ?? 0);\n}\n\nfunction filterDominatedModels(models: ProviderModelCatalogModel[]): ProviderModelCatalogModel[] {\n\treturn models.filter((candidate, index) => !models.some((other, otherIndex) => otherIndex !== index && dominatesModel(other, candidate)));\n}\n\nfunction buildProfileFile(kind: ProfileKind, models: { cheap: string; medium: string; strong: string }): SubagentProfileFile {\n\treturn {\n\t\tsubagents: {\n\t\t\tagentOverrides: {\n\t\t\t\tscout: { model: models.cheap },\n\t\t\t\tdelegate: { model: models.cheap },\n\t\t\t\tplanner: { model: models.medium },\n\t\t\t\t\"context-builder\": { model: models.medium },\n\t\t\t\tresearcher: { model: models.medium },\n\t\t\t\tworker: { model: models.strong },\n\t\t\t\treviewer: { model: models.strong },\n\t\t\t\toracle: { model: models.strong },\n\t\t\t},\n\t\t},\n\t};\n}\n\nfunction catalogModelIsUsable(model: ProviderModelCatalogModel): boolean {\n\treturn model.observed.availableInRegistry && model.observed.probe.status !== \"unavailable\" && model.observed.probe.status !== \"auth\" && model.observed.probe.status !== \"timeout\" && model.observed.probe.status !== \"error\";\n}\n\nfunction modelUsesHeuristicClassification(model: ProviderModelCatalogModel): boolean {\n\treturn model.derived.classificationSources.includes(\"heuristic-name\")\n\t\t&& !model.derived.classificationSources.includes(\"official-metadata\");\n}\n\nfunction warningLineForHeuristicFallback(): string {\n\treturn \"Classification fell back to name heuristics.\";\n}\n\nexport function countHeuristicFallbackModels(catalog: ProviderModelCatalogFile): number {\n\treturn catalog.models.filter(modelUsesHeuristicClassification).length;\n}\n\nfunction resolveProfilePath(name: string): string {\n\tconst dir = ensureSubagentProfilesDir();\n\treturn path.join(dir, `${normalizeProfileName(name)}.json`);\n}\n\nexport function getSubagentProfilesRootDir(): string {\n\treturn path.join(getAgentDir(), \"profiles\", \"pi-subagents\");\n}\n\nexport function getSubagentProfilesDir(): string {\n\treturn getSubagentProfilesRootDir();\n}\n\nexport function ensureSubagentProfilesDir(): string {\n\tconst dir = getSubagentProfilesDir();\n\tfs.mkdirSync(dir, { recursive: true });\n\treturn dir;\n}\n\nexport function getProviderModelsDir(): string {\n\treturn path.join(getSubagentProfilesRootDir(), \"providers\");\n}\n\nexport function ensureProviderModelsDir(): string {\n\tconst dir = getProviderModelsDir();\n\tfs.mkdirSync(dir, { recursive: true });\n\treturn dir;\n}\n\nexport function getProviderModelsPath(provider: string): string {\n\treturn path.join(ensureProviderModelsDir(), `${normalizeProviderName(provider)}.models.json`);\n}\n\nexport function listSubagentProfiles(): string[] {\n\tconst dir = ensureSubagentProfilesDir();\n\treturn fs.readdirSync(dir, { withFileTypes: true })\n\t\t.filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n\t\t.map((entry) => entry.name.slice(0, -5))\n\t\t.sort((a, b) => a.localeCompare(b));\n}\n\nexport function readSubagentProfile(name: string): { filePath: string; profile: SubagentProfileFile } {\n\tconst filePath = resolveProfilePath(name);\n\tif (!fs.existsSync(filePath)) throw new Error(`Profile not found: ${name}`);\n\tconst parsed = readJsonObjectFile(filePath);\n\treturn { filePath, profile: validateSubagentProfile(filePath, parsed) };\n}\n\nexport function applySubagentProfile(name: string): { filePath: string; settingsPath: string } {\n\tconst { filePath, profile } = readSubagentProfile(name);\n\tconst settingsPath = getUserSettingsPath();\n\tconst settings = readSettingsFile(settingsPath);\n\tsettings.subagents = profile.subagents;\n\twriteJsonFile(settingsPath, settings);\n\treturn { filePath, settingsPath };\n}\n\nexport function readProviderModelCatalog(provider: string): ProviderModelCatalogFile | null {\n\tconst filePath = getProviderModelsPath(provider);\n\tif (!fs.existsSync(filePath)) return null;\n\treturn readJsonObjectFile(filePath) as unknown as ProviderModelCatalogFile;\n}\n\nexport function isProviderModelCatalogStale(catalog: ProviderModelCatalogFile, maxAgeDays = DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS): boolean {\n\tconst refreshedAt = Date.parse(catalog.refreshedAt);\n\tif (!Number.isFinite(refreshedAt)) return true;\n\tconst maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;\n\treturn Date.now() - refreshedAt > maxAgeMs;\n}\n\nexport async function refreshProviderModelCatalog(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tprovider: string,\n\toptions: { force?: boolean; maxAgeDays?: number; probe?: boolean } = {},\n): Promise<{ filePath: string; catalog: ProviderModelCatalogFile; reused: boolean; heuristicFallbackCount: number }> {\n\tconst normalizedProvider = normalizeProviderName(provider);\n\tconst maxAgeDays = options.maxAgeDays ?? DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS;\n\tconst filePath = getProviderModelsPath(normalizedProvider);\n\tif (!options.force) {\n\t\tconst existing = readProviderModelCatalog(normalizedProvider);\n\t\tif (existing && !isProviderModelCatalogStale(existing, maxAgeDays)) {\n\t\t\treturn { filePath, catalog: existing, reused: true, heuristicFallbackCount: countHeuristicFallbackModels(existing) };\n\t\t}\n\t}\n\n\tconst availableModels = ctx.modelRegistry.getAvailable().filter((model) => model.provider === normalizedProvider);\n\tif (availableModels.length === 0) {\n\t\tthrow new Error(`No models found in the current registry for provider '${normalizedProvider}'.`);\n\t}\n\n\tconst observedModels = [] as Array<{\n\t\trawModel: typeof availableModels[number];\n\t\tmodelRecord: Record<string, unknown> & { provider: string; id: string; name?: string };\n\t\tfullId: string;\n\t\tprobe: { status: ProbeStatus; message?: string };\n\t}>;\n\tfor (const rawModel of availableModels) {\n\t\tconst modelRecord = rawModel as Record<string, unknown> & { provider: string; id: string; name?: string };\n\t\tconst fullId = `${modelRecord.provider}/${modelRecord.id}`;\n\t\tconst probe = options.probe === false\n\t\t\t? { status: \"skipped\" as const, message: \"Live probing disabled.\" }\n\t\t\t: await probeModel(pi, ctx, fullId);\n\t\tobservedModels.push({ rawModel, modelRecord, fullId, probe });\n\t}\n\tconst classificationContext = buildClassificationContext(observedModels.map(({ modelRecord }) => ({\n\t\tid: modelRecord.id,\n\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t})));\n\tconst models: ProviderModelCatalogModel[] = [];\n\tfor (const { rawModel, modelRecord, fullId, probe } of observedModels) {\n\t\tconst classification = classifyModel({\n\t\t\tid: modelRecord.id,\n\t\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t\t}, classificationContext);\n\t\tconst warnings = classification.classificationSources.includes(\"heuristic-name\") && !classification.classificationSources.includes(\"official-metadata\")\n\t\t\t? [warningLineForHeuristicFallback()]\n\t\t\t: [];\n\t\tmodels.push({\n\t\t\tid: modelRecord.id,\n\t\t\tfullId,\n\t\t\tobserved: {\n\t\t\t\tavailableInRegistry: true,\n\t\t\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t\t\tthinkingLevels: getSupportedThinkingLevels(toModelInfo(rawModel)).map((level) => level),\n\t\t\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t\t\t\tprobe: {\n\t\t\t\t\tstatus: probe.status,\n\t\t\t\t\tcheckedAt: new Date().toISOString(),\n\t\t\t\t\t...(probe.message ? { message: probe.message } : {}),\n\t\t\t\t},\n\t\t\t},\n\t\t\tderived: classification,\n\t\t\twarnings,\n\t\t\tnotes: [],\n\t\t});\n\t}\n\tmodels.sort((a, b) => a.derived.profileRank - b.derived.profileRank || a.fullId.localeCompare(b.fullId));\n\tconst catalog: ProviderModelCatalogFile = {\n\t\tprovider: normalizedProvider,\n\t\trefreshedAt: new Date().toISOString(),\n\t\tmaxAgeDays,\n\t\tsources: [\"runtime-registry\", ...(options.probe === false ? [] : [\"live-probe\"]), \"heuristic-classifier\"],\n\t\tmodels,\n\t};\n\twriteJsonFile(filePath, catalog);\n\treturn { filePath, catalog, reused: false, heuristicFallbackCount: countHeuristicFallbackModels(catalog) };\n}\n\nexport async function generateProfilesForProvider(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tprovider: string,\n\toptions: { maxAgeDays?: number; forceRefresh?: boolean; probe?: boolean } = {},\n): Promise<{ quotaPath: string; qualityPath: string; catalogPath: string; quotaModels: { cheap: string; medium: string; strong: string }; qualityModels: { cheap: string; medium: string; strong: string }; heuristicFallbackCount: number; selectedHeuristicFallbackCount: number }> {\n\tconst normalizedProvider = normalizeProviderName(provider);\n\tconst { filePath: catalogPath, catalog, heuristicFallbackCount } = await refreshProviderModelCatalog(pi, ctx, normalizedProvider, {\n\t\tmaxAgeDays: options.maxAgeDays,\n\t\tforce: options.forceRefresh,\n\t\tprobe: options.probe,\n\t});\n\tconst usableModels = catalog.models.filter(catalogModelIsUsable);\n\tconst profileModels = filterDominatedModels(usableModels);\n\tif (profileModels.length === 0) {\n\t\tthrow new Error(`Provider '${normalizedProvider}' has no usable models after filtering.`);\n\t}\n\tconst quotaModels = pickTierModels(profileModels, \"quota\");\n\tconst qualityModels = pickTierModels(profileModels, \"quality\");\n\tconst dir = ensureSubagentProfilesDir();\n\tconst quotaPath = path.join(dir, `${normalizedProvider}.quota.json`);\n\tconst qualityPath = path.join(dir, `${normalizedProvider}.quality.json`);\n\twriteJsonFile(quotaPath, buildProfileFile(\"quota\", quotaModels));\n\twriteJsonFile(qualityPath, buildProfileFile(\"quality\", qualityModels));\n\tconst selectedModels = new Set([...Object.values(quotaModels), ...Object.values(qualityModels)]);\n\tconst selectedHeuristicFallbackCount = profileModels.filter((model) => selectedModels.has(model.fullId) && modelUsesHeuristicClassification(model)).length;\n\treturn { quotaPath, qualityPath, catalogPath, quotaModels, qualityModels, heuristicFallbackCount, selectedHeuristicFallbackCount };\n}\n\nexport async function checkSubagentProfile(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tname: string,\n): Promise<ProfileCheckResult> {\n\tconst { filePath, profile } = readSubagentProfile(name);\n\tconst availableModels = ctx.modelRegistry.getAvailable().map(toModelInfo);\n\tconst entries = Object.entries(profile.subagents.agentOverrides)\n\t\t.filter(([, value]) => typeof value?.model === \"string\" && value.model.trim())\n\t\t.map(([agent, value]) => ({ agent, model: value.model!.trim() }));\n\tconst probeCache = new Map<string, { status: ProbeStatus; message?: string }>();\n\tconst results: ProfileCheckResult[\"results\"] = [];\n\tfor (const entry of entries) {\n\t\tconst modelInfo = findModelInfo(entry.model, availableModels);\n\t\tconst { thinkingSuffix } = splitKnownThinkingSuffix(entry.model);\n\t\tconst probeModelId = modelInfo ? `${modelInfo.fullId}${thinkingSuffix}` : entry.model;\n\t\tlet probe = probeCache.get(probeModelId);\n\t\tif (!probe) {\n\t\t\tprobe = await probeModel(pi, ctx, probeModelId);\n\t\t\tprobeCache.set(probeModelId, probe);\n\t\t}\n\t\tresults.push({\n\t\t\tagent: entry.agent,\n\t\t\tmodel: entry.model,\n\t\t\tinRegistry: modelInfo !== undefined,\n\t\t\tprobe,\n\t\t});\n\t}\n\treturn { profileName: name, filePath, results };\n}\n"]}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/profiles/profiles.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport { BUILTIN_AGENT_NAMES } from \"../agents/agents.ts\";\nimport { findModelInfo, getSupportedThinkingLevels, splitKnownThinkingSuffix, toModelInfo } from \"../shared/model-info.ts\";\nimport { getAgentDir } from \"../shared/utils.ts\";\n\nexport const DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS = 7;\n\ntype BuiltinAgentName = typeof BUILTIN_AGENT_NAMES[number];\nexport type ProfileKind = \"quota\" | \"quality\";\nexport type ProbeStatus = \"ok\" | \"unavailable\" | \"auth\" | \"timeout\" | \"error\" | \"skipped\";\nexport type CostTier = \"cheap\" | \"medium\" | \"expensive\";\nexport type QualityTier = \"weak\" | \"medium\" | \"strong\";\nexport type LatencyTier = \"fast\" | \"medium\" | \"slow\";\nexport type RecommendedRoleTier = \"cheap\" | \"medium\" | \"strong\";\n\ninterface ProfileAgentOverride {\n\tmodel?: string;\n}\n\nexport interface SubagentProfileFile {\n\tsubagents: {\n\t\tagentOverrides: Record<string, ProfileAgentOverride>;\n\t};\n}\n\nexport type ClassificationSource = \"official-metadata\" | \"heuristic-name\";\n\nexport interface ProviderModelCatalogModel {\n\tid: string;\n\tfullId: string;\n\tobserved: {\n\t\tavailableInRegistry: boolean;\n\t\tname?: string;\n\t\treasoning?: boolean;\n\t\tthinkingLevels: string[];\n\t\tcontextWindow?: number;\n\t\tmaxTokens?: number;\n\t\tcost?: {\n\t\t\tinput?: number;\n\t\t\toutput?: number;\n\t\t\tcacheRead?: number;\n\t\t\tcacheWrite?: number;\n\t\t};\n\t\tprobe: {\n\t\t\tstatus: ProbeStatus;\n\t\t\tcheckedAt: string;\n\t\t\tmessage?: string;\n\t\t};\n\t};\n\tderived: {\n\t\tprofileRank: number;\n\t\tcostTier: CostTier;\n\t\tqualityTier: QualityTier;\n\t\tlatencyTier: LatencyTier;\n\t\trecommendedRoleTier: RecommendedRoleTier;\n\t\trecommendedAgents: BuiltinAgentName[];\n\t\tclassificationSources: ClassificationSource[];\n\t};\n\twarnings: string[];\n\tnotes: string[];\n}\n\nexport interface ProviderModelCatalogFile {\n\tprovider: string;\n\trefreshedAt: string;\n\tmaxAgeDays: number;\n\tsources: string[];\n\tmodels: ProviderModelCatalogModel[];\n}\n\nexport interface ProfileCheckResult {\n\tprofileName: string;\n\tfilePath: string;\n\tresults: Array<{\n\t\tagent: string;\n\t\tmodel: string;\n\t\tinRegistry: boolean;\n\t\tprobe: { status: ProbeStatus; message?: string };\n\t}>;\n}\n\nfunction readJsonObjectFile(filePath: string): Record<string, unknown> {\n\tconst raw = fs.readFileSync(filePath, \"utf-8\");\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(`File '${filePath}' must contain a JSON object.`);\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n\nfunction writeJsonFile(filePath: string, value: unknown): void {\n\tfs.mkdirSync(path.dirname(filePath), { recursive: true });\n\tfs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\\n`, \"utf-8\");\n}\n\nconst SAFE_PATH_TOKEN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\n\nfunction normalizePathToken(value: string, label: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) throw new Error(`${label} is required.`);\n\tif (!SAFE_PATH_TOKEN.test(trimmed) || trimmed === \".\" || trimmed === \"..\" || trimmed.includes(\"/\") || trimmed.includes(\"\\\\\")) {\n\t\tthrow new Error(`${label} must be a safe file name using only letters, numbers, dots, underscores, and hyphens.`);\n\t}\n\treturn trimmed;\n}\n\nfunction normalizeProfileName(name: string): string {\n\tconst trimmed = name.trim();\n\tconst stem = trimmed.endsWith(\".json\") ? trimmed.slice(0, -5) : trimmed;\n\treturn normalizePathToken(stem, \"Profile name\");\n}\n\nfunction normalizeProviderName(provider: string): string {\n\treturn normalizePathToken(provider, \"Provider\");\n}\n\nfunction validateSubagentProfile(filePath: string, parsed: Record<string, unknown>): SubagentProfileFile {\n\tconst subagents = parsed.subagents;\n\tif (!subagents || typeof subagents !== \"object\" || Array.isArray(subagents)) {\n\t\tthrow new Error(`Profile '${filePath}' must contain a 'subagents' object.`);\n\t}\n\tconst agentOverrides = (subagents as Record<string, unknown>).agentOverrides;\n\tif (!agentOverrides || typeof agentOverrides !== \"object\" || Array.isArray(agentOverrides)) {\n\t\tthrow new Error(`Profile '${filePath}' must contain 'subagents.agentOverrides' as an object.`);\n\t}\n\tfor (const [name, value] of Object.entries(agentOverrides)) {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\tthrow new Error(`Profile '${filePath}' has invalid override '${name}'; expected an object.`);\n\t\t}\n\t\tconst model = (value as Record<string, unknown>).model;\n\t\tif (model !== undefined && typeof model !== \"string\") {\n\t\t\tthrow new Error(`Profile '${filePath}' has invalid model for '${name}'; expected a string.`);\n\t\t}\n\t}\n\treturn parsed as unknown as SubagentProfileFile;\n}\n\nfunction getUserSettingsPath(): string {\n\treturn path.join(getAgentDir(), \"settings.json\");\n}\n\nfunction readSettingsFile(filePath: string): Record<string, unknown> {\n\tif (!fs.existsSync(filePath)) return {};\n\treturn readJsonObjectFile(filePath);\n}\n\nfunction extractVersionScore(id: string): number {\n\tconst match = id.match(/(\\d+(?:\\.\\d+)?)/g);\n\tif (!match || match.length === 0) return 0;\n\treturn Math.max(...match.map((value) => Number.parseFloat(value)).filter((value) => Number.isFinite(value)));\n}\n\nfunction modelNameTokens(modelName: string): string[] {\n\treturn modelName\n\t\t.toLowerCase()\n\t\t.replace(/([a-z])([0-9])/g, \"$1 $2\")\n\t\t.replace(/([0-9])([a-z])/g, \"$1 $2\")\n\t\t.split(/[^a-z0-9.]+/)\n\t\t.filter(Boolean);\n}\n\nfunction inferProfileBand(modelName: string): 0 | 1 | 2 | 3 | 4 {\n\tconst tokens = new Set(modelNameTokens(modelName));\n\tif ([\"spark\", \"flash\", \"nano\", \"tiny\", \"instant\"].some((token) => tokens.has(token))) return 0;\n\tif ([\"mini\", \"haiku\", \"small\"].some((token) => tokens.has(token))) return 1;\n\tif ([\"opus\", \"max\", \"ultra\", \"pro\"].some((token) => tokens.has(token))) return 4;\n\tif ([\"sonnet\", \"turbo\", \"plus\"].some((token) => tokens.has(token))) return 3;\n\treturn 2;\n}\n\ninterface ModelClassificationInput {\n\tid: string;\n\tname?: string;\n\treasoning?: boolean;\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n\tcost?: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t};\n}\n\ninterface NumericStats {\n\tmin: number;\n\tmax: number;\n}\n\ninterface ClassificationContext {\n\tcost?: NumericStats;\n\tcontextWindow?: NumericStats;\n\tmaxTokens?: NumericStats;\n}\n\nfunction combinedCost(cost: ModelClassificationInput[\"cost\"]): number | undefined {\n\tif (!cost) return undefined;\n\tconst values = [cost.input, cost.output, cost.cacheRead, cost.cacheWrite].filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n\tif (values.length === 0) return undefined;\n\treturn values.reduce((sum, value) => sum + value, 0);\n}\n\nfunction collectStats(values: Array<number | undefined>): NumericStats | undefined {\n\tconst filtered = values.filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n\tif (filtered.length === 0) return undefined;\n\treturn { min: Math.min(...filtered), max: Math.max(...filtered) };\n}\n\nfunction normalize(value: number | undefined, stats: NumericStats | undefined): number | undefined {\n\tif (value === undefined || !stats) return undefined;\n\tif (stats.max <= stats.min) return 0.5;\n\treturn (value - stats.min) / (stats.max - stats.min);\n}\n\nfunction buildClassificationContext(models: ModelClassificationInput[]): ClassificationContext {\n\treturn {\n\t\tcost: collectStats(models.map((model) => combinedCost(model.cost))),\n\t\tcontextWindow: collectStats(models.map((model) => model.contextWindow)),\n\t\tmaxTokens: collectStats(models.map((model) => model.maxTokens)),\n\t};\n}\n\nfunction rankToCostTier(rank: number): CostTier {\n\tif (rank <= 0.33) return \"cheap\";\n\tif (rank <= 0.66) return \"medium\";\n\treturn \"expensive\";\n}\n\nfunction scoreToQualityTier(score: number): QualityTier {\n\tif (score <= 0.33) return \"weak\";\n\tif (score <= 0.66) return \"medium\";\n\treturn \"strong\";\n}\n\nfunction qualityTierToRoleTier(quality: QualityTier, cost: CostTier): RecommendedRoleTier {\n\tif (quality === \"strong\") return \"strong\";\n\tif (quality === \"medium\") return cost === \"cheap\" ? \"cheap\" : \"medium\";\n\treturn \"cheap\";\n}\n\nfunction agentsForRoleTier(roleTier: RecommendedRoleTier): BuiltinAgentName[] {\n\tif (roleTier === \"cheap\") return [\"scout\", \"delegate\"];\n\tif (roleTier === \"medium\") return [\"planner\", \"context-builder\", \"researcher\"];\n\treturn [\"worker\", \"reviewer\", \"oracle\"];\n}\n\nfunction classifyModel(input: ModelClassificationInput, context: ClassificationContext): {\n\tprofileRank: number;\n\tcostTier: CostTier;\n\tqualityTier: QualityTier;\n\tlatencyTier: LatencyTier;\n\trecommendedRoleTier: RecommendedRoleTier;\n\trecommendedAgents: BuiltinAgentName[];\n\tclassificationSources: ClassificationSource[];\n} {\n\tconst modelName = input.name?.trim() || input.id;\n\tconst tokens = new Set(modelNameTokens(modelName));\n\tconst band = inferProfileBand(modelName);\n\tconst versionScore = extractVersionScore(input.id);\n\tconst costNorm = normalize(combinedCost(input.cost), context.cost);\n\tconst contextNorm = normalize(input.contextWindow, context.contextWindow);\n\tconst maxTokensNorm = normalize(input.maxTokens, context.maxTokens);\n\tconst hasOfficialMetadata = costNorm !== undefined || contextNorm !== undefined || maxTokensNorm !== undefined;\n\tconst classificationSources: ClassificationSource[] = hasOfficialMetadata\n\t\t? [\"official-metadata\", \"heuristic-name\"]\n\t\t: [\"heuristic-name\"];\n\tconst heuristicBase = band / 4;\n\tconst qualitySignals = [\n\t\theuristicBase,\n\t\t...(contextNorm !== undefined ? [contextNorm] : []),\n\t\t...(maxTokensNorm !== undefined ? [maxTokensNorm] : []),\n\t\t...(input.reasoning === true ? [1] : []),\n\t\t...(input.reasoning === false ? [0] : []),\n\t];\n\tconst latencyHintsFast = tokens.has(\"highspeed\") || tokens.has(\"flash\") || tokens.has(\"instant\") || tokens.has(\"turbo\");\n\tconst latencyHintsSlow = tokens.has(\"pro\") || tokens.has(\"ultra\") || tokens.has(\"opus\") || tokens.has(\"max\");\n\tlet qualityScore = qualitySignals.reduce((sum, value) => sum + value, 0) / qualitySignals.length;\n\tif (latencyHintsFast) {\n\t\tqualityScore -= 0.2;\n\t}\n\tqualityScore = Math.max(0, Math.min(1, qualityScore));\n\tconst costTier = costNorm !== undefined\n\t\t? rankToCostTier(costNorm)\n\t\t: band === 0 ? \"cheap\" : band >= 3 ? \"expensive\" : \"medium\";\n\tconst qualityTier = scoreToQualityTier(qualityScore);\n\tconst latencyTier: LatencyTier = latencyHintsFast\n\t\t? \"fast\"\n\t\t: latencyHintsSlow\n\t\t\t? \"slow\"\n\t\t\t: costNorm !== undefined\n\t\t\t\t? (costNorm <= 0.33 ? \"fast\" : costNorm <= 0.66 ? \"medium\" : \"slow\")\n\t\t\t\t: (band <= 1 ? \"fast\" : band >= 3 ? \"slow\" : \"medium\");\n\tconst recommendedRoleTier = qualityTierToRoleTier(qualityTier, costTier);\n\tconst latencyPenalty = latencyHintsFast ? 125 : 0;\n\tconst profileRank = Math.round((qualityScore * 100) * 10) + Math.round(versionScore * 25) - latencyPenalty;\n\treturn {\n\t\tprofileRank,\n\t\tcostTier,\n\t\tqualityTier,\n\t\tlatencyTier,\n\t\trecommendedRoleTier,\n\t\trecommendedAgents: agentsForRoleTier(recommendedRoleTier),\n\t\tclassificationSources,\n\t};\n}\n\nfunction resolveProbeStatus(text: string, timedOut: boolean): ProbeStatus {\n\tif (timedOut) return \"timeout\";\n\tif (!text) return \"error\";\n\tif (/(unauthori[sz]ed|forbidden|api key|auth|billing|credit|quota)/i.test(text)) return \"auth\";\n\tif (/(not found|unknown model|model unavailable|model disabled|unsupported model|unavailable)/i.test(text)) return \"unavailable\";\n\treturn \"error\";\n}\n\nasync function probeModel(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\">,\n\tfullId: string,\n): Promise<{ status: ProbeStatus; message?: string }> {\n\tif (typeof pi.exec !== \"function\") {\n\t\treturn { status: \"skipped\", message: \"pi.exec is unavailable in this runtime.\" };\n\t}\n\tconst result = await pi.exec(\"pi\", [\"-p\", \"--model\", fullId, \"--no-tools\", 'Reply with exactly \"OK\".'], {\n\t\tcwd: os.tmpdir(),\n\t\ttimeout: 45_000,\n\t} as Record<string, unknown>);\n\tconst stdout = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\tconst stderr = typeof result.stderr === \"string\" ? result.stderr.trim() : \"\";\n\tconst combined = [stderr, stdout].filter(Boolean).join(\"\\n\").trim();\n\tif (result.code === 0) return { status: \"ok\", message: stdout || \"Probe succeeded.\" };\n\treturn { status: resolveProbeStatus(combined, result.killed === true), message: combined || `Probe exited with code ${result.code ?? \"unknown\"}.` };\n}\n\nfunction roundIndex(count: number, position: number): number {\n\tif (count <= 1) return 0;\n\treturn Math.max(0, Math.min(count - 1, Math.round((count - 1) * position)));\n}\n\nfunction profilePositions(kind: ProfileKind): { cheap: number; medium: number; strong: number } {\n\treturn kind === \"quota\"\n\t\t? { cheap: 0, medium: 1 / 3, strong: 2 / 3 }\n\t\t: { cheap: 1 / 3, medium: 2 / 3, strong: 1 };\n}\n\nfunction pickTierModels(models: ProviderModelCatalogModel[], kind: ProfileKind): { cheap: string; medium: string; strong: string } {\n\tif (models.length === 0) throw new Error(\"No provider models are available for profile generation.\");\n\tconst selectionPool = kind === \"quota\" && models.length > 1\n\t\t? models.slice(0, -1)\n\t\t: models;\n\tconst positions = profilePositions(kind);\n\treturn {\n\t\tcheap: selectionPool[roundIndex(selectionPool.length, positions.cheap)]!.fullId,\n\t\tmedium: selectionPool[roundIndex(selectionPool.length, positions.medium)]!.fullId,\n\t\tstrong: selectionPool[roundIndex(selectionPool.length, positions.strong)]!.fullId,\n\t};\n}\n\nfunction observedCombinedCost(model: ProviderModelCatalogModel): number | undefined {\n\treturn combinedCost(model.observed.cost);\n}\n\nfunction dominatesModel(a: ProviderModelCatalogModel, b: ProviderModelCatalogModel): boolean {\n\tconst costA = observedCombinedCost(a);\n\tconst costB = observedCombinedCost(b);\n\tif (costA === undefined || costB === undefined) return false;\n\tif (costA > costB) return false;\n\tif (a.derived.profileRank < b.derived.profileRank) return false;\n\tif ((a.observed.reasoning === true ? 1 : 0) < (b.observed.reasoning === true ? 1 : 0)) return false;\n\tif ((a.observed.contextWindow ?? 0) < (b.observed.contextWindow ?? 0)) return false;\n\tif ((a.observed.maxTokens ?? 0) < (b.observed.maxTokens ?? 0)) return false;\n\treturn costA < costB\n\t\t|| a.derived.profileRank > b.derived.profileRank\n\t\t|| (a.observed.reasoning === true && b.observed.reasoning !== true)\n\t\t|| (a.observed.contextWindow ?? 0) > (b.observed.contextWindow ?? 0)\n\t\t|| (a.observed.maxTokens ?? 0) > (b.observed.maxTokens ?? 0);\n}\n\nfunction filterDominatedModels(models: ProviderModelCatalogModel[]): ProviderModelCatalogModel[] {\n\treturn models.filter((candidate, index) => !models.some((other, otherIndex) => otherIndex !== index && dominatesModel(other, candidate)));\n}\n\nfunction buildProfileFile(kind: ProfileKind, models: { cheap: string; medium: string; strong: string }): SubagentProfileFile {\n\treturn {\n\t\tsubagents: {\n\t\t\tagentOverrides: {\n\t\t\t\tscout: { model: models.cheap },\n\t\t\t\tdelegate: { model: models.cheap },\n\t\t\t\tplanner: { model: models.medium },\n\t\t\t\t\"context-builder\": { model: models.medium },\n\t\t\t\tresearcher: { model: models.medium },\n\t\t\t\tworker: { model: models.strong },\n\t\t\t\treviewer: { model: models.strong },\n\t\t\t\toracle: { model: models.strong },\n\t\t\t},\n\t\t},\n\t};\n}\n\nfunction catalogModelIsUsable(model: ProviderModelCatalogModel): boolean {\n\treturn model.observed.availableInRegistry && model.observed.probe.status !== \"unavailable\" && model.observed.probe.status !== \"auth\" && model.observed.probe.status !== \"timeout\" && model.observed.probe.status !== \"error\";\n}\n\nfunction modelUsesHeuristicClassification(model: ProviderModelCatalogModel): boolean {\n\treturn model.derived.classificationSources.includes(\"heuristic-name\")\n\t\t&& !model.derived.classificationSources.includes(\"official-metadata\");\n}\n\nfunction warningLineForHeuristicFallback(): string {\n\treturn \"Classification fell back to name heuristics.\";\n}\n\nexport function countHeuristicFallbackModels(catalog: ProviderModelCatalogFile): number {\n\treturn catalog.models.filter(modelUsesHeuristicClassification).length;\n}\n\nfunction resolveProfilePath(name: string): string {\n\tconst dir = ensureSubagentProfilesDir();\n\treturn path.join(dir, `${normalizeProfileName(name)}.json`);\n}\n\nexport function getSubagentProfilesRootDir(): string {\n\treturn path.join(getAgentDir(), \"profiles\", \"pi-subagents\");\n}\n\nexport function getSubagentProfilesDir(): string {\n\treturn getSubagentProfilesRootDir();\n}\n\nexport function ensureSubagentProfilesDir(): string {\n\tconst dir = getSubagentProfilesDir();\n\tfs.mkdirSync(dir, { recursive: true });\n\treturn dir;\n}\n\nexport function getProviderModelsDir(): string {\n\treturn path.join(getSubagentProfilesRootDir(), \"providers\");\n}\n\nexport function ensureProviderModelsDir(): string {\n\tconst dir = getProviderModelsDir();\n\tfs.mkdirSync(dir, { recursive: true });\n\treturn dir;\n}\n\nexport function getProviderModelsPath(provider: string): string {\n\treturn path.join(ensureProviderModelsDir(), `${normalizeProviderName(provider)}.models.json`);\n}\n\nexport function listSubagentProfiles(): string[] {\n\tconst dir = ensureSubagentProfilesDir();\n\treturn fs.readdirSync(dir, { withFileTypes: true })\n\t\t.filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n\t\t.map((entry) => entry.name.slice(0, -5))\n\t\t.sort((a, b) => a.localeCompare(b));\n}\n\nexport function readSubagentProfile(name: string): { filePath: string; profile: SubagentProfileFile } {\n\tconst filePath = resolveProfilePath(name);\n\tif (!fs.existsSync(filePath)) throw new Error(`Profile not found: ${name}`);\n\tconst parsed = readJsonObjectFile(filePath);\n\treturn { filePath, profile: validateSubagentProfile(filePath, parsed) };\n}\n\nexport function applySubagentProfile(name: string): { filePath: string; settingsPath: string } {\n\tconst { filePath, profile } = readSubagentProfile(name);\n\tconst settingsPath = getUserSettingsPath();\n\tconst settings = readSettingsFile(settingsPath);\n\tsettings.subagents = profile.subagents;\n\twriteJsonFile(settingsPath, settings);\n\treturn { filePath, settingsPath };\n}\n\nexport function readProviderModelCatalog(provider: string): ProviderModelCatalogFile | null {\n\tconst filePath = getProviderModelsPath(provider);\n\tif (!fs.existsSync(filePath)) return null;\n\treturn readJsonObjectFile(filePath) as unknown as ProviderModelCatalogFile;\n}\n\nexport function isProviderModelCatalogStale(catalog: ProviderModelCatalogFile, maxAgeDays = DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS): boolean {\n\tconst refreshedAt = Date.parse(catalog.refreshedAt);\n\tif (!Number.isFinite(refreshedAt)) return true;\n\tconst maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;\n\treturn Date.now() - refreshedAt > maxAgeMs;\n}\n\nexport async function refreshProviderModelCatalog(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tprovider: string,\n\toptions: { force?: boolean; maxAgeDays?: number; probe?: boolean } = {},\n): Promise<{ filePath: string; catalog: ProviderModelCatalogFile; reused: boolean; heuristicFallbackCount: number }> {\n\tconst normalizedProvider = normalizeProviderName(provider);\n\tconst maxAgeDays = options.maxAgeDays ?? DEFAULT_PROVIDER_MODELS_MAX_AGE_DAYS;\n\tconst filePath = getProviderModelsPath(normalizedProvider);\n\tif (!options.force) {\n\t\tconst existing = readProviderModelCatalog(normalizedProvider);\n\t\tif (existing && !isProviderModelCatalogStale(existing, maxAgeDays)) {\n\t\t\treturn { filePath, catalog: existing, reused: true, heuristicFallbackCount: countHeuristicFallbackModels(existing) };\n\t\t}\n\t}\n\n\tconst availableModels = ctx.modelRegistry.getAvailable().filter((model) => model.provider === normalizedProvider);\n\tif (availableModels.length === 0) {\n\t\tthrow new Error(`No models found in the current registry for provider '${normalizedProvider}'.`);\n\t}\n\n\tconst observedModels = [] as Array<{\n\t\trawModel: typeof availableModels[number];\n\t\tmodelRecord: Record<string, unknown> & { provider: string; id: string; name?: string };\n\t\tfullId: string;\n\t\tprobe: { status: ProbeStatus; message?: string };\n\t}>;\n\tfor (const rawModel of availableModels) {\n\t\tconst modelRecord = rawModel as Record<string, unknown> & { provider: string; id: string; name?: string };\n\t\tconst fullId = `${modelRecord.provider}/${modelRecord.id}`;\n\t\tconst probe = options.probe === false\n\t\t\t? { status: \"skipped\" as const, message: \"Live probing disabled.\" }\n\t\t\t: await probeModel(pi, ctx, fullId);\n\t\tobservedModels.push({ rawModel, modelRecord, fullId, probe });\n\t}\n\tconst classificationContext = buildClassificationContext(observedModels.map(({ modelRecord }) => ({\n\t\tid: modelRecord.id,\n\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t})));\n\tconst models: ProviderModelCatalogModel[] = [];\n\tfor (const { rawModel, modelRecord, fullId, probe } of observedModels) {\n\t\tconst classification = classifyModel({\n\t\t\tid: modelRecord.id,\n\t\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t\t}, classificationContext);\n\t\tconst warnings = classification.classificationSources.includes(\"heuristic-name\") && !classification.classificationSources.includes(\"official-metadata\")\n\t\t\t? [warningLineForHeuristicFallback()]\n\t\t\t: [];\n\t\tmodels.push({\n\t\t\tid: modelRecord.id,\n\t\t\tfullId,\n\t\t\tobserved: {\n\t\t\t\tavailableInRegistry: true,\n\t\t\t\t...(typeof modelRecord.name === \"string\" ? { name: modelRecord.name } : {}),\n\t\t\t\t...(typeof modelRecord.reasoning === \"boolean\" ? { reasoning: modelRecord.reasoning } : {}),\n\t\t\t\tthinkingLevels: getSupportedThinkingLevels(toModelInfo(rawModel)).map((level) => level),\n\t\t\t\t...(typeof modelRecord.contextWindow === \"number\" ? { contextWindow: modelRecord.contextWindow } : {}),\n\t\t\t\t...(typeof modelRecord.maxTokens === \"number\" ? { maxTokens: modelRecord.maxTokens } : {}),\n\t\t\t\t...(modelRecord.cost && typeof modelRecord.cost === \"object\" ? { cost: modelRecord.cost as ProviderModelCatalogModel[\"observed\"][\"cost\"] } : {}),\n\t\t\t\tprobe: {\n\t\t\t\t\tstatus: probe.status,\n\t\t\t\t\tcheckedAt: new Date().toISOString(),\n\t\t\t\t\t...(probe.message ? { message: probe.message } : {}),\n\t\t\t\t},\n\t\t\t},\n\t\t\tderived: classification,\n\t\t\twarnings,\n\t\t\tnotes: [],\n\t\t});\n\t}\n\tmodels.sort((a, b) => a.derived.profileRank - b.derived.profileRank || a.fullId.localeCompare(b.fullId));\n\tconst catalog: ProviderModelCatalogFile = {\n\t\tprovider: normalizedProvider,\n\t\trefreshedAt: new Date().toISOString(),\n\t\tmaxAgeDays,\n\t\tsources: [\"runtime-registry\", ...(options.probe === false ? [] : [\"live-probe\"]), \"heuristic-classifier\"],\n\t\tmodels,\n\t};\n\twriteJsonFile(filePath, catalog);\n\treturn { filePath, catalog, reused: false, heuristicFallbackCount: countHeuristicFallbackModels(catalog) };\n}\n\nexport async function generateProfilesForProvider(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tprovider: string,\n\toptions: { maxAgeDays?: number; forceRefresh?: boolean; probe?: boolean } = {},\n): Promise<{ quotaPath: string; qualityPath: string; catalogPath: string; quotaModels: { cheap: string; medium: string; strong: string }; qualityModels: { cheap: string; medium: string; strong: string }; heuristicFallbackCount: number; selectedHeuristicFallbackCount: number }> {\n\tconst normalizedProvider = normalizeProviderName(provider);\n\tconst { filePath: catalogPath, catalog, heuristicFallbackCount } = await refreshProviderModelCatalog(pi, ctx, normalizedProvider, {\n\t\tmaxAgeDays: options.maxAgeDays,\n\t\tforce: options.forceRefresh,\n\t\tprobe: options.probe,\n\t});\n\tconst usableModels = catalog.models.filter(catalogModelIsUsable);\n\tconst profileModels = filterDominatedModels(usableModels);\n\tif (profileModels.length === 0) {\n\t\tthrow new Error(`Provider '${normalizedProvider}' has no usable models after filtering.`);\n\t}\n\tconst quotaModels = pickTierModels(profileModels, \"quota\");\n\tconst qualityModels = pickTierModels(profileModels, \"quality\");\n\tconst dir = ensureSubagentProfilesDir();\n\tconst quotaPath = path.join(dir, `${normalizedProvider}.quota.json`);\n\tconst qualityPath = path.join(dir, `${normalizedProvider}.quality.json`);\n\twriteJsonFile(quotaPath, buildProfileFile(\"quota\", quotaModels));\n\twriteJsonFile(qualityPath, buildProfileFile(\"quality\", qualityModels));\n\tconst selectedModels = new Set([...Object.values(quotaModels), ...Object.values(qualityModels)]);\n\tconst selectedHeuristicFallbackCount = profileModels.filter((model) => selectedModels.has(model.fullId) && modelUsesHeuristicClassification(model)).length;\n\treturn { quotaPath, qualityPath, catalogPath, quotaModels, qualityModels, heuristicFallbackCount, selectedHeuristicFallbackCount };\n}\n\nexport async function checkSubagentProfile(\n\tpi: Pick<ExtensionAPI, \"exec\"> | { exec?: ExtensionAPI[\"exec\"] },\n\tctx: Pick<ExtensionContext, \"cwd\" | \"modelRegistry\">,\n\tname: string,\n): Promise<ProfileCheckResult> {\n\tconst { filePath, profile } = readSubagentProfile(name);\n\tconst availableModels = ctx.modelRegistry.getAvailable().map(toModelInfo);\n\tconst entries = Object.entries(profile.subagents.agentOverrides)\n\t\t.filter(([, value]) => typeof value?.model === \"string\" && value.model.trim())\n\t\t.map(([agent, value]) => ({ agent, model: value.model!.trim() }));\n\tconst probeCache = new Map<string, { status: ProbeStatus; message?: string }>();\n\tconst results: ProfileCheckResult[\"results\"] = [];\n\tfor (const entry of entries) {\n\t\tconst modelInfo = findModelInfo(entry.model, availableModels);\n\t\tconst { thinkingSuffix } = splitKnownThinkingSuffix(entry.model);\n\t\tconst probeModelId = modelInfo ? `${modelInfo.fullId}${thinkingSuffix}` : entry.model;\n\t\tlet probe = probeCache.get(probeModelId);\n\t\tif (!probe) {\n\t\t\tprobe = await probeModel(pi, ctx, probeModelId);\n\t\t\tprobeCache.set(probeModelId, probe);\n\t\t}\n\t\tresults.push({\n\t\t\tagent: entry.agent,\n\t\t\tmodel: entry.model,\n\t\t\tinRegistry: modelInfo !== undefined,\n\t\t\tprobe,\n\t\t});\n\t}\n\treturn { profileName: name, filePath, results };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Async execution logic for subagent tool
3
3
  */
4
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
+ import type { ExtensionAPI } from "@ashx-j/lunr";
5
5
  import type { AgentConfig } from "../../agents/agents.ts";
6
6
  import { type ChainStep } from "../../shared/settings.ts";
7
7
  import type { RunnerStep } from "../shared/parallel-utils.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"async-execution.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-execution.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Async execution logic for subagent tool\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport type { AgentConfig } from \"../../agents/agents.ts\";\nimport { writePrivateAtomicJson } from \"../../shared/atomic-json.ts\";\nimport { applyThinkingSuffix } from \"../shared/pi-args.ts\";\nimport { injectOutputPathSystemPrompt, injectSingleOutputInstruction, normalizeSingleOutputOverride, resolveSingleOutputPath, validateFileOnlyOutputMode } from \"../shared/single-output.ts\";\nimport { buildChainInstructions, isDynamicParallelStep, isParallelStep, resolveStepBehavior, suppressProgressForReadOnlyTask, writeInitialProgressFile, type ChainStep, type ResolvedStepBehavior, type SequentialStep, type StepOverrides } from \"../../shared/settings.ts\";\nimport type { RunnerStep } from \"../shared/parallel-utils.ts\";\nimport { resolvePiPackageRoot } from \"../shared/pi-spawn.ts\";\nimport { buildSkillInjection, normalizeSkillInput, resolveSkillsWithFallback } from \"../../agents/skills.ts\";\nimport { buildAgentMemoryInjection } from \"../../agents/agent-memory.ts\";\nimport { PI_CODING_AGENT_PACKAGE_ROOT_ENV, resolveChildCwd } from \"../../shared/utils.ts\";\nimport { buildModelCandidates, resolveEffectiveSubagentModel, resolveModelCandidate, resolveSubagentModelOverride, type AvailableModelInfo, type ParentModel } from \"../shared/model-fallback.ts\";\nimport type { ModelScopeConfig } from \"../shared/model-scope.ts\";\nimport { resolveEffectiveThinking } from \"../../shared/model-info.ts\";\nimport { resolveExpectedWorktreeAgentCwd } from \"../shared/worktree.ts\";\nimport { buildWorkflowGraphSnapshot } from \"../shared/workflow-graph.ts\";\nimport { ChainOutputValidationError, validateChainOutputBindings } from \"../shared/chain-outputs.ts\";\nimport { createStructuredOutputRuntime } from \"../shared/structured-output.ts\";\nimport { resolveEffectiveAcceptance } from \"../shared/acceptance.ts\";\nimport {\n\ttype AcceptanceInput,\n\ttype ArtifactConfig,\n\ttype Details,\n\ttype MaxOutputConfig,\n\ttype NestedRouteInfo,\n\ttype ResolvedControlConfig,\n\ttype ResolvedTurnBudget,\n\ttype ResolvedToolBudget,\n\ttype SubagentRunMode,\n\ttype SteeringRecoveryDescriptor,\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\tSUBAGENT_ASYNC_STARTED_EVENT,\n\tSUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\tTEMP_ROOT_DIR,\n\tgetAsyncConfigPath,\n\tresolveChildMaxSubagentDepth,\n} from \"../../shared/types.ts\";\nimport { nestedResultsPath, resolveInheritedNestedRouteFromEnv, resolveNestedParentAddressFromEnv, writeNestedEvent } from \"../shared/nested-events.ts\";\nimport { initialTurnBudgetState } from \"../shared/turn-budget.ts\";\nimport { validateToolBudgetConfig } from \"../shared/tool-budget.ts\";\nimport type { ImportedAsyncRoot } from \"./chain-root-attachment.ts\";\nimport type { SessionLeaseRequest } from \"../shared/session-lease.ts\";\n\nconst require = createRequire(import.meta.url);\nconst piPackageRoot = resolvePiPackageRoot();\n\nfunction resolveJitiCliFromPackageJson(packageJsonPath: string): string | undefined {\n\tif (!fs.existsSync(packageJsonPath)) return undefined;\n\tconst packageRoot = path.dirname(packageJsonPath);\n\tconst pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\tbin?: string | Record<string, string>;\n\t};\n\tconst binField = pkg.bin;\n\tconst binPath = typeof binField === \"string\"\n\t\t? binField\n\t\t: binField?.jiti ?? Object.values(binField ?? {})[0];\n\tconst candidates = [binPath, \"lib/jiti-cli.mjs\"].filter((candidate): candidate is string => Boolean(candidate));\n\tfor (const candidate of candidates) {\n\t\tconst cliPath = path.resolve(packageRoot, candidate);\n\t\tif (fs.existsSync(cliPath)) return cliPath;\n\t}\n\treturn undefined;\n}\n\nfunction resolveJitiCliPath(): string | undefined {\n\tconst candidates: Array<() => string | undefined> = [\n\t\t() => require.resolve(\"jiti/package.json\"),\n\t\t() => piPackageRoot\n\t\t\t? createRequire(path.join(piPackageRoot, \"package.json\")).resolve(\"jiti/package.json\")\n\t\t\t: undefined,\n\t\t() => {\n\t\t\tif (!process.argv[1]) return undefined;\n\t\t\tconst piEntry = fs.realpathSync(process.argv[1]);\n\t\t\treturn createRequire(piEntry).resolve(\"jiti/package.json\");\n\t\t},\n\t\t() => piPackageRoot ? path.join(piPackageRoot, \"node_modules\", \"jiti\", \"package.json\") : undefined,\n\t];\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst packageJsonPath = candidate();\n\t\t\tif (!packageJsonPath) continue;\n\t\t\tconst cliPath = resolveJitiCliFromPackageJson(packageJsonPath);\n\t\t\tif (cliPath) return cliPath;\n\t\t} catch {\n\t\t\t// Candidate not available in this install, continue probing.\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst jitiCliPath = resolveJitiCliPath();\n\ninterface AsyncExecutionContext {\n\tpi: ExtensionAPI;\n\tcwd: string;\n\tcurrentSessionId: string;\n\t/** Parent session id used by permission-system ask forwarding. */\n\tparentSessionId?: string;\n\tcurrentModelProvider?: string;\n\tcurrentModel?: ParentModel;\n\t/** Optional model-scope enforcement resolved from subagent settings. */\n\tmodelScope?: ModelScopeConfig;\n}\n\ninterface AsyncChainParams {\n\tchain: ChainStep[];\n\ttask?: string;\n\t/** Raw caller-facing goal used only by the started event. */\n\tgoal?: string;\n\tattachRoot?: ImportedAsyncRoot & { agent: string; outputName?: string; label?: string };\n\tresultMode?: Exclude<SubagentRunMode, \"single\">;\n\tagents: AgentConfig[];\n\tctx: AsyncExecutionContext;\n\tavailableModels?: AvailableModelInfo[];\n\tcwd?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig: ArtifactConfig;\n\tshareEnabled: boolean;\n\tsessionRoot?: string;\n\tchainSkills?: string[];\n\tsessionFilesByFlatIndex?: (string | undefined)[];\n\tthinkingOverridesByFlatIndex?: (AgentConfig[\"thinking\"] | undefined)[];\n\tprogressDir?: string;\n\tdynamicFanoutMaxItems?: number;\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tcontrolConfig?: ResolvedControlConfig;\n\tcontrolIntercomTarget?: string;\n\tchildIntercomTarget?: (agent: string, index: number) => string | undefined;\n\tnestedRoute?: NestedRouteInfo;\n\tacceptance?: AcceptanceInput;\n\ttimeoutMs?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n\t/** Global cap on simultaneously-running subagent tasks within the async run. */\n\tglobalConcurrencyLimit?: number;\n}\n\ninterface AsyncSingleParams {\n\tagent: string;\n\ttask?: string;\n\t/** Raw caller-facing goal used only by the started event. */\n\tgoal?: string;\n\tagentConfig: AgentConfig;\n\tctx: AsyncExecutionContext;\n\tcwd?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig: ArtifactConfig;\n\tshareEnabled: boolean;\n\tsessionRoot?: string;\n\tsessionDir?: string;\n\tsessionFile?: string;\n\trevivalLease?: SessionLeaseRequest;\n\tskills?: string[];\n\toutput?: string | boolean;\n\toutputMode?: \"inline\" | \"file-only\";\n\toutputBaseDir?: string;\n\tmodelOverride?: string;\n\tthinkingOverride?: AgentConfig[\"thinking\"];\n\tavailableModels?: AvailableModelInfo[];\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tcontrolConfig?: ResolvedControlConfig;\n\tcontrolIntercomTarget?: string;\n\tchildIntercomTarget?: (agent: string, index: number) => string | undefined;\n\tnestedRoute?: NestedRouteInfo;\n\tacceptance?: AcceptanceInput;\n\ttimeoutMs?: number;\n\tabsoluteDeadlineAt?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n}\n\ninterface AsyncExecutionResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Details;\n\tisError?: boolean;\n}\n\nexport interface AsyncRunnerStepBuildParams {\n\tchain: ChainStep[];\n\ttask?: string;\n\tattachRoot?: ImportedAsyncRoot & { agent: string; outputName?: string; label?: string };\n\tresultMode?: SubagentRunMode;\n\tagents: AgentConfig[];\n\tctx: AsyncExecutionContext;\n\tavailableModels?: AvailableModelInfo[];\n\tcwd?: string;\n\tchainSkills?: string[];\n\tsessionFilesByFlatIndex?: (string | undefined)[];\n\tthinkingOverridesByFlatIndex?: (AgentConfig[\"thinking\"] | undefined)[];\n\tprogressDir?: string;\n\tdynamicFanoutMaxItems?: number;\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeBaseDir?: string;\n\tasyncDir: string;\n\toutputBaseDir?: string;\n\tvalidateOutputBindings?: boolean;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n}\n\nexport type AsyncRunnerStepBuildResult =\n\t| {\n\t\tsteps: RunnerStep[];\n\t\trunnerCwd: string;\n\t\tworkflowGraph: ReturnType<typeof buildWorkflowGraphSnapshot>;\n\t\teventChain: ChainStep[];\n\t\toriginalTask?: string;\n\t}\n\t| { error: string };\n\nexport function formatAsyncStartedMessage(headline: string): string {\n\treturn [\n\t\theadline,\n\t\t\"\",\n\t\t\"The async run is detached. Do not run sleep timers or polling loops just to wait for it.\",\n\t\t\"If you have independent work, continue that work. When you have nothing left to do until the async result arrives, call subagent_wait() — it blocks until the run finishes and delivers the completion here. Only if you are certain you will get another turn (an interactive session where the user will prompt you again) can you instead stop and let Pi wake you; inside a skill that must run to completion, or in a non-interactive run, there is no next turn, so use subagent_wait().\",\n\t\t\"Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) when you need a one-shot status/result or to inspect a blocked/stale run. To block until completion, prefer subagent_wait(). Do not poll in a loop just to wait.\",\n\t].join(\"\\n\");\n}\n\n/**\n * Check if jiti is available for async execution\n */\nexport function isAsyncAvailable(): boolean {\n\treturn jitiCliPath !== undefined;\n}\n\nfunction isNodeExecutableName(execPath: string): boolean {\n\tconst basename = path.basename(execPath).toLowerCase();\n\treturn basename === \"node\" || basename === \"node.exe\" || basename === \"nodejs\" || basename === \"nodejs.exe\";\n}\n\nfunction canUseCurrentNodeExecutable(execPath: string): boolean {\n\ttry {\n\t\tfs.accessSync(execPath, process.platform === \"win32\" ? fs.constants.F_OK : fs.constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction resolveAsyncRunnerNodeCommand(): string {\n\tif (isNodeExecutableName(process.execPath) && canUseCurrentNodeExecutable(process.execPath)) {\n\t\treturn process.execPath;\n\t}\n\treturn process.platform === \"win32\" ? \"node.exe\" : \"node\";\n}\n\nexport function resolveAsyncRunnerLogPaths(cfg: object): { stdoutPath: string; stderrPath: string } | undefined {\n\tconst asyncDir = typeof (cfg as { asyncDir?: unknown }).asyncDir === \"string\"\n\t\t? (cfg as { asyncDir: string }).asyncDir\n\t\t: undefined;\n\tif (!asyncDir) return undefined;\n\treturn {\n\t\tstdoutPath: path.join(asyncDir, \"runner.stdout.log\"),\n\t\tstderrPath: path.join(asyncDir, \"runner.stderr.log\"),\n\t};\n}\n\nfunction closeFd(fd: number | undefined): void {\n\tif (fd === undefined) return;\n\ttry {\n\t\tfs.closeSync(fd);\n\t} catch {\n\t\t// Best-effort cleanup; child process already owns its duplicated stdio fd.\n\t}\n}\n\n/**\n * Spawn the async runner process\n */\nconst RUNNER_STARTUP_TIMEOUT_MS = 10_000;\nconst RUNNER_STARTUP_WAIT_BUFFER = typeof SharedArrayBuffer !== \"undefined\" ? new SharedArrayBuffer(4) : undefined;\nconst RUNNER_STARTUP_WAIT_VIEW = RUNNER_STARTUP_WAIT_BUFFER ? new Int32Array(RUNNER_STARTUP_WAIT_BUFFER) : undefined;\n\ntype RunnerStartupState = \"ready\" | \"acknowledged\";\n\ntype RunnerStartupWaitResult =\n\t| { ok: true; token: string }\n\t| { ok: false; error: string };\n\nfunction waitForStartupInterval(delayMs = 20): void {\n\tif (RUNNER_STARTUP_WAIT_VIEW) {\n\t\tAtomics.wait(RUNNER_STARTUP_WAIT_VIEW, 0, 0, delayMs);\n\t\treturn;\n\t}\n\tconst waitUntil = Date.now() + delayMs;\n\twhile (Date.now() < waitUntil) {\n\t\t// Startup handshakes are synchronous so resume rejects before reporting a run as started.\n\t}\n}\n\nfunction readRunnerStartup(startupPath: string, expectedState: RunnerStartupState, expectedToken?: string): RunnerStartupWaitResult | undefined {\n\tif (!fs.existsSync(startupPath)) return undefined;\n\ttry {\n\t\tconst payload = JSON.parse(fs.readFileSync(startupPath, \"utf-8\")) as { state?: unknown; token?: unknown; error?: unknown };\n\t\tif (payload.state === \"error\" && typeof payload.error === \"string\") return { ok: false, error: payload.error };\n\t\tif (payload.state !== expectedState) return undefined;\n\t\tif (typeof payload.token !== \"string\" || (expectedToken !== undefined && payload.token !== expectedToken)) {\n\t\t\treturn { ok: false, error: `Async runner wrote an invalid ${expectedState} startup handshake: ${startupPath}` };\n\t\t}\n\t\treturn { ok: true, token: payload.token };\n\t} catch (error) {\n\t\treturn { ok: false, error: `Failed to read async runner startup handshake '${startupPath}': ${error instanceof Error ? error.message : String(error)}` };\n\t}\n}\n\nfunction waitForRunnerStartup(startupPath: string, expectedState: RunnerStartupState, timeoutMs: number, expectedToken?: string): RunnerStartupWaitResult {\n\tconst deadline = Date.now() + timeoutMs;\n\tfor (;;) {\n\t\tconst result = readRunnerStartup(startupPath, expectedState, expectedToken);\n\t\tif (result) return result;\n\t\tif (Date.now() >= deadline) break;\n\t\twaitForStartupInterval(Math.min(20, Math.max(1, deadline - Date.now())));\n\t}\n\tconst finalResult = readRunnerStartup(startupPath, expectedState, expectedToken);\n\tif (finalResult) return finalResult;\n\treturn { ok: false, error: `Timed out after ${timeoutMs}ms waiting for the async runner startup state '${expectedState}'.` };\n}\n\nfunction writeRunnerStartupControl(filePath: string, payload: { action: \"ack\" | \"proceed\"; token: string }): void {\n\tconst tempPath = `${filePath}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`;\n\ttry {\n\t\tfs.writeFileSync(tempPath, JSON.stringify(payload), { encoding: \"utf-8\", mode: 0o600 });\n\t\tfs.renameSync(tempPath, filePath);\n\t} catch (error) {\n\t\ttry {\n\t\t\tfs.rmSync(tempPath, { force: true });\n\t\t} catch {\n\t\t\t// Preserve the startup-control write error.\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction runnerIsAlive(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"EPERM\";\n\t}\n}\n\nfunction terminateRunnerBeforeProceed(pid: number): void {\n\tfor (const signal of [\"SIGTERM\", \"SIGKILL\"] as const) {\n\t\tif (!runnerIsAlive(pid)) return;\n\t\ttry {\n\t\t\tprocess.kill(pid, signal);\n\t\t} catch {\n\t\t\tif (!runnerIsAlive(pid)) return;\n\t\t}\n\t\tconst deadline = Date.now() + 1000;\n\t\twhile (runnerIsAlive(pid) && Date.now() < deadline) waitForStartupInterval();\n\t}\n}\n\nfunction spawnRunner(cfg: object, suffix: string, cwd: string): { pid?: number; error?: string } {\n\tif (!jitiCliPath) {\n\t\treturn { error: \"upstream jiti for TypeScript execution could not be found; ensure package dependencies are installed\" };\n\t}\n\n\ttry {\n\t\tconst cwdStats = fs.statSync(cwd);\n\t\tif (!cwdStats.isDirectory()) {\n\t\t\treturn { error: `cwd is not a directory: ${cwd}` };\n\t\t}\n\t} catch {\n\t\treturn { error: `cwd does not exist: ${cwd}` };\n\t}\n\n\tfs.mkdirSync(TEMP_ROOT_DIR, { recursive: true });\n\tconst cfgPath = getAsyncConfigPath(suffix);\n\tfs.writeFileSync(cfgPath, JSON.stringify(cfg));\n\t// lunr: bake-in ships compiled .js only; use the .ts when present (upstream dev), else the .js sibling.\n\tconst runnerTsPath = path.join(path.dirname(fileURLToPath(import.meta.url)), \"subagent-runner.ts\");\n\tconst runner = fs.existsSync(runnerTsPath) ? runnerTsPath : runnerTsPath.replace(/\\.ts$/, \".js\");\n\tconst nodeCommand = resolveAsyncRunnerNodeCommand();\n\tconst startupPath = typeof (cfg as { revivalLease?: unknown; asyncDir?: unknown }).revivalLease === \"object\"\n\t\t&& typeof (cfg as { asyncDir?: unknown }).asyncDir === \"string\"\n\t\t? path.join((cfg as { asyncDir: string }).asyncDir, \"runner-startup.json\")\n\t\t: undefined;\n\tconst startupAckPath = startupPath ? path.join(path.dirname(startupPath), \"runner-startup-ack.json\") : undefined;\n\tconst startupProceedPath = startupPath ? path.join(path.dirname(startupPath), \"runner-startup-proceed.json\") : undefined;\n\tif (startupPath) fs.rmSync(startupPath, { force: true });\n\tif (startupAckPath) fs.rmSync(startupAckPath, { force: true });\n\tif (startupProceedPath) fs.rmSync(startupProceedPath, { force: true });\n\n\tconst logPaths = resolveAsyncRunnerLogPaths(cfg);\n\tlet stdoutFd: number | undefined;\n\tlet stderrFd: number | undefined;\n\ttry {\n\t\tif (logPaths) {\n\t\t\tfs.mkdirSync(path.dirname(logPaths.stdoutPath), { recursive: true });\n\t\t\tstdoutFd = fs.openSync(logPaths.stdoutPath, \"a\");\n\t\t\tstderrFd = fs.openSync(logPaths.stderrPath, \"a\");\n\t\t}\n\t\tconst proc = spawn(nodeCommand, [jitiCliPath, runner, cfgPath], {\n\t\t\tcwd,\n\t\t\tdetached: true,\n\t\t\tstdio: [\"ignore\", stdoutFd ?? \"ignore\", stderrFd ?? \"ignore\"],\n\t\t\twindowsHide: true,\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...(piPackageRoot ? { [PI_CODING_AGENT_PACKAGE_ROOT_ENV]: piPackageRoot } : {}),\n\t\t\t},\n\t\t});\n\t\tcloseFd(stdoutFd);\n\t\tcloseFd(stderrFd);\n\t\tproc.on(\"error\", (error) => {\n\t\t\tconsole.error(`[pi-subagents] async spawn failed: ${error.message}`);\n\t\t});\n\t\tif (typeof proc.pid !== \"number\") {\n\t\t\treturn { error: `async runner did not produce a pid for cwd: ${cwd}` };\n\t\t}\n\t\tproc.unref();\n\t\tif (startupPath && startupAckPath && startupProceedPath) {\n\t\t\tconst ready = waitForRunnerStartup(startupPath, \"ready\", RUNNER_STARTUP_TIMEOUT_MS);\n\t\t\tif (!ready.ok) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: ready.error };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\twriteRunnerStartupControl(startupAckPath, { action: \"ack\", token: ready.token });\n\t\t\t} catch (error) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: `Failed to acknowledge async runner startup: ${error instanceof Error ? error.message : String(error)}` };\n\t\t\t}\n\t\t\tconst acknowledged = waitForRunnerStartup(startupPath, \"acknowledged\", RUNNER_STARTUP_TIMEOUT_MS, ready.token);\n\t\t\tif (!acknowledged.ok) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: acknowledged.error };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\twriteRunnerStartupControl(startupProceedPath, { action: \"proceed\", token: ready.token });\n\t\t\t} catch (error) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: `Failed to authorize async runner startup: ${error instanceof Error ? error.message : String(error)}` };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tfs.rmSync(startupPath, { force: true });\n\t\t\t} catch {\n\t\t\t\t// Proceed is the commit point; handshake cleanup cannot turn a running revival into a start error.\n\t\t\t}\n\t\t}\n\t\treturn { pid: proc.pid };\n\t} catch (error) {\n\t\tcloseFd(stdoutFd);\n\t\tcloseFd(stderrFd);\n\t\treturn { error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nfunction formatAsyncStartError(mode: SubagentRunMode, message: string): AsyncExecutionResult {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tisError: true,\n\t\tdetails: { mode, results: [] },\n\t};\n}\n\nconst UNAVAILABLE_SUBAGENT_SKILL_ERROR = \"Skills not found: pi-subagents\";\n\nclass UnavailableSubagentSkillError extends Error {}\nclass AsyncStartValidationError extends Error {}\n\nexport function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildParams): AsyncRunnerStepBuildResult {\n\tconst {\n\t\tchain,\n\t\tagents,\n\t\tctx,\n\t\tcwd,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tmaxSubagentDepth,\n\t\tworktreeBaseDir,\n\t\tasyncDir,\n\t} = params;\n\tconst outputBaseDir = params.outputBaseDir;\n\tconst resultMode = params.resultMode ?? \"chain\";\n\tconst chainSkills = params.chainSkills ?? [];\n\tconst availableModels = params.availableModels;\n\tconst runnerCwd = resolveChildCwd(ctx.cwd, cwd);\n\tconst progressDir = params.progressDir ?? runnerCwd;\n\tconst graphChain: ChainStep[] = params.attachRoot\n\t\t? [{\n\t\t\t\tagent: params.attachRoot.agent,\n\t\t\t\ttask: `Attach async root ${params.attachRoot.runId}`,\n\t\t\t\tlabel: params.attachRoot.label ?? `Attached root ${params.attachRoot.runId}`,\n\t\t\t\t...(params.attachRoot.outputName ? { as: params.attachRoot.outputName } : {}),\n\t\t\t}, ...chain]\n\t\t: chain;\n\tconst firstStep = chain[0];\n\tconst originalTask = params.task ?? (firstStep\n\t\t? (isParallelStep(firstStep)\n\t\t\t? firstStep.parallel[0]?.task\n\t\t\t: isDynamicParallelStep(firstStep)\n\t\t\t\t? firstStep.parallel.task\n\t\t\t\t: (firstStep as SequentialStep).task)\n\t\t: undefined);\n\ttry {\n\t\tif (params.validateOutputBindings !== false) {\n\t\t\tvalidateChainOutputBindings(chain, { maxItems: params.dynamicFanoutMaxItems });\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof ChainOutputValidationError) return { error: error.message };\n\t\tthrow error;\n\t}\n\tconst workflowGraph = buildWorkflowGraphSnapshot({ runId: id, mode: resultMode, steps: graphChain });\n\n\tfor (const s of chain) {\n\t\tconst stepAgents = isParallelStep(s)\n\t\t\t? s.parallel.map((t) => t.agent)\n\t\t\t: isDynamicParallelStep(s)\n\t\t\t\t? [s.parallel.agent]\n\t\t\t\t: [(s as SequentialStep).agent];\n\t\tfor (const agentName of stepAgents) {\n\t\t\tif (!agents.find((x) => x.name === agentName)) {\n\t\t\t\treturn { error: `Unknown agent: ${agentName}` };\n\t\t\t}\n\t\t}\n\t}\n\n\tlet progressInstructionCreated = false;\n\tconst buildStepOverrides = (s: SequentialStep): StepOverrides => {\n\t\tconst stepSkillInput = normalizeSkillInput(s.skill);\n\t\treturn {\n\t\t\t...(s.output !== undefined ? { output: s.output } : {}),\n\t\t\t...(s.outputMode !== undefined ? { outputMode: s.outputMode } : {}),\n\t\t\t...(s.reads !== undefined ? { reads: s.reads } : {}),\n\t\t\t...(s.progress !== undefined ? { progress: s.progress } : {}),\n\t\t\t...(stepSkillInput !== undefined ? { skills: stepSkillInput } : {}),\n\t\t\t...(s.model !== undefined ? { model: s.model } : {}),\n\t\t};\n\t};\n\tconst buildSeqStep = (s: SequentialStep, sessionFile?: string, behaviorCwd?: string, progressPrecreated = false, resolvedBehavior?: ResolvedStepBehavior, flatIndex?: number, parallelOutputNamespace?: { stepIndex: number; taskIndex?: number }) => {\n\t\tconst a = agents.find((x) => x.name === s.agent)!;\n\t\tconst toolBudgetInput = s.toolBudget ?? params.toolBudget ?? a.toolBudget ?? params.configToolBudget;\n\t\tconst resolvedToolBudget = validateToolBudgetConfig(toolBudgetInput, s.toolBudget ? \"toolBudget\" : a.toolBudget ? \"agent.toolBudget\" : \"config.toolBudget\");\n\t\tif (resolvedToolBudget.error) throw new AsyncStartValidationError(resolvedToolBudget.error);\n\t\tconst stepCwd = resolveChildCwd(runnerCwd, s.cwd);\n\t\tconst instructionCwd = behaviorCwd ?? stepCwd;\n\t\tlet behavior = suppressProgressForReadOnlyTask(resolvedBehavior ?? resolveStepBehavior(a, buildStepOverrides(s), chainSkills), s.task, originalTask);\n\t\tconst inheritedRelativeParallelOutput = parallelOutputNamespace && s.output === undefined && typeof behavior.output === \"string\" && !path.isAbsolute(behavior.output);\n\t\tif (inheritedRelativeParallelOutput && parallelOutputNamespace.taskIndex !== undefined) {\n\t\t\tbehavior = {\n\t\t\t\t...behavior,\n\t\t\t\toutput: path.join(`parallel-${parallelOutputNamespace.stepIndex}`, `${parallelOutputNamespace.taskIndex}-${s.agent}`, behavior.output),\n\t\t\t};\n\t\t}\n\t\tconst namespaceOutputPath = Boolean(inheritedRelativeParallelOutput && parallelOutputNamespace.taskIndex === undefined);\n\t\tconst skillNames = behavior.skills === false ? [] : behavior.skills;\n\t\tconst { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(\n\t\t\tskillNames,\n\t\t\tstepCwd,\n\t\t\tctx.cwd,\n\t\t\ta.skillPath,\n\t\t\ta.filePath ? path.dirname(a.filePath) : stepCwd,\n\t\t);\n\t\tif (missingSkills.includes(\"pi-subagents\")) throw new UnavailableSubagentSkillError(UNAVAILABLE_SUBAGENT_SKILL_ERROR);\n\n\t\tlet systemPrompt = a.systemPrompt?.trim() ?? \"\";\n\t\tif (resolvedSkills.length > 0) {\n\t\t\tconst injection = buildSkillInjection(resolvedSkills);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${injection}` : injection;\n\t\t}\n\t\tconst memoryInjection = buildAgentMemoryInjection(a, stepCwd);\n\t\tif (memoryInjection) {\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memoryInjection}` : memoryInjection;\n\t\t}\n\n\t\tconst readInstructions = buildChainInstructions({ ...behavior, output: false, progress: false }, instructionCwd, false);\n\t\tconst isFirstProgressAgent = behavior.progress && !progressPrecreated && !progressInstructionCreated;\n\t\tif (behavior.progress) progressInstructionCreated = true;\n\t\tconst progressInstructions = buildChainInstructions({ ...behavior, output: false, reads: false }, progressDir, isFirstProgressAgent);\n\t\tconst outputPath = resolveSingleOutputPath(behavior.output, ctx.cwd, instructionCwd, outputBaseDir);\n\t\tif (!namespaceOutputPath) systemPrompt = injectOutputPathSystemPrompt(systemPrompt, outputPath, a);\n\t\tconst validationError = validateFileOnlyOutputMode(behavior.outputMode, outputPath, `Async step (${s.agent})`);\n\t\tif (validationError) throw new AsyncStartValidationError(validationError);\n\t\tlet taskTemplate = s.task ?? \"{previous}\";\n\t\ttaskTemplate = taskTemplate.replace(/\\{task\\}/g, originalTask ?? \"\");\n\t\ttaskTemplate = taskTemplate.replace(/\\{chain_dir\\}/g, runnerCwd);\n\t\tconst taskText = `${readInstructions.prefix}${taskTemplate}${progressInstructions.suffix}`;\n\t\tconst task = namespaceOutputPath ? taskText : injectSingleOutputInstruction(taskText, outputPath, a);\n\n\t\tconst primaryModel = resolveEffectiveSubagentModel(\n\t\t\ts.model,\n\t\t\ta.model,\n\t\t\tctx.currentModel,\n\t\t\tavailableModels,\n\t\t\tctx.currentModelProvider,\n\t\t\t{ scope: ctx.modelScope },\n\t\t);\n\t\tconst thinkingOverride = flatIndex === undefined ? undefined : thinkingOverridesByFlatIndex?.[flatIndex];\n\t\tconst effectiveThinking = thinkingOverride ?? a.thinking;\n\t\tconst model = applyThinkingSuffix(primaryModel, effectiveThinking, thinkingOverride !== undefined);\n\t\treturn {\n\t\t\tparentSessionId: ctx.parentSessionId ?? ctx.currentSessionId,\n\t\t\tagent: s.agent,\n\t\t\ttask,\n\t\t\tphase: s.phase,\n\t\t\tlabel: s.label,\n\t\t\toutputName: s.as,\n\t\t\tstructured: Boolean(s.outputSchema),\n\t\t\tcwd: stepCwd,\n\t\t\tmodel,\n\t\t\tthinking: resolveEffectiveThinking(model, effectiveThinking),\n\t\t\tmodelCandidates: buildModelCandidates(primaryModel, a.fallbackModels, availableModels, ctx.currentModelProvider, { scope: ctx.modelScope }).map((candidate) =>\n\t\t\t\tapplyThinkingSuffix(candidate, effectiveThinking, thinkingOverride !== undefined),\n\t\t\t),\n\t\t\ttools: a.tools,\n\t\t\textensions: a.extensions,\n\t\t\tsubagentOnlyExtensions: a.subagentOnlyExtensions,\n\t\t\tmcpDirectTools: a.mcpDirectTools,\n\t\t\tcompletionGuard: a.completionGuard,\n\t\t\tsystemPrompt,\n\t\t\tsystemPromptMode: a.systemPromptMode,\n\t\t\tinheritProjectContext: a.inheritProjectContext,\n\t\t\tinheritSkills: a.inheritSkills,\n\t\t\tskills: resolvedSkills.map((r) => r.name),\n\t\t\toutputPath,\n\t\t\t...(namespaceOutputPath ? { namespaceOutputPath: true } : {}),\n\t\t\toutputMode: behavior.outputMode,\n\t\t\tsessionFile,\n\t\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, a.maxSubagentDepth),\n\t\t\twaitToolEnabled: params.waitToolEnabled,\n\t\t\teffectiveAcceptance: resolveEffectiveAcceptance({\n\t\t\t\texplicit: s.acceptance,\n\t\t\t\tagentName: s.agent,\n\t\t\t\tacceptanceRole: a.acceptanceRole,\n\t\t\t\ttask,\n\t\t\t\tmode: resultMode,\n\t\t\t\tasync: true,\n\t\t\t\tdynamic: false,\n\t\t\t}),\n\t\t\tacceptanceInput: s.acceptance,\n\t\t\tacceptanceRole: a.acceptanceRole,\n\t\t\t...(s.outputSchema ? { structuredOutputSchema: s.outputSchema } : {}),\n\t\t\t...(s.outputSchema ? { structuredOutput: createStructuredOutputRuntime(s.outputSchema, path.join(asyncDir, \"structured-output\")) } : {}),\n\t\t\t...(resolvedToolBudget.budget ? { toolBudget: resolvedToolBudget.budget } : {}),\n\t\t};\n\t};\n\n\tlet flatStepIndex = 0;\n\tconst nextFlatStep = (): { index: number; sessionFile?: string; thinkingOverride?: AgentConfig[\"thinking\"] } => {\n\t\tconst index = flatStepIndex;\n\t\tconst sessionFile = sessionFilesByFlatIndex?.[flatStepIndex];\n\t\tconst thinkingOverride = thinkingOverridesByFlatIndex?.[flatStepIndex];\n\t\tflatStepIndex++;\n\t\treturn {\n\t\t\tindex,\n\t\t\t...(sessionFile ? { sessionFile } : {}),\n\t\t\t...(thinkingOverride ? { thinkingOverride } : {}),\n\t\t};\n\t};\n\n\ttry {\n\t\tconst builtSteps = chain.map((s, stepIndex) => {\n\t\t\tif (isParallelStep(s)) {\n\t\t\t\tconst parallelBehaviors = s.parallel.map((task) => {\n\t\t\t\t\tconst agent = agents.find((candidate) => candidate.name === task.agent)!;\n\t\t\t\t\treturn suppressProgressForReadOnlyTask(resolveStepBehavior(agent, buildStepOverrides(task), chainSkills), task.task, originalTask);\n\t\t\t\t});\n\t\t\t\tconst progressPrecreated = parallelBehaviors.some((behavior) => behavior.progress);\n\t\t\t\tif (progressPrecreated) {\n\t\t\t\t\tif (!s.worktree || params.progressDir) writeInitialProgressFile(progressDir);\n\t\t\t\t\tprogressInstructionCreated = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tparallel: s.parallel.map((t, taskIndex) => {\n\t\t\t\t\t\tlet behaviorCwd: string | undefined;\n\t\t\t\t\t\tif (s.worktree) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbehaviorCwd = resolveExpectedWorktreeAgentCwd(runnerCwd, `${id}-s${stepIndex}`, taskIndex, worktreeBaseDir);\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tbehaviorCwd = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst staticStep = nextFlatStep();\n\t\t\t\t\t\treturn buildSeqStep(t, staticStep.sessionFile, behaviorCwd, progressPrecreated, parallelBehaviors[taskIndex], staticStep.index, { stepIndex, taskIndex });\n\t\t\t\t\t}),\n\t\t\t\t\tconcurrency: s.concurrency,\n\t\t\t\t\tfailFast: s.failFast,\n\t\t\t\t\tworktree: s.worktree,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isDynamicParallelStep(s)) {\n\t\t\t\tconst agent = agents.find((candidate) => candidate.name === s.parallel.agent)!;\n\t\t\t\tconst behavior = suppressProgressForReadOnlyTask(resolveStepBehavior(agent, buildStepOverrides(s.parallel), chainSkills), s.parallel.task, originalTask);\n\t\t\t\tconst progressPrecreated = behavior.progress;\n\t\t\t\tif (progressPrecreated) {\n\t\t\t\t\twriteInitialProgressFile(progressDir);\n\t\t\t\t\tprogressInstructionCreated = true;\n\t\t\t\t}\n\t\t\t\tconst maxItems = s.expand.maxItems ?? params.dynamicFanoutMaxItems ?? 0;\n\t\t\t\tconst dynamicFlatSteps = Array.from({ length: maxItems }, () => nextFlatStep());\n\t\t\t\tconst parallel = buildSeqStep(s.parallel as SequentialStep, undefined, undefined, progressPrecreated, behavior, undefined, { stepIndex });\n\t\t\t\treturn {\n\t\t\t\t\texpand: s.expand,\n\t\t\t\t\tparallel,\n\t\t\t\t\tcollect: s.collect,\n\t\t\t\t\tconcurrency: s.concurrency,\n\t\t\t\t\tfailFast: s.failFast,\n\t\t\t\t\tphase: s.phase,\n\t\t\t\t\tlabel: s.label,\n\t\t\t\t\tsessionFiles: dynamicFlatSteps.map((step) => step.sessionFile),\n\t\t\t\t\tthinkingOverrides: dynamicFlatSteps.map((step) => step.thinkingOverride),\n\t\t\t\t\teffectiveAcceptance: resolveEffectiveAcceptance({\n\t\t\t\t\t\texplicit: s.acceptance,\n\t\t\t\t\t\tagentName: s.parallel.agent,\n\t\t\t\t\t\tacceptanceRole: agent.acceptanceRole,\n\t\t\t\t\t\ttask: parallel.task,\n\t\t\t\t\t\tmode: resultMode,\n\t\t\t\t\t\tasync: true,\n\t\t\t\t\t\tdynamicGroup: true,\n\t\t\t\t\t}),\n\t\t\t\t\tacceptanceInput: s.acceptance,\n\t\t\t\t\tacceptanceRole: agent.acceptanceRole,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst staticStep = nextFlatStep();\n\t\t\treturn buildSeqStep(s as SequentialStep, staticStep.sessionFile, undefined, false, undefined, staticStep.index);\n\t\t});\n\t\tconst steps = params.attachRoot\n\t\t\t? [{\n\t\t\t\t\tagent: params.attachRoot.agent,\n\t\t\t\t\ttask: \"\",\n\t\t\t\t\tlabel: params.attachRoot.label ?? `Attached root ${params.attachRoot.runId}`,\n\t\t\t\t\toutputName: params.attachRoot.outputName,\n\t\t\t\t\timportAsyncRoot: {\n\t\t\t\t\t\trunId: params.attachRoot.runId,\n\t\t\t\t\t\tasyncDir: params.attachRoot.asyncDir,\n\t\t\t\t\t\tresultPath: params.attachRoot.resultPath,\n\t\t\t\t\t\tindex: params.attachRoot.index,\n\t\t\t\t\t},\n\t\t\t\t\tinheritProjectContext: false,\n\t\t\t\t\tinheritSkills: false,\n\t\t\t\t}, ...builtSteps]\n\t\t\t: builtSteps;\n\t\tfor (const step of steps) {\n\t\t\tif (!(\"parallel\" in step) || !Array.isArray(step.parallel)) continue;\n\t\t\tconst seen = new Map<string, { index: number; agent: string }>();\n\t\t\tfor (let index = 0; index < step.parallel.length; index++) {\n\t\t\t\tconst task = step.parallel[index]!;\n\t\t\t\tif (!task.outputPath) continue;\n\t\t\t\tconst previous = seen.get(task.outputPath);\n\t\t\t\tif (previous) {\n\t\t\t\t\tthrow new AsyncStartValidationError(`Parallel tasks ${previous.index + 1} (${previous.agent}) and ${index + 1} (${task.agent}) resolve output to the same path: ${task.outputPath}. Use distinct output paths.`);\n\t\t\t\t}\n\t\t\t\tseen.set(task.outputPath, { index, agent: task.agent });\n\t\t\t}\n\t\t}\n\t\treturn { steps, runnerCwd, workflowGraph, eventChain: graphChain, ...(originalTask !== undefined ? { originalTask } : {}) };\n\t} catch (error) {\n\t\tif (error instanceof UnavailableSubagentSkillError || error instanceof AsyncStartValidationError) return { error: error.message };\n\t\tthrow error;\n\t}\n}\n\n/**\n * Execute a chain asynchronously\n */\nexport function executeAsyncChain(\n\tid: string,\n\tparams: AsyncChainParams,\n): AsyncExecutionResult {\n\tconst {\n\t\tchain,\n\t\tagents,\n\t\tctx,\n\t\tcwd,\n\t\tmaxOutput,\n\t\tartifactsDir,\n\t\tartifactConfig,\n\t\tshareEnabled,\n\t\tsessionRoot,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tmaxSubagentDepth,\n\t\tworktreeSetupHook,\n\t\tworktreeSetupHookTimeoutMs,\n\t\tworktreeBaseDir,\n\t\tcontrolConfig,\n\t\tcontrolIntercomTarget,\n\t\tchildIntercomTarget,\n\t\tnestedRoute,\n\t} = params;\n\tconst resultMode = params.resultMode ?? \"chain\";\n\tconst inheritedNestedRoute = resolveInheritedNestedRouteFromEnv();\n\tconst nestedAddress = inheritedNestedRoute ? resolveNestedParentAddressFromEnv() : undefined;\n\tconst asyncDir = inheritedNestedRoute\n\t\t? path.join(TEMP_ROOT_DIR, \"nested-subagent-runs\", inheritedNestedRoute.rootRunId, id)\n\t\t: path.join(ASYNC_DIR, id);\n\ttry {\n\t\tfs.mkdirSync(asyncDir, { recursive: true });\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Failed to create async run directory '${asyncDir}': ${message}` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: resultMode, results: [] },\n\t\t};\n\t}\n\n\tconst built = buildAsyncRunnerSteps(id, {\n\t\tchain,\n\t\ttask: params.task,\n\t\tattachRoot: params.attachRoot,\n\t\tresultMode,\n\t\tagents,\n\t\tctx,\n\t\tavailableModels: params.availableModels,\n\t\tcwd,\n\t\tchainSkills: params.chainSkills,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tprogressDir: params.progressDir ?? (artifactsDir ? path.join(artifactsDir, \"progress\", id) : resultMode === \"parallel\" ? path.join(asyncDir, \"progress\") : undefined),\n\t\toutputBaseDir: artifactsDir ? path.join(artifactsDir, \"outputs\", id) : undefined,\n\t\tdynamicFanoutMaxItems: params.dynamicFanoutMaxItems,\n\t\tmaxSubagentDepth,\n\t\twaitToolEnabled: params.waitToolEnabled,\n\t\tworktreeBaseDir,\n\t\tasyncDir,\n\t\ttoolBudget: params.toolBudget,\n\t\tconfigToolBudget: params.configToolBudget,\n\t});\n\tif (\"error\" in built) {\n\t\ttry {\n\t\t\tfs.rmSync(asyncDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Best-effort cleanup for validation failures before the runner is spawned.\n\t\t}\n\t\treturn formatAsyncStartError(resultMode, built.error);\n\t}\n\tconst { steps, runnerCwd, workflowGraph, eventChain } = built;\n\tconst deadlineAt = params.timeoutMs !== undefined ? Date.now() + params.timeoutMs : undefined;\n\tconst initialTurnBudget = params.turnBudget ? initialTurnBudgetState(params.turnBudget) : undefined;\n\tlet childTargetIndex = 0;\n\tconst childIntercomTargets = childIntercomTarget ? steps.flatMap((step) => {\n\t\tif (!(\"parallel\" in step) && step.importAsyncRoot) {\n\t\t\tchildTargetIndex++;\n\t\t\treturn [undefined];\n\t\t}\n\t\tif (\"parallel\" in step) {\n\t\t\tif (!Array.isArray(step.parallel)) {\n\t\t\t\tchildTargetIndex++;\n\t\t\t\treturn [undefined];\n\t\t\t}\n\t\t\treturn step.parallel.map((task) => childIntercomTarget(task.agent, childTargetIndex++));\n\t\t}\n\t\treturn [childIntercomTarget(step.agent, childTargetIndex++)];\n\t}) : undefined;\n\n\tlet spawnResult: { pid?: number; error?: string } = {};\n\ttry {\n\t\tspawnResult = spawnRunner(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tsteps,\n\t\t\t\tresultPath: inheritedNestedRoute ? nestedResultsPath(inheritedNestedRoute.rootRunId, id) : path.join(RESULTS_DIR, `${id}.json`),\n\t\t\t\tcwd: runnerCwd,\n\t\t\t\tplaceholder: \"{previous}\",\n\t\t\t\tmaxOutput,\n\t\t\t\tartifactsDir: artifactConfig.enabled ? artifactsDir : undefined,\n\t\t\t\tartifactConfig,\n\t\t\t\tshare: shareEnabled,\n\t\t\t\tsessionDir: sessionRoot ? path.join(sessionRoot, `async-${id}`) : undefined,\n\t\t\t\tasyncDir,\n\t\t\t\tsessionId: ctx.currentSessionId,\n\t\t\t\tpiPackageRoot,\n\t\t\t\tpiArgv1: process.argv[1],\n\t\t\t\tworktreeSetupHook,\n\t\t\t\tworktreeSetupHookTimeoutMs,\n\t\t\t\tworktreeBaseDir,\n\t\t\t\tcontrolConfig,\n\t\t\t\tturnBudget: params.turnBudget,\n\t\t\t\ttoolBudget: params.toolBudget,\n\t\t\t\tcontrolIntercomTarget,\n\t\t\t\tchildIntercomTargets,\n\t\t\t\tresultMode,\n\t\t\t\tdynamicFanoutMaxItems: params.dynamicFanoutMaxItems,\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tdeadlineAt,\n\t\t\t\tglobalConcurrencyLimit: params.globalConcurrencyLimit,\n\t\t\t\tworkflowGraph,\n\t\t\t\tnestedRoute: nestedRoute ?? inheritedNestedRoute,\n\t\t\t\tnestedSelf: inheritedNestedRoute && nestedAddress ? {\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t} : undefined,\n\t\t\t},\n\t\t\tid,\n\t\t\trunnerCwd,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn formatAsyncStartError(resultMode, `Failed to start async ${resultMode} '${id}': ${message}`);\n\t}\n\n\tif (spawnResult.error) {\n\t\treturn formatAsyncStartError(resultMode, `Failed to start async ${resultMode} '${id}': ${spawnResult.error}`);\n\t}\n\n\tif (spawnResult.pid) {\n\t\tconst eventFirstStep = eventChain[0];\n\t\tconst firstAgents = isParallelStep(eventFirstStep)\n\t\t\t? eventFirstStep.parallel.map((t) => t.agent)\n\t\t\t: isDynamicParallelStep(eventFirstStep)\n\t\t\t\t? [eventFirstStep.parallel.agent]\n\t\t\t: [(eventFirstStep as SequentialStep).agent];\n\t\tconst firstTask = isParallelStep(eventFirstStep)\n\t\t\t? eventFirstStep.parallel[0]?.task\n\t\t\t: isDynamicParallelStep(eventFirstStep)\n\t\t\t\t? eventFirstStep.parallel.task\n\t\t\t\t: (eventFirstStep as SequentialStep).task;\n\t\tconst workflowGoal = params.goal ?? (params.task?.trim() || firstTask);\n\t\tconst parallelGroups: Array<{ start: number; count: number; stepIndex: number }> = [];\n\t\tconst flatAgents: string[] = [];\n\t\tlet flatStepStart = 0;\n\t\tfor (let stepIndex = 0; stepIndex < eventChain.length; stepIndex++) {\n\t\t\tconst step = eventChain[stepIndex]!;\n\t\t\tif (isParallelStep(step)) {\n\t\t\t\tparallelGroups.push({ start: flatStepStart, count: step.parallel.length, stepIndex });\n\t\t\t\tflatAgents.push(...step.parallel.map((task) => task.agent));\n\t\t\t\tflatStepStart += step.parallel.length;\n\t\t\t} else if (isDynamicParallelStep(step)) {\n\t\t\t\tparallelGroups.push({ start: flatStepStart, count: 1, stepIndex });\n\t\t\t\tflatAgents.push(step.parallel.agent);\n\t\t\t\tflatStepStart++;\n\t\t\t} else {\n\t\t\t\tflatAgents.push((step as SequentialStep).agent);\n\t\t\t\tflatStepStart++;\n\t\t\t}\n\t\t}\n\t\tif (inheritedNestedRoute && nestedAddress) {\n\t\t\tconst now = Date.now();\n\t\t\ttry {\n\t\t\t\twriteNestedEvent(inheritedNestedRoute, {\n\t\t\t\t\ttype: \"subagent.nested.started\",\n\t\t\t\t\tts: now,\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tchild: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t\t\tasyncDir,\n\t\t\t\t\t\tpid: spawnResult.pid,\n\t\t\t\t\t\townerIntercomTarget: process.env.PI_SUBAGENT_INTERCOM_SESSION_NAME,\n\t\t\t\t\t\tleafIntercomTarget: childIntercomTargets?.[0],\n\t\t\t\t\t\tintercomTarget: childIntercomTargets?.[0],\n\t\t\t\t\t\townerState: \"live\",\n\t\t\t\t\t\tmode: resultMode,\n\t\t\t\t\t\tstate: \"running\",\n\t\t\t\t\t\tagent: firstAgents[0],\n\t\t\t\t\t\tagents: flatAgents,\n\t\t\t\t\t\tchainStepCount: eventChain.length,\n\t\t\t\t\t\tparallelGroups,\n\t\t\t\t\t\t...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}),\n\t\t\t\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\t\t\t\tstartedAt: now,\n\t\t\t\t\t\tlastUpdate: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to emit nested async start event:\", error);\n\t\t\t}\n\t\t}\n\t\tctx.pi.events.emit(SUBAGENT_ASYNC_STARTED_EVENT, {\n\t\t\tlifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\t\t\tid,\n\t\t\tpid: spawnResult.pid,\n\t\t\tsessionId: ctx.currentSessionId,\n\t\t\tmode: resultMode,\n\t\t\tagent: firstAgents[0],\n\t\t\tagents: flatAgents,\n\t\t\ttask: firstTask?.slice(0, 50),\n\t\t\tgoal: workflowGoal?.slice(0, 120),\n\t\t\tchain: eventChain.map((s) =>\n\t\t\t\tisParallelStep(s) ? `[${s.parallel.map((t) => t.agent).join(\"+\")}]` : isDynamicParallelStep(s) ? `expand:${s.parallel.agent}` : (s as SequentialStep).agent,\n\t\t\t),\n\t\t\tchainStepCount: eventChain.length,\n\t\t\tparallelGroups,\n\t\t\tworkflowGraph,\n\t\t\tcwd: runnerCwd,\n\t\t\tasyncDir,\n\t\t\t...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}),\n\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\tnestedRoute,\n\t\t});\n\t}\n\n\tconst chainDesc = chain\n\t\t.map((s) =>\n\t\t\tisParallelStep(s) ? `[${s.parallel.map((t) => t.agent).join(\"+\")}]` : isDynamicParallelStep(s) ? `expand:${s.parallel.agent}` : (s as SequentialStep).agent,\n\t\t)\n\t\t.join(\" -> \");\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: formatAsyncStartedMessage(`Async ${resultMode}: ${chainDesc} [${id}]`) }],\n\t\tdetails: { mode: resultMode, runId: id, results: [], asyncId: id, asyncDir, workflowGraph, ...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}), ...(params.turnBudget ? { turnBudget: params.turnBudget } : {}), ...(params.toolBudget ? { toolBudget: params.toolBudget } : {}) },\n\t};\n}\n\n/**\n * Execute a single agent asynchronously\n */\nexport function executeAsyncSingle(\n\tid: string,\n\tparams: AsyncSingleParams,\n): AsyncExecutionResult {\n\tconst {\n\t\tagent,\n\t\tagentConfig,\n\t\tctx,\n\t\tcwd,\n\t\tmaxOutput,\n\t\tartifactsDir,\n\t\tartifactConfig,\n\t\tshareEnabled,\n\t\tsessionRoot,\n\t\tsessionFile,\n\t\tmaxSubagentDepth,\n\t\tworktreeSetupHook,\n\t\tworktreeSetupHookTimeoutMs,\n\t\tworktreeBaseDir,\n\t\tcontrolConfig,\n\t\tcontrolIntercomTarget,\n\t\tchildIntercomTarget,\n\t\tnestedRoute,\n\t} = params;\n\tconst task = params.task ?? \"\";\n\tconst runnerCwd = resolveChildCwd(ctx.cwd, cwd);\n\tconst skillNames = params.skills ?? agentConfig.skills ?? [];\n\tconst availableModels = params.availableModels;\n\tconst { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(\n\t\tskillNames,\n\t\trunnerCwd,\n\t\tctx.cwd,\n\t\tagentConfig.skillPath,\n\t\tagentConfig.filePath ? path.dirname(agentConfig.filePath) : runnerCwd,\n\t);\n\tif (missingSkills.includes(\"pi-subagents\")) return formatAsyncStartError(\"single\", UNAVAILABLE_SUBAGENT_SKILL_ERROR);\n\tlet systemPrompt = agentConfig.systemPrompt?.trim() ?? \"\";\n\tif (resolvedSkills.length > 0) {\n\t\tconst injection = buildSkillInjection(resolvedSkills);\n\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${injection}` : injection;\n\t}\n\tconst memoryInjection = buildAgentMemoryInjection(agentConfig, runnerCwd);\n\tif (memoryInjection) {\n\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memoryInjection}` : memoryInjection;\n\t}\n\n\tconst inheritedNestedRoute = resolveInheritedNestedRouteFromEnv();\n\tconst nestedAddress = inheritedNestedRoute ? resolveNestedParentAddressFromEnv() : undefined;\n\tconst asyncDir = inheritedNestedRoute\n\t\t? path.join(TEMP_ROOT_DIR, \"nested-subagent-runs\", inheritedNestedRoute.rootRunId, id)\n\t\t: path.join(ASYNC_DIR, id);\n\ttry {\n\t\tfs.mkdirSync(asyncDir, { recursive: true });\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Failed to create async run directory '${asyncDir}': ${message}` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\" as const, results: [] },\n\t\t};\n\t}\n\n\tconst effectiveOutput = normalizeSingleOutputOverride(params.output, agentConfig.output);\n\tconst outputPath = resolveSingleOutputPath(effectiveOutput, ctx.cwd, runnerCwd, params.outputBaseDir ?? (artifactsDir ? path.join(artifactsDir, \"outputs\", id) : undefined));\n\tsystemPrompt = injectOutputPathSystemPrompt(systemPrompt, outputPath, agentConfig);\n\tconst outputMode = params.outputMode ?? \"inline\";\n\tconst validationError = validateFileOnlyOutputMode(outputMode, outputPath, `Async single run (${agent})`);\n\tif (validationError) return formatAsyncStartError(\"single\", validationError);\n\tconst taskWithOutputInstruction = injectSingleOutputInstruction(task, outputPath, agentConfig);\n\tconst primaryModel = resolveSubagentModelOverride(\n\t\tparams.modelOverride ?? agentConfig.model,\n\t\tctx.currentModel,\n\t\tavailableModels,\n\t\tctx.currentModelProvider,\n\t);\n\tconst effectiveThinking = params.thinkingOverride ?? agentConfig.thinking;\n\tconst model = applyThinkingSuffix(primaryModel, effectiveThinking, params.thinkingOverride !== undefined);\n\tconst toolBudgetInput = params.toolBudget ?? agentConfig.toolBudget ?? params.configToolBudget;\n\tconst resolvedToolBudget = validateToolBudgetConfig(toolBudgetInput, params.toolBudget ? \"toolBudget\" : agentConfig.toolBudget ? \"agent.toolBudget\" : \"config.toolBudget\");\n\tif (resolvedToolBudget.error) return formatAsyncStartError(\"single\", resolvedToolBudget.error);\n\tconst deadlineAt = params.absoluteDeadlineAt ?? (params.timeoutMs !== undefined ? Date.now() + params.timeoutMs : undefined);\n\tconst timeoutMs = params.absoluteDeadlineAt !== undefined && deadlineAt !== undefined\n\t\t? deadlineAt - Date.now()\n\t\t: params.timeoutMs;\n\tif (timeoutMs !== undefined && timeoutMs <= 0) return formatAsyncStartError(\"single\", \"The source run's absolute deadline expired before recovery could launch.\");\n\tconst initialTurnBudget = params.turnBudget ? initialTurnBudgetState(params.turnBudget) : undefined;\n\tconst resolvedSessionDir = params.sessionDir ?? (sessionRoot ? path.join(sessionRoot, `async-${id}`) : undefined);\n\tconst resolvedAcceptance = resolveEffectiveAcceptance({\n\t\texplicit: params.acceptance,\n\t\tagentName: agent,\n\t\tacceptanceRole: agentConfig.acceptanceRole,\n\t\ttask,\n\t\tmode: \"single\",\n\t\tasync: true,\n\t});\n\tconst recoveryDescriptor: SteeringRecoveryDescriptor = {\n\t\tversion: 1,\n\t\tsourceRunId: id,\n\t\tagent,\n\t\t...(sessionFile ? { sessionFile } : {}),\n\t\tcwd: runnerCwd,\n\t\t...(model ? { model } : {}),\n\t\t...(agentConfig.fallbackModels ? { fallbackModels: [...agentConfig.fallbackModels] } : {}),\n\t\t...(effectiveThinking ? { thinking: resolveEffectiveThinking(model, effectiveThinking) } : {}),\n\t\t...(agentConfig.tools ? { tools: [...agentConfig.tools] } : {}),\n\t\t...(agentConfig.extensions ? { extensions: [...agentConfig.extensions] } : {}),\n\t\t...(agentConfig.subagentOnlyExtensions ? { subagentOnlyExtensions: [...agentConfig.subagentOnlyExtensions] } : {}),\n\t\t...(agentConfig.mcpDirectTools ? { mcpDirectTools: [...agentConfig.mcpDirectTools] } : {}),\n\t\t...(agentConfig.systemPrompt ? { systemPrompt: agentConfig.systemPrompt } : {}),\n\t\tsystemPromptMode: agentConfig.systemPromptMode,\n\t\tinheritProjectContext: agentConfig.inheritProjectContext,\n\t\tinheritSkills: agentConfig.inheritSkills,\n\t\t...(resolvedSkills.length ? { skills: resolvedSkills.map((skill) => skill.name) } : {}),\n\t\t...(agentConfig.skillPath ? { skillPath: [...agentConfig.skillPath] } : {}),\n\t\t...(agentConfig.filePath ? { agentFilePath: agentConfig.filePath } : {}),\n\t\t...(agentConfig.completionGuard !== undefined ? { completionGuard: agentConfig.completionGuard } : {}),\n\t\t...(agentConfig.memory ? { memory: { ...agentConfig.memory } } : {}),\n\t\t...(outputPath ? { outputPath } : {}),\n\t\toutputMode,\n\t\t...(resolvedAcceptance ? { acceptance: resolvedAcceptance } : {}),\n\t\t...(controlConfig ? { controlConfig } : {}),\n\t\t...(deadlineAt !== undefined ? { absoluteDeadlineAt: deadlineAt } : {}),\n\t\t...(params.turnBudget ? { initialTurnBudget: params.turnBudget } : {}),\n\t\t...(resolvedToolBudget.budget ? { initialToolBudget: resolvedToolBudget.budget } : {}),\n\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, agentConfig.maxSubagentDepth),\n\t\t...(maxOutput ? { maxOutput } : {}),\n\t\tshare: shareEnabled,\n\t\t...(resolvedSessionDir ? { sessionDir: resolvedSessionDir } : {}),\n\t\t...(artifactsDir ? { artifactsDir } : {}),\n\t\tartifactConfig,\n\t};\n\ttry {\n\t\twritePrivateAtomicJson(path.join(asyncDir, \"recovery-descriptor.json\"), recoveryDescriptor);\n\t} catch (error) {\n\t\treturn formatAsyncStartError(\"single\", `Failed to persist async recovery descriptor for '${id}': ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\tlet spawnResult: { pid?: number; error?: string } = {};\n\ttry {\n\t\tspawnResult = spawnRunner(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tsteps: [\n\t\t\t\t\t{\n\t\t\t\t\t\tparentSessionId: ctx.parentSessionId ?? ctx.currentSessionId,\n\t\t\t\t\t\tagent,\n\t\t\t\t\t\ttask: taskWithOutputInstruction,\n\t\t\t\t\t\tcwd: runnerCwd,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tthinking: resolveEffectiveThinking(model, effectiveThinking),\n\t\t\t\t\t\tmodelCandidates: buildModelCandidates(primaryModel, agentConfig.fallbackModels, availableModels, ctx.currentModelProvider, { scope: ctx.modelScope }).map((candidate) =>\n\t\t\t\t\t\t\tapplyThinkingSuffix(candidate, effectiveThinking, params.thinkingOverride !== undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttools: agentConfig.tools,\n\t\t\t\t\t\textensions: agentConfig.extensions,\n\t\t\t\t\t\tsubagentOnlyExtensions: agentConfig.subagentOnlyExtensions,\n\t\t\t\t\t\tmcpDirectTools: agentConfig.mcpDirectTools,\n\t\t\t\t\t\tcompletionGuard: agentConfig.completionGuard,\n\t\t\t\t\t\tsystemPrompt,\n\t\t\t\t\t\tsystemPromptMode: agentConfig.systemPromptMode,\n\t\t\t\t\t\tinheritProjectContext: agentConfig.inheritProjectContext,\n\t\t\t\t\t\tinheritSkills: agentConfig.inheritSkills,\n\t\t\t\t\t\tskills: resolvedSkills.map((r) => r.name),\n\t\t\t\t\t\toutputPath,\n\t\t\t\t\t\toutputMode,\n\t\t\t\t\t\tsessionFile,\n\t\t\t\t\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, agentConfig.maxSubagentDepth),\n\t\t\t\t\t\twaitToolEnabled: params.waitToolEnabled,\n\t\t\t\t\t\teffectiveAcceptance: resolvedAcceptance,\n\t\t\t\t\t\t...(resolvedToolBudget.budget ? { toolBudget: resolvedToolBudget.budget } : {}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tresultPath: inheritedNestedRoute ? nestedResultsPath(inheritedNestedRoute.rootRunId, id) : path.join(RESULTS_DIR, `${id}.json`),\n\t\t\t\tcwd: runnerCwd,\n\t\t\t\tplaceholder: \"{previous}\",\n\t\t\t\tmaxOutput,\n\t\t\t\tartifactsDir: artifactConfig.enabled ? artifactsDir : undefined,\n\t\t\t\tartifactConfig,\n\t\t\t\tshare: shareEnabled,\n\t\t\t\tsessionDir: resolvedSessionDir,\n\t\t\t\tasyncDir,\n\t\t\t\tsessionId: ctx.currentSessionId,\n\t\t\t\tpiPackageRoot,\n\t\t\t\tpiArgv1: process.argv[1],\n\t\t\t\tworktreeSetupHook,\n\t\t\t\tworktreeSetupHookTimeoutMs,\n\t\t\t\tworktreeBaseDir,\n\t\t\t\tcontrolConfig,\n\t\t\t\ttimeoutMs,\n\t\t\t\tdeadlineAt,\n\t\t\t\tturnBudget: params.turnBudget,\n\t\t\t\ttoolBudget: params.toolBudget,\n\t\t\t\tcontrolIntercomTarget,\n\t\t\t\tchildIntercomTargets: childIntercomTarget ? [childIntercomTarget(agent, 0)] : undefined,\n\t\t\t\tresultMode: \"single\",\n\t\t\t\t...(params.revivalLease ? { revivalLease: params.revivalLease } : {}),\n\t\t\t\tnestedRoute: nestedRoute ?? inheritedNestedRoute,\n\t\t\t\tnestedSelf: inheritedNestedRoute && nestedAddress ? {\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t} : undefined,\n\t\t\t},\n\t\t\tid,\n\t\t\trunnerCwd,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn formatAsyncStartError(\"single\", `Failed to start async run '${id}': ${message}`);\n\t}\n\n\tif (spawnResult.error) {\n\t\treturn formatAsyncStartError(\"single\", `Failed to start async run '${id}': ${spawnResult.error}`);\n\t}\n\n\tif (spawnResult.pid) {\n\t\tif (inheritedNestedRoute && nestedAddress) {\n\t\t\tconst now = Date.now();\n\t\t\ttry {\n\t\t\t\twriteNestedEvent(inheritedNestedRoute, {\n\t\t\t\t\ttype: \"subagent.nested.started\",\n\t\t\t\t\tts: now,\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tchild: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t\t\tasyncDir,\n\t\t\t\t\t\tpid: spawnResult.pid,\n\t\t\t\t\t\townerIntercomTarget: process.env.PI_SUBAGENT_INTERCOM_SESSION_NAME,\n\t\t\t\t\t\tleafIntercomTarget: childIntercomTarget?.(agent, 0),\n\t\t\t\t\t\tintercomTarget: childIntercomTarget?.(agent, 0),\n\t\t\t\t\t\townerState: \"live\",\n\t\t\t\t\t\tmode: \"single\",\n\t\t\t\t\t\tstate: \"running\",\n\t\t\t\t\t\tagent,\n\t\t\t\t\t\tagents: [agent],\n\t\t\t\t\t\tchainStepCount: 1,\n\t\t\t\t\t\t...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}),\n\t\t\t\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\t\t\t\tstartedAt: now,\n\t\t\t\t\t\tlastUpdate: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to emit nested async start event:\", error);\n\t\t\t}\n\t\t}\n\t\tctx.pi.events.emit(SUBAGENT_ASYNC_STARTED_EVENT, {\n\t\t\tlifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\t\t\tid,\n\t\t\tpid: spawnResult.pid,\n\t\t\tsessionId: ctx.currentSessionId,\n\t\t\tmode: \"single\",\n\t\t\tagent,\n\t\t\ttask: task?.slice(0, 50),\n\t\t\tgoal: (params.goal ?? task).slice(0, 120),\n\t\t\tcwd: runnerCwd,\n\t\t\tasyncDir,\n\t\t\t...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}),\n\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\tnestedRoute,\n\t\t});\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: formatAsyncStartedMessage(`Async: ${agent} [${id}]`) }],\n\t\tdetails: { mode: \"single\", runId: id, results: [], asyncId: id, asyncDir, ...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}), ...(params.turnBudget ? { turnBudget: params.turnBudget } : {}), ...(params.toolBudget ? { toolBudget: params.toolBudget } : {}) },\n\t};\n}\n"]}
1
+ {"version":3,"file":"async-execution.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/async-execution.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Async execution logic for subagent tool\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport type { AgentConfig } from \"../../agents/agents.ts\";\nimport { writePrivateAtomicJson } from \"../../shared/atomic-json.ts\";\nimport { applyThinkingSuffix } from \"../shared/pi-args.ts\";\nimport { injectOutputPathSystemPrompt, injectSingleOutputInstruction, normalizeSingleOutputOverride, resolveSingleOutputPath, validateFileOnlyOutputMode } from \"../shared/single-output.ts\";\nimport { buildChainInstructions, isDynamicParallelStep, isParallelStep, resolveStepBehavior, suppressProgressForReadOnlyTask, writeInitialProgressFile, type ChainStep, type ResolvedStepBehavior, type SequentialStep, type StepOverrides } from \"../../shared/settings.ts\";\nimport type { RunnerStep } from \"../shared/parallel-utils.ts\";\nimport { resolvePiPackageRoot } from \"../shared/pi-spawn.ts\";\nimport { buildSkillInjection, normalizeSkillInput, resolveSkillsWithFallback } from \"../../agents/skills.ts\";\nimport { buildAgentMemoryInjection } from \"../../agents/agent-memory.ts\";\nimport { PI_CODING_AGENT_PACKAGE_ROOT_ENV, resolveChildCwd } from \"../../shared/utils.ts\";\nimport { buildModelCandidates, resolveEffectiveSubagentModel, resolveModelCandidate, resolveSubagentModelOverride, type AvailableModelInfo, type ParentModel } from \"../shared/model-fallback.ts\";\nimport type { ModelScopeConfig } from \"../shared/model-scope.ts\";\nimport { resolveEffectiveThinking } from \"../../shared/model-info.ts\";\nimport { resolveExpectedWorktreeAgentCwd } from \"../shared/worktree.ts\";\nimport { buildWorkflowGraphSnapshot } from \"../shared/workflow-graph.ts\";\nimport { ChainOutputValidationError, validateChainOutputBindings } from \"../shared/chain-outputs.ts\";\nimport { createStructuredOutputRuntime } from \"../shared/structured-output.ts\";\nimport { resolveEffectiveAcceptance } from \"../shared/acceptance.ts\";\nimport {\n\ttype AcceptanceInput,\n\ttype ArtifactConfig,\n\ttype Details,\n\ttype MaxOutputConfig,\n\ttype NestedRouteInfo,\n\ttype ResolvedControlConfig,\n\ttype ResolvedTurnBudget,\n\ttype ResolvedToolBudget,\n\ttype SubagentRunMode,\n\ttype SteeringRecoveryDescriptor,\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\tSUBAGENT_ASYNC_STARTED_EVENT,\n\tSUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\tTEMP_ROOT_DIR,\n\tgetAsyncConfigPath,\n\tresolveChildMaxSubagentDepth,\n} from \"../../shared/types.ts\";\nimport { nestedResultsPath, resolveInheritedNestedRouteFromEnv, resolveNestedParentAddressFromEnv, writeNestedEvent } from \"../shared/nested-events.ts\";\nimport { initialTurnBudgetState } from \"../shared/turn-budget.ts\";\nimport { validateToolBudgetConfig } from \"../shared/tool-budget.ts\";\nimport type { ImportedAsyncRoot } from \"./chain-root-attachment.ts\";\nimport type { SessionLeaseRequest } from \"../shared/session-lease.ts\";\n\nconst require = createRequire(import.meta.url);\nconst piPackageRoot = resolvePiPackageRoot();\n\nfunction resolveJitiCliFromPackageJson(packageJsonPath: string): string | undefined {\n\tif (!fs.existsSync(packageJsonPath)) return undefined;\n\tconst packageRoot = path.dirname(packageJsonPath);\n\tconst pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as {\n\t\tbin?: string | Record<string, string>;\n\t};\n\tconst binField = pkg.bin;\n\tconst binPath = typeof binField === \"string\"\n\t\t? binField\n\t\t: binField?.jiti ?? Object.values(binField ?? {})[0];\n\tconst candidates = [binPath, \"lib/jiti-cli.mjs\"].filter((candidate): candidate is string => Boolean(candidate));\n\tfor (const candidate of candidates) {\n\t\tconst cliPath = path.resolve(packageRoot, candidate);\n\t\tif (fs.existsSync(cliPath)) return cliPath;\n\t}\n\treturn undefined;\n}\n\nfunction resolveJitiCliPath(): string | undefined {\n\tconst candidates: Array<() => string | undefined> = [\n\t\t() => require.resolve(\"jiti/package.json\"),\n\t\t() => piPackageRoot\n\t\t\t? createRequire(path.join(piPackageRoot, \"package.json\")).resolve(\"jiti/package.json\")\n\t\t\t: undefined,\n\t\t() => {\n\t\t\tif (!process.argv[1]) return undefined;\n\t\t\tconst piEntry = fs.realpathSync(process.argv[1]);\n\t\t\treturn createRequire(piEntry).resolve(\"jiti/package.json\");\n\t\t},\n\t\t() => piPackageRoot ? path.join(piPackageRoot, \"node_modules\", \"jiti\", \"package.json\") : undefined,\n\t];\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst packageJsonPath = candidate();\n\t\t\tif (!packageJsonPath) continue;\n\t\t\tconst cliPath = resolveJitiCliFromPackageJson(packageJsonPath);\n\t\t\tif (cliPath) return cliPath;\n\t\t} catch {\n\t\t\t// Candidate not available in this install, continue probing.\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst jitiCliPath = resolveJitiCliPath();\n\ninterface AsyncExecutionContext {\n\tpi: ExtensionAPI;\n\tcwd: string;\n\tcurrentSessionId: string;\n\t/** Parent session id used by permission-system ask forwarding. */\n\tparentSessionId?: string;\n\tcurrentModelProvider?: string;\n\tcurrentModel?: ParentModel;\n\t/** Optional model-scope enforcement resolved from subagent settings. */\n\tmodelScope?: ModelScopeConfig;\n}\n\ninterface AsyncChainParams {\n\tchain: ChainStep[];\n\ttask?: string;\n\t/** Raw caller-facing goal used only by the started event. */\n\tgoal?: string;\n\tattachRoot?: ImportedAsyncRoot & { agent: string; outputName?: string; label?: string };\n\tresultMode?: Exclude<SubagentRunMode, \"single\">;\n\tagents: AgentConfig[];\n\tctx: AsyncExecutionContext;\n\tavailableModels?: AvailableModelInfo[];\n\tcwd?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig: ArtifactConfig;\n\tshareEnabled: boolean;\n\tsessionRoot?: string;\n\tchainSkills?: string[];\n\tsessionFilesByFlatIndex?: (string | undefined)[];\n\tthinkingOverridesByFlatIndex?: (AgentConfig[\"thinking\"] | undefined)[];\n\tprogressDir?: string;\n\tdynamicFanoutMaxItems?: number;\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tcontrolConfig?: ResolvedControlConfig;\n\tcontrolIntercomTarget?: string;\n\tchildIntercomTarget?: (agent: string, index: number) => string | undefined;\n\tnestedRoute?: NestedRouteInfo;\n\tacceptance?: AcceptanceInput;\n\ttimeoutMs?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n\t/** Global cap on simultaneously-running subagent tasks within the async run. */\n\tglobalConcurrencyLimit?: number;\n}\n\ninterface AsyncSingleParams {\n\tagent: string;\n\ttask?: string;\n\t/** Raw caller-facing goal used only by the started event. */\n\tgoal?: string;\n\tagentConfig: AgentConfig;\n\tctx: AsyncExecutionContext;\n\tcwd?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig: ArtifactConfig;\n\tshareEnabled: boolean;\n\tsessionRoot?: string;\n\tsessionDir?: string;\n\tsessionFile?: string;\n\trevivalLease?: SessionLeaseRequest;\n\tskills?: string[];\n\toutput?: string | boolean;\n\toutputMode?: \"inline\" | \"file-only\";\n\toutputBaseDir?: string;\n\tmodelOverride?: string;\n\tthinkingOverride?: AgentConfig[\"thinking\"];\n\tavailableModels?: AvailableModelInfo[];\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tcontrolConfig?: ResolvedControlConfig;\n\tcontrolIntercomTarget?: string;\n\tchildIntercomTarget?: (agent: string, index: number) => string | undefined;\n\tnestedRoute?: NestedRouteInfo;\n\tacceptance?: AcceptanceInput;\n\ttimeoutMs?: number;\n\tabsoluteDeadlineAt?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n}\n\ninterface AsyncExecutionResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tdetails: Details;\n\tisError?: boolean;\n}\n\nexport interface AsyncRunnerStepBuildParams {\n\tchain: ChainStep[];\n\ttask?: string;\n\tattachRoot?: ImportedAsyncRoot & { agent: string; outputName?: string; label?: string };\n\tresultMode?: SubagentRunMode;\n\tagents: AgentConfig[];\n\tctx: AsyncExecutionContext;\n\tavailableModels?: AvailableModelInfo[];\n\tcwd?: string;\n\tchainSkills?: string[];\n\tsessionFilesByFlatIndex?: (string | undefined)[];\n\tthinkingOverridesByFlatIndex?: (AgentConfig[\"thinking\"] | undefined)[];\n\tprogressDir?: string;\n\tdynamicFanoutMaxItems?: number;\n\tmaxSubagentDepth: number;\n\twaitToolEnabled?: boolean;\n\tworktreeBaseDir?: string;\n\tasyncDir: string;\n\toutputBaseDir?: string;\n\tvalidateOutputBindings?: boolean;\n\ttoolBudget?: ResolvedToolBudget;\n\tconfigToolBudget?: ResolvedToolBudget;\n}\n\nexport type AsyncRunnerStepBuildResult =\n\t| {\n\t\tsteps: RunnerStep[];\n\t\trunnerCwd: string;\n\t\tworkflowGraph: ReturnType<typeof buildWorkflowGraphSnapshot>;\n\t\teventChain: ChainStep[];\n\t\toriginalTask?: string;\n\t}\n\t| { error: string };\n\nexport function formatAsyncStartedMessage(headline: string): string {\n\treturn [\n\t\theadline,\n\t\t\"\",\n\t\t\"The async run is detached. Do not run sleep timers or polling loops just to wait for it.\",\n\t\t\"If you have independent work, continue that work. When you have nothing left to do until the async result arrives, call subagent_wait() — it blocks until the run finishes and delivers the completion here. Only if you are certain you will get another turn (an interactive session where the user will prompt you again) can you instead stop and let Pi wake you; inside a skill that must run to completion, or in a non-interactive run, there is no next turn, so use subagent_wait().\",\n\t\t\"Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) when you need a one-shot status/result or to inspect a blocked/stale run. To block until completion, prefer subagent_wait(). Do not poll in a loop just to wait.\",\n\t].join(\"\\n\");\n}\n\n/**\n * Check if jiti is available for async execution\n */\nexport function isAsyncAvailable(): boolean {\n\treturn jitiCliPath !== undefined;\n}\n\nfunction isNodeExecutableName(execPath: string): boolean {\n\tconst basename = path.basename(execPath).toLowerCase();\n\treturn basename === \"node\" || basename === \"node.exe\" || basename === \"nodejs\" || basename === \"nodejs.exe\";\n}\n\nfunction canUseCurrentNodeExecutable(execPath: string): boolean {\n\ttry {\n\t\tfs.accessSync(execPath, process.platform === \"win32\" ? fs.constants.F_OK : fs.constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction resolveAsyncRunnerNodeCommand(): string {\n\tif (isNodeExecutableName(process.execPath) && canUseCurrentNodeExecutable(process.execPath)) {\n\t\treturn process.execPath;\n\t}\n\treturn process.platform === \"win32\" ? \"node.exe\" : \"node\";\n}\n\nexport function resolveAsyncRunnerLogPaths(cfg: object): { stdoutPath: string; stderrPath: string } | undefined {\n\tconst asyncDir = typeof (cfg as { asyncDir?: unknown }).asyncDir === \"string\"\n\t\t? (cfg as { asyncDir: string }).asyncDir\n\t\t: undefined;\n\tif (!asyncDir) return undefined;\n\treturn {\n\t\tstdoutPath: path.join(asyncDir, \"runner.stdout.log\"),\n\t\tstderrPath: path.join(asyncDir, \"runner.stderr.log\"),\n\t};\n}\n\nfunction closeFd(fd: number | undefined): void {\n\tif (fd === undefined) return;\n\ttry {\n\t\tfs.closeSync(fd);\n\t} catch {\n\t\t// Best-effort cleanup; child process already owns its duplicated stdio fd.\n\t}\n}\n\n/**\n * Spawn the async runner process\n */\nconst RUNNER_STARTUP_TIMEOUT_MS = 10_000;\nconst RUNNER_STARTUP_WAIT_BUFFER = typeof SharedArrayBuffer !== \"undefined\" ? new SharedArrayBuffer(4) : undefined;\nconst RUNNER_STARTUP_WAIT_VIEW = RUNNER_STARTUP_WAIT_BUFFER ? new Int32Array(RUNNER_STARTUP_WAIT_BUFFER) : undefined;\n\ntype RunnerStartupState = \"ready\" | \"acknowledged\";\n\ntype RunnerStartupWaitResult =\n\t| { ok: true; token: string }\n\t| { ok: false; error: string };\n\nfunction waitForStartupInterval(delayMs = 20): void {\n\tif (RUNNER_STARTUP_WAIT_VIEW) {\n\t\tAtomics.wait(RUNNER_STARTUP_WAIT_VIEW, 0, 0, delayMs);\n\t\treturn;\n\t}\n\tconst waitUntil = Date.now() + delayMs;\n\twhile (Date.now() < waitUntil) {\n\t\t// Startup handshakes are synchronous so resume rejects before reporting a run as started.\n\t}\n}\n\nfunction readRunnerStartup(startupPath: string, expectedState: RunnerStartupState, expectedToken?: string): RunnerStartupWaitResult | undefined {\n\tif (!fs.existsSync(startupPath)) return undefined;\n\ttry {\n\t\tconst payload = JSON.parse(fs.readFileSync(startupPath, \"utf-8\")) as { state?: unknown; token?: unknown; error?: unknown };\n\t\tif (payload.state === \"error\" && typeof payload.error === \"string\") return { ok: false, error: payload.error };\n\t\tif (payload.state !== expectedState) return undefined;\n\t\tif (typeof payload.token !== \"string\" || (expectedToken !== undefined && payload.token !== expectedToken)) {\n\t\t\treturn { ok: false, error: `Async runner wrote an invalid ${expectedState} startup handshake: ${startupPath}` };\n\t\t}\n\t\treturn { ok: true, token: payload.token };\n\t} catch (error) {\n\t\treturn { ok: false, error: `Failed to read async runner startup handshake '${startupPath}': ${error instanceof Error ? error.message : String(error)}` };\n\t}\n}\n\nfunction waitForRunnerStartup(startupPath: string, expectedState: RunnerStartupState, timeoutMs: number, expectedToken?: string): RunnerStartupWaitResult {\n\tconst deadline = Date.now() + timeoutMs;\n\tfor (;;) {\n\t\tconst result = readRunnerStartup(startupPath, expectedState, expectedToken);\n\t\tif (result) return result;\n\t\tif (Date.now() >= deadline) break;\n\t\twaitForStartupInterval(Math.min(20, Math.max(1, deadline - Date.now())));\n\t}\n\tconst finalResult = readRunnerStartup(startupPath, expectedState, expectedToken);\n\tif (finalResult) return finalResult;\n\treturn { ok: false, error: `Timed out after ${timeoutMs}ms waiting for the async runner startup state '${expectedState}'.` };\n}\n\nfunction writeRunnerStartupControl(filePath: string, payload: { action: \"ack\" | \"proceed\"; token: string }): void {\n\tconst tempPath = `${filePath}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`;\n\ttry {\n\t\tfs.writeFileSync(tempPath, JSON.stringify(payload), { encoding: \"utf-8\", mode: 0o600 });\n\t\tfs.renameSync(tempPath, filePath);\n\t} catch (error) {\n\t\ttry {\n\t\t\tfs.rmSync(tempPath, { force: true });\n\t\t} catch {\n\t\t\t// Preserve the startup-control write error.\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction runnerIsAlive(pid: number): boolean {\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"EPERM\";\n\t}\n}\n\nfunction terminateRunnerBeforeProceed(pid: number): void {\n\tfor (const signal of [\"SIGTERM\", \"SIGKILL\"] as const) {\n\t\tif (!runnerIsAlive(pid)) return;\n\t\ttry {\n\t\t\tprocess.kill(pid, signal);\n\t\t} catch {\n\t\t\tif (!runnerIsAlive(pid)) return;\n\t\t}\n\t\tconst deadline = Date.now() + 1000;\n\t\twhile (runnerIsAlive(pid) && Date.now() < deadline) waitForStartupInterval();\n\t}\n}\n\nfunction spawnRunner(cfg: object, suffix: string, cwd: string): { pid?: number; error?: string } {\n\tif (!jitiCliPath) {\n\t\treturn { error: \"upstream jiti for TypeScript execution could not be found; ensure package dependencies are installed\" };\n\t}\n\n\ttry {\n\t\tconst cwdStats = fs.statSync(cwd);\n\t\tif (!cwdStats.isDirectory()) {\n\t\t\treturn { error: `cwd is not a directory: ${cwd}` };\n\t\t}\n\t} catch {\n\t\treturn { error: `cwd does not exist: ${cwd}` };\n\t}\n\n\tfs.mkdirSync(TEMP_ROOT_DIR, { recursive: true });\n\tconst cfgPath = getAsyncConfigPath(suffix);\n\tfs.writeFileSync(cfgPath, JSON.stringify(cfg));\n\t// lunr: bake-in ships compiled .js only; use the .ts when present (upstream dev), else the .js sibling.\n\tconst runnerTsPath = path.join(path.dirname(fileURLToPath(import.meta.url)), \"subagent-runner.ts\");\n\tconst runner = fs.existsSync(runnerTsPath) ? runnerTsPath : runnerTsPath.replace(/\\.ts$/, \".js\");\n\tconst nodeCommand = resolveAsyncRunnerNodeCommand();\n\tconst startupPath = typeof (cfg as { revivalLease?: unknown; asyncDir?: unknown }).revivalLease === \"object\"\n\t\t&& typeof (cfg as { asyncDir?: unknown }).asyncDir === \"string\"\n\t\t? path.join((cfg as { asyncDir: string }).asyncDir, \"runner-startup.json\")\n\t\t: undefined;\n\tconst startupAckPath = startupPath ? path.join(path.dirname(startupPath), \"runner-startup-ack.json\") : undefined;\n\tconst startupProceedPath = startupPath ? path.join(path.dirname(startupPath), \"runner-startup-proceed.json\") : undefined;\n\tif (startupPath) fs.rmSync(startupPath, { force: true });\n\tif (startupAckPath) fs.rmSync(startupAckPath, { force: true });\n\tif (startupProceedPath) fs.rmSync(startupProceedPath, { force: true });\n\n\tconst logPaths = resolveAsyncRunnerLogPaths(cfg);\n\tlet stdoutFd: number | undefined;\n\tlet stderrFd: number | undefined;\n\ttry {\n\t\tif (logPaths) {\n\t\t\tfs.mkdirSync(path.dirname(logPaths.stdoutPath), { recursive: true });\n\t\t\tstdoutFd = fs.openSync(logPaths.stdoutPath, \"a\");\n\t\t\tstderrFd = fs.openSync(logPaths.stderrPath, \"a\");\n\t\t}\n\t\tconst proc = spawn(nodeCommand, [jitiCliPath, runner, cfgPath], {\n\t\t\tcwd,\n\t\t\tdetached: true,\n\t\t\tstdio: [\"ignore\", stdoutFd ?? \"ignore\", stderrFd ?? \"ignore\"],\n\t\t\twindowsHide: true,\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\t...(piPackageRoot ? { [PI_CODING_AGENT_PACKAGE_ROOT_ENV]: piPackageRoot } : {}),\n\t\t\t},\n\t\t});\n\t\tcloseFd(stdoutFd);\n\t\tcloseFd(stderrFd);\n\t\tproc.on(\"error\", (error) => {\n\t\t\tconsole.error(`[pi-subagents] async spawn failed: ${error.message}`);\n\t\t});\n\t\tif (typeof proc.pid !== \"number\") {\n\t\t\treturn { error: `async runner did not produce a pid for cwd: ${cwd}` };\n\t\t}\n\t\tproc.unref();\n\t\tif (startupPath && startupAckPath && startupProceedPath) {\n\t\t\tconst ready = waitForRunnerStartup(startupPath, \"ready\", RUNNER_STARTUP_TIMEOUT_MS);\n\t\t\tif (!ready.ok) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: ready.error };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\twriteRunnerStartupControl(startupAckPath, { action: \"ack\", token: ready.token });\n\t\t\t} catch (error) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: `Failed to acknowledge async runner startup: ${error instanceof Error ? error.message : String(error)}` };\n\t\t\t}\n\t\t\tconst acknowledged = waitForRunnerStartup(startupPath, \"acknowledged\", RUNNER_STARTUP_TIMEOUT_MS, ready.token);\n\t\t\tif (!acknowledged.ok) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: acknowledged.error };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\twriteRunnerStartupControl(startupProceedPath, { action: \"proceed\", token: ready.token });\n\t\t\t} catch (error) {\n\t\t\t\tterminateRunnerBeforeProceed(proc.pid);\n\t\t\t\treturn { error: `Failed to authorize async runner startup: ${error instanceof Error ? error.message : String(error)}` };\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tfs.rmSync(startupPath, { force: true });\n\t\t\t} catch {\n\t\t\t\t// Proceed is the commit point; handshake cleanup cannot turn a running revival into a start error.\n\t\t\t}\n\t\t}\n\t\treturn { pid: proc.pid };\n\t} catch (error) {\n\t\tcloseFd(stdoutFd);\n\t\tcloseFd(stderrFd);\n\t\treturn { error: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\nfunction formatAsyncStartError(mode: SubagentRunMode, message: string): AsyncExecutionResult {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tisError: true,\n\t\tdetails: { mode, results: [] },\n\t};\n}\n\nconst UNAVAILABLE_SUBAGENT_SKILL_ERROR = \"Skills not found: pi-subagents\";\n\nclass UnavailableSubagentSkillError extends Error {}\nclass AsyncStartValidationError extends Error {}\n\nexport function buildAsyncRunnerSteps(id: string, params: AsyncRunnerStepBuildParams): AsyncRunnerStepBuildResult {\n\tconst {\n\t\tchain,\n\t\tagents,\n\t\tctx,\n\t\tcwd,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tmaxSubagentDepth,\n\t\tworktreeBaseDir,\n\t\tasyncDir,\n\t} = params;\n\tconst outputBaseDir = params.outputBaseDir;\n\tconst resultMode = params.resultMode ?? \"chain\";\n\tconst chainSkills = params.chainSkills ?? [];\n\tconst availableModels = params.availableModels;\n\tconst runnerCwd = resolveChildCwd(ctx.cwd, cwd);\n\tconst progressDir = params.progressDir ?? runnerCwd;\n\tconst graphChain: ChainStep[] = params.attachRoot\n\t\t? [{\n\t\t\t\tagent: params.attachRoot.agent,\n\t\t\t\ttask: `Attach async root ${params.attachRoot.runId}`,\n\t\t\t\tlabel: params.attachRoot.label ?? `Attached root ${params.attachRoot.runId}`,\n\t\t\t\t...(params.attachRoot.outputName ? { as: params.attachRoot.outputName } : {}),\n\t\t\t}, ...chain]\n\t\t: chain;\n\tconst firstStep = chain[0];\n\tconst originalTask = params.task ?? (firstStep\n\t\t? (isParallelStep(firstStep)\n\t\t\t? firstStep.parallel[0]?.task\n\t\t\t: isDynamicParallelStep(firstStep)\n\t\t\t\t? firstStep.parallel.task\n\t\t\t\t: (firstStep as SequentialStep).task)\n\t\t: undefined);\n\ttry {\n\t\tif (params.validateOutputBindings !== false) {\n\t\t\tvalidateChainOutputBindings(chain, { maxItems: params.dynamicFanoutMaxItems });\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof ChainOutputValidationError) return { error: error.message };\n\t\tthrow error;\n\t}\n\tconst workflowGraph = buildWorkflowGraphSnapshot({ runId: id, mode: resultMode, steps: graphChain });\n\n\tfor (const s of chain) {\n\t\tconst stepAgents = isParallelStep(s)\n\t\t\t? s.parallel.map((t) => t.agent)\n\t\t\t: isDynamicParallelStep(s)\n\t\t\t\t? [s.parallel.agent]\n\t\t\t\t: [(s as SequentialStep).agent];\n\t\tfor (const agentName of stepAgents) {\n\t\t\tif (!agents.find((x) => x.name === agentName)) {\n\t\t\t\treturn { error: `Unknown agent: ${agentName}` };\n\t\t\t}\n\t\t}\n\t}\n\n\tlet progressInstructionCreated = false;\n\tconst buildStepOverrides = (s: SequentialStep): StepOverrides => {\n\t\tconst stepSkillInput = normalizeSkillInput(s.skill);\n\t\treturn {\n\t\t\t...(s.output !== undefined ? { output: s.output } : {}),\n\t\t\t...(s.outputMode !== undefined ? { outputMode: s.outputMode } : {}),\n\t\t\t...(s.reads !== undefined ? { reads: s.reads } : {}),\n\t\t\t...(s.progress !== undefined ? { progress: s.progress } : {}),\n\t\t\t...(stepSkillInput !== undefined ? { skills: stepSkillInput } : {}),\n\t\t\t...(s.model !== undefined ? { model: s.model } : {}),\n\t\t};\n\t};\n\tconst buildSeqStep = (s: SequentialStep, sessionFile?: string, behaviorCwd?: string, progressPrecreated = false, resolvedBehavior?: ResolvedStepBehavior, flatIndex?: number, parallelOutputNamespace?: { stepIndex: number; taskIndex?: number }) => {\n\t\tconst a = agents.find((x) => x.name === s.agent)!;\n\t\tconst toolBudgetInput = s.toolBudget ?? params.toolBudget ?? a.toolBudget ?? params.configToolBudget;\n\t\tconst resolvedToolBudget = validateToolBudgetConfig(toolBudgetInput, s.toolBudget ? \"toolBudget\" : a.toolBudget ? \"agent.toolBudget\" : \"config.toolBudget\");\n\t\tif (resolvedToolBudget.error) throw new AsyncStartValidationError(resolvedToolBudget.error);\n\t\tconst stepCwd = resolveChildCwd(runnerCwd, s.cwd);\n\t\tconst instructionCwd = behaviorCwd ?? stepCwd;\n\t\tlet behavior = suppressProgressForReadOnlyTask(resolvedBehavior ?? resolveStepBehavior(a, buildStepOverrides(s), chainSkills), s.task, originalTask);\n\t\tconst inheritedRelativeParallelOutput = parallelOutputNamespace && s.output === undefined && typeof behavior.output === \"string\" && !path.isAbsolute(behavior.output);\n\t\tif (inheritedRelativeParallelOutput && parallelOutputNamespace.taskIndex !== undefined) {\n\t\t\tbehavior = {\n\t\t\t\t...behavior,\n\t\t\t\toutput: path.join(`parallel-${parallelOutputNamespace.stepIndex}`, `${parallelOutputNamespace.taskIndex}-${s.agent}`, behavior.output),\n\t\t\t};\n\t\t}\n\t\tconst namespaceOutputPath = Boolean(inheritedRelativeParallelOutput && parallelOutputNamespace.taskIndex === undefined);\n\t\tconst skillNames = behavior.skills === false ? [] : behavior.skills;\n\t\tconst { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(\n\t\t\tskillNames,\n\t\t\tstepCwd,\n\t\t\tctx.cwd,\n\t\t\ta.skillPath,\n\t\t\ta.filePath ? path.dirname(a.filePath) : stepCwd,\n\t\t);\n\t\tif (missingSkills.includes(\"pi-subagents\")) throw new UnavailableSubagentSkillError(UNAVAILABLE_SUBAGENT_SKILL_ERROR);\n\n\t\tlet systemPrompt = a.systemPrompt?.trim() ?? \"\";\n\t\tif (resolvedSkills.length > 0) {\n\t\t\tconst injection = buildSkillInjection(resolvedSkills);\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${injection}` : injection;\n\t\t}\n\t\tconst memoryInjection = buildAgentMemoryInjection(a, stepCwd);\n\t\tif (memoryInjection) {\n\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memoryInjection}` : memoryInjection;\n\t\t}\n\n\t\tconst readInstructions = buildChainInstructions({ ...behavior, output: false, progress: false }, instructionCwd, false);\n\t\tconst isFirstProgressAgent = behavior.progress && !progressPrecreated && !progressInstructionCreated;\n\t\tif (behavior.progress) progressInstructionCreated = true;\n\t\tconst progressInstructions = buildChainInstructions({ ...behavior, output: false, reads: false }, progressDir, isFirstProgressAgent);\n\t\tconst outputPath = resolveSingleOutputPath(behavior.output, ctx.cwd, instructionCwd, outputBaseDir);\n\t\tif (!namespaceOutputPath) systemPrompt = injectOutputPathSystemPrompt(systemPrompt, outputPath, a);\n\t\tconst validationError = validateFileOnlyOutputMode(behavior.outputMode, outputPath, `Async step (${s.agent})`);\n\t\tif (validationError) throw new AsyncStartValidationError(validationError);\n\t\tlet taskTemplate = s.task ?? \"{previous}\";\n\t\ttaskTemplate = taskTemplate.replace(/\\{task\\}/g, originalTask ?? \"\");\n\t\ttaskTemplate = taskTemplate.replace(/\\{chain_dir\\}/g, runnerCwd);\n\t\tconst taskText = `${readInstructions.prefix}${taskTemplate}${progressInstructions.suffix}`;\n\t\tconst task = namespaceOutputPath ? taskText : injectSingleOutputInstruction(taskText, outputPath, a);\n\n\t\tconst primaryModel = resolveEffectiveSubagentModel(\n\t\t\ts.model,\n\t\t\ta.model,\n\t\t\tctx.currentModel,\n\t\t\tavailableModels,\n\t\t\tctx.currentModelProvider,\n\t\t\t{ scope: ctx.modelScope },\n\t\t);\n\t\tconst thinkingOverride = flatIndex === undefined ? undefined : thinkingOverridesByFlatIndex?.[flatIndex];\n\t\tconst effectiveThinking = thinkingOverride ?? a.thinking;\n\t\tconst model = applyThinkingSuffix(primaryModel, effectiveThinking, thinkingOverride !== undefined);\n\t\treturn {\n\t\t\tparentSessionId: ctx.parentSessionId ?? ctx.currentSessionId,\n\t\t\tagent: s.agent,\n\t\t\ttask,\n\t\t\tphase: s.phase,\n\t\t\tlabel: s.label,\n\t\t\toutputName: s.as,\n\t\t\tstructured: Boolean(s.outputSchema),\n\t\t\tcwd: stepCwd,\n\t\t\tmodel,\n\t\t\tthinking: resolveEffectiveThinking(model, effectiveThinking),\n\t\t\tmodelCandidates: buildModelCandidates(primaryModel, a.fallbackModels, availableModels, ctx.currentModelProvider, { scope: ctx.modelScope }).map((candidate) =>\n\t\t\t\tapplyThinkingSuffix(candidate, effectiveThinking, thinkingOverride !== undefined),\n\t\t\t),\n\t\t\ttools: a.tools,\n\t\t\textensions: a.extensions,\n\t\t\tsubagentOnlyExtensions: a.subagentOnlyExtensions,\n\t\t\tmcpDirectTools: a.mcpDirectTools,\n\t\t\tcompletionGuard: a.completionGuard,\n\t\t\tsystemPrompt,\n\t\t\tsystemPromptMode: a.systemPromptMode,\n\t\t\tinheritProjectContext: a.inheritProjectContext,\n\t\t\tinheritSkills: a.inheritSkills,\n\t\t\tskills: resolvedSkills.map((r) => r.name),\n\t\t\toutputPath,\n\t\t\t...(namespaceOutputPath ? { namespaceOutputPath: true } : {}),\n\t\t\toutputMode: behavior.outputMode,\n\t\t\tsessionFile,\n\t\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, a.maxSubagentDepth),\n\t\t\twaitToolEnabled: params.waitToolEnabled,\n\t\t\teffectiveAcceptance: resolveEffectiveAcceptance({\n\t\t\t\texplicit: s.acceptance,\n\t\t\t\tagentName: s.agent,\n\t\t\t\tacceptanceRole: a.acceptanceRole,\n\t\t\t\ttask,\n\t\t\t\tmode: resultMode,\n\t\t\t\tasync: true,\n\t\t\t\tdynamic: false,\n\t\t\t}),\n\t\t\tacceptanceInput: s.acceptance,\n\t\t\tacceptanceRole: a.acceptanceRole,\n\t\t\t...(s.outputSchema ? { structuredOutputSchema: s.outputSchema } : {}),\n\t\t\t...(s.outputSchema ? { structuredOutput: createStructuredOutputRuntime(s.outputSchema, path.join(asyncDir, \"structured-output\")) } : {}),\n\t\t\t...(resolvedToolBudget.budget ? { toolBudget: resolvedToolBudget.budget } : {}),\n\t\t};\n\t};\n\n\tlet flatStepIndex = 0;\n\tconst nextFlatStep = (): { index: number; sessionFile?: string; thinkingOverride?: AgentConfig[\"thinking\"] } => {\n\t\tconst index = flatStepIndex;\n\t\tconst sessionFile = sessionFilesByFlatIndex?.[flatStepIndex];\n\t\tconst thinkingOverride = thinkingOverridesByFlatIndex?.[flatStepIndex];\n\t\tflatStepIndex++;\n\t\treturn {\n\t\t\tindex,\n\t\t\t...(sessionFile ? { sessionFile } : {}),\n\t\t\t...(thinkingOverride ? { thinkingOverride } : {}),\n\t\t};\n\t};\n\n\ttry {\n\t\tconst builtSteps = chain.map((s, stepIndex) => {\n\t\t\tif (isParallelStep(s)) {\n\t\t\t\tconst parallelBehaviors = s.parallel.map((task) => {\n\t\t\t\t\tconst agent = agents.find((candidate) => candidate.name === task.agent)!;\n\t\t\t\t\treturn suppressProgressForReadOnlyTask(resolveStepBehavior(agent, buildStepOverrides(task), chainSkills), task.task, originalTask);\n\t\t\t\t});\n\t\t\t\tconst progressPrecreated = parallelBehaviors.some((behavior) => behavior.progress);\n\t\t\t\tif (progressPrecreated) {\n\t\t\t\t\tif (!s.worktree || params.progressDir) writeInitialProgressFile(progressDir);\n\t\t\t\t\tprogressInstructionCreated = true;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tparallel: s.parallel.map((t, taskIndex) => {\n\t\t\t\t\t\tlet behaviorCwd: string | undefined;\n\t\t\t\t\t\tif (s.worktree) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbehaviorCwd = resolveExpectedWorktreeAgentCwd(runnerCwd, `${id}-s${stepIndex}`, taskIndex, worktreeBaseDir);\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tbehaviorCwd = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst staticStep = nextFlatStep();\n\t\t\t\t\t\treturn buildSeqStep(t, staticStep.sessionFile, behaviorCwd, progressPrecreated, parallelBehaviors[taskIndex], staticStep.index, { stepIndex, taskIndex });\n\t\t\t\t\t}),\n\t\t\t\t\tconcurrency: s.concurrency,\n\t\t\t\t\tfailFast: s.failFast,\n\t\t\t\t\tworktree: s.worktree,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isDynamicParallelStep(s)) {\n\t\t\t\tconst agent = agents.find((candidate) => candidate.name === s.parallel.agent)!;\n\t\t\t\tconst behavior = suppressProgressForReadOnlyTask(resolveStepBehavior(agent, buildStepOverrides(s.parallel), chainSkills), s.parallel.task, originalTask);\n\t\t\t\tconst progressPrecreated = behavior.progress;\n\t\t\t\tif (progressPrecreated) {\n\t\t\t\t\twriteInitialProgressFile(progressDir);\n\t\t\t\t\tprogressInstructionCreated = true;\n\t\t\t\t}\n\t\t\t\tconst maxItems = s.expand.maxItems ?? params.dynamicFanoutMaxItems ?? 0;\n\t\t\t\tconst dynamicFlatSteps = Array.from({ length: maxItems }, () => nextFlatStep());\n\t\t\t\tconst parallel = buildSeqStep(s.parallel as SequentialStep, undefined, undefined, progressPrecreated, behavior, undefined, { stepIndex });\n\t\t\t\treturn {\n\t\t\t\t\texpand: s.expand,\n\t\t\t\t\tparallel,\n\t\t\t\t\tcollect: s.collect,\n\t\t\t\t\tconcurrency: s.concurrency,\n\t\t\t\t\tfailFast: s.failFast,\n\t\t\t\t\tphase: s.phase,\n\t\t\t\t\tlabel: s.label,\n\t\t\t\t\tsessionFiles: dynamicFlatSteps.map((step) => step.sessionFile),\n\t\t\t\t\tthinkingOverrides: dynamicFlatSteps.map((step) => step.thinkingOverride),\n\t\t\t\t\teffectiveAcceptance: resolveEffectiveAcceptance({\n\t\t\t\t\t\texplicit: s.acceptance,\n\t\t\t\t\t\tagentName: s.parallel.agent,\n\t\t\t\t\t\tacceptanceRole: agent.acceptanceRole,\n\t\t\t\t\t\ttask: parallel.task,\n\t\t\t\t\t\tmode: resultMode,\n\t\t\t\t\t\tasync: true,\n\t\t\t\t\t\tdynamicGroup: true,\n\t\t\t\t\t}),\n\t\t\t\t\tacceptanceInput: s.acceptance,\n\t\t\t\t\tacceptanceRole: agent.acceptanceRole,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst staticStep = nextFlatStep();\n\t\t\treturn buildSeqStep(s as SequentialStep, staticStep.sessionFile, undefined, false, undefined, staticStep.index);\n\t\t});\n\t\tconst steps = params.attachRoot\n\t\t\t? [{\n\t\t\t\t\tagent: params.attachRoot.agent,\n\t\t\t\t\ttask: \"\",\n\t\t\t\t\tlabel: params.attachRoot.label ?? `Attached root ${params.attachRoot.runId}`,\n\t\t\t\t\toutputName: params.attachRoot.outputName,\n\t\t\t\t\timportAsyncRoot: {\n\t\t\t\t\t\trunId: params.attachRoot.runId,\n\t\t\t\t\t\tasyncDir: params.attachRoot.asyncDir,\n\t\t\t\t\t\tresultPath: params.attachRoot.resultPath,\n\t\t\t\t\t\tindex: params.attachRoot.index,\n\t\t\t\t\t},\n\t\t\t\t\tinheritProjectContext: false,\n\t\t\t\t\tinheritSkills: false,\n\t\t\t\t}, ...builtSteps]\n\t\t\t: builtSteps;\n\t\tfor (const step of steps) {\n\t\t\tif (!(\"parallel\" in step) || !Array.isArray(step.parallel)) continue;\n\t\t\tconst seen = new Map<string, { index: number; agent: string }>();\n\t\t\tfor (let index = 0; index < step.parallel.length; index++) {\n\t\t\t\tconst task = step.parallel[index]!;\n\t\t\t\tif (!task.outputPath) continue;\n\t\t\t\tconst previous = seen.get(task.outputPath);\n\t\t\t\tif (previous) {\n\t\t\t\t\tthrow new AsyncStartValidationError(`Parallel tasks ${previous.index + 1} (${previous.agent}) and ${index + 1} (${task.agent}) resolve output to the same path: ${task.outputPath}. Use distinct output paths.`);\n\t\t\t\t}\n\t\t\t\tseen.set(task.outputPath, { index, agent: task.agent });\n\t\t\t}\n\t\t}\n\t\treturn { steps, runnerCwd, workflowGraph, eventChain: graphChain, ...(originalTask !== undefined ? { originalTask } : {}) };\n\t} catch (error) {\n\t\tif (error instanceof UnavailableSubagentSkillError || error instanceof AsyncStartValidationError) return { error: error.message };\n\t\tthrow error;\n\t}\n}\n\n/**\n * Execute a chain asynchronously\n */\nexport function executeAsyncChain(\n\tid: string,\n\tparams: AsyncChainParams,\n): AsyncExecutionResult {\n\tconst {\n\t\tchain,\n\t\tagents,\n\t\tctx,\n\t\tcwd,\n\t\tmaxOutput,\n\t\tartifactsDir,\n\t\tartifactConfig,\n\t\tshareEnabled,\n\t\tsessionRoot,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tmaxSubagentDepth,\n\t\tworktreeSetupHook,\n\t\tworktreeSetupHookTimeoutMs,\n\t\tworktreeBaseDir,\n\t\tcontrolConfig,\n\t\tcontrolIntercomTarget,\n\t\tchildIntercomTarget,\n\t\tnestedRoute,\n\t} = params;\n\tconst resultMode = params.resultMode ?? \"chain\";\n\tconst inheritedNestedRoute = resolveInheritedNestedRouteFromEnv();\n\tconst nestedAddress = inheritedNestedRoute ? resolveNestedParentAddressFromEnv() : undefined;\n\tconst asyncDir = inheritedNestedRoute\n\t\t? path.join(TEMP_ROOT_DIR, \"nested-subagent-runs\", inheritedNestedRoute.rootRunId, id)\n\t\t: path.join(ASYNC_DIR, id);\n\ttry {\n\t\tfs.mkdirSync(asyncDir, { recursive: true });\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Failed to create async run directory '${asyncDir}': ${message}` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: resultMode, results: [] },\n\t\t};\n\t}\n\n\tconst built = buildAsyncRunnerSteps(id, {\n\t\tchain,\n\t\ttask: params.task,\n\t\tattachRoot: params.attachRoot,\n\t\tresultMode,\n\t\tagents,\n\t\tctx,\n\t\tavailableModels: params.availableModels,\n\t\tcwd,\n\t\tchainSkills: params.chainSkills,\n\t\tsessionFilesByFlatIndex,\n\t\tthinkingOverridesByFlatIndex,\n\t\tprogressDir: params.progressDir ?? (artifactsDir ? path.join(artifactsDir, \"progress\", id) : resultMode === \"parallel\" ? path.join(asyncDir, \"progress\") : undefined),\n\t\toutputBaseDir: artifactsDir ? path.join(artifactsDir, \"outputs\", id) : undefined,\n\t\tdynamicFanoutMaxItems: params.dynamicFanoutMaxItems,\n\t\tmaxSubagentDepth,\n\t\twaitToolEnabled: params.waitToolEnabled,\n\t\tworktreeBaseDir,\n\t\tasyncDir,\n\t\ttoolBudget: params.toolBudget,\n\t\tconfigToolBudget: params.configToolBudget,\n\t});\n\tif (\"error\" in built) {\n\t\ttry {\n\t\t\tfs.rmSync(asyncDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Best-effort cleanup for validation failures before the runner is spawned.\n\t\t}\n\t\treturn formatAsyncStartError(resultMode, built.error);\n\t}\n\tconst { steps, runnerCwd, workflowGraph, eventChain } = built;\n\tconst deadlineAt = params.timeoutMs !== undefined ? Date.now() + params.timeoutMs : undefined;\n\tconst initialTurnBudget = params.turnBudget ? initialTurnBudgetState(params.turnBudget) : undefined;\n\tlet childTargetIndex = 0;\n\tconst childIntercomTargets = childIntercomTarget ? steps.flatMap((step) => {\n\t\tif (!(\"parallel\" in step) && step.importAsyncRoot) {\n\t\t\tchildTargetIndex++;\n\t\t\treturn [undefined];\n\t\t}\n\t\tif (\"parallel\" in step) {\n\t\t\tif (!Array.isArray(step.parallel)) {\n\t\t\t\tchildTargetIndex++;\n\t\t\t\treturn [undefined];\n\t\t\t}\n\t\t\treturn step.parallel.map((task) => childIntercomTarget(task.agent, childTargetIndex++));\n\t\t}\n\t\treturn [childIntercomTarget(step.agent, childTargetIndex++)];\n\t}) : undefined;\n\n\tlet spawnResult: { pid?: number; error?: string } = {};\n\ttry {\n\t\tspawnResult = spawnRunner(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tsteps,\n\t\t\t\tresultPath: inheritedNestedRoute ? nestedResultsPath(inheritedNestedRoute.rootRunId, id) : path.join(RESULTS_DIR, `${id}.json`),\n\t\t\t\tcwd: runnerCwd,\n\t\t\t\tplaceholder: \"{previous}\",\n\t\t\t\tmaxOutput,\n\t\t\t\tartifactsDir: artifactConfig.enabled ? artifactsDir : undefined,\n\t\t\t\tartifactConfig,\n\t\t\t\tshare: shareEnabled,\n\t\t\t\tsessionDir: sessionRoot ? path.join(sessionRoot, `async-${id}`) : undefined,\n\t\t\t\tasyncDir,\n\t\t\t\tsessionId: ctx.currentSessionId,\n\t\t\t\tpiPackageRoot,\n\t\t\t\tpiArgv1: process.argv[1],\n\t\t\t\tworktreeSetupHook,\n\t\t\t\tworktreeSetupHookTimeoutMs,\n\t\t\t\tworktreeBaseDir,\n\t\t\t\tcontrolConfig,\n\t\t\t\tturnBudget: params.turnBudget,\n\t\t\t\ttoolBudget: params.toolBudget,\n\t\t\t\tcontrolIntercomTarget,\n\t\t\t\tchildIntercomTargets,\n\t\t\t\tresultMode,\n\t\t\t\tdynamicFanoutMaxItems: params.dynamicFanoutMaxItems,\n\t\t\t\ttimeoutMs: params.timeoutMs,\n\t\t\t\tdeadlineAt,\n\t\t\t\tglobalConcurrencyLimit: params.globalConcurrencyLimit,\n\t\t\t\tworkflowGraph,\n\t\t\t\tnestedRoute: nestedRoute ?? inheritedNestedRoute,\n\t\t\t\tnestedSelf: inheritedNestedRoute && nestedAddress ? {\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t} : undefined,\n\t\t\t},\n\t\t\tid,\n\t\t\trunnerCwd,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn formatAsyncStartError(resultMode, `Failed to start async ${resultMode} '${id}': ${message}`);\n\t}\n\n\tif (spawnResult.error) {\n\t\treturn formatAsyncStartError(resultMode, `Failed to start async ${resultMode} '${id}': ${spawnResult.error}`);\n\t}\n\n\tif (spawnResult.pid) {\n\t\tconst eventFirstStep = eventChain[0];\n\t\tconst firstAgents = isParallelStep(eventFirstStep)\n\t\t\t? eventFirstStep.parallel.map((t) => t.agent)\n\t\t\t: isDynamicParallelStep(eventFirstStep)\n\t\t\t\t? [eventFirstStep.parallel.agent]\n\t\t\t: [(eventFirstStep as SequentialStep).agent];\n\t\tconst firstTask = isParallelStep(eventFirstStep)\n\t\t\t? eventFirstStep.parallel[0]?.task\n\t\t\t: isDynamicParallelStep(eventFirstStep)\n\t\t\t\t? eventFirstStep.parallel.task\n\t\t\t\t: (eventFirstStep as SequentialStep).task;\n\t\tconst workflowGoal = params.goal ?? (params.task?.trim() || firstTask);\n\t\tconst parallelGroups: Array<{ start: number; count: number; stepIndex: number }> = [];\n\t\tconst flatAgents: string[] = [];\n\t\tlet flatStepStart = 0;\n\t\tfor (let stepIndex = 0; stepIndex < eventChain.length; stepIndex++) {\n\t\t\tconst step = eventChain[stepIndex]!;\n\t\t\tif (isParallelStep(step)) {\n\t\t\t\tparallelGroups.push({ start: flatStepStart, count: step.parallel.length, stepIndex });\n\t\t\t\tflatAgents.push(...step.parallel.map((task) => task.agent));\n\t\t\t\tflatStepStart += step.parallel.length;\n\t\t\t} else if (isDynamicParallelStep(step)) {\n\t\t\t\tparallelGroups.push({ start: flatStepStart, count: 1, stepIndex });\n\t\t\t\tflatAgents.push(step.parallel.agent);\n\t\t\t\tflatStepStart++;\n\t\t\t} else {\n\t\t\t\tflatAgents.push((step as SequentialStep).agent);\n\t\t\t\tflatStepStart++;\n\t\t\t}\n\t\t}\n\t\tif (inheritedNestedRoute && nestedAddress) {\n\t\t\tconst now = Date.now();\n\t\t\ttry {\n\t\t\t\twriteNestedEvent(inheritedNestedRoute, {\n\t\t\t\t\ttype: \"subagent.nested.started\",\n\t\t\t\t\tts: now,\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tchild: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t\t\tasyncDir,\n\t\t\t\t\t\tpid: spawnResult.pid,\n\t\t\t\t\t\townerIntercomTarget: process.env.PI_SUBAGENT_INTERCOM_SESSION_NAME,\n\t\t\t\t\t\tleafIntercomTarget: childIntercomTargets?.[0],\n\t\t\t\t\t\tintercomTarget: childIntercomTargets?.[0],\n\t\t\t\t\t\townerState: \"live\",\n\t\t\t\t\t\tmode: resultMode,\n\t\t\t\t\t\tstate: \"running\",\n\t\t\t\t\t\tagent: firstAgents[0],\n\t\t\t\t\t\tagents: flatAgents,\n\t\t\t\t\t\tchainStepCount: eventChain.length,\n\t\t\t\t\t\tparallelGroups,\n\t\t\t\t\t\t...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}),\n\t\t\t\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\t\t\t\tstartedAt: now,\n\t\t\t\t\t\tlastUpdate: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to emit nested async start event:\", error);\n\t\t\t}\n\t\t}\n\t\tctx.pi.events.emit(SUBAGENT_ASYNC_STARTED_EVENT, {\n\t\t\tlifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\t\t\tid,\n\t\t\tpid: spawnResult.pid,\n\t\t\tsessionId: ctx.currentSessionId,\n\t\t\tmode: resultMode,\n\t\t\tagent: firstAgents[0],\n\t\t\tagents: flatAgents,\n\t\t\ttask: firstTask?.slice(0, 50),\n\t\t\tgoal: workflowGoal?.slice(0, 120),\n\t\t\tchain: eventChain.map((s) =>\n\t\t\t\tisParallelStep(s) ? `[${s.parallel.map((t) => t.agent).join(\"+\")}]` : isDynamicParallelStep(s) ? `expand:${s.parallel.agent}` : (s as SequentialStep).agent,\n\t\t\t),\n\t\t\tchainStepCount: eventChain.length,\n\t\t\tparallelGroups,\n\t\t\tworkflowGraph,\n\t\t\tcwd: runnerCwd,\n\t\t\tasyncDir,\n\t\t\t...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}),\n\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\tnestedRoute,\n\t\t});\n\t}\n\n\tconst chainDesc = chain\n\t\t.map((s) =>\n\t\t\tisParallelStep(s) ? `[${s.parallel.map((t) => t.agent).join(\"+\")}]` : isDynamicParallelStep(s) ? `expand:${s.parallel.agent}` : (s as SequentialStep).agent,\n\t\t)\n\t\t.join(\" -> \");\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: formatAsyncStartedMessage(`Async ${resultMode}: ${chainDesc} [${id}]`) }],\n\t\tdetails: { mode: resultMode, runId: id, results: [], asyncId: id, asyncDir, workflowGraph, ...(params.timeoutMs !== undefined ? { timeoutMs: params.timeoutMs, deadlineAt } : {}), ...(params.turnBudget ? { turnBudget: params.turnBudget } : {}), ...(params.toolBudget ? { toolBudget: params.toolBudget } : {}) },\n\t};\n}\n\n/**\n * Execute a single agent asynchronously\n */\nexport function executeAsyncSingle(\n\tid: string,\n\tparams: AsyncSingleParams,\n): AsyncExecutionResult {\n\tconst {\n\t\tagent,\n\t\tagentConfig,\n\t\tctx,\n\t\tcwd,\n\t\tmaxOutput,\n\t\tartifactsDir,\n\t\tartifactConfig,\n\t\tshareEnabled,\n\t\tsessionRoot,\n\t\tsessionFile,\n\t\tmaxSubagentDepth,\n\t\tworktreeSetupHook,\n\t\tworktreeSetupHookTimeoutMs,\n\t\tworktreeBaseDir,\n\t\tcontrolConfig,\n\t\tcontrolIntercomTarget,\n\t\tchildIntercomTarget,\n\t\tnestedRoute,\n\t} = params;\n\tconst task = params.task ?? \"\";\n\tconst runnerCwd = resolveChildCwd(ctx.cwd, cwd);\n\tconst skillNames = params.skills ?? agentConfig.skills ?? [];\n\tconst availableModels = params.availableModels;\n\tconst { resolved: resolvedSkills, missing: missingSkills } = resolveSkillsWithFallback(\n\t\tskillNames,\n\t\trunnerCwd,\n\t\tctx.cwd,\n\t\tagentConfig.skillPath,\n\t\tagentConfig.filePath ? path.dirname(agentConfig.filePath) : runnerCwd,\n\t);\n\tif (missingSkills.includes(\"pi-subagents\")) return formatAsyncStartError(\"single\", UNAVAILABLE_SUBAGENT_SKILL_ERROR);\n\tlet systemPrompt = agentConfig.systemPrompt?.trim() ?? \"\";\n\tif (resolvedSkills.length > 0) {\n\t\tconst injection = buildSkillInjection(resolvedSkills);\n\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${injection}` : injection;\n\t}\n\tconst memoryInjection = buildAgentMemoryInjection(agentConfig, runnerCwd);\n\tif (memoryInjection) {\n\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${memoryInjection}` : memoryInjection;\n\t}\n\n\tconst inheritedNestedRoute = resolveInheritedNestedRouteFromEnv();\n\tconst nestedAddress = inheritedNestedRoute ? resolveNestedParentAddressFromEnv() : undefined;\n\tconst asyncDir = inheritedNestedRoute\n\t\t? path.join(TEMP_ROOT_DIR, \"nested-subagent-runs\", inheritedNestedRoute.rootRunId, id)\n\t\t: path.join(ASYNC_DIR, id);\n\ttry {\n\t\tfs.mkdirSync(asyncDir, { recursive: true });\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Failed to create async run directory '${asyncDir}': ${message}` }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"single\" as const, results: [] },\n\t\t};\n\t}\n\n\tconst effectiveOutput = normalizeSingleOutputOverride(params.output, agentConfig.output);\n\tconst outputPath = resolveSingleOutputPath(effectiveOutput, ctx.cwd, runnerCwd, params.outputBaseDir ?? (artifactsDir ? path.join(artifactsDir, \"outputs\", id) : undefined));\n\tsystemPrompt = injectOutputPathSystemPrompt(systemPrompt, outputPath, agentConfig);\n\tconst outputMode = params.outputMode ?? \"inline\";\n\tconst validationError = validateFileOnlyOutputMode(outputMode, outputPath, `Async single run (${agent})`);\n\tif (validationError) return formatAsyncStartError(\"single\", validationError);\n\tconst taskWithOutputInstruction = injectSingleOutputInstruction(task, outputPath, agentConfig);\n\tconst primaryModel = resolveSubagentModelOverride(\n\t\tparams.modelOverride ?? agentConfig.model,\n\t\tctx.currentModel,\n\t\tavailableModels,\n\t\tctx.currentModelProvider,\n\t);\n\tconst effectiveThinking = params.thinkingOverride ?? agentConfig.thinking;\n\tconst model = applyThinkingSuffix(primaryModel, effectiveThinking, params.thinkingOverride !== undefined);\n\tconst toolBudgetInput = params.toolBudget ?? agentConfig.toolBudget ?? params.configToolBudget;\n\tconst resolvedToolBudget = validateToolBudgetConfig(toolBudgetInput, params.toolBudget ? \"toolBudget\" : agentConfig.toolBudget ? \"agent.toolBudget\" : \"config.toolBudget\");\n\tif (resolvedToolBudget.error) return formatAsyncStartError(\"single\", resolvedToolBudget.error);\n\tconst deadlineAt = params.absoluteDeadlineAt ?? (params.timeoutMs !== undefined ? Date.now() + params.timeoutMs : undefined);\n\tconst timeoutMs = params.absoluteDeadlineAt !== undefined && deadlineAt !== undefined\n\t\t? deadlineAt - Date.now()\n\t\t: params.timeoutMs;\n\tif (timeoutMs !== undefined && timeoutMs <= 0) return formatAsyncStartError(\"single\", \"The source run's absolute deadline expired before recovery could launch.\");\n\tconst initialTurnBudget = params.turnBudget ? initialTurnBudgetState(params.turnBudget) : undefined;\n\tconst resolvedSessionDir = params.sessionDir ?? (sessionRoot ? path.join(sessionRoot, `async-${id}`) : undefined);\n\tconst resolvedAcceptance = resolveEffectiveAcceptance({\n\t\texplicit: params.acceptance,\n\t\tagentName: agent,\n\t\tacceptanceRole: agentConfig.acceptanceRole,\n\t\ttask,\n\t\tmode: \"single\",\n\t\tasync: true,\n\t});\n\tconst recoveryDescriptor: SteeringRecoveryDescriptor = {\n\t\tversion: 1,\n\t\tsourceRunId: id,\n\t\tagent,\n\t\t...(sessionFile ? { sessionFile } : {}),\n\t\tcwd: runnerCwd,\n\t\t...(model ? { model } : {}),\n\t\t...(agentConfig.fallbackModels ? { fallbackModels: [...agentConfig.fallbackModels] } : {}),\n\t\t...(effectiveThinking ? { thinking: resolveEffectiveThinking(model, effectiveThinking) } : {}),\n\t\t...(agentConfig.tools ? { tools: [...agentConfig.tools] } : {}),\n\t\t...(agentConfig.extensions ? { extensions: [...agentConfig.extensions] } : {}),\n\t\t...(agentConfig.subagentOnlyExtensions ? { subagentOnlyExtensions: [...agentConfig.subagentOnlyExtensions] } : {}),\n\t\t...(agentConfig.mcpDirectTools ? { mcpDirectTools: [...agentConfig.mcpDirectTools] } : {}),\n\t\t...(agentConfig.systemPrompt ? { systemPrompt: agentConfig.systemPrompt } : {}),\n\t\tsystemPromptMode: agentConfig.systemPromptMode,\n\t\tinheritProjectContext: agentConfig.inheritProjectContext,\n\t\tinheritSkills: agentConfig.inheritSkills,\n\t\t...(resolvedSkills.length ? { skills: resolvedSkills.map((skill) => skill.name) } : {}),\n\t\t...(agentConfig.skillPath ? { skillPath: [...agentConfig.skillPath] } : {}),\n\t\t...(agentConfig.filePath ? { agentFilePath: agentConfig.filePath } : {}),\n\t\t...(agentConfig.completionGuard !== undefined ? { completionGuard: agentConfig.completionGuard } : {}),\n\t\t...(agentConfig.memory ? { memory: { ...agentConfig.memory } } : {}),\n\t\t...(outputPath ? { outputPath } : {}),\n\t\toutputMode,\n\t\t...(resolvedAcceptance ? { acceptance: resolvedAcceptance } : {}),\n\t\t...(controlConfig ? { controlConfig } : {}),\n\t\t...(deadlineAt !== undefined ? { absoluteDeadlineAt: deadlineAt } : {}),\n\t\t...(params.turnBudget ? { initialTurnBudget: params.turnBudget } : {}),\n\t\t...(resolvedToolBudget.budget ? { initialToolBudget: resolvedToolBudget.budget } : {}),\n\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, agentConfig.maxSubagentDepth),\n\t\t...(maxOutput ? { maxOutput } : {}),\n\t\tshare: shareEnabled,\n\t\t...(resolvedSessionDir ? { sessionDir: resolvedSessionDir } : {}),\n\t\t...(artifactsDir ? { artifactsDir } : {}),\n\t\tartifactConfig,\n\t};\n\ttry {\n\t\twritePrivateAtomicJson(path.join(asyncDir, \"recovery-descriptor.json\"), recoveryDescriptor);\n\t} catch (error) {\n\t\treturn formatAsyncStartError(\"single\", `Failed to persist async recovery descriptor for '${id}': ${error instanceof Error ? error.message : String(error)}`);\n\t}\n\tlet spawnResult: { pid?: number; error?: string } = {};\n\ttry {\n\t\tspawnResult = spawnRunner(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tsteps: [\n\t\t\t\t\t{\n\t\t\t\t\t\tparentSessionId: ctx.parentSessionId ?? ctx.currentSessionId,\n\t\t\t\t\t\tagent,\n\t\t\t\t\t\ttask: taskWithOutputInstruction,\n\t\t\t\t\t\tcwd: runnerCwd,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tthinking: resolveEffectiveThinking(model, effectiveThinking),\n\t\t\t\t\t\tmodelCandidates: buildModelCandidates(primaryModel, agentConfig.fallbackModels, availableModels, ctx.currentModelProvider, { scope: ctx.modelScope }).map((candidate) =>\n\t\t\t\t\t\t\tapplyThinkingSuffix(candidate, effectiveThinking, params.thinkingOverride !== undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttools: agentConfig.tools,\n\t\t\t\t\t\textensions: agentConfig.extensions,\n\t\t\t\t\t\tsubagentOnlyExtensions: agentConfig.subagentOnlyExtensions,\n\t\t\t\t\t\tmcpDirectTools: agentConfig.mcpDirectTools,\n\t\t\t\t\t\tcompletionGuard: agentConfig.completionGuard,\n\t\t\t\t\t\tsystemPrompt,\n\t\t\t\t\t\tsystemPromptMode: agentConfig.systemPromptMode,\n\t\t\t\t\t\tinheritProjectContext: agentConfig.inheritProjectContext,\n\t\t\t\t\t\tinheritSkills: agentConfig.inheritSkills,\n\t\t\t\t\t\tskills: resolvedSkills.map((r) => r.name),\n\t\t\t\t\t\toutputPath,\n\t\t\t\t\t\toutputMode,\n\t\t\t\t\t\tsessionFile,\n\t\t\t\t\t\tmaxSubagentDepth: resolveChildMaxSubagentDepth(maxSubagentDepth, agentConfig.maxSubagentDepth),\n\t\t\t\t\t\twaitToolEnabled: params.waitToolEnabled,\n\t\t\t\t\t\teffectiveAcceptance: resolvedAcceptance,\n\t\t\t\t\t\t...(resolvedToolBudget.budget ? { toolBudget: resolvedToolBudget.budget } : {}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tresultPath: inheritedNestedRoute ? nestedResultsPath(inheritedNestedRoute.rootRunId, id) : path.join(RESULTS_DIR, `${id}.json`),\n\t\t\t\tcwd: runnerCwd,\n\t\t\t\tplaceholder: \"{previous}\",\n\t\t\t\tmaxOutput,\n\t\t\t\tartifactsDir: artifactConfig.enabled ? artifactsDir : undefined,\n\t\t\t\tartifactConfig,\n\t\t\t\tshare: shareEnabled,\n\t\t\t\tsessionDir: resolvedSessionDir,\n\t\t\t\tasyncDir,\n\t\t\t\tsessionId: ctx.currentSessionId,\n\t\t\t\tpiPackageRoot,\n\t\t\t\tpiArgv1: process.argv[1],\n\t\t\t\tworktreeSetupHook,\n\t\t\t\tworktreeSetupHookTimeoutMs,\n\t\t\t\tworktreeBaseDir,\n\t\t\t\tcontrolConfig,\n\t\t\t\ttimeoutMs,\n\t\t\t\tdeadlineAt,\n\t\t\t\tturnBudget: params.turnBudget,\n\t\t\t\ttoolBudget: params.toolBudget,\n\t\t\t\tcontrolIntercomTarget,\n\t\t\t\tchildIntercomTargets: childIntercomTarget ? [childIntercomTarget(agent, 0)] : undefined,\n\t\t\t\tresultMode: \"single\",\n\t\t\t\t...(params.revivalLease ? { revivalLease: params.revivalLease } : {}),\n\t\t\t\tnestedRoute: nestedRoute ?? inheritedNestedRoute,\n\t\t\t\tnestedSelf: inheritedNestedRoute && nestedAddress ? {\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t} : undefined,\n\t\t\t},\n\t\t\tid,\n\t\t\trunnerCwd,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn formatAsyncStartError(\"single\", `Failed to start async run '${id}': ${message}`);\n\t}\n\n\tif (spawnResult.error) {\n\t\treturn formatAsyncStartError(\"single\", `Failed to start async run '${id}': ${spawnResult.error}`);\n\t}\n\n\tif (spawnResult.pid) {\n\t\tif (inheritedNestedRoute && nestedAddress) {\n\t\t\tconst now = Date.now();\n\t\t\ttry {\n\t\t\t\twriteNestedEvent(inheritedNestedRoute, {\n\t\t\t\t\ttype: \"subagent.nested.started\",\n\t\t\t\t\tts: now,\n\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\tchild: {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tparentRunId: nestedAddress.parentRunId,\n\t\t\t\t\t\tparentStepIndex: nestedAddress.parentStepIndex,\n\t\t\t\t\t\tdepth: nestedAddress.depth,\n\t\t\t\t\t\tpath: nestedAddress.path,\n\t\t\t\t\t\tasyncDir,\n\t\t\t\t\t\tpid: spawnResult.pid,\n\t\t\t\t\t\townerIntercomTarget: process.env.PI_SUBAGENT_INTERCOM_SESSION_NAME,\n\t\t\t\t\t\tleafIntercomTarget: childIntercomTarget?.(agent, 0),\n\t\t\t\t\t\tintercomTarget: childIntercomTarget?.(agent, 0),\n\t\t\t\t\t\townerState: \"live\",\n\t\t\t\t\t\tmode: \"single\",\n\t\t\t\t\t\tstate: \"running\",\n\t\t\t\t\t\tagent,\n\t\t\t\t\t\tagents: [agent],\n\t\t\t\t\t\tchainStepCount: 1,\n\t\t\t\t\t\t...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}),\n\t\t\t\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\t\t\t\tstartedAt: now,\n\t\t\t\t\t\tlastUpdate: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to emit nested async start event:\", error);\n\t\t\t}\n\t\t}\n\t\tctx.pi.events.emit(SUBAGENT_ASYNC_STARTED_EVENT, {\n\t\t\tlifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,\n\t\t\tid,\n\t\t\tpid: spawnResult.pid,\n\t\t\tsessionId: ctx.currentSessionId,\n\t\t\tmode: \"single\",\n\t\t\tagent,\n\t\t\ttask: task?.slice(0, 50),\n\t\t\tgoal: (params.goal ?? task).slice(0, 120),\n\t\t\tcwd: runnerCwd,\n\t\t\tasyncDir,\n\t\t\t...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}),\n\t\t\t...(initialTurnBudget ? { turnBudget: initialTurnBudget } : {}),\n\t\t\tnestedRoute,\n\t\t});\n\t}\n\n\treturn {\n\t\tcontent: [{ type: \"text\", text: formatAsyncStartedMessage(`Async: ${agent} [${id}]`) }],\n\t\tdetails: { mode: \"single\", runId: id, results: [], asyncId: id, asyncDir, ...(timeoutMs !== undefined ? { timeoutMs, deadlineAt } : {}), ...(params.turnBudget ? { turnBudget: params.turnBudget } : {}), ...(params.toolBudget ? { toolBudget: params.toolBudget } : {}) },\n\t};\n}\n"]}