@ashx-j/lunr 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (869) hide show
  1. package/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
  2. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
  3. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
  5. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js +3 -3
  7. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
  9. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  10. package/dist/builtin-extensions/ashxj-tui.js +2 -2
  11. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  12. package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
  13. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
  17. package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
  18. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
  19. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  21. package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
  22. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
  24. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
  25. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
  26. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
  28. package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
  29. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  30. package/dist/builtin-extensions/lunr-todos.js +1 -1
  31. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
  34. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
  35. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  36. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  37. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
  38. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  39. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  40. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  41. package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
  42. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  44. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  45. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
  46. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
  48. package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
  49. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
  50. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
  52. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
  53. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
  54. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
  56. package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
  57. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
  61. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
  63. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  64. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
  65. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
  67. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
  68. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
  71. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
  72. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
  73. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  75. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
  76. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
  77. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
  78. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
  79. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
  81. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
  82. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
  83. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
  85. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
  86. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
  87. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
  89. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
  90. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
  91. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
  92. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
  93. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
  94. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
  95. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
  97. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
  98. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
  99. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
  101. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
  102. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
  103. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
  105. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
  106. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
  107. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  108. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  109. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
  110. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  112. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
  113. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
  115. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
  116. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  118. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
  119. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  121. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
  122. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
  123. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
  124. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
  125. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
  126. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
  127. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
  129. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
  130. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
  131. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  132. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  133. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
  134. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
  136. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
  137. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
  138. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  139. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  140. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
  141. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
  143. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
  144. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
  145. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
  146. package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
  147. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
  148. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
  149. package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
  150. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  151. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  152. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  153. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
  154. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
  156. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
  157. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
  158. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  159. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
  160. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
  162. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
  163. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
  164. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
  165. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
  166. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
  167. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  168. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  169. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
  172. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
  173. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
  175. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
  176. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
  178. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
  179. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
  181. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
  182. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  183. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
  184. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  185. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
  186. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
  188. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
  189. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
  190. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
  192. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
  193. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
  194. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  195. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +1 -1
  196. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  197. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
  198. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
  199. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
  200. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
  201. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  202. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  203. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  204. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  205. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
  206. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  207. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
  208. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  209. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  210. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  211. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
  212. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  214. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  215. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  216. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
  217. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  218. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
  219. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
  220. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
  221. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
  222. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
  223. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
  224. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
  225. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  226. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  227. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
  228. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
  229. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
  230. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +1 -1
  231. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  232. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  233. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +1 -1
  234. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  235. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  236. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
  237. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  238. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  239. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +1 -1
  240. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  241. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  242. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  243. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  244. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  245. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +1 -1
  246. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  247. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  248. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
  249. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  250. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  251. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  252. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  253. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
  254. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  255. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  256. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  257. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  258. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  259. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
  260. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
  261. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
  262. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
  263. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  264. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1 -1
  265. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  266. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +2 -2
  267. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  268. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  269. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  270. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  271. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
  272. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  273. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  274. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
  275. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
  276. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
  277. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
  278. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
  279. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
  280. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
  281. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
  282. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
  283. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
  284. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
  285. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  286. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  287. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
  288. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
  289. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
  290. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  291. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  292. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  293. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -3
  294. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  295. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  296. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  297. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  298. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
  299. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  300. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  301. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  302. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  303. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
  304. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
  305. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js.map +1 -1
  306. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  307. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  308. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +2 -2
  309. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  310. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
  311. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
  312. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
  313. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
  314. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  315. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
  316. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  317. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
  318. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
  319. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
  320. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
  321. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
  322. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  323. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
  324. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  325. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
  326. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
  327. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
  328. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
  329. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
  330. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
  331. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
  332. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  333. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
  334. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
  335. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
  336. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
  337. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
  338. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
  339. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
  340. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  341. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  342. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  343. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
  344. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
  345. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
  346. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
  347. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
  348. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  349. package/dist/builtin-extensions/pi-tps.d.ts +1 -1
  350. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  351. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  352. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  353. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  354. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  355. package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
  356. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  357. package/dist/builtin-extensions/pi-web-access/index.js +2 -2
  358. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  359. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
  360. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
  361. package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
  362. package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
  363. package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
  364. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  365. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  366. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
  367. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
  368. package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
  369. package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
  370. package/dist/bun/cli.d.ts.map +1 -1
  371. package/dist/bun/cli.js +1 -1
  372. package/dist/bun/cli.js.map +1 -1
  373. package/dist/bun/register-bedrock.d.ts.map +1 -1
  374. package/dist/bun/register-bedrock.js +2 -2
  375. package/dist/bun/register-bedrock.js.map +1 -1
  376. package/dist/catalog/models.json +1 -1
  377. package/dist/catalog/providers/opencode-go.json +1 -1
  378. package/dist/catalog/providers/openrouter.json +1 -1
  379. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
  380. package/dist/catalog/providers/qwen-token-plan.json +1 -1
  381. package/dist/catalog/publication.json +3 -3
  382. package/dist/cli/args.d.ts +1 -1
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js.map +1 -1
  385. package/dist/cli/config-selector.d.ts.map +1 -1
  386. package/dist/cli/config-selector.js +1 -1
  387. package/dist/cli/config-selector.js.map +1 -1
  388. package/dist/cli/file-processor.d.ts +1 -1
  389. package/dist/cli/file-processor.d.ts.map +1 -1
  390. package/dist/cli/file-processor.js.map +1 -1
  391. package/dist/cli/initial-message.d.ts +1 -1
  392. package/dist/cli/initial-message.d.ts.map +1 -1
  393. package/dist/cli/initial-message.js.map +1 -1
  394. package/dist/cli/list-models.d.ts.map +1 -1
  395. package/dist/cli/list-models.js +1 -1
  396. package/dist/cli/list-models.js.map +1 -1
  397. package/dist/cli/session-picker.d.ts.map +1 -1
  398. package/dist/cli/session-picker.js +1 -1
  399. package/dist/cli/session-picker.js.map +1 -1
  400. package/dist/cli/startup-ui.d.ts +1 -1
  401. package/dist/cli/startup-ui.d.ts.map +1 -1
  402. package/dist/cli/startup-ui.js +2 -2
  403. package/dist/cli/startup-ui.js.map +1 -1
  404. package/dist/config.d.ts.map +1 -1
  405. package/dist/config.js +1 -1
  406. package/dist/config.js.map +1 -1
  407. package/dist/core/agent-session-services.d.ts +2 -2
  408. package/dist/core/agent-session-services.d.ts.map +1 -1
  409. package/dist/core/agent-session-services.js.map +1 -1
  410. package/dist/core/agent-session.d.ts +2 -2
  411. package/dist/core/agent-session.d.ts.map +1 -1
  412. package/dist/core/agent-session.js +1 -1
  413. package/dist/core/agent-session.js.map +1 -1
  414. package/dist/core/auth-storage.d.ts +1 -1
  415. package/dist/core/auth-storage.d.ts.map +1 -1
  416. package/dist/core/auth-storage.js.map +1 -1
  417. package/dist/core/cache-stats.d.ts +1 -1
  418. package/dist/core/cache-stats.d.ts.map +1 -1
  419. package/dist/core/cache-stats.js.map +1 -1
  420. package/dist/core/catalog-merge.d.ts +1 -1
  421. package/dist/core/catalog-merge.d.ts.map +1 -1
  422. package/dist/core/catalog-merge.js +7 -1
  423. package/dist/core/catalog-merge.js.map +1 -1
  424. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  425. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  426. package/dist/core/compaction/branch-summarization.js +1 -1
  427. package/dist/core/compaction/branch-summarization.js.map +1 -1
  428. package/dist/core/compaction/compaction.d.ts +2 -2
  429. package/dist/core/compaction/compaction.d.ts.map +1 -1
  430. package/dist/core/compaction/compaction.js +1 -1
  431. package/dist/core/compaction/compaction.js.map +1 -1
  432. package/dist/core/compaction/utils.d.ts +2 -2
  433. package/dist/core/compaction/utils.d.ts.map +1 -1
  434. package/dist/core/compaction/utils.js.map +1 -1
  435. package/dist/core/context-breakdown.d.ts +1 -1
  436. package/dist/core/context-breakdown.d.ts.map +1 -1
  437. package/dist/core/context-breakdown.js.map +1 -1
  438. package/dist/core/defaults.d.ts +1 -1
  439. package/dist/core/defaults.d.ts.map +1 -1
  440. package/dist/core/defaults.js.map +1 -1
  441. package/dist/core/export-html/index.d.ts +1 -1
  442. package/dist/core/export-html/index.d.ts.map +1 -1
  443. package/dist/core/export-html/index.js.map +1 -1
  444. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  445. package/dist/core/export-html/tool-renderer.js.map +1 -1
  446. package/dist/core/extensions/loader.d.ts.map +1 -1
  447. package/dist/core/extensions/loader.js +25 -25
  448. package/dist/core/extensions/loader.js.map +1 -1
  449. package/dist/core/extensions/runner.d.ts +3 -3
  450. package/dist/core/extensions/runner.d.ts.map +1 -1
  451. package/dist/core/extensions/runner.js.map +1 -1
  452. package/dist/core/extensions/types.d.ts +5 -5
  453. package/dist/core/extensions/types.d.ts.map +1 -1
  454. package/dist/core/extensions/types.js.map +1 -1
  455. package/dist/core/extensions/wrapper.d.ts +1 -1
  456. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  457. package/dist/core/extensions/wrapper.js.map +1 -1
  458. package/dist/core/grok-cli-auth.d.ts +32 -0
  459. package/dist/core/grok-cli-auth.d.ts.map +1 -0
  460. package/dist/core/grok-cli-auth.js +218 -0
  461. package/dist/core/grok-cli-auth.js.map +1 -0
  462. package/dist/core/keybindings.d.ts +2 -2
  463. package/dist/core/keybindings.d.ts.map +1 -1
  464. package/dist/core/keybindings.js +1 -1
  465. package/dist/core/keybindings.js.map +1 -1
  466. package/dist/core/live-catalog.d.ts +1 -1
  467. package/dist/core/live-catalog.d.ts.map +1 -1
  468. package/dist/core/live-catalog.js.map +1 -1
  469. package/dist/core/messages.d.ts +3 -3
  470. package/dist/core/messages.d.ts.map +1 -1
  471. package/dist/core/messages.js.map +1 -1
  472. package/dist/core/model-registry.d.ts +1 -1
  473. package/dist/core/model-registry.d.ts.map +1 -1
  474. package/dist/core/model-registry.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +2 -2
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +1 -1
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/model-runtime.d.ts +10 -1
  480. package/dist/core/model-runtime.d.ts.map +1 -1
  481. package/dist/core/model-runtime.js +24 -5
  482. package/dist/core/model-runtime.js.map +1 -1
  483. package/dist/core/models-store.d.ts +1 -1
  484. package/dist/core/models-store.d.ts.map +1 -1
  485. package/dist/core/models-store.js.map +1 -1
  486. package/dist/core/official-catalog.d.ts +1 -1
  487. package/dist/core/official-catalog.d.ts.map +1 -1
  488. package/dist/core/official-catalog.js.map +1 -1
  489. package/dist/core/provider-attribution.d.ts +1 -1
  490. package/dist/core/provider-attribution.d.ts.map +1 -1
  491. package/dist/core/provider-attribution.js.map +1 -1
  492. package/dist/core/provider-composer.d.ts +1 -1
  493. package/dist/core/provider-composer.d.ts.map +1 -1
  494. package/dist/core/provider-composer.js +2 -2
  495. package/dist/core/provider-composer.js.map +1 -1
  496. package/dist/core/runtime-credentials.d.ts +1 -1
  497. package/dist/core/runtime-credentials.d.ts.map +1 -1
  498. package/dist/core/runtime-credentials.js.map +1 -1
  499. package/dist/core/sdk.d.ts +3 -3
  500. package/dist/core/sdk.d.ts.map +1 -1
  501. package/dist/core/sdk.js +3 -3
  502. package/dist/core/sdk.js.map +1 -1
  503. package/dist/core/session-manager.d.ts +2 -2
  504. package/dist/core/session-manager.d.ts.map +1 -1
  505. package/dist/core/session-manager.js +1 -1
  506. package/dist/core/session-manager.js.map +1 -1
  507. package/dist/core/settings-manager.d.ts +2 -2
  508. package/dist/core/settings-manager.d.ts.map +1 -1
  509. package/dist/core/settings-manager.js.map +1 -1
  510. package/dist/core/subscriptions.d.ts +1 -1
  511. package/dist/core/subscriptions.d.ts.map +1 -1
  512. package/dist/core/subscriptions.js.map +1 -1
  513. package/dist/core/tools/bash.d.ts +1 -1
  514. package/dist/core/tools/bash.d.ts.map +1 -1
  515. package/dist/core/tools/bash.js +1 -1
  516. package/dist/core/tools/bash.js.map +1 -1
  517. package/dist/core/tools/edit.d.ts +2 -2
  518. package/dist/core/tools/edit.d.ts.map +1 -1
  519. package/dist/core/tools/edit.js +1 -1
  520. package/dist/core/tools/edit.js.map +1 -1
  521. package/dist/core/tools/find.d.ts +1 -1
  522. package/dist/core/tools/find.d.ts.map +1 -1
  523. package/dist/core/tools/find.js +1 -1
  524. package/dist/core/tools/find.js.map +1 -1
  525. package/dist/core/tools/grep.d.ts +1 -1
  526. package/dist/core/tools/grep.d.ts.map +1 -1
  527. package/dist/core/tools/grep.js +1 -1
  528. package/dist/core/tools/grep.js.map +1 -1
  529. package/dist/core/tools/index.d.ts +1 -1
  530. package/dist/core/tools/index.d.ts.map +1 -1
  531. package/dist/core/tools/index.js.map +1 -1
  532. package/dist/core/tools/ls.d.ts +1 -1
  533. package/dist/core/tools/ls.d.ts.map +1 -1
  534. package/dist/core/tools/ls.js +1 -1
  535. package/dist/core/tools/ls.js.map +1 -1
  536. package/dist/core/tools/read.d.ts +1 -1
  537. package/dist/core/tools/read.d.ts.map +1 -1
  538. package/dist/core/tools/read.js +1 -1
  539. package/dist/core/tools/read.js.map +1 -1
  540. package/dist/core/tools/render-utils.d.ts +1 -1
  541. package/dist/core/tools/render-utils.d.ts.map +1 -1
  542. package/dist/core/tools/render-utils.js +1 -1
  543. package/dist/core/tools/render-utils.js.map +1 -1
  544. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  545. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  546. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  547. package/dist/core/tools/write.d.ts +1 -1
  548. package/dist/core/tools/write.d.ts.map +1 -1
  549. package/dist/core/tools/write.js +1 -1
  550. package/dist/core/tools/write.js.map +1 -1
  551. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  552. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  553. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  554. package/dist/core/usage-adapters/xai.js +4 -0
  555. package/dist/core/usage-adapters/xai.js.map +1 -1
  556. package/dist/core/usage-history.d.ts.map +1 -1
  557. package/dist/core/usage-history.js.map +1 -1
  558. package/dist/core/usage-service.d.ts +11 -1
  559. package/dist/core/usage-service.d.ts.map +1 -1
  560. package/dist/core/usage-service.js +45 -9
  561. package/dist/core/usage-service.js.map +1 -1
  562. package/dist/core/user-models.d.ts +1 -1
  563. package/dist/core/user-models.d.ts.map +1 -1
  564. package/dist/core/user-models.js.map +1 -1
  565. package/dist/gateway/agent-bridge.d.ts +3 -3
  566. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  567. package/dist/gateway/agent-bridge.js.map +1 -1
  568. package/dist/gateway/commands.d.ts.map +1 -1
  569. package/dist/gateway/commands.js.map +1 -1
  570. package/dist/gateway/cron.d.ts.map +1 -1
  571. package/dist/gateway/cron.js.map +1 -1
  572. package/dist/main.d.ts.map +1 -1
  573. package/dist/main.js +1 -1
  574. package/dist/main.js.map +1 -1
  575. package/dist/modes/interactive/components/armin.d.ts +1 -1
  576. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/armin.js.map +1 -1
  578. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  579. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  580. package/dist/modes/interactive/components/assistant-message.js +1 -1
  581. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  582. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  583. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/bash-execution.js +1 -1
  585. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  586. package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
  587. package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/boot-screen.js +1 -1
  589. package/dist/modes/interactive/components/boot-screen.js.map +1 -1
  590. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  593. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  594. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  595. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  597. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  598. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  599. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  601. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  602. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  603. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/config-selector.js +1 -1
  605. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  606. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  607. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  609. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  610. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/custom-editor.js +1 -1
  612. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  613. package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
  614. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/custom-entry.js +1 -1
  616. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  617. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  618. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  619. package/dist/modes/interactive/components/custom-message.js +1 -1
  620. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  621. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  622. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  623. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  624. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  625. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  627. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  628. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  630. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  631. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  632. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/extension-editor.js +1 -1
  634. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  635. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  636. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/extension-input.js +1 -1
  638. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  639. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  640. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  641. package/dist/modes/interactive/components/extension-selector.js +1 -1
  642. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  643. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  644. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  646. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  647. package/dist/modes/interactive/components/footer.d.ts +1 -1
  648. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  649. package/dist/modes/interactive/components/footer.js +1 -1
  650. package/dist/modes/interactive/components/footer.js.map +1 -1
  651. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  652. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  653. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  654. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  655. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  656. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  657. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  658. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  659. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  660. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  661. package/dist/modes/interactive/components/login-dialog.js +1 -1
  662. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  663. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  664. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  665. package/dist/modes/interactive/components/model-selector.js +2 -2
  666. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  667. package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
  668. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  669. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  670. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  671. package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
  672. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
  673. package/dist/modes/interactive/components/processes-selector.js +1 -1
  674. package/dist/modes/interactive/components/processes-selector.js.map +1 -1
  675. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  676. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  677. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  678. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  679. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  680. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  681. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  682. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  683. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  684. package/dist/modes/interactive/components/session-selector.js +1 -1
  685. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  686. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  687. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  688. package/dist/modes/interactive/components/settings-selector.js +1 -1
  689. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  690. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  691. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  692. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  693. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  694. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  695. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  696. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  697. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  698. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  699. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  700. package/dist/modes/interactive/components/status-indicator.js +1 -1
  701. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  702. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  703. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  704. package/dist/modes/interactive/components/theme-selector.js +1 -1
  705. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  706. package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
  707. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  708. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  709. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  710. package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
  711. package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
  712. package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
  713. package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
  714. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  715. package/dist/modes/interactive/components/thinking-tail.js +1 -1
  716. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  717. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  718. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  719. package/dist/modes/interactive/components/tool-execution.js +1 -1
  720. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  721. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  722. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  723. package/dist/modes/interactive/components/tree-selector.js +1 -1
  724. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  725. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  726. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  727. package/dist/modes/interactive/components/trust-selector.js +1 -1
  728. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  729. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/usage-view.js +1 -1
  731. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  732. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  733. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  734. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  735. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  736. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  737. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  738. package/dist/modes/interactive/components/user-message.js +1 -1
  739. package/dist/modes/interactive/components/user-message.js.map +1 -1
  740. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  741. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  742. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  743. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  744. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  745. package/dist/modes/interactive/interactive-mode.js +29 -4
  746. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  747. package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
  748. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  749. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  750. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  751. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  752. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  753. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  754. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  755. package/dist/modes/interactive/theme/theme.js +2 -2
  756. package/dist/modes/interactive/theme/theme.js.map +1 -1
  757. package/dist/modes/print-mode.d.ts +1 -1
  758. package/dist/modes/print-mode.d.ts.map +1 -1
  759. package/dist/modes/print-mode.js.map +1 -1
  760. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  761. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  762. package/dist/modes/rpc/rpc-client.js.map +1 -1
  763. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  764. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  765. package/dist/modes/rpc/rpc-types.js.map +1 -1
  766. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  767. package/examples/extensions/bash-spawn-hook.ts +2 -2
  768. package/examples/extensions/bookmark.ts +1 -1
  769. package/examples/extensions/border-status-editor.ts +3 -3
  770. package/examples/extensions/built-in-tool-renderer.ts +3 -3
  771. package/examples/extensions/claude-rules.ts +1 -1
  772. package/examples/extensions/commands.ts +1 -1
  773. package/examples/extensions/confirm-destructive.ts +1 -1
  774. package/examples/extensions/custom-compaction.ts +3 -3
  775. package/examples/extensions/custom-footer.ts +3 -3
  776. package/examples/extensions/custom-header.ts +2 -2
  777. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  778. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  779. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  780. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  781. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  782. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  783. package/examples/extensions/dirty-repo-guard.ts +1 -1
  784. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  785. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  786. package/examples/extensions/doom-overlay/index.ts +1 -1
  787. package/examples/extensions/dynamic-resources/index.ts +1 -1
  788. package/examples/extensions/dynamic-tools.ts +1 -1
  789. package/examples/extensions/entry-renderer.ts +2 -2
  790. package/examples/extensions/event-bus.ts +1 -1
  791. package/examples/extensions/file-trigger.ts +1 -1
  792. package/examples/extensions/git-checkpoint.ts +1 -1
  793. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  794. package/examples/extensions/github-issue-autocomplete.ts +2 -2
  795. package/examples/extensions/gondolin/index.ts +2 -2
  796. package/examples/extensions/gondolin/package-lock.json +2 -2
  797. package/examples/extensions/gondolin/package.json +1 -1
  798. package/examples/extensions/handoff.ts +4 -4
  799. package/examples/extensions/hello.ts +2 -2
  800. package/examples/extensions/hidden-thinking-label.ts +1 -1
  801. package/examples/extensions/inline-bash.ts +1 -1
  802. package/examples/extensions/input-transform-streaming.ts +1 -1
  803. package/examples/extensions/input-transform.ts +1 -1
  804. package/examples/extensions/interactive-shell.ts +1 -1
  805. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  806. package/examples/extensions/mac-system-theme.ts +1 -1
  807. package/examples/extensions/message-renderer.ts +2 -2
  808. package/examples/extensions/minimal-mode.ts +3 -3
  809. package/examples/extensions/modal-editor.ts +2 -2
  810. package/examples/extensions/model-status.ts +1 -1
  811. package/examples/extensions/notify.ts +1 -1
  812. package/examples/extensions/overlay-qa-tests.ts +3 -3
  813. package/examples/extensions/overlay-test.ts +2 -2
  814. package/examples/extensions/permission-gate.ts +1 -1
  815. package/examples/extensions/pirate.ts +1 -1
  816. package/examples/extensions/plan-mode/index.ts +4 -4
  817. package/examples/extensions/preset.ts +4 -4
  818. package/examples/extensions/project-trust.ts +1 -1
  819. package/examples/extensions/prompt-customizer.ts +1 -1
  820. package/examples/extensions/protected-paths.ts +1 -1
  821. package/examples/extensions/provider-payload.ts +1 -1
  822. package/examples/extensions/qna.ts +3 -3
  823. package/examples/extensions/question.ts +2 -2
  824. package/examples/extensions/questionnaire.ts +2 -2
  825. package/examples/extensions/rainbow-editor.ts +1 -1
  826. package/examples/extensions/reload-runtime.ts +1 -1
  827. package/examples/extensions/rpc-demo.ts +1 -1
  828. package/examples/extensions/sandbox/index.ts +2 -2
  829. package/examples/extensions/send-user-message.ts +1 -1
  830. package/examples/extensions/session-name.ts +1 -1
  831. package/examples/extensions/shutdown-command.ts +1 -1
  832. package/examples/extensions/snake.ts +2 -2
  833. package/examples/extensions/space-invaders.ts +2 -2
  834. package/examples/extensions/ssh.ts +2 -2
  835. package/examples/extensions/status-line.ts +1 -1
  836. package/examples/extensions/structured-output.ts +2 -2
  837. package/examples/extensions/subagent/agents.ts +1 -1
  838. package/examples/extensions/subagent/index.ts +5 -5
  839. package/examples/extensions/summarize.ts +4 -4
  840. package/examples/extensions/system-prompt-header.ts +1 -1
  841. package/examples/extensions/tic-tac-toe.ts +3 -3
  842. package/examples/extensions/timed-confirm.ts +1 -1
  843. package/examples/extensions/titlebar-spinner.ts +1 -1
  844. package/examples/extensions/todo.ts +3 -3
  845. package/examples/extensions/tool-override.ts +2 -2
  846. package/examples/extensions/tools.ts +3 -3
  847. package/examples/extensions/trigger-compact.ts +1 -1
  848. package/examples/extensions/truncated-tool.ts +3 -3
  849. package/examples/extensions/widget-placement.ts +1 -1
  850. package/examples/extensions/with-deps/index.ts +1 -1
  851. package/examples/extensions/with-deps/package-lock.json +2 -2
  852. package/examples/extensions/with-deps/package.json +1 -1
  853. package/examples/extensions/working-indicator.ts +1 -1
  854. package/examples/extensions/working-message-test.ts +1 -1
  855. package/examples/rpc-extension-ui.ts +1 -1
  856. package/examples/sdk/01-minimal.ts +1 -1
  857. package/examples/sdk/02-custom-model.ts +2 -2
  858. package/examples/sdk/03-custom-prompt.ts +1 -1
  859. package/examples/sdk/04-skills.ts +1 -1
  860. package/examples/sdk/05-tools.ts +1 -1
  861. package/examples/sdk/06-extensions.ts +2 -2
  862. package/examples/sdk/07-context-files.ts +1 -1
  863. package/examples/sdk/08-prompt-templates.ts +1 -1
  864. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  865. package/examples/sdk/10-settings.ts +1 -1
  866. package/examples/sdk/11-sessions.ts +1 -1
  867. package/examples/sdk/12-full-control.ts +2 -2
  868. package/examples/sdk/13-session-runtime.ts +1 -1
  869. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/types.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Type definitions for the subagent extension\n */\n\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport type { FSWatcher } from \"node:fs\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { ModelScopeConfig } from \"../runs/shared/model-scope.ts\";\n\n// ============================================================================\n// Basic Types\n// ============================================================================\n\nexport interface MaxOutputConfig {\n\tbytes?: number;\n\tlines?: number;\n}\n\nexport type OutputMode = \"inline\" | \"file-only\";\n\nexport type AcceptanceRole = \"read-only\" | \"writer\";\n\nexport type JsonSchemaObject = Record<string, unknown>;\n\nexport interface ChainOutputMapEntry {\n\ttext: string;\n\tstructured?: unknown;\n\tagent: string;\n\tstepIndex: number;\n}\n\nexport type ChainOutputMap = Record<string, ChainOutputMapEntry>;\n\nexport type WorkflowNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\" | \"detached\";\n\nexport interface WorkflowGraphNode {\n\tid: string;\n\tkind: \"step\" | \"parallel-group\" | \"dynamic-parallel-group\" | \"agent\";\n\tagent?: string;\n\tphase?: string;\n\tlabel: string;\n\tstatus: WorkflowNodeStatus;\n\tflatIndex?: number;\n\tstepIndex?: number;\n\tchildren?: WorkflowGraphNode[];\n\tdynamic?: {\n\t\tsourceOutput: string;\n\t\tsourcePath: string;\n\t\titemName: string;\n\t\tmaxItems?: number;\n\t\tcollectAs?: string;\n\t};\n\titemKey?: string;\n\toutputName?: string;\n\tstructured?: boolean;\n\tacceptanceStatus?: AcceptanceLedgerStatus;\n\terror?: string;\n}\n\nexport interface WorkflowGraphSnapshot {\n\trunId: string;\n\tmode: \"chain\" | \"parallel\" | \"single\";\n\tphases: Array<{ title: string; nodeIds: string[] }>;\n\tnodes: WorkflowGraphNode[];\n\tcurrentNodeId?: string;\n}\n\nexport interface SavedOutputReference {\n\tpath: string;\n\tbytes: number;\n\tlines: number;\n\tmessage: string;\n}\n\ninterface TruncationResult {\n\ttext: string;\n\ttruncated: boolean;\n\toriginalBytes?: number;\n\toriginalLines?: number;\n\tartifactPath?: string;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tturns: number;\n}\n\nexport interface TurnBudgetConfig {\n\tmaxTurns: number;\n\tgraceTurns?: number;\n}\n\nexport interface ResolvedTurnBudget {\n\tmaxTurns: number;\n\tgraceTurns: number;\n}\n\nexport interface ToolBudgetConfig {\n\tsoft?: number;\n\thard: number;\n\tblock?: string[] | \"*\";\n}\n\nexport interface ResolvedToolBudget {\n\tsoft?: number;\n\thard: number;\n\tblock: string[] | \"*\";\n}\n\nexport type ToolBudgetOutcome = \"within-budget\" | \"soft-reached\" | \"hard-blocked\";\n\nexport interface ToolBudgetState extends ResolvedToolBudget {\n\toutcome: ToolBudgetOutcome;\n\ttoolCount: number;\n\tsoftReachedAt?: number;\n\thardReachedAt?: number;\n\tblockedTool?: string;\n}\n\nexport type TurnBudgetOutcome = \"within-budget\" | \"wrap-up-requested\" | \"exceeded\";\n\nexport interface TurnBudgetState extends ResolvedTurnBudget {\n\toutcome: TurnBudgetOutcome;\n\tturnCount: number;\n\twrapUpRequestedAtTurn?: number;\n\texceededAtTurn?: number;\n}\n\nexport interface TokenUsage {\n\tinput: number;\n\toutput: number;\n\ttotal: number;\n}\n\nexport type ActivityState = \"active_long_running\" | \"needs_attention\";\nexport type ControlEventType = \"active_long_running\" | \"needs_attention\";\nexport type ControlNotificationChannel = \"event\" | \"async\" | \"intercom\";\n\nexport interface ControlConfig {\n\tenabled?: boolean;\n\tneedsAttentionAfterMs?: number;\n\tactiveNoticeAfterMs?: number;\n\tactiveNoticeAfterTurns?: number;\n\tactiveNoticeAfterTokens?: number;\n\tfailedToolAttemptsBeforeAttention?: number;\n\tnotifyOn?: ControlEventType[];\n\tnotifyChannels?: ControlNotificationChannel[];\n}\n\nexport interface ResolvedControlConfig {\n\tenabled: boolean;\n\tneedsAttentionAfterMs: number;\n\tactiveNoticeAfterMs: number;\n\tactiveNoticeAfterTurns?: number;\n\tactiveNoticeAfterTokens?: number;\n\tfailedToolAttemptsBeforeAttention: number;\n\tnotifyOn: ControlEventType[];\n\tnotifyChannels: ControlNotificationChannel[];\n}\n\n/**\n * Smart completion batching for async-completion notifications. Successful\n * sibling completions are held briefly so they arrive as one grouped message;\n * failure and attention signals bypass grouping and always fire immediately.\n */\nexport interface CompletionBatchConfig {\n\tenabled?: boolean;\n\t/** Idle window after each arrival; resets on every new item. */\n\tdebounceMs?: number;\n\t/** Hard cap measured from the first item in a group. */\n\tmaxWaitMs?: number;\n\t/** Shorter idle window for straggler groups. */\n\tstragglerDebounceMs?: number;\n\t/** Shorter hard cap for straggler groups. */\n\tstragglerMaxWaitMs?: number;\n\t/** Arrivals within this window after an emit join a straggler group. */\n\tstragglerWindowMs?: number;\n}\n\nexport interface WaitToolConfigObject {\n\tenabled?: boolean;\n}\n\nexport type WaitToolConfig = boolean | WaitToolConfigObject;\n\nexport interface ControlEvent {\n\ttype: ControlEventType;\n\tfrom?: ActivityState;\n\tto: ActivityState;\n\tts: number;\n\tagent: string;\n\tindex?: number;\n\trunId: string;\n\tnestedRunId?: string;\n\tnestingPath?: NestedRunAddress[\"path\"];\n\tmessage: string;\n\treason?: \"idle\" | \"completion_guard\" | \"active_long_running\" | \"tool_failures\" | \"time_threshold\" | \"turn_threshold\" | \"token_threshold\";\n\tturns?: number;\n\ttokens?: number;\n\ttoolCount?: number;\n\tcurrentTool?: string;\n\tcurrentToolDurationMs?: number;\n\tcurrentPath?: string;\n\telapsedMs?: number;\n\trecentFailureSummary?: string;\n}\n\nexport type SubagentResultStatus = \"completed\" | \"failed\" | \"paused\" | \"stopped\" | \"detached\";\nexport type SubagentRunMode = \"single\" | \"parallel\" | \"chain\";\nexport const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION = 2;\nexport type SubagentLifecycleArtifactVersion = typeof SUBAGENT_LIFECYCLE_ARTIFACT_VERSION;\n\nexport type SteeringActionState = \"delivered\" | \"scheduled\" | \"pending\" | \"partial\" | \"recovered\" | \"failed\";\nexport type SteeringTargetState = \"scheduled\" | \"routed\" | \"delivered\" | \"late\" | \"failed\" | \"recovered\";\n\nexport interface SteeringTargetStatus {\n\tindex: number;\n\tstate: SteeringTargetState;\n\troutedAt?: number;\n\tdeliveredAt?: number;\n\tlateDeliveredAt?: number;\n\tfailedAt?: number;\n\trecoveredAt?: number;\n\treason?: string;\n\treplacementRunId?: string;\n}\n\nexport interface SteeringRequestStatus {\n\tid: string;\n\trequestedAt: number;\n\tsource?: string;\n\tmessagePreview: string;\n\ttargets: SteeringTargetStatus[];\n}\n\nexport interface SteeringStatus {\n\trequested: number;\n\tscheduled: number;\n\tpending: number;\n\tdelivered: number;\n\tfailed: number;\n\trecovered: number;\n\tlastRequestedAt?: number;\n\tlastDeliveredAt?: number;\n\trecent: SteeringRequestStatus[];\n}\n\nexport interface SteerActionTarget {\n\tindex: number;\n\tstate: SteeringTargetState;\n\tdeliveredAt?: number;\n\tlateDeliveredAt?: number;\n\treason?: string;\n\treplacementRunId?: string;\n}\n\nexport interface SteerActionResult {\n\trequestId: string;\n\tstate: SteeringActionState;\n\tsourceRunId: string;\n\treplacementRunId?: string;\n\ttargets: SteerActionTarget[];\n}\n\nexport interface SteeringNotice {\n\ttype: \"subagent.steering.notice\";\n\tts: number;\n\trunId: string;\n\trequestId: string;\n\tstate: \"failed\" | \"partial\" | \"recovered\";\n\tmessage: string;\n\tcurrentSessionId?: string;\n}\n\nexport interface SteeringRecoveryDescriptor {\n\tversion: 1;\n\tsourceRunId: string;\n\tagent: string;\n\tsessionFile?: string;\n\tcwd: string;\n\tmodel?: string;\n\tfallbackModels?: string[];\n\tthinking?: string;\n\ttools?: string[];\n\textensions?: string[];\n\tsubagentOnlyExtensions?: string[];\n\tmcpDirectTools?: string[];\n\tsystemPrompt?: string;\n\tsystemPromptMode: \"append\" | \"replace\";\n\tinheritProjectContext: boolean;\n\tinheritSkills: boolean;\n\tskills?: string[];\n\tskillPath?: string[];\n\tagentFilePath?: string;\n\tcompletionGuard?: boolean;\n\tmemory?: { scope: \"project\" | \"user\"; path: string };\n\toutputPath?: string;\n\toutputMode: \"inline\" | \"file-only\";\n\tacceptance?: AcceptanceInput;\n\tcontrolConfig?: ResolvedControlConfig;\n\tabsoluteDeadlineAt?: number;\n\tinitialTurnBudget?: ResolvedTurnBudget;\n\tinitialToolBudget?: ResolvedToolBudget;\n\tmaxSubagentDepth: number;\n\tmaxOutput?: MaxOutputConfig;\n\tshare: boolean;\n\tsessionDir?: string;\n\tartifactsDir?: string;\n\tartifactConfig?: ArtifactConfig;\n}\n\nexport type PublicNestedStepSummary = Pick<\n\tNestedStepSummary,\n\t\"agent\" | \"status\" | \"sessionFile\" | \"transcriptPath\" | \"transcriptError\" | \"activityState\" | \"lastActivityAt\" | \"currentTool\" | \"currentToolStartedAt\" | \"currentPath\" | \"turnCount\" | \"toolCount\" | \"toolBudget\" | \"toolBudgetBlocked\" | \"startedAt\" | \"endedAt\" | \"error\" | \"timedOut\" | \"stopped\"\n> & {\n\tchildren?: PublicNestedRunSummary[];\n};\n\nexport type CostSummary = {\n\tinputTokens: number;\n\toutputTokens: number;\n\tcostUsd: number;\n};\n\nexport type PublicNestedRunSummary = Pick<\n\tNestedRunSummary,\n\t\"id\" | \"parentRunId\" | \"parentStepIndex\" | \"parentAgent\" | \"depth\" | \"path\" | \"asyncDir\" | \"sessionId\" | \"sessionFile\" | \"intercomTarget\" | \"ownerIntercomTarget\" | \"leafIntercomTarget\" | \"ownerState\" | \"mode\" | \"state\" | \"agent\" | \"agents\" | \"currentStep\" | \"chainStepCount\" | \"parallelGroups\" | \"activityState\" | \"lastActivityAt\" | \"currentTool\" | \"currentToolStartedAt\" | \"currentPath\" | \"turnCount\" | \"toolCount\" | \"toolBudget\" | \"toolBudgetBlocked\" | \"totalTokens\" | \"totalCost\" | \"startedAt\" | \"endedAt\" | \"lastUpdate\" | \"error\" | \"timeoutMs\" | \"deadlineAt\" | \"timedOut\" | \"stopped\" | \"turnBudget\" | \"turnBudgetExceeded\" | \"wrapUpRequested\"\n> & {\n\tsteps?: PublicNestedStepSummary[];\n\tchildren?: PublicNestedRunSummary[];\n};\n\nexport interface SubagentResultIntercomChild {\n\tagent: string;\n\tstatus: SubagentResultStatus;\n\tsummary: string;\n\tindex?: number;\n\tartifactPath?: string;\n\tsessionPath?: string;\n\tintercomTarget?: string;\n\tchildren?: PublicNestedRunSummary[];\n}\n\nexport interface SubagentResultIntercomPayload {\n\tto: string;\n\tmessage: string;\n\trequestId?: string;\n\trunId: string;\n\tmode: SubagentRunMode;\n\tstatus: SubagentResultStatus;\n\tsummary: string;\n\tsource: \"foreground\" | \"async\";\n\tchildren: SubagentResultIntercomChild[];\n\tasyncId?: string;\n\tasyncDir?: string;\n\tchainSteps?: number;\n\tagent?: string;\n\tindex?: number;\n\tartifactPath?: string;\n\tsessionPath?: string;\n}\n\n// ============================================================================\n// Progress Tracking\n// ============================================================================\n\nexport interface ChildWatchdogProgress {\n\tphase: \"idle\" | \"reviewing\" | \"autofollow\" | \"settling\" | \"stale\" | \"failed\";\n\tseq: number;\n\tlastUpdate: number;\n\tfollowUpPending: boolean;\n\treason?: string;\n\ttimedOut?: boolean;\n}\n\nexport interface AgentProgress {\n\tindex: number;\n\tagent: string;\n\tstatus: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"detached\";\n\tactivityState?: ActivityState;\n\ttask: string;\n\tskills?: string[];\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\trecentTools: Array<{ tool: string; args: string; endMs: number }>;\n\trecentOutput: string[];\n\ttoolCount: number;\n\tturnCount?: number;\n\ttokens: number;\n\tdurationMs: number;\n\terror?: string;\n\tfailedTool?: string;\n\twatchdog?: ChildWatchdogProgress;\n}\n\nexport interface ToolCallSummary {\n\ttext: string;\n\texpandedText: string;\n}\n\ninterface ProgressSummary {\n\ttoolCount: number;\n\ttokens: number;\n\tdurationMs: number;\n}\n\n// ============================================================================\n// Results\n// ============================================================================\n\nexport interface ModelAttempt {\n\tmodel: string;\n\tsuccess: boolean;\n\texitCode?: number | null;\n\terror?: string;\n\tusage?: Usage;\n}\n\nexport type AcceptanceLevel = \"auto\" | \"none\" | \"attested\" | \"checked\" | \"verified\" | \"reviewed\";\n\nexport type AcceptanceEvidenceKind =\n\t| \"changed-files\"\n\t| \"tests-added\"\n\t| \"commands-run\"\n\t| \"validation-output\"\n\t| \"residual-risks\"\n\t| \"no-staged-files\"\n\t| \"diff-summary\"\n\t| \"review-findings\"\n\t| \"manual-notes\";\n\nexport interface AcceptanceGate {\n\tid: string;\n\tmust: string;\n\tevidence?: AcceptanceEvidenceKind[];\n\tseverity?: \"required\" | \"recommended\";\n}\n\nexport interface AcceptanceVerifyCommand {\n\tid: string;\n\tcommand: string;\n\ttimeoutMs?: number;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tallowFailure?: boolean;\n}\n\nexport interface AcceptanceReviewGate {\n\tagent?: string;\n\tfocus?: string;\n\trequired?: boolean;\n}\n\nexport interface AcceptanceConfig {\n\tlevel?: AcceptanceLevel;\n\tcriteria?: Array<string | AcceptanceGate>;\n\tevidence?: AcceptanceEvidenceKind[];\n\tverify?: AcceptanceVerifyCommand[];\n\treview?: AcceptanceReviewGate | false;\n\tstopRules?: string[];\n\treason?: string;\n}\n\n/** Bare \"none\" is not accepted: use { level: \"none\", reason: \"...\" }; false remains a deprecated shorthand. */\nexport type AcceptanceInput = Exclude<AcceptanceLevel, \"none\"> | false | AcceptanceConfig;\n\nexport interface ResolvedAcceptanceGate extends AcceptanceGate {\n\tid: string;\n\tmust: string;\n\tevidence: AcceptanceEvidenceKind[];\n\tseverity: \"required\" | \"recommended\";\n}\n\nexport interface ResolvedAcceptanceConfig {\n\tlevel: Exclude<AcceptanceLevel, \"auto\">;\n\texplicit: boolean;\n\tinferredReason: string[];\n\tcriteria: ResolvedAcceptanceGate[];\n\tevidence: AcceptanceEvidenceKind[];\n\tverify: AcceptanceVerifyCommand[];\n\treview?: AcceptanceReviewGate | false;\n\tstopRules: string[];\n\treason?: string;\n}\n\nexport interface AcceptanceReport {\n\tcriteriaSatisfied?: Array<{\n\t\tid?: string;\n\t\tstatus: \"satisfied\" | \"not-satisfied\" | \"not-applicable\";\n\t\tevidence: string;\n\t}>;\n\tchangedFiles?: string[];\n\ttestsAddedOrUpdated?: string[];\n\tcommandsRun?: Array<{\n\t\tcommand: string;\n\t\tresult: \"passed\" | \"failed\" | \"not-run\";\n\t\tsummary: string;\n\t}>;\n\tvalidationOutput?: string[];\n\tresidualRisks?: string[];\n\tnoStagedFiles?: boolean;\n\tdiffSummary?: string;\n\treviewFindings?: string[];\n\tmanualNotes?: string;\n\tnotes?: string;\n}\n\nexport type AcceptanceRuntimeCheckStatus = \"passed\" | \"failed\" | \"not-applicable\";\n\nexport interface AcceptanceRuntimeCheck {\n\tid: string;\n\tstatus: AcceptanceRuntimeCheckStatus;\n\tmessage: string;\n}\n\nexport interface AcceptanceVerifyResult {\n\tid: string;\n\tcommand: string;\n\tcwd?: string;\n\texitCode: number | null;\n\tstatus: \"passed\" | \"failed\" | \"timed-out\" | \"allowed-failure\";\n\tstdout?: string;\n\tstderr?: string;\n\tdurationMs: number;\n}\n\nexport interface AcceptanceReviewResult {\n\tstatus: \"no-blockers\" | \"blockers\" | \"needs-parent-decision\";\n\tfindings: Array<{\n\t\tseverity: \"blocker\" | \"non-blocking\";\n\t\tfile?: string;\n\t\tissue: string;\n\t\trationale: string;\n\t}>;\n}\n\nexport type AcceptanceLedgerStatus =\n\t| \"pending\"\n\t| \"not-required\"\n\t| \"claimed\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| \"reviewed\"\n\t| \"accepted\"\n\t| \"rejected\";\n\nexport interface AcceptanceLedger {\n\tstatus: AcceptanceLedgerStatus;\n\texplicit: boolean;\n\teffectiveAcceptance: ResolvedAcceptanceConfig;\n\tinferredReason: string[];\n\tcriteria: ResolvedAcceptanceGate[];\n\tchildReport?: AcceptanceReport;\n\tchildReportParseError?: string;\n\truntimeChecks: AcceptanceRuntimeCheck[];\n\tverifyRuns: AcceptanceVerifyResult[];\n\treviewResult?: AcceptanceReviewResult;\n\tparentDecision?: {\n\t\tstatus: \"accepted\" | \"rejected\";\n\t\tat: string;\n\t\treason?: string;\n\t};\n}\n\nexport interface ProtocolOutputLimit {\n\tcode: \"protocol_output_limit\";\n\tstream: \"stdout\" | \"stderr\";\n\tlimitBytes: number;\n\tobservedBytes: number;\n\tdiagnosticPrefix: string;\n\tdiagnosticTail: string;\n}\n\nexport interface SingleResult {\n\tagent: string;\n\ttask: string;\n\texitCode: number;\n\tdetached?: boolean;\n\tdetachedReason?: string;\n\tinterrupted?: boolean;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tmessages?: Message[];\n\tusage: Usage;\n\tmodel?: string;\n\tattemptedModels?: string[];\n\tmodelAttempts?: ModelAttempt[];\n\tcontrolEvents?: ControlEvent[];\n\terror?: string;\n\tprotocolError?: ProtocolOutputLimit;\n\tsessionFile?: string;\n\tskills?: string[];\n\tskillsWarning?: string;\n\tprogress?: AgentProgress;\n\tprogressSummary?: ProgressSummary;\n\ttoolCalls?: ToolCallSummary[];\n\tartifactPaths?: ArtifactPaths;\n\ttruncation?: TruncationResult;\n\tfinalOutput?: string;\n\toutputMode?: OutputMode;\n\tsavedOutputPath?: string;\n\toutputReference?: SavedOutputReference;\n\toutputSaveError?: string;\n\tstructuredOutput?: unknown;\n\tstructuredOutputPath?: string;\n\tstructuredOutputSchemaPath?: string;\n\tacceptance?: AcceptanceLedger;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tchildren?: NestedRunSummary[];\n\twatchdog?: ChildWatchdogProgress;\n}\n\nexport interface Details {\n\tmode: SubagentRunMode | \"management\";\n\trunId?: string;\n\tcontext?: \"fresh\" | \"fork\";\n\tresults: SingleResult[];\n\tcontrolEvents?: ControlEvent[];\n\tsteering?: SteerActionResult;\n\tasyncId?: string;\n\tasyncDir?: string;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tprogress?: AgentProgress[];\n\tprogressSummary?: ProgressSummary;\n\tartifacts?: {\n\t\tdir: string;\n\t\tfiles: ArtifactPaths[];\n\t};\n\ttruncation?: {\n\t\ttruncated: boolean;\n\t\toriginalBytes?: number;\n\t\toriginalLines?: number;\n\t\tartifactPath?: string;\n\t};\n\t// Chain metadata for observability\n\tchainAgents?: string[]; // Agent names in order, e.g., [\"scout\", \"planner\"]\n\ttotalSteps?: number; // Total steps in chain\n\tcurrentStepIndex?: number; // 0-indexed current step (for running chains)\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\toutputs?: ChainOutputMap;\n\t// Aggregated child usage across all agents in the run\n\ttotalChildUsage?: Usage;\n\t// Aggregated cost across all agents in the run\n\ttotalCost?: CostSummary;\n}\n\n// ============================================================================\n// Artifacts\n// ============================================================================\n\nexport interface ArtifactPaths {\n\tinputPath: string;\n\toutputPath: string;\n\tjsonlPath: string;\n\ttranscriptPath: string;\n\tmetadataPath: string;\n}\n\nexport interface ArtifactConfig {\n\tenabled: boolean;\n\tincludeInput: boolean;\n\tincludeOutput: boolean;\n\tincludeJsonl: boolean;\n\tincludeTranscript?: boolean;\n\tincludeMetadata: boolean;\n\tcleanupDays: number;\n}\n\n// ============================================================================\n// Async Execution\n// ============================================================================\n\nexport interface AsyncParallelGroupStatus {\n\tstart: number;\n\tcount: number;\n\tstepIndex: number;\n}\n\nexport type NestedRunState = \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\nexport type NestedOwnerState = \"live\" | \"gone\" | \"unknown\";\n\nexport interface NestedRunAddress {\n\tid: string;\n\tparentRunId: string;\n\tparentStepIndex?: number;\n\tparentAgent?: string;\n\tdepth: number;\n\tpath: Array<{ runId: string; stepIndex?: number; agent?: string }>;\n}\n\nexport interface NestedStepSummary {\n\tagent: string;\n\tstatus: \"pending\" | \"running\" | \"complete\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\";\n\tsessionFile?: string;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tstartedAt?: number;\n\tendedAt?: number;\n\terror?: string;\n\twatchdog?: ChildWatchdogProgress;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tchildren?: NestedRunSummary[];\n}\n\nexport interface NestedRunSummary extends NestedRunAddress {\n\tasyncDir?: string;\n\tpid?: number;\n\tsessionId?: string;\n\tsessionFile?: string;\n\tintercomTarget?: string;\n\townerIntercomTarget?: string;\n\tleafIntercomTarget?: string;\n\townerState?: NestedOwnerState;\n\tcontrolInbox?: string;\n\tcapabilityToken?: string;\n\tmode?: SubagentRunMode;\n\tstate: NestedRunState;\n\tagent?: string;\n\tagents?: string[];\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps?: NestedStepSummary[];\n\tchildren?: NestedRunSummary[];\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tstartedAt?: number;\n\tendedAt?: number;\n\tlastUpdate?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\terror?: string;\n}\n\nexport interface NestedRouteInfo {\n\trootRunId: string;\n\teventSink: string;\n\tcontrolInbox: string;\n\tcapabilityToken: string;\n}\n\nexport interface AsyncStartedEvent {\n\tlifecycleArtifactVersion?: SubagentLifecycleArtifactVersion;\n\tid?: string;\n\tasyncDir?: string;\n\tpid?: number;\n\tsessionId?: string;\n\tmode?: SubagentRunMode;\n\tagent?: string;\n\tagents?: string[];\n\t/** Truncated first child task retained for backwards compatibility. */\n\ttask?: string;\n\t/** Workflow-level caller task, falling back to the first child task. */\n\tgoal?: string;\n\tchain?: string[];\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\tturnBudget?: TurnBudgetState;\n\tnestedRoute?: NestedRouteInfo;\n}\n\nexport interface AsyncStatus {\n\tlifecycleArtifactVersion?: SubagentLifecycleArtifactVersion;\n\trunId: string;\n\tsessionId?: string;\n\tmode: SubagentRunMode;\n\tisNested?: boolean;\n\tstate: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\terror?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tstartedAt: number;\n\tendedAt?: number;\n\tlastUpdate?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tpid?: number;\n\tcwd?: string;\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tpendingAppends?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\tsteps?: Array<{\n\t\tagent: string;\n\t\tphase?: string;\n\t\tlabel?: string;\n\t\toutputName?: string;\n\t\tstructured?: boolean;\n\t\tstatus: \"pending\" | \"running\" | \"complete\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\";\n\t\tchildren?: NestedRunSummary[];\n\t\tsessionFile?: string;\n\t\ttranscriptPath?: string;\n\t\ttranscriptError?: string;\n\t\tactivityState?: ActivityState;\n\t\tlastActivityAt?: number;\n\t\tcurrentTool?: string;\n\t\tcurrentToolArgs?: string;\n\t\tcurrentToolStartedAt?: number;\n\t\tcurrentPath?: string;\n\t\trecentTools?: Array<{ tool: string; args: string; endMs: number }>;\n\t\trecentOutput?: string[];\n\t\tturnCount?: number;\n\t\ttoolCount?: number;\n\t\tstartedAt?: number;\n\t\tendedAt?: number;\n\t\tdurationMs?: number;\n\t\texitCode?: number | null;\n\t\ttimedOut?: boolean;\n\t\tstopped?: boolean;\n\t\tturnBudget?: TurnBudgetState;\n\t\tturnBudgetExceeded?: boolean;\n\t\twrapUpRequested?: boolean;\n\t\ttoolBudget?: ToolBudgetState;\n\t\ttoolBudgetBlocked?: boolean;\n\t\ttokens?: TokenUsage;\n\t\tskills?: string[];\n\t\tmodel?: string;\n\t\tthinking?: string;\n\t\tattemptedModels?: string[];\n\t\tmodelAttempts?: ModelAttempt[];\n\t\ttotalCost?: CostSummary;\n\t\tsteering?: SteeringStatus;\n\t\terror?: string;\n\t\tstructuredOutput?: unknown;\n\t\tstructuredOutputPath?: string;\n\t\tstructuredOutputSchemaPath?: string;\n\t\tacceptance?: AcceptanceLedger;\n\t\twatchdog?: ChildWatchdogProgress;\n\t}>;\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tsessionFile?: string;\n\toutputs?: ChainOutputMap;\n}\n\nexport type AsyncJobStep = NonNullable<AsyncStatus[\"steps\"]>[number] & {\n\tindex?: number;\n};\n\nexport interface AsyncJobState {\n\tasyncId: string;\n\tasyncDir: string;\n\tstatus: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\tpid?: number;\n\tsessionId?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tmode?: SubagentRunMode;\n\tagents?: string[];\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps?: AsyncJobStep[];\n\tstepsTotal?: number;\n\trunningSteps?: number;\n\tcompletedSteps?: number;\n\thasParallelGroups?: boolean;\n\tactiveParallelGroup?: boolean;\n\tstartedAt?: number;\n\tupdatedAt?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\tsessionFile?: string;\n\tcontrolEventCursor?: number;\n\tnestedRoute?: NestedRouteInfo;\n\tnestedChildren?: NestedRunSummary[];\n}\n\nexport interface ForegroundResumeChild {\n\tagent: string;\n\tindex: number;\n\tsessionFile?: string;\n\tstatus: SubagentResultStatus;\n\texitCode?: number;\n\terror?: string;\n\tfinalOutput?: string;\n\toutputMode?: OutputMode;\n\tsavedOutputPath?: string;\n\toutputSaveError?: string;\n\tartifactPaths?: ArtifactPaths;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tdetachedReason?: string;\n\tacceptance?: AcceptanceLedger;\n\tupdatedAt?: number;\n}\n\nexport interface ForegroundResumeRun {\n\trunId: string;\n\tmode: SubagentRunMode;\n\tcwd: string;\n\t/** Originating parent session. Detached exits can outlive the active session. */\n\tsessionId?: string;\n\tupdatedAt: number;\n\tchildren: ForegroundResumeChild[];\n}\n\nexport interface SubagentState {\n\tbaseCwd: string;\n\tcurrentSessionId: string | null;\n\tsubagentInProgress?: boolean;\n\tsubagentSpawns?: { sessionId: string | null; count: number };\n\tasyncJobs: Map<string, AsyncJobState>;\n\t/** Current-session active and recent async runs for the native fleet inspector. */\n\tfleetJobs?: Map<string, AsyncJobState>;\n\tforegroundRuns?: Map<string, ForegroundResumeRun>;\n\tforegroundControls: Map<string, {\n\t\trunId: string;\n\t\tmode: SubagentRunMode;\n\t\tstartedAt: number;\n\t\tupdatedAt: number;\n\t\tcurrentAgent?: string;\n\t\tcurrentIndex?: number;\n\t\tcurrentActivityState?: ActivityState;\n\t\tlastActivityAt?: number;\n\t\tcurrentTool?: string;\n\t\tcurrentToolStartedAt?: number;\n\t\tcurrentPath?: string;\n\t\tturnCount?: number;\n\t\ttokens?: number;\n\t\ttoolCount?: number;\n\t\tnestedRoute?: NestedRouteInfo;\n\t\tnestedChildren?: NestedRunSummary[];\n\t\tinterrupt?: () => boolean;\n\t}>;\n\tlastForegroundControlId: string | null;\n\tpendingForegroundControlNotices?: Map<string, ReturnType<typeof setTimeout>>;\n\tcleanupTimers: Map<string, ReturnType<typeof setTimeout>>;\n\tlastUiContext: ExtensionContext | null;\n\tpoller: NodeJS.Timeout | null;\n\tcompletionSeen: Map<string, number>;\n\twatcher: FSWatcher | null;\n\twatcherRestartTimer: ReturnType<typeof setTimeout> | null;\n\tresultFileCoalescer: {\n\t\tschedule(file: string, delayMs?: number): boolean;\n\t\tclear(): void;\n\t};\n}\n\n// ============================================================================\n// Display\n// ============================================================================\n\nexport type DisplayItem = \n\t| { type: \"text\"; text: string } \n\t| { type: \"tool\"; name: string; args: Record<string, unknown> };\n\n// ============================================================================\n// Error Handling\n// ============================================================================\n\nexport interface ErrorInfo {\n\thasError: boolean;\n\texitCode?: number;\n\terrorType?: string;\n\tdetails?: string;\n}\n\nexport interface IntercomEventBus {\n\ton(channel: string, handler: (data: unknown) => void): () => void;\n\temit(channel: string, data: unknown): void;\n}\n\nexport const INTERCOM_DETACH_REQUEST_EVENT = \"pi-intercom:detach-request\";\nexport const INTERCOM_DETACH_RESPONSE_EVENT = \"pi-intercom:detach-response\";\nexport const SUBAGENT_ASYNC_STARTED_EVENT = \"subagent:async-started\";\nexport const SUBAGENT_ASYNC_COMPLETE_EVENT = \"subagent:async-complete\";\nexport const SUBAGENT_FOREGROUND_COMPLETE_EVENT = \"subagent:foreground-complete\";\nexport const SUBAGENT_CONTROL_EVENT = \"subagent:control-event\";\nexport const SUBAGENT_CONTROL_INTERCOM_EVENT = \"subagent:control-intercom\";\nexport const SUBAGENT_STEERING_NOTICE_EVENT = \"subagent:steering-notice\";\nexport const SUBAGENT_RESULT_INTERCOM_EVENT = \"subagent:result-intercom\";\nexport const SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT = \"subagent:result-intercom-delivery\";\n\n// ============================================================================\n// Execution Options\n// ============================================================================\n\nexport interface RunSyncOptions {\n\t/** Session id of the direct parent session for permission-system ask forwarding. */\n\tparentSessionId?: string;\n\tcwd?: string;\n\tsignal?: AbortSignal;\n\tinterruptSignal?: AbortSignal;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tallowIntercomDetach?: boolean;\n\tintercomEvents?: IntercomEventBus;\n\tonUpdate?: (r: import(\"@earendil-works/pi-agent-core\").AgentToolResult<Details>) => void;\n\tonControlEvent?: (event: ControlEvent) => void;\n\tonDetachedExit?: (result: SingleResult) => void;\n\tcontrolConfig?: ResolvedControlConfig;\n\tintercomSessionName?: string;\n\torchestratorIntercomTarget?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig?: ArtifactConfig;\n\trunId: string;\n\tindex?: number;\n\tsessionDir?: string;\n\tsessionFile?: string;\n\tshare?: boolean;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\tmaxSubagentDepth?: number;\n\t/** Effective parent wait-tool setting propagated to the child runtime. */\n\twaitToolEnabled?: boolean;\n\tnestedRoute?: NestedRouteInfo;\n\t/** Override the agent's default model (format: \"provider/id\" or just \"id\") */\n\tmodelOverride?: string;\n\t/** Override the agent's default thinking level for this run */\n\tthinkingOverride?: AgentConfig[\"thinking\"];\n\t/** Registry models available for heuristic bare-model resolution */\n\tavailableModels?: Array<{ provider: string; id: string; fullId: string }>;\n\t/** Current parent-session provider to prefer for ambiguous bare model ids */\n\tpreferredModelProvider?: string;\n\t/** Optional subagent model-scope enforcement for fallback candidates */\n\tmodelScope?: ModelScopeConfig;\n\t/** Skills to make available (overrides agent default if provided) */\n\tskills?: string[];\n\tstructuredOutput?: {\n\t\tschema: JsonSchemaObject;\n\t\tschemaPath: string;\n\t\toutputPath: string;\n\t};\n\tacceptance?: AcceptanceInput;\n\tacceptanceContext?: {\n\t\tmode?: SubagentRunMode;\n\t\tasync?: boolean;\n\t\tdynamic?: boolean;\n\t\tdynamicGroup?: boolean;\n\t};\n}\n\nexport type IntercomBridgeMode = \"off\" | \"fork-only\" | \"always\";\n\nexport interface IntercomBridgeConfig {\n\tmode?: IntercomBridgeMode;\n\tinstructionFile?: string;\n}\n\ninterface TopLevelParallelConfig {\n\tmaxTasks?: number;\n\tconcurrency?: number;\n}\n\ninterface ExtensionChainConfig {\n\tdynamicFanout?: {\n\t\tmaxItems?: number;\n\t};\n}\n\nexport interface ProactiveSkillSubagentsConfig {\n\tenabled?: boolean;\n\tminReferences?: number;\n\tmaxRecommendations?: number;\n\tpreferredAgent?: string;\n}\n\nexport type ToolDescriptionMode = \"full\" | \"compact\" | \"custom\";\n\nexport interface ScheduledRunsConfig {\n\tenabled?: boolean;\n\tmaxLatenessMs?: number;\n\tmaxPending?: number;\n}\n\nexport interface ExtensionConfig {\n\tasyncByDefault?: boolean;\n\t/** Show the above-editor async runs widget. Defaults to true. */\n\tasyncWidget?: boolean;\n\t/** Tool description variant registered for the parent-facing subagent tool. Defaults to full. */\n\ttoolDescriptionMode?: ToolDescriptionMode;\n\tforceTopLevelAsync?: boolean;\n\twaitTool?: WaitToolConfig;\n\tdefaultSessionDir?: string;\n\tsingleRunOutputBaseDir?: string;\n\tmaxSubagentDepth?: number;\n\t/** Optional cumulative session cap. Unset or 0 means unlimited. */\n\tmaxSubagentSpawnsPerSession?: number;\n\t/** Global cap on simultaneously-running subagent tasks within a single run. Defaults to 20. */\n\tglobalConcurrencyLimit?: number;\n\tcontrol?: ControlConfig;\n\tcompletionBatch?: CompletionBatchConfig;\n\tturnBudget?: TurnBudgetConfig;\n\ttoolBudget?: ToolBudgetConfig;\n\tparallel?: TopLevelParallelConfig;\n\tchain?: ExtensionChainConfig;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tintercomBridge?: IntercomBridgeConfig;\n\tproactiveSkillSubagents?: ProactiveSkillSubagentsConfig | false;\n\tscheduledRuns?: ScheduledRunsConfig;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nexport const DEFAULT_MAX_OUTPUT: Required<MaxOutputConfig> = {\n\tbytes: 200 * 1024,\n\tlines: 5000,\n};\n\nexport const DEFAULT_ARTIFACT_CONFIG: ArtifactConfig = {\n\tenabled: true,\n\tincludeInput: true,\n\tincludeOutput: true,\n\tincludeJsonl: false,\n\tincludeTranscript: true,\n\tincludeMetadata: true,\n\tcleanupDays: 7,\n};\n\nfunction sanitizeTempScopeSegment(value: string): string {\n\tconst sanitized = value\n\t\t.trim()\n\t\t.replace(/[^A-Za-z0-9._-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n\treturn sanitized || \"unknown\";\n}\n\nexport function resolveTempScopeId(options?: {\n\tenv?: NodeJS.ProcessEnv;\n\tgetuid?: (() => number) | undefined;\n\tuserInfo?: (() => { username?: string | null }) | undefined;\n\thomedir?: (() => string) | undefined;\n}): string {\n\tconst env = options?.env ?? process.env;\n\tconst getuid = options && Object.hasOwn(options, \"getuid\")\n\t\t? options.getuid\n\t\t: process.getuid?.bind(process);\n\tif (typeof getuid === \"function\") {\n\t\treturn `uid-${getuid()}`;\n\t}\n\n\tfor (const key of [\"USERNAME\", \"USER\", \"LOGNAME\"] as const) {\n\t\tconst value = env[key];\n\t\tif (value) return `user-${sanitizeTempScopeSegment(value)}`;\n\t}\n\n\tconst userInfo = options && Object.hasOwn(options, \"userInfo\")\n\t\t? options.userInfo\n\t\t: os.userInfo;\n\ttry {\n\t\tconst username = userInfo?.().username;\n\t\tif (username) return `user-${sanitizeTempScopeSegment(username)}`;\n\t} catch {\n\t\t// Fall through to home-directory-based scoping.\n\t}\n\n\tconst homedir = env.USERPROFILE ?? env.HOME;\n\tif (homedir) return `home-${sanitizeTempScopeSegment(homedir)}`;\n\n\tconst resolveHomedir = options && Object.hasOwn(options, \"homedir\")\n\t\t? options.homedir\n\t\t: os.homedir;\n\ttry {\n\t\tconst fallbackHomedir = resolveHomedir?.();\n\t\tif (fallbackHomedir) return `home-${sanitizeTempScopeSegment(fallbackHomedir)}`;\n\t} catch {\n\t\t// Fall through to the last-resort shared scope.\n\t}\n\n\treturn \"shared\";\n}\n\nconst MAX_PARALLEL = 8;\nexport const MAX_CONCURRENCY = 4;\nexport const TEMP_ROOT_DIR = path.join(os.tmpdir(), `pi-subagents-${resolveTempScopeId()}`);\nexport const RESULTS_DIR = path.join(TEMP_ROOT_DIR, \"async-subagent-results\");\nexport const ASYNC_DIR = path.join(TEMP_ROOT_DIR, \"async-subagent-runs\");\nexport const CHAIN_RUNS_DIR = path.join(TEMP_ROOT_DIR, \"chain-runs\");\nexport const TEMP_ARTIFACTS_DIR = path.join(TEMP_ROOT_DIR, \"artifacts\");\nexport const WIDGET_KEY = \"subagent-async\";\nexport const SLASH_RESULT_TYPE = \"subagent-slash-result\";\nexport const SLASH_TEXT_RESULT_TYPE = \"subagent-slash-text-result\";\nexport const SLASH_SUBAGENT_REQUEST_EVENT = \"subagent:slash:request\";\nexport const SLASH_SUBAGENT_STARTED_EVENT = \"subagent:slash:started\";\nexport const SLASH_SUBAGENT_RESPONSE_EVENT = \"subagent:slash:response\";\nexport const SLASH_SUBAGENT_UPDATE_EVENT = \"subagent:slash:update\";\nexport const SLASH_SUBAGENT_CANCEL_EVENT = \"subagent:slash:cancel\";\nexport const POLL_INTERVAL_MS = 250;\nexport const MAX_WIDGET_JOBS = 4;\nexport const DEFAULT_SUBAGENT_MAX_DEPTH = 2;\nexport const SUBAGENT_ACTIONS = [\"list\", \"get\", \"models\", \"create\", \"update\", \"delete\", \"eject\", \"disable\", \"enable\", \"reset\", \"status\", \"interrupt\", \"resume\", \"steer\", \"stop\", \"append-step\", \"doctor\", \"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\", \"schedule\", \"schedule-list\", \"schedule-status\", \"schedule-cancel\"] as const;\n\nexport const DEFAULT_FORK_PREAMBLE =\n\t\"You are a delegated subagent running from a fork of the parent session. \" +\n\t\"Treat the inherited conversation as reference-only context, not a live thread to continue. \" +\n\t\"Do not continue or answer prior messages as if they are waiting for a reply. \" +\n\t\"Your sole job is to execute the task below and return a focused result for that task using your tools.\";\n\nfunction normalizeTopLevelParallelValue(value: unknown): number | undefined {\n\tconst parsed = typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN;\n\tif (!Number.isInteger(parsed) || parsed < 1) return undefined;\n\treturn parsed;\n}\n\nexport function resolveTopLevelParallelMaxTasks(value: unknown): number {\n\treturn normalizeTopLevelParallelValue(value) ?? MAX_PARALLEL;\n}\n\nexport function resolveTopLevelParallelConcurrency(\n\toverride: unknown,\n\tconfigValue: unknown,\n): number {\n\treturn normalizeTopLevelParallelValue(override)\n\t\t?? normalizeTopLevelParallelValue(configValue)\n\t\t?? MAX_CONCURRENCY;\n}\n\nexport function getAsyncConfigPath(suffix: string): string {\n\treturn path.join(TEMP_ROOT_DIR, `async-cfg-${suffix}.json`);\n}\n\nexport function wrapForkTask(task: string, preamble?: string | false): string {\n\tif (preamble === false) return task;\n\tconst effectivePreamble = preamble ?? DEFAULT_FORK_PREAMBLE;\n\tconst wrappedPrefix = `${effectivePreamble}\\n\\nTask:\\n`;\n\tif (task.startsWith(wrappedPrefix)) return task;\n\treturn `${wrappedPrefix}${task}`;\n}\n\n// ============================================================================\n// Recursion Depth Guard\n// ============================================================================\n\nfunction normalizeNonNegativeInteger(value: unknown): number | undefined {\n\tconst parsed = typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN;\n\tif (!Number.isInteger(parsed) || parsed < 0) return undefined;\n\treturn parsed;\n}\n\nexport function normalizeMaxSubagentDepth(value: unknown): number | undefined {\n\treturn normalizeNonNegativeInteger(value);\n}\n\nexport function resolveCurrentMaxSubagentDepth(configMaxDepth?: number): number {\n\treturn normalizeMaxSubagentDepth(process.env.PI_SUBAGENT_MAX_DEPTH)\n\t\t?? normalizeMaxSubagentDepth(configMaxDepth)\n\t\t?? DEFAULT_SUBAGENT_MAX_DEPTH;\n}\n\nexport function resolveChildMaxSubagentDepth(parentMaxDepth: number, agentMaxDepth?: number): number {\n\tconst normalizedParent = normalizeMaxSubagentDepth(parentMaxDepth) ?? DEFAULT_SUBAGENT_MAX_DEPTH;\n\tconst normalizedAgent = normalizeMaxSubagentDepth(agentMaxDepth);\n\treturn normalizedAgent === undefined ? normalizedParent : Math.min(normalizedParent, normalizedAgent);\n}\n\nexport function checkSubagentDepth(configMaxDepth?: number): { blocked: boolean; depth: number; maxDepth: number } {\n\tconst depth = Number(process.env.PI_SUBAGENT_DEPTH ?? \"0\");\n\tconst maxDepth = resolveCurrentMaxSubagentDepth(configMaxDepth);\n\tconst blocked = Number.isFinite(depth) && depth >= maxDepth;\n\treturn { blocked, depth, maxDepth };\n}\n\nexport function getSubagentDepthEnv(maxDepth?: number): Record<string, string> {\n\tconst parentDepth = Number(process.env.PI_SUBAGENT_DEPTH ?? \"0\");\n\tconst nextDepth = Number.isFinite(parentDepth) ? parentDepth + 1 : 1;\n\treturn {\n\t\tPI_SUBAGENT_DEPTH: String(nextDepth),\n\t\tPI_SUBAGENT_MAX_DEPTH: String(normalizeMaxSubagentDepth(maxDepth) ?? resolveCurrentMaxSubagentDepth()),\n\t};\n}\n\nexport function normalizeMaxSubagentSpawnsPerSession(value: unknown): number | undefined {\n\treturn normalizeNonNegativeInteger(value);\n}\n\nexport function resolveMaxSubagentSpawnsPerSession(configMaxSpawns?: number): number | undefined {\n\tconst envMaxSpawns = normalizeMaxSubagentSpawnsPerSession(process.env.PI_SUBAGENT_MAX_SPAWNS_PER_SESSION);\n\tif (envMaxSpawns !== undefined) return envMaxSpawns === 0 ? undefined : envMaxSpawns;\n\tconst configuredMaxSpawns = normalizeMaxSubagentSpawnsPerSession(configMaxSpawns);\n\treturn configuredMaxSpawns === 0 ? undefined : configuredMaxSpawns;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nexport function truncateOutput(\n\toutput: string,\n\tconfig: Required<MaxOutputConfig>,\n\tartifactPath?: string,\n): TruncationResult {\n\tconst lines = output.split(\"\\n\");\n\tconst bytes = Buffer.byteLength(output, \"utf-8\");\n\n\tif (bytes <= config.bytes && lines.length <= config.lines) {\n\t\treturn { text: output, truncated: false };\n\t}\n\n\tlet truncatedLines = lines;\n\tif (lines.length > config.lines) {\n\t\ttruncatedLines = lines.slice(0, config.lines);\n\t}\n\n\tlet result = truncatedLines.join(\"\\n\");\n\tif (Buffer.byteLength(result, \"utf-8\") > config.bytes) {\n\t\tlet low = 0;\n\t\tlet high = result.length;\n\t\twhile (low < high) {\n\t\t\tconst mid = Math.floor((low + high + 1) / 2);\n\t\t\tif (Buffer.byteLength(result.slice(0, mid), \"utf-8\") <= config.bytes) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid - 1;\n\t\t\t}\n\t\t}\n\t\tresult = result.slice(0, low);\n\t}\n\n\tconst keptLines = result.split(\"\\n\").length;\n\tconst marker = `[TRUNCATED: showing first ${keptLines} of ${lines.length} lines, ${formatBytes(Buffer.byteLength(result))} of ${formatBytes(bytes)}${artifactPath ? ` - full output at ${artifactPath}` : \"\"}]\\n`;\n\n\treturn {\n\t\ttext: marker + result,\n\t\ttruncated: true,\n\t\toriginalBytes: bytes,\n\t\toriginalLines: lines.length,\n\t\tartifactPath,\n\t};\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/types.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * Type definitions for the subagent extension\n */\n\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport type { FSWatcher } from \"node:fs\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport type { ModelScopeConfig } from \"../runs/shared/model-scope.ts\";\n\n// ============================================================================\n// Basic Types\n// ============================================================================\n\nexport interface MaxOutputConfig {\n\tbytes?: number;\n\tlines?: number;\n}\n\nexport type OutputMode = \"inline\" | \"file-only\";\n\nexport type AcceptanceRole = \"read-only\" | \"writer\";\n\nexport type JsonSchemaObject = Record<string, unknown>;\n\nexport interface ChainOutputMapEntry {\n\ttext: string;\n\tstructured?: unknown;\n\tagent: string;\n\tstepIndex: number;\n}\n\nexport type ChainOutputMap = Record<string, ChainOutputMapEntry>;\n\nexport type WorkflowNodeStatus = \"pending\" | \"running\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\" | \"detached\";\n\nexport interface WorkflowGraphNode {\n\tid: string;\n\tkind: \"step\" | \"parallel-group\" | \"dynamic-parallel-group\" | \"agent\";\n\tagent?: string;\n\tphase?: string;\n\tlabel: string;\n\tstatus: WorkflowNodeStatus;\n\tflatIndex?: number;\n\tstepIndex?: number;\n\tchildren?: WorkflowGraphNode[];\n\tdynamic?: {\n\t\tsourceOutput: string;\n\t\tsourcePath: string;\n\t\titemName: string;\n\t\tmaxItems?: number;\n\t\tcollectAs?: string;\n\t};\n\titemKey?: string;\n\toutputName?: string;\n\tstructured?: boolean;\n\tacceptanceStatus?: AcceptanceLedgerStatus;\n\terror?: string;\n}\n\nexport interface WorkflowGraphSnapshot {\n\trunId: string;\n\tmode: \"chain\" | \"parallel\" | \"single\";\n\tphases: Array<{ title: string; nodeIds: string[] }>;\n\tnodes: WorkflowGraphNode[];\n\tcurrentNodeId?: string;\n}\n\nexport interface SavedOutputReference {\n\tpath: string;\n\tbytes: number;\n\tlines: number;\n\tmessage: string;\n}\n\ninterface TruncationResult {\n\ttext: string;\n\ttruncated: boolean;\n\toriginalBytes?: number;\n\toriginalLines?: number;\n\tartifactPath?: string;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tturns: number;\n}\n\nexport interface TurnBudgetConfig {\n\tmaxTurns: number;\n\tgraceTurns?: number;\n}\n\nexport interface ResolvedTurnBudget {\n\tmaxTurns: number;\n\tgraceTurns: number;\n}\n\nexport interface ToolBudgetConfig {\n\tsoft?: number;\n\thard: number;\n\tblock?: string[] | \"*\";\n}\n\nexport interface ResolvedToolBudget {\n\tsoft?: number;\n\thard: number;\n\tblock: string[] | \"*\";\n}\n\nexport type ToolBudgetOutcome = \"within-budget\" | \"soft-reached\" | \"hard-blocked\";\n\nexport interface ToolBudgetState extends ResolvedToolBudget {\n\toutcome: ToolBudgetOutcome;\n\ttoolCount: number;\n\tsoftReachedAt?: number;\n\thardReachedAt?: number;\n\tblockedTool?: string;\n}\n\nexport type TurnBudgetOutcome = \"within-budget\" | \"wrap-up-requested\" | \"exceeded\";\n\nexport interface TurnBudgetState extends ResolvedTurnBudget {\n\toutcome: TurnBudgetOutcome;\n\tturnCount: number;\n\twrapUpRequestedAtTurn?: number;\n\texceededAtTurn?: number;\n}\n\nexport interface TokenUsage {\n\tinput: number;\n\toutput: number;\n\ttotal: number;\n}\n\nexport type ActivityState = \"active_long_running\" | \"needs_attention\";\nexport type ControlEventType = \"active_long_running\" | \"needs_attention\";\nexport type ControlNotificationChannel = \"event\" | \"async\" | \"intercom\";\n\nexport interface ControlConfig {\n\tenabled?: boolean;\n\tneedsAttentionAfterMs?: number;\n\tactiveNoticeAfterMs?: number;\n\tactiveNoticeAfterTurns?: number;\n\tactiveNoticeAfterTokens?: number;\n\tfailedToolAttemptsBeforeAttention?: number;\n\tnotifyOn?: ControlEventType[];\n\tnotifyChannels?: ControlNotificationChannel[];\n}\n\nexport interface ResolvedControlConfig {\n\tenabled: boolean;\n\tneedsAttentionAfterMs: number;\n\tactiveNoticeAfterMs: number;\n\tactiveNoticeAfterTurns?: number;\n\tactiveNoticeAfterTokens?: number;\n\tfailedToolAttemptsBeforeAttention: number;\n\tnotifyOn: ControlEventType[];\n\tnotifyChannels: ControlNotificationChannel[];\n}\n\n/**\n * Smart completion batching for async-completion notifications. Successful\n * sibling completions are held briefly so they arrive as one grouped message;\n * failure and attention signals bypass grouping and always fire immediately.\n */\nexport interface CompletionBatchConfig {\n\tenabled?: boolean;\n\t/** Idle window after each arrival; resets on every new item. */\n\tdebounceMs?: number;\n\t/** Hard cap measured from the first item in a group. */\n\tmaxWaitMs?: number;\n\t/** Shorter idle window for straggler groups. */\n\tstragglerDebounceMs?: number;\n\t/** Shorter hard cap for straggler groups. */\n\tstragglerMaxWaitMs?: number;\n\t/** Arrivals within this window after an emit join a straggler group. */\n\tstragglerWindowMs?: number;\n}\n\nexport interface WaitToolConfigObject {\n\tenabled?: boolean;\n}\n\nexport type WaitToolConfig = boolean | WaitToolConfigObject;\n\nexport interface ControlEvent {\n\ttype: ControlEventType;\n\tfrom?: ActivityState;\n\tto: ActivityState;\n\tts: number;\n\tagent: string;\n\tindex?: number;\n\trunId: string;\n\tnestedRunId?: string;\n\tnestingPath?: NestedRunAddress[\"path\"];\n\tmessage: string;\n\treason?: \"idle\" | \"completion_guard\" | \"active_long_running\" | \"tool_failures\" | \"time_threshold\" | \"turn_threshold\" | \"token_threshold\";\n\tturns?: number;\n\ttokens?: number;\n\ttoolCount?: number;\n\tcurrentTool?: string;\n\tcurrentToolDurationMs?: number;\n\tcurrentPath?: string;\n\telapsedMs?: number;\n\trecentFailureSummary?: string;\n}\n\nexport type SubagentResultStatus = \"completed\" | \"failed\" | \"paused\" | \"stopped\" | \"detached\";\nexport type SubagentRunMode = \"single\" | \"parallel\" | \"chain\";\nexport const SUBAGENT_LIFECYCLE_ARTIFACT_VERSION = 2;\nexport type SubagentLifecycleArtifactVersion = typeof SUBAGENT_LIFECYCLE_ARTIFACT_VERSION;\n\nexport type SteeringActionState = \"delivered\" | \"scheduled\" | \"pending\" | \"partial\" | \"recovered\" | \"failed\";\nexport type SteeringTargetState = \"scheduled\" | \"routed\" | \"delivered\" | \"late\" | \"failed\" | \"recovered\";\n\nexport interface SteeringTargetStatus {\n\tindex: number;\n\tstate: SteeringTargetState;\n\troutedAt?: number;\n\tdeliveredAt?: number;\n\tlateDeliveredAt?: number;\n\tfailedAt?: number;\n\trecoveredAt?: number;\n\treason?: string;\n\treplacementRunId?: string;\n}\n\nexport interface SteeringRequestStatus {\n\tid: string;\n\trequestedAt: number;\n\tsource?: string;\n\tmessagePreview: string;\n\ttargets: SteeringTargetStatus[];\n}\n\nexport interface SteeringStatus {\n\trequested: number;\n\tscheduled: number;\n\tpending: number;\n\tdelivered: number;\n\tfailed: number;\n\trecovered: number;\n\tlastRequestedAt?: number;\n\tlastDeliveredAt?: number;\n\trecent: SteeringRequestStatus[];\n}\n\nexport interface SteerActionTarget {\n\tindex: number;\n\tstate: SteeringTargetState;\n\tdeliveredAt?: number;\n\tlateDeliveredAt?: number;\n\treason?: string;\n\treplacementRunId?: string;\n}\n\nexport interface SteerActionResult {\n\trequestId: string;\n\tstate: SteeringActionState;\n\tsourceRunId: string;\n\treplacementRunId?: string;\n\ttargets: SteerActionTarget[];\n}\n\nexport interface SteeringNotice {\n\ttype: \"subagent.steering.notice\";\n\tts: number;\n\trunId: string;\n\trequestId: string;\n\tstate: \"failed\" | \"partial\" | \"recovered\";\n\tmessage: string;\n\tcurrentSessionId?: string;\n}\n\nexport interface SteeringRecoveryDescriptor {\n\tversion: 1;\n\tsourceRunId: string;\n\tagent: string;\n\tsessionFile?: string;\n\tcwd: string;\n\tmodel?: string;\n\tfallbackModels?: string[];\n\tthinking?: string;\n\ttools?: string[];\n\textensions?: string[];\n\tsubagentOnlyExtensions?: string[];\n\tmcpDirectTools?: string[];\n\tsystemPrompt?: string;\n\tsystemPromptMode: \"append\" | \"replace\";\n\tinheritProjectContext: boolean;\n\tinheritSkills: boolean;\n\tskills?: string[];\n\tskillPath?: string[];\n\tagentFilePath?: string;\n\tcompletionGuard?: boolean;\n\tmemory?: { scope: \"project\" | \"user\"; path: string };\n\toutputPath?: string;\n\toutputMode: \"inline\" | \"file-only\";\n\tacceptance?: AcceptanceInput;\n\tcontrolConfig?: ResolvedControlConfig;\n\tabsoluteDeadlineAt?: number;\n\tinitialTurnBudget?: ResolvedTurnBudget;\n\tinitialToolBudget?: ResolvedToolBudget;\n\tmaxSubagentDepth: number;\n\tmaxOutput?: MaxOutputConfig;\n\tshare: boolean;\n\tsessionDir?: string;\n\tartifactsDir?: string;\n\tartifactConfig?: ArtifactConfig;\n}\n\nexport type PublicNestedStepSummary = Pick<\n\tNestedStepSummary,\n\t\"agent\" | \"status\" | \"sessionFile\" | \"transcriptPath\" | \"transcriptError\" | \"activityState\" | \"lastActivityAt\" | \"currentTool\" | \"currentToolStartedAt\" | \"currentPath\" | \"turnCount\" | \"toolCount\" | \"toolBudget\" | \"toolBudgetBlocked\" | \"startedAt\" | \"endedAt\" | \"error\" | \"timedOut\" | \"stopped\"\n> & {\n\tchildren?: PublicNestedRunSummary[];\n};\n\nexport type CostSummary = {\n\tinputTokens: number;\n\toutputTokens: number;\n\tcostUsd: number;\n};\n\nexport type PublicNestedRunSummary = Pick<\n\tNestedRunSummary,\n\t\"id\" | \"parentRunId\" | \"parentStepIndex\" | \"parentAgent\" | \"depth\" | \"path\" | \"asyncDir\" | \"sessionId\" | \"sessionFile\" | \"intercomTarget\" | \"ownerIntercomTarget\" | \"leafIntercomTarget\" | \"ownerState\" | \"mode\" | \"state\" | \"agent\" | \"agents\" | \"currentStep\" | \"chainStepCount\" | \"parallelGroups\" | \"activityState\" | \"lastActivityAt\" | \"currentTool\" | \"currentToolStartedAt\" | \"currentPath\" | \"turnCount\" | \"toolCount\" | \"toolBudget\" | \"toolBudgetBlocked\" | \"totalTokens\" | \"totalCost\" | \"startedAt\" | \"endedAt\" | \"lastUpdate\" | \"error\" | \"timeoutMs\" | \"deadlineAt\" | \"timedOut\" | \"stopped\" | \"turnBudget\" | \"turnBudgetExceeded\" | \"wrapUpRequested\"\n> & {\n\tsteps?: PublicNestedStepSummary[];\n\tchildren?: PublicNestedRunSummary[];\n};\n\nexport interface SubagentResultIntercomChild {\n\tagent: string;\n\tstatus: SubagentResultStatus;\n\tsummary: string;\n\tindex?: number;\n\tartifactPath?: string;\n\tsessionPath?: string;\n\tintercomTarget?: string;\n\tchildren?: PublicNestedRunSummary[];\n}\n\nexport interface SubagentResultIntercomPayload {\n\tto: string;\n\tmessage: string;\n\trequestId?: string;\n\trunId: string;\n\tmode: SubagentRunMode;\n\tstatus: SubagentResultStatus;\n\tsummary: string;\n\tsource: \"foreground\" | \"async\";\n\tchildren: SubagentResultIntercomChild[];\n\tasyncId?: string;\n\tasyncDir?: string;\n\tchainSteps?: number;\n\tagent?: string;\n\tindex?: number;\n\tartifactPath?: string;\n\tsessionPath?: string;\n}\n\n// ============================================================================\n// Progress Tracking\n// ============================================================================\n\nexport interface ChildWatchdogProgress {\n\tphase: \"idle\" | \"reviewing\" | \"autofollow\" | \"settling\" | \"stale\" | \"failed\";\n\tseq: number;\n\tlastUpdate: number;\n\tfollowUpPending: boolean;\n\treason?: string;\n\ttimedOut?: boolean;\n}\n\nexport interface AgentProgress {\n\tindex: number;\n\tagent: string;\n\tstatus: \"pending\" | \"running\" | \"completed\" | \"failed\" | \"detached\";\n\tactivityState?: ActivityState;\n\ttask: string;\n\tskills?: string[];\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolArgs?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\trecentTools: Array<{ tool: string; args: string; endMs: number }>;\n\trecentOutput: string[];\n\ttoolCount: number;\n\tturnCount?: number;\n\ttokens: number;\n\tdurationMs: number;\n\terror?: string;\n\tfailedTool?: string;\n\twatchdog?: ChildWatchdogProgress;\n}\n\nexport interface ToolCallSummary {\n\ttext: string;\n\texpandedText: string;\n}\n\ninterface ProgressSummary {\n\ttoolCount: number;\n\ttokens: number;\n\tdurationMs: number;\n}\n\n// ============================================================================\n// Results\n// ============================================================================\n\nexport interface ModelAttempt {\n\tmodel: string;\n\tsuccess: boolean;\n\texitCode?: number | null;\n\terror?: string;\n\tusage?: Usage;\n}\n\nexport type AcceptanceLevel = \"auto\" | \"none\" | \"attested\" | \"checked\" | \"verified\" | \"reviewed\";\n\nexport type AcceptanceEvidenceKind =\n\t| \"changed-files\"\n\t| \"tests-added\"\n\t| \"commands-run\"\n\t| \"validation-output\"\n\t| \"residual-risks\"\n\t| \"no-staged-files\"\n\t| \"diff-summary\"\n\t| \"review-findings\"\n\t| \"manual-notes\";\n\nexport interface AcceptanceGate {\n\tid: string;\n\tmust: string;\n\tevidence?: AcceptanceEvidenceKind[];\n\tseverity?: \"required\" | \"recommended\";\n}\n\nexport interface AcceptanceVerifyCommand {\n\tid: string;\n\tcommand: string;\n\ttimeoutMs?: number;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tallowFailure?: boolean;\n}\n\nexport interface AcceptanceReviewGate {\n\tagent?: string;\n\tfocus?: string;\n\trequired?: boolean;\n}\n\nexport interface AcceptanceConfig {\n\tlevel?: AcceptanceLevel;\n\tcriteria?: Array<string | AcceptanceGate>;\n\tevidence?: AcceptanceEvidenceKind[];\n\tverify?: AcceptanceVerifyCommand[];\n\treview?: AcceptanceReviewGate | false;\n\tstopRules?: string[];\n\treason?: string;\n}\n\n/** Bare \"none\" is not accepted: use { level: \"none\", reason: \"...\" }; false remains a deprecated shorthand. */\nexport type AcceptanceInput = Exclude<AcceptanceLevel, \"none\"> | false | AcceptanceConfig;\n\nexport interface ResolvedAcceptanceGate extends AcceptanceGate {\n\tid: string;\n\tmust: string;\n\tevidence: AcceptanceEvidenceKind[];\n\tseverity: \"required\" | \"recommended\";\n}\n\nexport interface ResolvedAcceptanceConfig {\n\tlevel: Exclude<AcceptanceLevel, \"auto\">;\n\texplicit: boolean;\n\tinferredReason: string[];\n\tcriteria: ResolvedAcceptanceGate[];\n\tevidence: AcceptanceEvidenceKind[];\n\tverify: AcceptanceVerifyCommand[];\n\treview?: AcceptanceReviewGate | false;\n\tstopRules: string[];\n\treason?: string;\n}\n\nexport interface AcceptanceReport {\n\tcriteriaSatisfied?: Array<{\n\t\tid?: string;\n\t\tstatus: \"satisfied\" | \"not-satisfied\" | \"not-applicable\";\n\t\tevidence: string;\n\t}>;\n\tchangedFiles?: string[];\n\ttestsAddedOrUpdated?: string[];\n\tcommandsRun?: Array<{\n\t\tcommand: string;\n\t\tresult: \"passed\" | \"failed\" | \"not-run\";\n\t\tsummary: string;\n\t}>;\n\tvalidationOutput?: string[];\n\tresidualRisks?: string[];\n\tnoStagedFiles?: boolean;\n\tdiffSummary?: string;\n\treviewFindings?: string[];\n\tmanualNotes?: string;\n\tnotes?: string;\n}\n\nexport type AcceptanceRuntimeCheckStatus = \"passed\" | \"failed\" | \"not-applicable\";\n\nexport interface AcceptanceRuntimeCheck {\n\tid: string;\n\tstatus: AcceptanceRuntimeCheckStatus;\n\tmessage: string;\n}\n\nexport interface AcceptanceVerifyResult {\n\tid: string;\n\tcommand: string;\n\tcwd?: string;\n\texitCode: number | null;\n\tstatus: \"passed\" | \"failed\" | \"timed-out\" | \"allowed-failure\";\n\tstdout?: string;\n\tstderr?: string;\n\tdurationMs: number;\n}\n\nexport interface AcceptanceReviewResult {\n\tstatus: \"no-blockers\" | \"blockers\" | \"needs-parent-decision\";\n\tfindings: Array<{\n\t\tseverity: \"blocker\" | \"non-blocking\";\n\t\tfile?: string;\n\t\tissue: string;\n\t\trationale: string;\n\t}>;\n}\n\nexport type AcceptanceLedgerStatus =\n\t| \"pending\"\n\t| \"not-required\"\n\t| \"claimed\"\n\t| \"attested\"\n\t| \"checked\"\n\t| \"verified\"\n\t| \"reviewed\"\n\t| \"accepted\"\n\t| \"rejected\";\n\nexport interface AcceptanceLedger {\n\tstatus: AcceptanceLedgerStatus;\n\texplicit: boolean;\n\teffectiveAcceptance: ResolvedAcceptanceConfig;\n\tinferredReason: string[];\n\tcriteria: ResolvedAcceptanceGate[];\n\tchildReport?: AcceptanceReport;\n\tchildReportParseError?: string;\n\truntimeChecks: AcceptanceRuntimeCheck[];\n\tverifyRuns: AcceptanceVerifyResult[];\n\treviewResult?: AcceptanceReviewResult;\n\tparentDecision?: {\n\t\tstatus: \"accepted\" | \"rejected\";\n\t\tat: string;\n\t\treason?: string;\n\t};\n}\n\nexport interface ProtocolOutputLimit {\n\tcode: \"protocol_output_limit\";\n\tstream: \"stdout\" | \"stderr\";\n\tlimitBytes: number;\n\tobservedBytes: number;\n\tdiagnosticPrefix: string;\n\tdiagnosticTail: string;\n}\n\nexport interface SingleResult {\n\tagent: string;\n\ttask: string;\n\texitCode: number;\n\tdetached?: boolean;\n\tdetachedReason?: string;\n\tinterrupted?: boolean;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tmessages?: Message[];\n\tusage: Usage;\n\tmodel?: string;\n\tattemptedModels?: string[];\n\tmodelAttempts?: ModelAttempt[];\n\tcontrolEvents?: ControlEvent[];\n\terror?: string;\n\tprotocolError?: ProtocolOutputLimit;\n\tsessionFile?: string;\n\tskills?: string[];\n\tskillsWarning?: string;\n\tprogress?: AgentProgress;\n\tprogressSummary?: ProgressSummary;\n\ttoolCalls?: ToolCallSummary[];\n\tartifactPaths?: ArtifactPaths;\n\ttruncation?: TruncationResult;\n\tfinalOutput?: string;\n\toutputMode?: OutputMode;\n\tsavedOutputPath?: string;\n\toutputReference?: SavedOutputReference;\n\toutputSaveError?: string;\n\tstructuredOutput?: unknown;\n\tstructuredOutputPath?: string;\n\tstructuredOutputSchemaPath?: string;\n\tacceptance?: AcceptanceLedger;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tchildren?: NestedRunSummary[];\n\twatchdog?: ChildWatchdogProgress;\n}\n\nexport interface Details {\n\tmode: SubagentRunMode | \"management\";\n\trunId?: string;\n\tcontext?: \"fresh\" | \"fork\";\n\tresults: SingleResult[];\n\tcontrolEvents?: ControlEvent[];\n\tsteering?: SteerActionResult;\n\tasyncId?: string;\n\tasyncDir?: string;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tprogress?: AgentProgress[];\n\tprogressSummary?: ProgressSummary;\n\tartifacts?: {\n\t\tdir: string;\n\t\tfiles: ArtifactPaths[];\n\t};\n\ttruncation?: {\n\t\ttruncated: boolean;\n\t\toriginalBytes?: number;\n\t\toriginalLines?: number;\n\t\tartifactPath?: string;\n\t};\n\t// Chain metadata for observability\n\tchainAgents?: string[]; // Agent names in order, e.g., [\"scout\", \"planner\"]\n\ttotalSteps?: number; // Total steps in chain\n\tcurrentStepIndex?: number; // 0-indexed current step (for running chains)\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\toutputs?: ChainOutputMap;\n\t// Aggregated child usage across all agents in the run\n\ttotalChildUsage?: Usage;\n\t// Aggregated cost across all agents in the run\n\ttotalCost?: CostSummary;\n}\n\n// ============================================================================\n// Artifacts\n// ============================================================================\n\nexport interface ArtifactPaths {\n\tinputPath: string;\n\toutputPath: string;\n\tjsonlPath: string;\n\ttranscriptPath: string;\n\tmetadataPath: string;\n}\n\nexport interface ArtifactConfig {\n\tenabled: boolean;\n\tincludeInput: boolean;\n\tincludeOutput: boolean;\n\tincludeJsonl: boolean;\n\tincludeTranscript?: boolean;\n\tincludeMetadata: boolean;\n\tcleanupDays: number;\n}\n\n// ============================================================================\n// Async Execution\n// ============================================================================\n\nexport interface AsyncParallelGroupStatus {\n\tstart: number;\n\tcount: number;\n\tstepIndex: number;\n}\n\nexport type NestedRunState = \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\nexport type NestedOwnerState = \"live\" | \"gone\" | \"unknown\";\n\nexport interface NestedRunAddress {\n\tid: string;\n\tparentRunId: string;\n\tparentStepIndex?: number;\n\tparentAgent?: string;\n\tdepth: number;\n\tpath: Array<{ runId: string; stepIndex?: number; agent?: string }>;\n}\n\nexport interface NestedStepSummary {\n\tagent: string;\n\tstatus: \"pending\" | \"running\" | \"complete\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\";\n\tsessionFile?: string;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tstartedAt?: number;\n\tendedAt?: number;\n\terror?: string;\n\twatchdog?: ChildWatchdogProgress;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tchildren?: NestedRunSummary[];\n}\n\nexport interface NestedRunSummary extends NestedRunAddress {\n\tasyncDir?: string;\n\tpid?: number;\n\tsessionId?: string;\n\tsessionFile?: string;\n\tintercomTarget?: string;\n\townerIntercomTarget?: string;\n\tleafIntercomTarget?: string;\n\townerState?: NestedOwnerState;\n\tcontrolInbox?: string;\n\tcapabilityToken?: string;\n\tmode?: SubagentRunMode;\n\tstate: NestedRunState;\n\tagent?: string;\n\tagents?: string[];\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps?: NestedStepSummary[];\n\tchildren?: NestedRunSummary[];\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tstartedAt?: number;\n\tendedAt?: number;\n\tlastUpdate?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\terror?: string;\n}\n\nexport interface NestedRouteInfo {\n\trootRunId: string;\n\teventSink: string;\n\tcontrolInbox: string;\n\tcapabilityToken: string;\n}\n\nexport interface AsyncStartedEvent {\n\tlifecycleArtifactVersion?: SubagentLifecycleArtifactVersion;\n\tid?: string;\n\tasyncDir?: string;\n\tpid?: number;\n\tsessionId?: string;\n\tmode?: SubagentRunMode;\n\tagent?: string;\n\tagents?: string[];\n\t/** Truncated first child task retained for backwards compatibility. */\n\ttask?: string;\n\t/** Workflow-level caller task, falling back to the first child task. */\n\tgoal?: string;\n\tchain?: string[];\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\tturnBudget?: TurnBudgetState;\n\tnestedRoute?: NestedRouteInfo;\n}\n\nexport interface AsyncStatus {\n\tlifecycleArtifactVersion?: SubagentLifecycleArtifactVersion;\n\trunId: string;\n\tsessionId?: string;\n\tmode: SubagentRunMode;\n\tisNested?: boolean;\n\tstate: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\terror?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tstartedAt: number;\n\tendedAt?: number;\n\tlastUpdate?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tpid?: number;\n\tcwd?: string;\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tpendingAppends?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tworkflowGraph?: WorkflowGraphSnapshot;\n\tsteps?: Array<{\n\t\tagent: string;\n\t\tphase?: string;\n\t\tlabel?: string;\n\t\toutputName?: string;\n\t\tstructured?: boolean;\n\t\tstatus: \"pending\" | \"running\" | \"complete\" | \"completed\" | \"failed\" | \"paused\" | \"stopped\";\n\t\tchildren?: NestedRunSummary[];\n\t\tsessionFile?: string;\n\t\ttranscriptPath?: string;\n\t\ttranscriptError?: string;\n\t\tactivityState?: ActivityState;\n\t\tlastActivityAt?: number;\n\t\tcurrentTool?: string;\n\t\tcurrentToolArgs?: string;\n\t\tcurrentToolStartedAt?: number;\n\t\tcurrentPath?: string;\n\t\trecentTools?: Array<{ tool: string; args: string; endMs: number }>;\n\t\trecentOutput?: string[];\n\t\tturnCount?: number;\n\t\ttoolCount?: number;\n\t\tstartedAt?: number;\n\t\tendedAt?: number;\n\t\tdurationMs?: number;\n\t\texitCode?: number | null;\n\t\ttimedOut?: boolean;\n\t\tstopped?: boolean;\n\t\tturnBudget?: TurnBudgetState;\n\t\tturnBudgetExceeded?: boolean;\n\t\twrapUpRequested?: boolean;\n\t\ttoolBudget?: ToolBudgetState;\n\t\ttoolBudgetBlocked?: boolean;\n\t\ttokens?: TokenUsage;\n\t\tskills?: string[];\n\t\tmodel?: string;\n\t\tthinking?: string;\n\t\tattemptedModels?: string[];\n\t\tmodelAttempts?: ModelAttempt[];\n\t\ttotalCost?: CostSummary;\n\t\tsteering?: SteeringStatus;\n\t\terror?: string;\n\t\tstructuredOutput?: unknown;\n\t\tstructuredOutputPath?: string;\n\t\tstructuredOutputSchemaPath?: string;\n\t\tacceptance?: AcceptanceLedger;\n\t\twatchdog?: ChildWatchdogProgress;\n\t}>;\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\ttotalCost?: CostSummary;\n\tsessionFile?: string;\n\toutputs?: ChainOutputMap;\n}\n\nexport type AsyncJobStep = NonNullable<AsyncStatus[\"steps\"]>[number] & {\n\tindex?: number;\n};\n\nexport interface AsyncJobState {\n\tasyncId: string;\n\tasyncDir: string;\n\tstatus: \"queued\" | \"running\" | \"complete\" | \"failed\" | \"paused\" | \"stopped\";\n\tpid?: number;\n\tsessionId?: string;\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\tsteering?: SteeringStatus;\n\tmode?: SubagentRunMode;\n\tagents?: string[];\n\tcurrentStep?: number;\n\tchainStepCount?: number;\n\tparallelGroups?: AsyncParallelGroupStatus[];\n\tsteps?: AsyncJobStep[];\n\tstepsTotal?: number;\n\trunningSteps?: number;\n\tcompletedSteps?: number;\n\thasParallelGroups?: boolean;\n\tactiveParallelGroup?: boolean;\n\tstartedAt?: number;\n\tupdatedAt?: number;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tturnBudget?: TurnBudgetState;\n\tturnBudgetExceeded?: boolean;\n\twrapUpRequested?: boolean;\n\ttoolBudget?: ToolBudgetState;\n\ttoolBudgetBlocked?: boolean;\n\tsessionDir?: string;\n\toutputFile?: string;\n\ttotalTokens?: TokenUsage;\n\tsessionFile?: string;\n\tcontrolEventCursor?: number;\n\tnestedRoute?: NestedRouteInfo;\n\tnestedChildren?: NestedRunSummary[];\n}\n\nexport interface ForegroundResumeChild {\n\tagent: string;\n\tindex: number;\n\tsessionFile?: string;\n\tstatus: SubagentResultStatus;\n\texitCode?: number;\n\terror?: string;\n\tfinalOutput?: string;\n\toutputMode?: OutputMode;\n\tsavedOutputPath?: string;\n\toutputSaveError?: string;\n\tartifactPaths?: ArtifactPaths;\n\ttranscriptPath?: string;\n\ttranscriptError?: string;\n\tdetachedReason?: string;\n\tacceptance?: AcceptanceLedger;\n\tupdatedAt?: number;\n}\n\nexport interface ForegroundResumeRun {\n\trunId: string;\n\tmode: SubagentRunMode;\n\tcwd: string;\n\t/** Originating parent session. Detached exits can outlive the active session. */\n\tsessionId?: string;\n\tupdatedAt: number;\n\tchildren: ForegroundResumeChild[];\n}\n\nexport interface SubagentState {\n\tbaseCwd: string;\n\tcurrentSessionId: string | null;\n\tsubagentInProgress?: boolean;\n\tsubagentSpawns?: { sessionId: string | null; count: number };\n\tasyncJobs: Map<string, AsyncJobState>;\n\t/** Current-session active and recent async runs for the native fleet inspector. */\n\tfleetJobs?: Map<string, AsyncJobState>;\n\tforegroundRuns?: Map<string, ForegroundResumeRun>;\n\tforegroundControls: Map<string, {\n\t\trunId: string;\n\t\tmode: SubagentRunMode;\n\t\tstartedAt: number;\n\t\tupdatedAt: number;\n\t\tcurrentAgent?: string;\n\t\tcurrentIndex?: number;\n\t\tcurrentActivityState?: ActivityState;\n\t\tlastActivityAt?: number;\n\t\tcurrentTool?: string;\n\t\tcurrentToolStartedAt?: number;\n\t\tcurrentPath?: string;\n\t\tturnCount?: number;\n\t\ttokens?: number;\n\t\ttoolCount?: number;\n\t\tnestedRoute?: NestedRouteInfo;\n\t\tnestedChildren?: NestedRunSummary[];\n\t\tinterrupt?: () => boolean;\n\t}>;\n\tlastForegroundControlId: string | null;\n\tpendingForegroundControlNotices?: Map<string, ReturnType<typeof setTimeout>>;\n\tcleanupTimers: Map<string, ReturnType<typeof setTimeout>>;\n\tlastUiContext: ExtensionContext | null;\n\tpoller: NodeJS.Timeout | null;\n\tcompletionSeen: Map<string, number>;\n\twatcher: FSWatcher | null;\n\twatcherRestartTimer: ReturnType<typeof setTimeout> | null;\n\tresultFileCoalescer: {\n\t\tschedule(file: string, delayMs?: number): boolean;\n\t\tclear(): void;\n\t};\n}\n\n// ============================================================================\n// Display\n// ============================================================================\n\nexport type DisplayItem = \n\t| { type: \"text\"; text: string } \n\t| { type: \"tool\"; name: string; args: Record<string, unknown> };\n\n// ============================================================================\n// Error Handling\n// ============================================================================\n\nexport interface ErrorInfo {\n\thasError: boolean;\n\texitCode?: number;\n\terrorType?: string;\n\tdetails?: string;\n}\n\nexport interface IntercomEventBus {\n\ton(channel: string, handler: (data: unknown) => void): () => void;\n\temit(channel: string, data: unknown): void;\n}\n\nexport const INTERCOM_DETACH_REQUEST_EVENT = \"pi-intercom:detach-request\";\nexport const INTERCOM_DETACH_RESPONSE_EVENT = \"pi-intercom:detach-response\";\nexport const SUBAGENT_ASYNC_STARTED_EVENT = \"subagent:async-started\";\nexport const SUBAGENT_ASYNC_COMPLETE_EVENT = \"subagent:async-complete\";\nexport const SUBAGENT_FOREGROUND_COMPLETE_EVENT = \"subagent:foreground-complete\";\nexport const SUBAGENT_CONTROL_EVENT = \"subagent:control-event\";\nexport const SUBAGENT_CONTROL_INTERCOM_EVENT = \"subagent:control-intercom\";\nexport const SUBAGENT_STEERING_NOTICE_EVENT = \"subagent:steering-notice\";\nexport const SUBAGENT_RESULT_INTERCOM_EVENT = \"subagent:result-intercom\";\nexport const SUBAGENT_RESULT_INTERCOM_DELIVERY_EVENT = \"subagent:result-intercom-delivery\";\n\n// ============================================================================\n// Execution Options\n// ============================================================================\n\nexport interface RunSyncOptions {\n\t/** Session id of the direct parent session for permission-system ask forwarding. */\n\tparentSessionId?: string;\n\tcwd?: string;\n\tsignal?: AbortSignal;\n\tinterruptSignal?: AbortSignal;\n\ttimeoutMs?: number;\n\tdeadlineAt?: number;\n\tturnBudget?: ResolvedTurnBudget;\n\ttoolBudget?: ResolvedToolBudget;\n\tallowIntercomDetach?: boolean;\n\tintercomEvents?: IntercomEventBus;\n\tonUpdate?: (r: import(\"@ashx-j/lunr-agent\").AgentToolResult<Details>) => void;\n\tonControlEvent?: (event: ControlEvent) => void;\n\tonDetachedExit?: (result: SingleResult) => void;\n\tcontrolConfig?: ResolvedControlConfig;\n\tintercomSessionName?: string;\n\torchestratorIntercomTarget?: string;\n\tmaxOutput?: MaxOutputConfig;\n\tartifactsDir?: string;\n\tartifactConfig?: ArtifactConfig;\n\trunId: string;\n\tindex?: number;\n\tsessionDir?: string;\n\tsessionFile?: string;\n\tshare?: boolean;\n\toutputPath?: string;\n\toutputMode?: OutputMode;\n\tmaxSubagentDepth?: number;\n\t/** Effective parent wait-tool setting propagated to the child runtime. */\n\twaitToolEnabled?: boolean;\n\tnestedRoute?: NestedRouteInfo;\n\t/** Override the agent's default model (format: \"provider/id\" or just \"id\") */\n\tmodelOverride?: string;\n\t/** Override the agent's default thinking level for this run */\n\tthinkingOverride?: AgentConfig[\"thinking\"];\n\t/** Registry models available for heuristic bare-model resolution */\n\tavailableModels?: Array<{ provider: string; id: string; fullId: string }>;\n\t/** Current parent-session provider to prefer for ambiguous bare model ids */\n\tpreferredModelProvider?: string;\n\t/** Optional subagent model-scope enforcement for fallback candidates */\n\tmodelScope?: ModelScopeConfig;\n\t/** Skills to make available (overrides agent default if provided) */\n\tskills?: string[];\n\tstructuredOutput?: {\n\t\tschema: JsonSchemaObject;\n\t\tschemaPath: string;\n\t\toutputPath: string;\n\t};\n\tacceptance?: AcceptanceInput;\n\tacceptanceContext?: {\n\t\tmode?: SubagentRunMode;\n\t\tasync?: boolean;\n\t\tdynamic?: boolean;\n\t\tdynamicGroup?: boolean;\n\t};\n}\n\nexport type IntercomBridgeMode = \"off\" | \"fork-only\" | \"always\";\n\nexport interface IntercomBridgeConfig {\n\tmode?: IntercomBridgeMode;\n\tinstructionFile?: string;\n}\n\ninterface TopLevelParallelConfig {\n\tmaxTasks?: number;\n\tconcurrency?: number;\n}\n\ninterface ExtensionChainConfig {\n\tdynamicFanout?: {\n\t\tmaxItems?: number;\n\t};\n}\n\nexport interface ProactiveSkillSubagentsConfig {\n\tenabled?: boolean;\n\tminReferences?: number;\n\tmaxRecommendations?: number;\n\tpreferredAgent?: string;\n}\n\nexport type ToolDescriptionMode = \"full\" | \"compact\" | \"custom\";\n\nexport interface ScheduledRunsConfig {\n\tenabled?: boolean;\n\tmaxLatenessMs?: number;\n\tmaxPending?: number;\n}\n\nexport interface ExtensionConfig {\n\tasyncByDefault?: boolean;\n\t/** Show the above-editor async runs widget. Defaults to true. */\n\tasyncWidget?: boolean;\n\t/** Tool description variant registered for the parent-facing subagent tool. Defaults to full. */\n\ttoolDescriptionMode?: ToolDescriptionMode;\n\tforceTopLevelAsync?: boolean;\n\twaitTool?: WaitToolConfig;\n\tdefaultSessionDir?: string;\n\tsingleRunOutputBaseDir?: string;\n\tmaxSubagentDepth?: number;\n\t/** Optional cumulative session cap. Unset or 0 means unlimited. */\n\tmaxSubagentSpawnsPerSession?: number;\n\t/** Global cap on simultaneously-running subagent tasks within a single run. Defaults to 20. */\n\tglobalConcurrencyLimit?: number;\n\tcontrol?: ControlConfig;\n\tcompletionBatch?: CompletionBatchConfig;\n\tturnBudget?: TurnBudgetConfig;\n\ttoolBudget?: ToolBudgetConfig;\n\tparallel?: TopLevelParallelConfig;\n\tchain?: ExtensionChainConfig;\n\tworktreeSetupHook?: string;\n\tworktreeSetupHookTimeoutMs?: number;\n\tworktreeBaseDir?: string;\n\tintercomBridge?: IntercomBridgeConfig;\n\tproactiveSkillSubagents?: ProactiveSkillSubagentsConfig | false;\n\tscheduledRuns?: ScheduledRunsConfig;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nexport const DEFAULT_MAX_OUTPUT: Required<MaxOutputConfig> = {\n\tbytes: 200 * 1024,\n\tlines: 5000,\n};\n\nexport const DEFAULT_ARTIFACT_CONFIG: ArtifactConfig = {\n\tenabled: true,\n\tincludeInput: true,\n\tincludeOutput: true,\n\tincludeJsonl: false,\n\tincludeTranscript: true,\n\tincludeMetadata: true,\n\tcleanupDays: 7,\n};\n\nfunction sanitizeTempScopeSegment(value: string): string {\n\tconst sanitized = value\n\t\t.trim()\n\t\t.replace(/[^A-Za-z0-9._-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n\treturn sanitized || \"unknown\";\n}\n\nexport function resolveTempScopeId(options?: {\n\tenv?: NodeJS.ProcessEnv;\n\tgetuid?: (() => number) | undefined;\n\tuserInfo?: (() => { username?: string | null }) | undefined;\n\thomedir?: (() => string) | undefined;\n}): string {\n\tconst env = options?.env ?? process.env;\n\tconst getuid = options && Object.hasOwn(options, \"getuid\")\n\t\t? options.getuid\n\t\t: process.getuid?.bind(process);\n\tif (typeof getuid === \"function\") {\n\t\treturn `uid-${getuid()}`;\n\t}\n\n\tfor (const key of [\"USERNAME\", \"USER\", \"LOGNAME\"] as const) {\n\t\tconst value = env[key];\n\t\tif (value) return `user-${sanitizeTempScopeSegment(value)}`;\n\t}\n\n\tconst userInfo = options && Object.hasOwn(options, \"userInfo\")\n\t\t? options.userInfo\n\t\t: os.userInfo;\n\ttry {\n\t\tconst username = userInfo?.().username;\n\t\tif (username) return `user-${sanitizeTempScopeSegment(username)}`;\n\t} catch {\n\t\t// Fall through to home-directory-based scoping.\n\t}\n\n\tconst homedir = env.USERPROFILE ?? env.HOME;\n\tif (homedir) return `home-${sanitizeTempScopeSegment(homedir)}`;\n\n\tconst resolveHomedir = options && Object.hasOwn(options, \"homedir\")\n\t\t? options.homedir\n\t\t: os.homedir;\n\ttry {\n\t\tconst fallbackHomedir = resolveHomedir?.();\n\t\tif (fallbackHomedir) return `home-${sanitizeTempScopeSegment(fallbackHomedir)}`;\n\t} catch {\n\t\t// Fall through to the last-resort shared scope.\n\t}\n\n\treturn \"shared\";\n}\n\nconst MAX_PARALLEL = 8;\nexport const MAX_CONCURRENCY = 4;\nexport const TEMP_ROOT_DIR = path.join(os.tmpdir(), `pi-subagents-${resolveTempScopeId()}`);\nexport const RESULTS_DIR = path.join(TEMP_ROOT_DIR, \"async-subagent-results\");\nexport const ASYNC_DIR = path.join(TEMP_ROOT_DIR, \"async-subagent-runs\");\nexport const CHAIN_RUNS_DIR = path.join(TEMP_ROOT_DIR, \"chain-runs\");\nexport const TEMP_ARTIFACTS_DIR = path.join(TEMP_ROOT_DIR, \"artifacts\");\nexport const WIDGET_KEY = \"subagent-async\";\nexport const SLASH_RESULT_TYPE = \"subagent-slash-result\";\nexport const SLASH_TEXT_RESULT_TYPE = \"subagent-slash-text-result\";\nexport const SLASH_SUBAGENT_REQUEST_EVENT = \"subagent:slash:request\";\nexport const SLASH_SUBAGENT_STARTED_EVENT = \"subagent:slash:started\";\nexport const SLASH_SUBAGENT_RESPONSE_EVENT = \"subagent:slash:response\";\nexport const SLASH_SUBAGENT_UPDATE_EVENT = \"subagent:slash:update\";\nexport const SLASH_SUBAGENT_CANCEL_EVENT = \"subagent:slash:cancel\";\nexport const POLL_INTERVAL_MS = 250;\nexport const MAX_WIDGET_JOBS = 4;\nexport const DEFAULT_SUBAGENT_MAX_DEPTH = 2;\nexport const SUBAGENT_ACTIONS = [\"list\", \"get\", \"models\", \"create\", \"update\", \"delete\", \"eject\", \"disable\", \"enable\", \"reset\", \"status\", \"interrupt\", \"resume\", \"steer\", \"stop\", \"append-step\", \"doctor\", \"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\", \"schedule\", \"schedule-list\", \"schedule-status\", \"schedule-cancel\"] as const;\n\nexport const DEFAULT_FORK_PREAMBLE =\n\t\"You are a delegated subagent running from a fork of the parent session. \" +\n\t\"Treat the inherited conversation as reference-only context, not a live thread to continue. \" +\n\t\"Do not continue or answer prior messages as if they are waiting for a reply. \" +\n\t\"Your sole job is to execute the task below and return a focused result for that task using your tools.\";\n\nfunction normalizeTopLevelParallelValue(value: unknown): number | undefined {\n\tconst parsed = typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN;\n\tif (!Number.isInteger(parsed) || parsed < 1) return undefined;\n\treturn parsed;\n}\n\nexport function resolveTopLevelParallelMaxTasks(value: unknown): number {\n\treturn normalizeTopLevelParallelValue(value) ?? MAX_PARALLEL;\n}\n\nexport function resolveTopLevelParallelConcurrency(\n\toverride: unknown,\n\tconfigValue: unknown,\n): number {\n\treturn normalizeTopLevelParallelValue(override)\n\t\t?? normalizeTopLevelParallelValue(configValue)\n\t\t?? MAX_CONCURRENCY;\n}\n\nexport function getAsyncConfigPath(suffix: string): string {\n\treturn path.join(TEMP_ROOT_DIR, `async-cfg-${suffix}.json`);\n}\n\nexport function wrapForkTask(task: string, preamble?: string | false): string {\n\tif (preamble === false) return task;\n\tconst effectivePreamble = preamble ?? DEFAULT_FORK_PREAMBLE;\n\tconst wrappedPrefix = `${effectivePreamble}\\n\\nTask:\\n`;\n\tif (task.startsWith(wrappedPrefix)) return task;\n\treturn `${wrappedPrefix}${task}`;\n}\n\n// ============================================================================\n// Recursion Depth Guard\n// ============================================================================\n\nfunction normalizeNonNegativeInteger(value: unknown): number | undefined {\n\tconst parsed = typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN;\n\tif (!Number.isInteger(parsed) || parsed < 0) return undefined;\n\treturn parsed;\n}\n\nexport function normalizeMaxSubagentDepth(value: unknown): number | undefined {\n\treturn normalizeNonNegativeInteger(value);\n}\n\nexport function resolveCurrentMaxSubagentDepth(configMaxDepth?: number): number {\n\treturn normalizeMaxSubagentDepth(process.env.PI_SUBAGENT_MAX_DEPTH)\n\t\t?? normalizeMaxSubagentDepth(configMaxDepth)\n\t\t?? DEFAULT_SUBAGENT_MAX_DEPTH;\n}\n\nexport function resolveChildMaxSubagentDepth(parentMaxDepth: number, agentMaxDepth?: number): number {\n\tconst normalizedParent = normalizeMaxSubagentDepth(parentMaxDepth) ?? DEFAULT_SUBAGENT_MAX_DEPTH;\n\tconst normalizedAgent = normalizeMaxSubagentDepth(agentMaxDepth);\n\treturn normalizedAgent === undefined ? normalizedParent : Math.min(normalizedParent, normalizedAgent);\n}\n\nexport function checkSubagentDepth(configMaxDepth?: number): { blocked: boolean; depth: number; maxDepth: number } {\n\tconst depth = Number(process.env.PI_SUBAGENT_DEPTH ?? \"0\");\n\tconst maxDepth = resolveCurrentMaxSubagentDepth(configMaxDepth);\n\tconst blocked = Number.isFinite(depth) && depth >= maxDepth;\n\treturn { blocked, depth, maxDepth };\n}\n\nexport function getSubagentDepthEnv(maxDepth?: number): Record<string, string> {\n\tconst parentDepth = Number(process.env.PI_SUBAGENT_DEPTH ?? \"0\");\n\tconst nextDepth = Number.isFinite(parentDepth) ? parentDepth + 1 : 1;\n\treturn {\n\t\tPI_SUBAGENT_DEPTH: String(nextDepth),\n\t\tPI_SUBAGENT_MAX_DEPTH: String(normalizeMaxSubagentDepth(maxDepth) ?? resolveCurrentMaxSubagentDepth()),\n\t};\n}\n\nexport function normalizeMaxSubagentSpawnsPerSession(value: unknown): number | undefined {\n\treturn normalizeNonNegativeInteger(value);\n}\n\nexport function resolveMaxSubagentSpawnsPerSession(configMaxSpawns?: number): number | undefined {\n\tconst envMaxSpawns = normalizeMaxSubagentSpawnsPerSession(process.env.PI_SUBAGENT_MAX_SPAWNS_PER_SESSION);\n\tif (envMaxSpawns !== undefined) return envMaxSpawns === 0 ? undefined : envMaxSpawns;\n\tconst configuredMaxSpawns = normalizeMaxSubagentSpawnsPerSession(configMaxSpawns);\n\treturn configuredMaxSpawns === 0 ? undefined : configuredMaxSpawns;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nfunction formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nexport function truncateOutput(\n\toutput: string,\n\tconfig: Required<MaxOutputConfig>,\n\tartifactPath?: string,\n): TruncationResult {\n\tconst lines = output.split(\"\\n\");\n\tconst bytes = Buffer.byteLength(output, \"utf-8\");\n\n\tif (bytes <= config.bytes && lines.length <= config.lines) {\n\t\treturn { text: output, truncated: false };\n\t}\n\n\tlet truncatedLines = lines;\n\tif (lines.length > config.lines) {\n\t\ttruncatedLines = lines.slice(0, config.lines);\n\t}\n\n\tlet result = truncatedLines.join(\"\\n\");\n\tif (Buffer.byteLength(result, \"utf-8\") > config.bytes) {\n\t\tlet low = 0;\n\t\tlet high = result.length;\n\t\twhile (low < high) {\n\t\t\tconst mid = Math.floor((low + high + 1) / 2);\n\t\t\tif (Buffer.byteLength(result.slice(0, mid), \"utf-8\") <= config.bytes) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid - 1;\n\t\t\t}\n\t\t}\n\t\tresult = result.slice(0, low);\n\t}\n\n\tconst keptLines = result.split(\"\\n\").length;\n\tconst marker = `[TRUNCATED: showing first ${keptLines} of ${lines.length} lines, ${formatBytes(Buffer.byteLength(result))} of ${formatBytes(bytes)}${artifactPath ? ` - full output at ${artifactPath}` : \"\"}]\\n`;\n\n\treturn {\n\t\ttext: marker + result,\n\t\ttruncated: true,\n\t\toriginalBytes: bytes,\n\t\toriginalLines: lines.length,\n\t\tartifactPath,\n\t};\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * General utility functions for the subagent extension
