@ashx-j/lunr-dev 0.2.13-dev.1.1

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 (2280) hide show
  1. package/CHANGELOG.md +5055 -0
  2. package/README.md +25 -0
  3. package/dist/builtin-extensions/ashxj-spinners.d.ts +7 -0
  4. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -0
  5. package/dist/builtin-extensions/ashxj-spinners.js +282 -0
  6. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -0
  7. package/dist/builtin-extensions/ashxj-thinking.d.ts +66 -0
  8. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -0
  9. package/dist/builtin-extensions/ashxj-thinking.js +321 -0
  10. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -0
  11. package/dist/builtin-extensions/ashxj-tui.d.ts +148 -0
  12. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -0
  13. package/dist/builtin-extensions/ashxj-tui.js +679 -0
  14. package/dist/builtin-extensions/ashxj-tui.js.map +1 -0
  15. package/dist/builtin-extensions/index.d.ts +34 -0
  16. package/dist/builtin-extensions/index.d.ts.map +1 -0
  17. package/dist/builtin-extensions/index.js +81 -0
  18. package/dist/builtin-extensions/index.js.map +1 -0
  19. package/dist/builtin-extensions/lunr-cron.d.ts +26 -0
  20. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -0
  21. package/dist/builtin-extensions/lunr-cron.js +351 -0
  22. package/dist/builtin-extensions/lunr-cron.js.map +1 -0
  23. package/dist/builtin-extensions/lunr-local-providers/index.d.ts +20 -0
  24. package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -0
  25. package/dist/builtin-extensions/lunr-local-providers/index.js +130 -0
  26. package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -0
  27. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +51 -0
  28. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -0
  29. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +130 -0
  30. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -0
  31. package/dist/builtin-extensions/lunr-plan-tools.d.ts +25 -0
  32. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -0
  33. package/dist/builtin-extensions/lunr-plan-tools.js +59 -0
  34. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -0
  35. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +12 -0
  36. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -0
  37. package/dist/builtin-extensions/lunr-skill-creator/index.js +18 -0
  38. package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -0
  39. package/dist/builtin-extensions/lunr-skill-creator/skills/skill-creator/SKILL.md +68 -0
  40. package/dist/builtin-extensions/lunr-todos.d.ts +50 -0
  41. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -0
  42. package/dist/builtin-extensions/lunr-todos.js +210 -0
  43. package/dist/builtin-extensions/lunr-todos.js.map +1 -0
  44. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts +23 -0
  45. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -0
  46. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js +77 -0
  47. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -0
  48. package/dist/builtin-extensions/narumiruna-pi-goal/src/command.d.ts +18 -0
  49. package/dist/builtin-extensions/narumiruna-pi-goal/src/command.d.ts.map +1 -0
  50. package/dist/builtin-extensions/narumiruna-pi-goal/src/command.js +165 -0
  51. package/dist/builtin-extensions/narumiruna-pi-goal/src/command.js.map +1 -0
  52. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts +19 -0
  53. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -0
  54. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +499 -0
  55. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -0
  56. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +10 -0
  57. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -0
  58. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +885 -0
  59. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -0
  60. package/dist/builtin-extensions/narumiruna-pi-goal/src/persistence.d.ts +57 -0
  61. package/dist/builtin-extensions/narumiruna-pi-goal/src/persistence.d.ts.map +1 -0
  62. package/dist/builtin-extensions/narumiruna-pi-goal/src/persistence.js +225 -0
  63. package/dist/builtin-extensions/narumiruna-pi-goal/src/persistence.js.map +1 -0
  64. package/dist/builtin-extensions/narumiruna-pi-goal/src/prompts.d.ts +20 -0
  65. package/dist/builtin-extensions/narumiruna-pi-goal/src/prompts.d.ts.map +1 -0
  66. package/dist/builtin-extensions/narumiruna-pi-goal/src/prompts.js +75 -0
  67. package/dist/builtin-extensions/narumiruna-pi-goal/src/prompts.js.map +1 -0
  68. package/dist/builtin-extensions/narumiruna-pi-goal/src/queue.d.ts +16 -0
  69. package/dist/builtin-extensions/narumiruna-pi-goal/src/queue.d.ts.map +1 -0
  70. package/dist/builtin-extensions/narumiruna-pi-goal/src/queue.js +67 -0
  71. package/dist/builtin-extensions/narumiruna-pi-goal/src/queue.js.map +1 -0
  72. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +158 -0
  73. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -0
  74. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +835 -0
  75. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -0
  76. package/dist/builtin-extensions/narumiruna-pi-goal/src/settings.d.ts +22 -0
  77. package/dist/builtin-extensions/narumiruna-pi-goal/src/settings.d.ts.map +1 -0
  78. package/dist/builtin-extensions/narumiruna-pi-goal/src/settings.js +64 -0
  79. package/dist/builtin-extensions/narumiruna-pi-goal/src/settings.js.map +1 -0
  80. package/dist/builtin-extensions/pi-intercom/broker/broker.d.ts +2 -0
  81. package/dist/builtin-extensions/pi-intercom/broker/broker.d.ts.map +1 -0
  82. package/dist/builtin-extensions/pi-intercom/broker/broker.js +541 -0
  83. package/dist/builtin-extensions/pi-intercom/broker/broker.js.map +1 -0
  84. package/dist/builtin-extensions/pi-intercom/broker/client.d.ts +39 -0
  85. package/dist/builtin-extensions/pi-intercom/broker/client.d.ts.map +1 -0
  86. package/dist/builtin-extensions/pi-intercom/broker/client.js +484 -0
  87. package/dist/builtin-extensions/pi-intercom/broker/client.js.map +1 -0
  88. package/dist/builtin-extensions/pi-intercom/broker/framing.d.ts +14 -0
  89. package/dist/builtin-extensions/pi-intercom/broker/framing.d.ts.map +1 -0
  90. package/dist/builtin-extensions/pi-intercom/broker/framing.js +74 -0
  91. package/dist/builtin-extensions/pi-intercom/broker/framing.js.map +1 -0
  92. package/dist/builtin-extensions/pi-intercom/broker/paths.d.ts +22 -0
  93. package/dist/builtin-extensions/pi-intercom/broker/paths.d.ts.map +1 -0
  94. package/dist/builtin-extensions/pi-intercom/broker/paths.js +88 -0
  95. package/dist/builtin-extensions/pi-intercom/broker/paths.js.map +1 -0
  96. package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts +27 -0
  97. package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts.map +1 -0
  98. package/dist/builtin-extensions/pi-intercom/broker/spawn.js +313 -0
  99. package/dist/builtin-extensions/pi-intercom/broker/spawn.js.map +1 -0
  100. package/dist/builtin-extensions/pi-intercom/config.d.ts +22 -0
  101. package/dist/builtin-extensions/pi-intercom/config.d.ts.map +1 -0
  102. package/dist/builtin-extensions/pi-intercom/config.js +103 -0
  103. package/dist/builtin-extensions/pi-intercom/config.js.map +1 -0
  104. package/dist/builtin-extensions/pi-intercom/index.d.ts +3 -0
  105. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -0
  106. package/dist/builtin-extensions/pi-intercom/index.js +1800 -0
  107. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -0
  108. package/dist/builtin-extensions/pi-intercom/reply-tracker.d.ts +27 -0
  109. package/dist/builtin-extensions/pi-intercom/reply-tracker.d.ts.map +1 -0
  110. package/dist/builtin-extensions/pi-intercom/reply-tracker.js +101 -0
  111. package/dist/builtin-extensions/pi-intercom/reply-tracker.js.map +1 -0
  112. package/dist/builtin-extensions/pi-intercom/types.d.ts +84 -0
  113. package/dist/builtin-extensions/pi-intercom/types.d.ts.map +1 -0
  114. package/dist/builtin-extensions/pi-intercom/types.js +2 -0
  115. package/dist/builtin-extensions/pi-intercom/types.js.map +1 -0
  116. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +27 -0
  117. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -0
  118. package/dist/builtin-extensions/pi-intercom/ui/compose.js +112 -0
  119. package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -0
  120. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +15 -0
  121. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -0
  122. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +86 -0
  123. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -0
  124. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +18 -0
  125. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -0
  126. package/dist/builtin-extensions/pi-intercom/ui/session-list.js +134 -0
  127. package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -0
  128. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/bemol.d.ts +81 -0
  129. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/bemol.d.ts.map +1 -0
  130. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/bemol.js +273 -0
  131. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/bemol.js.map +1 -0
  132. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +13 -0
  133. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -0
  134. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +163 -0
  135. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -0
  136. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/locks.d.ts +34 -0
  137. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/locks.d.ts.map +1 -0
  138. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/locks.js +148 -0
  139. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/locks.js.map +1 -0
  140. package/dist/builtin-extensions/pi-lsp-extension/src/file-sync.d.ts +59 -0
  141. package/dist/builtin-extensions/pi-lsp-extension/src/file-sync.d.ts.map +1 -0
  142. package/dist/builtin-extensions/pi-lsp-extension/src/file-sync.js +172 -0
  143. package/dist/builtin-extensions/pi-lsp-extension/src/file-sync.js.map +1 -0
  144. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +25 -0
  145. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -0
  146. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +521 -0
  147. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -0
  148. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +80 -0
  149. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -0
  150. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +366 -0
  151. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -0
  152. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-daemon.d.ts +22 -0
  153. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-daemon.d.ts.map +1 -0
  154. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-daemon.js +476 -0
  155. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-daemon.js.map +1 -0
  156. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +141 -0
  157. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -0
  158. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +633 -0
  159. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -0
  160. package/dist/builtin-extensions/pi-lsp-extension/src/resolve-provider.d.ts +30 -0
  161. package/dist/builtin-extensions/pi-lsp-extension/src/resolve-provider.d.ts.map +1 -0
  162. package/dist/builtin-extensions/pi-lsp-extension/src/resolve-provider.js +52 -0
  163. package/dist/builtin-extensions/pi-lsp-extension/src/resolve-provider.js.map +1 -0
  164. package/dist/builtin-extensions/pi-lsp-extension/src/shared/constants.d.ts +12 -0
  165. package/dist/builtin-extensions/pi-lsp-extension/src/shared/constants.d.ts.map +1 -0
  166. package/dist/builtin-extensions/pi-lsp-extension/src/shared/constants.js +18 -0
  167. package/dist/builtin-extensions/pi-lsp-extension/src/shared/constants.js.map +1 -0
  168. package/dist/builtin-extensions/pi-lsp-extension/src/shared/debug.d.ts +10 -0
  169. package/dist/builtin-extensions/pi-lsp-extension/src/shared/debug.d.ts.map +1 -0
  170. package/dist/builtin-extensions/pi-lsp-extension/src/shared/debug.js +18 -0
  171. package/dist/builtin-extensions/pi-lsp-extension/src/shared/debug.js.map +1 -0
  172. package/dist/builtin-extensions/pi-lsp-extension/src/shared/format.d.ts +9 -0
  173. package/dist/builtin-extensions/pi-lsp-extension/src/shared/format.d.ts.map +1 -0
  174. package/dist/builtin-extensions/pi-lsp-extension/src/shared/format.js +29 -0
  175. package/dist/builtin-extensions/pi-lsp-extension/src/shared/format.js.map +1 -0
  176. package/dist/builtin-extensions/pi-lsp-extension/src/shared/language-map.d.ts +10 -0
  177. package/dist/builtin-extensions/pi-lsp-extension/src/shared/language-map.d.ts.map +1 -0
  178. package/dist/builtin-extensions/pi-lsp-extension/src/shared/language-map.js +51 -0
  179. package/dist/builtin-extensions/pi-lsp-extension/src/shared/language-map.js.map +1 -0
  180. package/dist/builtin-extensions/pi-lsp-extension/src/shared/resolve-position.d.ts +33 -0
  181. package/dist/builtin-extensions/pi-lsp-extension/src/shared/resolve-position.d.ts.map +1 -0
  182. package/dist/builtin-extensions/pi-lsp-extension/src/shared/resolve-position.js +191 -0
  183. package/dist/builtin-extensions/pi-lsp-extension/src/shared/resolve-position.js.map +1 -0
  184. package/dist/builtin-extensions/pi-lsp-extension/src/shared/timing.d.ts +14 -0
  185. package/dist/builtin-extensions/pi-lsp-extension/src/shared/timing.d.ts.map +1 -0
  186. package/dist/builtin-extensions/pi-lsp-extension/src/shared/timing.js +15 -0
  187. package/dist/builtin-extensions/pi-lsp-extension/src/shared/timing.js.map +1 -0
  188. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +23 -0
  189. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -0
  190. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +259 -0
  191. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -0
  192. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +23 -0
  193. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -0
  194. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +197 -0
  195. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -0
  196. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +23 -0
  197. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -0
  198. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +131 -0
  199. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -0
  200. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +18 -0
  201. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -0
  202. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js +87 -0
  203. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -0
  204. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +34 -0
  205. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -0
  206. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +347 -0
  207. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -0
  208. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +20 -0
  209. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -0
  210. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +166 -0
  211. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -0
  212. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +22 -0
  213. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -0
  214. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +228 -0
  215. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -0
  216. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +19 -0
  217. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -0
  218. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +143 -0
  219. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -0
  220. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +20 -0
  221. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -0
  222. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +98 -0
  223. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -0
  224. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +22 -0
  225. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -0
  226. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +150 -0
  227. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -0
  228. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +18 -0
  229. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -0
  230. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +211 -0
  231. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -0
  232. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/parser-manager.d.ts +44 -0
  233. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/parser-manager.d.ts.map +1 -0
  234. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/parser-manager.js +188 -0
  235. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/parser-manager.js.map +1 -0
  236. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/pattern-compiler.d.ts +58 -0
  237. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/pattern-compiler.d.ts.map +1 -0
  238. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/pattern-compiler.js +260 -0
  239. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/pattern-compiler.js.map +1 -0
  240. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +33 -0
  241. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -0
  242. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +102 -0
  243. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -0
  244. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +38 -0
  245. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -0
  246. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +276 -0
  247. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -0
  248. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/symbol-extractor.d.ts +77 -0
  249. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/symbol-extractor.d.ts.map +1 -0
  250. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/symbol-extractor.js +339 -0
  251. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/symbol-extractor.js.map +1 -0
  252. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/workspace-index.d.ts +51 -0
  253. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/workspace-index.d.ts.map +1 -0
  254. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/workspace-index.js +219 -0
  255. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/workspace-index.js.map +1 -0
  256. package/dist/builtin-extensions/pi-lsp-extension/src/workspace-provider.d.ts +45 -0
  257. package/dist/builtin-extensions/pi-lsp-extension/src/workspace-provider.d.ts.map +1 -0
  258. package/dist/builtin-extensions/pi-lsp-extension/src/workspace-provider.js +30 -0
  259. package/dist/builtin-extensions/pi-lsp-extension/src/workspace-provider.js.map +1 -0
  260. package/dist/builtin-extensions/pi-mcp-adapter/abort.d.ts +3 -0
  261. package/dist/builtin-extensions/pi-mcp-adapter/abort.d.ts.map +1 -0
  262. package/dist/builtin-extensions/pi-mcp-adapter/abort.js +37 -0
  263. package/dist/builtin-extensions/pi-mcp-adapter/abort.js.map +1 -0
  264. package/dist/builtin-extensions/pi-mcp-adapter/agent-dir.d.ts +3 -0
  265. package/dist/builtin-extensions/pi-mcp-adapter/agent-dir.d.ts.map +1 -0
  266. package/dist/builtin-extensions/pi-mcp-adapter/agent-dir.js +22 -0
  267. package/dist/builtin-extensions/pi-mcp-adapter/agent-dir.js.map +1 -0
  268. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +18 -0
  269. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -0
  270. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +327 -0
  271. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -0
  272. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +79 -0
  273. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -0
  274. package/dist/builtin-extensions/pi-mcp-adapter/config.js +557 -0
  275. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -0
  276. package/dist/builtin-extensions/pi-mcp-adapter/consent-manager.d.ts +14 -0
  277. package/dist/builtin-extensions/pi-mcp-adapter/consent-manager.d.ts.map +1 -0
  278. package/dist/builtin-extensions/pi-mcp-adapter/consent-manager.js +61 -0
  279. package/dist/builtin-extensions/pi-mcp-adapter/consent-manager.js.map +1 -0
  280. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +11 -0
  281. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -0
  282. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +374 -0
  283. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -0
  284. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +18 -0
  285. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -0
  286. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js +309 -0
  287. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -0
  288. package/dist/builtin-extensions/pi-mcp-adapter/error-signal.d.ts +16 -0
  289. package/dist/builtin-extensions/pi-mcp-adapter/error-signal.d.ts.map +1 -0
  290. package/dist/builtin-extensions/pi-mcp-adapter/error-signal.js +23 -0
  291. package/dist/builtin-extensions/pi-mcp-adapter/error-signal.js.map +1 -0
  292. package/dist/builtin-extensions/pi-mcp-adapter/errors.d.ts +100 -0
  293. package/dist/builtin-extensions/pi-mcp-adapter/errors.d.ts.map +1 -0
  294. package/dist/builtin-extensions/pi-mcp-adapter/errors.js +167 -0
  295. package/dist/builtin-extensions/pi-mcp-adapter/errors.js.map +1 -0
  296. package/dist/builtin-extensions/pi-mcp-adapter/glimpse-ui.d.ts +10 -0
  297. package/dist/builtin-extensions/pi-mcp-adapter/glimpse-ui.d.ts.map +1 -0
  298. package/dist/builtin-extensions/pi-mcp-adapter/glimpse-ui.js +77 -0
  299. package/dist/builtin-extensions/pi-mcp-adapter/glimpse-ui.js.map +1 -0
  300. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts +17 -0
  301. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -0
  302. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +413 -0
  303. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -0
  304. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +3 -0
  305. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -0
  306. package/dist/builtin-extensions/pi-mcp-adapter/index.js +334 -0
  307. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -0
  308. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +11 -0
  309. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -0
  310. package/dist/builtin-extensions/pi-mcp-adapter/init.js +296 -0
  311. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -0
  312. package/dist/builtin-extensions/pi-mcp-adapter/lifecycle.d.ts +30 -0
  313. package/dist/builtin-extensions/pi-mcp-adapter/lifecycle.d.ts.map +1 -0
  314. package/dist/builtin-extensions/pi-mcp-adapter/lifecycle.js +80 -0
  315. package/dist/builtin-extensions/pi-mcp-adapter/lifecycle.js.map +1 -0
  316. package/dist/builtin-extensions/pi-mcp-adapter/logger.d.ts +52 -0
  317. package/dist/builtin-extensions/pi-mcp-adapter/logger.d.ts.map +1 -0
  318. package/dist/builtin-extensions/pi-mcp-adapter/logger.js +132 -0
  319. package/dist/builtin-extensions/pi-mcp-adapter/logger.js.map +1 -0
  320. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +86 -0
  321. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -0
  322. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +482 -0
  323. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -0
  324. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth.d.ts +104 -0
  325. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth.d.ts.map +1 -0
  326. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth.js +252 -0
  327. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth.js.map +1 -0
  328. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +45 -0
  329. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -0
  330. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +305 -0
  331. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -0
  332. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +111 -0
  333. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -0
  334. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +302 -0
  335. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -0
  336. package/dist/builtin-extensions/pi-mcp-adapter/mcp-output-guard.d.ts +59 -0
  337. package/dist/builtin-extensions/pi-mcp-adapter/mcp-output-guard.d.ts.map +1 -0
  338. package/dist/builtin-extensions/pi-mcp-adapter/mcp-output-guard.js +325 -0
  339. package/dist/builtin-extensions/pi-mcp-adapter/mcp-output-guard.js.map +1 -0
  340. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts +64 -0
  341. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -0
  342. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +777 -0
  343. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -0
  344. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts +77 -0
  345. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -0
  346. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +490 -0
  347. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -0
  348. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts +32 -0
  349. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts.map +1 -0
  350. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js +160 -0
  351. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js.map +1 -0
  352. package/dist/builtin-extensions/pi-mcp-adapter/npx-resolver.d.ts +7 -0
  353. package/dist/builtin-extensions/pi-mcp-adapter/npx-resolver.d.ts.map +1 -0
  354. package/dist/builtin-extensions/pi-mcp-adapter/npx-resolver.js +388 -0
  355. package/dist/builtin-extensions/pi-mcp-adapter/npx-resolver.js.map +1 -0
  356. package/dist/builtin-extensions/pi-mcp-adapter/oauth-handler.d.ts +19 -0
  357. package/dist/builtin-extensions/pi-mcp-adapter/oauth-handler.d.ts.map +1 -0
  358. package/dist/builtin-extensions/pi-mcp-adapter/oauth-handler.js +53 -0
  359. package/dist/builtin-extensions/pi-mcp-adapter/oauth-handler.js.map +1 -0
  360. package/dist/builtin-extensions/pi-mcp-adapter/onboarding-state.d.ts +13 -0
  361. package/dist/builtin-extensions/pi-mcp-adapter/onboarding-state.d.ts.map +1 -0
  362. package/dist/builtin-extensions/pi-mcp-adapter/onboarding-state.js +58 -0
  363. package/dist/builtin-extensions/pi-mcp-adapter/onboarding-state.js.map +1 -0
  364. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts +17 -0
  365. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -0
  366. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +17 -0
  367. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -0
  368. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +14 -0
  369. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -0
  370. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +853 -0
  371. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -0
  372. package/dist/builtin-extensions/pi-mcp-adapter/resource-tools.d.ts +2 -0
  373. package/dist/builtin-extensions/pi-mcp-adapter/resource-tools.d.ts.map +1 -0
  374. package/dist/builtin-extensions/pi-mcp-adapter/resource-tools.js +16 -0
  375. package/dist/builtin-extensions/pi-mcp-adapter/resource-tools.js.map +1 -0
  376. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +16 -0
  377. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -0
  378. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +209 -0
  379. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -0
  380. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts +58 -0
  381. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -0
  382. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +403 -0
  383. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -0
  384. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +41 -0
  385. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -0
  386. package/dist/builtin-extensions/pi-mcp-adapter/state.js +2 -0
  387. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -0
  388. package/dist/builtin-extensions/pi-mcp-adapter/tool-metadata.d.ts +11 -0
  389. package/dist/builtin-extensions/pi-mcp-adapter/tool-metadata.d.ts.map +1 -0
  390. package/dist/builtin-extensions/pi-mcp-adapter/tool-metadata.js +178 -0
  391. package/dist/builtin-extensions/pi-mcp-adapter/tool-metadata.js.map +1 -0
  392. package/dist/builtin-extensions/pi-mcp-adapter/tool-registrar.d.ts +11 -0
  393. package/dist/builtin-extensions/pi-mcp-adapter/tool-registrar.d.ts.map +1 -0
  394. package/dist/builtin-extensions/pi-mcp-adapter/tool-registrar.js +66 -0
  395. package/dist/builtin-extensions/pi-mcp-adapter/tool-registrar.js.map +1 -0
  396. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +35 -0
  397. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -0
  398. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +107 -0
  399. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -0
  400. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +286 -0
  401. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -0
  402. package/dist/builtin-extensions/pi-mcp-adapter/types.js +94 -0
  403. package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -0
  404. package/dist/builtin-extensions/pi-mcp-adapter/ui-resource-handler.d.ts +10 -0
  405. package/dist/builtin-extensions/pi-mcp-adapter/ui-resource-handler.d.ts.map +1 -0
  406. package/dist/builtin-extensions/pi-mcp-adapter/ui-resource-handler.js +118 -0
  407. package/dist/builtin-extensions/pi-mcp-adapter/ui-resource-handler.js.map +1 -0
  408. package/dist/builtin-extensions/pi-mcp-adapter/ui-server.d.ts +37 -0
  409. package/dist/builtin-extensions/pi-mcp-adapter/ui-server.d.ts.map +1 -0
  410. package/dist/builtin-extensions/pi-mcp-adapter/ui-server.js +524 -0
  411. package/dist/builtin-extensions/pi-mcp-adapter/ui-server.js.map +1 -0
  412. package/dist/builtin-extensions/pi-mcp-adapter/ui-session.d.ts +27 -0
  413. package/dist/builtin-extensions/pi-mcp-adapter/ui-session.d.ts.map +1 -0
  414. package/dist/builtin-extensions/pi-mcp-adapter/ui-session.js +311 -0
  415. package/dist/builtin-extensions/pi-mcp-adapter/ui-session.js.map +1 -0
  416. package/dist/builtin-extensions/pi-mcp-adapter/ui-stream-types.d.ts +105 -0
  417. package/dist/builtin-extensions/pi-mcp-adapter/ui-stream-types.d.ts.map +1 -0
  418. package/dist/builtin-extensions/pi-mcp-adapter/ui-stream-types.js +60 -0
  419. package/dist/builtin-extensions/pi-mcp-adapter/ui-stream-types.js.map +1 -0
  420. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +18 -0
  421. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -0
  422. package/dist/builtin-extensions/pi-mcp-adapter/utils.js +112 -0
  423. package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -0
  424. package/dist/builtin-extensions/pi-mcp-adapter/vitest.config.d.ts +3 -0
  425. package/dist/builtin-extensions/pi-mcp-adapter/vitest.config.d.ts.map +1 -0
  426. package/dist/builtin-extensions/pi-mcp-adapter/vitest.config.js +15 -0
  427. package/dist/builtin-extensions/pi-mcp-adapter/vitest.config.js.map +1 -0
  428. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +30 -0
  429. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -0
  430. package/dist/builtin-extensions/pi-ollama-cloud/index.js +99 -0
  431. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -0
  432. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +49 -0
  433. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -0
  434. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +3 -0
  435. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -0
  436. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js +1135 -0
  437. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -0
  438. package/dist/builtin-extensions/pi-ollama-cloud/models.js +239 -0
  439. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -0
  440. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +40 -0
  441. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -0
  442. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js +80 -0
  443. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -0
  444. package/dist/builtin-extensions/pi-ollama-cloud/utils.d.ts +9 -0
  445. package/dist/builtin-extensions/pi-ollama-cloud/utils.d.ts.map +1 -0
  446. package/dist/builtin-extensions/pi-ollama-cloud/utils.js +52 -0
  447. package/dist/builtin-extensions/pi-ollama-cloud/utils.js.map +1 -0
  448. package/dist/builtin-extensions/pi-prompt-template-model/args.d.ts +56 -0
  449. package/dist/builtin-extensions/pi-prompt-template-model/args.d.ts.map +1 -0
  450. package/dist/builtin-extensions/pi-prompt-template-model/args.js +555 -0
  451. package/dist/builtin-extensions/pi-prompt-template-model/args.js.map +1 -0
  452. package/dist/builtin-extensions/pi-prompt-template-model/chain-parser.d.ts +22 -0
  453. package/dist/builtin-extensions/pi-prompt-template-model/chain-parser.d.ts.map +1 -0
  454. package/dist/builtin-extensions/pi-prompt-template-model/chain-parser.js +249 -0
  455. package/dist/builtin-extensions/pi-prompt-template-model/chain-parser.js.map +1 -0
  456. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +20 -0
  457. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -0
  458. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +102 -0
  459. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -0
  460. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-step.d.ts +30 -0
  461. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-step.d.ts.map +1 -0
  462. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-step.js +260 -0
  463. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-step.js.map +1 -0
  464. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +3 -0
  465. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -0
  466. package/dist/builtin-extensions/pi-prompt-template-model/index.js +1403 -0
  467. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -0
  468. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +8 -0
  469. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -0
  470. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js +164 -0
  471. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -0
  472. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +22 -0
  473. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -0
  474. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js +82 -0
  475. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -0
  476. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +6 -0
  477. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -0
  478. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js +21 -0
  479. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -0
  480. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +24 -0
  481. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -0
  482. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js +56 -0
  483. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -0
  484. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +80 -0
  485. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -0
  486. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1234 -0
  487. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -0
  488. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +11 -0
  489. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -0
  490. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +31 -0
  491. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -0
  492. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +43 -0
  493. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -0
  494. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +177 -0
  495. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -0
  496. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts +97 -0
  497. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.d.ts.map +1 -0
  498. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js +64 -0
  499. package/dist/builtin-extensions/pi-prompt-template-model/subagent-runtime.js.map +1 -0
  500. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +48 -0
  501. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -0
  502. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +550 -0
  503. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -0
  504. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +8 -0
  505. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -0
  506. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +230 -0
  507. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -0
  508. package/dist/builtin-extensions/pi-prompt-template-model/template-conditionals.d.ts +10 -0
  509. package/dist/builtin-extensions/pi-prompt-template-model/template-conditionals.d.ts.map +1 -0
  510. package/dist/builtin-extensions/pi-prompt-template-model/template-conditionals.js +226 -0
  511. package/dist/builtin-extensions/pi-prompt-template-model/template-conditionals.js.map +1 -0
  512. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +17 -0
  513. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -0
  514. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +201 -0
  515. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -0
  516. package/dist/builtin-extensions/pi-subagents/index.d.ts +2 -0
  517. package/dist/builtin-extensions/pi-subagents/index.d.ts.map +1 -0
  518. package/dist/builtin-extensions/pi-subagents/index.js +3 -0
  519. package/dist/builtin-extensions/pi-subagents/index.js.map +1 -0
  520. package/dist/builtin-extensions/pi-subagents/src/agents/frontmatter.d.ts +11 -0
  521. package/dist/builtin-extensions/pi-subagents/src/agents/frontmatter.d.ts.map +1 -0
  522. package/dist/builtin-extensions/pi-subagents/src/agents/frontmatter.js +84 -0
  523. package/dist/builtin-extensions/pi-subagents/src/agents/frontmatter.js.map +1 -0
  524. package/dist/builtin-extensions/pi-subagents/src/agents/skills.d.ts +33 -0
  525. package/dist/builtin-extensions/pi-subagents/src/agents/skills.d.ts.map +1 -0
  526. package/dist/builtin-extensions/pi-subagents/src/agents/skills.js +674 -0
  527. package/dist/builtin-extensions/pi-subagents/src/agents/skills.js.map +1 -0
  528. package/dist/builtin-extensions/pi-subagents/src/api/background-work.d.ts +35 -0
  529. package/dist/builtin-extensions/pi-subagents/src/api/background-work.d.ts.map +1 -0
  530. package/dist/builtin-extensions/pi-subagents/src/api/background-work.js +162 -0
  531. package/dist/builtin-extensions/pi-subagents/src/api/background-work.js.map +1 -0
  532. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts +113 -0
  533. package/dist/builtin-extensions/pi-subagents/src/api/delegation.d.ts.map +1 -0
  534. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js +10 -0
  535. package/dist/builtin-extensions/pi-subagents/src/api/delegation.js.map +1 -0
  536. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.d.ts +34 -0
  537. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.d.ts.map +1 -0
  538. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js +125 -0
  539. package/dist/builtin-extensions/pi-subagents/src/extension/chain-validation.js.map +1 -0
  540. package/dist/builtin-extensions/pi-subagents/src/extension/config.d.ts +6 -0
  541. package/dist/builtin-extensions/pi-subagents/src/extension/config.d.ts.map +1 -0
  542. package/dist/builtin-extensions/pi-subagents/src/extension/config.js +37 -0
  543. package/dist/builtin-extensions/pi-subagents/src/extension/config.js.map +1 -0
  544. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +21 -0
  545. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -0
  546. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js +70 -0
  547. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -0
  548. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts +31 -0
  549. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.d.ts.map +1 -0
  550. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js +152 -0
  551. package/dist/builtin-extensions/pi-subagents/src/extension/doctor.js.map +1 -0
  552. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +3 -0
  553. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -0
  554. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js +174 -0
  555. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -0
  556. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +17 -0
  557. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -0
  558. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +565 -0
  559. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -0
  560. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +57 -0
  561. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -0
  562. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js +291 -0
  563. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -0
  564. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +228 -0
  565. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -0
  566. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +305 -0
  567. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -0
  568. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +15 -0
  569. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -0
  570. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js +23 -0
  571. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -0
  572. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +12 -0
  573. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -0
  574. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +209 -0
  575. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -0
  576. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts +35 -0
  577. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -0
  578. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +144 -0
  579. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -0
  580. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +36 -0
  581. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -0
  582. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +626 -0
  583. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -0
  584. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts +31 -0
  585. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts.map +1 -0
  586. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js +331 -0
  587. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js.map +1 -0
  588. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +166 -0
  589. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -0
  590. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +1049 -0
  591. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -0
  592. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +20 -0
  593. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -0
  594. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +500 -0
  595. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -0
  596. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts +65 -0
  597. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -0
  598. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +512 -0
  599. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -0
  600. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +96 -0
  601. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -0
  602. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +336 -0
  603. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -0
  604. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +15 -0
  605. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -0
  606. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js +47 -0
  607. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -0
  608. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts +31 -0
  609. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -0
  610. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +260 -0
  611. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -0
  612. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts +35 -0
  613. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -0
  614. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +146 -0
  615. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -0
  616. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-batcher.d.ts +52 -0
  617. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-batcher.d.ts.map +1 -0
  618. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-batcher.js +119 -0
  619. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-batcher.js.map +1 -0
  620. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-dedupe.d.ts +14 -0
  621. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-dedupe.d.ts.map +1 -0
  622. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-dedupe.js +55 -0
  623. package/dist/builtin-extensions/pi-subagents/src/runs/background/completion-dedupe.js.map +1 -0
  624. package/dist/builtin-extensions/pi-subagents/src/runs/background/control-channel.d.ts +182 -0
  625. package/dist/builtin-extensions/pi-subagents/src/runs/background/control-channel.d.ts.map +1 -0
  626. package/dist/builtin-extensions/pi-subagents/src/runs/background/control-channel.js +487 -0
  627. package/dist/builtin-extensions/pi-subagents/src/runs/background/control-channel.js.map +1 -0
  628. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +43 -0
  629. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -0
  630. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +518 -0
  631. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -0
  632. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +63 -0
  633. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -0
  634. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +202 -0
  635. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -0
  636. package/dist/builtin-extensions/pi-subagents/src/runs/background/parallel-groups.d.ts +4 -0
  637. package/dist/builtin-extensions/pi-subagents/src/runs/background/parallel-groups.d.ts.map +1 -0
  638. package/dist/builtin-extensions/pi-subagents/src/runs/background/parallel-groups.js +47 -0
  639. package/dist/builtin-extensions/pi-subagents/src/runs/background/parallel-groups.js.map +1 -0
  640. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts +22 -0
  641. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -0
  642. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +247 -0
  643. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -0
  644. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-id-resolver.d.ts +23 -0
  645. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-id-resolver.d.ts.map +1 -0
  646. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-id-resolver.js +91 -0
  647. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-id-resolver.js.map +1 -0
  648. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +24 -0
  649. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -0
  650. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +453 -0
  651. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -0
  652. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +52 -0
  653. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -0
  654. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js +473 -0
  655. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -0
  656. package/dist/builtin-extensions/pi-subagents/src/runs/background/stale-run-reconciler.d.ts +34 -0
  657. package/dist/builtin-extensions/pi-subagents/src/runs/background/stale-run-reconciler.d.ts.map +1 -0
  658. package/dist/builtin-extensions/pi-subagents/src/runs/background/stale-run-reconciler.js +351 -0
  659. package/dist/builtin-extensions/pi-subagents/src/runs/background/stale-run-reconciler.js.map +1 -0
  660. package/dist/builtin-extensions/pi-subagents/src/runs/background/steering.d.ts +44 -0
  661. package/dist/builtin-extensions/pi-subagents/src/runs/background/steering.d.ts.map +1 -0
  662. package/dist/builtin-extensions/pi-subagents/src/runs/background/steering.js +228 -0
  663. package/dist/builtin-extensions/pi-subagents/src/runs/background/steering.js.map +1 -0
  664. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +2 -0
  665. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -0
  666. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3534 -0
  667. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -0
  668. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +95 -0
  669. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -0
  670. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +387 -0
  671. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -0
  672. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts +8 -0
  673. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts.map +1 -0
  674. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js +6 -0
  675. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js.map +1 -0
  676. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-config.d.ts +7 -0
  677. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-config.d.ts.map +1 -0
  678. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-config.js +34 -0
  679. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-config.js.map +1 -0
  680. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +4 -0
  681. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -0
  682. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +24 -0
  683. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -0
  684. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +23 -0
  685. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -0
  686. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js +230 -0
  687. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -0
  688. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +127 -0
  689. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -0
  690. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1161 -0
  691. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -0
  692. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +82 -0
  693. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -0
  694. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +1042 -0
  695. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -0
  696. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +10 -0
  697. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -0
  698. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +1439 -0
  699. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -0
  700. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +85 -0
  701. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -0
  702. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +3468 -0
  703. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -0
  704. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts +65 -0
  705. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts.map +1 -0
  706. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js +1113 -0
  707. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js.map +1 -0
  708. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts +19 -0
  709. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts.map +1 -0
  710. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js +106 -0
  711. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js.map +1 -0
  712. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-protocol.d.ts +27 -0
  713. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-protocol.d.ts.map +1 -0
  714. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-protocol.js +108 -0
  715. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-protocol.js.map +1 -0
  716. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +25 -0
  717. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -0
  718. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +51 -0
  719. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -0
  720. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +19 -0
  721. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -0
  722. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js +51 -0
  723. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -0
  724. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.d.ts +49 -0
  725. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.d.ts.map +1 -0
  726. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js +291 -0
  727. package/dist/builtin-extensions/pi-subagents/src/runs/shared/dynamic-fanout.js.map +1 -0
  728. package/dist/builtin-extensions/pi-subagents/src/runs/shared/long-running-guard.d.ts +33 -0
  729. package/dist/builtin-extensions/pi-subagents/src/runs/shared/long-running-guard.d.ts.map +1 -0
  730. package/dist/builtin-extensions/pi-subagents/src/runs/shared/long-running-guard.js +152 -0
  731. package/dist/builtin-extensions/pi-subagents/src/runs/shared/long-running-guard.js.map +1 -0
  732. package/dist/builtin-extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.d.ts +18 -0
  733. package/dist/builtin-extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.d.ts.map +1 -0
  734. package/dist/builtin-extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +326 -0
  735. package/dist/builtin-extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.js.map +1 -0
  736. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +83 -0
  737. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -0
  738. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +299 -0
  739. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -0
  740. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-scope.d.ts +49 -0
  741. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-scope.d.ts.map +1 -0
  742. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-scope.js +98 -0
  743. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-scope.js.map +1 -0
  744. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-events.d.ts +121 -0
  745. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-events.d.ts.map +1 -0
  746. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-events.js +881 -0
  747. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-events.js.map +1 -0
  748. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-path.d.ts +11 -0
  749. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-path.d.ts.map +1 -0
  750. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-path.js +50 -0
  751. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-path.js.map +1 -0
  752. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-render.d.ts +19 -0
  753. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-render.d.ts.map +1 -0
  754. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-render.js +109 -0
  755. package/dist/builtin-extensions/pi-subagents/src/runs/shared/nested-render.js.map +1 -0
  756. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +106 -0
  757. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -0
  758. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +112 -0
  759. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -0
  760. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +87 -0
  761. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -0
  762. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +260 -0
  763. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -0
  764. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +25 -0
  765. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -0
  766. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +111 -0
  767. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -0
  768. package/dist/builtin-extensions/pi-subagents/src/runs/shared/run-history.d.ts +11 -0
  769. package/dist/builtin-extensions/pi-subagents/src/runs/shared/run-history.d.ts.map +1 -0
  770. package/dist/builtin-extensions/pi-subagents/src/runs/shared/run-history.js +57 -0
  771. package/dist/builtin-extensions/pi-subagents/src/runs/shared/run-history.js.map +1 -0
  772. package/dist/builtin-extensions/pi-subagents/src/runs/shared/session-lease.d.ts +54 -0
  773. package/dist/builtin-extensions/pi-subagents/src/runs/shared/session-lease.d.ts.map +1 -0
  774. package/dist/builtin-extensions/pi-subagents/src/runs/shared/session-lease.js +244 -0
  775. package/dist/builtin-extensions/pi-subagents/src/runs/shared/session-lease.js.map +1 -0
  776. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +50 -0
  777. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -0
  778. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js +202 -0
  779. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -0
  780. package/dist/builtin-extensions/pi-subagents/src/runs/shared/structured-output.d.ts +22 -0
  781. package/dist/builtin-extensions/pi-subagents/src/runs/shared/structured-output.d.ts.map +1 -0
  782. package/dist/builtin-extensions/pi-subagents/src/runs/shared/structured-output.js +67 -0
  783. package/dist/builtin-extensions/pi-subagents/src/runs/shared/structured-output.js.map +1 -0
  784. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts +35 -0
  785. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts.map +1 -0
  786. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js +187 -0
  787. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js.map +1 -0
  788. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +22 -0
  789. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -0
  790. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +438 -0
  791. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -0
  792. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts +35 -0
  793. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts.map +1 -0
  794. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js +157 -0
  795. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js.map +1 -0
  796. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-availability.d.ts +13 -0
  797. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-availability.d.ts.map +1 -0
  798. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-availability.js +51 -0
  799. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-availability.js.map +1 -0
  800. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-budget.d.ts +16 -0
  801. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-budget.d.ts.map +1 -0
  802. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-budget.js +74 -0
  803. package/dist/builtin-extensions/pi-subagents/src/runs/shared/tool-budget.js.map +1 -0
  804. package/dist/builtin-extensions/pi-subagents/src/runs/shared/turn-budget.d.ts +14 -0
  805. package/dist/builtin-extensions/pi-subagents/src/runs/shared/turn-budget.d.ts.map +1 -0
  806. package/dist/builtin-extensions/pi-subagents/src/runs/shared/turn-budget.js +66 -0
  807. package/dist/builtin-extensions/pi-subagents/src/runs/shared/turn-budget.js.map +1 -0
  808. package/dist/builtin-extensions/pi-subagents/src/runs/shared/workflow-graph.d.ts +30 -0
  809. package/dist/builtin-extensions/pi-subagents/src/runs/shared/workflow-graph.d.ts.map +1 -0
  810. package/dist/builtin-extensions/pi-subagents/src/runs/shared/workflow-graph.js +200 -0
  811. package/dist/builtin-extensions/pi-subagents/src/runs/shared/workflow-graph.js.map +1 -0
  812. package/dist/builtin-extensions/pi-subagents/src/runs/shared/worktree.d.ts +49 -0
  813. package/dist/builtin-extensions/pi-subagents/src/runs/shared/worktree.d.ts.map +1 -0
  814. package/dist/builtin-extensions/pi-subagents/src/runs/shared/worktree.js +473 -0
  815. package/dist/builtin-extensions/pi-subagents/src/runs/shared/worktree.js.map +1 -0
  816. package/dist/builtin-extensions/pi-subagents/src/shared/artifacts.d.ts +13 -0
  817. package/dist/builtin-extensions/pi-subagents/src/shared/artifacts.d.ts.map +1 -0
  818. package/dist/builtin-extensions/pi-subagents/src/shared/artifacts.js +104 -0
  819. package/dist/builtin-extensions/pi-subagents/src/shared/artifacts.js.map +1 -0
  820. package/dist/builtin-extensions/pi-subagents/src/shared/atomic-json.d.ts +17 -0
  821. package/dist/builtin-extensions/pi-subagents/src/shared/atomic-json.d.ts.map +1 -0
  822. package/dist/builtin-extensions/pi-subagents/src/shared/atomic-json.js +68 -0
  823. package/dist/builtin-extensions/pi-subagents/src/shared/atomic-json.js.map +1 -0
  824. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +70 -0
  825. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -0
  826. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +153 -0
  827. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -0
  828. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +36 -0
  829. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -0
  830. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js +173 -0
  831. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -0
  832. package/dist/builtin-extensions/pi-subagents/src/shared/file-coalescer.d.ts +11 -0
  833. package/dist/builtin-extensions/pi-subagents/src/shared/file-coalescer.d.ts.map +1 -0
  834. package/dist/builtin-extensions/pi-subagents/src/shared/file-coalescer.js +26 -0
  835. package/dist/builtin-extensions/pi-subagents/src/shared/file-coalescer.js.map +1 -0
  836. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts +44 -0
  837. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -0
  838. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +158 -0
  839. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -0
  840. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +34 -0
  841. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -0
  842. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +128 -0
  843. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -0
  844. package/dist/builtin-extensions/pi-subagents/src/shared/jsonl-writer.d.ts +20 -0
  845. package/dist/builtin-extensions/pi-subagents/src/shared/jsonl-writer.d.ts.map +1 -0
  846. package/dist/builtin-extensions/pi-subagents/src/shared/jsonl-writer.js +59 -0
  847. package/dist/builtin-extensions/pi-subagents/src/shared/jsonl-writer.js.map +1 -0
  848. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.d.ts +21 -0
  849. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.d.ts.map +1 -0
  850. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.js +22 -0
  851. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.js.map +1 -0
  852. package/dist/builtin-extensions/pi-subagents/src/shared/model-info.d.ts +31 -0
  853. package/dist/builtin-extensions/pi-subagents/src/shared/model-info.d.ts.map +1 -0
  854. package/dist/builtin-extensions/pi-subagents/src/shared/model-info.js +68 -0
  855. package/dist/builtin-extensions/pi-subagents/src/shared/model-info.js.map +1 -0
  856. package/dist/builtin-extensions/pi-subagents/src/shared/post-exit-stdio-guard.d.ts +17 -0
  857. package/dist/builtin-extensions/pi-subagents/src/shared/post-exit-stdio-guard.d.ts.map +1 -0
  858. package/dist/builtin-extensions/pi-subagents/src/shared/post-exit-stdio-guard.js +72 -0
  859. package/dist/builtin-extensions/pi-subagents/src/shared/post-exit-stdio-guard.js.map +1 -0
  860. package/dist/builtin-extensions/pi-subagents/src/shared/session-identity.d.ts +7 -0
  861. package/dist/builtin-extensions/pi-subagents/src/shared/session-identity.d.ts.map +1 -0
  862. package/dist/builtin-extensions/pi-subagents/src/shared/session-identity.js +7 -0
  863. package/dist/builtin-extensions/pi-subagents/src/shared/session-identity.js.map +1 -0
  864. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts +3 -0
  865. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts.map +1 -0
  866. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js +49 -0
  867. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js.map +1 -0
  868. package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts +141 -0
  869. package/dist/builtin-extensions/pi-subagents/src/shared/settings.d.ts.map +1 -0
  870. package/dist/builtin-extensions/pi-subagents/src/shared/settings.js +254 -0
  871. package/dist/builtin-extensions/pi-subagents/src/shared/settings.js.map +1 -0
  872. package/dist/builtin-extensions/pi-subagents/src/shared/status-format.d.ts +10 -0
  873. package/dist/builtin-extensions/pi-subagents/src/shared/status-format.d.ts.map +1 -0
  874. package/dist/builtin-extensions/pi-subagents/src/shared/status-format.js +61 -0
  875. package/dist/builtin-extensions/pi-subagents/src/shared/status-format.js.map +1 -0
  876. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +1166 -0
  877. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -0
  878. package/dist/builtin-extensions/pi-subagents/src/shared/types.js +229 -0
  879. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -0
  880. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +52 -0
  881. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -0
  882. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +562 -0
  883. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -0
  884. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts +149 -0
  885. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -0
  886. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js +321 -0
  887. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -0
  888. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts +11 -0
  889. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.d.ts.map +1 -0
  890. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js +102 -0
  891. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-request.js.map +1 -0
  892. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-template-bridge.d.ts +25 -0
  893. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-template-bridge.d.ts.map +1 -0
  894. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-template-bridge.js +200 -0
  895. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-template-bridge.js.map +1 -0
  896. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +23 -0
  897. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -0
  898. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +294 -0
  899. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -0
  900. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +31 -0
  901. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -0
  902. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js +117 -0
  903. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js.map +1 -0
  904. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +52 -0
  905. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -0
  906. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +1097 -0
  907. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -0
  908. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +22 -0
  909. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -0
  910. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js +246 -0
  911. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -0
  912. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +78 -0
  913. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -0
  914. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +401 -0
  915. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -0
  916. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +13 -0
  917. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -0
  918. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +74 -0
  919. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -0
  920. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +45 -0
  921. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -0
  922. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +1715 -0
  923. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -0
  924. package/dist/builtin-extensions/pi-subagents/src/watchdog/change-signature.d.ts +8 -0
  925. package/dist/builtin-extensions/pi-subagents/src/watchdog/change-signature.d.ts.map +1 -0
  926. package/dist/builtin-extensions/pi-subagents/src/watchdog/change-signature.js +123 -0
  927. package/dist/builtin-extensions/pi-subagents/src/watchdog/change-signature.js.map +1 -0
  928. package/dist/builtin-extensions/pi-subagents/src/watchdog/child-status.d.ts +58 -0
  929. package/dist/builtin-extensions/pi-subagents/src/watchdog/child-status.d.ts.map +1 -0
  930. package/dist/builtin-extensions/pi-subagents/src/watchdog/child-status.js +160 -0
  931. package/dist/builtin-extensions/pi-subagents/src/watchdog/child-status.js.map +1 -0
  932. package/dist/builtin-extensions/pi-subagents/src/watchdog/emission-guard.d.ts +34 -0
  933. package/dist/builtin-extensions/pi-subagents/src/watchdog/emission-guard.d.ts.map +1 -0
  934. package/dist/builtin-extensions/pi-subagents/src/watchdog/emission-guard.js +96 -0
  935. package/dist/builtin-extensions/pi-subagents/src/watchdog/emission-guard.js.map +1 -0
  936. package/dist/builtin-extensions/pi-subagents/src/watchdog/lsp-diagnostics.d.ts +18 -0
  937. package/dist/builtin-extensions/pi-subagents/src/watchdog/lsp-diagnostics.d.ts.map +1 -0
  938. package/dist/builtin-extensions/pi-subagents/src/watchdog/lsp-diagnostics.js +485 -0
  939. package/dist/builtin-extensions/pi-subagents/src/watchdog/lsp-diagnostics.js.map +1 -0
  940. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +21 -0
  941. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -0
  942. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js +151 -0
  943. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -0
  944. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +4 -0
  945. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -0
  946. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js +111 -0
  947. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -0
  948. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +10 -0
  949. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -0
  950. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +407 -0
  951. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -0
  952. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +12 -0
  953. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -0
  954. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +55 -0
  955. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -0
  956. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +29 -0
  957. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -0
  958. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +245 -0
  959. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -0
  960. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +142 -0
  961. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -0
  962. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js +648 -0
  963. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -0
  964. package/dist/builtin-extensions/pi-subagents/src/watchdog/settings.d.ts +30 -0
  965. package/dist/builtin-extensions/pi-subagents/src/watchdog/settings.d.ts.map +1 -0
  966. package/dist/builtin-extensions/pi-subagents/src/watchdog/settings.js +486 -0
  967. package/dist/builtin-extensions/pi-subagents/src/watchdog/settings.js.map +1 -0
  968. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +18 -0
  969. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -0
  970. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js +150 -0
  971. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -0
  972. package/dist/builtin-extensions/pi-subagents/src/watchdog/turn-delta.d.ts +10 -0
  973. package/dist/builtin-extensions/pi-subagents/src/watchdog/turn-delta.d.ts.map +1 -0
  974. package/dist/builtin-extensions/pi-subagents/src/watchdog/turn-delta.js +159 -0
  975. package/dist/builtin-extensions/pi-subagents/src/watchdog/turn-delta.js.map +1 -0
  976. package/dist/builtin-extensions/pi-subagents/src/watchdog/types.d.ts +143 -0
  977. package/dist/builtin-extensions/pi-subagents/src/watchdog/types.d.ts.map +1 -0
  978. package/dist/builtin-extensions/pi-subagents/src/watchdog/types.js +31 -0
  979. package/dist/builtin-extensions/pi-subagents/src/watchdog/types.js.map +1 -0
  980. package/dist/builtin-extensions/pi-subagents/src/watchdog/warning-format.d.ts +8 -0
  981. package/dist/builtin-extensions/pi-subagents/src/watchdog/warning-format.d.ts.map +1 -0
  982. package/dist/builtin-extensions/pi-subagents/src/watchdog/warning-format.js +62 -0
  983. package/dist/builtin-extensions/pi-subagents/src/watchdog/warning-format.js.map +1 -0
  984. package/dist/builtin-extensions/pi-tps.d.ts +3 -0
  985. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -0
  986. package/dist/builtin-extensions/pi-tps.js +89 -0
  987. package/dist/builtin-extensions/pi-tps.js.map +1 -0
  988. package/dist/builtin-extensions/pi-web-access/activity.d.ts +34 -0
  989. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -0
  990. package/dist/builtin-extensions/pi-web-access/activity.js +68 -0
  991. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -0
  992. package/dist/builtin-extensions/pi-web-access/brave.d.ts +4 -0
  993. package/dist/builtin-extensions/pi-web-access/brave.d.ts.map +1 -0
  994. package/dist/builtin-extensions/pi-web-access/brave.js +185 -0
  995. package/dist/builtin-extensions/pi-web-access/brave.js.map +1 -0
  996. package/dist/builtin-extensions/pi-web-access/chrome-cookies.d.ts +9 -0
  997. package/dist/builtin-extensions/pi-web-access/chrome-cookies.d.ts.map +1 -0
  998. package/dist/builtin-extensions/pi-web-access/chrome-cookies.js +299 -0
  999. package/dist/builtin-extensions/pi-web-access/chrome-cookies.js.map +1 -0
  1000. package/dist/builtin-extensions/pi-web-access/curator-page.d.ts +13 -0
  1001. package/dist/builtin-extensions/pi-web-access/curator-page.d.ts.map +1 -0
  1002. package/dist/builtin-extensions/pi-web-access/curator-page.js +3382 -0
  1003. package/dist/builtin-extensions/pi-web-access/curator-page.js.map +1 -0
  1004. package/dist/builtin-extensions/pi-web-access/curator-server.d.ts +71 -0
  1005. package/dist/builtin-extensions/pi-web-access/curator-server.d.ts.map +1 -0
  1006. package/dist/builtin-extensions/pi-web-access/curator-server.js +604 -0
  1007. package/dist/builtin-extensions/pi-web-access/curator-server.js.map +1 -0
  1008. package/dist/builtin-extensions/pi-web-access/exa.d.ts +10 -0
  1009. package/dist/builtin-extensions/pi-web-access/exa.d.ts.map +1 -0
  1010. package/dist/builtin-extensions/pi-web-access/exa.js +391 -0
  1011. package/dist/builtin-extensions/pi-web-access/exa.js.map +1 -0
  1012. package/dist/builtin-extensions/pi-web-access/extract.d.ts +48 -0
  1013. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -0
  1014. package/dist/builtin-extensions/pi-web-access/extract.js +619 -0
  1015. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -0
  1016. package/dist/builtin-extensions/pi-web-access/fetch-params.d.ts +21 -0
  1017. package/dist/builtin-extensions/pi-web-access/fetch-params.d.ts.map +1 -0
  1018. package/dist/builtin-extensions/pi-web-access/fetch-params.js +44 -0
  1019. package/dist/builtin-extensions/pi-web-access/fetch-params.js.map +1 -0
  1020. package/dist/builtin-extensions/pi-web-access/gemini-api.d.ts +18 -0
  1021. package/dist/builtin-extensions/pi-web-access/gemini-api.d.ts.map +1 -0
  1022. package/dist/builtin-extensions/pi-web-access/gemini-api.js +120 -0
  1023. package/dist/builtin-extensions/pi-web-access/gemini-api.js.map +1 -0
  1024. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +14 -0
  1025. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -0
  1026. package/dist/builtin-extensions/pi-web-access/gemini-search.js +371 -0
  1027. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -0
  1028. package/dist/builtin-extensions/pi-web-access/gemini-url-context.d.ts +4 -0
  1029. package/dist/builtin-extensions/pi-web-access/gemini-url-context.d.ts.map +1 -0
  1030. package/dist/builtin-extensions/pi-web-access/gemini-url-context.js +101 -0
  1031. package/dist/builtin-extensions/pi-web-access/gemini-url-context.js.map +1 -0
  1032. package/dist/builtin-extensions/pi-web-access/gemini-web-config.d.ts +4 -0
  1033. package/dist/builtin-extensions/pi-web-access/gemini-web-config.d.ts.map +1 -0
  1034. package/dist/builtin-extensions/pi-web-access/gemini-web-config.js +43 -0
  1035. package/dist/builtin-extensions/pi-web-access/gemini-web-config.js.map +1 -0
  1036. package/dist/builtin-extensions/pi-web-access/gemini-web.d.ts +12 -0
  1037. package/dist/builtin-extensions/pi-web-access/gemini-web.d.ts.map +1 -0
  1038. package/dist/builtin-extensions/pi-web-access/gemini-web.js +331 -0
  1039. package/dist/builtin-extensions/pi-web-access/gemini-web.js.map +1 -0
  1040. package/dist/builtin-extensions/pi-web-access/github-api.d.ts +7 -0
  1041. package/dist/builtin-extensions/pi-web-access/github-api.d.ts.map +1 -0
  1042. package/dist/builtin-extensions/pi-web-access/github-api.js +161 -0
  1043. package/dist/builtin-extensions/pi-web-access/github-api.js.map +1 -0
  1044. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +13 -0
  1045. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -0
  1046. package/dist/builtin-extensions/pi-web-access/github-extract.js +558 -0
  1047. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -0
  1048. package/dist/builtin-extensions/pi-web-access/index.d.ts +3 -0
  1049. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -0
  1050. package/dist/builtin-extensions/pi-web-access/index.js +2165 -0
  1051. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -0
  1052. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +13 -0
  1053. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -0
  1054. package/dist/builtin-extensions/pi-web-access/openai-search.js +374 -0
  1055. package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -0
  1056. package/dist/builtin-extensions/pi-web-access/parallel.d.ts +12 -0
  1057. package/dist/builtin-extensions/pi-web-access/parallel.d.ts.map +1 -0
  1058. package/dist/builtin-extensions/pi-web-access/parallel.js +316 -0
  1059. package/dist/builtin-extensions/pi-web-access/parallel.js.map +1 -0
  1060. package/dist/builtin-extensions/pi-web-access/pdf-extract.d.ts +26 -0
  1061. package/dist/builtin-extensions/pi-web-access/pdf-extract.d.ts.map +1 -0
  1062. package/dist/builtin-extensions/pi-web-access/pdf-extract.js +150 -0
  1063. package/dist/builtin-extensions/pi-web-access/pdf-extract.js.map +1 -0
  1064. package/dist/builtin-extensions/pi-web-access/perplexity.d.ts +20 -0
  1065. package/dist/builtin-extensions/pi-web-access/perplexity.d.ts.map +1 -0
  1066. package/dist/builtin-extensions/pi-web-access/perplexity.js +150 -0
  1067. package/dist/builtin-extensions/pi-web-access/perplexity.js.map +1 -0
  1068. package/dist/builtin-extensions/pi-web-access/render-search-chrome.d.ts +37 -0
  1069. package/dist/builtin-extensions/pi-web-access/render-search-chrome.d.ts.map +1 -0
  1070. package/dist/builtin-extensions/pi-web-access/render-search-chrome.js +107 -0
  1071. package/dist/builtin-extensions/pi-web-access/render-search-chrome.js.map +1 -0
  1072. package/dist/builtin-extensions/pi-web-access/render-search-error.d.ts +57 -0
  1073. package/dist/builtin-extensions/pi-web-access/render-search-error.d.ts.map +1 -0
  1074. package/dist/builtin-extensions/pi-web-access/render-search-error.js +131 -0
  1075. package/dist/builtin-extensions/pi-web-access/render-search-error.js.map +1 -0
  1076. package/dist/builtin-extensions/pi-web-access/rsc-extract.d.ts +12 -0
  1077. package/dist/builtin-extensions/pi-web-access/rsc-extract.d.ts.map +1 -0
  1078. package/dist/builtin-extensions/pi-web-access/rsc-extract.js +330 -0
  1079. package/dist/builtin-extensions/pi-web-access/rsc-extract.js.map +1 -0
  1080. package/dist/builtin-extensions/pi-web-access/ssrf-protection.d.ts +24 -0
  1081. package/dist/builtin-extensions/pi-web-access/ssrf-protection.d.ts.map +1 -0
  1082. package/dist/builtin-extensions/pi-web-access/ssrf-protection.js +255 -0
  1083. package/dist/builtin-extensions/pi-web-access/ssrf-protection.js.map +1 -0
  1084. package/dist/builtin-extensions/pi-web-access/storage.d.ts +25 -0
  1085. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -0
  1086. package/dist/builtin-extensions/pi-web-access/storage.js +49 -0
  1087. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -0
  1088. package/dist/builtin-extensions/pi-web-access/summary-model-scope.d.ts +13 -0
  1089. package/dist/builtin-extensions/pi-web-access/summary-model-scope.d.ts.map +1 -0
  1090. package/dist/builtin-extensions/pi-web-access/summary-model-scope.js +86 -0
  1091. package/dist/builtin-extensions/pi-web-access/summary-model-scope.js.map +1 -0
  1092. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +21 -0
  1093. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -0
  1094. package/dist/builtin-extensions/pi-web-access/summary-review.js +278 -0
  1095. package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -0
  1096. package/dist/builtin-extensions/pi-web-access/tavily.d.ts +8 -0
  1097. package/dist/builtin-extensions/pi-web-access/tavily.d.ts.map +1 -0
  1098. package/dist/builtin-extensions/pi-web-access/tavily.js +184 -0
  1099. package/dist/builtin-extensions/pi-web-access/tavily.js.map +1 -0
  1100. package/dist/builtin-extensions/pi-web-access/utils.d.ts +12 -0
  1101. package/dist/builtin-extensions/pi-web-access/utils.d.ts.map +1 -0
  1102. package/dist/builtin-extensions/pi-web-access/utils.js +61 -0
  1103. package/dist/builtin-extensions/pi-web-access/utils.js.map +1 -0
  1104. package/dist/builtin-extensions/pi-web-access/video-extract.d.ts +14 -0
  1105. package/dist/builtin-extensions/pi-web-access/video-extract.d.ts.map +1 -0
  1106. package/dist/builtin-extensions/pi-web-access/video-extract.js +324 -0
  1107. package/dist/builtin-extensions/pi-web-access/video-extract.js.map +1 -0
  1108. package/dist/builtin-extensions/pi-web-access/youtube-extract.d.ts +27 -0
  1109. package/dist/builtin-extensions/pi-web-access/youtube-extract.d.ts.map +1 -0
  1110. package/dist/builtin-extensions/pi-web-access/youtube-extract.js +282 -0
  1111. package/dist/builtin-extensions/pi-web-access/youtube-extract.js.map +1 -0
  1112. package/dist/builtin-extensions/simple-pi-memory.d.ts +55 -0
  1113. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -0
  1114. package/dist/builtin-extensions/simple-pi-memory.js +263 -0
  1115. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -0
  1116. package/dist/bun/cli.d.ts +3 -0
  1117. package/dist/bun/cli.d.ts.map +1 -0
  1118. package/dist/bun/cli.js +12 -0
  1119. package/dist/bun/cli.js.map +1 -0
  1120. package/dist/bun/register-bedrock.d.ts +2 -0
  1121. package/dist/bun/register-bedrock.d.ts.map +1 -0
  1122. package/dist/bun/register-bedrock.js +4 -0
  1123. package/dist/bun/register-bedrock.js.map +1 -0
  1124. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  1125. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  1126. package/dist/bun/restore-sandbox-env.js +36 -0
  1127. package/dist/bun/restore-sandbox-env.js.map +1 -0
  1128. package/dist/catalog/models.json +1 -0
  1129. package/dist/catalog/providers/amazon-bedrock.json +1 -0
  1130. package/dist/catalog/providers/ant-ling.json +1 -0
  1131. package/dist/catalog/providers/anthropic.json +1 -0
  1132. package/dist/catalog/providers/azure-openai-responses.json +1 -0
  1133. package/dist/catalog/providers/cerebras.json +1 -0
  1134. package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -0
  1135. package/dist/catalog/providers/cloudflare-workers-ai.json +1 -0
  1136. package/dist/catalog/providers/deepseek.json +1 -0
  1137. package/dist/catalog/providers/fireworks.json +1 -0
  1138. package/dist/catalog/providers/github-copilot.json +1 -0
  1139. package/dist/catalog/providers/google-vertex.json +1 -0
  1140. package/dist/catalog/providers/google.json +1 -0
  1141. package/dist/catalog/providers/groq.json +1 -0
  1142. package/dist/catalog/providers/huggingface.json +1 -0
  1143. package/dist/catalog/providers/kimi-coding.json +1 -0
  1144. package/dist/catalog/providers/minimax-cn.json +1 -0
  1145. package/dist/catalog/providers/minimax.json +1 -0
  1146. package/dist/catalog/providers/mistral.json +1 -0
  1147. package/dist/catalog/providers/moonshotai-cn.json +1 -0
  1148. package/dist/catalog/providers/moonshotai.json +1 -0
  1149. package/dist/catalog/providers/nvidia.json +1 -0
  1150. package/dist/catalog/providers/openai-codex.json +1 -0
  1151. package/dist/catalog/providers/openai.json +1 -0
  1152. package/dist/catalog/providers/opencode-go.json +1 -0
  1153. package/dist/catalog/providers/opencode.json +1 -0
  1154. package/dist/catalog/providers/openrouter.json +1 -0
  1155. package/dist/catalog/providers/qwen-cloud-cn.json +1 -0
  1156. package/dist/catalog/providers/qwen-cloud.json +1 -0
  1157. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -0
  1158. package/dist/catalog/providers/qwen-token-plan.json +1 -0
  1159. package/dist/catalog/providers/together.json +1 -0
  1160. package/dist/catalog/providers/vercel-ai-gateway.json +1 -0
  1161. package/dist/catalog/providers/xai.json +1 -0
  1162. package/dist/catalog/providers/xiaomi-token-plan-ams.json +1 -0
  1163. package/dist/catalog/providers/xiaomi-token-plan-cn.json +1 -0
  1164. package/dist/catalog/providers/xiaomi-token-plan-sgp.json +1 -0
  1165. package/dist/catalog/providers/xiaomi.json +1 -0
  1166. package/dist/catalog/providers/zai-coding-cn.json +1 -0
  1167. package/dist/catalog/providers/zai.json +1 -0
  1168. package/dist/catalog/providers.json +1 -0
  1169. package/dist/catalog/publication.json +6 -0
  1170. package/dist/cli/args.d.ts +57 -0
  1171. package/dist/cli/args.d.ts.map +1 -0
  1172. package/dist/cli/args.js +381 -0
  1173. package/dist/cli/args.js.map +1 -0
  1174. package/dist/cli/config-selector.d.ts +16 -0
  1175. package/dist/cli/config-selector.d.ts.map +1 -0
  1176. package/dist/cli/config-selector.js +31 -0
  1177. package/dist/cli/config-selector.js.map +1 -0
  1178. package/dist/cli/file-processor.d.ts +15 -0
  1179. package/dist/cli/file-processor.d.ts.map +1 -0
  1180. package/dist/cli/file-processor.js +70 -0
  1181. package/dist/cli/file-processor.js.map +1 -0
  1182. package/dist/cli/initial-message.d.ts +18 -0
  1183. package/dist/cli/initial-message.d.ts.map +1 -0
  1184. package/dist/cli/initial-message.js +22 -0
  1185. package/dist/cli/initial-message.js.map +1 -0
  1186. package/dist/cli/install-cli.d.ts +13 -0
  1187. package/dist/cli/install-cli.d.ts.map +1 -0
  1188. package/dist/cli/install-cli.js +352 -0
  1189. package/dist/cli/install-cli.js.map +1 -0
  1190. package/dist/cli/list-models.d.ts +9 -0
  1191. package/dist/cli/list-models.d.ts.map +1 -0
  1192. package/dist/cli/list-models.js +98 -0
  1193. package/dist/cli/list-models.js.map +1 -0
  1194. package/dist/cli/project-trust.d.ts +10 -0
  1195. package/dist/cli/project-trust.d.ts.map +1 -0
  1196. package/dist/cli/project-trust.js +48 -0
  1197. package/dist/cli/project-trust.js.map +1 -0
  1198. package/dist/cli/read-secret.d.ts +6 -0
  1199. package/dist/cli/read-secret.d.ts.map +1 -0
  1200. package/dist/cli/read-secret.js +62 -0
  1201. package/dist/cli/read-secret.js.map +1 -0
  1202. package/dist/cli/session-picker.d.ts +10 -0
  1203. package/dist/cli/session-picker.d.ts.map +1 -0
  1204. package/dist/cli/session-picker.js +36 -0
  1205. package/dist/cli/session-picker.js.map +1 -0
  1206. package/dist/cli/startup-ui.d.ts +20 -0
  1207. package/dist/cli/startup-ui.d.ts.map +1 -0
  1208. package/dist/cli/startup-ui.js +190 -0
  1209. package/dist/cli/startup-ui.js.map +1 -0
  1210. package/dist/cli/update-cli.d.ts +18 -0
  1211. package/dist/cli/update-cli.d.ts.map +1 -0
  1212. package/dist/cli/update-cli.js +87 -0
  1213. package/dist/cli/update-cli.js.map +1 -0
  1214. package/dist/cli.d.ts +3 -0
  1215. package/dist/cli.d.ts.map +1 -0
  1216. package/dist/cli.js +57 -0
  1217. package/dist/cli.js.map +1 -0
  1218. package/dist/config.d.ts +85 -0
  1219. package/dist/config.d.ts.map +1 -0
  1220. package/dist/config.js +212 -0
  1221. package/dist/config.js.map +1 -0
  1222. package/dist/core/agent-session-runtime.d.ts +119 -0
  1223. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  1224. package/dist/core/agent-session-runtime.js +306 -0
  1225. package/dist/core/agent-session-runtime.js.map +1 -0
  1226. package/dist/core/agent-session-services.d.ts +85 -0
  1227. package/dist/core/agent-session-services.d.ts.map +1 -0
  1228. package/dist/core/agent-session-services.js +127 -0
  1229. package/dist/core/agent-session-services.js.map +1 -0
  1230. package/dist/core/agent-session.d.ts +670 -0
  1231. package/dist/core/agent-session.d.ts.map +1 -0
  1232. package/dist/core/agent-session.js +2933 -0
  1233. package/dist/core/agent-session.js.map +1 -0
  1234. package/dist/core/auth-guidance.d.ts +5 -0
  1235. package/dist/core/auth-guidance.d.ts.map +1 -0
  1236. package/dist/core/auth-guidance.js +21 -0
  1237. package/dist/core/auth-guidance.js.map +1 -0
  1238. package/dist/core/auth-storage.d.ts +56 -0
  1239. package/dist/core/auth-storage.d.ts.map +1 -0
  1240. package/dist/core/auth-storage.js +261 -0
  1241. package/dist/core/auth-storage.js.map +1 -0
  1242. package/dist/core/bash-executor.d.ts +32 -0
  1243. package/dist/core/bash-executor.d.ts.map +1 -0
  1244. package/dist/core/bash-executor.js +111 -0
  1245. package/dist/core/bash-executor.js.map +1 -0
  1246. package/dist/core/cache-stats.d.ts +49 -0
  1247. package/dist/core/cache-stats.d.ts.map +1 -0
  1248. package/dist/core/cache-stats.js +101 -0
  1249. package/dist/core/cache-stats.js.map +1 -0
  1250. package/dist/core/catalog-merge.d.ts +46 -0
  1251. package/dist/core/catalog-merge.d.ts.map +1 -0
  1252. package/dist/core/catalog-merge.js +138 -0
  1253. package/dist/core/catalog-merge.js.map +1 -0
  1254. package/dist/core/compaction/branch-summarization.d.ts +92 -0
  1255. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  1256. package/dist/core/compaction/branch-summarization.js +249 -0
  1257. package/dist/core/compaction/branch-summarization.js.map +1 -0
  1258. package/dist/core/compaction/compaction.d.ts +121 -0
  1259. package/dist/core/compaction/compaction.d.ts.map +1 -0
  1260. package/dist/core/compaction/compaction.js +600 -0
  1261. package/dist/core/compaction/compaction.js.map +1 -0
  1262. package/dist/core/compaction/index.d.ts +7 -0
  1263. package/dist/core/compaction/index.d.ts.map +1 -0
  1264. package/dist/core/compaction/index.js +7 -0
  1265. package/dist/core/compaction/index.js.map +1 -0
  1266. package/dist/core/compaction/utils.d.ts +38 -0
  1267. package/dist/core/compaction/utils.d.ts.map +1 -0
  1268. package/dist/core/compaction/utils.js +153 -0
  1269. package/dist/core/compaction/utils.js.map +1 -0
  1270. package/dist/core/context-breakdown.d.ts +89 -0
  1271. package/dist/core/context-breakdown.d.ts.map +1 -0
  1272. package/dist/core/context-breakdown.js +175 -0
  1273. package/dist/core/context-breakdown.js.map +1 -0
  1274. package/dist/core/cron/fire-guard.d.ts +16 -0
  1275. package/dist/core/cron/fire-guard.d.ts.map +1 -0
  1276. package/dist/core/cron/fire-guard.js +24 -0
  1277. package/dist/core/cron/fire-guard.js.map +1 -0
  1278. package/dist/core/cron/jobs.d.ts +162 -0
  1279. package/dist/core/cron/jobs.d.ts.map +1 -0
  1280. package/dist/core/cron/jobs.js +545 -0
  1281. package/dist/core/cron/jobs.js.map +1 -0
  1282. package/dist/core/cron/origin-context.d.ts +22 -0
  1283. package/dist/core/cron/origin-context.d.ts.map +1 -0
  1284. package/dist/core/cron/origin-context.js +22 -0
  1285. package/dist/core/cron/origin-context.js.map +1 -0
  1286. package/dist/core/cron/scheduler.d.ts +51 -0
  1287. package/dist/core/cron/scheduler.d.ts.map +1 -0
  1288. package/dist/core/cron/scheduler.js +165 -0
  1289. package/dist/core/cron/scheduler.js.map +1 -0
  1290. package/dist/core/customize.d.ts +37 -0
  1291. package/dist/core/customize.d.ts.map +1 -0
  1292. package/dist/core/customize.js +72 -0
  1293. package/dist/core/customize.js.map +1 -0
  1294. package/dist/core/defaults.d.ts +3 -0
  1295. package/dist/core/defaults.d.ts.map +1 -0
  1296. package/dist/core/defaults.js +2 -0
  1297. package/dist/core/defaults.js.map +1 -0
  1298. package/dist/core/diagnostics.d.ts +15 -0
  1299. package/dist/core/diagnostics.d.ts.map +1 -0
  1300. package/dist/core/diagnostics.js +2 -0
  1301. package/dist/core/diagnostics.js.map +1 -0
  1302. package/dist/core/event-bus.d.ts +9 -0
  1303. package/dist/core/event-bus.d.ts.map +1 -0
  1304. package/dist/core/event-bus.js +25 -0
  1305. package/dist/core/event-bus.js.map +1 -0
  1306. package/dist/core/exec.d.ts +29 -0
  1307. package/dist/core/exec.d.ts.map +1 -0
  1308. package/dist/core/exec.js +75 -0
  1309. package/dist/core/exec.js.map +1 -0
  1310. package/dist/core/experimental.d.ts +2 -0
  1311. package/dist/core/experimental.d.ts.map +1 -0
  1312. package/dist/core/experimental.js +4 -0
  1313. package/dist/core/experimental.js.map +1 -0
  1314. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  1315. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  1316. package/dist/core/export-html/ansi-to-html.js +249 -0
  1317. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  1318. package/dist/core/export-html/index.d.ts +37 -0
  1319. package/dist/core/export-html/index.d.ts.map +1 -0
  1320. package/dist/core/export-html/index.js +226 -0
  1321. package/dist/core/export-html/index.js.map +1 -0
  1322. package/dist/core/export-html/template.css +1066 -0
  1323. package/dist/core/export-html/template.html +55 -0
  1324. package/dist/core/export-html/template.js +1864 -0
  1325. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  1326. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  1327. package/dist/core/export-html/tool-renderer.js +108 -0
  1328. package/dist/core/export-html/tool-renderer.js.map +1 -0
  1329. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  1330. package/dist/core/export-html/vendor/marked.min.js +78 -0
  1331. package/dist/core/extensions/host-static.d.ts +2 -0
  1332. package/dist/core/extensions/host-static.d.ts.map +1 -0
  1333. package/dist/core/extensions/host-static.js +15 -0
  1334. package/dist/core/extensions/host-static.js.map +1 -0
  1335. package/dist/core/extensions/index.d.ts +12 -0
  1336. package/dist/core/extensions/index.d.ts.map +1 -0
  1337. package/dist/core/extensions/index.js +9 -0
  1338. package/dist/core/extensions/index.js.map +1 -0
  1339. package/dist/core/extensions/loader.d.ts +33 -0
  1340. package/dist/core/extensions/loader.d.ts.map +1 -0
  1341. package/dist/core/extensions/loader.js +588 -0
  1342. package/dist/core/extensions/loader.js.map +1 -0
  1343. package/dist/core/extensions/runner.d.ts +172 -0
  1344. package/dist/core/extensions/runner.d.ts.map +1 -0
  1345. package/dist/core/extensions/runner.js +935 -0
  1346. package/dist/core/extensions/runner.js.map +1 -0
  1347. package/dist/core/extensions/types.d.ts +1263 -0
  1348. package/dist/core/extensions/types.d.ts.map +1 -0
  1349. package/dist/core/extensions/types.js +45 -0
  1350. package/dist/core/extensions/types.js.map +1 -0
  1351. package/dist/core/extensions/wrapper.d.ts +20 -0
  1352. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  1353. package/dist/core/extensions/wrapper.js +41 -0
  1354. package/dist/core/extensions/wrapper.js.map +1 -0
  1355. package/dist/core/footer-data-provider.d.ts +64 -0
  1356. package/dist/core/footer-data-provider.d.ts.map +1 -0
  1357. package/dist/core/footer-data-provider.js +373 -0
  1358. package/dist/core/footer-data-provider.js.map +1 -0
  1359. package/dist/core/grok-cli-auth.d.ts +42 -0
  1360. package/dist/core/grok-cli-auth.d.ts.map +1 -0
  1361. package/dist/core/grok-cli-auth.js +327 -0
  1362. package/dist/core/grok-cli-auth.js.map +1 -0
  1363. package/dist/core/http-dispatcher.d.ts +22 -0
  1364. package/dist/core/http-dispatcher.d.ts.map +1 -0
  1365. package/dist/core/http-dispatcher.js +91 -0
  1366. package/dist/core/http-dispatcher.js.map +1 -0
  1367. package/dist/core/index.d.ts +13 -0
  1368. package/dist/core/index.d.ts.map +1 -0
  1369. package/dist/core/index.js +13 -0
  1370. package/dist/core/index.js.map +1 -0
  1371. package/dist/core/injected-prompt.d.ts +20 -0
  1372. package/dist/core/injected-prompt.d.ts.map +1 -0
  1373. package/dist/core/injected-prompt.js +64 -0
  1374. package/dist/core/injected-prompt.js.map +1 -0
  1375. package/dist/core/install-features.d.ts +106 -0
  1376. package/dist/core/install-features.d.ts.map +1 -0
  1377. package/dist/core/install-features.js +392 -0
  1378. package/dist/core/install-features.js.map +1 -0
  1379. package/dist/core/install-layout.d.ts +18 -0
  1380. package/dist/core/install-layout.d.ts.map +1 -0
  1381. package/dist/core/install-layout.js +54 -0
  1382. package/dist/core/install-layout.js.map +1 -0
  1383. package/dist/core/keybindings.d.ts +373 -0
  1384. package/dist/core/keybindings.d.ts.map +1 -0
  1385. package/dist/core/keybindings.js +309 -0
  1386. package/dist/core/keybindings.js.map +1 -0
  1387. package/dist/core/live-catalog.d.ts +74 -0
  1388. package/dist/core/live-catalog.d.ts.map +1 -0
  1389. package/dist/core/live-catalog.js +351 -0
  1390. package/dist/core/live-catalog.js.map +1 -0
  1391. package/dist/core/memory-cap.d.ts +23 -0
  1392. package/dist/core/memory-cap.d.ts.map +1 -0
  1393. package/dist/core/memory-cap.js +32 -0
  1394. package/dist/core/memory-cap.js.map +1 -0
  1395. package/dist/core/messages.d.ts +77 -0
  1396. package/dist/core/messages.d.ts.map +1 -0
  1397. package/dist/core/messages.js +123 -0
  1398. package/dist/core/messages.js.map +1 -0
  1399. package/dist/core/model-config-writer.d.ts +24 -0
  1400. package/dist/core/model-config-writer.d.ts.map +1 -0
  1401. package/dist/core/model-config-writer.js +84 -0
  1402. package/dist/core/model-config-writer.js.map +1 -0
  1403. package/dist/core/model-config.d.ts +512 -0
  1404. package/dist/core/model-config.d.ts.map +1 -0
  1405. package/dist/core/model-config.js +243 -0
  1406. package/dist/core/model-config.js.map +1 -0
  1407. package/dist/core/model-registry.d.ts +39 -0
  1408. package/dist/core/model-registry.d.ts.map +1 -0
  1409. package/dist/core/model-registry.js +89 -0
  1410. package/dist/core/model-registry.js.map +1 -0
  1411. package/dist/core/model-resolver.d.ts +121 -0
  1412. package/dist/core/model-resolver.d.ts.map +1 -0
  1413. package/dist/core/model-resolver.js +536 -0
  1414. package/dist/core/model-resolver.js.map +1 -0
  1415. package/dist/core/model-runtime.d.ts +135 -0
  1416. package/dist/core/model-runtime.d.ts.map +1 -0
  1417. package/dist/core/model-runtime.js +696 -0
  1418. package/dist/core/model-runtime.js.map +1 -0
  1419. package/dist/core/model-tiers.d.ts +43 -0
  1420. package/dist/core/model-tiers.d.ts.map +1 -0
  1421. package/dist/core/model-tiers.js +78 -0
  1422. package/dist/core/model-tiers.js.map +1 -0
  1423. package/dist/core/models-store.d.ts +17 -0
  1424. package/dist/core/models-store.d.ts.map +1 -0
  1425. package/dist/core/models-store.js +57 -0
  1426. package/dist/core/models-store.js.map +1 -0
  1427. package/dist/core/official-catalog.d.ts +79 -0
  1428. package/dist/core/official-catalog.d.ts.map +1 -0
  1429. package/dist/core/official-catalog.js +404 -0
  1430. package/dist/core/official-catalog.js.map +1 -0
  1431. package/dist/core/output-guard.d.ts +7 -0
  1432. package/dist/core/output-guard.d.ts.map +1 -0
  1433. package/dist/core/output-guard.js +89 -0
  1434. package/dist/core/output-guard.js.map +1 -0
  1435. package/dist/core/package-manager.d.ts +201 -0
  1436. package/dist/core/package-manager.d.ts.map +1 -0
  1437. package/dist/core/package-manager.js +2035 -0
  1438. package/dist/core/package-manager.js.map +1 -0
  1439. package/dist/core/permission-mode-control.d.ts +27 -0
  1440. package/dist/core/permission-mode-control.d.ts.map +1 -0
  1441. package/dist/core/permission-mode-control.js +39 -0
  1442. package/dist/core/permission-mode-control.js.map +1 -0
  1443. package/dist/core/permission-mode.d.ts +19 -0
  1444. package/dist/core/permission-mode.d.ts.map +1 -0
  1445. package/dist/core/permission-mode.js +26 -0
  1446. package/dist/core/permission-mode.js.map +1 -0
  1447. package/dist/core/permissions.d.ts +110 -0
  1448. package/dist/core/permissions.d.ts.map +1 -0
  1449. package/dist/core/permissions.js +438 -0
  1450. package/dist/core/permissions.js.map +1 -0
  1451. package/dist/core/plan-mode.d.ts +39 -0
  1452. package/dist/core/plan-mode.d.ts.map +1 -0
  1453. package/dist/core/plan-mode.js +429 -0
  1454. package/dist/core/plan-mode.js.map +1 -0
  1455. package/dist/core/process-registry.d.ts +40 -0
  1456. package/dist/core/process-registry.d.ts.map +1 -0
  1457. package/dist/core/process-registry.js +190 -0
  1458. package/dist/core/process-registry.js.map +1 -0
  1459. package/dist/core/project-trust.d.ts +15 -0
  1460. package/dist/core/project-trust.d.ts.map +1 -0
  1461. package/dist/core/project-trust.js +59 -0
  1462. package/dist/core/project-trust.js.map +1 -0
  1463. package/dist/core/prompt-templates.d.ts +53 -0
  1464. package/dist/core/prompt-templates.d.ts.map +1 -0
  1465. package/dist/core/prompt-templates.js +236 -0
  1466. package/dist/core/prompt-templates.js.map +1 -0
  1467. package/dist/core/provider-attribution.d.ts +4 -0
  1468. package/dist/core/provider-attribution.d.ts.map +1 -0
  1469. package/dist/core/provider-attribution.js +31 -0
  1470. package/dist/core/provider-attribution.js.map +1 -0
  1471. package/dist/core/provider-composer.d.ts +55 -0
  1472. package/dist/core/provider-composer.d.ts.map +1 -0
  1473. package/dist/core/provider-composer.js +375 -0
  1474. package/dist/core/provider-composer.js.map +1 -0
  1475. package/dist/core/radius.d.ts +2 -0
  1476. package/dist/core/radius.d.ts.map +1 -0
  1477. package/dist/core/radius.js +2 -0
  1478. package/dist/core/radius.js.map +1 -0
  1479. package/dist/core/resolve-config-value.d.ts +30 -0
  1480. package/dist/core/resolve-config-value.d.ts.map +1 -0
  1481. package/dist/core/resolve-config-value.js +247 -0
  1482. package/dist/core/resolve-config-value.js.map +1 -0
  1483. package/dist/core/resource-loader.d.ts +211 -0
  1484. package/dist/core/resource-loader.d.ts.map +1 -0
  1485. package/dist/core/resource-loader.js +848 -0
  1486. package/dist/core/resource-loader.js.map +1 -0
  1487. package/dist/core/rollback.d.ts +80 -0
  1488. package/dist/core/rollback.d.ts.map +1 -0
  1489. package/dist/core/rollback.js +659 -0
  1490. package/dist/core/rollback.js.map +1 -0
  1491. package/dist/core/runtime-credentials.d.ts +15 -0
  1492. package/dist/core/runtime-credentials.d.ts.map +1 -0
  1493. package/dist/core/runtime-credentials.js +36 -0
  1494. package/dist/core/runtime-credentials.js.map +1 -0
  1495. package/dist/core/sdk.d.ts +106 -0
  1496. package/dist/core/sdk.d.ts.map +1 -0
  1497. package/dist/core/sdk.js +264 -0
  1498. package/dist/core/sdk.js.map +1 -0
  1499. package/dist/core/search-curator.d.ts +23 -0
  1500. package/dist/core/search-curator.d.ts.map +1 -0
  1501. package/dist/core/search-curator.js +34 -0
  1502. package/dist/core/search-curator.js.map +1 -0
  1503. package/dist/core/session-cwd.d.ts +19 -0
  1504. package/dist/core/session-cwd.d.ts.map +1 -0
  1505. package/dist/core/session-cwd.js +38 -0
  1506. package/dist/core/session-cwd.js.map +1 -0
  1507. package/dist/core/session-manager.d.ts +352 -0
  1508. package/dist/core/session-manager.d.ts.map +1 -0
  1509. package/dist/core/session-manager.js +1319 -0
  1510. package/dist/core/session-manager.js.map +1 -0
  1511. package/dist/core/session-retention.d.ts +17 -0
  1512. package/dist/core/session-retention.d.ts.map +1 -0
  1513. package/dist/core/session-retention.js +69 -0
  1514. package/dist/core/session-retention.js.map +1 -0
  1515. package/dist/core/settings-manager.d.ts +392 -0
  1516. package/dist/core/settings-manager.d.ts.map +1 -0
  1517. package/dist/core/settings-manager.js +1165 -0
  1518. package/dist/core/settings-manager.js.map +1 -0
  1519. package/dist/core/skills.d.ts +60 -0
  1520. package/dist/core/skills.d.ts.map +1 -0
  1521. package/dist/core/skills.js +387 -0
  1522. package/dist/core/skills.js.map +1 -0
  1523. package/dist/core/slash-commands.d.ts +15 -0
  1524. package/dist/core/slash-commands.d.ts.map +1 -0
  1525. package/dist/core/slash-commands.js +54 -0
  1526. package/dist/core/slash-commands.js.map +1 -0
  1527. package/dist/core/source-info.d.ts +18 -0
  1528. package/dist/core/source-info.d.ts.map +1 -0
  1529. package/dist/core/source-info.js +19 -0
  1530. package/dist/core/source-info.js.map +1 -0
  1531. package/dist/core/subagent-permission-inherit.d.ts +50 -0
  1532. package/dist/core/subagent-permission-inherit.d.ts.map +1 -0
  1533. package/dist/core/subagent-permission-inherit.js +67 -0
  1534. package/dist/core/subagent-permission-inherit.js.map +1 -0
  1535. package/dist/core/subscriptions.d.ts +64 -0
  1536. package/dist/core/subscriptions.d.ts.map +1 -0
  1537. package/dist/core/subscriptions.js +259 -0
  1538. package/dist/core/subscriptions.js.map +1 -0
  1539. package/dist/core/swarm.d.ts +54 -0
  1540. package/dist/core/swarm.d.ts.map +1 -0
  1541. package/dist/core/swarm.js +119 -0
  1542. package/dist/core/swarm.js.map +1 -0
  1543. package/dist/core/system-prompt.d.ts +30 -0
  1544. package/dist/core/system-prompt.d.ts.map +1 -0
  1545. package/dist/core/system-prompt.js +97 -0
  1546. package/dist/core/system-prompt.js.map +1 -0
  1547. package/dist/core/timings.d.ts +11 -0
  1548. package/dist/core/timings.d.ts.map +1 -0
  1549. package/dist/core/timings.js +46 -0
  1550. package/dist/core/timings.js.map +1 -0
  1551. package/dist/core/tools/bash.d.ts +69 -0
  1552. package/dist/core/tools/bash.d.ts.map +1 -0
  1553. package/dist/core/tools/bash.js +403 -0
  1554. package/dist/core/tools/bash.js.map +1 -0
  1555. package/dist/core/tools/edit-diff.d.ts +106 -0
  1556. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  1557. package/dist/core/tools/edit-diff.js +424 -0
  1558. package/dist/core/tools/edit-diff.js.map +1 -0
  1559. package/dist/core/tools/edit.d.ts +51 -0
  1560. package/dist/core/tools/edit.d.ts.map +1 -0
  1561. package/dist/core/tools/edit.js +303 -0
  1562. package/dist/core/tools/edit.js.map +1 -0
  1563. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  1564. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  1565. package/dist/core/tools/file-mutation-queue.js +52 -0
  1566. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  1567. package/dist/core/tools/find.d.ts +35 -0
  1568. package/dist/core/tools/find.d.ts.map +1 -0
  1569. package/dist/core/tools/find.js +325 -0
  1570. package/dist/core/tools/find.js.map +1 -0
  1571. package/dist/core/tools/grep.d.ts +37 -0
  1572. package/dist/core/tools/grep.d.ts.map +1 -0
  1573. package/dist/core/tools/grep.js +324 -0
  1574. package/dist/core/tools/grep.js.map +1 -0
  1575. package/dist/core/tools/index.d.ts +40 -0
  1576. package/dist/core/tools/index.d.ts.map +1 -0
  1577. package/dist/core/tools/index.js +112 -0
  1578. package/dist/core/tools/index.js.map +1 -0
  1579. package/dist/core/tools/ls.d.ts +37 -0
  1580. package/dist/core/tools/ls.d.ts.map +1 -0
  1581. package/dist/core/tools/ls.js +185 -0
  1582. package/dist/core/tools/ls.js.map +1 -0
  1583. package/dist/core/tools/output-accumulator.d.ts +52 -0
  1584. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  1585. package/dist/core/tools/output-accumulator.js +184 -0
  1586. package/dist/core/tools/output-accumulator.js.map +1 -0
  1587. package/dist/core/tools/path-utils.d.ts +10 -0
  1588. package/dist/core/tools/path-utils.d.ts.map +1 -0
  1589. package/dist/core/tools/path-utils.js +99 -0
  1590. package/dist/core/tools/path-utils.js.map +1 -0
  1591. package/dist/core/tools/read.d.ts +35 -0
  1592. package/dist/core/tools/read.d.ts.map +1 -0
  1593. package/dist/core/tools/read.js +289 -0
  1594. package/dist/core/tools/read.js.map +1 -0
  1595. package/dist/core/tools/render-utils.d.ts +74 -0
  1596. package/dist/core/tools/render-utils.d.ts.map +1 -0
  1597. package/dist/core/tools/render-utils.js +150 -0
  1598. package/dist/core/tools/render-utils.js.map +1 -0
  1599. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  1600. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  1601. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  1602. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  1603. package/dist/core/tools/truncate.d.ts +70 -0
  1604. package/dist/core/tools/truncate.d.ts.map +1 -0
  1605. package/dist/core/tools/truncate.js +215 -0
  1606. package/dist/core/tools/truncate.js.map +1 -0
  1607. package/dist/core/tools/write.d.ts +26 -0
  1608. package/dist/core/tools/write.d.ts.map +1 -0
  1609. package/dist/core/tools/write.js +219 -0
  1610. package/dist/core/tools/write.js.map +1 -0
  1611. package/dist/core/trust-manager.d.ts +36 -0
  1612. package/dist/core/trust-manager.d.ts.map +1 -0
  1613. package/dist/core/trust-manager.js +202 -0
  1614. package/dist/core/trust-manager.js.map +1 -0
  1615. package/dist/core/update-check.d.ts +35 -0
  1616. package/dist/core/update-check.d.ts.map +1 -0
  1617. package/dist/core/update-check.js +117 -0
  1618. package/dist/core/update-check.js.map +1 -0
  1619. package/dist/core/usage-adapters/kimi-coding.d.ts +11 -0
  1620. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -0
  1621. package/dist/core/usage-adapters/kimi-coding.js +78 -0
  1622. package/dist/core/usage-adapters/kimi-coding.js.map +1 -0
  1623. package/dist/core/usage-adapters/openai-codex.d.ts +4 -0
  1624. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -0
  1625. package/dist/core/usage-adapters/openai-codex.js +185 -0
  1626. package/dist/core/usage-adapters/openai-codex.js.map +1 -0
  1627. package/dist/core/usage-adapters/shared.d.ts +20 -0
  1628. package/dist/core/usage-adapters/shared.d.ts.map +1 -0
  1629. package/dist/core/usage-adapters/shared.js +75 -0
  1630. package/dist/core/usage-adapters/shared.js.map +1 -0
  1631. package/dist/core/usage-adapters/xai.d.ts +21 -0
  1632. package/dist/core/usage-adapters/xai.d.ts.map +1 -0
  1633. package/dist/core/usage-adapters/xai.js +81 -0
  1634. package/dist/core/usage-adapters/xai.js.map +1 -0
  1635. package/dist/core/usage-adapters/zai.d.ts +14 -0
  1636. package/dist/core/usage-adapters/zai.d.ts.map +1 -0
  1637. package/dist/core/usage-adapters/zai.js +67 -0
  1638. package/dist/core/usage-adapters/zai.js.map +1 -0
  1639. package/dist/core/usage-history.d.ts +63 -0
  1640. package/dist/core/usage-history.d.ts.map +1 -0
  1641. package/dist/core/usage-history.js +239 -0
  1642. package/dist/core/usage-history.js.map +1 -0
  1643. package/dist/core/usage-limit.d.ts +17 -0
  1644. package/dist/core/usage-limit.d.ts.map +1 -0
  1645. package/dist/core/usage-limit.js +79 -0
  1646. package/dist/core/usage-limit.js.map +1 -0
  1647. package/dist/core/usage-service.d.ts +75 -0
  1648. package/dist/core/usage-service.d.ts.map +1 -0
  1649. package/dist/core/usage-service.js +180 -0
  1650. package/dist/core/usage-service.js.map +1 -0
  1651. package/dist/core/user-models.d.ts +50 -0
  1652. package/dist/core/user-models.d.ts.map +1 -0
  1653. package/dist/core/user-models.js +192 -0
  1654. package/dist/core/user-models.js.map +1 -0
  1655. package/dist/dev-cli.d.ts +3 -0
  1656. package/dist/dev-cli.d.ts.map +1 -0
  1657. package/dist/dev-cli.js +5 -0
  1658. package/dist/dev-cli.js.map +1 -0
  1659. package/dist/gateway/adapters/discord.d.ts +251 -0
  1660. package/dist/gateway/adapters/discord.d.ts.map +1 -0
  1661. package/dist/gateway/adapters/discord.js +693 -0
  1662. package/dist/gateway/adapters/discord.js.map +1 -0
  1663. package/dist/gateway/adapters/telegram.d.ts +187 -0
  1664. package/dist/gateway/adapters/telegram.d.ts.map +1 -0
  1665. package/dist/gateway/adapters/telegram.js +581 -0
  1666. package/dist/gateway/adapters/telegram.js.map +1 -0
  1667. package/dist/gateway/agent-bridge.d.ts +144 -0
  1668. package/dist/gateway/agent-bridge.d.ts.map +1 -0
  1669. package/dist/gateway/agent-bridge.js +477 -0
  1670. package/dist/gateway/agent-bridge.js.map +1 -0
  1671. package/dist/gateway/approval.d.ts +34 -0
  1672. package/dist/gateway/approval.d.ts.map +1 -0
  1673. package/dist/gateway/approval.js +152 -0
  1674. package/dist/gateway/approval.js.map +1 -0
  1675. package/dist/gateway/authz.d.ts +21 -0
  1676. package/dist/gateway/authz.d.ts.map +1 -0
  1677. package/dist/gateway/authz.js +61 -0
  1678. package/dist/gateway/authz.js.map +1 -0
  1679. package/dist/gateway/buttons.d.ts +58 -0
  1680. package/dist/gateway/buttons.d.ts.map +1 -0
  1681. package/dist/gateway/buttons.js +269 -0
  1682. package/dist/gateway/buttons.js.map +1 -0
  1683. package/dist/gateway/command.d.ts +8 -0
  1684. package/dist/gateway/command.d.ts.map +1 -0
  1685. package/dist/gateway/command.js +17 -0
  1686. package/dist/gateway/command.js.map +1 -0
  1687. package/dist/gateway/commands.d.ts +43 -0
  1688. package/dist/gateway/commands.d.ts.map +1 -0
  1689. package/dist/gateway/commands.js +644 -0
  1690. package/dist/gateway/commands.js.map +1 -0
  1691. package/dist/gateway/config.d.ts +53 -0
  1692. package/dist/gateway/config.d.ts.map +1 -0
  1693. package/dist/gateway/config.js +136 -0
  1694. package/dist/gateway/config.js.map +1 -0
  1695. package/dist/gateway/cron.d.ts +72 -0
  1696. package/dist/gateway/cron.d.ts.map +1 -0
  1697. package/dist/gateway/cron.js +331 -0
  1698. package/dist/gateway/cron.js.map +1 -0
  1699. package/dist/gateway/index.d.ts +31 -0
  1700. package/dist/gateway/index.d.ts.map +1 -0
  1701. package/dist/gateway/index.js +233 -0
  1702. package/dist/gateway/index.js.map +1 -0
  1703. package/dist/gateway/pairing.d.ts +44 -0
  1704. package/dist/gateway/pairing.d.ts.map +1 -0
  1705. package/dist/gateway/pairing.js +171 -0
  1706. package/dist/gateway/pairing.js.map +1 -0
  1707. package/dist/gateway/router.d.ts +48 -0
  1708. package/dist/gateway/router.d.ts.map +1 -0
  1709. package/dist/gateway/router.js +215 -0
  1710. package/dist/gateway/router.js.map +1 -0
  1711. package/dist/gateway/session-keys.d.ts +18 -0
  1712. package/dist/gateway/session-keys.d.ts.map +1 -0
  1713. package/dist/gateway/session-keys.js +26 -0
  1714. package/dist/gateway/session-keys.js.map +1 -0
  1715. package/dist/gateway/store.d.ts +28 -0
  1716. package/dist/gateway/store.d.ts.map +1 -0
  1717. package/dist/gateway/store.js +93 -0
  1718. package/dist/gateway/store.js.map +1 -0
  1719. package/dist/gateway/stream.d.ts +55 -0
  1720. package/dist/gateway/stream.d.ts.map +1 -0
  1721. package/dist/gateway/stream.js +107 -0
  1722. package/dist/gateway/stream.js.map +1 -0
  1723. package/dist/gateway/text.d.ts +18 -0
  1724. package/dist/gateway/text.d.ts.map +1 -0
  1725. package/dist/gateway/text.js +136 -0
  1726. package/dist/gateway/text.js.map +1 -0
  1727. package/dist/gateway/types.d.ts +95 -0
  1728. package/dist/gateway/types.d.ts.map +1 -0
  1729. package/dist/gateway/types.js +9 -0
  1730. package/dist/gateway/types.js.map +1 -0
  1731. package/dist/index.d.ts +35 -0
  1732. package/dist/index.d.ts.map +1 -0
  1733. package/dist/index.js +47 -0
  1734. package/dist/index.js.map +1 -0
  1735. package/dist/main.d.ts +22 -0
  1736. package/dist/main.d.ts.map +1 -0
  1737. package/dist/main.js +861 -0
  1738. package/dist/main.js.map +1 -0
  1739. package/dist/migrations.d.ts +48 -0
  1740. package/dist/migrations.d.ts.map +1 -0
  1741. package/dist/migrations.js +375 -0
  1742. package/dist/migrations.js.map +1 -0
  1743. package/dist/modes/index.d.ts +9 -0
  1744. package/dist/modes/index.d.ts.map +1 -0
  1745. package/dist/modes/index.js +8 -0
  1746. package/dist/modes/index.js.map +1 -0
  1747. package/dist/modes/interactive/assets/clankolas.png +0 -0
  1748. package/dist/modes/interactive/components/armin.d.ts +34 -0
  1749. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  1750. package/dist/modes/interactive/components/armin.js +333 -0
  1751. package/dist/modes/interactive/components/armin.js.map +1 -0
  1752. package/dist/modes/interactive/components/assistant-message.d.ts +41 -0
  1753. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  1754. package/dist/modes/interactive/components/assistant-message.js +333 -0
  1755. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  1756. package/dist/modes/interactive/components/bash-execution.d.ts +32 -0
  1757. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  1758. package/dist/modes/interactive/components/bash-execution.js +171 -0
  1759. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  1760. package/dist/modes/interactive/components/boot-ascii.d.ts +6 -0
  1761. package/dist/modes/interactive/components/boot-ascii.d.ts.map +1 -0
  1762. package/dist/modes/interactive/components/boot-ascii.js +6 -0
  1763. package/dist/modes/interactive/components/boot-ascii.js.map +1 -0
  1764. package/dist/modes/interactive/components/boot-screen.d.ts +22 -0
  1765. package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -0
  1766. package/dist/modes/interactive/components/boot-screen.js +53 -0
  1767. package/dist/modes/interactive/components/boot-screen.js.map +1 -0
  1768. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  1769. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  1770. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  1771. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  1772. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  1773. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  1774. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  1775. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  1776. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  1777. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  1778. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  1779. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  1780. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  1781. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  1782. package/dist/modes/interactive/components/config-selector.js +761 -0
  1783. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  1784. package/dist/modes/interactive/components/context-view.d.ts +13 -0
  1785. package/dist/modes/interactive/components/context-view.d.ts.map +1 -0
  1786. package/dist/modes/interactive/components/context-view.js +44 -0
  1787. package/dist/modes/interactive/components/context-view.js.map +1 -0
  1788. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  1789. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  1790. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  1791. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  1792. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  1793. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  1794. package/dist/modes/interactive/components/custom-editor.js +70 -0
  1795. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  1796. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  1797. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  1798. package/dist/modes/interactive/components/custom-entry.js +52 -0
  1799. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  1800. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  1801. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  1802. package/dist/modes/interactive/components/custom-message.js +79 -0
  1803. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  1804. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  1805. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  1806. package/dist/modes/interactive/components/daxnuts.js +140 -0
  1807. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  1808. package/dist/modes/interactive/components/diff.d.ts +12 -0
  1809. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  1810. package/dist/modes/interactive/components/diff.js +133 -0
  1811. package/dist/modes/interactive/components/diff.js.map +1 -0
  1812. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  1813. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  1814. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  1815. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  1816. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  1817. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  1818. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  1819. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  1820. package/dist/modes/interactive/components/exit-card.d.ts +22 -0
  1821. package/dist/modes/interactive/components/exit-card.d.ts.map +1 -0
  1822. package/dist/modes/interactive/components/exit-card.js +69 -0
  1823. package/dist/modes/interactive/components/exit-card.js.map +1 -0
  1824. package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  1825. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  1826. package/dist/modes/interactive/components/extension-editor.js +128 -0
  1827. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  1828. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  1829. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  1830. package/dist/modes/interactive/components/extension-input.js +61 -0
  1831. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  1832. package/dist/modes/interactive/components/extension-selector.d.ts +30 -0
  1833. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  1834. package/dist/modes/interactive/components/extension-selector.js +106 -0
  1835. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  1836. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  1837. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  1838. package/dist/modes/interactive/components/first-time-setup.js +99 -0
  1839. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  1840. package/dist/modes/interactive/components/footer.d.ts +30 -0
  1841. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  1842. package/dist/modes/interactive/components/footer.js +230 -0
  1843. package/dist/modes/interactive/components/footer.js.map +1 -0
  1844. package/dist/modes/interactive/components/index.d.ts +34 -0
  1845. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  1846. package/dist/modes/interactive/components/index.js +35 -0
  1847. package/dist/modes/interactive/components/index.js.map +1 -0
  1848. package/dist/modes/interactive/components/injected-prompt-message.d.ts +21 -0
  1849. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -0
  1850. package/dist/modes/interactive/components/injected-prompt-message.js +51 -0
  1851. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -0
  1852. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  1853. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  1854. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  1855. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  1856. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  1857. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  1858. package/dist/modes/interactive/components/login-dialog.js +188 -0
  1859. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  1860. package/dist/modes/interactive/components/model-selector.d.ts +61 -0
  1861. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  1862. package/dist/modes/interactive/components/model-selector.js +320 -0
  1863. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  1864. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  1865. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  1866. package/dist/modes/interactive/components/oauth-selector.js +163 -0
  1867. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  1868. package/dist/modes/interactive/components/plan-message.d.ts +17 -0
  1869. package/dist/modes/interactive/components/plan-message.d.ts.map +1 -0
  1870. package/dist/modes/interactive/components/plan-message.js +43 -0
  1871. package/dist/modes/interactive/components/plan-message.js.map +1 -0
  1872. package/dist/modes/interactive/components/processes-selector.d.ts +20 -0
  1873. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -0
  1874. package/dist/modes/interactive/components/processes-selector.js +175 -0
  1875. package/dist/modes/interactive/components/processes-selector.js.map +1 -0
  1876. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  1877. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  1878. package/dist/modes/interactive/components/scoped-models-selector.js +293 -0
  1879. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  1880. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  1881. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  1882. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  1883. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  1884. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  1885. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  1886. package/dist/modes/interactive/components/session-selector.js +857 -0
  1887. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  1888. package/dist/modes/interactive/components/settings-selector.d.ts +157 -0
  1889. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  1890. package/dist/modes/interactive/components/settings-selector.js +1273 -0
  1891. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  1892. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  1893. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  1894. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  1895. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  1896. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  1897. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  1898. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  1899. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  1900. package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  1901. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  1902. package/dist/modes/interactive/components/status-indicator.js +60 -0
  1903. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  1904. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  1905. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  1906. package/dist/modes/interactive/components/theme-selector.js +50 -0
  1907. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  1908. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  1909. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  1910. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  1911. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  1912. package/dist/modes/interactive/components/thinking-summary.d.ts +36 -0
  1913. package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -0
  1914. package/dist/modes/interactive/components/thinking-summary.js +96 -0
  1915. package/dist/modes/interactive/components/thinking-summary.js.map +1 -0
  1916. package/dist/modes/interactive/components/thinking-tail.d.ts +22 -0
  1917. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -0
  1918. package/dist/modes/interactive/components/thinking-tail.js +27 -0
  1919. package/dist/modes/interactive/components/thinking-tail.js.map +1 -0
  1920. package/dist/modes/interactive/components/tool-execution.d.ts +81 -0
  1921. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  1922. package/dist/modes/interactive/components/tool-execution.js +473 -0
  1923. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  1924. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  1925. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  1926. package/dist/modes/interactive/components/tree-selector.js +1245 -0
  1927. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  1928. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  1929. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  1930. package/dist/modes/interactive/components/trust-selector.js +91 -0
  1931. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  1932. package/dist/modes/interactive/components/usage-view.d.ts +42 -0
  1933. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -0
  1934. package/dist/modes/interactive/components/usage-view.js +140 -0
  1935. package/dist/modes/interactive/components/usage-view.js.map +1 -0
  1936. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  1937. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  1938. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  1939. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  1940. package/dist/modes/interactive/components/user-message.d.ts +17 -0
  1941. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  1942. package/dist/modes/interactive/components/user-message.js +63 -0
  1943. package/dist/modes/interactive/components/user-message.js.map +1 -0
  1944. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  1945. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  1946. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  1947. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  1948. package/dist/modes/interactive/interactive-mode.d.ts +508 -0
  1949. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  1950. package/dist/modes/interactive/interactive-mode.js +6867 -0
  1951. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  1952. package/dist/modes/interactive/model-search.d.ts +12 -0
  1953. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  1954. package/dist/modes/interactive/model-search.js +15 -0
  1955. package/dist/modes/interactive/model-search.js.map +1 -0
  1956. package/dist/modes/interactive/skill-tag-autocomplete.d.ts +13 -0
  1957. package/dist/modes/interactive/skill-tag-autocomplete.d.ts.map +1 -0
  1958. package/dist/modes/interactive/skill-tag-autocomplete.js +72 -0
  1959. package/dist/modes/interactive/skill-tag-autocomplete.js.map +1 -0
  1960. package/dist/modes/interactive/smooth-streaming.d.ts +43 -0
  1961. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -0
  1962. package/dist/modes/interactive/smooth-streaming.js +182 -0
  1963. package/dist/modes/interactive/smooth-streaming.js.map +1 -0
  1964. package/dist/modes/interactive/theme/moon.json +83 -0
  1965. package/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  1966. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  1967. package/dist/modes/interactive/theme/theme-controller.js +97 -0
  1968. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  1969. package/dist/modes/interactive/theme/theme-schema.json +363 -0
  1970. package/dist/modes/interactive/theme/theme.d.ts +128 -0
  1971. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  1972. package/dist/modes/interactive/theme/theme.js +1092 -0
  1973. package/dist/modes/interactive/theme/theme.js.map +1 -0
  1974. package/dist/modes/print-mode.d.ts +28 -0
  1975. package/dist/modes/print-mode.d.ts.map +1 -0
  1976. package/dist/modes/print-mode.js +132 -0
  1977. package/dist/modes/print-mode.js.map +1 -0
  1978. package/dist/modes/rpc/jsonl.d.ts +17 -0
  1979. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  1980. package/dist/modes/rpc/jsonl.js +49 -0
  1981. package/dist/modes/rpc/jsonl.js.map +1 -0
  1982. package/dist/modes/rpc/rpc-client.d.ts +242 -0
  1983. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  1984. package/dist/modes/rpc/rpc-client.js +481 -0
  1985. package/dist/modes/rpc/rpc-client.js.map +1 -0
  1986. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  1987. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  1988. package/dist/modes/rpc/rpc-mode.js +635 -0
  1989. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  1990. package/dist/modes/rpc/rpc-types.d.ts +446 -0
  1991. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  1992. package/dist/modes/rpc/rpc-types.js +8 -0
  1993. package/dist/modes/rpc/rpc-types.js.map +1 -0
  1994. package/dist/package-manager-cli.d.ts +8 -0
  1995. package/dist/package-manager-cli.d.ts.map +1 -0
  1996. package/dist/package-manager-cli.js +378 -0
  1997. package/dist/package-manager-cli.js.map +1 -0
  1998. package/dist/rpc-entry.d.ts +3 -0
  1999. package/dist/rpc-entry.d.ts.map +1 -0
  2000. package/dist/rpc-entry.js +10 -0
  2001. package/dist/rpc-entry.js.map +1 -0
  2002. package/dist/startup/interactive-shell.d.ts +55 -0
  2003. package/dist/startup/interactive-shell.d.ts.map +1 -0
  2004. package/dist/startup/interactive-shell.js +263 -0
  2005. package/dist/startup/interactive-shell.js.map +1 -0
  2006. package/dist/startup/launch-routing.d.ts +8 -0
  2007. package/dist/startup/launch-routing.d.ts.map +1 -0
  2008. package/dist/startup/launch-routing.js +30 -0
  2009. package/dist/startup/launch-routing.js.map +1 -0
  2010. package/dist/startup/startup-milestones.d.ts +4 -0
  2011. package/dist/startup/startup-milestones.d.ts.map +1 -0
  2012. package/dist/startup/startup-milestones.js +13 -0
  2013. package/dist/startup/startup-milestones.js.map +1 -0
  2014. package/dist/utils/ansi.d.ts +2 -0
  2015. package/dist/utils/ansi.d.ts.map +1 -0
  2016. package/dist/utils/ansi.js +52 -0
  2017. package/dist/utils/ansi.js.map +1 -0
  2018. package/dist/utils/child-process.d.ts +18 -0
  2019. package/dist/utils/child-process.d.ts.map +1 -0
  2020. package/dist/utils/child-process.js +106 -0
  2021. package/dist/utils/child-process.js.map +1 -0
  2022. package/dist/utils/clipboard-image.d.ts +11 -0
  2023. package/dist/utils/clipboard-image.d.ts.map +1 -0
  2024. package/dist/utils/clipboard-image.js +304 -0
  2025. package/dist/utils/clipboard-image.js.map +1 -0
  2026. package/dist/utils/clipboard-native.d.ts +11 -0
  2027. package/dist/utils/clipboard-native.d.ts.map +1 -0
  2028. package/dist/utils/clipboard-native.js +20 -0
  2029. package/dist/utils/clipboard-native.js.map +1 -0
  2030. package/dist/utils/clipboard.d.ts +4 -0
  2031. package/dist/utils/clipboard.d.ts.map +1 -0
  2032. package/dist/utils/clipboard.js +130 -0
  2033. package/dist/utils/clipboard.js.map +1 -0
  2034. package/dist/utils/deprecation.d.ts +4 -0
  2035. package/dist/utils/deprecation.d.ts.map +1 -0
  2036. package/dist/utils/deprecation.js +13 -0
  2037. package/dist/utils/deprecation.js.map +1 -0
  2038. package/dist/utils/exif-orientation.d.ts +5 -0
  2039. package/dist/utils/exif-orientation.d.ts.map +1 -0
  2040. package/dist/utils/exif-orientation.js +158 -0
  2041. package/dist/utils/exif-orientation.js.map +1 -0
  2042. package/dist/utils/frontmatter.d.ts +8 -0
  2043. package/dist/utils/frontmatter.d.ts.map +1 -0
  2044. package/dist/utils/frontmatter.js +26 -0
  2045. package/dist/utils/frontmatter.js.map +1 -0
  2046. package/dist/utils/fs-watch.d.ts +5 -0
  2047. package/dist/utils/fs-watch.d.ts.map +1 -0
  2048. package/dist/utils/fs-watch.js +25 -0
  2049. package/dist/utils/fs-watch.js.map +1 -0
  2050. package/dist/utils/git.d.ts +26 -0
  2051. package/dist/utils/git.d.ts.map +1 -0
  2052. package/dist/utils/git.js +195 -0
  2053. package/dist/utils/git.js.map +1 -0
  2054. package/dist/utils/html.d.ts +7 -0
  2055. package/dist/utils/html.d.ts.map +1 -0
  2056. package/dist/utils/html.js +40 -0
  2057. package/dist/utils/html.js.map +1 -0
  2058. package/dist/utils/image-convert.d.ts +10 -0
  2059. package/dist/utils/image-convert.d.ts.map +1 -0
  2060. package/dist/utils/image-convert.js +45 -0
  2061. package/dist/utils/image-convert.js.map +1 -0
  2062. package/dist/utils/image-process.d.ts +18 -0
  2063. package/dist/utils/image-process.d.ts.map +1 -0
  2064. package/dist/utils/image-process.js +83 -0
  2065. package/dist/utils/image-process.js.map +1 -0
  2066. package/dist/utils/image-resize-core.d.ts +30 -0
  2067. package/dist/utils/image-resize-core.d.ts.map +1 -0
  2068. package/dist/utils/image-resize-core.js +124 -0
  2069. package/dist/utils/image-resize-core.js.map +1 -0
  2070. package/dist/utils/image-resize-worker.d.ts +2 -0
  2071. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  2072. package/dist/utils/image-resize-worker.js +31 -0
  2073. package/dist/utils/image-resize-worker.js.map +1 -0
  2074. package/dist/utils/image-resize.d.ts +16 -0
  2075. package/dist/utils/image-resize.d.ts.map +1 -0
  2076. package/dist/utils/image-resize.js +97 -0
  2077. package/dist/utils/image-resize.js.map +1 -0
  2078. package/dist/utils/json.d.ts +3 -0
  2079. package/dist/utils/json.d.ts.map +1 -0
  2080. package/dist/utils/json.js +7 -0
  2081. package/dist/utils/json.js.map +1 -0
  2082. package/dist/utils/mime.d.ts +3 -0
  2083. package/dist/utils/mime.d.ts.map +1 -0
  2084. package/dist/utils/mime.js +110 -0
  2085. package/dist/utils/mime.js.map +1 -0
  2086. package/dist/utils/open-browser.d.ts +9 -0
  2087. package/dist/utils/open-browser.d.ts.map +1 -0
  2088. package/dist/utils/open-browser.js +22 -0
  2089. package/dist/utils/open-browser.js.map +1 -0
  2090. package/dist/utils/paths.d.ts +31 -0
  2091. package/dist/utils/paths.d.ts.map +1 -0
  2092. package/dist/utils/paths.js +92 -0
  2093. package/dist/utils/paths.js.map +1 -0
  2094. package/dist/utils/photon.d.ts +21 -0
  2095. package/dist/utils/photon.d.ts.map +1 -0
  2096. package/dist/utils/photon.js +121 -0
  2097. package/dist/utils/photon.js.map +1 -0
  2098. package/dist/utils/pi-user-agent.d.ts +2 -0
  2099. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  2100. package/dist/utils/pi-user-agent.js +5 -0
  2101. package/dist/utils/pi-user-agent.js.map +1 -0
  2102. package/dist/utils/shell.d.ts +31 -0
  2103. package/dist/utils/shell.d.ts.map +1 -0
  2104. package/dist/utils/shell.js +202 -0
  2105. package/dist/utils/shell.js.map +1 -0
  2106. package/dist/utils/sleep.d.ts +5 -0
  2107. package/dist/utils/sleep.d.ts.map +1 -0
  2108. package/dist/utils/sleep.js +17 -0
  2109. package/dist/utils/sleep.js.map +1 -0
  2110. package/dist/utils/syntax-highlight.d.ts +12 -0
  2111. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  2112. package/dist/utils/syntax-highlight.js +118 -0
  2113. package/dist/utils/syntax-highlight.js.map +1 -0
  2114. package/dist/utils/tools-manager.d.ts +3 -0
  2115. package/dist/utils/tools-manager.d.ts.map +1 -0
  2116. package/dist/utils/tools-manager.js +328 -0
  2117. package/dist/utils/tools-manager.js.map +1 -0
  2118. package/docs/compaction.md +396 -0
  2119. package/docs/containerization.md +111 -0
  2120. package/docs/custom-provider.md +735 -0
  2121. package/docs/development.md +104 -0
  2122. package/docs/docs.json +160 -0
  2123. package/docs/extensions.md +2913 -0
  2124. package/docs/features.md +102 -0
  2125. package/docs/images/doom-extension.png +0 -0
  2126. package/docs/images/exy.png +0 -0
  2127. package/docs/images/interactive-mode.png +0 -0
  2128. package/docs/images/tree-view.png +0 -0
  2129. package/docs/index.md +88 -0
  2130. package/docs/json.md +82 -0
  2131. package/docs/keybindings.md +202 -0
  2132. package/docs/models.md +540 -0
  2133. package/docs/packages.md +224 -0
  2134. package/docs/prompt-templates.md +95 -0
  2135. package/docs/providers.md +308 -0
  2136. package/docs/quickstart.md +200 -0
  2137. package/docs/rpc.md +1474 -0
  2138. package/docs/sdk.md +1185 -0
  2139. package/docs/security.md +59 -0
  2140. package/docs/session-format.md +422 -0
  2141. package/docs/sessions.md +146 -0
  2142. package/docs/settings.md +341 -0
  2143. package/docs/shell-aliases.md +13 -0
  2144. package/docs/skills.md +241 -0
  2145. package/docs/terminal-setup.md +155 -0
  2146. package/docs/termux.md +127 -0
  2147. package/docs/themes.md +295 -0
  2148. package/docs/tmux.md +63 -0
  2149. package/docs/tui.md +927 -0
  2150. package/docs/usage.md +337 -0
  2151. package/docs/windows.md +25 -0
  2152. package/examples/README.md +27 -0
  2153. package/examples/extensions/README.md +213 -0
  2154. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  2155. package/examples/extensions/bash-spawn-hook.ts +30 -0
  2156. package/examples/extensions/bookmark.ts +50 -0
  2157. package/examples/extensions/border-status-editor.ts +150 -0
  2158. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  2159. package/examples/extensions/claude-rules.ts +86 -0
  2160. package/examples/extensions/commands.ts +72 -0
  2161. package/examples/extensions/confirm-destructive.ts +59 -0
  2162. package/examples/extensions/custom-compaction.ts +128 -0
  2163. package/examples/extensions/custom-footer.ts +64 -0
  2164. package/examples/extensions/custom-header.ts +73 -0
  2165. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  2166. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  2167. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  2168. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -0
  2169. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  2170. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  2171. package/examples/extensions/dirty-repo-guard.ts +56 -0
  2172. package/examples/extensions/doom-overlay/README.md +46 -0
  2173. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  2174. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  2175. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  2176. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  2177. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  2178. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  2179. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  2180. package/examples/extensions/doom-overlay/index.ts +74 -0
  2181. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  2182. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  2183. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  2184. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  2185. package/examples/extensions/dynamic-resources/index.ts +15 -0
  2186. package/examples/extensions/dynamic-tools.ts +74 -0
  2187. package/examples/extensions/entry-renderer.ts +41 -0
  2188. package/examples/extensions/event-bus.ts +43 -0
  2189. package/examples/extensions/file-trigger.ts +41 -0
  2190. package/examples/extensions/git-checkpoint.ts +53 -0
  2191. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  2192. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  2193. package/examples/extensions/gondolin/index.ts +531 -0
  2194. package/examples/extensions/gondolin/package-lock.json +185 -0
  2195. package/examples/extensions/gondolin/package.json +19 -0
  2196. package/examples/extensions/handoff.ts +191 -0
  2197. package/examples/extensions/hello.ts +26 -0
  2198. package/examples/extensions/hidden-thinking-label.ts +53 -0
  2199. package/examples/extensions/inline-bash.ts +94 -0
  2200. package/examples/extensions/input-transform-streaming.ts +39 -0
  2201. package/examples/extensions/input-transform.ts +43 -0
  2202. package/examples/extensions/interactive-shell.ts +196 -0
  2203. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  2204. package/examples/extensions/mac-system-theme.ts +47 -0
  2205. package/examples/extensions/message-renderer.ts +59 -0
  2206. package/examples/extensions/minimal-mode.ts +426 -0
  2207. package/examples/extensions/modal-editor.ts +85 -0
  2208. package/examples/extensions/model-status.ts +31 -0
  2209. package/examples/extensions/notify.ts +55 -0
  2210. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  2211. package/examples/extensions/overlay-test.ts +153 -0
  2212. package/examples/extensions/permission-gate.ts +34 -0
  2213. package/examples/extensions/pirate.ts +47 -0
  2214. package/examples/extensions/plan-mode/README.md +68 -0
  2215. package/examples/extensions/plan-mode/index.ts +390 -0
  2216. package/examples/extensions/plan-mode/utils.ts +168 -0
  2217. package/examples/extensions/preset.ts +436 -0
  2218. package/examples/extensions/project-trust.ts +64 -0
  2219. package/examples/extensions/prompt-customizer.ts +97 -0
  2220. package/examples/extensions/protected-paths.ts +30 -0
  2221. package/examples/extensions/provider-payload.ts +18 -0
  2222. package/examples/extensions/qna.ts +122 -0
  2223. package/examples/extensions/question.ts +286 -0
  2224. package/examples/extensions/questionnaire.ts +448 -0
  2225. package/examples/extensions/rainbow-editor.ts +88 -0
  2226. package/examples/extensions/reload-runtime.ts +37 -0
  2227. package/examples/extensions/rpc-demo.ts +118 -0
  2228. package/examples/extensions/sandbox/index.ts +321 -0
  2229. package/examples/extensions/sandbox/package-lock.json +92 -0
  2230. package/examples/extensions/sandbox/package.json +19 -0
  2231. package/examples/extensions/send-user-message.ts +97 -0
  2232. package/examples/extensions/session-name.ts +27 -0
  2233. package/examples/extensions/shutdown-command.ts +63 -0
  2234. package/examples/extensions/snake.ts +343 -0
  2235. package/examples/extensions/space-invaders.ts +560 -0
  2236. package/examples/extensions/ssh.ts +220 -0
  2237. package/examples/extensions/status-line.ts +32 -0
  2238. package/examples/extensions/structured-output.ts +65 -0
  2239. package/examples/extensions/subagent/README.md +177 -0
  2240. package/examples/extensions/subagent/agents/planner.md +37 -0
  2241. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  2242. package/examples/extensions/subagent/agents/scout.md +50 -0
  2243. package/examples/extensions/subagent/agents/worker.md +24 -0
  2244. package/examples/extensions/subagent/agents.ts +126 -0
  2245. package/examples/extensions/subagent/index.ts +1015 -0
  2246. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  2247. package/examples/extensions/subagent/prompts/implement.md +10 -0
  2248. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  2249. package/examples/extensions/summarize.ts +207 -0
  2250. package/examples/extensions/system-prompt-header.ts +17 -0
  2251. package/examples/extensions/tic-tac-toe.ts +1008 -0
  2252. package/examples/extensions/timed-confirm.ts +70 -0
  2253. package/examples/extensions/titlebar-spinner.ts +58 -0
  2254. package/examples/extensions/todo.ts +298 -0
  2255. package/examples/extensions/tool-override.ts +144 -0
  2256. package/examples/extensions/tools.ts +146 -0
  2257. package/examples/extensions/trigger-compact.ts +50 -0
  2258. package/examples/extensions/truncated-tool.ts +195 -0
  2259. package/examples/extensions/widget-placement.ts +9 -0
  2260. package/examples/extensions/with-deps/index.ts +32 -0
  2261. package/examples/extensions/with-deps/package-lock.json +31 -0
  2262. package/examples/extensions/with-deps/package.json +22 -0
  2263. package/examples/extensions/working-indicator.ts +123 -0
  2264. package/examples/extensions/working-message-test.ts +25 -0
  2265. package/examples/rpc-extension-ui.ts +632 -0
  2266. package/examples/sdk/01-minimal.ts +26 -0
  2267. package/examples/sdk/02-custom-model.ts +50 -0
  2268. package/examples/sdk/03-custom-prompt.ts +75 -0
  2269. package/examples/sdk/04-skills.ts +55 -0
  2270. package/examples/sdk/05-tools.ts +48 -0
  2271. package/examples/sdk/06-extensions.ts +99 -0
  2272. package/examples/sdk/07-context-files.ts +47 -0
  2273. package/examples/sdk/08-prompt-templates.ts +51 -0
  2274. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  2275. package/examples/sdk/10-settings.ts +53 -0
  2276. package/examples/sdk/11-sessions.ts +52 -0
  2277. package/examples/sdk/12-full-control.ts +72 -0
  2278. package/examples/sdk/13-session-runtime.ts +67 -0
  2279. package/examples/sdk/README.md +144 -0
  2280. package/package.json +115 -0
@@ -0,0 +1,3534 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ // @ts-nocheck
10
+ import { spawn, spawnSync } from "node:child_process";
11
+ import * as fs from "node:fs";
12
+ import * as path from "node:path";
13
+ import { pathToFileURL } from "node:url";
14
+ import { writeAtomicJson } from "../../shared/atomic-json.js";
15
+ import { createChildTranscriptWriter } from "../../shared/child-transcript.js";
16
+ import { closeSteerInbox, consumeInterruptRequest, consumeSteerRequests, deliverInterruptRequest, deliverStopRequest, deliverTimeoutRequest, enqueueStepSteer, steerAcksDir, steerCapabilityPath, stepSteerInboxDir, watchAsyncControlInbox } from "./control-channel.js";
17
+ import { appendJsonl as appendRawJsonl, getArtifactPaths } from "../../shared/artifacts.js";
18
+ import { PI_CODING_AGENT_PACKAGE, getPiSpawnCommand, resolveInstalledPiPackageRoot } from "../shared/pi-spawn.js";
19
+ import { captureSingleOutputSnapshot, extractChildWrittenOutput, finalizeSingleOutput, formatSavedOutputReference, injectOutputPathSystemPrompt, injectSingleOutputInstruction, resolveSingleOutput } from "../shared/single-output.js";
20
+ import { DEFAULT_MAX_OUTPUT, SUBAGENT_LIFECYCLE_ARTIFACT_VERSION, truncateOutput, getSubagentDepthEnv, } from "../../shared/types.js";
21
+ import { DEFAULT_CONTROL_CONFIG, buildControlEvent, deriveActivityState, claimControlNotification, formatControlIntercomMessage, formatControlNoticeMessage, } from "../shared/subagent-control.js";
22
+ import { isDynamicRunnerGroup, isParallelGroup, flattenSteps, mapConcurrent, aggregateParallelOutputs, MAX_PARALLEL_CONCURRENCY, DEFAULT_GLOBAL_CONCURRENCY_LIMIT, Semaphore, } from "../shared/parallel-utils.js";
23
+ import { applyThinkingSuffix, buildPiArgs, cleanupTempDir } from "../shared/pi-args.js";
24
+ import { snapshotParentPermissionMode } from "../../../../../core/subagent-permission-inherit.js";
25
+ import { resolveChildExcludeTools } from "../shared/child-tools.js";
26
+ import { outputEntryFromAsyncResult, resolveOutputReferences } from "../shared/chain-outputs.js";
27
+ import { createStructuredOutputRuntime, readStructuredOutput } from "../shared/structured-output.js";
28
+ import { readChildToolDiagnosticError } from "../shared/tool-availability.js";
29
+ import { collectDynamicResults, DynamicFanoutError, materializeDynamicParallelStep, validateDynamicCollection } from "../shared/dynamic-fanout.js";
30
+ import { nestedSummaryFromAsyncStatus, projectNestedEvents, resolveNestedAsyncDir, writeNestedEvent } from "../shared/nested-events.js";
31
+ import { formatModelAttemptNote, isRetryableModelFailure } from "../shared/model-fallback.js";
32
+ import { createSteeringStatus, recordSteeringRequest, steeringStatus, terminalSteeringNoticeState, updateSteeringTarget } from "./steering.js";
33
+ import { attachPostExitStdioGuard, trySignalChild } from "../../shared/post-exit-stdio-guard.js";
34
+ import { detectSubagentError, extractTextFromContent, extractToolArgsPreview, getFinalOutput, readStatus } from "../../shared/utils.js";
35
+ import { evaluateCompletionMutationGuard } from "../shared/completion-guard.js";
36
+ import { createMutatingFailureState, didMutatingToolFail, isMutatingTool, nextLongRunningTrigger, recordMutatingFailure, resetMutatingFailureState, resolveCurrentPath, shouldEscalateMutatingFailures, summarizeRecentMutatingFailures, } from "../shared/long-running-guard.js";
37
+ import { parseSessionTokens } from "../../shared/session-tokens.js";
38
+ import { cleanupWorktrees, createWorktrees, diffWorktrees, findWorktreeTaskCwdConflict, formatWorktreeDiffSummary, formatWorktreeTaskCwdConflict, } from "../shared/worktree.js";
39
+ import { resolveEffectiveThinking } from "../../shared/model-info.js";
40
+ import { writeInitialProgressFile } from "../../shared/settings.js";
41
+ import { resolveSubagentIntercomTarget } from "../../intercom/intercom-bridge.js";
42
+ import { acceptanceFailureMessage, aggregateAcceptanceReport, buildSkippedAcceptanceLedger, evaluateAcceptance, formatAcceptancePrompt, resolveEffectiveAcceptance, stripAcceptanceReport } from "../shared/acceptance.js";
43
+ import { waitForImportedAsyncRoot } from "./chain-root-attachment.js";
44
+ import { appendRunnerStepsToStatus, consumeChainAppendRequests, countPendingChainAppendRequests } from "./chain-append.js";
45
+ import { appendTurnBudgetSystemPrompt, formatTurnBudgetOutput, initialTurnBudgetState, shouldAbortForTurnBudget, turnBudgetExceededMessage, turnBudgetSoftNote, turnBudgetState } from "../shared/turn-budget.js";
46
+ import { initialToolBudgetState, toolBudgetState } from "../shared/tool-budget.js";
47
+ import { resolveWatchdogConfig } from "../../watchdog/settings.js";
48
+ import { createBoundedByteTail, createBoundedLineReader, formatProtocolOutputLimit, MAX_CHILD_STDERR_BYTES, projectChildLifecycle } from "../shared/child-protocol.js";
49
+ import { acquireSessionLease } from "../shared/session-lease.js";
50
+ import { CHILD_WATCHDOG_CONFIG_ENV, acceptChildWatchdogEvent, childWatchdogIsActive, decodeChildWatchdogConfig, isChildWatchdogStatusEvent, resolveChildWatchdogConfig, } from "../../watchdog/child-status.js";
51
+ const ASYNC_INTERRUPT_SIGNAL = process.platform === "win32" ? "SIGBREAK" : "SIGUSR2";
52
+ const DEFAULT_MAX_ASYNC_EVENTS_BYTES = 50 * 1024 * 1024;
53
+ const ASYNC_EVENTS_MAX_BYTES_ENV = "PI_SUBAGENT_ASYNC_EVENTS_MAX_BYTES";
54
+ const TRUNCATED_EVENT_TYPE = "subagent.events.truncated";
55
+ const TRUNCATION_MARKER_RESERVE_BYTES = 512;
56
+ const asyncEventLogStates = new Map();
57
+ function maxAsyncEventsBytes() {
58
+ const raw = process.env[ASYNC_EVENTS_MAX_BYTES_ENV];
59
+ if (!raw)
60
+ return DEFAULT_MAX_ASYNC_EVENTS_BYTES;
61
+ const parsed = Number(raw);
62
+ if (!Number.isFinite(parsed) || parsed < 0)
63
+ return DEFAULT_MAX_ASYNC_EVENTS_BYTES;
64
+ return Math.floor(parsed);
65
+ }
66
+ function eventLogState(filePath) {
67
+ let state = asyncEventLogStates.get(filePath);
68
+ if (state)
69
+ return state;
70
+ let bytes = 0;
71
+ try {
72
+ bytes = fs.statSync(filePath).size;
73
+ }
74
+ catch (error) {
75
+ if (error.code !== "ENOENT") {
76
+ // Diagnostic event accounting is best-effort; writes below are also safe.
77
+ }
78
+ }
79
+ state = { bytes, diagnosticsTruncated: false };
80
+ asyncEventLogStates.set(filePath, state);
81
+ return state;
82
+ }
83
+ function appendJsonl(filePath, line) {
84
+ try {
85
+ appendRawJsonl(filePath, line);
86
+ const state = asyncEventLogStates.get(filePath);
87
+ if (state)
88
+ state.bytes += Buffer.byteLength(`${line}\n`, "utf-8");
89
+ }
90
+ catch {
91
+ // Async event logging is diagnostic and must not fail the run.
92
+ }
93
+ }
94
+ function appendDiagnosticJsonl(filePath, line, droppedEventType) {
95
+ if (!line.trim())
96
+ return;
97
+ const state = eventLogState(filePath);
98
+ if (state.diagnosticsTruncated)
99
+ return;
100
+ const maxBytes = maxAsyncEventsBytes();
101
+ const chunkBytes = Buffer.byteLength(`${line}\n`, "utf-8");
102
+ const diagnosticBudget = Math.max(0, maxBytes - TRUNCATION_MARKER_RESERVE_BYTES);
103
+ if (state.bytes + chunkBytes <= diagnosticBudget) {
104
+ appendJsonl(filePath, line);
105
+ return;
106
+ }
107
+ const marker = JSON.stringify({
108
+ type: TRUNCATED_EVENT_TYPE,
109
+ ts: Date.now(),
110
+ maxBytes,
111
+ droppedEventType,
112
+ });
113
+ if (state.bytes + Buffer.byteLength(`${marker}\n`, "utf-8") <= maxBytes) {
114
+ appendJsonl(filePath, marker);
115
+ }
116
+ state.diagnosticsTruncated = true;
117
+ }
118
+ function shouldPersistChildEvent(event) {
119
+ return event.type !== "message_update";
120
+ }
121
+ function findLatestSessionFile(sessionDir) {
122
+ try {
123
+ const files = fs
124
+ .readdirSync(sessionDir)
125
+ .filter((f) => f.endsWith(".jsonl"))
126
+ .map((f) => path.join(sessionDir, f));
127
+ if (files.length === 0)
128
+ return null;
129
+ files.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);
130
+ return files[0] ?? null;
131
+ }
132
+ catch {
133
+ // Session lookup is optional metadata.
134
+ return null;
135
+ }
136
+ }
137
+ function emptyUsage() {
138
+ return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };
139
+ }
140
+ function tokenUsageFromAttempts(attempts) {
141
+ if (!attempts || attempts.length === 0)
142
+ return null;
143
+ let input = 0;
144
+ let output = 0;
145
+ for (const attempt of attempts) {
146
+ input += attempt.usage?.input ?? 0;
147
+ output += attempt.usage?.output ?? 0;
148
+ }
149
+ const total = input + output;
150
+ return total > 0 ? { input, output, total } : null;
151
+ }
152
+ function costSummaryFromAttempts(attempts) {
153
+ if (!attempts || attempts.length === 0)
154
+ return undefined;
155
+ let inputTokens = 0;
156
+ let outputTokens = 0;
157
+ let costUsd = 0;
158
+ for (const attempt of attempts) {
159
+ inputTokens += attempt.usage?.input ?? 0;
160
+ outputTokens += attempt.usage?.output ?? 0;
161
+ costUsd += attempt.usage?.cost ?? 0;
162
+ }
163
+ return inputTokens > 0 || outputTokens > 0 || costUsd > 0
164
+ ? { inputTokens, outputTokens, costUsd }
165
+ : undefined;
166
+ }
167
+ function appendRecentStepOutput(step, lines) {
168
+ const nonEmpty = lines.filter((line) => line.trim());
169
+ if (nonEmpty.length === 0)
170
+ return;
171
+ step.recentOutput ??= [];
172
+ step.recentOutput.push(...nonEmpty);
173
+ if (step.recentOutput.length > 50) {
174
+ step.recentOutput.splice(0, step.recentOutput.length - 50);
175
+ }
176
+ }
177
+ function isTerminalAssistantStop(message) {
178
+ const stopReason = message.stopReason;
179
+ const hasToolCall = Array.isArray(message.content)
180
+ && message.content.some((part) => part.type === "toolCall");
181
+ return stopReason === "stop" && !hasToolCall;
182
+ }
183
+ function resetStepLiveDetail(step) {
184
+ step.currentTool = undefined;
185
+ step.currentToolArgs = undefined;
186
+ step.currentToolStartedAt = undefined;
187
+ step.currentPath = undefined;
188
+ step.recentTools = [];
189
+ step.recentOutput = [];
190
+ }
191
+ function runPiStreaming(args, cwd, outputFile, env, piPackageRoot, piArgv1, maxSubagentDepth, childEventContext, registerInterrupt, onChildEvent, transcriptWriter, registerTimeout, timeoutMessage, registerStop, stopMessage, registerTurnBudgetAbort, onWriterProcess) {
192
+ return new Promise((resolve) => {
193
+ onWriterProcess?.({ state: "spawning" });
194
+ const outputStream = fs.createWriteStream(outputFile, { flags: "w" });
195
+ const spawnEnv = { ...process.env, ...(env ?? {}), ...getSubagentDepthEnv(maxSubagentDepth) };
196
+ const spawnSpec = getPiSpawnCommand(args, {
197
+ ...(piPackageRoot ? { piPackageRoot } : {}),
198
+ ...(piArgv1 ? { argv1: piArgv1 } : {}),
199
+ });
200
+ const child = spawn(spawnSpec.command, spawnSpec.args, {
201
+ cwd,
202
+ stdio: ["ignore", "pipe", "pipe"],
203
+ env: spawnEnv,
204
+ windowsHide: true,
205
+ });
206
+ const stderrTail = createBoundedByteTail();
207
+ const rawStdoutTail = createBoundedByteTail();
208
+ const messages = [];
209
+ const usage = emptyUsage();
210
+ let model;
211
+ let writerRegistrationError;
212
+ if (typeof child.pid === "number") {
213
+ try {
214
+ onWriterProcess?.({ state: "running", pid: child.pid });
215
+ }
216
+ catch (writerError) {
217
+ writerRegistrationError = `Failed to record revived Pi writer ownership: ${writerError instanceof Error ? writerError.message : String(writerError)}`;
218
+ trySignalChild(child, "SIGKILL");
219
+ }
220
+ }
221
+ let error = writerRegistrationError;
222
+ let assistantError;
223
+ let interrupted = false;
224
+ let timedOut = false;
225
+ let stopped = false;
226
+ let turnBudgetExceeded = false;
227
+ let turnBudgetMessage;
228
+ let turnBudget;
229
+ let observedMutationAttempt = false;
230
+ const childWatchdogConfig = decodeChildWatchdogConfig(env?.[CHILD_WATCHDOG_CONFIG_ENV]);
231
+ let childWatchdogState;
232
+ let applyChildLifecycle = (_action) => { };
233
+ const updateChildWatchdogState = (snapshot) => {
234
+ childWatchdogState = snapshot;
235
+ };
236
+ const writeOutputLine = (line) => {
237
+ if (!line.trim())
238
+ return;
239
+ outputStream.write(`${line}\n`);
240
+ };
241
+ const writeOutputText = (text) => {
242
+ for (const line of text.split("\n")) {
243
+ writeOutputLine(line);
244
+ }
245
+ };
246
+ const appendChildEvent = (event) => {
247
+ if (!childEventContext)
248
+ return;
249
+ if (!shouldPersistChildEvent(event))
250
+ return;
251
+ appendDiagnosticJsonl(childEventContext.eventsPath, JSON.stringify({
252
+ ...event,
253
+ subagentSource: "child",
254
+ subagentRunId: childEventContext.runId,
255
+ subagentStepIndex: childEventContext.stepIndex,
256
+ subagentAgent: childEventContext.agent,
257
+ observedAt: Date.now(),
258
+ }), typeof event.type === "string" ? event.type : undefined);
259
+ };
260
+ const appendChildLine = (type, line) => {
261
+ appendChildEvent({ type, line });
262
+ if (type === "subagent.child.stdout")
263
+ transcriptWriter?.writeStdoutLine(line);
264
+ else
265
+ transcriptWriter?.writeStderrLine(line);
266
+ };
267
+ const processStdoutLine = (line) => {
268
+ if (!line.trim())
269
+ return;
270
+ let event;
271
+ try {
272
+ event = JSON.parse(line);
273
+ }
274
+ catch {
275
+ rawStdoutTail.push(`${line}\n`);
276
+ writeOutputLine(line);
277
+ appendChildLine("subagent.child.stdout", line);
278
+ return;
279
+ }
280
+ appendChildEvent(event);
281
+ transcriptWriter?.writeChildEvent(event);
282
+ if (event.type === "agent_settled")
283
+ agentSettledReceived = true;
284
+ applyChildLifecycle(projectChildLifecycle(event));
285
+ if (isChildWatchdogStatusEvent(event)) {
286
+ if (!childWatchdogConfig)
287
+ return;
288
+ const next = acceptChildWatchdogEvent({
289
+ current: childWatchdogState,
290
+ event,
291
+ runId: childEventContext?.runId,
292
+ agent: childEventContext?.agent,
293
+ childIndex: childEventContext?.stepIndex,
294
+ });
295
+ if (!next)
296
+ return;
297
+ updateChildWatchdogState(next);
298
+ onChildEvent?.(event);
299
+ if (childWatchdogIsActive(next)) {
300
+ if (finalDrainTimer) {
301
+ clearTimeout(finalDrainTimer);
302
+ finalDrainTimer = undefined;
303
+ }
304
+ if (finalHardKillTimer) {
305
+ clearTimeout(finalHardKillTimer);
306
+ finalHardKillTimer = undefined;
307
+ }
308
+ armWatchdogTail();
309
+ }
310
+ else {
311
+ clearWatchdogTailTimer();
312
+ if (cleanTerminalAssistantStopReceived || agentSettledReceived)
313
+ startFinalDrain();
314
+ }
315
+ return;
316
+ }
317
+ onChildEvent?.(event);
318
+ if (event.type === "tool_execution_start" && event.toolName) {
319
+ observedMutationAttempt = observedMutationAttempt || isMutatingTool(event.toolName, event.args);
320
+ const toolArgs = extractToolArgsPreview(event.args ?? {});
321
+ writeOutputLine(toolArgs ? `${event.toolName}: ${toolArgs}` : event.toolName);
322
+ return;
323
+ }
324
+ if ((event.type === "message_end" || event.type === "tool_result_end") && event.message) {
325
+ messages.push(event.message);
326
+ const text = extractTextFromContent(event.message.content);
327
+ if (text)
328
+ writeOutputText(text);
329
+ if (event.type !== "message_end" || event.message.role !== "assistant")
330
+ return;
331
+ if (event.message.model)
332
+ model = event.message.model;
333
+ if (event.message.errorMessage)
334
+ assistantError = event.message.errorMessage;
335
+ const eventUsage = event.message.usage;
336
+ if (eventUsage) {
337
+ usage.turns++;
338
+ usage.input += eventUsage.input ?? eventUsage.inputTokens ?? 0;
339
+ usage.output += eventUsage.output ?? eventUsage.outputTokens ?? 0;
340
+ usage.cacheRead += eventUsage.cacheRead ?? 0;
341
+ usage.cacheWrite += eventUsage.cacheWrite ?? 0;
342
+ usage.cost += eventUsage.cost?.total ?? 0;
343
+ }
344
+ if (isTerminalAssistantStop(event.message)) {
345
+ if (!event.message.errorMessage && extractTextFromContent(event.message.content).trim())
346
+ assistantError = undefined;
347
+ cleanTerminalAssistantStopReceived ||= !event.message.errorMessage;
348
+ applyChildLifecycle(projectChildLifecycle(event, true));
349
+ }
350
+ }
351
+ };
352
+ // Guard both cases that can leave the parent waiting on `close` forever:
353
+ // a lingering stdio holder after `exit`, or a child that never exits.
354
+ const FINAL_STOP_GRACE_MS = 1000;
355
+ const HARD_KILL_MS = 3000;
356
+ const TIMEOUT_HARD_KILL_MS = 3000;
357
+ let childExited = false;
358
+ let forcedTerminationSignal = false;
359
+ let cleanTerminalAssistantStopReceived = false;
360
+ let agentSettledReceived = false;
361
+ let finalDrainTimer;
362
+ let finalHardKillTimer;
363
+ let watchdogTailTimer;
364
+ let timeoutHardKillTimer;
365
+ let turnBudgetTerminationTimer;
366
+ let turnBudgetHardKillTimer;
367
+ let protocolHardKillTimer;
368
+ let protocolError;
369
+ let settled = false;
370
+ applyChildLifecycle = (action) => {
371
+ if (action === "cancel-drain") {
372
+ if (finalDrainTimer) {
373
+ clearTimeout(finalDrainTimer);
374
+ finalDrainTimer = undefined;
375
+ }
376
+ if (finalHardKillTimer) {
377
+ clearTimeout(finalHardKillTimer);
378
+ finalHardKillTimer = undefined;
379
+ }
380
+ clearWatchdogTailTimer();
381
+ return;
382
+ }
383
+ if (action === "start-drain")
384
+ startFinalDrain();
385
+ };
386
+ const failProtocol = (limit) => {
387
+ if (protocolError)
388
+ return;
389
+ protocolError = limit;
390
+ error = formatProtocolOutputLimit(limit);
391
+ if (!childExited) {
392
+ trySignalChild(child, "SIGTERM");
393
+ protocolHardKillTimer = setTimeout(() => {
394
+ if (!settled)
395
+ trySignalChild(child, "SIGKILL");
396
+ }, 3000);
397
+ protocolHardKillTimer.unref?.();
398
+ }
399
+ };
400
+ const stdoutReader = createBoundedLineReader({ onLine: processStdoutLine, onLimit: failProtocol });
401
+ const stderrReader = createBoundedLineReader({
402
+ stream: "stderr",
403
+ maxPendingLineBytes: MAX_CHILD_STDERR_BYTES,
404
+ onLine: (line) => appendChildLine("subagent.child.stderr", line),
405
+ onLimit: (limit) => appendChildLine("subagent.child.stderr", formatProtocolOutputLimit(limit)),
406
+ });
407
+ const clearStdioGuard = attachPostExitStdioGuard(child, { idleMs: 2000, hardMs: 8000 });
408
+ child.stdout.on("data", (chunk) => stdoutReader.push(chunk));
409
+ child.stderr.on("data", (chunk) => {
410
+ stderrTail.push(chunk);
411
+ stderrReader.push(chunk);
412
+ outputStream.write(chunk);
413
+ });
414
+ registerInterrupt?.(() => {
415
+ if (settled || timedOut || stopped)
416
+ return;
417
+ interrupted = true;
418
+ if (!error)
419
+ error = "Interrupted. Waiting for explicit next action.";
420
+ trySignalChild(child, "SIGINT");
421
+ setTimeout(() => {
422
+ if (!settled && !timedOut && !stopped)
423
+ trySignalChild(child, "SIGTERM");
424
+ }, 1000).unref?.();
425
+ });
426
+ registerTimeout?.(() => {
427
+ if (settled || timedOut || stopped)
428
+ return;
429
+ timedOut = true;
430
+ interrupted = false;
431
+ error = timeoutMessage ?? "Subagent timed out.";
432
+ trySignalChild(child, "SIGTERM");
433
+ timeoutHardKillTimer = setTimeout(() => {
434
+ if (!settled)
435
+ trySignalChild(child, "SIGKILL");
436
+ }, TIMEOUT_HARD_KILL_MS);
437
+ timeoutHardKillTimer.unref?.();
438
+ });
439
+ registerStop?.(() => {
440
+ if (settled || timedOut || stopped)
441
+ return;
442
+ stopped = true;
443
+ interrupted = false;
444
+ error = stopMessage ?? "Subagent stopped by user.";
445
+ trySignalChild(child, "SIGTERM");
446
+ timeoutHardKillTimer = setTimeout(() => {
447
+ if (!settled)
448
+ trySignalChild(child, "SIGKILL");
449
+ }, TIMEOUT_HARD_KILL_MS);
450
+ timeoutHardKillTimer.unref?.();
451
+ });
452
+ registerTurnBudgetAbort?.((message, state) => {
453
+ if (settled || timedOut || stopped || turnBudgetExceeded)
454
+ return;
455
+ turnBudgetExceeded = true;
456
+ turnBudgetMessage = message;
457
+ turnBudget = state;
458
+ interrupted = false;
459
+ error = message;
460
+ trySignalChild(child, "SIGINT");
461
+ turnBudgetTerminationTimer = setTimeout(() => {
462
+ if (!settled && !timedOut && !stopped)
463
+ trySignalChild(child, "SIGTERM");
464
+ }, 1000);
465
+ turnBudgetTerminationTimer.unref?.();
466
+ turnBudgetHardKillTimer = setTimeout(() => {
467
+ if (!settled && !timedOut && !stopped)
468
+ trySignalChild(child, "SIGKILL");
469
+ }, 4000);
470
+ turnBudgetHardKillTimer.unref?.();
471
+ });
472
+ const clearDrainTimers = () => {
473
+ if (finalDrainTimer) {
474
+ clearTimeout(finalDrainTimer);
475
+ finalDrainTimer = undefined;
476
+ }
477
+ if (finalHardKillTimer) {
478
+ clearTimeout(finalHardKillTimer);
479
+ finalHardKillTimer = undefined;
480
+ }
481
+ clearWatchdogTailTimer();
482
+ if (timeoutHardKillTimer) {
483
+ clearTimeout(timeoutHardKillTimer);
484
+ timeoutHardKillTimer = undefined;
485
+ }
486
+ if (turnBudgetTerminationTimer) {
487
+ clearTimeout(turnBudgetTerminationTimer);
488
+ turnBudgetTerminationTimer = undefined;
489
+ }
490
+ if (turnBudgetHardKillTimer) {
491
+ clearTimeout(turnBudgetHardKillTimer);
492
+ turnBudgetHardKillTimer = undefined;
493
+ }
494
+ if (protocolHardKillTimer) {
495
+ clearTimeout(protocolHardKillTimer);
496
+ protocolHardKillTimer = undefined;
497
+ }
498
+ };
499
+ function startFinalDrain() {
500
+ if (childWatchdogIsActive(childWatchdogState)) {
501
+ armWatchdogTail();
502
+ return;
503
+ }
504
+ if (childExited || finalDrainTimer || settled)
505
+ return;
506
+ finalDrainTimer = setTimeout(() => {
507
+ if (settled)
508
+ return;
509
+ const termSent = trySignalChild(child, "SIGTERM");
510
+ if (!termSent)
511
+ return;
512
+ forcedTerminationSignal = true;
513
+ if (!cleanTerminalAssistantStopReceived && !agentSettledReceived && !error && !assistantError) {
514
+ error = `Subagent process did not exit within ${FINAL_STOP_GRACE_MS}ms after its terminal event. Forcing termination.`;
515
+ }
516
+ finalHardKillTimer = setTimeout(() => {
517
+ if (settled)
518
+ return;
519
+ forcedTerminationSignal = trySignalChild(child, "SIGKILL") || forcedTerminationSignal;
520
+ }, HARD_KILL_MS);
521
+ finalHardKillTimer.unref?.();
522
+ }, FINAL_STOP_GRACE_MS);
523
+ finalDrainTimer.unref?.();
524
+ }
525
+ function clearWatchdogTailTimer() {
526
+ if (watchdogTailTimer) {
527
+ clearTimeout(watchdogTailTimer);
528
+ watchdogTailTimer = undefined;
529
+ }
530
+ }
531
+ function armWatchdogTail() {
532
+ if ((!cleanTerminalAssistantStopReceived && !agentSettledReceived) || watchdogTailTimer || settled)
533
+ return;
534
+ watchdogTailTimer = setTimeout(() => {
535
+ watchdogTailTimer = undefined;
536
+ updateChildWatchdogState({
537
+ phase: "stale",
538
+ seq: (childWatchdogState?.seq ?? 0) + 1,
539
+ lastUpdate: Date.now(),
540
+ followUpPending: false,
541
+ reason: "child watchdog tail timeout",
542
+ timedOut: true,
543
+ });
544
+ startFinalDrain();
545
+ }, childWatchdogConfig?.watchdogTailTimeoutMs ?? 120_000);
546
+ watchdogTailTimer.unref?.();
547
+ }
548
+ child.on("exit", () => {
549
+ childExited = true;
550
+ clearDrainTimers();
551
+ });
552
+ child.on("close", (exitCode, signal) => {
553
+ settled = true;
554
+ try {
555
+ onWriterProcess?.({ state: "none" });
556
+ }
557
+ catch {
558
+ // The runner still owns and releases the lease during finalization.
559
+ }
560
+ registerInterrupt?.(undefined);
561
+ registerTimeout?.(undefined);
562
+ registerStop?.(undefined);
563
+ registerTurnBudgetAbort?.(undefined);
564
+ clearDrainTimers();
565
+ clearStdioGuard();
566
+ stdoutReader.end();
567
+ stderrReader.end();
568
+ outputStream.end();
569
+ const stderr = stderrTail.text();
570
+ const finalOutput = getFinalOutput(messages) || rawStdoutTail.text().trim();
571
+ const finalError = error ?? assistantError;
572
+ const forcedDrainAfterFinalSuccess = forcedTerminationSignal && (cleanTerminalAssistantStopReceived || agentSettledReceived) && !finalError;
573
+ resolve({
574
+ stderr,
575
+ exitCode: timedOut || stopped ? 1 : turnBudgetExceeded ? 1 : interrupted || forcedDrainAfterFinalSuccess ? 0 : forcedTerminationSignal || signal ? (exitCode ?? 1) : exitCode,
576
+ messages,
577
+ usage,
578
+ model,
579
+ error: stopped ? (stopMessage ?? "Subagent stopped by user.") : timedOut ? (timeoutMessage ?? "Subagent timed out.") : turnBudgetExceeded ? turnBudgetMessage : interrupted || forcedDrainAfterFinalSuccess ? undefined : finalError,
580
+ protocolError,
581
+ finalOutput: (timedOut || stopped) && !finalOutput.trim() ? (stopped ? stopMessage ?? "Subagent stopped by user." : timeoutMessage ?? "Subagent timed out.") : finalOutput,
582
+ interrupted,
583
+ timedOut,
584
+ stopped,
585
+ turnBudget,
586
+ turnBudgetExceeded,
587
+ wrapUpRequested: turnBudget?.outcome === "wrap-up-requested" || turnBudgetExceeded || undefined,
588
+ observedMutationAttempt,
589
+ watchdog: childWatchdogState,
590
+ });
591
+ });
592
+ child.on("error", (spawnError) => {
593
+ settled = true;
594
+ try {
595
+ onWriterProcess?.({ state: "none" });
596
+ }
597
+ catch {
598
+ // The runner still owns and releases the lease during finalization.
599
+ }
600
+ registerInterrupt?.(undefined);
601
+ registerTimeout?.(undefined);
602
+ registerStop?.(undefined);
603
+ registerTurnBudgetAbort?.(undefined);
604
+ clearDrainTimers();
605
+ clearStdioGuard();
606
+ stdoutReader.end();
607
+ stderrReader.end();
608
+ outputStream.end();
609
+ const stderr = stderrTail.text();
610
+ const finalOutput = getFinalOutput(messages) || rawStdoutTail.text().trim();
611
+ const spawnErrorMessage = spawnError instanceof Error ? spawnError.message : String(spawnError);
612
+ resolve({ stderr, exitCode: 1, messages, usage, model, error: stopped ? (stopMessage ?? "Subagent stopped by user.") : timedOut ? (timeoutMessage ?? "Subagent timed out.") : turnBudgetExceeded ? turnBudgetMessage : error ?? assistantError ?? spawnErrorMessage, protocolError, finalOutput: (timedOut || stopped) && !finalOutput.trim() ? (stopped ? stopMessage ?? "Subagent stopped by user." : timeoutMessage ?? "Subagent timed out.") : finalOutput, timedOut, stopped, turnBudget, turnBudgetExceeded, wrapUpRequested: turnBudget?.outcome === "wrap-up-requested" || turnBudgetExceeded || undefined, observedMutationAttempt, watchdog: childWatchdogState });
613
+ });
614
+ });
615
+ }
616
+ function resolvePiPackageRootFallback() {
617
+ const root = resolveInstalledPiPackageRoot();
618
+ if (root)
619
+ return root;
620
+ throw new Error(`Could not resolve ${PI_CODING_AGENT_PACKAGE} package root`);
621
+ }
622
+ async function exportSessionHtml(sessionFile, outputDir, piPackageRoot) {
623
+ const pkgRoot = piPackageRoot ?? resolvePiPackageRootFallback();
624
+ const exportModulePath = path.join(pkgRoot, "dist", "core", "export-html", "index.js");
625
+ const moduleUrl = pathToFileURL(exportModulePath).href;
626
+ const mod = await import(__rewriteRelativeImportExtension(moduleUrl));
627
+ const exportFromFile = mod
628
+ .exportFromFile;
629
+ if (typeof exportFromFile !== "function") {
630
+ throw new Error("exportFromFile not available");
631
+ }
632
+ const outputPath = path.join(outputDir, `${path.basename(sessionFile, ".jsonl")}.html`);
633
+ return exportFromFile(sessionFile, { outputPath });
634
+ }
635
+ function createShareLink(htmlPath) {
636
+ try {
637
+ const auth = spawnSync("gh", ["auth", "status"], { encoding: "utf-8" });
638
+ if (auth.status !== 0) {
639
+ return { error: "GitHub CLI is not logged in. Run 'gh auth login' first." };
640
+ }
641
+ }
642
+ catch {
643
+ return { error: "GitHub CLI (gh) is not installed." };
644
+ }
645
+ try {
646
+ const result = spawnSync("gh", ["gist", "create", htmlPath], { encoding: "utf-8" });
647
+ if (result.status !== 0) {
648
+ const err = (result.stderr || "").trim() || "Failed to create gist.";
649
+ return { error: err };
650
+ }
651
+ const gistUrl = (result.stdout || "").trim();
652
+ const gistId = gistUrl.split("/").pop();
653
+ if (!gistId)
654
+ return { error: "Failed to parse gist ID." };
655
+ const shareUrl = `https://shittycodingagent.ai/session/?${gistId}`;
656
+ return { shareUrl, gistUrl };
657
+ }
658
+ catch (err) {
659
+ return { error: String(err) };
660
+ }
661
+ }
662
+ function formatDuration(ms) {
663
+ if (ms < 1000)
664
+ return `${ms}ms`;
665
+ if (ms < 60000)
666
+ return `${(ms / 1000).toFixed(1)}s`;
667
+ const minutes = Math.floor(ms / 60000);
668
+ const seconds = Math.floor((ms % 60000) / 1000);
669
+ return `${minutes}m${seconds}s`;
670
+ }
671
+ function writeRunLog(logPath, input) {
672
+ const lines = [];
673
+ lines.push(`# Subagent run ${input.id}`);
674
+ lines.push("");
675
+ lines.push(`- **Mode:** ${input.mode}`);
676
+ lines.push(`- **CWD:** ${input.cwd}`);
677
+ lines.push(`- **Started:** ${new Date(input.startedAt).toISOString()}`);
678
+ lines.push(`- **Ended:** ${new Date(input.endedAt).toISOString()}`);
679
+ lines.push(`- **Duration:** ${formatDuration(input.endedAt - input.startedAt)}`);
680
+ if (input.sessionFile)
681
+ lines.push(`- **Session:** ${input.sessionFile}`);
682
+ if (input.shareUrl)
683
+ lines.push(`- **Share:** ${input.shareUrl}`);
684
+ if (input.shareError)
685
+ lines.push(`- **Share error:** ${input.shareError}`);
686
+ if (input.artifactsDir)
687
+ lines.push(`- **Artifacts:** ${input.artifactsDir}`);
688
+ lines.push("");
689
+ lines.push("## Steps");
690
+ lines.push("| Step | Agent | Status | Duration |");
691
+ lines.push("| --- | --- | --- | --- |");
692
+ input.steps.forEach((step, i) => {
693
+ const duration = step.durationMs !== undefined ? formatDuration(step.durationMs) : "-";
694
+ lines.push(`| ${i + 1} | ${step.agent} | ${step.status} | ${duration} |`);
695
+ });
696
+ lines.push("");
697
+ lines.push("## Summary");
698
+ if (input.truncated) {
699
+ lines.push("_Output truncated_");
700
+ lines.push("");
701
+ }
702
+ lines.push(input.summary.trim() || "(no output)");
703
+ lines.push("");
704
+ fs.writeFileSync(logPath, lines.join("\n"), "utf-8");
705
+ }
706
+ /** Run a single pi agent step, returning output and metadata */
707
+ async function runSingleStep(step, ctx) {
708
+ if (step.importAsyncRoot) {
709
+ let importTimedOut = false;
710
+ let importStopped = false;
711
+ ctx.registerTimeout?.(() => {
712
+ importTimedOut = true;
713
+ let pid;
714
+ try {
715
+ pid = readStatus(step.importAsyncRoot.asyncDir)?.pid;
716
+ }
717
+ catch {
718
+ pid = undefined;
719
+ }
720
+ try {
721
+ deliverTimeoutRequest({ asyncDir: step.importAsyncRoot.asyncDir, pid, source: "ancestor-timeout" });
722
+ }
723
+ catch {
724
+ // The parent runner's own timeout result is authoritative for the attached step.
725
+ }
726
+ });
727
+ ctx.registerStop?.(() => {
728
+ importStopped = true;
729
+ let pid;
730
+ try {
731
+ pid = readStatus(step.importAsyncRoot.asyncDir)?.pid;
732
+ }
733
+ catch {
734
+ pid = undefined;
735
+ }
736
+ try {
737
+ deliverStopRequest({ asyncDir: step.importAsyncRoot.asyncDir, pid, source: "ancestor-stop" });
738
+ }
739
+ catch {
740
+ // The parent runner's own stopped result is authoritative for the attached step.
741
+ }
742
+ });
743
+ try {
744
+ const imported = await waitForImportedAsyncRoot(step.importAsyncRoot, {
745
+ shouldAbort: () => importTimedOut || importStopped || ctx.timeoutSignal?.aborted === true || ctx.stopSignal?.aborted === true || ctx.skipAcceptance?.() === true,
746
+ timeoutMessage: importStopped || ctx.stopSignal?.aborted === true ? ctx.stopMessage : ctx.timeoutMessage,
747
+ });
748
+ try {
749
+ fs.writeFileSync(ctx.outputFile, imported.output, "utf-8");
750
+ }
751
+ catch {
752
+ // Output files are observability only for imported roots.
753
+ }
754
+ const stopped = importStopped || imported.stopped === true || ctx.stopSignal?.aborted === true;
755
+ const timedOut = !stopped && (importTimedOut || imported.timedOut === true || ctx.timeoutSignal?.aborted === true || ctx.skipAcceptance?.() === true);
756
+ const message = stopped ? ctx.stopMessage ?? "Subagent stopped by user." : ctx.timeoutMessage ?? "Subagent timed out.";
757
+ return {
758
+ agent: imported.agent,
759
+ output: timedOut || stopped ? message : imported.output,
760
+ exitCode: timedOut || stopped ? 1 : imported.exitCode,
761
+ error: timedOut || stopped ? message : imported.error,
762
+ timedOut: timedOut ? true : undefined,
763
+ stopped: stopped ? true : undefined,
764
+ sessionFile: imported.sessionFile,
765
+ intercomTarget: imported.intercomTarget,
766
+ model: imported.model,
767
+ attemptedModels: imported.attemptedModels,
768
+ modelAttempts: imported.modelAttempts,
769
+ totalCost: imported.totalCost,
770
+ structuredOutput: timedOut || stopped ? undefined : imported.structuredOutput,
771
+ structuredOutputPath: timedOut || stopped ? undefined : imported.structuredOutputPath,
772
+ structuredOutputSchemaPath: timedOut || stopped ? undefined : imported.structuredOutputSchemaPath,
773
+ acceptance: timedOut || stopped ? undefined : imported.acceptance,
774
+ };
775
+ }
776
+ finally {
777
+ ctx.registerTimeout?.(undefined);
778
+ ctx.registerStop?.(undefined);
779
+ }
780
+ }
781
+ const effectiveStructuredOutput = step.structuredOutput ?? (step.structuredOutputSchema
782
+ ? createStructuredOutputRuntime(step.structuredOutputSchema, path.join(path.dirname(ctx.outputFile), "structured-output"))
783
+ : undefined);
784
+ const placeholderRegex = new RegExp(ctx.placeholder.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g");
785
+ let task = step.task.replace(placeholderRegex, () => ctx.previousOutput);
786
+ if (ctx.outputs)
787
+ task = resolveOutputReferences(task, ctx.outputs);
788
+ const taskForCompletionGuard = task;
789
+ if (step.effectiveAcceptance) {
790
+ const acceptancePrompt = formatAcceptancePrompt(step.effectiveAcceptance);
791
+ if (acceptancePrompt)
792
+ task = `${task}\n${acceptancePrompt}`;
793
+ }
794
+ const sessionEnabled = Boolean(step.sessionFile) || ctx.sessionEnabled;
795
+ const sessionDir = step.sessionFile ? undefined : ctx.sessionDir;
796
+ let artifactPaths;
797
+ let transcriptWriter;
798
+ if (ctx.artifactsDir && ctx.artifactConfig?.enabled !== false) {
799
+ const index = ctx.flatStepCount > 1 ? ctx.flatIndex : undefined;
800
+ artifactPaths = getArtifactPaths(ctx.artifactsDir, ctx.id, step.agent, index);
801
+ fs.mkdirSync(ctx.artifactsDir, { recursive: true });
802
+ if (ctx.artifactConfig?.includeInput !== false) {
803
+ fs.writeFileSync(artifactPaths.inputPath, `# Task for ${step.agent}\n\n${task}`, "utf-8");
804
+ }
805
+ if (ctx.artifactConfig?.includeTranscript !== false) {
806
+ transcriptWriter = createChildTranscriptWriter({
807
+ transcriptPath: artifactPaths.transcriptPath,
808
+ source: "async",
809
+ runId: ctx.id,
810
+ agent: step.agent,
811
+ childIndex: ctx.flatIndex,
812
+ cwd: step.cwd ?? ctx.cwd,
813
+ });
814
+ }
815
+ }
816
+ transcriptWriter?.writeInitialUserMessage(task);
817
+ const candidates = step.modelCandidates && step.modelCandidates.length > 0
818
+ ? step.modelCandidates
819
+ : step.model
820
+ ? [step.model]
821
+ : [undefined];
822
+ const attemptedModels = [];
823
+ const modelAttempts = [];
824
+ const attemptNotes = [];
825
+ const eventsPath = path.join(path.dirname(ctx.outputFile), "events.jsonl");
826
+ let finalResult;
827
+ let finalOutputSnapshot;
828
+ let completionGuardTriggeredFinal = false;
829
+ let turnBudget = ctx.turnBudget ? initialTurnBudgetState(ctx.turnBudget) : undefined;
830
+ let toolBudget = step.toolBudget ? initialToolBudgetState(step.toolBudget) : undefined;
831
+ let toolBudgetBlocked = false;
832
+ for (let index = 0; index < candidates.length; index++) {
833
+ if (ctx.timeoutSignal?.aborted || ctx.skipAcceptance?.())
834
+ break;
835
+ const candidate = candidates[index];
836
+ ctx.onAttemptStart?.({ model: candidate, thinking: resolveEffectiveThinking(candidate, step.thinking) });
837
+ const outputSnapshot = captureSingleOutputSnapshot(step.outputPath);
838
+ if (effectiveStructuredOutput) {
839
+ try {
840
+ if (fs.existsSync(effectiveStructuredOutput.outputPath))
841
+ fs.unlinkSync(effectiveStructuredOutput.outputPath);
842
+ }
843
+ catch {
844
+ // Missing/stale structured-output files are handled after the child exits.
845
+ }
846
+ }
847
+ const watchdogConfig = resolveWatchdogConfig(step.cwd ?? ctx.cwd);
848
+ const childWatchdog = watchdogConfig.ok
849
+ ? resolveChildWatchdogConfig({
850
+ config: watchdogConfig.config,
851
+ agent: step.agent,
852
+ runId: ctx.id,
853
+ childIndex: ctx.flatIndex,
854
+ })
855
+ : undefined;
856
+ const parentPermissionMode = step.parentPermissionMode ?? snapshotParentPermissionMode(step.parentSessionId);
857
+ const childPermission = step.permissions === "read-only" || parentPermissionMode === "plan" ? "read-only" : "full";
858
+ const excludeTools = resolveChildExcludeTools({
859
+ permissions: childPermission,
860
+ fanoutAuthorized: Array.isArray(step.tools) && step.tools.includes("subagent"),
861
+ });
862
+ const { args, env, tempDir, toolDiagnosticPath } = buildPiArgs({
863
+ parentSessionId: step.parentSessionId,
864
+ baseArgs: ["--mode", "json", "-p"],
865
+ task,
866
+ sessionEnabled,
867
+ sessionDir,
868
+ sessionFile: step.sessionFile,
869
+ model: candidate,
870
+ inheritProjectContext: true,
871
+ inheritSkills: false,
872
+ requireReadTool: Boolean(step.skills?.length),
873
+ excludeTools,
874
+ childPermission,
875
+ childId: step.childId ?? step.agent,
876
+ childDescription: step.description ?? step.agent,
877
+ systemPrompt: appendTurnBudgetSystemPrompt(step.systemPrompt && !step.systemPrompt.includes("You are `") ? step.systemPrompt : "", ctx.turnBudget) || undefined,
878
+ systemPromptMode: "append",
879
+ cwd: step.cwd ?? ctx.cwd,
880
+ promptFileStem: step.childId ?? step.agent,
881
+ intercomSessionName: ctx.childIntercomTarget,
882
+ orchestratorIntercomTarget: ctx.orchestratorIntercomTarget,
883
+ runId: ctx.id,
884
+ childAgentName: step.childId ?? step.agent,
885
+ childIndex: ctx.flatIndex,
886
+ parentEventSink: ctx.nestedRoute?.eventSink,
887
+ parentControlInbox: ctx.nestedRoute?.controlInbox,
888
+ parentRootRunId: ctx.nestedRoute?.rootRunId,
889
+ parentCapabilityToken: ctx.nestedRoute?.capabilityToken,
890
+ steerInboxDir: ctx.steerInboxDir,
891
+ steerCapabilityPath: ctx.steerCapabilityPath,
892
+ steerAckDir: ctx.steerAckDir,
893
+ structuredOutput: effectiveStructuredOutput,
894
+ toolBudget: step.toolBudget,
895
+ childWatchdog,
896
+ waitToolEnabled: step.waitToolEnabled,
897
+ parentPermissionMode,
898
+ });
899
+ const run = await runPiStreaming(args, step.cwd ?? ctx.cwd, ctx.outputFile, env, ctx.piPackageRoot, ctx.piArgv1, step.maxSubagentDepth, { eventsPath, runId: ctx.id, stepIndex: ctx.flatIndex, agent: step.agent }, ctx.registerInterrupt, ctx.onChildEvent, transcriptWriter, ctx.registerTimeout, ctx.timeoutMessage, ctx.registerStop, ctx.stopMessage, ctx.registerTurnBudgetAbort, ctx.onWriterProcess);
900
+ if (run.turnBudget)
901
+ turnBudget = run.turnBudget;
902
+ else if (ctx.turnBudget) {
903
+ const assistantMessages = run.messages.filter((message) => message.role === "assistant");
904
+ const turnCount = assistantMessages.length;
905
+ const lastAssistantMessage = assistantMessages.at(-1);
906
+ if (turnCount > 0 && turnCount < ctx.turnBudget.maxTurns) {
907
+ turnBudget = { ...ctx.turnBudget, outcome: "within-budget", turnCount };
908
+ }
909
+ else if (turnCount >= ctx.turnBudget.maxTurns) {
910
+ turnBudget = turnBudgetState(ctx.turnBudget, turnCount, shouldAbortForTurnBudget(ctx.turnBudget, turnCount, lastAssistantMessage ? isTerminalAssistantStop(lastAssistantMessage) : false));
911
+ }
912
+ }
913
+ const toolAvailabilityError = run.exitCode === 0 && !run.error
914
+ ? readChildToolDiagnosticError(toolDiagnosticPath)
915
+ : undefined;
916
+ cleanupTempDir(tempDir);
917
+ const hiddenError = run.exitCode === 0 && !run.error && !toolAvailabilityError ? detectSubagentError(run.messages) : null;
918
+ const missingStructuredOutput = effectiveStructuredOutput
919
+ ? !fs.existsSync(effectiveStructuredOutput.outputPath)
920
+ : false;
921
+ const emptyOutputError = run.exitCode === 0 && !run.error && !toolAvailabilityError && !hiddenError?.hasError && !run.finalOutput.trim() && (!effectiveStructuredOutput || missingStructuredOutput)
922
+ ? "Subagent produced no output (possible model cold-start or empty response)."
923
+ : undefined;
924
+ let structuredOutput;
925
+ let structuredError;
926
+ if (effectiveStructuredOutput && run.exitCode === 0 && !run.error && !toolAvailabilityError && !hiddenError?.hasError && !emptyOutputError) {
927
+ const structured = readStructuredOutput({
928
+ schema: effectiveStructuredOutput.schema,
929
+ schemaPath: effectiveStructuredOutput.schemaPath,
930
+ outputPath: effectiveStructuredOutput.outputPath,
931
+ });
932
+ if (structured.error)
933
+ structuredError = structured.error;
934
+ else
935
+ structuredOutput = structured.value;
936
+ }
937
+ const completionGuard = run.exitCode === 0 && !run.error && !toolAvailabilityError && !hiddenError?.hasError && !emptyOutputError && step.completionGuard !== false
938
+ ? evaluateCompletionMutationGuard({
939
+ agent: step.agent,
940
+ task: taskForCompletionGuard,
941
+ messages: run.messages,
942
+ tools: step.tools,
943
+ mcpDirectTools: step.mcpDirectTools,
944
+ })
945
+ : undefined;
946
+ const completionGuardTriggered = completionGuard?.triggered === true && !run.observedMutationAttempt;
947
+ const completionGuardError = completionGuardTriggered
948
+ ? "Subagent completed without making edits for an implementation task.\nIt appears to have returned planning or scratchpad output instead of applying changes."
949
+ : undefined;
950
+ const effectiveExitCode = toolAvailabilityError || completionGuardTriggered || structuredError
951
+ ? 1
952
+ : hiddenError?.hasError
953
+ ? (hiddenError.exitCode ?? 1)
954
+ : emptyOutputError
955
+ ? 1
956
+ : run.error && run.exitCode === 0
957
+ ? 1
958
+ : run.exitCode;
959
+ const error = toolAvailabilityError
960
+ ?? completionGuardError
961
+ ?? structuredError
962
+ ?? (hiddenError?.hasError
963
+ ? hiddenError.details
964
+ ? `${hiddenError.errorType} failed (exit ${effectiveExitCode}): ${hiddenError.details}`
965
+ : `${hiddenError.errorType} failed with exit code ${effectiveExitCode}`
966
+ : emptyOutputError ?? (run.error || (run.exitCode !== 0 && run.stderr.trim() ? run.stderr.trim() : undefined)));
967
+ const attempt = {
968
+ model: candidate ?? run.model ?? step.model ?? "default",
969
+ success: effectiveExitCode === 0 && !error,
970
+ exitCode: effectiveExitCode,
971
+ error,
972
+ usage: run.usage,
973
+ };
974
+ modelAttempts.push(attempt);
975
+ if (candidate)
976
+ attemptedModels.push(candidate);
977
+ completionGuardTriggeredFinal = completionGuardTriggered;
978
+ finalOutputSnapshot = outputSnapshot;
979
+ if (step.toolBudget) {
980
+ const toolMessages = run.messages.filter((message) => message.role === "toolResult");
981
+ const blockedMessage = toolMessages.find((message) => extractTextFromContent(message.content).includes("Tool budget hard limit reached"));
982
+ toolBudgetBlocked = Boolean(blockedMessage);
983
+ toolBudget = toolBudgetState(step.toolBudget, toolMessages.length, blockedMessage ? blockedMessage.toolName : undefined);
984
+ }
985
+ finalResult = { ...run, exitCode: effectiveExitCode, model: candidate ?? run.model, error, structuredOutput };
986
+ if (run.turnBudgetExceeded)
987
+ break;
988
+ if (run.stopped || run.timedOut || ctx.timeoutSignal?.aborted || ctx.stopSignal?.aborted || ctx.skipAcceptance?.())
989
+ break;
990
+ if (attempt.success || completionGuardTriggered)
991
+ break;
992
+ if (!isRetryableModelFailure(error) || index === candidates.length - 1)
993
+ break;
994
+ attemptNotes.push(formatModelAttemptNote(attempt, candidates[index + 1]));
995
+ }
996
+ const rawOutput = finalResult?.finalOutput ?? "";
997
+ const outputForPersistence = stripAcceptanceReport(rawOutput);
998
+ const resolvedOutput = step.outputPath && finalResult?.exitCode === 0
999
+ ? resolveSingleOutput(step.outputPath, outputForPersistence, finalOutputSnapshot)
1000
+ : { fullOutput: outputForPersistence };
1001
+ const output = stripAcceptanceReport(resolvedOutput.fullOutput);
1002
+ const outputReference = resolvedOutput.savedPath ? formatSavedOutputReference(resolvedOutput.savedPath, output) : undefined;
1003
+ let outputForSummary = output;
1004
+ if (attemptNotes.length > 0) {
1005
+ outputForSummary = `${attemptNotes.join("\n")}\n\n${outputForSummary}`.trim();
1006
+ }
1007
+ if (finalResult?.stopped && !outputForSummary.trim()) {
1008
+ outputForSummary = ctx.stopMessage ?? "Subagent stopped by user.";
1009
+ }
1010
+ else if (!finalResult?.timedOut && !finalResult?.stopped && finalResult?.turnBudgetExceeded && turnBudget) {
1011
+ outputForSummary = formatTurnBudgetOutput(turnBudgetExceededMessage(turnBudget, turnBudget.turnCount), outputForSummary);
1012
+ }
1013
+ else if (!finalResult?.timedOut && !finalResult?.stopped && turnBudget?.outcome === "wrap-up-requested") {
1014
+ const note = turnBudgetSoftNote(turnBudget, turnBudget.wrapUpRequestedAtTurn ?? turnBudget.turnCount);
1015
+ outputForSummary = outputForSummary.trim() ? `${note}\n\n${outputForSummary}` : note;
1016
+ }
1017
+ const outputForAcceptance = rawOutput;
1018
+ const childWrittenOutput = step.outputPath
1019
+ ? extractChildWrittenOutput(finalResult?.messages, step.outputPath, step.cwd ?? ctx.cwd)
1020
+ : undefined;
1021
+ const finalizedOutput = finalizeSingleOutput({
1022
+ fullOutput: outputForSummary,
1023
+ outputPath: step.outputPath,
1024
+ outputMode: step.outputMode,
1025
+ exitCode: finalResult?.exitCode ?? 1,
1026
+ savedPath: resolvedOutput.savedPath,
1027
+ outputReference,
1028
+ saveError: resolvedOutput.saveError,
1029
+ });
1030
+ outputForSummary = finalizedOutput.displayOutput;
1031
+ const acceptance = step.effectiveAcceptance && !finalResult?.stopped && !finalResult?.turnBudgetExceeded && !ctx.timeoutSignal?.aborted && !ctx.stopSignal?.aborted && !ctx.skipAcceptance?.()
1032
+ ? await evaluateAcceptance({
1033
+ acceptance: step.effectiveAcceptance,
1034
+ output: outputForAcceptance,
1035
+ fileOutput: childWrittenOutput !== undefined && step.outputPath
1036
+ ? { content: childWrittenOutput, path: step.outputPath, authoritative: step.outputMode === "file-only" }
1037
+ : undefined,
1038
+ cwd: step.cwd ?? ctx.cwd,
1039
+ signal: combinedAbortSignal([ctx.timeoutSignal, ctx.stopSignal]),
1040
+ abortMessage: ctx.stopSignal?.aborted ? ctx.stopMessage ?? "Subagent stopped by user." : ctx.timeoutMessage ?? "Subagent timed out.",
1041
+ })
1042
+ : undefined;
1043
+ const stoppedAfterAcceptance = finalResult?.stopped === true || ctx.stopSignal?.aborted === true;
1044
+ const timedOutAfterAcceptance = !stoppedAfterAcceptance && (finalResult?.timedOut === true || ctx.timeoutSignal?.aborted === true);
1045
+ const turnBudgetExceeded = finalResult?.turnBudgetExceeded === true;
1046
+ const effectiveAcceptance = step.effectiveAcceptance
1047
+ ? stoppedAfterAcceptance
1048
+ ? buildSkippedAcceptanceLedger(step.effectiveAcceptance, { id: "stopped", message: "Acceptance was not evaluated because the subagent was stopped." })
1049
+ : timedOutAfterAcceptance
1050
+ ? buildSkippedAcceptanceLedger(step.effectiveAcceptance, { id: "timeout", message: "Acceptance was not evaluated because the subagent timed out." })
1051
+ : turnBudgetExceeded
1052
+ ? buildSkippedAcceptanceLedger(step.effectiveAcceptance, { id: "turn-budget", message: "Acceptance was not evaluated because the subagent exceeded its turn budget." })
1053
+ : acceptance
1054
+ : undefined;
1055
+ const acceptanceFailure = effectiveAcceptance ? acceptanceFailureMessage(effectiveAcceptance) : undefined;
1056
+ const acceptanceCanFailRun = acceptanceFailure && effectiveAcceptance?.explicit && (finalResult?.exitCode ?? 1) === 0 && !finalResult?.interrupted && !timedOutAfterAcceptance && !stoppedAfterAcceptance && !turnBudgetExceeded;
1057
+ const effectiveFinalExitCode = timedOutAfterAcceptance || stoppedAfterAcceptance || turnBudgetExceeded ? 1 : acceptanceCanFailRun ? 1 : finalResult?.exitCode ?? 1;
1058
+ const effectiveFinalError = stoppedAfterAcceptance
1059
+ ? ctx.stopMessage ?? "Subagent stopped by user."
1060
+ : timedOutAfterAcceptance
1061
+ ? ctx.timeoutMessage ?? "Subagent timed out."
1062
+ : turnBudgetExceeded
1063
+ ? finalResult?.error ?? (turnBudget ? turnBudgetExceededMessage(turnBudget, turnBudget.turnCount) : "Subagent exceeded turn budget.")
1064
+ : acceptanceCanFailRun
1065
+ ? (finalResult?.error ? `${finalResult.error}\n${acceptanceFailure}` : acceptanceFailure)
1066
+ : finalResult?.error;
1067
+ if (artifactPaths && ctx.artifactConfig?.enabled !== false) {
1068
+ if (ctx.artifactConfig?.includeOutput !== false) {
1069
+ fs.writeFileSync(artifactPaths.outputPath, output, "utf-8");
1070
+ }
1071
+ if (ctx.artifactConfig?.includeMetadata !== false) {
1072
+ fs.writeFileSync(artifactPaths.metadataPath, JSON.stringify({
1073
+ runId: ctx.id,
1074
+ agent: step.agent,
1075
+ task,
1076
+ exitCode: effectiveFinalExitCode,
1077
+ model: finalResult?.model,
1078
+ attemptedModels: attemptedModels.length > 0 ? attemptedModels : undefined,
1079
+ modelAttempts,
1080
+ error: effectiveFinalError,
1081
+ acceptance: effectiveAcceptance,
1082
+ ...(transcriptWriter ? { transcriptPath: artifactPaths.transcriptPath } : {}),
1083
+ transcriptError: transcriptWriter?.getError(),
1084
+ skills: step.skills,
1085
+ timestamp: Date.now(),
1086
+ }, null, 2), "utf-8");
1087
+ }
1088
+ }
1089
+ return {
1090
+ childId: step.childId,
1091
+ description: step.description,
1092
+ permissions: step.permissions,
1093
+ agent: step.agent,
1094
+ output: outputForSummary,
1095
+ exitCode: effectiveFinalExitCode,
1096
+ error: effectiveFinalError,
1097
+ protocolError: finalResult?.protocolError,
1098
+ sessionFile: step.sessionFile,
1099
+ intercomTarget: ctx.childIntercomTarget,
1100
+ model: finalResult?.model,
1101
+ attemptedModels: attemptedModels.length > 0 ? attemptedModels : undefined,
1102
+ modelAttempts,
1103
+ totalCost: costSummaryFromAttempts(modelAttempts),
1104
+ artifactPaths,
1105
+ transcriptPath: transcriptWriter ? artifactPaths?.transcriptPath : undefined,
1106
+ transcriptError: transcriptWriter?.getError(),
1107
+ interrupted: timedOutAfterAcceptance || stoppedAfterAcceptance || turnBudgetExceeded ? false : finalResult?.interrupted,
1108
+ timedOut: timedOutAfterAcceptance ? true : finalResult?.timedOut,
1109
+ stopped: stoppedAfterAcceptance ? true : finalResult?.stopped,
1110
+ turnBudget,
1111
+ turnBudgetExceeded: turnBudgetExceeded || undefined,
1112
+ wrapUpRequested: finalResult?.wrapUpRequested || turnBudget?.outcome === "wrap-up-requested" || turnBudgetExceeded || undefined,
1113
+ toolBudget,
1114
+ toolBudgetBlocked: toolBudgetBlocked || undefined,
1115
+ completionGuardTriggered: completionGuardTriggeredFinal,
1116
+ structuredOutput: timedOutAfterAcceptance || stoppedAfterAcceptance || turnBudgetExceeded ? undefined : finalResult?.structuredOutput,
1117
+ structuredOutputPath: timedOutAfterAcceptance || stoppedAfterAcceptance || turnBudgetExceeded ? undefined : effectiveStructuredOutput?.outputPath,
1118
+ structuredOutputSchemaPath: timedOutAfterAcceptance || stoppedAfterAcceptance || turnBudgetExceeded ? undefined : effectiveStructuredOutput?.schemaPath,
1119
+ acceptance: effectiveAcceptance,
1120
+ watchdog: finalResult?.watchdog,
1121
+ };
1122
+ }
1123
+ function markParallelGroupSetupFailure(input) {
1124
+ for (let taskIndex = 0; taskIndex < input.group.parallel.length; taskIndex++) {
1125
+ const flatTaskIndex = input.groupStartFlatIndex + taskIndex;
1126
+ input.statusPayload.steps[flatTaskIndex].status = "failed";
1127
+ input.statusPayload.steps[flatTaskIndex].startedAt = input.failedAt;
1128
+ input.statusPayload.steps[flatTaskIndex].endedAt = input.failedAt;
1129
+ input.statusPayload.steps[flatTaskIndex].durationMs = 0;
1130
+ input.statusPayload.steps[flatTaskIndex].exitCode = 1;
1131
+ input.results.push({ agent: input.group.parallel[taskIndex].agent, output: input.setupError, success: false, exitCode: 1, sessionFile: input.group.parallel[taskIndex].sessionFile });
1132
+ }
1133
+ input.statusPayload.currentStep = input.groupStartFlatIndex;
1134
+ input.statusPayload.lastUpdate = input.failedAt;
1135
+ input.statusPayload.outputFile = path.join(input.asyncDir, `output-${input.groupStartFlatIndex}.log`);
1136
+ writeAtomicJson(input.statusPath, input.statusPayload);
1137
+ appendJsonl(input.eventsPath, JSON.stringify({
1138
+ type: "subagent.parallel.completed",
1139
+ ts: input.failedAt,
1140
+ runId: input.runId,
1141
+ stepIndex: input.stepIndex,
1142
+ success: false,
1143
+ }));
1144
+ }
1145
+ function markParallelGroupRunning(input) {
1146
+ for (let taskIndex = 0; taskIndex < input.group.parallel.length; taskIndex++) {
1147
+ const flatTaskIndex = input.groupStartFlatIndex + taskIndex;
1148
+ input.statusPayload.steps[flatTaskIndex].status = "pending";
1149
+ input.statusPayload.steps[flatTaskIndex].startedAt = undefined;
1150
+ input.statusPayload.steps[flatTaskIndex].endedAt = undefined;
1151
+ input.statusPayload.steps[flatTaskIndex].durationMs = undefined;
1152
+ input.statusPayload.steps[flatTaskIndex].lastActivityAt = undefined;
1153
+ input.statusPayload.steps[flatTaskIndex].activityState = undefined;
1154
+ input.statusPayload.steps[flatTaskIndex].error = undefined;
1155
+ }
1156
+ input.statusPayload.currentStep = input.groupStartFlatIndex;
1157
+ input.statusPayload.activityState = undefined;
1158
+ input.statusPayload.lastActivityAt = input.groupStartTime;
1159
+ input.statusPayload.lastUpdate = input.groupStartTime;
1160
+ input.statusPayload.outputFile = path.join(input.asyncDir, `output-${input.groupStartFlatIndex}.log`);
1161
+ writeAtomicJson(input.statusPath, input.statusPayload);
1162
+ appendJsonl(input.eventsPath, JSON.stringify({
1163
+ type: "subagent.parallel.started",
1164
+ ts: input.groupStartTime,
1165
+ runId: input.runId,
1166
+ stepIndex: input.stepIndex,
1167
+ agents: input.group.parallel.map((task) => task.agent),
1168
+ count: input.group.parallel.length,
1169
+ }));
1170
+ }
1171
+ function prepareParallelTaskRun(task, cwd, worktreeSetup, taskIndex) {
1172
+ if (!worktreeSetup)
1173
+ return { taskForRun: task, taskCwd: cwd };
1174
+ return {
1175
+ taskForRun: { ...task, cwd: undefined },
1176
+ taskCwd: worktreeSetup.worktrees[taskIndex].agentCwd,
1177
+ };
1178
+ }
1179
+ function appendParallelWorktreeSummary(previousOutput, worktreeSetup, asyncDir, stepIndex, group) {
1180
+ if (!worktreeSetup)
1181
+ return previousOutput;
1182
+ const diffsDir = path.join(asyncDir, "worktree-diffs", `step-${stepIndex}`);
1183
+ const diffs = diffWorktrees(worktreeSetup, group.parallel.map((task) => task.agent), diffsDir);
1184
+ const diffSummary = formatWorktreeDiffSummary(diffs);
1185
+ if (!diffSummary)
1186
+ return previousOutput;
1187
+ return `${previousOutput}\n\n${diffSummary}`;
1188
+ }
1189
+ function ensureParallelProgressFile(cwd, group) {
1190
+ const progressPath = path.join(cwd, "progress.md");
1191
+ if (!group.parallel.some((task) => task.task.includes(`Update progress at: ${progressPath}`)))
1192
+ return;
1193
+ writeInitialProgressFile(cwd);
1194
+ }
1195
+ function resolveAsyncStepTranscriptPath(input) {
1196
+ if (!input.artifactsDir || input.artifactConfig?.enabled === false || input.artifactConfig?.includeTranscript === false)
1197
+ return undefined;
1198
+ return getArtifactPaths(input.artifactsDir, input.runId, input.agent, input.flatStepCount > 1 ? input.flatIndex : undefined).transcriptPath;
1199
+ }
1200
+ function combinedAbortSignal(signals) {
1201
+ const activeSignals = signals.filter((signal) => Boolean(signal));
1202
+ if (activeSignals.length === 0)
1203
+ return undefined;
1204
+ if (activeSignals.length === 1)
1205
+ return activeSignals[0];
1206
+ const controller = new AbortController();
1207
+ const abort = () => controller.abort();
1208
+ for (const signal of activeSignals) {
1209
+ if (signal.aborted) {
1210
+ abort();
1211
+ break;
1212
+ }
1213
+ signal.addEventListener("abort", abort, { once: true });
1214
+ }
1215
+ return controller.signal;
1216
+ }
1217
+ async function runSubagent(config, onWriterProcess) {
1218
+ const { id, steps, resultPath, cwd, placeholder, taskIndex, totalTasks, maxOutput, artifactsDir, artifactConfig } = config;
1219
+ const globalSemaphore = new Semaphore(config.globalConcurrencyLimit ?? DEFAULT_GLOBAL_CONCURRENCY_LIMIT);
1220
+ let previousOutput = "";
1221
+ const outputs = {};
1222
+ const results = [];
1223
+ const overallStartTime = Date.now();
1224
+ const shareEnabled = config.share === true;
1225
+ const asyncDir = config.asyncDir;
1226
+ const statusPath = path.join(asyncDir, "status.json");
1227
+ const eventsPath = path.join(asyncDir, "events.jsonl");
1228
+ const logPath = path.join(asyncDir, `subagent-log-${id}.md`);
1229
+ const controlConfig = config.controlConfig ?? DEFAULT_CONTROL_CONFIG;
1230
+ const activeChildInterrupts = new Map();
1231
+ const activeChildTimeouts = new Map();
1232
+ const activeChildStops = new Map();
1233
+ const activeChildTurnBudgetAborts = new Map();
1234
+ const pendingStepSteers = [];
1235
+ const steeringCapabilities = new Map();
1236
+ let interrupted = false;
1237
+ let currentActivityState;
1238
+ let activityTimer;
1239
+ let timeoutTimer;
1240
+ let timedOut = false;
1241
+ let stopped = false;
1242
+ let turnBudgetExceeded = false;
1243
+ const timeoutMessage = config.timeoutMs !== undefined ? `Subagent timed out after ${config.timeoutMs}ms.` : undefined;
1244
+ const stopMessage = "Subagent stopped by user.";
1245
+ const timeoutAbortController = new AbortController();
1246
+ const stopAbortController = new AbortController();
1247
+ let previousCumulativeTokens = { input: 0, output: 0, total: 0 };
1248
+ let latestSessionFile;
1249
+ const flatSteps = flattenSteps(steps);
1250
+ const initialFlatStepCount = flatSteps.length;
1251
+ const parallelGroups = [];
1252
+ const initialStatusSteps = [];
1253
+ let flatStepCount = 0;
1254
+ for (let stepIndex = 0; stepIndex < steps.length; stepIndex++) {
1255
+ const step = steps[stepIndex];
1256
+ if (isParallelGroup(step)) {
1257
+ parallelGroups.push({ start: flatStepCount, count: step.parallel.length, stepIndex });
1258
+ for (const task of step.parallel) {
1259
+ const taskFlatIndex = flatStepCount;
1260
+ const transcriptPath = resolveAsyncStepTranscriptPath({ artifactsDir, artifactConfig, runId: id, agent: task.agent, flatIndex: taskFlatIndex, flatStepCount: initialFlatStepCount });
1261
+ initialStatusSteps.push({
1262
+ childId: task.childId,
1263
+ description: task.description,
1264
+ permissions: task.permissions,
1265
+ agent: task.agent,
1266
+ phase: task.phase,
1267
+ label: task.label,
1268
+ outputName: task.outputName,
1269
+ structured: task.structured,
1270
+ status: "pending",
1271
+ ...(task.toolBudget ? { toolBudget: initialToolBudgetState(task.toolBudget) } : {}),
1272
+ ...(task.sessionFile ? { sessionFile: task.sessionFile } : {}),
1273
+ ...(transcriptPath ? { transcriptPath } : {}),
1274
+ skills: task.skills,
1275
+ model: task.model,
1276
+ thinking: task.thinking,
1277
+ attemptedModels: task.modelCandidates && task.modelCandidates.length > 0 ? task.modelCandidates : task.model ? [task.model] : undefined,
1278
+ recentTools: [],
1279
+ recentOutput: [],
1280
+ });
1281
+ flatStepCount++;
1282
+ }
1283
+ }
1284
+ else if (isDynamicRunnerGroup(step)) {
1285
+ parallelGroups.push({ start: flatStepCount, count: 1, stepIndex });
1286
+ initialStatusSteps.push({
1287
+ agent: `expand:${step.parallel.agent}`,
1288
+ phase: step.phase ?? step.parallel.phase,
1289
+ label: step.label ?? step.parallel.label ?? `Dynamic fanout (${step.collect.as})`,
1290
+ outputName: step.collect.as,
1291
+ structured: Boolean(step.collect.outputSchema),
1292
+ status: "pending",
1293
+ ...(step.parallel.toolBudget ? { toolBudget: initialToolBudgetState(step.parallel.toolBudget) } : {}),
1294
+ recentTools: [],
1295
+ recentOutput: [],
1296
+ });
1297
+ flatStepCount++;
1298
+ }
1299
+ else {
1300
+ const stepFlatIndex = flatStepCount;
1301
+ const transcriptPath = resolveAsyncStepTranscriptPath({ artifactsDir, artifactConfig, runId: id, agent: step.agent, flatIndex: stepFlatIndex, flatStepCount: initialFlatStepCount });
1302
+ initialStatusSteps.push({
1303
+ childId: step.childId,
1304
+ description: step.description,
1305
+ permissions: step.permissions,
1306
+ agent: step.agent,
1307
+ phase: step.phase,
1308
+ label: step.label,
1309
+ outputName: step.outputName,
1310
+ structured: step.structured,
1311
+ status: "pending",
1312
+ ...(step.toolBudget ? { toolBudget: initialToolBudgetState(step.toolBudget) } : {}),
1313
+ ...(step.sessionFile ? { sessionFile: step.sessionFile } : {}),
1314
+ ...(transcriptPath ? { transcriptPath } : {}),
1315
+ skills: step.skills,
1316
+ model: step.model,
1317
+ thinking: step.thinking,
1318
+ attemptedModels: step.modelCandidates && step.modelCandidates.length > 0 ? step.modelCandidates : step.model ? [step.model] : undefined,
1319
+ recentTools: [],
1320
+ recentOutput: [],
1321
+ });
1322
+ flatStepCount++;
1323
+ }
1324
+ }
1325
+ const sessionEnabled = Boolean(config.sessionDir)
1326
+ || shareEnabled
1327
+ || flatSteps.some((step) => Boolean(step.sessionFile));
1328
+ const statusPayload = {
1329
+ lifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,
1330
+ runId: id,
1331
+ ...(config.sessionId ? { sessionId: config.sessionId } : {}),
1332
+ mode: config.resultMode ?? (flatSteps.length > 1 ? "chain" : "single"),
1333
+ ...(config.nestedRoute ? { isNested: true } : {}),
1334
+ state: "running",
1335
+ steering: createSteeringStatus(),
1336
+ lastActivityAt: overallStartTime,
1337
+ startedAt: overallStartTime,
1338
+ lastUpdate: overallStartTime,
1339
+ ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),
1340
+ ...(config.deadlineAt !== undefined ? { deadlineAt: config.deadlineAt } : {}),
1341
+ ...(config.turnBudget ? { turnBudget: initialTurnBudgetState(config.turnBudget) } : {}),
1342
+ ...(config.toolBudget ? { toolBudget: initialToolBudgetState(config.toolBudget) } : {}),
1343
+ pid: process.pid,
1344
+ cwd,
1345
+ currentStep: 0,
1346
+ chainStepCount: steps.length,
1347
+ parallelGroups,
1348
+ workflowGraph: config.workflowGraph,
1349
+ steps: initialStatusSteps,
1350
+ artifactsDir,
1351
+ sessionDir: config.sessionDir,
1352
+ outputFile: path.join(asyncDir, "output-0.log"),
1353
+ };
1354
+ fs.mkdirSync(asyncDir, { recursive: true });
1355
+ writeAtomicJson(statusPath, statusPayload);
1356
+ const emitNestedSelfEvent = (type) => {
1357
+ if (!config.nestedRoute || !config.nestedSelf)
1358
+ return;
1359
+ try {
1360
+ writeNestedEvent(config.nestedRoute, {
1361
+ type,
1362
+ ts: Date.now(),
1363
+ parentRunId: config.nestedSelf.parentRunId,
1364
+ parentStepIndex: config.nestedSelf.parentStepIndex,
1365
+ child: nestedSummaryFromAsyncStatus(statusPayload, asyncDir, {
1366
+ id,
1367
+ parentRunId: config.nestedSelf.parentRunId,
1368
+ parentStepIndex: config.nestedSelf.parentStepIndex,
1369
+ depth: config.nestedSelf.depth,
1370
+ path: config.nestedSelf.path,
1371
+ mode: statusPayload.mode,
1372
+ ts: Date.now(),
1373
+ }),
1374
+ });
1375
+ }
1376
+ catch (error) {
1377
+ console.error("Failed to emit nested async status event:", error);
1378
+ }
1379
+ };
1380
+ const refreshWorkflowGraph = () => {
1381
+ if (!config.workflowGraph)
1382
+ return;
1383
+ const graph = structuredClone(statusPayload.workflowGraph ?? config.workflowGraph);
1384
+ const normalize = (status) => {
1385
+ if (status === "complete" || status === "completed")
1386
+ return "completed";
1387
+ if (status === "running" || status === "failed" || status === "paused" || status === "stopped" || status === "pending")
1388
+ return status;
1389
+ return "pending";
1390
+ };
1391
+ const updateNode = (node) => {
1392
+ if (node.flatIndex !== undefined) {
1393
+ const step = statusPayload.steps[node.flatIndex];
1394
+ if (step) {
1395
+ node.status = normalize(step.status);
1396
+ node.error = step.error;
1397
+ node.acceptanceStatus = step.acceptance?.status;
1398
+ }
1399
+ if (statusPayload.currentStep === node.flatIndex)
1400
+ graph.currentNodeId = node.id;
1401
+ }
1402
+ for (const child of node.children ?? [])
1403
+ updateNode(child);
1404
+ if (node.children?.length) {
1405
+ if (node.children.every((child) => child.status === "completed"))
1406
+ node.status = "completed";
1407
+ else if (node.children.some((child) => child.status === "running"))
1408
+ node.status = "running";
1409
+ else if (node.children.some((child) => child.status === "stopped"))
1410
+ node.status = "stopped";
1411
+ else if (node.children.some((child) => child.status === "failed"))
1412
+ node.status = "failed";
1413
+ else if (node.children.some((child) => child.status === "paused"))
1414
+ node.status = "paused";
1415
+ }
1416
+ if (node.error && node.status !== "stopped")
1417
+ node.status = "failed";
1418
+ };
1419
+ for (const node of graph.nodes)
1420
+ updateNode(node);
1421
+ statusPayload.workflowGraph = graph;
1422
+ };
1423
+ const writeStatusPayload = () => {
1424
+ refreshWorkflowGraph();
1425
+ writeAtomicJson(statusPath, statusPayload);
1426
+ emitNestedSelfEvent(statusPayload.state === "running" || statusPayload.state === "queued" ? "subagent.nested.updated" : "subagent.nested.completed");
1427
+ };
1428
+ const registerStepInterrupt = (flatIndex, interrupt) => {
1429
+ if (!interrupt) {
1430
+ activeChildInterrupts.delete(flatIndex);
1431
+ return;
1432
+ }
1433
+ activeChildInterrupts.set(flatIndex, interrupt);
1434
+ if (interrupted)
1435
+ interrupt();
1436
+ };
1437
+ const registerStepTimeout = (flatIndex, interrupt) => {
1438
+ if (!interrupt) {
1439
+ activeChildTimeouts.delete(flatIndex);
1440
+ return;
1441
+ }
1442
+ activeChildTimeouts.set(flatIndex, interrupt);
1443
+ if (timedOut)
1444
+ interrupt();
1445
+ };
1446
+ const registerStepStop = (flatIndex, stop) => {
1447
+ if (!stop) {
1448
+ activeChildStops.delete(flatIndex);
1449
+ return;
1450
+ }
1451
+ activeChildStops.set(flatIndex, stop);
1452
+ if (stopped)
1453
+ stop();
1454
+ };
1455
+ const registerStepTurnBudgetAbort = (flatIndex, abort) => {
1456
+ if (!abort) {
1457
+ activeChildTurnBudgetAborts.delete(flatIndex);
1458
+ return;
1459
+ }
1460
+ activeChildTurnBudgetAborts.set(flatIndex, abort);
1461
+ };
1462
+ const interruptActiveChildren = () => {
1463
+ for (const interrupt of [...activeChildInterrupts.values()])
1464
+ interrupt();
1465
+ };
1466
+ const timeoutActiveChildren = () => {
1467
+ for (const interrupt of [...activeChildTimeouts.values()])
1468
+ interrupt();
1469
+ };
1470
+ const stopActiveChildren = () => {
1471
+ for (const stop of [...activeChildStops.values()])
1472
+ stop();
1473
+ };
1474
+ const nestedRuns = function* (children) {
1475
+ for (const child of children ?? []) {
1476
+ yield child;
1477
+ yield* nestedRuns(child.children);
1478
+ yield* nestedRuns(child.steps?.flatMap((step) => step.children ?? []));
1479
+ }
1480
+ };
1481
+ const interruptNestedAsyncDescendants = () => {
1482
+ if (!config.nestedRoute)
1483
+ return;
1484
+ let registry;
1485
+ try {
1486
+ registry = projectNestedEvents(config.nestedRoute);
1487
+ }
1488
+ catch (error) {
1489
+ appendJsonl(eventsPath, JSON.stringify({
1490
+ type: "subagent.nested.interrupt_failed",
1491
+ ts: Date.now(),
1492
+ runId: id,
1493
+ message: error instanceof Error ? error.message : String(error),
1494
+ }));
1495
+ return;
1496
+ }
1497
+ for (const run of nestedRuns(registry.children)) {
1498
+ if (run.state !== "running" && run.state !== "queued")
1499
+ continue;
1500
+ const nestedAsyncDir = run.asyncDir ?? resolveNestedAsyncDir(config.nestedRoute.rootRunId, run);
1501
+ if (!nestedAsyncDir)
1502
+ continue;
1503
+ try {
1504
+ deliverInterruptRequest({ asyncDir: nestedAsyncDir, pid: run.pid, source: "ancestor-interrupt" });
1505
+ }
1506
+ catch (error) {
1507
+ appendJsonl(eventsPath, JSON.stringify({
1508
+ type: "subagent.nested.interrupt_failed",
1509
+ ts: Date.now(),
1510
+ runId: id,
1511
+ targetRunId: run.id,
1512
+ message: error instanceof Error ? error.message : String(error),
1513
+ }));
1514
+ }
1515
+ }
1516
+ };
1517
+ const stopNestedAsyncDescendants = () => {
1518
+ if (!config.nestedRoute)
1519
+ return;
1520
+ let registry;
1521
+ try {
1522
+ registry = projectNestedEvents(config.nestedRoute);
1523
+ }
1524
+ catch (error) {
1525
+ appendJsonl(eventsPath, JSON.stringify({
1526
+ type: "subagent.nested.stop_failed",
1527
+ ts: Date.now(),
1528
+ runId: id,
1529
+ message: error instanceof Error ? error.message : String(error),
1530
+ }));
1531
+ return;
1532
+ }
1533
+ for (const run of nestedRuns(registry.children)) {
1534
+ if (run.state !== "running" && run.state !== "queued")
1535
+ continue;
1536
+ const nestedAsyncDir = run.asyncDir ?? resolveNestedAsyncDir(config.nestedRoute.rootRunId, run);
1537
+ if (!nestedAsyncDir)
1538
+ continue;
1539
+ try {
1540
+ deliverStopRequest({ asyncDir: nestedAsyncDir, pid: run.pid, source: "ancestor-stop" });
1541
+ }
1542
+ catch (error) {
1543
+ appendJsonl(eventsPath, JSON.stringify({
1544
+ type: "subagent.nested.stop_failed",
1545
+ ts: Date.now(),
1546
+ runId: id,
1547
+ targetRunId: run.id,
1548
+ message: error instanceof Error ? error.message : String(error),
1549
+ }));
1550
+ }
1551
+ }
1552
+ };
1553
+ const timeoutNestedAsyncDescendants = () => {
1554
+ if (!config.nestedRoute)
1555
+ return;
1556
+ let registry;
1557
+ try {
1558
+ registry = projectNestedEvents(config.nestedRoute);
1559
+ }
1560
+ catch (error) {
1561
+ appendJsonl(eventsPath, JSON.stringify({
1562
+ type: "subagent.nested.timeout_failed",
1563
+ ts: Date.now(),
1564
+ runId: id,
1565
+ message: error instanceof Error ? error.message : String(error),
1566
+ }));
1567
+ return;
1568
+ }
1569
+ for (const run of nestedRuns(registry.children)) {
1570
+ if (run.state !== "running" && run.state !== "queued")
1571
+ continue;
1572
+ const nestedAsyncDir = run.asyncDir ?? resolveNestedAsyncDir(config.nestedRoute.rootRunId, run);
1573
+ if (!nestedAsyncDir)
1574
+ continue;
1575
+ try {
1576
+ deliverTimeoutRequest({ asyncDir: nestedAsyncDir, pid: run.pid, source: "ancestor-timeout" });
1577
+ }
1578
+ catch (error) {
1579
+ appendJsonl(eventsPath, JSON.stringify({
1580
+ type: "subagent.nested.timeout_failed",
1581
+ ts: Date.now(),
1582
+ runId: id,
1583
+ targetRunId: run.id,
1584
+ message: error instanceof Error ? error.message : String(error),
1585
+ }));
1586
+ }
1587
+ }
1588
+ };
1589
+ const pausedStepResult = (agent) => ({
1590
+ agent,
1591
+ output: "Paused after interrupt. Waiting for explicit next action.",
1592
+ exitCode: 0,
1593
+ interrupted: true,
1594
+ });
1595
+ const timedOutStepResult = (agent) => ({
1596
+ agent,
1597
+ output: timeoutMessage ?? "Subagent timed out.",
1598
+ error: timeoutMessage ?? "Subagent timed out.",
1599
+ exitCode: 1,
1600
+ timedOut: true,
1601
+ });
1602
+ const stoppedStepResult = (agent) => ({
1603
+ agent,
1604
+ output: stopMessage,
1605
+ error: stopMessage,
1606
+ exitCode: 1,
1607
+ stopped: true,
1608
+ });
1609
+ const consumePendingAppendRequests = () => {
1610
+ if (statusPayload.mode !== "chain" || statusPayload.state !== "running")
1611
+ return;
1612
+ const requests = consumeChainAppendRequests(asyncDir);
1613
+ if (requests.length === 0) {
1614
+ const pendingAppends = countPendingChainAppendRequests(asyncDir);
1615
+ if ((statusPayload.pendingAppends ?? 0) !== pendingAppends) {
1616
+ statusPayload.pendingAppends = pendingAppends;
1617
+ statusPayload.lastUpdate = Date.now();
1618
+ writeStatusPayload();
1619
+ }
1620
+ return;
1621
+ }
1622
+ const appendedSteps = requests.flatMap((request) => request.steps);
1623
+ steps.push(...appendedSteps);
1624
+ const now = Date.now();
1625
+ const pendingAppends = countPendingChainAppendRequests(asyncDir);
1626
+ const added = appendRunnerStepsToStatus({
1627
+ status: statusPayload,
1628
+ steps: appendedSteps,
1629
+ now,
1630
+ pendingAppends,
1631
+ });
1632
+ mutatingFailureStates.push(...Array.from({ length: added.addedFlatSteps }, () => createMutatingFailureState()));
1633
+ pendingToolResults.push(...Array.from({ length: added.addedFlatSteps }, () => undefined));
1634
+ if (config.childIntercomTargets) {
1635
+ config.childIntercomTargets = statusPayload.steps.map((statusStep, index) => resolveSubagentIntercomTarget(id, statusStep.childId ?? statusStep.agent, index));
1636
+ }
1637
+ writeStatusPayload();
1638
+ for (const request of requests) {
1639
+ appendJsonl(eventsPath, JSON.stringify({
1640
+ type: "subagent.chain.append.accepted",
1641
+ ts: now,
1642
+ runId: id,
1643
+ requestId: request.id,
1644
+ stepCount: request.steps.length,
1645
+ pendingAppends,
1646
+ }));
1647
+ }
1648
+ };
1649
+ const markDynamicGraphGroup = (stepIndex, status, error, acceptance) => {
1650
+ const groupNode = statusPayload.workflowGraph?.nodes.find((node) => node.id === `step-${stepIndex}`);
1651
+ if (!groupNode)
1652
+ return;
1653
+ groupNode.status = status;
1654
+ groupNode.error = error;
1655
+ groupNode.acceptanceStatus = acceptance?.status ?? groupNode.acceptanceStatus;
1656
+ };
1657
+ const stepOutputActivityAt = (index) => {
1658
+ const step = statusPayload.steps[index];
1659
+ let lastActivityAt = step?.lastActivityAt ?? step?.startedAt ?? overallStartTime;
1660
+ const outputPath = path.join(asyncDir, `output-${index}.log`);
1661
+ try {
1662
+ lastActivityAt = Math.max(lastActivityAt, fs.statSync(outputPath).mtimeMs);
1663
+ }
1664
+ catch (error) {
1665
+ if (error.code !== "ENOENT") {
1666
+ console.error(`Failed to inspect async output file '${outputPath}':`, error);
1667
+ }
1668
+ }
1669
+ return lastActivityAt;
1670
+ };
1671
+ const emittedControlEventKeys = new Set();
1672
+ const activeLongRunningSteps = new Set();
1673
+ const mutatingFailureStates = initialStatusSteps.map(() => createMutatingFailureState());
1674
+ const pendingToolResults = initialStatusSteps.map(() => undefined);
1675
+ const mutatingFailureWindowMs = 5 * 60_000;
1676
+ const appendControlEvent = (event) => {
1677
+ if (!controlConfig.enabled)
1678
+ return;
1679
+ const childIntercomTarget = config.childIntercomTargets?.[event.index ?? statusPayload.currentStep];
1680
+ const channels = event.type === "active_long_running"
1681
+ ? controlConfig.notifyChannels.filter((channel) => channel !== "intercom")
1682
+ : controlConfig.notifyChannels;
1683
+ if (channels.length === 0 || !claimControlNotification(controlConfig, event, emittedControlEventKeys, childIntercomTarget))
1684
+ return;
1685
+ appendJsonl(eventsPath, JSON.stringify({
1686
+ type: "subagent.control",
1687
+ event,
1688
+ channels,
1689
+ childIntercomTarget,
1690
+ noticeText: formatControlNoticeMessage(event, childIntercomTarget),
1691
+ ...(config.controlIntercomTarget && channels.includes("intercom") ? {
1692
+ intercom: {
1693
+ to: config.controlIntercomTarget,
1694
+ message: formatControlIntercomMessage(event, childIntercomTarget),
1695
+ },
1696
+ } : {}),
1697
+ }));
1698
+ };
1699
+ const syncTopLevelCurrentTool = () => {
1700
+ const activeStep = statusPayload.steps
1701
+ .filter((step) => step.status === "running" && typeof step.currentTool === "string" && step.currentTool.length > 0)
1702
+ .sort((left, right) => (right.currentToolStartedAt ?? 0) - (left.currentToolStartedAt ?? 0))[0];
1703
+ statusPayload.currentTool = activeStep?.currentTool;
1704
+ statusPayload.currentToolStartedAt = activeStep?.currentToolStartedAt;
1705
+ statusPayload.currentPath = activeStep?.currentPath;
1706
+ };
1707
+ const maybeEmitActiveLongRunning = (flatIndex, now) => {
1708
+ if (!controlConfig.enabled || activeLongRunningSteps.has(flatIndex))
1709
+ return false;
1710
+ const step = statusPayload.steps[flatIndex];
1711
+ if (!step || step.status !== "running" || step.activityState === "needs_attention")
1712
+ return false;
1713
+ const reason = nextLongRunningTrigger(controlConfig, {
1714
+ startedAt: step.startedAt ?? overallStartTime,
1715
+ now,
1716
+ turns: step.turnCount ?? 0,
1717
+ tokens: step.tokens?.total ?? 0,
1718
+ });
1719
+ if (!reason)
1720
+ return false;
1721
+ activeLongRunningSteps.add(flatIndex);
1722
+ const previous = step.activityState;
1723
+ step.activityState = "active_long_running";
1724
+ statusPayload.activityState = statusPayload.activityState === "needs_attention" ? "needs_attention" : "active_long_running";
1725
+ const event = buildControlEvent({
1726
+ type: "active_long_running",
1727
+ from: previous,
1728
+ to: "active_long_running",
1729
+ runId: id,
1730
+ agent: step.agent,
1731
+ index: flatIndex,
1732
+ ts: now,
1733
+ message: `${step.agent} is still active but long-running`,
1734
+ reason,
1735
+ turns: step.turnCount,
1736
+ tokens: step.tokens?.total,
1737
+ toolCount: step.toolCount,
1738
+ currentTool: step.currentTool,
1739
+ currentToolDurationMs: step.currentToolStartedAt ? Math.max(0, now - step.currentToolStartedAt) : undefined,
1740
+ currentPath: step.currentPath,
1741
+ elapsedMs: now - (step.startedAt ?? overallStartTime),
1742
+ });
1743
+ appendControlEvent(event);
1744
+ return true;
1745
+ };
1746
+ const steeringMarkerPath = (requestId) => path.join(asyncDir, "control", "steer-recovery", `${Buffer.from(requestId).toString("base64url")}.json`);
1747
+ const markSteeringAttention = (index) => {
1748
+ const step = statusPayload.steps[index];
1749
+ if (step)
1750
+ step.activityState = "needs_attention";
1751
+ statusPayload.activityState = "needs_attention";
1752
+ };
1753
+ const emitSteeringEvent = (type, request, index, extra = {}) => {
1754
+ appendJsonl(eventsPath, JSON.stringify({ type, ts: Date.now(), runId: id, requestId: request.id, ...(index !== undefined ? { index } : {}), ...extra }));
1755
+ };
1756
+ const emitSteeringNotice = (requestId, state, message) => {
1757
+ appendJsonl(eventsPath, JSON.stringify({ type: "subagent.steering.notice", ts: Date.now(), runId: id, requestId, state, message, ...(config.sessionId ? { currentSessionId: config.sessionId } : {}) }));
1758
+ };
1759
+ const recordSteeringLifecycle = (request, targets) => {
1760
+ const lifecycle = steeringStatus(statusPayload);
1761
+ recordSteeringRequest(lifecycle, { id: request.id, requestedAt: request.ts, source: request.source, message: request.message, targets });
1762
+ for (const target of targets) {
1763
+ const step = statusPayload.steps[target.index];
1764
+ if (!step)
1765
+ continue;
1766
+ step.steering ??= createSteeringStatus();
1767
+ recordSteeringRequest(step.steering, { id: request.id, requestedAt: request.ts, source: request.source, message: request.message, targets: [target] });
1768
+ }
1769
+ };
1770
+ const updateSteeringLifecycleTarget = (requestId, index, state, now, fields = {}) => {
1771
+ const updated = updateSteeringTarget(steeringStatus(statusPayload), requestId, index, state, now, fields);
1772
+ const step = statusPayload.steps[index];
1773
+ if (step?.steering)
1774
+ updateSteeringTarget(step.steering, requestId, index, state, now, fields);
1775
+ return updated;
1776
+ };
1777
+ const emitTerminalSteeringNotice = (requestId, failureMessage) => {
1778
+ const state = terminalSteeringNoticeState(steeringStatus(statusPayload), requestId);
1779
+ if (state === "partial")
1780
+ emitSteeringNotice(requestId, "partial", `Steering partially delivered for run ${id}.`);
1781
+ else if (state === "failed")
1782
+ emitSteeringNotice(requestId, "failed", failureMessage);
1783
+ };
1784
+ const deliverSteerRequest = (request) => {
1785
+ if (statusPayload.state !== "running") {
1786
+ const reason = `run became ${statusPayload.state} before steering request was consumed`;
1787
+ const indexes = request.targetIndex !== undefined
1788
+ ? [request.targetIndex]
1789
+ : request.targetIndexes?.length
1790
+ ? request.targetIndexes
1791
+ : statusPayload.steps.map((_, index) => index);
1792
+ const targets = indexes.map((index) => ({ index, state: "failed", reason }));
1793
+ recordSteeringLifecycle(request, targets);
1794
+ emitSteeringEvent("subagent.steer.requested", request, undefined, { targets });
1795
+ for (const target of targets)
1796
+ emitSteeringEvent("subagent.steer.failed", request, target.index, { reason });
1797
+ emitTerminalSteeringNotice(request.id, `Steering failed for run ${id}: ${reason}.`);
1798
+ statusPayload.lastUpdate = Date.now();
1799
+ writeStatusPayload();
1800
+ return;
1801
+ }
1802
+ const runningIndexes = statusPayload.steps
1803
+ .map((step, index) => ({ step, index }))
1804
+ .filter(({ step }) => step.status === "running")
1805
+ .map(({ index }) => index);
1806
+ const targets = request.targetIndex !== undefined
1807
+ ? [request.targetIndex]
1808
+ : request.targetIndexes?.length
1809
+ ? request.targetIndexes
1810
+ : runningIndexes.length > 0
1811
+ ? runningIndexes
1812
+ : statusPayload.mode === "single" && statusPayload.steps[0]?.status === "pending"
1813
+ ? [0]
1814
+ : [];
1815
+ const now = Date.now();
1816
+ const targetStates = targets.map((index) => {
1817
+ const step = statusPayload.steps[index];
1818
+ if (!step)
1819
+ return { index, state: "failed", reason: "child index out of range" };
1820
+ if (step.status === "pending")
1821
+ return { index, state: "scheduled" };
1822
+ if (step.status !== "running")
1823
+ return { index, state: "failed", reason: `child is ${step.status}` };
1824
+ if (steeringCapabilities.get(index)?.supported === false)
1825
+ return { index, state: "failed", reason: "child Pi session does not support steering" };
1826
+ return { index, state: "routed" };
1827
+ });
1828
+ recordSteeringLifecycle(request, targetStates);
1829
+ emitSteeringEvent("subagent.steer.requested", request, undefined, { targets: targetStates });
1830
+ for (const target of targetStates) {
1831
+ if (target.state === "routed") {
1832
+ try {
1833
+ enqueueStepSteer(asyncDir, target.index, request);
1834
+ updateSteeringLifecycleTarget(request.id, target.index, "routed", now);
1835
+ emitSteeringEvent("subagent.steer.routed", request, target.index);
1836
+ }
1837
+ catch (error) {
1838
+ markSteeringAttention(target.index);
1839
+ updateSteeringLifecycleTarget(request.id, target.index, "failed", now, { reason: error instanceof Error ? error.message : String(error) });
1840
+ emitSteeringEvent("subagent.steer.failed", request, target.index, { reason: error instanceof Error ? error.message : String(error) });
1841
+ }
1842
+ }
1843
+ else if (target.state === "failed") {
1844
+ markSteeringAttention(target.index);
1845
+ emitSteeringEvent("subagent.steer.failed", request, target.index, { reason: target.reason });
1846
+ }
1847
+ else {
1848
+ emitSteeringEvent("subagent.steer.scheduled", request, target.index);
1849
+ }
1850
+ }
1851
+ emitTerminalSteeringNotice(request.id, `Steering failed for run ${id}: no requested child remained steerable.`);
1852
+ statusPayload.lastUpdate = now;
1853
+ writeStatusPayload();
1854
+ };
1855
+ const consumeSteerAck = (ack) => {
1856
+ const lifecycle = steeringStatus(statusPayload);
1857
+ const request = lifecycle.recent.find((candidate) => candidate.id === ack.requestId);
1858
+ if (!request || !request.targets.some((target) => target.index === ack.index))
1859
+ return;
1860
+ const late = fs.existsSync(steeringMarkerPath(ack.requestId));
1861
+ const now = Date.now();
1862
+ if (ack.state === "delivered") {
1863
+ updateSteeringLifecycleTarget(ack.requestId, ack.index, late ? "late" : "delivered", now, { reason: late ? "acknowledged after recovery commit" : undefined });
1864
+ emitSteeringEvent("subagent.steer.delivered", { type: "steer", id: ack.requestId, ts: now, message: ack.message }, ack.index, { late, message: ack.message });
1865
+ }
1866
+ else {
1867
+ markSteeringAttention(ack.index);
1868
+ updateSteeringLifecycleTarget(ack.requestId, ack.index, "failed", now, { reason: ack.message });
1869
+ emitSteeringEvent("subagent.steer.failed", { type: "steer", id: ack.requestId, ts: now, message: ack.message }, ack.index, { reason: ack.message });
1870
+ }
1871
+ emitTerminalSteeringNotice(ack.requestId, `Steering failed for run ${id}: ${ack.message}`);
1872
+ statusPayload.lastUpdate = now;
1873
+ writeStatusPayload();
1874
+ };
1875
+ const flushPendingStepSteers = (flatIndex) => {
1876
+ const remaining = [];
1877
+ for (const request of pendingStepSteers.splice(0)) {
1878
+ if (request.targetIndex === undefined)
1879
+ deliverSteerRequest({ ...request, targetIndex: flatIndex });
1880
+ else if (request.targetIndex === flatIndex)
1881
+ deliverSteerRequest(request);
1882
+ else
1883
+ remaining.push(request);
1884
+ }
1885
+ pendingStepSteers.push(...remaining);
1886
+ };
1887
+ const updateStepModel = (flatIndex, model, thinking, now = Date.now()) => {
1888
+ const step = statusPayload.steps[flatIndex];
1889
+ if (!step)
1890
+ return;
1891
+ step.model = model;
1892
+ step.thinking = thinking;
1893
+ statusPayload.lastUpdate = now;
1894
+ writeStatusPayload();
1895
+ };
1896
+ const updateStepTurnBudget = (flatIndex, turnCount, now, terminalAssistantStop) => {
1897
+ const budget = config.turnBudget;
1898
+ const step = statusPayload.steps[flatIndex];
1899
+ if (!budget || !step || timedOut || stopped || turnBudgetExceeded || step.turnBudgetExceeded)
1900
+ return;
1901
+ if (turnCount < budget.maxTurns) {
1902
+ const state = { ...budget, outcome: "within-budget", turnCount };
1903
+ step.turnBudget = state;
1904
+ statusPayload.turnBudget = state;
1905
+ return;
1906
+ }
1907
+ const state = turnBudgetState(budget, turnCount, false);
1908
+ step.turnBudget = state;
1909
+ statusPayload.turnBudget = state;
1910
+ if (!step.wrapUpRequested) {
1911
+ step.wrapUpRequested = true;
1912
+ statusPayload.wrapUpRequested = true;
1913
+ appendRecentStepOutput(step, [turnBudgetSoftNote(budget, turnCount)]);
1914
+ }
1915
+ if (!shouldAbortForTurnBudget(budget, turnCount, terminalAssistantStop))
1916
+ return;
1917
+ const exceededState = turnBudgetState(budget, turnCount, true);
1918
+ const message = turnBudgetExceededMessage(budget, turnCount);
1919
+ step.turnBudget = exceededState;
1920
+ step.turnBudgetExceeded = true;
1921
+ step.wrapUpRequested = true;
1922
+ step.error = message;
1923
+ turnBudgetExceeded = true;
1924
+ statusPayload.turnBudget = exceededState;
1925
+ statusPayload.turnBudgetExceeded = true;
1926
+ statusPayload.wrapUpRequested = true;
1927
+ statusPayload.error = message;
1928
+ statusPayload.lastUpdate = now;
1929
+ appendJsonl(eventsPath, JSON.stringify({ type: "subagent.step.turn_budget_exceeded", ts: now, runId: id, stepIndex: flatIndex, agent: step.agent, turnCount, maxTurns: budget.maxTurns, graceTurns: budget.graceTurns, message }));
1930
+ activeChildTurnBudgetAborts.get(flatIndex)?.(message, exceededState);
1931
+ };
1932
+ const updateStepFromChildEvent = (flatIndex, event) => {
1933
+ const step = statusPayload.steps[flatIndex];
1934
+ if (!step)
1935
+ return;
1936
+ const now = Date.now();
1937
+ statusPayload.currentStep = flatIndex;
1938
+ if (isChildWatchdogStatusEvent(event)) {
1939
+ const next = acceptChildWatchdogEvent({
1940
+ current: step.watchdog,
1941
+ event,
1942
+ runId: id,
1943
+ agent: step.agent,
1944
+ childIndex: flatIndex,
1945
+ });
1946
+ if (!next)
1947
+ return;
1948
+ step.watchdog = next;
1949
+ step.lastActivityAt = now;
1950
+ statusPayload.lastActivityAt = now;
1951
+ statusPayload.lastUpdate = now;
1952
+ writeStatusPayload();
1953
+ return;
1954
+ }
1955
+ if (event.type === "tool_execution_start" && event.toolName) {
1956
+ const mutates = isMutatingTool(event.toolName, event.args);
1957
+ const currentPath = resolveCurrentPath(event.toolName, event.args);
1958
+ step.toolCount = (step.toolCount ?? 0) + 1;
1959
+ const configuredToolBudget = flatSteps[flatIndex]?.toolBudget;
1960
+ if (configuredToolBudget) {
1961
+ step.toolBudget = toolBudgetState(configuredToolBudget, step.toolCount);
1962
+ statusPayload.toolBudget = step.toolBudget;
1963
+ }
1964
+ step.currentTool = event.toolName;
1965
+ step.currentToolArgs = extractToolArgsPreview(event.args ?? {});
1966
+ step.currentToolStartedAt = now;
1967
+ step.currentPath = currentPath;
1968
+ pendingToolResults[flatIndex] = { tool: event.toolName, path: currentPath, mutates, startedAt: now };
1969
+ statusPayload.toolCount = (statusPayload.toolCount ?? 0) + 1;
1970
+ syncTopLevelCurrentTool();
1971
+ }
1972
+ else if (event.type === "tool_execution_end") {
1973
+ if (step.currentTool) {
1974
+ step.recentTools ??= [];
1975
+ step.recentTools.push({ tool: step.currentTool, args: step.currentToolArgs || "", endMs: now });
1976
+ }
1977
+ step.currentTool = undefined;
1978
+ step.currentToolArgs = undefined;
1979
+ step.currentToolStartedAt = undefined;
1980
+ step.currentPath = undefined;
1981
+ syncTopLevelCurrentTool();
1982
+ }
1983
+ else if (event.type === "tool_result_end" && event.message) {
1984
+ const toolSnapshot = pendingToolResults[flatIndex];
1985
+ pendingToolResults[flatIndex] = undefined;
1986
+ const resultText = extractTextFromContent(event.message.content);
1987
+ if (toolSnapshot && resultText.includes("Tool budget hard limit reached")) {
1988
+ const configuredToolBudget = flatSteps[flatIndex]?.toolBudget;
1989
+ if (configuredToolBudget) {
1990
+ step.toolBudget = toolBudgetState(configuredToolBudget, step.toolCount ?? 0, toolSnapshot.tool);
1991
+ step.toolBudgetBlocked = true;
1992
+ statusPayload.toolBudget = step.toolBudget;
1993
+ statusPayload.toolBudgetBlocked = true;
1994
+ }
1995
+ }
1996
+ appendRecentStepOutput(step, resultText.split("\n").slice(-10));
1997
+ if (toolSnapshot?.mutates && didMutatingToolFail(resultText)) {
1998
+ const state = mutatingFailureStates[flatIndex];
1999
+ recordMutatingFailure(state, {
2000
+ tool: toolSnapshot.tool,
2001
+ path: toolSnapshot.path,
2002
+ error: resultText.split("\n").find((line) => line.trim())?.trim().slice(0, 180) ?? "mutating tool failed",
2003
+ ts: now,
2004
+ }, mutatingFailureWindowMs);
2005
+ if (controlConfig.enabled && shouldEscalateMutatingFailures(state, controlConfig.failedToolAttemptsBeforeAttention) && step.activityState !== "needs_attention") {
2006
+ const previous = step.activityState;
2007
+ step.activityState = "needs_attention";
2008
+ statusPayload.activityState = "needs_attention";
2009
+ appendControlEvent(buildControlEvent({
2010
+ type: "needs_attention",
2011
+ from: previous,
2012
+ to: "needs_attention",
2013
+ runId: id,
2014
+ agent: step.agent,
2015
+ index: flatIndex,
2016
+ ts: now,
2017
+ message: `${step.agent} needs attention after repeated mutating tool failures`,
2018
+ reason: "tool_failures",
2019
+ turns: step.turnCount,
2020
+ tokens: step.tokens?.total,
2021
+ toolCount: step.toolCount,
2022
+ currentTool: toolSnapshot.tool,
2023
+ currentToolDurationMs: toolSnapshot.startedAt ? Math.max(0, now - toolSnapshot.startedAt) : undefined,
2024
+ currentPath: toolSnapshot.path,
2025
+ recentFailureSummary: summarizeRecentMutatingFailures(state),
2026
+ }));
2027
+ }
2028
+ }
2029
+ else if (toolSnapshot?.mutates) {
2030
+ resetMutatingFailureState(mutatingFailureStates[flatIndex]);
2031
+ }
2032
+ }
2033
+ else if (event.type === "message_end" && event.message?.role === "assistant") {
2034
+ appendRecentStepOutput(step, stripAcceptanceReport(extractTextFromContent(event.message.content)).split("\n").slice(-10));
2035
+ step.turnCount = (step.turnCount ?? 0) + 1;
2036
+ const usage = event.message.usage;
2037
+ if (usage) {
2038
+ const input = usage.input ?? usage.inputTokens ?? 0;
2039
+ const output = usage.output ?? usage.outputTokens ?? 0;
2040
+ const previousInput = step.tokens?.input ?? 0;
2041
+ const previousOutput = step.tokens?.output ?? 0;
2042
+ step.tokens = { input: previousInput + input, output: previousOutput + output, total: previousInput + previousOutput + input + output };
2043
+ const totalInput = statusPayload.totalTokens?.input ?? 0;
2044
+ const totalOutput = statusPayload.totalTokens?.output ?? 0;
2045
+ statusPayload.totalTokens = { input: totalInput + input, output: totalOutput + output, total: totalInput + totalOutput + input + output };
2046
+ }
2047
+ statusPayload.turnCount = Math.max(statusPayload.turnCount ?? 0, step.turnCount);
2048
+ updateStepTurnBudget(flatIndex, step.turnCount, now, isTerminalAssistantStop(event.message));
2049
+ }
2050
+ syncTopLevelCurrentTool();
2051
+ step.lastActivityAt = now;
2052
+ statusPayload.lastActivityAt = now;
2053
+ statusPayload.lastUpdate = now;
2054
+ maybeEmitActiveLongRunning(flatIndex, now);
2055
+ writeStatusPayload();
2056
+ };
2057
+ const updateRunnerActivityState = (now) => {
2058
+ if (!controlConfig.enabled)
2059
+ return false;
2060
+ let changed = false;
2061
+ let runLastActivityAt = statusPayload.lastActivityAt ?? overallStartTime;
2062
+ for (let index = 0; index < statusPayload.steps.length; index++) {
2063
+ const step = statusPayload.steps[index];
2064
+ if (step.status !== "running")
2065
+ continue;
2066
+ const lastActivityAt = stepOutputActivityAt(index);
2067
+ runLastActivityAt = Math.max(runLastActivityAt, lastActivityAt);
2068
+ if (step.lastActivityAt !== lastActivityAt) {
2069
+ step.lastActivityAt = lastActivityAt;
2070
+ changed = true;
2071
+ }
2072
+ const idleState = deriveActivityState({
2073
+ config: controlConfig,
2074
+ startedAt: step.startedAt ?? overallStartTime,
2075
+ lastActivityAt,
2076
+ now,
2077
+ });
2078
+ if (idleState === "needs_attention") {
2079
+ const previous = step.activityState;
2080
+ step.activityState = "needs_attention";
2081
+ if (previous !== "needs_attention") {
2082
+ appendControlEvent(buildControlEvent({
2083
+ from: previous,
2084
+ to: "needs_attention",
2085
+ runId: id,
2086
+ agent: step.agent,
2087
+ index,
2088
+ ts: now,
2089
+ lastActivityAt,
2090
+ }));
2091
+ changed = true;
2092
+ }
2093
+ }
2094
+ else if (maybeEmitActiveLongRunning(index, now)) {
2095
+ changed = true;
2096
+ }
2097
+ }
2098
+ if (statusPayload.lastActivityAt !== runLastActivityAt) {
2099
+ statusPayload.lastActivityAt = runLastActivityAt;
2100
+ changed = true;
2101
+ }
2102
+ const nextRunState = statusPayload.steps.some((step) => step.activityState === "needs_attention")
2103
+ ? "needs_attention"
2104
+ : statusPayload.steps.some((step) => step.activityState === "active_long_running")
2105
+ ? "active_long_running"
2106
+ : undefined;
2107
+ if (nextRunState !== currentActivityState) {
2108
+ currentActivityState = nextRunState;
2109
+ statusPayload.activityState = nextRunState;
2110
+ changed = true;
2111
+ }
2112
+ statusPayload.lastUpdate = now;
2113
+ if (changed)
2114
+ writeStatusPayload();
2115
+ return changed;
2116
+ };
2117
+ if (controlConfig.enabled) {
2118
+ activityTimer = setInterval(() => {
2119
+ if (statusPayload.state !== "running")
2120
+ return;
2121
+ const now = Date.now();
2122
+ updateRunnerActivityState(now);
2123
+ }, 1000);
2124
+ activityTimer.unref?.();
2125
+ }
2126
+ const interruptRunner = () => {
2127
+ consumeInterruptRequest(asyncDir);
2128
+ if (interrupted || statusPayload.state !== "running")
2129
+ return;
2130
+ interrupted = true;
2131
+ const now = Date.now();
2132
+ statusPayload.state = "paused";
2133
+ currentActivityState = undefined;
2134
+ statusPayload.activityState = undefined;
2135
+ statusPayload.lastUpdate = now;
2136
+ for (const step of statusPayload.steps) {
2137
+ if (step.status === "running") {
2138
+ step.status = "paused";
2139
+ step.activityState = undefined;
2140
+ step.endedAt = now;
2141
+ step.durationMs = step.startedAt ? now - step.startedAt : undefined;
2142
+ step.lastActivityAt = now;
2143
+ }
2144
+ }
2145
+ writeStatusPayload();
2146
+ appendJsonl(eventsPath, JSON.stringify({
2147
+ type: "subagent.run.paused",
2148
+ ts: now,
2149
+ runId: id,
2150
+ }));
2151
+ interruptNestedAsyncDescendants();
2152
+ interruptActiveChildren();
2153
+ };
2154
+ const stopRunner = () => {
2155
+ if (stopped || timedOut || interrupted || statusPayload.state !== "running")
2156
+ return;
2157
+ stopped = true;
2158
+ const now = Date.now();
2159
+ statusPayload.state = "stopped";
2160
+ statusPayload.stopped = true;
2161
+ statusPayload.error = stopMessage;
2162
+ currentActivityState = undefined;
2163
+ statusPayload.activityState = undefined;
2164
+ statusPayload.lastUpdate = now;
2165
+ for (const step of statusPayload.steps) {
2166
+ if (step.status !== "running" && step.status !== "pending")
2167
+ continue;
2168
+ step.status = "stopped";
2169
+ step.error = stopMessage;
2170
+ step.exitCode = 1;
2171
+ step.stopped = true;
2172
+ step.activityState = undefined;
2173
+ step.endedAt = now;
2174
+ step.durationMs = step.startedAt ? now - step.startedAt : 0;
2175
+ step.lastActivityAt = now;
2176
+ }
2177
+ writeStatusPayload();
2178
+ appendJsonl(eventsPath, JSON.stringify({
2179
+ type: "subagent.run.stopped",
2180
+ ts: now,
2181
+ runId: id,
2182
+ message: stopMessage,
2183
+ }));
2184
+ stopAbortController.abort();
2185
+ stopNestedAsyncDescendants();
2186
+ stopActiveChildren();
2187
+ };
2188
+ const timeoutRunner = () => {
2189
+ if (timedOut || stopped || interrupted || statusPayload.state !== "running")
2190
+ return;
2191
+ timedOut = true;
2192
+ const now = Date.now();
2193
+ const message = timeoutMessage ?? "Subagent timed out.";
2194
+ statusPayload.state = "failed";
2195
+ statusPayload.timedOut = true;
2196
+ statusPayload.error = message;
2197
+ currentActivityState = undefined;
2198
+ statusPayload.activityState = undefined;
2199
+ statusPayload.lastUpdate = now;
2200
+ for (const step of statusPayload.steps) {
2201
+ if (step.status !== "running" && step.status !== "pending")
2202
+ continue;
2203
+ step.status = "failed";
2204
+ step.error = message;
2205
+ step.exitCode = 1;
2206
+ step.timedOut = true;
2207
+ step.activityState = undefined;
2208
+ step.endedAt = now;
2209
+ step.durationMs = step.startedAt ? now - step.startedAt : 0;
2210
+ step.lastActivityAt = now;
2211
+ }
2212
+ writeStatusPayload();
2213
+ appendJsonl(eventsPath, JSON.stringify({
2214
+ type: "subagent.run.timed_out",
2215
+ ts: now,
2216
+ runId: id,
2217
+ timeoutMs: config.timeoutMs,
2218
+ deadlineAt: config.deadlineAt,
2219
+ message,
2220
+ }));
2221
+ timeoutAbortController.abort();
2222
+ timeoutNestedAsyncDescendants();
2223
+ timeoutActiveChildren();
2224
+ };
2225
+ process.on(ASYNC_INTERRUPT_SIGNAL, interruptRunner);
2226
+ // Portable control inbox: the parent drops control request files here when
2227
+ // it cannot deliver OS signals (e.g. ENOSYS on Windows) or when steering a
2228
+ // live child. Interrupts still route into the same graceful interruptRunner().
2229
+ const disposeControlInbox = watchAsyncControlInbox(asyncDir, {
2230
+ onInterrupt: interruptRunner,
2231
+ onTimeout: timeoutRunner,
2232
+ onStop: stopRunner,
2233
+ onSteer: (request) => {
2234
+ const targetStep = request.targetIndex !== undefined ? statusPayload.steps[request.targetIndex] : undefined;
2235
+ if (targetStep?.status === "pending") {
2236
+ deliverSteerRequest(request);
2237
+ pendingStepSteers.push(request);
2238
+ }
2239
+ else if (request.targetIndexes !== undefined || request.targetIndex !== undefined || statusPayload.steps.some((step) => step.status === "running")) {
2240
+ deliverSteerRequest(request);
2241
+ }
2242
+ else {
2243
+ deliverSteerRequest(request);
2244
+ pendingStepSteers.push(request);
2245
+ }
2246
+ },
2247
+ onSteerCapability: (capability) => {
2248
+ steeringCapabilities.set(capability.index, capability);
2249
+ if (!capability.supported) {
2250
+ const now = Date.now();
2251
+ const lifecycle = steeringStatus(statusPayload);
2252
+ for (const request of lifecycle.recent) {
2253
+ if (!request.targets.some((target) => target.index === capability.index && (target.state === "routed" || target.state === "scheduled")))
2254
+ continue;
2255
+ markSteeringAttention(capability.index);
2256
+ updateSteeringLifecycleTarget(request.id, capability.index, "failed", now, { reason: "child Pi session does not support steering" });
2257
+ emitSteeringEvent("subagent.steer.failed", { type: "steer", id: request.id, ts: request.requestedAt, message: "child Pi session does not support steering" }, capability.index, { reason: "child Pi session does not support steering" });
2258
+ emitTerminalSteeringNotice(request.id, `Steering failed for run ${id}: child ${capability.index} does not support steering.`);
2259
+ }
2260
+ statusPayload.lastUpdate = now;
2261
+ writeStatusPayload();
2262
+ }
2263
+ },
2264
+ onSteerAck: consumeSteerAck,
2265
+ });
2266
+ if (config.deadlineAt !== undefined) {
2267
+ const remainingMs = Math.max(0, config.deadlineAt - Date.now());
2268
+ timeoutTimer = setTimeout(timeoutRunner, remainingMs);
2269
+ timeoutTimer.unref?.();
2270
+ }
2271
+ appendJsonl(eventsPath, JSON.stringify({
2272
+ type: "subagent.run.started",
2273
+ lifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,
2274
+ ts: overallStartTime,
2275
+ runId: id,
2276
+ mode: statusPayload.mode,
2277
+ cwd,
2278
+ pid: process.pid,
2279
+ }));
2280
+ let flatIndex = 0;
2281
+ let stepCursor = 0;
2282
+ while (true) {
2283
+ if (interrupted || timedOut || stopped || turnBudgetExceeded)
2284
+ break;
2285
+ consumePendingAppendRequests();
2286
+ if (stepCursor >= steps.length)
2287
+ break;
2288
+ const stepIndex = stepCursor++;
2289
+ const step = steps[stepIndex];
2290
+ if (isDynamicRunnerGroup(step)) {
2291
+ const groupStartFlatIndex = flatIndex;
2292
+ let materialized;
2293
+ try {
2294
+ materialized = materializeDynamicParallelStep(step, outputs, stepIndex, { maxItems: config.dynamicFanoutMaxItems, allowRunnerFields: true });
2295
+ if (materialized.parallel.length > 1 && step.parallel.outputPath && !step.parallel.namespaceOutputPath) {
2296
+ throw new DynamicFanoutError(`Dynamic chain step ${stepIndex + 1} materialized ${materialized.parallel.length} items that resolve output to the same path: ${step.parallel.outputPath}. Remove the explicit output path or use an inherited relative agent output so each item can be isolated.`);
2297
+ }
2298
+ if (materialized.collectedOnEmpty)
2299
+ validateDynamicCollection(step.collect.outputSchema, materialized.collectedOnEmpty);
2300
+ }
2301
+ catch (error) {
2302
+ const now = Date.now();
2303
+ const message = error instanceof DynamicFanoutError ? error.message : error instanceof Error ? error.message : String(error);
2304
+ statusPayload.state = "failed";
2305
+ statusPayload.error = message;
2306
+ statusPayload.currentStep = flatIndex;
2307
+ const placeholder = statusPayload.steps[groupStartFlatIndex];
2308
+ if (placeholder) {
2309
+ placeholder.status = "failed";
2310
+ placeholder.error = message;
2311
+ placeholder.startedAt = now;
2312
+ placeholder.endedAt = now;
2313
+ placeholder.durationMs = 0;
2314
+ placeholder.exitCode = 1;
2315
+ }
2316
+ statusPayload.lastUpdate = now;
2317
+ markDynamicGraphGroup(stepIndex, "failed", message);
2318
+ writeStatusPayload();
2319
+ results.push({ agent: step.parallel.agent, output: message, error: message, success: false, exitCode: 1 });
2320
+ break;
2321
+ }
2322
+ const effectiveDynamicGroupAcceptance = resolveEffectiveAcceptance({
2323
+ explicit: step.acceptanceInput,
2324
+ agentName: step.parallel.agent,
2325
+ acceptanceRole: step.acceptanceRole,
2326
+ task: materialized.parallel.map((task) => task.task ?? step.parallel.task).join("\n") || step.parallel.task,
2327
+ mode: config.mode,
2328
+ async: true,
2329
+ dynamicGroup: true,
2330
+ });
2331
+ if (materialized.parallel.length === 0) {
2332
+ const now = Date.now();
2333
+ const collection = materialized.collectedOnEmpty ?? [];
2334
+ outputs[step.collect.as] = {
2335
+ text: JSON.stringify(collection),
2336
+ structured: collection,
2337
+ agent: step.parallel.agent,
2338
+ stepIndex,
2339
+ };
2340
+ statusPayload.outputs = outputs;
2341
+ const placeholder = statusPayload.steps[groupStartFlatIndex];
2342
+ if (placeholder) {
2343
+ placeholder.status = "complete";
2344
+ placeholder.startedAt = now;
2345
+ placeholder.endedAt = now;
2346
+ placeholder.durationMs = 0;
2347
+ }
2348
+ previousOutput = "Dynamic fanout produced 0 results.";
2349
+ const groupAcceptance = effectiveDynamicGroupAcceptance.explicit && !timedOut && !stopped
2350
+ ? await evaluateAcceptance({
2351
+ acceptance: effectiveDynamicGroupAcceptance,
2352
+ output: "",
2353
+ report: aggregateAcceptanceReport({
2354
+ results: [],
2355
+ notes: "Dynamic fanout produced 0 results.",
2356
+ }),
2357
+ cwd,
2358
+ signal: combinedAbortSignal([timeoutAbortController.signal, stopAbortController.signal]),
2359
+ abortMessage: stopAbortController.signal.aborted ? stopMessage : timeoutMessage ?? "Subagent timed out.",
2360
+ })
2361
+ : undefined;
2362
+ const groupStopped = stopped || stopAbortController.signal.aborted;
2363
+ const groupTimedOut = !groupStopped && (timedOut || timeoutAbortController.signal.aborted);
2364
+ const effectiveGroupAcceptance = groupTimedOut || groupStopped ? undefined : groupAcceptance;
2365
+ if (placeholder && effectiveGroupAcceptance)
2366
+ placeholder.acceptance = effectiveGroupAcceptance;
2367
+ const groupAcceptanceFailure = effectiveGroupAcceptance ? acceptanceFailureMessage(effectiveGroupAcceptance) : undefined;
2368
+ if (groupTimedOut || groupStopped || groupAcceptanceFailure) {
2369
+ const errorMessage = groupStopped ? stopMessage : groupTimedOut ? timeoutMessage ?? "Subagent timed out." : groupAcceptanceFailure;
2370
+ statusPayload.state = groupStopped ? "stopped" : "failed";
2371
+ statusPayload.error = errorMessage;
2372
+ statusPayload.stopped = groupStopped ? true : statusPayload.stopped;
2373
+ if (placeholder) {
2374
+ placeholder.status = groupStopped ? "stopped" : "failed";
2375
+ placeholder.error = errorMessage;
2376
+ placeholder.exitCode = 1;
2377
+ placeholder.timedOut = groupTimedOut ? true : undefined;
2378
+ placeholder.stopped = groupStopped ? true : undefined;
2379
+ }
2380
+ markDynamicGraphGroup(stepIndex, groupStopped ? "stopped" : "failed", errorMessage, effectiveGroupAcceptance);
2381
+ statusPayload.lastUpdate = Date.now();
2382
+ writeStatusPayload();
2383
+ results.push({ agent: step.parallel.agent, output: errorMessage, error: errorMessage, success: false, exitCode: 1, timedOut: groupTimedOut ? true : undefined, stopped: groupStopped ? true : undefined, acceptance: effectiveGroupAcceptance });
2384
+ break;
2385
+ }
2386
+ flatIndex++;
2387
+ statusPayload.lastUpdate = now;
2388
+ markDynamicGraphGroup(stepIndex, "completed", undefined, effectiveGroupAcceptance);
2389
+ writeStatusPayload();
2390
+ continue;
2391
+ }
2392
+ const dynamicSteps = materialized.parallel.map((task, itemIndex) => {
2393
+ const thinkingOverride = step.thinkingOverrides?.[itemIndex];
2394
+ const model = thinkingOverride ? applyThinkingSuffix(step.parallel.model, thinkingOverride, true) : step.parallel.model;
2395
+ const thinking = thinkingOverride ? resolveEffectiveThinking(model, thinkingOverride) : undefined;
2396
+ const outputPath = step.parallel.namespaceOutputPath && step.parallel.outputPath
2397
+ ? path.join(path.dirname(step.parallel.outputPath), `dynamic-${stepIndex}`, `${itemIndex}-${step.parallel.agent}`, path.basename(step.parallel.outputPath))
2398
+ : step.parallel.outputPath;
2399
+ const taskText = task.task ?? step.parallel.task;
2400
+ const materializedTask = step.parallel.namespaceOutputPath ? injectSingleOutputInstruction(taskText, outputPath, step.parallel) : taskText;
2401
+ return {
2402
+ ...step.parallel,
2403
+ task: materializedTask,
2404
+ effectiveAcceptance: resolveEffectiveAcceptance({
2405
+ explicit: step.parallel.acceptanceInput,
2406
+ agentName: step.parallel.agent,
2407
+ acceptanceRole: step.parallel.acceptanceRole,
2408
+ task: materializedTask,
2409
+ mode: config.mode,
2410
+ async: true,
2411
+ dynamic: step.parallel.acceptanceInput === undefined,
2412
+ }),
2413
+ systemPrompt: step.parallel.namespaceOutputPath ? injectOutputPathSystemPrompt(step.parallel.systemPrompt ?? "", outputPath, step.parallel) : step.parallel.systemPrompt,
2414
+ outputPath,
2415
+ label: task.label ?? step.parallel.label,
2416
+ ...(step.sessionFiles?.[itemIndex] ? { sessionFile: step.sessionFiles[itemIndex] } : {}),
2417
+ ...(thinkingOverride ? {
2418
+ ...(model ? { model } : {}),
2419
+ ...(thinking ? { thinking } : {}),
2420
+ ...(step.parallel.modelCandidates ? { modelCandidates: step.parallel.modelCandidates.map((candidate) => applyThinkingSuffix(candidate, thinkingOverride, true)) } : {}),
2421
+ } : {}),
2422
+ structuredOutput: undefined,
2423
+ structuredOutputSchema: step.parallel.structuredOutputSchema ?? step.parallel.structuredOutput?.schema,
2424
+ };
2425
+ });
2426
+ const dynamicFlatStepCount = Math.max(statusPayload.steps.length - 1 + dynamicSteps.length, 1);
2427
+ const dynamicStatusSteps = dynamicSteps.map((task, itemIndex) => {
2428
+ const transcriptPath = resolveAsyncStepTranscriptPath({ artifactsDir, artifactConfig, runId: id, agent: task.agent, flatIndex: groupStartFlatIndex + itemIndex, flatStepCount: dynamicFlatStepCount });
2429
+ return {
2430
+ agent: task.agent,
2431
+ phase: task.phase ?? step.phase,
2432
+ label: task.label,
2433
+ outputName: undefined,
2434
+ structured: Boolean(task.structuredOutputSchema),
2435
+ status: "pending",
2436
+ ...(task.sessionFile ? { sessionFile: task.sessionFile } : {}),
2437
+ ...(transcriptPath ? { transcriptPath } : {}),
2438
+ skills: task.skills,
2439
+ model: task.model,
2440
+ thinking: task.thinking,
2441
+ attemptedModels: task.modelCandidates && task.modelCandidates.length > 0 ? task.modelCandidates : task.model ? [task.model] : undefined,
2442
+ recentTools: [],
2443
+ recentOutput: [],
2444
+ };
2445
+ });
2446
+ statusPayload.steps.splice(groupStartFlatIndex, 1, ...dynamicStatusSteps);
2447
+ if (config.childIntercomTargets) {
2448
+ config.childIntercomTargets = statusPayload.steps.map((statusStep, index) => resolveSubagentIntercomTarget(id, statusStep.childId ?? statusStep.agent, index));
2449
+ }
2450
+ mutatingFailureStates.splice(groupStartFlatIndex, 1, ...dynamicStatusSteps.map(() => createMutatingFailureState()));
2451
+ pendingToolResults.splice(groupStartFlatIndex, 1, ...dynamicStatusSteps.map(() => undefined));
2452
+ const materializedDelta = dynamicStatusSteps.length - 1;
2453
+ for (const group of statusPayload.parallelGroups) {
2454
+ if (group.stepIndex === stepIndex) {
2455
+ group.start = groupStartFlatIndex;
2456
+ group.count = dynamicStatusSteps.length;
2457
+ }
2458
+ else if (group.start > groupStartFlatIndex) {
2459
+ group.start += materializedDelta;
2460
+ }
2461
+ }
2462
+ if (statusPayload.workflowGraph) {
2463
+ const shiftFlatIndexes = (nodes) => {
2464
+ for (const node of nodes) {
2465
+ if (node.stepIndex !== undefined && node.stepIndex > stepIndex && node.flatIndex !== undefined && node.flatIndex >= groupStartFlatIndex) {
2466
+ node.flatIndex += dynamicStatusSteps.length;
2467
+ }
2468
+ if (node.children)
2469
+ shiftFlatIndexes(node.children);
2470
+ }
2471
+ };
2472
+ shiftFlatIndexes(statusPayload.workflowGraph.nodes);
2473
+ const groupNode = statusPayload.workflowGraph.nodes.find((node) => node.id === `step-${stepIndex}`);
2474
+ if (groupNode) {
2475
+ groupNode.children = materialized.items.map((item, itemIndex) => ({
2476
+ id: `step-${stepIndex}-item-${item.idKey}`,
2477
+ kind: "agent",
2478
+ agent: step.parallel.agent,
2479
+ phase: dynamicSteps[itemIndex]?.phase ?? step.phase,
2480
+ label: dynamicSteps[itemIndex]?.label?.trim() || `${step.parallel.agent} ${item.key}`,
2481
+ status: "pending",
2482
+ flatIndex: groupStartFlatIndex + itemIndex,
2483
+ stepIndex,
2484
+ itemKey: item.key,
2485
+ structured: Boolean(dynamicSteps[itemIndex]?.structuredOutputSchema),
2486
+ }));
2487
+ }
2488
+ }
2489
+ writeStatusPayload();
2490
+ const concurrency = step.concurrency ?? MAX_PARALLEL_CONCURRENCY;
2491
+ const failFast = step.failFast ?? false;
2492
+ let aborted = false;
2493
+ const parallelResults = await mapConcurrent(dynamicSteps, concurrency, async (task, taskIdx) => {
2494
+ const fi = groupStartFlatIndex + taskIdx;
2495
+ if (timedOut)
2496
+ return timedOutStepResult(task.agent);
2497
+ if (stopped)
2498
+ return stoppedStepResult(task.agent);
2499
+ if (interrupted)
2500
+ return pausedStepResult(task.agent);
2501
+ if (aborted && failFast) {
2502
+ const skippedAt = Date.now();
2503
+ statusPayload.steps[fi].status = "failed";
2504
+ statusPayload.steps[fi].error = "Skipped due to fail-fast";
2505
+ statusPayload.steps[fi].startedAt = skippedAt;
2506
+ statusPayload.steps[fi].endedAt = skippedAt;
2507
+ statusPayload.steps[fi].durationMs = 0;
2508
+ statusPayload.steps[fi].exitCode = -1;
2509
+ statusPayload.lastUpdate = skippedAt;
2510
+ writeStatusPayload();
2511
+ return { agent: task.agent, output: "(skipped — fail-fast)", exitCode: -1, skipped: true };
2512
+ }
2513
+ const taskStartTime = Date.now();
2514
+ statusPayload.currentStep = fi;
2515
+ statusPayload.steps[fi].status = "running";
2516
+ statusPayload.steps[fi].error = undefined;
2517
+ statusPayload.steps[fi].activityState = undefined;
2518
+ resetStepLiveDetail(statusPayload.steps[fi]);
2519
+ statusPayload.steps[fi].startedAt = taskStartTime;
2520
+ statusPayload.steps[fi].lastActivityAt = taskStartTime;
2521
+ statusPayload.outputFile = path.join(asyncDir, `output-${fi}.log`);
2522
+ statusPayload.lastActivityAt = taskStartTime;
2523
+ statusPayload.lastUpdate = taskStartTime;
2524
+ writeStatusPayload();
2525
+ appendJsonl(eventsPath, JSON.stringify({ type: "subagent.step.started", ts: taskStartTime, runId: id, stepIndex: fi, agent: task.agent }));
2526
+ flushPendingStepSteers(fi);
2527
+ const singleResult = await runSingleStep(task, {
2528
+ previousOutput, placeholder, cwd, sessionEnabled,
2529
+ outputs,
2530
+ sessionDir: config.sessionDir ? path.join(config.sessionDir, `dynamic-${stepIndex}-${taskIdx}`) : undefined,
2531
+ artifactsDir, artifactConfig, id,
2532
+ flatIndex: fi, flatStepCount: Math.max(statusPayload.steps.length, 1),
2533
+ outputFile: path.join(asyncDir, `output-${fi}.log`),
2534
+ steerInboxDir: stepSteerInboxDir(asyncDir, fi),
2535
+ steerCapabilityPath: steerCapabilityPath(asyncDir, fi),
2536
+ steerAckDir: steerAcksDir(asyncDir, fi),
2537
+ piPackageRoot: config.piPackageRoot,
2538
+ piArgv1: config.piArgv1,
2539
+ childIntercomTarget: config.childIntercomTargets?.[fi],
2540
+ orchestratorIntercomTarget: config.controlIntercomTarget,
2541
+ nestedRoute: config.nestedRoute,
2542
+ registerInterrupt: (interrupt) => registerStepInterrupt(fi, interrupt),
2543
+ registerTimeout: (interrupt) => registerStepTimeout(fi, interrupt),
2544
+ registerStop: (stop) => registerStepStop(fi, stop),
2545
+ registerTurnBudgetAbort: (abort) => registerStepTurnBudgetAbort(fi, abort),
2546
+ timeoutSignal: timeoutAbortController.signal,
2547
+ stopSignal: stopAbortController.signal,
2548
+ timeoutMessage,
2549
+ stopMessage,
2550
+ turnBudget: config.turnBudget,
2551
+ onAttemptStart: (attempt) => updateStepModel(fi, attempt.model, attempt.thinking),
2552
+ onChildEvent: (event) => updateStepFromChildEvent(fi, event),
2553
+ onWriterProcess,
2554
+ skipAcceptance: () => timedOut || stopped,
2555
+ });
2556
+ const taskEndTime = Date.now();
2557
+ const childInterrupted = singleResult.interrupted === true;
2558
+ const childStopped = singleResult.stopped === true;
2559
+ statusPayload.steps[fi].status = stopped || childStopped ? "stopped" : timedOut ? "failed" : childInterrupted ? "paused" : singleResult.exitCode === 0 ? "complete" : "failed";
2560
+ statusPayload.steps[fi].endedAt = taskEndTime;
2561
+ statusPayload.steps[fi].durationMs = taskEndTime - taskStartTime;
2562
+ statusPayload.steps[fi].exitCode = stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode;
2563
+ statusPayload.steps[fi].timedOut = timedOut || singleResult.timedOut ? true : undefined;
2564
+ statusPayload.steps[fi].stopped = stopped || childStopped ? true : undefined;
2565
+ statusPayload.steps[fi].turnBudget = singleResult.turnBudget;
2566
+ statusPayload.steps[fi].turnBudgetExceeded = singleResult.turnBudgetExceeded;
2567
+ statusPayload.steps[fi].wrapUpRequested = singleResult.wrapUpRequested;
2568
+ statusPayload.steps[fi].toolBudget = singleResult.toolBudget;
2569
+ statusPayload.steps[fi].toolBudgetBlocked = singleResult.toolBudgetBlocked;
2570
+ if (singleResult.toolBudget)
2571
+ statusPayload.toolBudget = singleResult.toolBudget;
2572
+ if (singleResult.toolBudgetBlocked)
2573
+ statusPayload.toolBudgetBlocked = true;
2574
+ if (singleResult.turnBudget)
2575
+ statusPayload.turnBudget = singleResult.turnBudget;
2576
+ if (singleResult.turnBudgetExceeded)
2577
+ statusPayload.turnBudgetExceeded = true;
2578
+ if (singleResult.wrapUpRequested)
2579
+ statusPayload.wrapUpRequested = true;
2580
+ statusPayload.steps[fi].model = singleResult.model;
2581
+ statusPayload.steps[fi].thinking = resolveEffectiveThinking(singleResult.model, statusPayload.steps[fi].thinking);
2582
+ statusPayload.steps[fi].attemptedModels = singleResult.attemptedModels;
2583
+ statusPayload.steps[fi].modelAttempts = singleResult.modelAttempts;
2584
+ statusPayload.steps[fi].totalCost = singleResult.totalCost;
2585
+ statusPayload.steps[fi].error = stopped || childStopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : singleResult.error;
2586
+ statusPayload.steps[fi].transcriptPath = singleResult.transcriptPath ?? statusPayload.steps[fi].transcriptPath;
2587
+ statusPayload.steps[fi].transcriptError = singleResult.transcriptError;
2588
+ statusPayload.steps[fi].structuredOutput = singleResult.structuredOutput;
2589
+ statusPayload.steps[fi].structuredOutputPath = singleResult.structuredOutputPath;
2590
+ statusPayload.steps[fi].structuredOutputSchemaPath = singleResult.structuredOutputSchemaPath;
2591
+ statusPayload.steps[fi].acceptance = singleResult.acceptance;
2592
+ statusPayload.steps[fi].watchdog = singleResult.watchdog;
2593
+ statusPayload.lastUpdate = taskEndTime;
2594
+ writeStatusPayload();
2595
+ appendJsonl(eventsPath, JSON.stringify({
2596
+ type: stopped || childStopped ? "subagent.step.stopped" : timedOut ? "subagent.step.failed" : childInterrupted ? "subagent.step.paused" : singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
2597
+ ts: taskEndTime, runId: id, stepIndex: fi, agent: task.agent,
2598
+ exitCode: stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode, durationMs: taskEndTime - taskStartTime,
2599
+ }));
2600
+ if (singleResult.exitCode !== 0 && failFast)
2601
+ aborted = true;
2602
+ return stopped || childStopped ? { ...singleResult, output: stopMessage, error: stopMessage, exitCode: 1, interrupted: false, timedOut: false, stopped: true, skipped: false } : timedOut ? { ...singleResult, output: timeoutMessage ?? "Subagent timed out.", error: timeoutMessage ?? "Subagent timed out.", exitCode: 1, interrupted: false, timedOut: true, skipped: false } : { ...singleResult, skipped: false };
2603
+ }, globalSemaphore);
2604
+ flatIndex += dynamicSteps.length;
2605
+ for (const pr of parallelResults) {
2606
+ results.push({
2607
+ agent: pr.agent,
2608
+ output: pr.output,
2609
+ error: pr.error,
2610
+ protocolError: pr.protocolError,
2611
+ success: pr.stopped !== true && pr.interrupted !== true && pr.exitCode === 0,
2612
+ exitCode: pr.interrupted === true ? 0 : pr.exitCode,
2613
+ skipped: pr.skipped,
2614
+ interrupted: pr.interrupted,
2615
+ timedOut: pr.timedOut,
2616
+ stopped: pr.stopped,
2617
+ turnBudget: pr.turnBudget,
2618
+ turnBudgetExceeded: pr.turnBudgetExceeded,
2619
+ wrapUpRequested: pr.wrapUpRequested,
2620
+ toolBudget: pr.toolBudget,
2621
+ toolBudgetBlocked: pr.toolBudgetBlocked,
2622
+ sessionFile: pr.sessionFile,
2623
+ intercomTarget: pr.intercomTarget,
2624
+ model: pr.model,
2625
+ attemptedModels: pr.attemptedModels,
2626
+ modelAttempts: pr.modelAttempts,
2627
+ totalCost: pr.totalCost,
2628
+ artifactPaths: pr.artifactPaths,
2629
+ transcriptPath: pr.transcriptPath,
2630
+ transcriptError: pr.transcriptError,
2631
+ structuredOutput: pr.structuredOutput,
2632
+ structuredOutputPath: pr.structuredOutputPath,
2633
+ structuredOutputSchemaPath: pr.structuredOutputSchemaPath,
2634
+ acceptance: pr.acceptance,
2635
+ watchdog: pr.watchdog,
2636
+ });
2637
+ }
2638
+ const collection = collectDynamicResults(step, materialized.items, parallelResults);
2639
+ const failures = parallelResults.filter((result) => result.exitCode !== 0 && result.exitCode !== -1);
2640
+ if (failures.length === 0) {
2641
+ try {
2642
+ validateDynamicCollection(step.collect.outputSchema, collection);
2643
+ outputs[step.collect.as] = {
2644
+ text: JSON.stringify(collection),
2645
+ structured: collection,
2646
+ agent: step.parallel.agent,
2647
+ stepIndex,
2648
+ };
2649
+ statusPayload.outputs = outputs;
2650
+ const groupAcceptance = !timedOut && !stopped
2651
+ ? await evaluateAcceptance({
2652
+ acceptance: effectiveDynamicGroupAcceptance,
2653
+ output: "",
2654
+ report: aggregateAcceptanceReport({
2655
+ results: parallelResults,
2656
+ notes: `Dynamic fanout collected ${collection.length} result(s) into ${step.collect.as}.`,
2657
+ }),
2658
+ cwd,
2659
+ signal: combinedAbortSignal([timeoutAbortController.signal, stopAbortController.signal]),
2660
+ abortMessage: stopAbortController.signal.aborted ? stopMessage : timeoutMessage ?? "Subagent timed out.",
2661
+ })
2662
+ : undefined;
2663
+ const groupStopped = stopped || stopAbortController.signal.aborted;
2664
+ const groupTimedOut = !groupStopped && (timedOut || timeoutAbortController.signal.aborted);
2665
+ const effectiveGroupAcceptance = groupTimedOut || groupStopped ? undefined : groupAcceptance;
2666
+ const groupAcceptanceFailure = effectiveDynamicGroupAcceptance.explicit && effectiveGroupAcceptance ? acceptanceFailureMessage(effectiveGroupAcceptance) : undefined;
2667
+ const groupError = groupStopped ? stopMessage : groupTimedOut ? timeoutMessage ?? "Subagent timed out." : groupAcceptanceFailure;
2668
+ markDynamicGraphGroup(stepIndex, groupError ? groupStopped ? "stopped" : "failed" : "completed", groupError, effectiveGroupAcceptance);
2669
+ if (groupError) {
2670
+ results.push({
2671
+ agent: step.parallel.agent,
2672
+ output: groupError,
2673
+ error: groupError,
2674
+ success: false,
2675
+ exitCode: 1,
2676
+ timedOut: groupTimedOut ? true : undefined,
2677
+ stopped: groupStopped ? true : undefined,
2678
+ structuredOutput: collection,
2679
+ acceptance: effectiveGroupAcceptance,
2680
+ });
2681
+ statusPayload.error = groupError;
2682
+ statusPayload.stopped = groupStopped ? true : statusPayload.stopped;
2683
+ }
2684
+ }
2685
+ catch (error) {
2686
+ const message = error instanceof DynamicFanoutError ? error.message : error instanceof Error ? error.message : String(error);
2687
+ results.push({ agent: step.parallel.agent, output: message, error: message, success: false, exitCode: 1, structuredOutput: collection });
2688
+ statusPayload.error = message;
2689
+ markDynamicGraphGroup(stepIndex, "failed", message);
2690
+ }
2691
+ }
2692
+ previousOutput = aggregateParallelOutputs(parallelResults.map((r, i) => ({
2693
+ agent: r.agent,
2694
+ taskIndex: i,
2695
+ output: r.output,
2696
+ exitCode: r.exitCode,
2697
+ error: r.error,
2698
+ })), (i, agent) => `=== Dynamic Item ${i + 1} (${agent}, key ${materialized.items[i]?.key ?? i}) ===`);
2699
+ appendJsonl(eventsPath, JSON.stringify({
2700
+ type: "subagent.dynamic.completed",
2701
+ ts: Date.now(),
2702
+ runId: id,
2703
+ stepIndex,
2704
+ success: failures.length === 0,
2705
+ }));
2706
+ if (failures.length > 0)
2707
+ markDynamicGraphGroup(stepIndex, "failed", failures[0]?.error ?? "Dynamic fanout child failed.");
2708
+ statusPayload.lastUpdate = Date.now();
2709
+ writeStatusPayload();
2710
+ if (failures.length > 0 || statusPayload.error)
2711
+ break;
2712
+ continue;
2713
+ }
2714
+ if (isParallelGroup(step)) {
2715
+ const group = step;
2716
+ const concurrency = group.concurrency ?? MAX_PARALLEL_CONCURRENCY;
2717
+ const failFast = group.failFast ?? false;
2718
+ const groupStartFlatIndex = flatIndex;
2719
+ let aborted = false;
2720
+ let worktreeSetup;
2721
+ if (group.worktree) {
2722
+ const worktreeTaskCwdConflict = findWorktreeTaskCwdConflict(group.parallel, cwd);
2723
+ if (worktreeTaskCwdConflict) {
2724
+ const failedAt = Date.now();
2725
+ markParallelGroupSetupFailure({
2726
+ statusPayload,
2727
+ results,
2728
+ group,
2729
+ groupStartFlatIndex,
2730
+ setupError: formatWorktreeTaskCwdConflict(worktreeTaskCwdConflict, cwd),
2731
+ failedAt,
2732
+ statusPath,
2733
+ eventsPath,
2734
+ asyncDir,
2735
+ runId: id,
2736
+ stepIndex,
2737
+ });
2738
+ flatIndex += group.parallel.length;
2739
+ break;
2740
+ }
2741
+ try {
2742
+ worktreeSetup = createWorktrees(cwd, `${id}-s${stepIndex}`, group.parallel.length, {
2743
+ agents: group.parallel.map((task) => task.agent),
2744
+ setupHook: config.worktreeSetupHook
2745
+ ? { hookPath: config.worktreeSetupHook, timeoutMs: config.worktreeSetupHookTimeoutMs }
2746
+ : undefined,
2747
+ baseDir: config.worktreeBaseDir,
2748
+ });
2749
+ }
2750
+ catch (error) {
2751
+ const setupError = error instanceof Error ? error.message : String(error);
2752
+ const failedAt = Date.now();
2753
+ markParallelGroupSetupFailure({
2754
+ statusPayload,
2755
+ results,
2756
+ group,
2757
+ groupStartFlatIndex,
2758
+ setupError,
2759
+ failedAt,
2760
+ statusPath,
2761
+ eventsPath,
2762
+ asyncDir,
2763
+ runId: id,
2764
+ stepIndex,
2765
+ });
2766
+ flatIndex += group.parallel.length;
2767
+ break;
2768
+ }
2769
+ }
2770
+ try {
2771
+ if (group.worktree)
2772
+ ensureParallelProgressFile(cwd, group);
2773
+ const groupStartTime = Date.now();
2774
+ markParallelGroupRunning({
2775
+ statusPayload,
2776
+ group,
2777
+ groupStartFlatIndex,
2778
+ groupStartTime,
2779
+ statusPath,
2780
+ eventsPath,
2781
+ asyncDir,
2782
+ runId: id,
2783
+ stepIndex,
2784
+ });
2785
+ const parallelResults = await mapConcurrent(group.parallel, concurrency, async (task, taskIdx) => {
2786
+ const fi = groupStartFlatIndex + taskIdx;
2787
+ if (timedOut)
2788
+ return timedOutStepResult(task.agent);
2789
+ if (stopped)
2790
+ return stoppedStepResult(task.agent);
2791
+ if (interrupted)
2792
+ return pausedStepResult(task.agent);
2793
+ if (aborted && failFast) {
2794
+ const skippedAt = Date.now();
2795
+ statusPayload.steps[fi].status = "failed";
2796
+ statusPayload.steps[fi].error = "Skipped due to fail-fast";
2797
+ statusPayload.steps[fi].startedAt = skippedAt;
2798
+ statusPayload.steps[fi].endedAt = skippedAt;
2799
+ statusPayload.steps[fi].durationMs = 0;
2800
+ statusPayload.steps[fi].exitCode = -1;
2801
+ statusPayload.steps[fi].activityState = undefined;
2802
+ statusPayload.lastUpdate = skippedAt;
2803
+ writeStatusPayload();
2804
+ appendJsonl(eventsPath, JSON.stringify({
2805
+ type: "subagent.step.failed", ts: skippedAt, runId: id, stepIndex: fi, agent: task.agent, exitCode: -1, durationMs: 0,
2806
+ }));
2807
+ return { agent: task.agent, output: "(skipped — fail-fast)", exitCode: -1, skipped: true };
2808
+ }
2809
+ const taskStartTime = Date.now();
2810
+ statusPayload.currentStep = fi;
2811
+ statusPayload.steps[fi].status = "running";
2812
+ statusPayload.steps[fi].error = undefined;
2813
+ statusPayload.steps[fi].activityState = undefined;
2814
+ resetStepLiveDetail(statusPayload.steps[fi]);
2815
+ statusPayload.steps[fi].startedAt = taskStartTime;
2816
+ statusPayload.steps[fi].endedAt = undefined;
2817
+ statusPayload.steps[fi].durationMs = undefined;
2818
+ statusPayload.steps[fi].lastActivityAt = taskStartTime;
2819
+ statusPayload.outputFile = path.join(asyncDir, `output-${fi}.log`);
2820
+ statusPayload.lastActivityAt = taskStartTime;
2821
+ statusPayload.lastUpdate = taskStartTime;
2822
+ writeStatusPayload();
2823
+ appendJsonl(eventsPath, JSON.stringify({
2824
+ type: "subagent.step.started", ts: taskStartTime, runId: id, stepIndex: fi, agent: task.agent,
2825
+ }));
2826
+ const taskSessionDir = config.sessionDir
2827
+ ? path.join(config.sessionDir, `parallel-${taskIdx}`)
2828
+ : undefined;
2829
+ const { taskForRun, taskCwd } = prepareParallelTaskRun(task, cwd, worktreeSetup, taskIdx);
2830
+ flushPendingStepSteers(fi);
2831
+ const singleResult = await runSingleStep(taskForRun, {
2832
+ previousOutput, placeholder, cwd: taskCwd, sessionEnabled,
2833
+ outputs,
2834
+ sessionDir: taskSessionDir,
2835
+ artifactsDir, artifactConfig, id,
2836
+ flatIndex: fi, flatStepCount: Math.max(statusPayload.steps.length, 1),
2837
+ outputFile: path.join(asyncDir, `output-${fi}.log`),
2838
+ steerInboxDir: stepSteerInboxDir(asyncDir, fi),
2839
+ steerCapabilityPath: steerCapabilityPath(asyncDir, fi),
2840
+ steerAckDir: steerAcksDir(asyncDir, fi),
2841
+ piPackageRoot: config.piPackageRoot,
2842
+ piArgv1: config.piArgv1,
2843
+ childIntercomTarget: config.childIntercomTargets?.[fi],
2844
+ orchestratorIntercomTarget: config.controlIntercomTarget,
2845
+ nestedRoute: config.nestedRoute,
2846
+ registerInterrupt: (interrupt) => registerStepInterrupt(fi, interrupt),
2847
+ registerTimeout: (interrupt) => registerStepTimeout(fi, interrupt),
2848
+ registerStop: (stop) => registerStepStop(fi, stop),
2849
+ registerTurnBudgetAbort: (abort) => registerStepTurnBudgetAbort(fi, abort),
2850
+ timeoutSignal: timeoutAbortController.signal,
2851
+ stopSignal: stopAbortController.signal,
2852
+ timeoutMessage,
2853
+ stopMessage,
2854
+ turnBudget: config.turnBudget,
2855
+ onAttemptStart: (attempt) => updateStepModel(fi, attempt.model, attempt.thinking),
2856
+ onChildEvent: (event) => updateStepFromChildEvent(fi, event),
2857
+ onWriterProcess,
2858
+ skipAcceptance: () => timedOut || stopped,
2859
+ });
2860
+ if (task.sessionFile) {
2861
+ latestSessionFile = task.sessionFile;
2862
+ }
2863
+ const taskEndTime = Date.now();
2864
+ const taskDuration = taskEndTime - taskStartTime;
2865
+ const childInterrupted = singleResult.interrupted === true;
2866
+ const childStopped = singleResult.stopped === true;
2867
+ statusPayload.steps[fi].status = stopped || childStopped ? "stopped" : timedOut ? "failed" : childInterrupted ? "paused" : singleResult.exitCode === 0 ? "complete" : "failed";
2868
+ statusPayload.steps[fi].endedAt = taskEndTime;
2869
+ statusPayload.steps[fi].durationMs = taskDuration;
2870
+ statusPayload.steps[fi].exitCode = stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode;
2871
+ statusPayload.steps[fi].timedOut = timedOut || singleResult.timedOut ? true : undefined;
2872
+ statusPayload.steps[fi].stopped = stopped || childStopped ? true : undefined;
2873
+ statusPayload.steps[fi].turnBudget = singleResult.turnBudget;
2874
+ statusPayload.steps[fi].turnBudgetExceeded = singleResult.turnBudgetExceeded;
2875
+ statusPayload.steps[fi].wrapUpRequested = singleResult.wrapUpRequested;
2876
+ statusPayload.steps[fi].toolBudget = singleResult.toolBudget;
2877
+ statusPayload.steps[fi].toolBudgetBlocked = singleResult.toolBudgetBlocked;
2878
+ if (singleResult.toolBudget)
2879
+ statusPayload.toolBudget = singleResult.toolBudget;
2880
+ if (singleResult.toolBudgetBlocked)
2881
+ statusPayload.toolBudgetBlocked = true;
2882
+ if (singleResult.turnBudget)
2883
+ statusPayload.turnBudget = singleResult.turnBudget;
2884
+ if (singleResult.turnBudgetExceeded)
2885
+ statusPayload.turnBudgetExceeded = true;
2886
+ if (singleResult.wrapUpRequested)
2887
+ statusPayload.wrapUpRequested = true;
2888
+ statusPayload.steps[fi].model = singleResult.model;
2889
+ statusPayload.steps[fi].thinking = resolveEffectiveThinking(singleResult.model, statusPayload.steps[fi].thinking);
2890
+ statusPayload.steps[fi].attemptedModels = singleResult.attemptedModels;
2891
+ statusPayload.steps[fi].modelAttempts = singleResult.modelAttempts;
2892
+ statusPayload.steps[fi].totalCost = singleResult.totalCost;
2893
+ statusPayload.steps[fi].error = stopped || childStopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : singleResult.error;
2894
+ statusPayload.steps[fi].transcriptPath = singleResult.transcriptPath ?? statusPayload.steps[fi].transcriptPath;
2895
+ statusPayload.steps[fi].transcriptError = singleResult.transcriptError;
2896
+ statusPayload.steps[fi].structuredOutput = singleResult.structuredOutput;
2897
+ statusPayload.steps[fi].structuredOutputPath = singleResult.structuredOutputPath;
2898
+ statusPayload.steps[fi].structuredOutputSchemaPath = singleResult.structuredOutputSchemaPath;
2899
+ statusPayload.steps[fi].acceptance = singleResult.acceptance;
2900
+ statusPayload.steps[fi].watchdog = singleResult.watchdog;
2901
+ statusPayload.lastUpdate = taskEndTime;
2902
+ writeStatusPayload();
2903
+ appendJsonl(eventsPath, JSON.stringify({
2904
+ type: stopped || childStopped ? "subagent.step.stopped" : timedOut ? "subagent.step.failed" : childInterrupted ? "subagent.step.paused" : singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
2905
+ ts: taskEndTime, runId: id, stepIndex: fi, agent: task.agent,
2906
+ exitCode: stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode, durationMs: taskDuration,
2907
+ }));
2908
+ if (singleResult.completionGuardTriggered) {
2909
+ const event = buildControlEvent({
2910
+ from: statusPayload.steps[fi].activityState,
2911
+ to: "needs_attention",
2912
+ runId: id,
2913
+ agent: task.agent,
2914
+ index: fi,
2915
+ ts: taskEndTime,
2916
+ message: `${task.agent} completed without making edits for an implementation task`,
2917
+ reason: "completion_guard",
2918
+ });
2919
+ appendControlEvent(event);
2920
+ }
2921
+ if (singleResult.exitCode !== 0 && failFast)
2922
+ aborted = true;
2923
+ return stopped || childStopped ? { ...singleResult, output: stopMessage, error: stopMessage, exitCode: 1, interrupted: false, timedOut: false, stopped: true, skipped: false } : timedOut ? { ...singleResult, output: timeoutMessage ?? "Subagent timed out.", error: timeoutMessage ?? "Subagent timed out.", exitCode: 1, interrupted: false, timedOut: true, skipped: false } : { ...singleResult, skipped: false };
2924
+ }, globalSemaphore);
2925
+ flatIndex += group.parallel.length;
2926
+ for (let t = 0; t < group.parallel.length; t++) {
2927
+ const fi = groupStartFlatIndex + t;
2928
+ const sessionTokens = config.sessionDir
2929
+ ? parseSessionTokens(path.join(config.sessionDir, `parallel-${t}`))
2930
+ : null;
2931
+ const taskTokens = sessionTokens ?? tokenUsageFromAttempts(parallelResults[t]?.modelAttempts);
2932
+ if (!taskTokens)
2933
+ continue;
2934
+ statusPayload.steps[fi].tokens = taskTokens;
2935
+ previousCumulativeTokens = {
2936
+ input: previousCumulativeTokens.input + taskTokens.input,
2937
+ output: previousCumulativeTokens.output + taskTokens.output,
2938
+ total: previousCumulativeTokens.total + taskTokens.total,
2939
+ };
2940
+ }
2941
+ statusPayload.totalTokens = { ...previousCumulativeTokens };
2942
+ statusPayload.lastUpdate = Date.now();
2943
+ writeStatusPayload();
2944
+ for (const pr of parallelResults) {
2945
+ results.push({
2946
+ agent: pr.agent,
2947
+ output: pr.output,
2948
+ error: pr.error,
2949
+ protocolError: pr.protocolError,
2950
+ success: pr.stopped !== true && pr.interrupted !== true && pr.exitCode === 0,
2951
+ exitCode: pr.interrupted === true ? 0 : pr.exitCode,
2952
+ skipped: pr.skipped,
2953
+ interrupted: pr.interrupted,
2954
+ timedOut: pr.timedOut,
2955
+ stopped: pr.stopped,
2956
+ turnBudget: pr.turnBudget,
2957
+ turnBudgetExceeded: pr.turnBudgetExceeded,
2958
+ wrapUpRequested: pr.wrapUpRequested,
2959
+ toolBudget: pr.toolBudget,
2960
+ toolBudgetBlocked: pr.toolBudgetBlocked,
2961
+ sessionFile: pr.sessionFile,
2962
+ intercomTarget: pr.intercomTarget,
2963
+ model: pr.model,
2964
+ attemptedModels: pr.attemptedModels,
2965
+ modelAttempts: pr.modelAttempts,
2966
+ totalCost: pr.totalCost,
2967
+ artifactPaths: pr.artifactPaths,
2968
+ transcriptPath: pr.transcriptPath,
2969
+ transcriptError: pr.transcriptError,
2970
+ structuredOutput: pr.structuredOutput,
2971
+ structuredOutputPath: pr.structuredOutputPath,
2972
+ structuredOutputSchemaPath: pr.structuredOutputSchemaPath,
2973
+ acceptance: pr.acceptance,
2974
+ watchdog: pr.watchdog,
2975
+ });
2976
+ }
2977
+ for (let t = 0; t < group.parallel.length; t++) {
2978
+ const outputName = group.parallel[t]?.outputName;
2979
+ if (outputName)
2980
+ outputs[outputName] = outputEntryFromAsyncResult({
2981
+ agent: parallelResults[t].agent,
2982
+ output: parallelResults[t].output,
2983
+ structuredOutput: parallelResults[t].structuredOutput,
2984
+ }, stepIndex);
2985
+ }
2986
+ statusPayload.outputs = outputs;
2987
+ previousOutput = aggregateParallelOutputs(parallelResults.map((r) => ({
2988
+ agent: r.agent,
2989
+ output: r.output,
2990
+ exitCode: r.exitCode,
2991
+ error: r.error,
2992
+ model: r.model,
2993
+ attemptedModels: r.attemptedModels,
2994
+ })));
2995
+ previousOutput = appendParallelWorktreeSummary(previousOutput, worktreeSetup, asyncDir, stepIndex, group);
2996
+ appendJsonl(eventsPath, JSON.stringify({
2997
+ type: "subagent.parallel.completed",
2998
+ ts: Date.now(),
2999
+ runId: id,
3000
+ stepIndex,
3001
+ success: parallelResults.every((r) => r.exitCode === 0 || r.exitCode === -1),
3002
+ }));
3003
+ if (parallelResults.some((r) => r.exitCode !== 0 && r.exitCode !== -1)) {
3004
+ break;
3005
+ }
3006
+ }
3007
+ finally {
3008
+ if (worktreeSetup)
3009
+ cleanupWorktrees(worktreeSetup);
3010
+ }
3011
+ }
3012
+ else {
3013
+ const seqStep = step;
3014
+ const stepStartTime = Date.now();
3015
+ statusPayload.currentStep = flatIndex;
3016
+ statusPayload.steps[flatIndex].status = "running";
3017
+ statusPayload.steps[flatIndex].activityState = undefined;
3018
+ statusPayload.activityState = undefined;
3019
+ resetStepLiveDetail(statusPayload.steps[flatIndex]);
3020
+ statusPayload.steps[flatIndex].skills = seqStep.skills;
3021
+ statusPayload.steps[flatIndex].startedAt = stepStartTime;
3022
+ statusPayload.steps[flatIndex].lastActivityAt = stepStartTime;
3023
+ statusPayload.lastActivityAt = stepStartTime;
3024
+ statusPayload.lastUpdate = stepStartTime;
3025
+ statusPayload.outputFile = path.join(asyncDir, `output-${flatIndex}.log`);
3026
+ writeStatusPayload();
3027
+ appendJsonl(eventsPath, JSON.stringify({
3028
+ type: "subagent.step.started",
3029
+ ts: stepStartTime,
3030
+ runId: id,
3031
+ stepIndex: flatIndex,
3032
+ agent: seqStep.agent,
3033
+ }));
3034
+ flushPendingStepSteers(flatIndex);
3035
+ const singleResult = await runSingleStep(seqStep, {
3036
+ previousOutput, placeholder, cwd, sessionEnabled,
3037
+ outputs: statusPayload.mode === "single" ? undefined : outputs,
3038
+ sessionDir: config.sessionDir,
3039
+ artifactsDir, artifactConfig, id,
3040
+ flatIndex, flatStepCount: Math.max(statusPayload.steps.length, 1),
3041
+ outputFile: path.join(asyncDir, `output-${flatIndex}.log`),
3042
+ steerInboxDir: stepSteerInboxDir(asyncDir, flatIndex),
3043
+ steerCapabilityPath: steerCapabilityPath(asyncDir, flatIndex),
3044
+ steerAckDir: steerAcksDir(asyncDir, flatIndex),
3045
+ piPackageRoot: config.piPackageRoot,
3046
+ piArgv1: config.piArgv1,
3047
+ childIntercomTarget: config.childIntercomTargets?.[flatIndex],
3048
+ orchestratorIntercomTarget: config.controlIntercomTarget,
3049
+ nestedRoute: config.nestedRoute,
3050
+ registerInterrupt: (interrupt) => registerStepInterrupt(flatIndex, interrupt),
3051
+ registerTimeout: (interrupt) => registerStepTimeout(flatIndex, interrupt),
3052
+ registerStop: (stop) => registerStepStop(flatIndex, stop),
3053
+ registerTurnBudgetAbort: (abort) => registerStepTurnBudgetAbort(flatIndex, abort),
3054
+ timeoutSignal: timeoutAbortController.signal,
3055
+ stopSignal: stopAbortController.signal,
3056
+ timeoutMessage,
3057
+ stopMessage,
3058
+ turnBudget: config.turnBudget,
3059
+ onAttemptStart: (attempt) => updateStepModel(flatIndex, attempt.model, attempt.thinking),
3060
+ onChildEvent: (event) => updateStepFromChildEvent(flatIndex, event),
3061
+ onWriterProcess,
3062
+ skipAcceptance: () => timedOut || stopped,
3063
+ });
3064
+ if (seqStep.sessionFile) {
3065
+ latestSessionFile = seqStep.sessionFile;
3066
+ }
3067
+ previousOutput = singleResult.output;
3068
+ const childStopped = singleResult.stopped === true;
3069
+ results.push({
3070
+ agent: singleResult.agent,
3071
+ output: stopped || childStopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : singleResult.output,
3072
+ error: stopped || childStopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : singleResult.error,
3073
+ protocolError: singleResult.protocolError,
3074
+ success: !stopped && !childStopped && !timedOut && singleResult.interrupted !== true && singleResult.exitCode === 0,
3075
+ exitCode: stopped || childStopped ? 1 : timedOut ? 1 : singleResult.interrupted === true ? 0 : singleResult.exitCode,
3076
+ sessionFile: singleResult.sessionFile,
3077
+ intercomTarget: singleResult.intercomTarget,
3078
+ model: singleResult.model,
3079
+ attemptedModels: singleResult.attemptedModels,
3080
+ modelAttempts: singleResult.modelAttempts,
3081
+ totalCost: singleResult.totalCost,
3082
+ artifactPaths: singleResult.artifactPaths,
3083
+ transcriptPath: singleResult.transcriptPath,
3084
+ transcriptError: singleResult.transcriptError,
3085
+ structuredOutput: singleResult.structuredOutput,
3086
+ structuredOutputPath: singleResult.structuredOutputPath,
3087
+ structuredOutputSchemaPath: singleResult.structuredOutputSchemaPath,
3088
+ acceptance: singleResult.acceptance,
3089
+ watchdog: singleResult.watchdog,
3090
+ interrupted: singleResult.interrupted,
3091
+ timedOut: timedOut || singleResult.timedOut ? true : undefined,
3092
+ stopped: stopped || childStopped ? true : undefined,
3093
+ turnBudget: singleResult.turnBudget,
3094
+ turnBudgetExceeded: singleResult.turnBudgetExceeded,
3095
+ wrapUpRequested: singleResult.wrapUpRequested,
3096
+ toolBudget: singleResult.toolBudget,
3097
+ toolBudgetBlocked: singleResult.toolBudgetBlocked,
3098
+ });
3099
+ if (seqStep.outputName) {
3100
+ outputs[seqStep.outputName] = outputEntryFromAsyncResult({
3101
+ agent: singleResult.agent,
3102
+ output: singleResult.output,
3103
+ structuredOutput: singleResult.structuredOutput,
3104
+ }, stepIndex);
3105
+ }
3106
+ statusPayload.outputs = outputs;
3107
+ const cumulativeTokens = config.sessionDir ? parseSessionTokens(config.sessionDir) : null;
3108
+ let stepTokens = cumulativeTokens
3109
+ ? {
3110
+ input: cumulativeTokens.input - previousCumulativeTokens.input,
3111
+ output: cumulativeTokens.output - previousCumulativeTokens.output,
3112
+ total: cumulativeTokens.total - previousCumulativeTokens.total,
3113
+ }
3114
+ : null;
3115
+ if (cumulativeTokens) {
3116
+ previousCumulativeTokens = cumulativeTokens;
3117
+ }
3118
+ else {
3119
+ stepTokens = tokenUsageFromAttempts(singleResult.modelAttempts);
3120
+ if (stepTokens) {
3121
+ previousCumulativeTokens = {
3122
+ input: previousCumulativeTokens.input + stepTokens.input,
3123
+ output: previousCumulativeTokens.output + stepTokens.output,
3124
+ total: previousCumulativeTokens.total + stepTokens.total,
3125
+ };
3126
+ }
3127
+ }
3128
+ const stepEndTime = Date.now();
3129
+ const childInterrupted = singleResult.interrupted === true;
3130
+ statusPayload.steps[flatIndex].status = stopped || childStopped ? "stopped" : timedOut ? "failed" : childInterrupted ? "paused" : singleResult.exitCode === 0 ? "complete" : "failed";
3131
+ statusPayload.steps[flatIndex].endedAt = stepEndTime;
3132
+ statusPayload.steps[flatIndex].durationMs = stepEndTime - stepStartTime;
3133
+ statusPayload.steps[flatIndex].exitCode = stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode;
3134
+ statusPayload.steps[flatIndex].timedOut = timedOut || singleResult.timedOut ? true : undefined;
3135
+ statusPayload.steps[flatIndex].stopped = stopped || childStopped ? true : undefined;
3136
+ statusPayload.steps[flatIndex].turnBudget = singleResult.turnBudget;
3137
+ statusPayload.steps[flatIndex].turnBudgetExceeded = singleResult.turnBudgetExceeded;
3138
+ statusPayload.steps[flatIndex].wrapUpRequested = singleResult.wrapUpRequested;
3139
+ statusPayload.steps[flatIndex].toolBudget = singleResult.toolBudget;
3140
+ statusPayload.steps[flatIndex].toolBudgetBlocked = singleResult.toolBudgetBlocked;
3141
+ if (singleResult.toolBudget)
3142
+ statusPayload.toolBudget = singleResult.toolBudget;
3143
+ if (singleResult.toolBudgetBlocked)
3144
+ statusPayload.toolBudgetBlocked = true;
3145
+ if (singleResult.turnBudget)
3146
+ statusPayload.turnBudget = singleResult.turnBudget;
3147
+ if (singleResult.turnBudgetExceeded)
3148
+ statusPayload.turnBudgetExceeded = true;
3149
+ if (singleResult.wrapUpRequested)
3150
+ statusPayload.wrapUpRequested = true;
3151
+ statusPayload.steps[flatIndex].model = singleResult.model;
3152
+ statusPayload.steps[flatIndex].thinking = resolveEffectiveThinking(singleResult.model, statusPayload.steps[flatIndex].thinking);
3153
+ statusPayload.steps[flatIndex].attemptedModels = singleResult.attemptedModels;
3154
+ statusPayload.steps[flatIndex].modelAttempts = singleResult.modelAttempts;
3155
+ statusPayload.steps[flatIndex].totalCost = singleResult.totalCost;
3156
+ statusPayload.steps[flatIndex].error = stopped || childStopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : singleResult.error;
3157
+ statusPayload.steps[flatIndex].transcriptPath = singleResult.transcriptPath ?? statusPayload.steps[flatIndex].transcriptPath;
3158
+ statusPayload.steps[flatIndex].transcriptError = singleResult.transcriptError;
3159
+ statusPayload.steps[flatIndex].structuredOutput = singleResult.structuredOutput;
3160
+ statusPayload.steps[flatIndex].structuredOutputPath = singleResult.structuredOutputPath;
3161
+ statusPayload.steps[flatIndex].structuredOutputSchemaPath = singleResult.structuredOutputSchemaPath;
3162
+ statusPayload.steps[flatIndex].acceptance = singleResult.acceptance;
3163
+ statusPayload.steps[flatIndex].watchdog = singleResult.watchdog;
3164
+ if (stepTokens) {
3165
+ statusPayload.steps[flatIndex].tokens = stepTokens;
3166
+ statusPayload.totalTokens = { ...previousCumulativeTokens };
3167
+ }
3168
+ statusPayload.lastUpdate = stepEndTime;
3169
+ writeStatusPayload();
3170
+ appendJsonl(eventsPath, JSON.stringify({
3171
+ type: stopped || childStopped ? "subagent.step.stopped" : timedOut ? "subagent.step.failed" : childInterrupted ? "subagent.step.paused" : singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
3172
+ ts: stepEndTime,
3173
+ runId: id,
3174
+ stepIndex: flatIndex,
3175
+ agent: seqStep.agent,
3176
+ exitCode: stopped || childStopped ? 1 : timedOut ? 1 : childInterrupted ? 0 : singleResult.exitCode,
3177
+ durationMs: stepEndTime - stepStartTime,
3178
+ tokens: stepTokens,
3179
+ }));
3180
+ if (singleResult.completionGuardTriggered) {
3181
+ const event = buildControlEvent({
3182
+ from: statusPayload.steps[flatIndex].activityState,
3183
+ to: "needs_attention",
3184
+ runId: id,
3185
+ agent: seqStep.agent,
3186
+ index: flatIndex,
3187
+ ts: stepEndTime,
3188
+ message: `${seqStep.agent} completed without making edits for an implementation task`,
3189
+ reason: "completion_guard",
3190
+ });
3191
+ appendControlEvent(event);
3192
+ }
3193
+ flatIndex++;
3194
+ if (singleResult.exitCode !== 0) {
3195
+ break;
3196
+ }
3197
+ }
3198
+ }
3199
+ let summary = results.map((r) => `${r.agent}:\n${r.output}`).join("\n\n");
3200
+ let truncated = false;
3201
+ if (maxOutput) {
3202
+ const config = { ...DEFAULT_MAX_OUTPUT, ...maxOutput };
3203
+ const lastArtifactPath = results[results.length - 1]?.artifactPaths?.outputPath;
3204
+ const truncResult = truncateOutput(summary, config, lastArtifactPath);
3205
+ if (truncResult.truncated) {
3206
+ summary = truncResult.text;
3207
+ truncated = true;
3208
+ }
3209
+ }
3210
+ const resultMode = config.resultMode ?? statusPayload.mode;
3211
+ const totalCost = results.reduce((sum, result) => ({
3212
+ inputTokens: sum.inputTokens + (result.totalCost?.inputTokens ?? 0),
3213
+ outputTokens: sum.outputTokens + (result.totalCost?.outputTokens ?? 0),
3214
+ costUsd: sum.costUsd + (result.totalCost?.costUsd ?? 0),
3215
+ }), { inputTokens: 0, outputTokens: 0, costUsd: 0 });
3216
+ const finalTotalCost = totalCost.inputTokens > 0 || totalCost.outputTokens > 0 || totalCost.costUsd > 0 ? totalCost : undefined;
3217
+ const finalFlatAgents = statusPayload.steps.map((step) => step.agent);
3218
+ const agentName = finalFlatAgents.length === 1
3219
+ ? finalFlatAgents[0]
3220
+ : resultMode === "parallel"
3221
+ ? `parallel:${finalFlatAgents.join("+")}`
3222
+ : `chain:${finalFlatAgents.join("->")}`;
3223
+ let sessionFile;
3224
+ let shareUrl;
3225
+ let gistUrl;
3226
+ let shareError;
3227
+ if (shareEnabled) {
3228
+ sessionFile = config.sessionDir
3229
+ ? (findLatestSessionFile(config.sessionDir) ?? undefined)
3230
+ : undefined;
3231
+ if (!sessionFile && latestSessionFile) {
3232
+ sessionFile = latestSessionFile;
3233
+ }
3234
+ if (sessionFile) {
3235
+ try {
3236
+ const exportDir = config.sessionDir ?? path.dirname(sessionFile);
3237
+ const htmlPath = await exportSessionHtml(sessionFile, exportDir, config.piPackageRoot);
3238
+ const share = createShareLink(htmlPath);
3239
+ if ("error" in share)
3240
+ shareError = share.error;
3241
+ else {
3242
+ shareUrl = share.shareUrl;
3243
+ gistUrl = share.gistUrl;
3244
+ }
3245
+ }
3246
+ catch (err) {
3247
+ shareError = String(err);
3248
+ }
3249
+ }
3250
+ else {
3251
+ shareError = "Session file not found.";
3252
+ }
3253
+ }
3254
+ if (activityTimer) {
3255
+ clearInterval(activityTimer);
3256
+ activityTimer = undefined;
3257
+ }
3258
+ if (timeoutTimer) {
3259
+ clearTimeout(timeoutTimer);
3260
+ timeoutTimer = undefined;
3261
+ }
3262
+ statusPayload.state = stopped ? "stopped" : timedOut || turnBudgetExceeded ? "failed" : interrupted ? "paused" : results.every((r) => r.success) ? "complete" : "failed";
3263
+ closeSteerInbox(asyncDir, statusPayload.state);
3264
+ disposeControlInbox();
3265
+ for (const request of consumeSteerRequests(asyncDir))
3266
+ deliverSteerRequest(request);
3267
+ const effectiveSessionFile = sessionFile ?? latestSessionFile;
3268
+ const steeringLifecycle = steeringStatus(statusPayload);
3269
+ for (const request of steeringLifecycle.recent) {
3270
+ let changed = false;
3271
+ for (const target of request.targets) {
3272
+ if (target.state !== "scheduled" && target.state !== "routed")
3273
+ continue;
3274
+ changed = true;
3275
+ updateSteeringLifecycleTarget(request.id, target.index, "failed", Date.now(), { reason: "child terminated before steering delivery" });
3276
+ markSteeringAttention(target.index);
3277
+ emitSteeringEvent("subagent.steer.failed", { type: "steer", id: request.id, ts: request.requestedAt, message: "child terminated before steering delivery" }, target.index, { reason: "child terminated before steering delivery" });
3278
+ }
3279
+ if (changed)
3280
+ emitTerminalSteeringNotice(request.id, `Steering failed for run ${id}: child terminated before delivery.`);
3281
+ }
3282
+ const runEndedAt = Date.now();
3283
+ statusPayload.activityState = undefined;
3284
+ if (stopped) {
3285
+ statusPayload.stopped = true;
3286
+ statusPayload.error = stopMessage;
3287
+ }
3288
+ if (timedOut) {
3289
+ statusPayload.timedOut = true;
3290
+ statusPayload.error = timeoutMessage ?? "Subagent timed out.";
3291
+ }
3292
+ if (turnBudgetExceeded && !statusPayload.error) {
3293
+ const budget = statusPayload.turnBudget;
3294
+ statusPayload.error = budget ? turnBudgetExceededMessage(budget, budget.turnCount) : "Subagent exceeded turn budget.";
3295
+ }
3296
+ statusPayload.endedAt = runEndedAt;
3297
+ statusPayload.lastUpdate = runEndedAt;
3298
+ statusPayload.sessionFile = effectiveSessionFile;
3299
+ statusPayload.totalCost = finalTotalCost;
3300
+ statusPayload.shareUrl = shareUrl;
3301
+ statusPayload.gistUrl = gistUrl;
3302
+ statusPayload.shareError = shareError;
3303
+ if (statusPayload.state === "failed" && !statusPayload.error) {
3304
+ const failedStep = statusPayload.steps.find((s) => s.status === "failed");
3305
+ if (failedStep?.agent) {
3306
+ statusPayload.error = `Step failed: ${failedStep.agent}`;
3307
+ }
3308
+ }
3309
+ writeStatusPayload();
3310
+ appendJsonl(eventsPath, JSON.stringify({
3311
+ type: "subagent.run.completed",
3312
+ lifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,
3313
+ ts: runEndedAt,
3314
+ runId: id,
3315
+ status: statusPayload.state,
3316
+ durationMs: runEndedAt - overallStartTime,
3317
+ totalTokens: statusPayload.totalTokens,
3318
+ totalCost: finalTotalCost,
3319
+ }));
3320
+ writeRunLog(logPath, {
3321
+ id,
3322
+ mode: statusPayload.mode,
3323
+ cwd,
3324
+ startedAt: overallStartTime,
3325
+ endedAt: runEndedAt,
3326
+ steps: statusPayload.steps.map((step) => ({
3327
+ agent: step.agent,
3328
+ status: step.status,
3329
+ durationMs: step.durationMs,
3330
+ })),
3331
+ summary,
3332
+ truncated,
3333
+ artifactsDir,
3334
+ sessionFile: effectiveSessionFile,
3335
+ shareUrl,
3336
+ shareError,
3337
+ });
3338
+ try {
3339
+ writeAtomicJson(resultPath, {
3340
+ lifecycleArtifactVersion: SUBAGENT_LIFECYCLE_ARTIFACT_VERSION,
3341
+ id,
3342
+ agent: agentName,
3343
+ mode: resultMode,
3344
+ success: !stopped && !timedOut && !turnBudgetExceeded && !interrupted && results.every((r) => r.success),
3345
+ state: stopped ? "stopped" : timedOut || turnBudgetExceeded ? "failed" : interrupted ? "paused" : results.every((r) => r.success) ? "complete" : "failed",
3346
+ summary: stopped ? stopMessage : timedOut ? (timeoutMessage ?? "Subagent timed out.") : turnBudgetExceeded ? (statusPayload.error ?? "Subagent exceeded turn budget.") : interrupted ? "Paused after interrupt. Waiting for explicit next action." : summary,
3347
+ ...(config.timeoutMs !== undefined ? { timeoutMs: config.timeoutMs } : {}),
3348
+ ...(config.deadlineAt !== undefined ? { deadlineAt: config.deadlineAt } : {}),
3349
+ ...(statusPayload.turnBudget ? { turnBudget: statusPayload.turnBudget } : {}),
3350
+ ...(statusPayload.turnBudgetExceeded ? { turnBudgetExceeded: true } : {}),
3351
+ ...(statusPayload.wrapUpRequested ? { wrapUpRequested: true } : {}),
3352
+ ...(statusPayload.toolBudget ? { toolBudget: statusPayload.toolBudget } : {}),
3353
+ ...(statusPayload.toolBudgetBlocked ? { toolBudgetBlocked: true } : {}),
3354
+ ...(stopped ? { stopped: true, error: stopMessage } : timedOut ? { timedOut: true, error: timeoutMessage ?? "Subagent timed out." } : turnBudgetExceeded ? { error: statusPayload.error ?? "Subagent exceeded turn budget." } : {}),
3355
+ results: results.map((r) => ({
3356
+ childId: r.childId,
3357
+ description: r.description,
3358
+ permissions: r.permissions,
3359
+ agent: r.agent,
3360
+ output: r.output,
3361
+ error: r.error,
3362
+ protocolError: r.protocolError,
3363
+ success: r.success,
3364
+ skipped: r.skipped || undefined,
3365
+ interrupted: r.interrupted || undefined,
3366
+ timedOut: r.timedOut || undefined,
3367
+ stopped: r.stopped || undefined,
3368
+ turnBudget: r.turnBudget,
3369
+ turnBudgetExceeded: r.turnBudgetExceeded || undefined,
3370
+ wrapUpRequested: r.wrapUpRequested || undefined,
3371
+ toolBudget: r.toolBudget,
3372
+ toolBudgetBlocked: r.toolBudgetBlocked || undefined,
3373
+ sessionFile: r.sessionFile,
3374
+ intercomTarget: r.intercomTarget,
3375
+ model: r.model,
3376
+ attemptedModels: r.attemptedModels,
3377
+ modelAttempts: r.modelAttempts,
3378
+ totalCost: r.totalCost,
3379
+ artifactPaths: r.artifactPaths,
3380
+ truncated: r.truncated,
3381
+ transcriptPath: r.transcriptPath,
3382
+ transcriptError: r.transcriptError,
3383
+ structuredOutput: r.structuredOutput,
3384
+ structuredOutputPath: r.structuredOutputPath,
3385
+ structuredOutputSchemaPath: r.structuredOutputSchemaPath,
3386
+ acceptance: r.acceptance,
3387
+ watchdog: r.watchdog,
3388
+ })),
3389
+ outputs,
3390
+ workflowGraph: statusPayload.workflowGraph,
3391
+ exitCode: stopped || timedOut || turnBudgetExceeded ? 1 : interrupted || results.every((r) => r.success) ? 0 : 1,
3392
+ timestamp: runEndedAt,
3393
+ durationMs: runEndedAt - overallStartTime,
3394
+ totalTokens: statusPayload.totalTokens,
3395
+ totalCost: finalTotalCost,
3396
+ truncated,
3397
+ artifactsDir,
3398
+ cwd,
3399
+ asyncDir,
3400
+ sessionId: config.sessionId,
3401
+ sessionFile: effectiveSessionFile,
3402
+ intercomTarget: config.controlIntercomTarget,
3403
+ shareUrl,
3404
+ gistUrl,
3405
+ shareError,
3406
+ ...(taskIndex !== undefined && { taskIndex }),
3407
+ ...(totalTasks !== undefined && { totalTasks }),
3408
+ });
3409
+ }
3410
+ catch (err) {
3411
+ console.error(`Failed to write result file ${resultPath}:`, err);
3412
+ }
3413
+ }
3414
+ async function waitForStartupControl(controlPath, token, action, timeoutMs = 30_000) {
3415
+ const deadline = Date.now() + timeoutMs;
3416
+ while (Date.now() <= deadline) {
3417
+ if (fs.existsSync(controlPath)) {
3418
+ let payload;
3419
+ try {
3420
+ payload = JSON.parse(fs.readFileSync(controlPath, "utf-8"));
3421
+ }
3422
+ catch (error) {
3423
+ throw new Error(`Failed to read runner startup control '${controlPath}': ${error instanceof Error ? error.message : String(error)}`);
3424
+ }
3425
+ if (payload.token !== token)
3426
+ throw new Error("Runner startup control token does not match the acquired session lease.");
3427
+ if (payload.action === action)
3428
+ return;
3429
+ if (payload.action !== "ack" && payload.action !== "proceed")
3430
+ throw new Error("Runner startup control action is invalid.");
3431
+ }
3432
+ await new Promise((resolve) => setTimeout(resolve, 20));
3433
+ }
3434
+ throw new Error(`Timed out after ${timeoutMs}ms waiting for runner startup control '${action}'.`);
3435
+ }
3436
+ async function runConfiguredSubagent(config) {
3437
+ let lease;
3438
+ let startupCommitted = config.revivalLease === undefined;
3439
+ const startupPath = path.join(config.asyncDir, "runner-startup.json");
3440
+ const startupAckPath = path.join(config.asyncDir, "runner-startup-ack.json");
3441
+ const startupProceedPath = path.join(config.asyncDir, "runner-startup-proceed.json");
3442
+ const releaseOnExit = () => {
3443
+ try {
3444
+ lease?.release();
3445
+ }
3446
+ catch {
3447
+ // Exit cleanup is best effort; a dead-owner lease is reclaimed on the next revival.
3448
+ }
3449
+ };
3450
+ process.once("exit", releaseOnExit);
3451
+ try {
3452
+ if (config.revivalLease) {
3453
+ lease = acquireSessionLease(config.revivalLease);
3454
+ writeAtomicJson(startupPath, { state: "ready", token: lease.owner.token, pid: process.pid, owner: lease.owner });
3455
+ await waitForStartupControl(startupAckPath, lease.owner.token, "ack");
3456
+ writeAtomicJson(startupPath, { state: "acknowledged", token: lease.owner.token, pid: process.pid });
3457
+ await waitForStartupControl(startupProceedPath, lease.owner.token, "proceed");
3458
+ startupCommitted = true;
3459
+ for (const controlPath of [startupAckPath, startupProceedPath]) {
3460
+ try {
3461
+ fs.rmSync(controlPath, { force: true });
3462
+ }
3463
+ catch {
3464
+ // Startup control cleanup is best effort after the parent commits the run.
3465
+ }
3466
+ }
3467
+ }
3468
+ await runSubagent(config, lease ? (writer) => lease.updateWriter(writer) : undefined);
3469
+ }
3470
+ catch (error) {
3471
+ if (config.revivalLease && !startupCommitted) {
3472
+ try {
3473
+ writeAtomicJson(startupPath, { state: "error", pid: process.pid, error: error instanceof Error ? error.message : String(error) });
3474
+ }
3475
+ catch {
3476
+ // The parent will time out and terminate this runner if the handshake cannot be written.
3477
+ }
3478
+ }
3479
+ throw error;
3480
+ }
3481
+ finally {
3482
+ process.off("exit", releaseOnExit);
3483
+ if (lease) {
3484
+ try {
3485
+ lease.release();
3486
+ }
3487
+ catch (error) {
3488
+ console.error("Failed to release session revival lease:", error);
3489
+ }
3490
+ }
3491
+ }
3492
+ }
3493
+ function startConfiguredSubagent(config) {
3494
+ runConfiguredSubagent(config).catch((runErr) => {
3495
+ console.error("Subagent runner error:", runErr);
3496
+ process.exit(1);
3497
+ });
3498
+ }
3499
+ const configArg = process.argv[2];
3500
+ if (configArg) {
3501
+ try {
3502
+ const configJson = fs.readFileSync(configArg, "utf-8");
3503
+ const config = JSON.parse(configJson);
3504
+ try {
3505
+ fs.unlinkSync(configArg);
3506
+ }
3507
+ catch {
3508
+ // Temp config cleanup is best effort.
3509
+ }
3510
+ startConfiguredSubagent(config);
3511
+ }
3512
+ catch (err) {
3513
+ console.error("Subagent runner error:", err);
3514
+ process.exit(1);
3515
+ }
3516
+ }
3517
+ else {
3518
+ let input = "";
3519
+ process.stdin.setEncoding("utf-8");
3520
+ process.stdin.on("data", (chunk) => {
3521
+ input += chunk;
3522
+ });
3523
+ process.stdin.on("end", () => {
3524
+ try {
3525
+ const config = JSON.parse(input);
3526
+ startConfiguredSubagent(config);
3527
+ }
3528
+ catch (err) {
3529
+ console.error("Subagent runner error:", err);
3530
+ process.exit(1);
3531
+ }
3532
+ });
3533
+ }
3534
+ //# sourceMappingURL=subagent-runner.js.map