3
3
  */
4
- import type { Message } from "@earendil-works/pi-ai";
4
+ import type { Message } from "@ashx-j/lunr-ai";
5
5
  import type { AsyncStatus, Details, DisplayItem, ErrorInfo, SingleResult, Usage } from "./types.ts";
6
6
  export declare const PI_CODING_AGENT_PACKAGE_ROOT_ENV = "PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";
7
7
  export declare function resolveWatchPath(watchPath: string, nativeRealpath?: (filePath: string) => string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/utils.ts"],"names":[],"mappings":"AACA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAiB,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAoB,YAAY,EAAmB,KAAK,EAAE,MAAM,YAAY,CAAC;AAUtJ,eAAO,MAAM,gCAAgC,8CAA8C,CAAC;AAE5F,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAA+B,GACnE,MAAM,CAOR;AAqCD,wBAAgB,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnH;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAQD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrF;AASD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA2C/D;AAiDD;;GAEG;AACF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAavE;AAgBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA2B1D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,UAAU,CAAC,GAAG,MAAM,CAEpG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW,EAAE,CAY9E;AAwCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAW9D;AAeD,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CASzF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAS1E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,CAsElE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAqD5E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAyB/D;AAMD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["// @ts-nocheck\n/**\n * General utility functions for the subagent extension\n */\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { formatToolCall } from \"./formatters.ts\";\nimport type { AgentProgress, AsyncStatus, Details, DisplayItem, ErrorInfo, NestedRunSummary, SingleResult, ToolCallSummary, Usage } from \"./types.ts\";\n\n// ============================================================================\n// File System Utilities\n// ============================================================================\n\n// lunr: last-resort default was \".pi\" — lunr's config dir is .lunr. (The package.json\n// probe above normally resolves piConfig.configDir; this only fires when it fails.)\nconst DEFAULT_CONFIG_DIR_NAME = \".lunr\";\nconst PI_CODING_AGENT_PACKAGE_NAME = \"@earendil-works/pi-coding-agent\";\nexport const PI_CODING_AGENT_PACKAGE_ROOT_ENV = \"PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT\";\n\nexport function resolveWatchPath(\n\twatchPath: string,\n\tnativeRealpath: (filePath: string) => string = fs.realpathSync.native,\n): string {\n\t// libuv's Windows watcher cannot mix 8.3 registration paths with long event paths.\n\ttry {\n\t\treturn nativeRealpath(watchPath);\n\t} catch {\n\t\treturn watchPath;\n\t}\n}\n\nfunction validConfigDirName(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction readConfigDirNameFromPackageRoot(packageRoot: string | undefined): string | undefined {\n\tif (!packageRoot) return undefined;\n\ttry {\n\t\tconst pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, \"package.json\"), \"utf-8\")) as {\n\t\t\tname?: unknown;\n\t\t\tpiConfig?: { configDir?: unknown };\n\t\t};\n\t\tif (pkg.name !== PI_CODING_AGENT_PACKAGE_NAME) return undefined;\n\t\treturn validConfigDirName(pkg.piConfig?.configDir);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction resolveConfigDirNameFromPackageJson(entryPoint = process.argv[1], packageRoot = process.env[PI_CODING_AGENT_PACKAGE_ROOT_ENV]): string | undefined {\n\tconst packageRootValue = readConfigDirNameFromPackageRoot(packageRoot);\n\tif (packageRootValue) return packageRootValue;\n\tif (!entryPoint) return undefined;\n\ttry {\n\t\tlet dir = path.dirname(fs.realpathSync(entryPoint));\n\t\twhile (dir !== path.dirname(dir)) {\n\t\t\tconst value = readConfigDirNameFromPackageRoot(dir);\n\t\t\tif (value) return value;\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t} catch {\n\t\t// Package metadata lookup is best-effort; detached runners must not fail here.\n\t}\n\treturn undefined;\n}\n\nexport function resolveConfigDirName(codingAgentModule?: unknown, entryPoint?: string, packageRoot?: string): string {\n\tconst moduleValue = codingAgentModule && typeof codingAgentModule === \"object\"\n\t\t? validConfigDirName((codingAgentModule as { CONFIG_DIR_NAME?: unknown }).CONFIG_DIR_NAME)\n\t\t: undefined;\n\treturn moduleValue\n\t\t?? resolveConfigDirNameFromPackageJson(entryPoint, packageRoot)\n\t\t?? DEFAULT_CONFIG_DIR_NAME;\n}\n\nexport function getConfigDirName(): string {\n\treturn resolveConfigDirName();\n}\n\nexport function getProjectConfigDir(projectRoot: string): string {\n\treturn path.join(projectRoot, getConfigDirName());\n}\n\nexport function getAgentDir(): string {\n\tconst configured = process.env.PI_CODING_AGENT_DIR;\n\tif (configured === \"~\") return os.homedir();\n\tif (configured?.startsWith(\"~/\")) return path.join(os.homedir(), configured.slice(2));\n\treturn configured || path.join(os.homedir(), getConfigDirName(), \"agent\");\n}\n\nconst statusCache = new Map<string, { mtime: number; status: AsyncStatus }>();\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function resolveChildCwd(baseCwd: string, childCwd: string | undefined): string {\n\tif (!childCwd) return baseCwd;\n\treturn path.isAbsolute(childCwd) ? childCwd : path.resolve(baseCwd, childCwd);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\n/**\n * Read async job status from disk (with mtime-based caching)\n */\nexport function readStatus(asyncDir: string): AsyncStatus | null {\n\tconst statusPath = path.join(asyncDir, \"status.json\");\n\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(statusPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return null;\n\t\tthrow new Error(`Failed to inspect async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tconst cached = statusCache.get(statusPath);\n\tif (cached && cached.mtime === stat.mtimeMs) {\n\t\treturn cached.status;\n\t}\n\n\tlet content: string;\n\ttry {\n\t\tcontent = fs.readFileSync(statusPath, \"utf-8\");\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return null;\n\t\tthrow new Error(`Failed to read async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tlet status: AsyncStatus;\n\ttry {\n\t\tstatus = JSON.parse(content) as AsyncStatus;\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tstatusCache.set(statusPath, { mtime: stat.mtimeMs, status });\n\tif (statusCache.size > 50) {\n\t\tconst firstKey = statusCache.keys().next().value;\n\t\tif (firstKey) statusCache.delete(firstKey);\n\t}\n\treturn status;\n}\n\nconst outputTailCache = new Map<string, { mtime: number; size: number; lines: string[] }>();\n\n/**\n * Get the last N lines from an output file (with mtime/size-based caching)\n */\nfunction getOutputTail(outputFile: string | undefined, maxLines: number = 3): string[] {\n\tif (!outputFile) return [];\n\tlet fd: number | null = null;\n\ttry {\n\t\tconst stat = fs.statSync(outputFile);\n\t\tif (stat.size === 0) return [];\n\n\t\tconst cached = outputTailCache.get(outputFile);\n\t\tif (cached && cached.mtime === stat.mtimeMs && cached.size === stat.size) {\n\t\t\treturn cached.lines;\n\t\t}\n\n\t\tconst tailBytes = 4096;\n\t\tconst start = Math.max(0, stat.size - tailBytes);\n\t\tfd = fs.openSync(outputFile, \"r\");\n\t\tconst buffer = Buffer.alloc(Math.min(tailBytes, stat.size));\n\t\tfs.readSync(fd, buffer, 0, buffer.length, start);\n\t\tconst content = buffer.toString(\"utf-8\");\n\t\tconst allLines = content.split(\"\\n\").filter((l) => l.trim());\n\t\tconst lines = allLines.slice(-maxLines).map((l) => l.slice(0, 120) + (l.length > 120 ? \"...\" : \"\"));\n\n\t\toutputTailCache.set(outputFile, { mtime: stat.mtimeMs, size: stat.size, lines });\n\t\tif (outputTailCache.size > 20) {\n\t\t\tconst firstKey = outputTailCache.keys().next().value;\n\t\t\tif (firstKey) outputTailCache.delete(firstKey);\n\t\t}\n\n\t\treturn lines;\n\t} catch {\n\t\t// Output tails are UI-only hints; unreadable or missing files should render as no tail.\n\t\treturn [];\n\t} finally {\n\t\tif (fd !== null) {\n\t\t\ttry {\n\t\t\t\tfs.closeSync(fd);\n\t\t\t} catch {\n\t\t\t\t// Closing the best-effort tail file handle should not surface over the main status view.\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Get human-readable last activity time for a file\n */\n\texport function getLastActivity(outputFile: string | undefined): string {\n\tif (!outputFile) return \"\";\n\ttry {\n\t\tconst stat = fs.statSync(outputFile);\n\t\tconst ago = Date.now() - stat.mtimeMs;\n\t\tif (ago < 1000) return \"active now\";\n\t\tif (ago < 60000) return `active ${Math.floor(ago / 1000)}s ago`;\n\t\treturn `active ${Math.floor(ago / 60000)}m ago`;\n\t} catch {\n\t\t// Last-activity text is best effort; missing files should simply omit the hint.\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Find the latest session file in a directory\n */\nexport function findLatestSessionFile(sessionDir: string): string | null {\n\tif (!fs.existsSync(sessionDir)) return null;\n\tconst files = fs.readdirSync(sessionDir)\n\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t.map((f) => {\n\t\t\tconst filePath = path.join(sessionDir, f);\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tmtime: fs.statSync(filePath).mtimeMs,\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => b.mtime - a.mtime);\n\treturn files.length > 0 ? files[0].path : null;\n}\n\n/**\n * Write a prompt to a temporary file\n */\nfunction writePrompt(agent: string, prompt: string): { dir: string; path: string } {\n\tconst dir = fs.mkdtempSync(path.join(os.tmpdir(), \"pi-subagent-\"));\n\tconst p = path.join(dir, `${agent.replace(/[^\\w.-]/g, \"_\")}.md`);\n\tfs.writeFileSync(p, prompt, { mode: 0o600 });\n\treturn { dir, path: p };\n}\n\n// ============================================================================\n// Message Parsing Utilities\n// ============================================================================\n\n/**\n * Get the final text output from a list of messages\n */\nexport function getFinalOutput(messages: Message[]): string {\n\tconst validTextParts: string[] = [];\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role !== \"assistant\") continue;\n\t\tconst hasAssistantError = (\"errorMessage\" in msg && typeof msg.errorMessage === \"string\" && msg.errorMessage.length > 0)\n\t\t\t|| (\"stopReason\" in msg && msg.stopReason === \"error\");\n\t\tif (hasAssistantError) continue;\n\t\tconst messageText = msg.content\n\t\t\t.filter((part) => part.type === \"text\" && part.text.trim().length > 0)\n\t\t\t.map((part) => part.type === \"text\" ? part.text : \"\")\n\t\t\t.join(\"\\n\");\n\t\tfor (let j = msg.content.length - 1; j >= 0; j--) {\n\t\t\tconst part = msg.content[j];\n\t\t\tif (part.type !== \"text\" || part.text.trim().length === 0) continue;\n\t\t\tvalidTextParts.push(part.text);\n\t\t\tif (/```acceptance[-_]report\\s*\\n[\\s\\S]*?```/i.test(part.text)) return messageText;\n\t\t\tfor (const match of part.text.matchAll(/```(?:json|jsonc|json5)\\s*\\n([\\s\\S]*?)```/gi)) {\n\t\t\t\tconst body = match[1] ?? \"\";\n\t\t\t\tif (/\"(?:criteriaSatisfied|criteria_satisfied)\"/.test(body) && /\"(?:changedFiles|changed_files|testsAddedOrUpdated|tests_added_or_updated|commandsRun|commands_run|validationOutput|validation_output|residualRisks|residual_risks|noStagedFiles|no_staged_files|diffSummary|diff_summary|reviewFindings|review_findings|manualNotes|manual_notes)\"/.test(body)) {\n\t\t\t\t\treturn messageText;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (/ACCEPTANCE_REPORT\\s*:/i.test(part.text)) return messageText;\n\t\t}\n\t}\n\treturn validTextParts[0] ?? \"\";\n}\n\nexport function getSingleResultOutput(result: Pick<SingleResult, \"finalOutput\" | \"messages\">): string {\n\treturn result.finalOutput ?? getFinalOutput(result.messages ?? []);\n}\n\n/**\n * Extract display items (text and tool calls) from messages\n */\nexport function getDisplayItems(messages: Message[] | undefined): DisplayItem[] {\n\tif (!messages || messages.length === 0) return [];\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"tool\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nfunction compactCompletedProgress(progress: AgentProgress): AgentProgress {\n\tif (progress.status === \"running\") return progress;\n\treturn {\n\t\tindex: progress.index,\n\t\tagent: progress.agent,\n\t\tstatus: progress.status,\n\t\tactivityState: progress.activityState,\n\t\ttask: progress.task,\n\t\tskills: progress.skills,\n\t\ttoolCount: progress.toolCount,\n\t\ttokens: progress.tokens,\n\t\tdurationMs: progress.durationMs,\n\t\terror: progress.error,\n\t\tfailedTool: progress.failedTool,\n\t\trecentTools: [],\n\t\trecentOutput: [],\n\t};\n}\n\nfunction extractToolCallSummaries(messages: Message[] | undefined): ToolCallSummary[] {\n\tif (!messages?.length) return [];\n\tconst summaries: ToolCallSummary[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role !== \"assistant\") continue;\n\t\tfor (const part of msg.content) {\n\t\t\tif (part.type !== \"toolCall\") continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments\n\t\t\t\t: {};\n\t\t\tsummaries.push({\n\t\t\t\ttext: formatToolCall(part.name, args),\n\t\t\t\texpandedText: formatToolCall(part.name, args, true),\n\t\t\t});\n\t\t}\n\t}\n\treturn summaries;\n}\n\nexport function sumResultsUsage(results: SingleResult[]): Usage {\n\tconst usage: Usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\tfor (const result of results) {\n\t\tusage.input += result.usage.input;\n\t\tusage.output += result.usage.output;\n\t\tusage.cacheRead += result.usage.cacheRead;\n\t\tusage.cacheWrite += result.usage.cacheWrite;\n\t\tusage.cost += result.usage.cost;\n\t\tusage.turns += result.usage.turns;\n\t}\n\treturn usage;\n}\n\nfunction addNestedCost(total: NonNullable<Details[\"totalCost\"]>, children: NestedRunSummary[] | undefined): void {\n\tfor (const child of children ?? []) {\n\t\tif (child.totalCost) {\n\t\t\ttotal.inputTokens += child.totalCost.inputTokens;\n\t\t\ttotal.outputTokens += child.totalCost.outputTokens;\n\t\t\ttotal.costUsd += child.totalCost.costUsd;\n\t\t\tcontinue;\n\t\t}\n\t\taddNestedCost(total, child.children);\n\t\tfor (const step of child.steps ?? []) addNestedCost(total, step.children);\n\t}\n}\n\n/** Sum input tokens, output tokens, and cost across a set of SingleResults. */\nexport function sumResultsCost(results: SingleResult[]): NonNullable<Details[\"totalCost\"]> {\n\tconst total = { inputTokens: 0, outputTokens: 0, costUsd: 0 };\n\tfor (const result of results) {\n\t\ttotal.inputTokens += result.usage.input;\n\t\ttotal.outputTokens += result.usage.output;\n\t\ttotal.costUsd += result.usage.cost;\n\t\taddNestedCost(total, result.children);\n\t}\n\treturn total;\n}\n\nexport function compactForegroundResult(result: SingleResult): SingleResult {\n\tif (result.progress?.status === \"running\") return result;\n\tconst toolCalls = result.toolCalls?.length ? result.toolCalls : extractToolCallSummaries(result.messages);\n\treturn {\n\t\t...result,\n\t\tmessages: undefined,\n\t\tprogress: undefined,\n\t\ttoolCalls: toolCalls.length ? toolCalls : undefined,\n\t};\n}\n\nexport function compactForegroundDetails(details: Details): Details {\n\treturn {\n\t\t...details,\n\t\tresults: details.results.map(compactForegroundResult),\n\t\tprogress: details.progress\n\t\t\t? details.progress.map(compactCompletedProgress)\n\t\t\t: undefined,\n\t};\n}\n\n/**\n * Detect errors in subagent execution from messages (only errors with no subsequent success)\n */\nexport function detectSubagentError(messages: Message[]): ErrorInfo {\n\tlet lastAssistantTextIndex = -1;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tconst hasText = Array.isArray(msg.content) && msg.content.some(\n\t\t\t\t(c) => c.type === \"text\" && \"text\" in c && typeof c.text === \"string\" && c.text.trim().length > 0,\n\t\t\t);\n\t\t\tif (hasText) {\n\t\t\t\tlastAssistantTextIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst scanStart = lastAssistantTextIndex >= 0 ? lastAssistantTextIndex + 1 : 0;\n\n\tfor (let i = messages.length - 1; i >= scanStart; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role !== \"toolResult\") continue;\n\t\tconst toolName = \"toolName\" in msg && typeof msg.toolName === \"string\" ? msg.toolName : undefined;\n\t\tconst isError = \"isError\" in msg && msg.isError === true;\n\n\t\tif (isError) {\n\t\t\tconst text = msg.content.find((c) => c.type === \"text\");\n\t\t\tconst details = text && \"text\" in text ? text.text : undefined;\n\t\t\tconst exitMatch = details?.match(/exit(?:ed)?\\s*(?:with\\s*)?(?:code|status)?\\s*[:\\s]?\\s*(\\d+)/i);\n\t\t\treturn {\n\t\t\t\thasError: true,\n\t\t\t\texitCode: exitMatch ? parseInt(exitMatch[1], 10) : 1,\n\t\t\t\terrorType: toolName || \"tool\",\n\t\t\t\tdetails: details?.slice(0, 200),\n\t\t\t};\n\t\t}\n\n\t\tif (toolName !== \"bash\") continue;\n\n\t\tconst text = msg.content.find((c) => c.type === \"text\");\n\t\tif (!text || !(\"text\" in text)) continue;\n\t\tconst output = text.text;\n\n\t\tconst exitMatch = output.match(/exit(?:ed)?\\s*(?:with\\s*)?(?:code|status)?\\s*[:\\s]?\\s*(\\d+)/i);\n\t\tif (exitMatch) {\n\t\t\tconst code = parseInt(exitMatch[1], 10);\n\t\t\tif (code !== 0) {\n\t\t\t\treturn { hasError: true, exitCode: code, errorType: \"bash\", details: output.slice(0, 200) };\n\t\t\t}\n\t\t}\n\n\t\t// NOTE: These patterns can match legitimate output (grep results, logs,\n\t\t// testing). With the assistant-message check above, most false positives\n\t\t// are mitigated since the agent will have responded after routine errors.\n\t\tconst fatalPatterns = [\n\t\t\t/command not found/i,\n\t\t\t/permission denied/i,\n\t\t\t/no such file or directory/i,\n\t\t\t/segmentation fault/i,\n\t\t\t/killed|terminated/i,\n\t\t\t/out of memory/i,\n\t\t\t/connection refused/i,\n\t\t\t/timeout/i,\n\t\t];\n\t\tfor (const pattern of fatalPatterns) {\n\t\t\tif (pattern.test(output)) {\n\t\t\t\treturn { hasError: true, exitCode: 1, errorType: \"bash\", details: output.slice(0, 200) };\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { hasError: false };\n}\n\n/**\n * Extract a preview of tool arguments for display\n */\nexport function extractToolArgsPreview(args: Record<string, unknown>): string {\n\tconst truncatePreview = (value: string, maxLength: number): string =>\n\t\tvalue.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value;\n\n\tconst stringifyPreviewValue = (value: unknown): string | undefined => {\n\t\tif (typeof value === \"string\" && value.trim().length > 0) return value;\n\t\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\t\treturn undefined;\n\t};\n\n\tconst previewArray = (value: unknown): string | undefined => {\n\t\tif (!Array.isArray(value) || value.length === 0) return undefined;\n\t\tconst first = stringifyPreviewValue(value[0]);\n\t\tif (!first) return undefined;\n\t\tconst suffix = value.length > 1 ? ` (+${value.length - 1} more)` : \"\";\n\t\treturn `${first}${suffix}`;\n\t};\n\n\t// Handle MCP tool calls - show server/tool info\n\tif (args.tool && typeof args.tool === \"string\") {\n\t\tconst server = args.server && typeof args.server === \"string\" ? `${args.server}/` : \"\";\n\t\tconst toolArgs = args.args && typeof args.args === \"string\" ? ` ${args.args.slice(0, 40)}` : \"\";\n\t\treturn `${server}${args.tool}${toolArgs}`;\n\t}\n\n\tconst queriesPreview = previewArray(args.queries);\n\tif (queriesPreview) return truncatePreview(queriesPreview, 60);\n\tif (typeof args.query === \"string\" && args.query.trim().length > 0) return truncatePreview(args.query, 60);\n\tif (typeof args.workflow === \"string\" && args.workflow.trim().length > 0) return `workflow=${truncatePreview(args.workflow, 48)}`;\n\n\tif (typeof args.url === \"string\" && args.url.trim().length > 0) return truncatePreview(args.url, 60);\n\tconst urlsPreview = previewArray(args.urls);\n\tif (urlsPreview) return truncatePreview(urlsPreview, 60);\n\tif (typeof args.prompt === \"string\" && args.prompt.trim().length > 0) return truncatePreview(args.prompt, 60);\n\t\n\tconst previewKeys = [\"command\", \"path\", \"file_path\", \"pattern\", \"query\", \"url\", \"task\", \"describe\", \"search\"];\n\tfor (const key of previewKeys) {\n\t\tif (args[key] && typeof args[key] === \"string\") {\n\t\t\tconst value = args[key] as string;\n\t\t\treturn truncatePreview(value, 60);\n\t\t}\n\t}\n\t\n\t// Fallback: show first string value found\n\tfor (const [key, value] of Object.entries(args)) {\n\t\tconst arrayPreview = previewArray(value);\n\t\tif (arrayPreview) return `${key}=${truncatePreview(arrayPreview, 50)}`;\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\tconst preview = truncatePreview(value, 50);\n\t\t\treturn `${key}=${preview}`;\n\t\t}\n\t}\n\treturn \"\";\n}\n\n/**\n * Extract text content from various message content formats\n */\nexport function extractTextFromContent(content: unknown): string {\n\tif (!content) return \"\";\n\t// Handle string content directly\n\tif (typeof content === \"string\") return content;\n\t// Handle array content\n\tif (!Array.isArray(content)) return \"\";\n\tconst texts: string[] = [];\n\tfor (const part of content) {\n\t\tif (part && typeof part === \"object\") {\n\t\t\t// Handle { type: \"text\", text: \"...\" }\n\t\t\tif (\"type\" in part && part.type === \"text\" && \"text\" in part) {\n\t\t\t\ttexts.push(String(part.text));\n\t\t\t}\n\t\t\t// Handle { type: \"tool_result\", content: \"...\" }\n\t\t\telse if (\"type\" in part && part.type === \"tool_result\" && \"content\" in part) {\n\t\t\t\tconst inner = extractTextFromContent(part.content);\n\t\t\t\tif (inner) texts.push(inner);\n\t\t\t}\n\t\t\t// Handle { text: \"...\" } without type\n\t\t\telse if (\"text\" in part) {\n\t\t\t\ttexts.push(String(part.text));\n\t\t\t}\n\t\t}\n\t}\n\treturn texts.join(\"\\n\");\n}\n\n// ============================================================================\n// Concurrency Utilities\n// ============================================================================\n\nexport { mapConcurrent } from \"../runs/shared/parallel-utils.ts\";\n"]}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/utils.ts"],"names":[],"mappings":"AACA;;GAEG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAiB,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAoB,YAAY,EAAmB,KAAK,EAAE,MAAM,YAAY,CAAC;AAUtJ,eAAO,MAAM,gCAAgC,8CAA8C,CAAC;AAE5F,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAA+B,GACnE,MAAM,CAOR;AAqCD,wBAAgB,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnH;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAQD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrF;AASD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA2C/D;AAiDD;;GAEG;AACF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAavE;AAgBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA2B1D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,UAAU,CAAC,GAAG,MAAM,CAEpG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,WAAW,EAAE,CAY9E;AAwCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAW9D;AAeD,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CASzF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAS1E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,SAAS,CAsElE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAqD5E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAyB/D;AAMD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["// @ts-nocheck\n/**\n * General utility functions for the subagent extension\n */\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport { formatToolCall } from \"./formatters.ts\";\nimport type { AgentProgress, AsyncStatus, Details, DisplayItem, ErrorInfo, NestedRunSummary, SingleResult, ToolCallSummary, Usage } from \"./types.ts\";\n\n// ============================================================================\n// File System Utilities\n// ============================================================================\n\n// lunr: last-resort default was \".pi\" — lunr's config dir is .lunr. (The package.json\n// probe above normally resolves piConfig.configDir; this only fires when it fails.)\nconst DEFAULT_CONFIG_DIR_NAME = \".lunr\";\nconst PI_CODING_AGENT_PACKAGE_NAME = \"@ashx-j/lunr\";\nexport const PI_CODING_AGENT_PACKAGE_ROOT_ENV = \"PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT\";\n\nexport function resolveWatchPath(\n\twatchPath: string,\n\tnativeRealpath: (filePath: string) => string = fs.realpathSync.native,\n): string {\n\t// libuv's Windows watcher cannot mix 8.3 registration paths with long event paths.\n\ttry {\n\t\treturn nativeRealpath(watchPath);\n\t} catch {\n\t\treturn watchPath;\n\t}\n}\n\nfunction validConfigDirName(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction readConfigDirNameFromPackageRoot(packageRoot: string | undefined): string | undefined {\n\tif (!packageRoot) return undefined;\n\ttry {\n\t\tconst pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, \"package.json\"), \"utf-8\")) as {\n\t\t\tname?: unknown;\n\t\t\tpiConfig?: { configDir?: unknown };\n\t\t};\n\t\tif (pkg.name !== PI_CODING_AGENT_PACKAGE_NAME) return undefined;\n\t\treturn validConfigDirName(pkg.piConfig?.configDir);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction resolveConfigDirNameFromPackageJson(entryPoint = process.argv[1], packageRoot = process.env[PI_CODING_AGENT_PACKAGE_ROOT_ENV]): string | undefined {\n\tconst packageRootValue = readConfigDirNameFromPackageRoot(packageRoot);\n\tif (packageRootValue) return packageRootValue;\n\tif (!entryPoint) return undefined;\n\ttry {\n\t\tlet dir = path.dirname(fs.realpathSync(entryPoint));\n\t\twhile (dir !== path.dirname(dir)) {\n\t\t\tconst value = readConfigDirNameFromPackageRoot(dir);\n\t\t\tif (value) return value;\n\t\t\tdir = path.dirname(dir);\n\t\t}\n\t} catch {\n\t\t// Package metadata lookup is best-effort; detached runners must not fail here.\n\t}\n\treturn undefined;\n}\n\nexport function resolveConfigDirName(codingAgentModule?: unknown, entryPoint?: string, packageRoot?: string): string {\n\tconst moduleValue = codingAgentModule && typeof codingAgentModule === \"object\"\n\t\t? validConfigDirName((codingAgentModule as { CONFIG_DIR_NAME?: unknown }).CONFIG_DIR_NAME)\n\t\t: undefined;\n\treturn moduleValue\n\t\t?? resolveConfigDirNameFromPackageJson(entryPoint, packageRoot)\n\t\t?? DEFAULT_CONFIG_DIR_NAME;\n}\n\nexport function getConfigDirName(): string {\n\treturn resolveConfigDirName();\n}\n\nexport function getProjectConfigDir(projectRoot: string): string {\n\treturn path.join(projectRoot, getConfigDirName());\n}\n\nexport function getAgentDir(): string {\n\tconst configured = process.env.PI_CODING_AGENT_DIR;\n\tif (configured === \"~\") return os.homedir();\n\tif (configured?.startsWith(\"~/\")) return path.join(os.homedir(), configured.slice(2));\n\treturn configured || path.join(os.homedir(), getConfigDirName(), \"agent\");\n}\n\nconst statusCache = new Map<string, { mtime: number; status: AsyncStatus }>();\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function resolveChildCwd(baseCwd: string, childCwd: string | undefined): string {\n\tif (!childCwd) return baseCwd;\n\treturn path.isAbsolute(childCwd) ? childCwd : path.resolve(baseCwd, childCwd);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\n/**\n * Read async job status from disk (with mtime-based caching)\n */\nexport function readStatus(asyncDir: string): AsyncStatus | null {\n\tconst statusPath = path.join(asyncDir, \"status.json\");\n\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(statusPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return null;\n\t\tthrow new Error(`Failed to inspect async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tconst cached = statusCache.get(statusPath);\n\tif (cached && cached.mtime === stat.mtimeMs) {\n\t\treturn cached.status;\n\t}\n\n\tlet content: string;\n\ttry {\n\t\tcontent = fs.readFileSync(statusPath, \"utf-8\");\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return null;\n\t\tthrow new Error(`Failed to read async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tlet status: AsyncStatus;\n\ttry {\n\t\tstatus = JSON.parse(content) as AsyncStatus;\n\t} catch (error) {\n\t\tthrow new Error(`Failed to parse async status file '${statusPath}': ${getErrorMessage(error)}`, {\n\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t});\n\t}\n\n\tstatusCache.set(statusPath, { mtime: stat.mtimeMs, status });\n\tif (statusCache.size > 50) {\n\t\tconst firstKey = statusCache.keys().next().value;\n\t\tif (firstKey) statusCache.delete(firstKey);\n\t}\n\treturn status;\n}\n\nconst outputTailCache = new Map<string, { mtime: number; size: number; lines: string[] }>();\n\n/**\n * Get the last N lines from an output file (with mtime/size-based caching)\n */\nfunction getOutputTail(outputFile: string | undefined, maxLines: number = 3): string[] {\n\tif (!outputFile) return [];\n\tlet fd: number | null = null;\n\ttry {\n\t\tconst stat = fs.statSync(outputFile);\n\t\tif (stat.size === 0) return [];\n\n\t\tconst cached = outputTailCache.get(outputFile);\n\t\tif (cached && cached.mtime === stat.mtimeMs && cached.size === stat.size) {\n\t\t\treturn cached.lines;\n\t\t}\n\n\t\tconst tailBytes = 4096;\n\t\tconst start = Math.max(0, stat.size - tailBytes);\n\t\tfd = fs.openSync(outputFile, \"r\");\n\t\tconst buffer = Buffer.alloc(Math.min(tailBytes, stat.size));\n\t\tfs.readSync(fd, buffer, 0, buffer.length, start);\n\t\tconst content = buffer.toString(\"utf-8\");\n\t\tconst allLines = content.split(\"\\n\").filter((l) => l.trim());\n\t\tconst lines = allLines.slice(-maxLines).map((l) => l.slice(0, 120) + (l.length > 120 ? \"...\" : \"\"));\n\n\t\toutputTailCache.set(outputFile, { mtime: stat.mtimeMs, size: stat.size, lines });\n\t\tif (outputTailCache.size > 20) {\n\t\t\tconst firstKey = outputTailCache.keys().next().value;\n\t\t\tif (firstKey) outputTailCache.delete(firstKey);\n\t\t}\n\n\t\treturn lines;\n\t} catch {\n\t\t// Output tails are UI-only hints; unreadable or missing files should render as no tail.\n\t\treturn [];\n\t} finally {\n\t\tif (fd !== null) {\n\t\t\ttry {\n\t\t\t\tfs.closeSync(fd);\n\t\t\t} catch {\n\t\t\t\t// Closing the best-effort tail file handle should not surface over the main status view.\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Get human-readable last activity time for a file\n */\n\texport function getLastActivity(outputFile: string | undefined): string {\n\tif (!outputFile) return \"\";\n\ttry {\n\t\tconst stat = fs.statSync(outputFile);\n\t\tconst ago = Date.now() - stat.mtimeMs;\n\t\tif (ago < 1000) return \"active now\";\n\t\tif (ago < 60000) return `active ${Math.floor(ago / 1000)}s ago`;\n\t\treturn `active ${Math.floor(ago / 60000)}m ago`;\n\t} catch {\n\t\t// Last-activity text is best effort; missing files should simply omit the hint.\n\t\treturn \"\";\n\t}\n}\n\n/**\n * Find the latest session file in a directory\n */\nexport function findLatestSessionFile(sessionDir: string): string | null {\n\tif (!fs.existsSync(sessionDir)) return null;\n\tconst files = fs.readdirSync(sessionDir)\n\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t.map((f) => {\n\t\t\tconst filePath = path.join(sessionDir, f);\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tmtime: fs.statSync(filePath).mtimeMs,\n\t\t\t};\n\t\t})\n\t\t.sort((a, b) => b.mtime - a.mtime);\n\treturn files.length > 0 ? files[0].path : null;\n}\n\n/**\n * Write a prompt to a temporary file\n */\nfunction writePrompt(agent: string, prompt: string): { dir: string; path: string } {\n\tconst dir = fs.mkdtempSync(path.join(os.tmpdir(), \"pi-subagent-\"));\n\tconst p = path.join(dir, `${agent.replace(/[^\\w.-]/g, \"_\")}.md`);\n\tfs.writeFileSync(p, prompt, { mode: 0o600 });\n\treturn { dir, path: p };\n}\n\n// ============================================================================\n// Message Parsing Utilities\n// ============================================================================\n\n/**\n * Get the final text output from a list of messages\n */\nexport function getFinalOutput(messages: Message[]): string {\n\tconst validTextParts: string[] = [];\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role !== \"assistant\") continue;\n\t\tconst hasAssistantError = (\"errorMessage\" in msg && typeof msg.errorMessage === \"string\" && msg.errorMessage.length > 0)\n\t\t\t|| (\"stopReason\" in msg && msg.stopReason === \"error\");\n\t\tif (hasAssistantError) continue;\n\t\tconst messageText = msg.content\n\t\t\t.filter((part) => part.type === \"text\" && part.text.trim().length > 0)\n\t\t\t.map((part) => part.type === \"text\" ? part.text : \"\")\n\t\t\t.join(\"\\n\");\n\t\tfor (let j = msg.content.length - 1; j >= 0; j--) {\n\t\t\tconst part = msg.content[j];\n\t\t\tif (part.type !== \"text\" || part.text.trim().length === 0) continue;\n\t\t\tvalidTextParts.push(part.text);\n\t\t\tif (/```acceptance[-_]report\\s*\\n[\\s\\S]*?```/i.test(part.text)) return messageText;\n\t\t\tfor (const match of part.text.matchAll(/```(?:json|jsonc|json5)\\s*\\n([\\s\\S]*?)```/gi)) {\n\t\t\t\tconst body = match[1] ?? \"\";\n\t\t\t\tif (/\"(?:criteriaSatisfied|criteria_satisfied)\"/.test(body) && /\"(?:changedFiles|changed_files|testsAddedOrUpdated|tests_added_or_updated|commandsRun|commands_run|validationOutput|validation_output|residualRisks|residual_risks|noStagedFiles|no_staged_files|diffSummary|diff_summary|reviewFindings|review_findings|manualNotes|manual_notes)\"/.test(body)) {\n\t\t\t\t\treturn messageText;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (/ACCEPTANCE_REPORT\\s*:/i.test(part.text)) return messageText;\n\t\t}\n\t}\n\treturn validTextParts[0] ?? \"\";\n}\n\nexport function getSingleResultOutput(result: Pick<SingleResult, \"finalOutput\" | \"messages\">): string {\n\treturn result.finalOutput ?? getFinalOutput(result.messages ?? []);\n}\n\n/**\n * Extract display items (text and tool calls) from messages\n */\nexport function getDisplayItems(messages: Message[] | undefined): DisplayItem[] {\n\tif (!messages || messages.length === 0) return [];\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"tool\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\nfunction compactCompletedProgress(progress: AgentProgress): AgentProgress {\n\tif (progress.status === \"running\") return progress;\n\treturn {\n\t\tindex: progress.index,\n\t\tagent: progress.agent,\n\t\tstatus: progress.status,\n\t\tactivityState: progress.activityState,\n\t\ttask: progress.task,\n\t\tskills: progress.skills,\n\t\ttoolCount: progress.toolCount,\n\t\ttokens: progress.tokens,\n\t\tdurationMs: progress.durationMs,\n\t\terror: progress.error,\n\t\tfailedTool: progress.failedTool,\n\t\trecentTools: [],\n\t\trecentOutput: [],\n\t};\n}\n\nfunction extractToolCallSummaries(messages: Message[] | undefined): ToolCallSummary[] {\n\tif (!messages?.length) return [];\n\tconst summaries: ToolCallSummary[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role !== \"assistant\") continue;\n\t\tfor (const part of msg.content) {\n\t\t\tif (part.type !== \"toolCall\") continue;\n\t\t\tconst args = typeof part.arguments === \"object\" && part.arguments !== null && !Array.isArray(part.arguments)\n\t\t\t\t? part.arguments\n\t\t\t\t: {};\n\t\t\tsummaries.push({\n\t\t\t\ttext: formatToolCall(part.name, args),\n\t\t\t\texpandedText: formatToolCall(part.name, args, true),\n\t\t\t});\n\t\t}\n\t}\n\treturn summaries;\n}\n\nexport function sumResultsUsage(results: SingleResult[]): Usage {\n\tconst usage: Usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\tfor (const result of results) {\n\t\tusage.input += result.usage.input;\n\t\tusage.output += result.usage.output;\n\t\tusage.cacheRead += result.usage.cacheRead;\n\t\tusage.cacheWrite += result.usage.cacheWrite;\n\t\tusage.cost += result.usage.cost;\n\t\tusage.turns += result.usage.turns;\n\t}\n\treturn usage;\n}\n\nfunction addNestedCost(total: NonNullable<Details[\"totalCost\"]>, children: NestedRunSummary[] | undefined): void {\n\tfor (const child of children ?? []) {\n\t\tif (child.totalCost) {\n\t\t\ttotal.inputTokens += child.totalCost.inputTokens;\n\t\t\ttotal.outputTokens += child.totalCost.outputTokens;\n\t\t\ttotal.costUsd += child.totalCost.costUsd;\n\t\t\tcontinue;\n\t\t}\n\t\taddNestedCost(total, child.children);\n\t\tfor (const step of child.steps ?? []) addNestedCost(total, step.children);\n\t}\n}\n\n/** Sum input tokens, output tokens, and cost across a set of SingleResults. */\nexport function sumResultsCost(results: SingleResult[]): NonNullable<Details[\"totalCost\"]> {\n\tconst total = { inputTokens: 0, outputTokens: 0, costUsd: 0 };\n\tfor (const result of results) {\n\t\ttotal.inputTokens += result.usage.input;\n\t\ttotal.outputTokens += result.usage.output;\n\t\ttotal.costUsd += result.usage.cost;\n\t\taddNestedCost(total, result.children);\n\t}\n\treturn total;\n}\n\nexport function compactForegroundResult(result: SingleResult): SingleResult {\n\tif (result.progress?.status === \"running\") return result;\n\tconst toolCalls = result.toolCalls?.length ? result.toolCalls : extractToolCallSummaries(result.messages);\n\treturn {\n\t\t...result,\n\t\tmessages: undefined,\n\t\tprogress: undefined,\n\t\ttoolCalls: toolCalls.length ? toolCalls : undefined,\n\t};\n}\n\nexport function compactForegroundDetails(details: Details): Details {\n\treturn {\n\t\t...details,\n\t\tresults: details.results.map(compactForegroundResult),\n\t\tprogress: details.progress\n\t\t\t? details.progress.map(compactCompletedProgress)\n\t\t\t: undefined,\n\t};\n}\n\n/**\n * Detect errors in subagent execution from messages (only errors with no subsequent success)\n */\nexport function detectSubagentError(messages: Message[]): ErrorInfo {\n\tlet lastAssistantTextIndex = -1;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tconst hasText = Array.isArray(msg.content) && msg.content.some(\n\t\t\t\t(c) => c.type === \"text\" && \"text\" in c && typeof c.text === \"string\" && c.text.trim().length > 0,\n\t\t\t);\n\t\t\tif (hasText) {\n\t\t\t\tlastAssistantTextIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst scanStart = lastAssistantTextIndex >= 0 ? lastAssistantTextIndex + 1 : 0;\n\n\tfor (let i = messages.length - 1; i >= scanStart; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role !== \"toolResult\") continue;\n\t\tconst toolName = \"toolName\" in msg && typeof msg.toolName === \"string\" ? msg.toolName : undefined;\n\t\tconst isError = \"isError\" in msg && msg.isError === true;\n\n\t\tif (isError) {\n\t\t\tconst text = msg.content.find((c) => c.type === \"text\");\n\t\t\tconst details = text && \"text\" in text ? text.text : undefined;\n\t\t\tconst exitMatch = details?.match(/exit(?:ed)?\\s*(?:with\\s*)?(?:code|status)?\\s*[:\\s]?\\s*(\\d+)/i);\n\t\t\treturn {\n\t\t\t\thasError: true,\n\t\t\t\texitCode: exitMatch ? parseInt(exitMatch[1], 10) : 1,\n\t\t\t\terrorType: toolName || \"tool\",\n\t\t\t\tdetails: details?.slice(0, 200),\n\t\t\t};\n\t\t}\n\n\t\tif (toolName !== \"bash\") continue;\n\n\t\tconst text = msg.content.find((c) => c.type === \"text\");\n\t\tif (!text || !(\"text\" in text)) continue;\n\t\tconst output = text.text;\n\n\t\tconst exitMatch = output.match(/exit(?:ed)?\\s*(?:with\\s*)?(?:code|status)?\\s*[:\\s]?\\s*(\\d+)/i);\n\t\tif (exitMatch) {\n\t\t\tconst code = parseInt(exitMatch[1], 10);\n\t\t\tif (code !== 0) {\n\t\t\t\treturn { hasError: true, exitCode: code, errorType: \"bash\", details: output.slice(0, 200) };\n\t\t\t}\n\t\t}\n\n\t\t// NOTE: These patterns can match legitimate output (grep results, logs,\n\t\t// testing). With the assistant-message check above, most false positives\n\t\t// are mitigated since the agent will have responded after routine errors.\n\t\tconst fatalPatterns = [\n\t\t\t/command not found/i,\n\t\t\t/permission denied/i,\n\t\t\t/no such file or directory/i,\n\t\t\t/segmentation fault/i,\n\t\t\t/killed|terminated/i,\n\t\t\t/out of memory/i,\n\t\t\t/connection refused/i,\n\t\t\t/timeout/i,\n\t\t];\n\t\tfor (const pattern of fatalPatterns) {\n\t\t\tif (pattern.test(output)) {\n\t\t\t\treturn { hasError: true, exitCode: 1, errorType: \"bash\", details: output.slice(0, 200) };\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { hasError: false };\n}\n\n/**\n * Extract a preview of tool arguments for display\n */\nexport function extractToolArgsPreview(args: Record<string, unknown>): string {\n\tconst truncatePreview = (value: string, maxLength: number): string =>\n\t\tvalue.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value;\n\n\tconst stringifyPreviewValue = (value: unknown): string | undefined => {\n\t\tif (typeof value === \"string\" && value.trim().length > 0) return value;\n\t\tif (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\t\treturn undefined;\n\t};\n\n\tconst previewArray = (value: unknown): string | undefined => {\n\t\tif (!Array.isArray(value) || value.length === 0) return undefined;\n\t\tconst first = stringifyPreviewValue(value[0]);\n\t\tif (!first) return undefined;\n\t\tconst suffix = value.length > 1 ? ` (+${value.length - 1} more)` : \"\";\n\t\treturn `${first}${suffix}`;\n\t};\n\n\t// Handle MCP tool calls - show server/tool info\n\tif (args.tool && typeof args.tool === \"string\") {\n\t\tconst server = args.server && typeof args.server === \"string\" ? `${args.server}/` : \"\";\n\t\tconst toolArgs = args.args && typeof args.args === \"string\" ? ` ${args.args.slice(0, 40)}` : \"\";\n\t\treturn `${server}${args.tool}${toolArgs}`;\n\t}\n\n\tconst queriesPreview = previewArray(args.queries);\n\tif (queriesPreview) return truncatePreview(queriesPreview, 60);\n\tif (typeof args.query === \"string\" && args.query.trim().length > 0) return truncatePreview(args.query, 60);\n\tif (typeof args.workflow === \"string\" && args.workflow.trim().length > 0) return `workflow=${truncatePreview(args.workflow, 48)}`;\n\n\tif (typeof args.url === \"string\" && args.url.trim().length > 0) return truncatePreview(args.url, 60);\n\tconst urlsPreview = previewArray(args.urls);\n\tif (urlsPreview) return truncatePreview(urlsPreview, 60);\n\tif (typeof args.prompt === \"string\" && args.prompt.trim().length > 0) return truncatePreview(args.prompt, 60);\n\t\n\tconst previewKeys = [\"command\", \"path\", \"file_path\", \"pattern\", \"query\", \"url\", \"task\", \"describe\", \"search\"];\n\tfor (const key of previewKeys) {\n\t\tif (args[key] && typeof args[key] === \"string\") {\n\t\t\tconst value = args[key] as string;\n\t\t\treturn truncatePreview(value, 60);\n\t\t}\n\t}\n\t\n\t// Fallback: show first string value found\n\tfor (const [key, value] of Object.entries(args)) {\n\t\tconst arrayPreview = previewArray(value);\n\t\tif (arrayPreview) return `${key}=${truncatePreview(arrayPreview, 50)}`;\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\tconst preview = truncatePreview(value, 50);\n\t\t\treturn `${key}=${preview}`;\n\t\t}\n\t}\n\treturn \"\";\n}\n\n/**\n * Extract text content from various message content formats\n */\nexport function extractTextFromContent(content: unknown): string {\n\tif (!content) return \"\";\n\t// Handle string content directly\n\tif (typeof content === \"string\") return content;\n\t// Handle array content\n\tif (!Array.isArray(content)) return \"\";\n\tconst texts: string[] = [];\n\tfor (const part of content) {\n\t\tif (part && typeof part === \"object\") {\n\t\t\t// Handle { type: \"text\", text: \"...\" }\n\t\t\tif (\"type\" in part && part.type === \"text\" && \"text\" in part) {\n\t\t\t\ttexts.push(String(part.text));\n\t\t\t}\n\t\t\t// Handle { type: \"tool_result\", content: \"...\" }\n\t\t\telse if (\"type\" in part && part.type === \"tool_result\" && \"content\" in part) {\n\t\t\t\tconst inner = extractTextFromContent(part.content);\n\t\t\t\tif (inner) texts.push(inner);\n\t\t\t}\n\t\t\t// Handle { text: \"...\" } without type\n\t\t\telse if (\"text\" in part) {\n\t\t\t\ttexts.push(String(part.text));\n\t\t\t}\n\t\t}\n\t}\n\treturn texts.join(\"\\n\");\n}\n\n// ============================================================================\n// Concurrency Utilities\n// ============================================================================\n\nexport { mapConcurrent } from \"../runs/shared/parallel-utils.ts\";\n"]}
@@ -12,7 +12,7 @@ import { formatToolCall } from "./formatters.js";
12
12
  // lunr: last-resort default was ".pi" — lunr's config dir is .lunr. (The package.json
13
13
  // probe above normally resolves piConfig.configDir; this only fires when it fails.)
14
14
  const DEFAULT_CONFIG_DIR_NAME = ".lunr";
15
- const PI_CODING_AGENT_PACKAGE_NAME = "@earendil-works/pi-coding-agent";
15
+ const PI_CODING_AGENT_PACKAGE_NAME = "@ashx-j/lunr";
16
16
  export const PI_CODING_AGENT_PACKAGE_ROOT_ENV = "PI_SUBAGENTS_PI_CODING_AGENT_PACKAGE_ROOT";
17
17
  export function resolveWatchPath(watchPath, nativeRealpath = fs.realpathSync.native) {
18
18
  // libuv's Windows watcher cannot mix 8.3 registration paths with long event paths.