@ashx-j/lunr 0.2.21 → 0.2.23

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 (461) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/README.md +23 -5
  3. package/dist/builtin-extensions/index.d.ts.map +1 -1
  4. package/dist/builtin-extensions/index.js +1 -0
  5. package/dist/builtin-extensions/index.js.map +1 -1
  6. package/dist/builtin-extensions/lunr-browser.d.ts +9 -0
  7. package/dist/builtin-extensions/lunr-browser.d.ts.map +1 -0
  8. package/dist/builtin-extensions/lunr-browser.js +169 -0
  9. package/dist/builtin-extensions/lunr-browser.js.map +1 -0
  10. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  11. package/dist/builtin-extensions/lunr-todos.js +15 -0
  12. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  13. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  14. package/dist/builtin-extensions/pi-intercom/index.js +3 -0
  15. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  16. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js +5 -1
  19. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -2
  21. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +18 -5
  23. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
  25. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +3 -0
  27. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts +17 -0
  29. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts.map +1 -0
  30. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js +45 -0
  31. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js.map +1 -0
  32. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +4 -11
  34. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +4 -1
  36. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  37. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +160 -51
  38. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +5 -0
  41. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +2 -0
  43. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +3 -2
  45. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -0
  47. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js +2 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +3 -0
  51. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +11 -0
  53. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +41 -3
  56. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +4 -0
  59. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +3 -0
  62. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts +1 -0
  64. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js +3 -0
  66. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +1 -0
  71. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  72. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  73. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts +18 -0
  74. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -0
  75. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +48 -0
  76. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -0
  77. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-web-access/index.js +11 -7
  79. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  80. package/dist/cli/args.d.ts.map +1 -1
  81. package/dist/cli/args.js +2 -1
  82. package/dist/cli/args.js.map +1 -1
  83. package/dist/cli/install-cli.d.ts.map +1 -1
  84. package/dist/cli/install-cli.js +15 -45
  85. package/dist/cli/install-cli.js.map +1 -1
  86. package/dist/core/agent-session-runtime.d.ts +9 -0
  87. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  88. package/dist/core/agent-session-runtime.js +126 -29
  89. package/dist/core/agent-session-runtime.js.map +1 -1
  90. package/dist/core/agent-session.d.ts +22 -0
  91. package/dist/core/agent-session.d.ts.map +1 -1
  92. package/dist/core/agent-session.js +250 -105
  93. package/dist/core/agent-session.js.map +1 -1
  94. package/dist/core/browser/network.d.ts +9 -0
  95. package/dist/core/browser/network.d.ts.map +1 -0
  96. package/dist/core/browser/network.js +146 -0
  97. package/dist/core/browser/network.js.map +1 -0
  98. package/dist/core/browser/runtime.d.ts +24 -0
  99. package/dist/core/browser/runtime.d.ts.map +1 -0
  100. package/dist/core/browser/runtime.js +289 -0
  101. package/dist/core/browser/runtime.js.map +1 -0
  102. package/dist/core/browser/schema.d.ts +16 -0
  103. package/dist/core/browser/schema.d.ts.map +1 -0
  104. package/dist/core/browser/schema.js +36 -0
  105. package/dist/core/browser/schema.js.map +1 -0
  106. package/dist/core/browser/settings.d.ts +8 -0
  107. package/dist/core/browser/settings.d.ts.map +1 -0
  108. package/dist/core/browser/settings.js +30 -0
  109. package/dist/core/browser/settings.js.map +1 -0
  110. package/dist/core/browser/setup.d.ts +2 -0
  111. package/dist/core/browser/setup.d.ts.map +1 -0
  112. package/dist/core/browser/setup.js +16 -0
  113. package/dist/core/browser/setup.js.map +1 -0
  114. package/dist/core/customize.d.ts.map +1 -1
  115. package/dist/core/customize.js +15 -14
  116. package/dist/core/customize.js.map +1 -1
  117. package/dist/core/export-html/index.d.ts.map +1 -1
  118. package/dist/core/export-html/index.js +1 -1
  119. package/dist/core/export-html/index.js.map +1 -1
  120. package/dist/core/extensions/runner.d.ts +1 -0
  121. package/dist/core/extensions/runner.d.ts.map +1 -1
  122. package/dist/core/extensions/runner.js +1 -1
  123. package/dist/core/extensions/runner.js.map +1 -1
  124. package/dist/core/extensions/types.d.ts +1 -1
  125. package/dist/core/extensions/types.d.ts.map +1 -1
  126. package/dist/core/extensions/types.js.map +1 -1
  127. package/dist/core/install-features.d.ts.map +1 -1
  128. package/dist/core/install-features.js +10 -8
  129. package/dist/core/install-features.js.map +1 -1
  130. package/dist/core/memory-cap.d.ts.map +1 -1
  131. package/dist/core/memory-cap.js +5 -3
  132. package/dist/core/memory-cap.js.map +1 -1
  133. package/dist/core/model-tiers.d.ts.map +1 -1
  134. package/dist/core/model-tiers.js +9 -6
  135. package/dist/core/model-tiers.js.map +1 -1
  136. package/dist/core/permissions.d.ts.map +1 -1
  137. package/dist/core/permissions.js +9 -0
  138. package/dist/core/permissions.js.map +1 -1
  139. package/dist/core/plan-mode.d.ts.map +1 -1
  140. package/dist/core/plan-mode.js +3 -0
  141. package/dist/core/plan-mode.js.map +1 -1
  142. package/dist/core/process-registry.d.ts.map +1 -1
  143. package/dist/core/process-registry.js +6 -4
  144. package/dist/core/process-registry.js.map +1 -1
  145. package/dist/core/runtime-scope.d.ts +11 -0
  146. package/dist/core/runtime-scope.d.ts.map +1 -0
  147. package/dist/core/runtime-scope.js +3 -0
  148. package/dist/core/runtime-scope.js.map +1 -0
  149. package/dist/core/sdk.d.ts.map +1 -1
  150. package/dist/core/sdk.js +13 -0
  151. package/dist/core/sdk.js.map +1 -1
  152. package/dist/core/session-handoff.d.ts +35 -0
  153. package/dist/core/session-handoff.d.ts.map +1 -0
  154. package/dist/core/session-handoff.js +214 -0
  155. package/dist/core/session-handoff.js.map +1 -0
  156. package/dist/core/session-manager.d.ts +20 -0
  157. package/dist/core/session-manager.d.ts.map +1 -1
  158. package/dist/core/session-manager.js +184 -22
  159. package/dist/core/session-manager.js.map +1 -1
  160. package/dist/core/session-ownership.d.ts +28 -0
  161. package/dist/core/session-ownership.d.ts.map +1 -0
  162. package/dist/core/session-ownership.js +138 -0
  163. package/dist/core/session-ownership.js.map +1 -0
  164. package/dist/core/session-retention.d.ts.map +1 -1
  165. package/dist/core/session-retention.js +11 -2
  166. package/dist/core/session-retention.js.map +1 -1
  167. package/dist/core/settings-manager.d.ts +11 -0
  168. package/dist/core/settings-manager.d.ts.map +1 -1
  169. package/dist/core/settings-manager.js +27 -0
  170. package/dist/core/settings-manager.js.map +1 -1
  171. package/dist/core/slash-commands.d.ts.map +1 -1
  172. package/dist/core/slash-commands.js +2 -0
  173. package/dist/core/slash-commands.js.map +1 -1
  174. package/dist/core/subagent-wait-interruption.d.ts +11 -0
  175. package/dist/core/subagent-wait-interruption.d.ts.map +1 -0
  176. package/dist/core/subagent-wait-interruption.js +19 -0
  177. package/dist/core/subagent-wait-interruption.js.map +1 -0
  178. package/dist/core/system-prompt.d.ts.map +1 -1
  179. package/dist/core/system-prompt.js +7 -2
  180. package/dist/core/system-prompt.js.map +1 -1
  181. package/dist/core/todo-settings.d.ts +5 -0
  182. package/dist/core/todo-settings.d.ts.map +1 -0
  183. package/dist/core/todo-settings.js +7 -0
  184. package/dist/core/todo-settings.js.map +1 -0
  185. package/dist/core/tools/bash.d.ts.map +1 -1
  186. package/dist/core/tools/bash.js +4 -4
  187. package/dist/core/tools/bash.js.map +1 -1
  188. package/dist/core/tools/edit.d.ts.map +1 -1
  189. package/dist/core/tools/edit.js +5 -3
  190. package/dist/core/tools/edit.js.map +1 -1
  191. package/dist/core/tools/find.d.ts.map +1 -1
  192. package/dist/core/tools/find.js +4 -4
  193. package/dist/core/tools/find.js.map +1 -1
  194. package/dist/core/tools/grep.d.ts.map +1 -1
  195. package/dist/core/tools/grep.js +4 -4
  196. package/dist/core/tools/grep.js.map +1 -1
  197. package/dist/core/tools/ls.d.ts.map +1 -1
  198. package/dist/core/tools/ls.js +4 -4
  199. package/dist/core/tools/ls.js.map +1 -1
  200. package/dist/core/tools/read.d.ts.map +1 -1
  201. package/dist/core/tools/read.js +4 -4
  202. package/dist/core/tools/read.js.map +1 -1
  203. package/dist/core/tools/render-utils.d.ts +14 -5
  204. package/dist/core/tools/render-utils.d.ts.map +1 -1
  205. package/dist/core/tools/render-utils.js +34 -7
  206. package/dist/core/tools/render-utils.js.map +1 -1
  207. package/dist/core/tools/write.d.ts.map +1 -1
  208. package/dist/core/tools/write.js +4 -4
  209. package/dist/core/tools/write.js.map +1 -1
  210. package/dist/core/usage-service.d.ts.map +1 -1
  211. package/dist/core/usage-service.js +5 -3
  212. package/dist/core/usage-service.js.map +1 -1
  213. package/dist/gateway/adapters/discord.d.ts +12 -1
  214. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  215. package/dist/gateway/adapters/discord.js +112 -17
  216. package/dist/gateway/adapters/discord.js.map +1 -1
  217. package/dist/gateway/adapters/telegram.d.ts +4 -2
  218. package/dist/gateway/adapters/telegram.d.ts.map +1 -1
  219. package/dist/gateway/adapters/telegram.js +34 -11
  220. package/dist/gateway/adapters/telegram.js.map +1 -1
  221. package/dist/gateway/agent-bridge.d.ts +14 -3
  222. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  223. package/dist/gateway/agent-bridge.js +252 -60
  224. package/dist/gateway/agent-bridge.js.map +1 -1
  225. package/dist/gateway/approval.d.ts +1 -0
  226. package/dist/gateway/approval.d.ts.map +1 -1
  227. package/dist/gateway/approval.js +60 -18
  228. package/dist/gateway/approval.js.map +1 -1
  229. package/dist/gateway/authz.d.ts +2 -0
  230. package/dist/gateway/authz.d.ts.map +1 -1
  231. package/dist/gateway/authz.js +13 -0
  232. package/dist/gateway/authz.js.map +1 -1
  233. package/dist/gateway/buttons.d.ts +3 -1
  234. package/dist/gateway/buttons.d.ts.map +1 -1
  235. package/dist/gateway/buttons.js +18 -3
  236. package/dist/gateway/buttons.js.map +1 -1
  237. package/dist/gateway/command.d.ts.map +1 -1
  238. package/dist/gateway/command.js +49 -4
  239. package/dist/gateway/command.js.map +1 -1
  240. package/dist/gateway/commands.d.ts.map +1 -1
  241. package/dist/gateway/commands.js +18 -3
  242. package/dist/gateway/commands.js.map +1 -1
  243. package/dist/gateway/config.d.ts +5 -0
  244. package/dist/gateway/config.d.ts.map +1 -1
  245. package/dist/gateway/config.js +5 -0
  246. package/dist/gateway/config.js.map +1 -1
  247. package/dist/gateway/conversations.d.ts +14 -0
  248. package/dist/gateway/conversations.d.ts.map +1 -0
  249. package/dist/gateway/conversations.js +30 -0
  250. package/dist/gateway/conversations.js.map +1 -0
  251. package/dist/gateway/download.d.ts +2 -0
  252. package/dist/gateway/download.d.ts.map +1 -0
  253. package/dist/gateway/download.js +36 -0
  254. package/dist/gateway/download.js.map +1 -0
  255. package/dist/gateway/index.d.ts.map +1 -1
  256. package/dist/gateway/index.js +85 -26
  257. package/dist/gateway/index.js.map +1 -1
  258. package/dist/gateway/mobile-commands.d.ts +24 -0
  259. package/dist/gateway/mobile-commands.d.ts.map +1 -0
  260. package/dist/gateway/mobile-commands.js +422 -0
  261. package/dist/gateway/mobile-commands.js.map +1 -0
  262. package/dist/gateway/presenter.d.ts +16 -0
  263. package/dist/gateway/presenter.d.ts.map +1 -0
  264. package/dist/gateway/presenter.js +210 -0
  265. package/dist/gateway/presenter.js.map +1 -0
  266. package/dist/gateway/router.d.ts +1 -0
  267. package/dist/gateway/router.d.ts.map +1 -1
  268. package/dist/gateway/router.js +32 -3
  269. package/dist/gateway/router.js.map +1 -1
  270. package/dist/gateway/service.d.ts +46 -0
  271. package/dist/gateway/service.d.ts.map +1 -0
  272. package/dist/gateway/service.js +395 -0
  273. package/dist/gateway/service.js.map +1 -0
  274. package/dist/gateway/setup.d.ts +4 -0
  275. package/dist/gateway/setup.d.ts.map +1 -0
  276. package/dist/gateway/setup.js +146 -0
  277. package/dist/gateway/setup.js.map +1 -0
  278. package/dist/gateway/types.d.ts +4 -2
  279. package/dist/gateway/types.d.ts.map +1 -1
  280. package/dist/gateway/types.js.map +1 -1
  281. package/dist/index.d.ts +2 -0
  282. package/dist/index.d.ts.map +1 -1
  283. package/dist/index.js +2 -0
  284. package/dist/index.js.map +1 -1
  285. package/dist/main.d.ts.map +1 -1
  286. package/dist/main.js +2 -1
  287. package/dist/main.js.map +1 -1
  288. package/dist/modes/interactive/components/assistant-message.d.ts +19 -2
  289. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  290. package/dist/modes/interactive/components/assistant-message.js +78 -17
  291. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  292. package/dist/modes/interactive/components/copyable-text.d.ts +27 -0
  293. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/copyable-text.js +156 -0
  295. package/dist/modes/interactive/components/copyable-text.js.map +1 -0
  296. package/dist/modes/interactive/components/custom-entry.d.ts +1 -0
  297. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  298. package/dist/modes/interactive/components/custom-entry.js +8 -0
  299. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  300. package/dist/modes/interactive/components/custom-message.d.ts +1 -0
  301. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  302. package/dist/modes/interactive/components/custom-message.js +8 -0
  303. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  304. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  305. package/dist/modes/interactive/components/session-selector.js +16 -0
  306. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  307. package/dist/modes/interactive/components/settings-selector.d.ts +8 -1
  308. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  309. package/dist/modes/interactive/components/settings-selector.js +51 -0
  310. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  311. package/dist/modes/interactive/components/thinking-tail.d.ts +9 -2
  312. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  313. package/dist/modes/interactive/components/thinking-tail.js +43 -1
  314. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  315. package/dist/modes/interactive/components/tool-execution.d.ts +4 -3
  316. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  317. package/dist/modes/interactive/components/tool-execution.js +34 -45
  318. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  319. package/dist/modes/interactive/interactive-mode.d.ts +9 -0
  320. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  321. package/dist/modes/interactive/interactive-mode.js +267 -44
  322. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  323. package/dist/modes/interactive/theme/theme.d.ts +1 -0
  324. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  325. package/dist/modes/interactive/theme/theme.js +23 -0
  326. package/dist/modes/interactive/theme/theme.js.map +1 -1
  327. package/dist/node-runtime/agent-session-services-GZVSOGYR.js +49 -0
  328. package/dist/node-runtime/{builtin-extensions-JCOPAAB5.js → builtin-extensions-QVCXNQT4.js} +6 -5
  329. package/dist/node-runtime/{chunk-LTYWTR3V.js → chunk-2MI5OPMN.js} +17 -2
  330. package/dist/node-runtime/{chunk-W3CVH5RX.js → chunk-2TKODGBZ.js} +11 -6
  331. package/dist/node-runtime/chunk-4EULYYR4.js +62 -0
  332. package/dist/node-runtime/{chunk-6N22HULO.js → chunk-5D7LC2ZQ.js} +7 -2
  333. package/dist/node-runtime/{chunk-KBKMCJDU.js → chunk-5ZQXRPMC.js} +19 -4
  334. package/dist/node-runtime/{chunk-BOHIDQT4.js → chunk-6VYZ5UFP.js} +1 -1
  335. package/dist/node-runtime/chunk-AZJHNQKQ.js +205 -0
  336. package/dist/node-runtime/{chunk-A3KMVBZV.js → chunk-BBUVIEZB.js} +1 -10
  337. package/dist/node-runtime/{chunk-IRPJXI6U.js → chunk-BX2RB477.js} +1 -1
  338. package/dist/node-runtime/chunk-CCCN2UCX.js +14 -0
  339. package/dist/node-runtime/{chunk-25I2BHAA.js → chunk-CSUZVNYE.js} +1 -1
  340. package/dist/node-runtime/chunk-DD5YWFSJ.js +708 -0
  341. package/dist/node-runtime/chunk-DQMGU675.js +3409 -0
  342. package/dist/node-runtime/{chunk-QZMODZQ2.js → chunk-E24EO34J.js} +2 -1
  343. package/dist/node-runtime/chunk-EKVFP6YF.js +355 -0
  344. package/dist/node-runtime/chunk-GJ2RDBRL.js +672 -0
  345. package/dist/node-runtime/{chunk-W3SILANP.js → chunk-GMHJCCEN.js} +8 -8
  346. package/dist/node-runtime/{chunk-DDWHZ633.js → chunk-GS42T6MX.js} +1 -1
  347. package/dist/node-runtime/chunk-GS66LV4M.js +2830 -0
  348. package/dist/node-runtime/chunk-H4K3JDRB.js +47 -0
  349. package/dist/node-runtime/{chunk-2SJB2AWP.js → chunk-HMBGROQK.js} +3 -3
  350. package/dist/node-runtime/{chunk-GB2MGFLI.js → chunk-HPUP7E4T.js} +216 -201
  351. package/dist/node-runtime/{chunk-YMEAYRBE.js → chunk-HTFRRDSF.js} +2 -7
  352. package/dist/node-runtime/{chunk-OPEK5RRY.js → chunk-IF24A3FH.js} +1 -1
  353. package/dist/node-runtime/chunk-IMLCWLPI.js +9 -0
  354. package/dist/node-runtime/chunk-KKUTQQV7.js +144 -0
  355. package/dist/node-runtime/chunk-LFZDVKSP.js +521 -0
  356. package/dist/node-runtime/{chunk-2BUAYZ7K.js → chunk-LLUIPGDR.js} +581 -197
  357. package/dist/node-runtime/{chunk-7NBZ5P7I.js → chunk-NAY6UUQZ.js} +1 -1
  358. package/dist/node-runtime/chunk-OAR4TYZE.js +146 -0
  359. package/dist/node-runtime/{chunk-STERBGUB.js → chunk-OFKSVRV7.js} +2 -2
  360. package/dist/node-runtime/{chunk-JZQ7F36T.js → chunk-PCEW76PM.js} +19 -3
  361. package/dist/node-runtime/{chunk-WLLDXJRT.js → chunk-QAZOULTU.js} +29 -1014
  362. package/dist/node-runtime/{chunk-6KDIOJL3.js → chunk-QH6YL7VK.js} +3 -3
  363. package/dist/node-runtime/chunk-R3K2F5GI.js +122 -0
  364. package/dist/node-runtime/{chunk-RNBHABBA.js → chunk-RDDAZOMU.js} +23 -0
  365. package/dist/node-runtime/{chunk-SY2TFMLO.js → chunk-RIR5EDDJ.js} +46 -151
  366. package/dist/node-runtime/chunk-RMQZU2YU.js +117 -0
  367. package/dist/node-runtime/{chunk-6BEIBLQ3.js → chunk-RWTKOC3B.js} +1 -1
  368. package/dist/node-runtime/{chunk-G6LRAP36.js → chunk-TQGPP4SC.js} +1 -1
  369. package/dist/node-runtime/{chunk-Y5KOEMBH.js → chunk-TVJUOJZJ.js} +9 -674
  370. package/dist/node-runtime/chunk-UAEOTO52.js +119 -0
  371. package/dist/node-runtime/{chunk-AY6CAJSL.js → chunk-UJOCPOMX.js} +6 -3
  372. package/dist/node-runtime/chunk-UP2XBVH5.js +40 -0
  373. package/dist/node-runtime/{chunk-WJVFOIB5.js → chunk-UQUCFAJ3.js} +1 -1
  374. package/dist/node-runtime/chunk-URD2SLIT.js +1019 -0
  375. package/dist/node-runtime/chunk-US544NN6.js +13 -0
  376. package/dist/node-runtime/chunk-UWPJL22I.js +341 -0
  377. package/dist/node-runtime/{chunk-4I23VTC4.js → chunk-VWCE2HSZ.js} +21 -124
  378. package/dist/node-runtime/{chunk-VZR3NCM7.js → chunk-W64JC4E7.js} +18 -14
  379. package/dist/node-runtime/{chunk-AWVD5IEY.js → chunk-X3URCYCU.js} +23 -12
  380. package/dist/node-runtime/{chunk-GKLEQ3I4.js → chunk-XLTL257W.js} +126 -27
  381. package/dist/node-runtime/{chunk-WKDK4C5P.js → chunk-YDO2F2IA.js} +38 -164
  382. package/dist/node-runtime/{chunk-PDNXVXMD.js → chunk-YHQ3NBB3.js} +58 -48
  383. package/dist/node-runtime/chunk-YPHAIRZT.js +10 -0
  384. package/dist/node-runtime/cli-runtime.js +2 -2
  385. package/dist/node-runtime/command-PDVTBRWA.js +45 -0
  386. package/dist/node-runtime/{commands-MV5KOZ64.js → commands-KAMO2T6P.js} +10 -10
  387. package/dist/node-runtime/commands-XDCFGIGW.js +36 -0
  388. package/dist/node-runtime/config-RORQUQFG.js +20 -0
  389. package/dist/node-runtime/{customize-LF5VST47.js → customize-VFJV3U6A.js} +2 -1
  390. package/dist/node-runtime/{direct-tool-executor-BK7CLEBX.js → direct-tool-executor-YAVOLDFY.js} +8 -8
  391. package/dist/node-runtime/{export-html-TEXVV5RP.js → export-html-KSOIMVPI.js} +4 -3
  392. package/dist/node-runtime/{extension-input-O4HSAEM4.js → extension-input-E7BJZ35H.js} +4 -4
  393. package/dist/node-runtime/{extension-selector-X5FCX43D.js → extension-selector-WU42XDTU.js} +4 -4
  394. package/dist/node-runtime/{extract-XLQSJN4V.js → extract-EQJE7FZZ.js} +2 -2
  395. package/dist/node-runtime/{gateway-BM6NLOH4.js → gateway-AYWM5DIO.js} +275 -994
  396. package/dist/node-runtime/{gemini-search-U7SUMPQA.js → gemini-search-35OCRFLN.js} +1 -1
  397. package/dist/node-runtime/{gemini-url-context-PXWCBQHK.js → gemini-url-context-UQY3PHHW.js} +2 -2
  398. package/dist/node-runtime/index.js +104 -65
  399. package/dist/node-runtime/{init-3C7Z24OI.js → init-X2LIUB2H.js} +3 -3
  400. package/dist/node-runtime/{install-cli-EXMJQESX.js → install-cli-3BO4MMQ6.js} +21 -82
  401. package/dist/node-runtime/interactive-mode-4MFRKAHG.js +72 -0
  402. package/dist/node-runtime/{interactive-view-ILS6TAN5.js → interactive-view-TUZHCQM3.js} +8 -8
  403. package/dist/node-runtime/lunr-browser-RYFIIVJN.js +174 -0
  404. package/dist/node-runtime/{lunr-cron-4VHP4E4B.js → lunr-cron-YWXEPZMQ.js} +19 -5
  405. package/dist/node-runtime/main.js +44 -31
  406. package/dist/node-runtime/{memory-cap-3S4XRLNP.js → memory-cap-EL3KL4JJ.js} +2 -1
  407. package/dist/node-runtime/mobile-commands-LVHDAUDP.js +32 -0
  408. package/dist/node-runtime/model-runtime-PLQKAG4B.js +16 -0
  409. package/dist/node-runtime/{model-tiers-NJLHUEGK.js → model-tiers-OU3U5CZG.js} +2 -1
  410. package/dist/node-runtime/{package-manager-cli-N37546V5.js → package-manager-cli-6GT3Z3CK.js} +22 -15
  411. package/dist/node-runtime/{pi-intercom-NV2LW6X7.js → pi-intercom-HBPK5HSJ.js} +4 -1
  412. package/dist/node-runtime/{pi-mcp-adapter-GUFZWW54.js → pi-mcp-adapter-E6WULBKF.js} +4 -4
  413. package/dist/node-runtime/{pi-subagents-6MUIFNDM.js → pi-subagents-CDWK2AKY.js} +236 -79
  414. package/dist/node-runtime/{pi-web-access-2CQGFLT2.js → pi-web-access-WTGMNZ32.js} +15 -15
  415. package/dist/node-runtime/process-registry-4FAKZQOL.js +31 -0
  416. package/dist/node-runtime/{proxy-modes-V6YVFH3C.js → proxy-modes-OSQCWRBI.js} +9 -9
  417. package/dist/node-runtime/rpc-entry.js +44 -31
  418. package/dist/node-runtime/{rpc-mode-W5ZTLTMZ.js → rpc-mode-O3XV4SID.js} +2 -2
  419. package/dist/node-runtime/runtime-4VA6JKNF.js +373 -0
  420. package/dist/node-runtime/{runtime-bridges-2VQTLPOZ.js → runtime-bridges-3XUQ46XW.js} +6 -5
  421. package/dist/node-runtime/service-ISSP6VHE.js +36 -0
  422. package/dist/node-runtime/session-handoff-HC7R5E24.js +33 -0
  423. package/dist/node-runtime/{session-manager-E7AREDTV.js → session-manager-CFN4UFM2.js} +2 -1
  424. package/dist/node-runtime/{session-selector-FJ7M2AIX.js → session-selector-GIM4DHQ2.js} +5 -4
  425. package/dist/node-runtime/{settings-manager-CUGAZWAB.js → settings-manager-6VEMXRDL.js} +7 -2
  426. package/dist/node-runtime/setup-5SR2J35A.js +155 -0
  427. package/dist/node-runtime/setup-JBKOLJ6F.js +18 -0
  428. package/dist/node-runtime/{subagent-executor-MH4A7CCF.js → subagent-executor-M5VWB3D3.js} +26 -18
  429. package/dist/node-runtime/theme-UOO5RVFN.js +68 -0
  430. package/dist/node-runtime/trust-manager-MMISNCYO.js +17 -0
  431. package/dist/node-runtime/{update-cli-XTZMZGOL.js → update-cli-UVKJWRRJ.js} +7 -2
  432. package/dist/node-runtime/usage-service-LFB2SWYV.js +37 -0
  433. package/dist/node-runtime/{video-extract-OYT5WKS5.js → video-extract-OOZHR7SU.js} +2 -2
  434. package/dist/node-runtime/{youtube-extract-TQYKGFGS.js → youtube-extract-FNPAUNHU.js} +6 -6
  435. package/docs/browser.md +86 -0
  436. package/docs/extensions.md +2 -0
  437. package/docs/features.md +96 -16
  438. package/docs/interactive-startup.md +2 -1
  439. package/docs/sessions.md +10 -0
  440. package/docs/settings.md +2 -0
  441. package/docs/tui.md +2 -0
  442. package/docs/usage.md +16 -0
  443. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  444. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  445. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  446. package/examples/extensions/gondolin/package-lock.json +2 -2
  447. package/examples/extensions/gondolin/package.json +1 -1
  448. package/examples/extensions/sandbox/package-lock.json +2 -2
  449. package/examples/extensions/sandbox/package.json +1 -1
  450. package/examples/extensions/with-deps/package-lock.json +2 -2
  451. package/examples/extensions/with-deps/package.json +1 -1
  452. package/package.json +7 -4
  453. package/scripts/install-browser.mjs +20 -0
  454. package/dist/node-runtime/agent-session-services-C743TYQE.js +0 -37
  455. package/dist/node-runtime/chunk-VGYZ3APQ.js +0 -59
  456. package/dist/node-runtime/chunk-XI77KVKA.js +0 -6009
  457. package/dist/node-runtime/command-P4NYCJ2M.js +0 -13
  458. package/dist/node-runtime/interactive-mode-EVVBA64D.js +0 -59
  459. package/dist/node-runtime/{chunk-UWQYRSYQ.js → chunk-YJMMG7C6.js} +25 -25
  460. package/dist/node-runtime/{mcp-panel-IIGMXQGP.js → mcp-panel-KTTFXJZ4.js} +3 -3
  461. package/dist/node-runtime/{src-BPQFJR76.js → src-IVPNZ2BX.js} +9 -9
@@ -27,6 +27,8 @@ import {
27
27
  SUBAGENT_PARENT_SESSION_ENV,
28
28
  SUBAGENT_RESULT_INTERCOM_EVENT,
29
29
  SUBAGENT_STEERING_NOTICE_EVENT,
30
+ SUPERVISOR_PROGRESS_TYPE,
31
+ SUPERVISOR_REQUEST_TYPE,
30
32
  TEMP_ROOT_DIR,
31
33
  WIDGET_KEY,
32
34
  assertJsonSchemaObject,
@@ -45,7 +47,6 @@ import {
45
47
  formatAsyncRunProgressLabel,
46
48
  formatAsyncRunTranscript,
47
49
  formatCompactModelBadge,
48
- formatControlNoticeMessage,
49
50
  formatDuration,
50
51
  formatModelSelection,
51
52
  formatNestedAggregate,
@@ -61,10 +62,12 @@ import {
61
62
  handleSubagentControlNotice,
62
63
  hasLiveNestedDescendants,
63
64
  isAsyncSubagentExecution,
65
+ legacySupervisorBody,
64
66
  listAsyncRuns,
65
67
  normalizeAsyncLaunchConfig,
66
68
  normalizeParallelGroups,
67
69
  projectNestedRegistryForRoot,
70
+ readCommunication,
68
71
  readStatus,
69
72
  readSteerCapability,
70
73
  reconcileAsyncRun,
@@ -72,6 +75,7 @@ import {
72
75
  registerMainWatchdog,
73
76
  requestAsyncSteer,
74
77
  resolveAsyncRunLocation,
78
+ resolveCommunicationPeer,
75
79
  resolveCurrentSessionId,
76
80
  resolveSubagentRequestParams,
77
81
  resolveSubagentResultStatus,
@@ -82,6 +86,7 @@ import {
82
86
  sanitizeChildDescription,
83
87
  sanitizeSummary,
84
88
  shortenPath,
89
+ stopRequestPath,
85
90
  subagentLaunchRunsAsync,
86
91
  summarizeAsyncStatus,
87
92
  updateAsyncJobNestedProjection,
@@ -89,30 +94,36 @@ import {
89
94
  validateExecutionAcceptance,
90
95
  validateToolBudgetConfig,
91
96
  writeAtomicJson
92
- } from "./chunk-SY2TFMLO.js";
97
+ } from "./chunk-RIR5EDDJ.js";
93
98
  import {
94
- createSubagentCancellation,
95
- getSubagentSpinnerDefinition,
96
- registerSubagentCancellation
97
- } from "./chunk-A3KMVBZV.js";
99
+ formatControlNoticeMessage
100
+ } from "./chunk-OAR4TYZE.js";
101
+ import {
102
+ getSubagentSpinnerDefinition
103
+ } from "./chunk-US544NN6.js";
98
104
  import "./chunk-5ZH3ZFIZ.js";
99
- import "./chunk-25I2BHAA.js";
100
- import "./chunk-WKDK4C5P.js";
105
+ import "./chunk-CSUZVNYE.js";
106
+ import "./chunk-YDO2F2IA.js";
101
107
  import "./chunk-53YJI7JU.js";
102
- import "./chunk-KBKMCJDU.js";
103
- import "./chunk-CSFI6YXL.js";
104
- import "./chunk-LISUTZS3.js";
105
- import "./chunk-FVDOXRUD.js";
108
+ import "./chunk-5ZQXRPMC.js";
106
109
  import "./chunk-AD6VXAO7.js";
107
- import "./chunk-6N22HULO.js";
110
+ import "./chunk-LISUTZS3.js";
111
+ import {
112
+ createSubagentCancellation,
113
+ registerSubagentCancellation
114
+ } from "./chunk-BBUVIEZB.js";
115
+ import "./chunk-5D7LC2ZQ.js";
108
116
  import "./chunk-M3LZLQW2.js";
117
+ import "./chunk-KKUTQQV7.js";
118
+ import "./chunk-CSFI6YXL.js";
119
+ import "./chunk-FVDOXRUD.js";
109
120
  import "./chunk-RQ2Q5IYR.js";
110
121
  import {
111
122
  keyText
112
- } from "./chunk-DDWHZ633.js";
123
+ } from "./chunk-GS42T6MX.js";
113
124
  import {
114
125
  getMarkdownTheme
115
- } from "./chunk-RNBHABBA.js";
126
+ } from "./chunk-RDDAZOMU.js";
116
127
  import "./chunk-FQMM2EZ2.js";
117
128
  import "./chunk-Q4Q6D4IY.js";
118
129
  import "./chunk-BRJX2PRC.js";
@@ -122,7 +133,7 @@ import { randomUUID as randomUUID4 } from "node:crypto";
122
133
  import * as fs10 from "node:fs";
123
134
  import * as os from "node:os";
124
135
  import * as path12 from "node:path";
125
- import { Box, Container as Container2, Spacer as Spacer2, Text as Text2, truncateToWidth as truncateToWidth2, visibleWidth as visibleWidth3, wrapTextWithAnsi as wrapTextWithAnsi2 } from "@ashx-j/lunr-tui";
136
+ import { Box as Box2, Container as Container3, Spacer as Spacer2, Text as Text3, truncateToWidth as truncateToWidth2, visibleWidth as visibleWidth3, wrapTextWithAnsi as wrapTextWithAnsi2 } from "@ashx-j/lunr-tui";
126
137
 
127
138
  // packages/coding-agent/dist/builtin-extensions/pi-subagents/src/tui/render.js
128
139
  import { Container, Markdown, Spacer, Text, visibleWidth } from "@ashx-j/lunr-tui";
@@ -4467,6 +4478,7 @@ function parseQuestionRecord(raw) {
4467
4478
  runId: input.runId.trim(),
4468
4479
  childIndex,
4469
4480
  childId: input.childId.trim(),
4481
+ ...typeof input.childDescription == "string" && input.childDescription.trim() ? { childDescription: input.childDescription.trim() } : {},
4470
4482
  parentSessionId: input.parentSessionId.trim(),
4471
4483
  parentGeneration,
4472
4484
  ...incarnation ? { childIncarnation: incarnation } : {}
@@ -4575,6 +4587,7 @@ function createSupervisorQuestion(input) {
4575
4587
  runId: input.runId,
4576
4588
  childIndex: input.childIndex,
4577
4589
  childId: input.childId,
4590
+ ...input.childDescription ? { childDescription: input.childDescription } : {},
4578
4591
  parentSessionId: input.parentSessionId,
4579
4592
  parentGeneration: input.parentGeneration,
4580
4593
  ...input.childIncarnation ? { childIncarnation: input.childIncarnation } : {}
@@ -4640,8 +4653,7 @@ function formatParentQuestionForChild(question) {
4640
4653
  function formatSupervisorQuestionAnswer(question) {
4641
4654
  let state = supervisorQuestionPublicState(question), lines = [
4642
4655
  state === "answered" ? `Subagent answer (${question.id})` : `Subagent question ${state} (${question.id})`,
4643
- `Run: ${question.runId}`,
4644
- `Child: ${question.childId} [#${question.childIndex}]`,
4656
+ `From: ${question.childDescription ?? `Subagent ${question.childIndex + 1}`}`,
4645
4657
  `Decision: ${question.reason}`
4646
4658
  ];
4647
4659
  return state === "answered" && question.answer?.trim() ? lines.push("", question.answer.trim()) : question.cancelReason && lines.push("", question.cancelReason), lines.join(`
@@ -4798,8 +4810,9 @@ function askRunningAsyncChild(input) {
4798
4810
  let capability = readSteerCapability(resolved.location.asyncDir, child.index);
4799
4811
  if (!capability?.supported)
4800
4812
  throw new Error("This child is not ready to receive questions. Continue other work until it is ready; no question was queued.");
4801
- let incarnation = { pid: capability.pid, readyAt: capability.readyAt }, question = createSupervisorQuestion({
4813
+ let incarnation = { pid: capability.pid, readyAt: capability.readyAt }, step = status.steps?.[child.index], childDescription = resolveCommunicationPeer(input.state, status.runId, child.index, child.childId, step?.description ?? child.agent), question = createSupervisorQuestion({
4802
4814
  channelDir,
4815
+ childDescription,
4803
4816
  reason,
4804
4817
  message,
4805
4818
  runId: status.runId,
@@ -4829,12 +4842,50 @@ function askRunningAsyncChild(input) {
4829
4842
  runId: status.runId,
4830
4843
  childIndex: child.index,
4831
4844
  childId: child.childId,
4845
+ communication: { direction: "to", peer: childDescription, message, kind: "question" },
4832
4846
  delivered: !1,
4833
4847
  answered: !1
4834
4848
  }
4835
4849
  };
4836
4850
  }
4837
4851
 
4852
+ // packages/coding-agent/dist/builtin-extensions/pi-subagents/src/tui/communication.js
4853
+ import { Box, Container as Container2, Text as Text2 } from "@ashx-j/lunr-tui";
4854
+ function renderCommunicationBody(communication, theme) {
4855
+ let direction = communication.direction === "from" ? "From" : "To";
4856
+ return new Text2(`${theme.fg("muted", `${direction}: ${communication.peer}`)}
4857
+
4858
+ ${communication.message}`, 0, 0);
4859
+ }
4860
+ function renderCommunicationCard(communication, expanded, theme) {
4861
+ let box = new Box(1, 1, (text) => theme.bg("toolSuccessBg", text));
4862
+ return box.addChild(new Text2(theme.fg("toolTitle", theme.bold(`\u25CF subagent ${communication.kind}`)), 0, 0)), expanded && box.addChild(renderCommunicationBody(communication, theme)), box;
4863
+ }
4864
+ function renderCommunicationCall(name, args, theme, context, communication, displayTitle) {
4865
+ let container = new Container2(), details = context?.result?.details, saved = readCommunication(details?.communication) ?? communication, action = args.action ?? (args.reason === "need_decision" ? "request" : args.reason === "interview_request" ? "interview" : args.reason === "progress_update" ? "progress" : args.reason), title = theme.fg("toolTitle", theme.bold(`${name}${action ? ` ${action}` : ""}`));
4866
+ return container.addChild(new Text2(displayTitle ? `${title} ${theme.fg("accent", displayTitle)}` : title, 0, 0)), context?.expanded && saved && container.addChild(renderCommunicationBody(saved, theme)), container;
4867
+ }
4868
+ function renderCommunicationResult(content, details, expanded, isError, theme) {
4869
+ let container = new Container2();
4870
+ if (!expanded)
4871
+ return container;
4872
+ if (isError)
4873
+ container.addChild(new Text2(theme.fg("error", content.filter((part) => part.type === "text").map((part) => part.text ?? "").join(`
4874
+ `)), 0, 0));
4875
+ else {
4876
+ let saved = details;
4877
+ saved?.response ? container.addChild(new Text2(`
4878
+ ${theme.fg("muted", "From: Supervisor")}
4879
+
4880
+ ${saved.response}`, 0, 0)) : saved?.steering?.state ? container.addChild(new Text2(`
4881
+ Delivery: ${saved.steering.state === "recovered" ? "recovered; replacement launched" : saved.steering.state}`, 0, 0)) : saved?.asyncId && saved.communication ? container.addChild(new Text2(`
4882
+ Continuation launched.`, 0, 0)) : saved?.state && saved.communication ? container.addChild(new Text2(`
4883
+ ${saved.state === "pending" ? "Question queued; awaiting an answer." : saved.state}`, 0, 0)) : saved?.communication || container.addChild(new Text2(content.filter((part) => part.type === "text").map((part) => part.text ?? "").join(`
4884
+ `), 0, 0));
4885
+ }
4886
+ return container;
4887
+ }
4888
+
4838
4889
  // packages/coding-agent/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js
4839
4890
  var REQUESTS_DIR = "requests", REPLIES_DIR = "replies", NATIVE_SUPERVISOR_TOOL_NAME = "subagent_supervisor";
4840
4891
  var MAX_MESSAGE_BYTES2 = 64 * 1024, DEFAULT_ASK_TIMEOUT_MS2 = 600 * 1e3, CHANNEL_POLL_MS = Math.min(POLL_INTERVAL_MS, 500), STALE_EMPTY_CHANNEL_AGE_MS = 60 * 1e3, STALE_EMPTY_CHANNEL_CLEANUP_INTERVAL_MS = 60 * 1e3, PARENT_ASK_DESCRIPTION = [
@@ -4846,11 +4897,13 @@ var MAX_MESSAGE_BYTES2 = 64 * 1024, DEFAULT_ASK_TIMEOUT_MS2 = 600 * 1e3, CHANNEL
4846
4897
  "Use pending or list to find child requests awaiting your reply; status reports channel availability. Free-form send is unsupported. Asking never revives a child or changes its assignment.",
4847
4898
  'Reply: { action: "reply", replyTo: "<requestId>", message: "..." }'
4848
4899
  ].join(" "), CHILD_CONTACT_DESCRIPTION = [
4849
- "Contact the parent/supervisor session for a blocking decision, structured interview, progress update, or reply to a parent question.",
4900
+ "Contact the supervisor for decisions outside your assigned authority, safety concerns, or blockers. Make reversible implementation choices within your scope yourself.",
4901
+ "need_decision/interview_request wait for a reply: state the blocked decision, evidence, and recommended choice. Consolidate related questions; continue independent work before opening a blocking request.",
4902
+ "Return one self-contained final report with outcomes, verification, blockers, and artifact paths; the runtime delivers it. Routine work already appears in activity indicators.",
4850
4903
  "For parent questions use action='reply' with replyTo set to the question id. Answer from current findings and uncertainty; do not start extra investigation just to reply. Continue the assigned task after replying.",
4851
4904
  "Do not open a blocking need_decision while a parent question is already outstanding for this child."
4852
4905
  ].join(" "), ContactSupervisorParamsSchema = Type2.Object({
4853
- reason: Type2.Optional(Type2.String({ enum: ["need_decision", "interview_request", "progress_update"] })),
4906
+ reason: Type2.Optional(Type2.String({ enum: ["need_decision", "interview_request", "progress_update", "handoff"] })),
4854
4907
  message: Type2.Optional(Type2.String()),
4855
4908
  interview: Type2.Optional(Type2.Unsafe({ type: "object", additionalProperties: !0 })),
4856
4909
  action: Type2.Optional(Type2.String({ enum: ["reply"] })),
@@ -4874,6 +4927,40 @@ function safeSegment2(value) {
4874
4927
  function replyPath(channelDir, requestId) {
4875
4928
  return path8.join(channelDir, REPLIES_DIR, `${safeSegment2(requestId)}.json`);
4876
4929
  }
4930
+ function communicationKind(reason) {
4931
+ return reason === "progress_update" ? "progress" : reason === "handoff" ? "handoff" : reason === "interview_request" ? "interview" : "request";
4932
+ }
4933
+ function communicationBody(message, interview, protocolVersion) {
4934
+ let body = protocolVersion === 2 ? message : legacySupervisorBody(message);
4935
+ return interview !== void 0 && protocolVersion === 2 ? `${body}
4936
+
4937
+ ${JSON.stringify(interview, null, 2)}` : body;
4938
+ }
4939
+ function requestCommunication(request, state) {
4940
+ return {
4941
+ direction: "from",
4942
+ peer: resolveCommunicationPeer(state, request.runId, request.childIndex, request.agent, request.description),
4943
+ message: communicationBody(request.message, request.interview, request.protocolVersion),
4944
+ kind: communicationKind(request.reason)
4945
+ };
4946
+ }
4947
+ function registerSupervisorRenderers(pi, state) {
4948
+ for (let customType of [SUPERVISOR_REQUEST_TYPE, SUBAGENT_SUPERVISOR_ANSWER_TYPE])
4949
+ pi.registerMessageRenderer(customType, (message, options, theme) => {
4950
+ let details = message.details, communication = readCommunication(details?.communication) ?? {
4951
+ direction: "from",
4952
+ peer: details?.runId ? resolveCommunicationPeer(state, details.runId, details.childIndex ?? 0, details.childId ?? details.agent) : "Subagent",
4953
+ message: legacySupervisorBody(typeof message.content == "string" ? message.content : message.content.filter((part) => part.type === "text").map((part) => part.text).join(`
4954
+ `)),
4955
+ kind: customType === SUBAGENT_SUPERVISOR_ANSWER_TYPE ? "answer" : communicationKind(details?.reason)
4956
+ };
4957
+ return renderCommunicationCard(communication, options.expanded, theme);
4958
+ });
4959
+ pi.registerEntryRenderer(SUPERVISOR_PROGRESS_TYPE, (entry, options, theme) => {
4960
+ let communication = readCommunication(entry.data?.communication);
4961
+ return communication ? renderCommunicationCard(communication, options.expanded, theme) : void 0;
4962
+ });
4963
+ }
4877
4964
  function askTimeoutMs2() {
4878
4965
  let parsed = Number(process.env.PI_INTERCOM_ASK_TIMEOUT_MS);
4879
4966
  return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_ASK_TIMEOUT_MS2;
@@ -4888,7 +4975,7 @@ function hasTool(pi, name) {
4888
4975
  function parseRequestFile(file, channelDir) {
4889
4976
  try {
4890
4977
  let parsed = JSON.parse(fs7.readFileSync(file, "utf-8"));
4891
- return parsed.type !== "subagent.supervisor.request" || parsed.supervisorSessionId !== void 0 && (typeof parsed.supervisorSessionId != "string" || !parsed.supervisorSessionId.trim()) || typeof parsed.id != "string" || !parsed.id || parsed.reason !== "need_decision" && parsed.reason !== "interview_request" && parsed.reason !== "progress_update" || typeof parsed.message != "string" || !parsed.message || typeof parsed.runId != "string" || typeof parsed.agent != "string" || typeof parsed.childIndex != "number" ? void 0 : { ...parsed, channelDir, requestFile: file };
4978
+ return parsed.type !== "subagent.supervisor.request" || parsed.supervisorSessionId !== void 0 && (typeof parsed.supervisorSessionId != "string" || !parsed.supervisorSessionId.trim()) || typeof parsed.id != "string" || !parsed.id || parsed.reason !== "need_decision" && parsed.reason !== "interview_request" && parsed.reason !== "progress_update" && parsed.reason !== "handoff" || parsed.protocolVersion !== void 0 && parsed.protocolVersion !== 2 || parsed.protocolVersion === 2 && parsed.expectsReply !== (parsed.reason === "need_decision" || parsed.reason === "interview_request") || parsed.reason === "handoff" && parsed.protocolVersion !== 2 || parsed.description !== void 0 && typeof parsed.description != "string" || typeof parsed.message != "string" || !parsed.message || typeof parsed.runId != "string" || typeof parsed.agent != "string" || typeof parsed.childIndex != "number" ? void 0 : { ...parsed, channelDir, requestFile: file };
4892
4979
  } catch {
4893
4980
  return;
4894
4981
  }
@@ -5014,22 +5101,26 @@ function requestExpiresAt(request, now) {
5014
5101
  let expiresAt = request.expiresAt;
5015
5102
  return typeof expiresAt == "number" && Number.isFinite(expiresAt) ? expiresAt : Number.isFinite(request.createdAt) ? request.createdAt + askTimeoutMs2() : now;
5016
5103
  }
5017
- function requestRunInactive(request, state) {
5104
+ function requestRunState(request, state) {
5018
5105
  if (state.foregroundControls.has(request.runId))
5019
- return !1;
5106
+ return "active";
5020
5107
  let foregroundRun = state.foregroundRuns?.get(request.runId), foregroundChild = foregroundRun?.children.find((child) => child.index === request.childIndex && child.agent === request.agent) ?? foregroundRun?.children[request.childIndex];
5021
5108
  if (foregroundChild)
5022
- return foregroundChild.status !== "detached";
5023
- let asyncJob = state.asyncJobs.get(request.runId);
5024
- if (!asyncJob)
5025
- return !1;
5026
- if (asyncJob.status === "complete" || asyncJob.status === "failed" || asyncJob.status === "paused")
5027
- return !0;
5028
- let stepStatus = asyncJob.steps?.[request.childIndex]?.status;
5029
- return stepStatus === "complete" || stepStatus === "completed" || stepStatus === "failed" || stepStatus === "paused";
5109
+ return foregroundChild.status === "stopped" ? "stopped" : foregroundChild.status === "detached" ? "active" : "inactive";
5110
+ let job = state.asyncJobs.get(request.runId) ?? state.fleetJobs?.get(request.runId), asyncDir = job?.asyncDir ?? path8.join(ASYNC_DIR, safeSegment2(request.runId)), status = readStatus(asyncDir), runStatus = status?.state ?? job?.status, stepStatus = (status?.steps ?? job?.steps)?.[request.childIndex]?.status;
5111
+ return fs7.existsSync(stopRequestPath(asyncDir)) || runStatus === "stopped" || job?.status === "stopped" || status?.stopped || stepStatus === "stopped" ? "stopped" : ["complete", "failed", "paused"].includes(runStatus ?? "") || ["complete", "completed", "failed", "paused"].includes(stepStatus ?? "") ? "inactive" : "active";
5030
5112
  }
5031
5113
  function requestLifecycle(request, state, ctx, now) {
5032
- return ctx && !requestMatchesContext(request, state, ctx) ? "wrong-session" : fs7.existsSync(request.requestFile) ? request.expectsReply && fs7.existsSync(replyPath(request.channelDir, request.id)) ? "resolved" : request.expectsReply && now > requestExpiresAt(request, now) ? "expired" : request.expectsReply && requestRunInactive(request, state) ? "inactive" : "pending" : "missing";
5114
+ if (ctx && !requestMatchesContext(request, state, ctx))
5115
+ return "wrong-session";
5116
+ if (!fs7.existsSync(request.requestFile))
5117
+ return "missing";
5118
+ if (request.expectsReply && fs7.existsSync(replyPath(request.channelDir, request.id)))
5119
+ return "resolved";
5120
+ if (request.expectsReply && now > requestExpiresAt(request, now))
5121
+ return "expired";
5122
+ let runState = requestRunState(request, state);
5123
+ return runState === "stopped" || request.expectsReply && runState === "inactive" ? "inactive" : "pending";
5033
5124
  }
5034
5125
  function cleanupRequestLifecycle(request, lifecycle) {
5035
5126
  (lifecycle === "resolved" || lifecycle === "expired" || lifecycle === "inactive") && removeRequestFile(request.requestFile);
@@ -5045,9 +5136,9 @@ function formatPendingLine(request) {
5045
5136
  let replyHint = request.expectsReply ? ` Reply: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })` : "";
5046
5137
  return `- ${request.id}: ${request.agent} [${request.runId}#${request.childIndex}] ${request.reason}.${replyHint}`;
5047
5138
  }
5048
- function requestVisibleText(request) {
5049
- let lines = [request.message];
5050
- return request.expectsReply && lines.push("", `Reply with: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })`), lines.join(`
5139
+ function requestVisibleText(request, communication) {
5140
+ let lines = [`From: ${communication.peer}`, "", communication.message];
5141
+ return request.reason === "interview_request" && lines.push("", "Reply with JSON matching the requested interview shape."), request.expectsReply && lines.push("", `Reply with: ${NATIVE_SUPERVISOR_TOOL_NAME}({ action: "reply", replyTo: "${request.id}", message: "..." })`), lines.join(`
5051
5142
  `);
5052
5143
  }
5053
5144
  function writeReply(request, message) {
@@ -5096,6 +5187,13 @@ function buildParentIntercomTool(pending, state, name = "intercom") {
5096
5187
  label: name === "intercom" ? "Intercom" : "Subagent Supervisor",
5097
5188
  description: PARENT_ASK_DESCRIPTION,
5098
5189
  parameters: ParentSupervisorParamsSchema,
5190
+ renderCall(args, theme, context) {
5191
+ let request = args.action === "reply" ? pending.get(args.replyTo) : void 0, peer = request ? requestCommunication(request, state).peer : args.id ? resolveCommunicationPeer(state, args.id, args.index ?? 0, args.childId) : "Subagent";
5192
+ return renderCommunicationCall(name, args, theme, context, args.message ? { direction: "to", peer, message: args.message, kind: args.action === "ask" ? "question" : "reply" } : void 0);
5193
+ },
5194
+ renderResult(result2, options, theme, context) {
5195
+ return renderCommunicationResult(result2.content, result2.details, options.expanded, context.isError, theme);
5196
+ },
5099
5197
  async execute(_id, params) {
5100
5198
  refreshPendingRequests(pending, state, state.lastUiContext ?? void 0);
5101
5199
  let input = params;
@@ -5108,7 +5206,7 @@ function buildParentIntercomTool(pending, state, name = "intercom") {
5108
5206
  }
5109
5207
  if (input.action === "reply") {
5110
5208
  let request = resolvePendingRequest(pending, input);
5111
- return writeReply(request, input.message ?? ""), pending.delete(request.id), { content: [{ type: "text", text: `Replied to supervisor request ${request.id}.` }], details: { replyTo: request.id, runId: request.runId, agent: request.agent } };
5209
+ return writeReply(request, input.message ?? ""), pending.delete(request.id), { content: [{ type: "text", text: `Replied to ${requestCommunication(request, state).peer}.` }], details: { replyTo: request.id, runId: request.runId, agent: request.agent, communication: { ...requestCommunication(request, state), direction: "to", kind: "reply", message: input.message } } };
5112
5210
  }
5113
5211
  if (input.action === "ask")
5114
5212
  return askRunningAsyncChild({
@@ -5130,29 +5228,30 @@ function questionMatchesParentContext(question, state, ctx) {
5130
5228
  let sessionId = currentSupervisorSessionId(state, ctx);
5131
5229
  return !(!sessionId || question.parentSessionId !== sessionId || (state.sessionGeneration ?? 0) !== question.parentGeneration);
5132
5230
  }
5133
- function notifyQuestionTerminal(pi, question, channelDir) {
5231
+ function notifyQuestionTerminal(pi, question, channelDir, state) {
5134
5232
  if (!supervisorQuestionIsTerminal(question) || question.notifiedAt || (pi.events?.emit(SUBAGENT_QUESTION_EVENT, {
5135
5233
  questionId: question.id,
5136
5234
  state: supervisorQuestionPublicState(question),
5137
5235
  runId: question.runId
5138
5236
  }), isQuestionWaitActive(question.id)) || !claimQuestionNotification(channelDir, question.id))
5139
5237
  return;
5140
- let state = supervisorQuestionPublicState(question);
5238
+ let outcome = supervisorQuestionPublicState(question), communication = { direction: "from", peer: question.childDescription ?? resolveCommunicationPeer(state, question.runId, question.childIndex, question.childId), message: question.answer ?? question.cancelReason ?? outcome, kind: "answer" };
5141
5239
  pi.sendMessage({
5142
5240
  customType: SUBAGENT_SUPERVISOR_ANSWER_TYPE,
5143
5241
  content: formatSupervisorQuestionAnswer(question),
5144
- display: state === "answered",
5242
+ display: outcome === "answered",
5145
5243
  details: {
5146
5244
  questionId: question.id,
5147
- state,
5245
+ state: outcome,
5246
+ communication,
5148
5247
  runId: question.runId,
5149
5248
  childIndex: question.childIndex,
5150
5249
  childId: question.childId,
5151
5250
  reason: question.reason,
5152
- answered: state === "answered",
5251
+ answered: outcome === "answered",
5153
5252
  delivered: !!question.deliveredAt
5154
5253
  }
5155
- }, { triggerTurn: state === "answered" });
5254
+ }, { triggerTurn: outcome === "answered" });
5156
5255
  }
5157
5256
  function pollSupervisorQuestions(pi, state, ctx) {
5158
5257
  for (let channelDir of listSupervisorChannelDirs())
@@ -5160,11 +5259,11 @@ function pollSupervisorQuestions(pi, state, ctx) {
5160
5259
  if (!questionMatchesParentContext(question, state, ctx))
5161
5260
  continue;
5162
5261
  let current = reconcileAsyncQuestion(channelDir, question, state);
5163
- notifyQuestionTerminal(pi, current, channelDir);
5262
+ notifyQuestionTerminal(pi, current, channelDir, state);
5164
5263
  }
5165
5264
  }
5166
5265
  function createNativeSupervisorChannel(pi, state) {
5167
- let pending = /* @__PURE__ */ new Map(), seenFiles = /* @__PURE__ */ new Set(), poller, lastStaleCleanupAt = 0, registerParentTools = () => {
5266
+ let pending = /* @__PURE__ */ new Map(), seenFiles = /* @__PURE__ */ new Set(), deliveredRequests = /* @__PURE__ */ new Set(), poller, lastStaleCleanupAt = 0, registerParentTools = () => {
5168
5267
  hasTool(pi, NATIVE_SUPERVISOR_TOOL_NAME) || pi.registerTool(buildParentIntercomTool(pending, state, NATIVE_SUPERVISOR_TOOL_NAME)), hasTool(pi, "intercom") || pi.registerTool(buildParentIntercomTool(pending, state));
5169
5268
  }, cleanupStaleChannelsIfDue = () => {
5170
5269
  let nowMs = Date.now();
@@ -5205,19 +5304,25 @@ function createNativeSupervisorChannel(pi, state) {
5205
5304
  seenFiles.add(file), cleanupRequestLifecycle(request, lifecycle);
5206
5305
  continue;
5207
5306
  }
5208
- if (seenFiles.add(file), request.expectsReply ? pending.set(request.id, request) : removeRequestFile(request.requestFile), pi.sendMessage({
5209
- customType: "subagent_supervisor_request",
5210
- content: requestVisibleText(request),
5307
+ if (request.expectsReply && pending.set(request.id, request), deliveredRequests.has(request.id)) {
5308
+ seenFiles.add(file);
5309
+ continue;
5310
+ }
5311
+ let communication = requestCommunication(request, state), details = {
5312
+ id: request.id,
5313
+ reason: request.reason,
5314
+ expectsReply: request.expectsReply,
5315
+ runId: request.runId,
5316
+ agent: request.agent,
5317
+ childIndex: request.childIndex,
5318
+ communication
5319
+ };
5320
+ if (request.reason === "progress_update" && request.protocolVersion === 2 ? pi.appendEntry(SUPERVISOR_PROGRESS_TYPE, details) : pi.sendMessage({
5321
+ customType: SUPERVISOR_REQUEST_TYPE,
5322
+ content: requestVisibleText(request, communication),
5211
5323
  display: !0,
5212
- details: {
5213
- id: request.id,
5214
- reason: request.reason,
5215
- expectsReply: request.expectsReply,
5216
- runId: request.runId,
5217
- agent: request.agent,
5218
- childIndex: request.childIndex
5219
- }
5220
- }), request.expectsReply) {
5324
+ details
5325
+ }, { triggerTurn: request.expectsReply || request.reason === "handoff" }), deliveredRequests.add(request.id), seenFiles.add(file), request.expectsReply || removeRequestFile(request.requestFile), request.expectsReply) {
5221
5326
  let job = state.asyncJobs.get(request.runId);
5222
5327
  job && (job.activityState = "needs_attention");
5223
5328
  let events = pi.events;
@@ -5238,10 +5343,17 @@ function createNativeSupervisorChannel(pi, state) {
5238
5343
  };
5239
5344
  return {
5240
5345
  start: () => {
5241
- poller || (registerParentTools(), poll(), poller = setInterval(poll, CHANNEL_POLL_MS), poller.unref?.());
5346
+ if (!poller) {
5347
+ registerParentTools();
5348
+ for (let entry of state.lastUiContext?.sessionManager.getBranch?.() ?? []) {
5349
+ let data = entry.type === "custom_message" && entry.customType === SUPERVISOR_REQUEST_TYPE ? entry.details : entry.type === "custom" && entry.customType === SUPERVISOR_PROGRESS_TYPE ? entry.data : void 0;
5350
+ data && typeof data == "object" && "id" in data && typeof data.id == "string" && deliveredRequests.add(data.id);
5351
+ }
5352
+ poll(), poller = setInterval(poll, CHANNEL_POLL_MS), poller.unref?.();
5353
+ }
5242
5354
  },
5243
5355
  dispose: () => {
5244
- cancelOwnedQuestions("parent supervisor channel disposed"), poller && clearInterval(poller), poller = void 0, pending.clear(), seenFiles.clear();
5356
+ cancelOwnedQuestions("parent supervisor channel disposed"), poller && clearInterval(poller), poller = void 0, pending.clear(), seenFiles.clear(), deliveredRequests.clear();
5245
5357
  },
5246
5358
  pending,
5247
5359
  cancelOwnedQuestions,
@@ -5722,6 +5834,8 @@ async function waitForDetachedForegroundRun(run, signal, deps, startedAt, now, p
5722
5834
  let outcome = summarizeForegroundChildren(current, initialDetachedIndices);
5723
5835
  return result(`Waited ${formatDuration(now() - startedAt)} for remembered detached foreground run "${run.runId}"; done. Outcome: ${outcome || "no recovered child status"}. Completion event observed; inspect with subagent({ action: "status", id: "${run.runId}" }) for recovered output.`);
5724
5836
  }
5837
+ if (deps.wasInterrupted?.())
5838
+ return result("Wait interrupted by user input; background work remains active.");
5725
5839
  if (signal?.aborted)
5726
5840
  return result(`Wait aborted after ${formatDuration(now() - startedAt)}. Remembered foreground run "${run.runId}" remains detached.`, !0);
5727
5841
  if (now() - startedAt >= timeoutMs)
@@ -5761,6 +5875,8 @@ async function waitForSupervisorQuestion(questionId, signal, deps, startedAt, no
5761
5875
  }
5762
5876
  };
5763
5877
  }
5878
+ if (deps.wasInterrupted?.())
5879
+ return result("Wait interrupted by user input; background work remains active.");
5764
5880
  if (signal?.aborted)
5765
5881
  return result(`Wait aborted after ${formatDuration(now() - startedAt)} for supervisor question "${questionId}".`, !0);
5766
5882
  if (now() - startedAt >= timeoutMs)
@@ -5811,8 +5927,12 @@ async function waitForSubagents(params, signal, deps) {
5811
5927
  ...activeInitialRuns.map((run) => `${run.id} (${run.state})`),
5812
5928
  ...activeInitialProviderItems.map((item) => `${item.provider}/${item.id}`)
5813
5929
  ].join(", ");
5930
+ if (deps.wasInterrupted?.())
5931
+ return result("Wait interrupted by user input; background work remains active.");
5814
5932
  if (signal?.aborted)
5815
5933
  return result(`Wait aborted after ${formatDuration(now() - startedAt)}. Still active: ${stillActive}.`, !0);
5934
+ if (deps.shouldYield?.())
5935
+ return result("Wait yielded for pending session messages; background work remains active.");
5816
5936
  if (now() - startedAt >= timeoutMs)
5817
5937
  return result(`Wait timed out after ${formatDuration(timeoutMs)} with ${activeInitialRuns.length} async run(s) and ${activeInitialProviderItems.length} provider item(s) still active: ${stillActive}. The work keeps going; call subagent_wait again or inspect subagent status.`, !0);
5818
5938
  try {
@@ -5842,6 +5962,16 @@ async function waitForSubagents(params, signal, deps) {
5842
5962
  }
5843
5963
 
5844
5964
  // packages/coding-agent/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js
5965
+ var WAIT_INTERRUPTION_SYMBOL = /* @__PURE__ */ Symbol.for("@lunr/subagent-wait-interruption");
5966
+ function registerWaitInterruption(sessionId) {
5967
+ return sessionId ? globalThis[WAIT_INTERRUPTION_SYMBOL]?.owners?.get(sessionId)?.register() : void 0;
5968
+ }
5969
+ function interruptedResult() {
5970
+ return {
5971
+ content: [{ type: "text", text: "Wait interrupted by user input; background work remains active." }],
5972
+ details: { mode: "management", results: [] }
5973
+ };
5974
+ }
5845
5975
  function registerWaitTool(pi, state, enabled = resolveWaitToolConfig().enabled, waitForPendingLaunches) {
5846
5976
  let tool = {
5847
5977
  name: "subagent_wait",
@@ -5861,7 +5991,25 @@ Provider jobs are session-scoped and identified exactly, so replacing one job wi
5861
5991
  Configured behavior: subagent_wait is disabled by config.waitTool or PI_SUBAGENT_WAIT_TOOL_ENABLED and returns immediately without blocking.`}`,
5862
5992
  parameters: SubagentWaitParams,
5863
5993
  async execute(_id, params, signal) {
5864
- return await Promise.resolve(), await waitForPendingLaunches?.(signal), signal?.throwIfAborted(), waitForSubagents(params, signal, { state, events: pi.events, enabled });
5994
+ await Promise.resolve();
5995
+ let interruption = registerWaitInterruption(state.currentSessionId), waitSignal = interruption ? signal ? AbortSignal.any([signal, interruption.signal]) : interruption.signal : signal;
5996
+ try {
5997
+ try {
5998
+ await waitForPendingLaunches?.(waitSignal);
5999
+ } catch (error) {
6000
+ if (interruption?.wasInterrupted())
6001
+ return interruptedResult();
6002
+ throw error;
6003
+ }
6004
+ return interruption?.wasInterrupted() ? interruptedResult() : (signal?.throwIfAborted(), waitForSubagents(params, waitSignal, {
6005
+ state,
6006
+ events: pi.events,
6007
+ enabled,
6008
+ wasInterrupted: interruption?.wasInterrupted
6009
+ }));
6010
+ } finally {
6011
+ interruption?.unregister();
6012
+ }
5865
6013
  }
5866
6014
  };
5867
6015
  pi.registerTool(tool);
@@ -5888,7 +6036,7 @@ async function drainOutstandingWork(deps) {
5888
6036
  if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
5889
6037
  throw new Error("Auto-drain timeoutMs must be a positive finite number.");
5890
6038
  let deadlineAt = now() + timeoutMs, hasWork = deps.hasWork ?? hasOutstandingWork, wait = deps.wait ?? waitForSubagents;
5891
- for (; hasWork(sessionId, now()); ) {
6039
+ for (; !deps.hasPendingMessages?.() && hasWork(sessionId, now()); ) {
5892
6040
  let remainingMs = deadlineAt - now();
5893
6041
  if (remainingMs <= 0)
5894
6042
  throw new Error(`Auto-drain timed out after ${timeoutMs}ms with background work still active in session '${sessionId}'.`);
@@ -5897,6 +6045,7 @@ async function drainOutstandingWork(deps) {
5897
6045
  events: deps.events,
5898
6046
  now,
5899
6047
  stopOnAttention: !1,
6048
+ shouldYield: deps.hasPendingMessages,
5900
6049
  failOnFailedRuns: !0
5901
6050
  });
5902
6051
  if (waitResult.isError)
@@ -6186,7 +6335,7 @@ var CUSTOM_TOOL_DESCRIPTION_FILE = "subagent-tool-description.md", CUSTOM_TOOL_D
6186
6335
  \u2022 Choose the lowest tier that can reliably complete the task.
6187
6336
  \u2022 light: Use for simple, straightforward tasks that require little reasoning. Good for quick checks, finding information, collecting facts for research, inspecting a small amount of code, or verifying a specific fact.
6188
6337
  \u2022 standard: Use for moderately difficult work and everyday coding tasks. Good for writing simple code, fixing a clearly described bug, reviewing a focused change, or completing work with clear requirements. Use heavy when the task requires deep architectural understanding or complex reasoning.
6189
- \u2022 heavy: Use for complex or ambiguous tasks that require deep reasoning and strong code understanding. Good for implementing complex plans, debugging difficult or poorly understood problems, reviewing large or high-risk changes, and making architectural decisions.`, SUBAGENT_SAFETY_GUIDANCE = `SAFETY-CRITICAL SUBAGENT GUIDANCE:
6338
+ \u2022 heavy: Use for complex or ambiguous tasks that require deep reasoning and strong code understanding. Good for implementing complex plans, debugging difficult or poorly understood problems, reviewing large or high-risk changes, and making architectural decisions.`, SUBAGENT_COORDINATION_GUIDANCE = "Define file ownership, local decision authority, and required outputs at launch. Establish shared contracts before dependent parallel work; use chains and artifacts to pass results. Native child intercom reaches the supervisor only, not siblings. Reserve parent relays for actionable exceptions, not routine progress or implementation approvals.", SUBAGENT_SAFETY_GUIDANCE = `SAFETY-CRITICAL SUBAGENT GUIDANCE:
6190
6339
  \u2022 Prompt children directly. There is no agent roster. Every execution task needs task (the full child prompt) and description (a concise UI label).
6191
6340
  \u2022 Every executable child chooses exactly one of tier: "light"|"standard"|"heavy" (default) or model: "provider/id" when the user names a model. Do not pass both, and do not use inherit. Missing, disabled, unconfigured, unavailable, or unauthenticated selections fail before launch.
6192
6341
  \u2022 Optional thinking (off/minimal/low/medium/high/xhigh/max) is only valid with an explicit model. Tier launches use the configured tier thinking level.
@@ -6196,6 +6345,7 @@ ${SUBAGENT_TIER_GUIDANCE}
6196
6345
  \u2022 ${SUBAGENT_ASYNC_GUIDANCE}
6197
6346
  \u2022 Child-safety boundary: ordinary children are not orchestrators and must not run subagents. Only explicitly configured fanout children may use the child-safe subagent tool, still bounded by depth/session limits.
6198
6347
  \u2022 Writing/review safety: keep one full-access writer for the same cwd/worktree. Use fresh-context permissions: "read-only" children for independent review, then have the parent synthesize and apply fixes as the sole writer unless an isolated worktree was intentionally requested.
6348
+ \u2022 ${SUBAGENT_COORDINATION_GUIDANCE}
6199
6349
  \u2022 Artifacts/status essentials: chain outputs live under {chain_dir}; async runs expose asyncId/asyncDir with status.json, events.jsonl, output logs, and status via { action: "status", id }. Include output paths and residual risks when reporting results.`, FULL_SUBAGENT_TOOL_DESCRIPTION = `Delegate work to generic children by prompting them directly. There are no named agent types.
6200
6350
 
6201
6351
  EXECUTION (use exactly ONE mode):
@@ -6247,6 +6397,7 @@ EXECUTE:
6247
6397
  \u2022 description is required (single-line, max 80 chars, UI only). task is the full child prompt. permissions omitted = full. Plan-mode parents must pass permissions:"read-only".
6248
6398
  \u2022 Exactly one of tier:"light"|"standard"|"heavy" (default) or model:"provider/id" when the user names a model. thinking only with model. No inherit; fail closed on unavailable selections. Children always start fresh. timeoutMs/maxRuntimeMs apply to foreground and async/background runs.
6249
6399
  ${SUBAGENT_TIER_GUIDANCE}
6400
+ \u2022 ${SUBAGENT_COORDINATION_GUIDANCE}
6250
6401
  \u2022 Chain templates may use {task}, {previous}, {chain_dir}, and named outputs. Parallel worktree isolation requires a clean git repo.
6251
6402
  \u2022 Chain example: { chain: [{task:"Analyze {task}", description:"Analyze request", tier:"standard"}, {parallel: [{task:"Check {previous}", description:"Check prior result", tier:"light", permissions:"read-only", count: 3}]}] }
6252
6403
 
@@ -6419,20 +6570,20 @@ function resolveSubagentActionDisplayTitle(args, state) {
6419
6570
  function renderSubagentCall(rawArgs, theme, context, options) {
6420
6571
  let args = resolveSubagentRequestParams(rawArgs);
6421
6572
  if (args.action) {
6422
- let target = context?.result?.details?.displayTitle || options?.resolveActionTitle?.(args) || args.id || args.runId || "";
6423
- return new Text2(`${theme.fg("toolTitle", theme.bold("subagent "))}${args.action}${target ? ` ${theme.fg("accent", target)}` : ""}`, 0, 0);
6573
+ let resolvedTitle = context?.result?.details?.displayTitle || options?.resolveActionTitle?.(args), target = resolvedTitle || args.id || args.runId || "";
6574
+ return (args.action === "steer" || args.action === "resume") && args.message ? renderCommunicationCall("subagent", args, theme, context, { direction: "to", peer: resolvedTitle || "Subagent", kind: "steer", message: args.message }, resolvedTitle) : new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${args.action}${target ? ` ${theme.fg("accent", target)}` : ""}`, 0, 0);
6424
6575
  }
6425
6576
  let isParallel = (args.tasks?.length ?? 0) > 0, parallelCount = effectiveParallelTaskCount(args.tasks), asyncMark = subagentLaunchRunsAsync(args) ? `${theme.fg("warning", "async")} ` : "";
6426
6577
  if (args.chain?.length)
6427
- return new Text2(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}chain (${args.chain.length})`, 0, 0);
6578
+ return new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}chain (${args.chain.length})`, 0, 0);
6428
6579
  if (isParallel)
6429
- return new Text2(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}parallel (${parallelCount})`, 0, 0);
6580
+ return new Text3(`${theme.fg("toolTitle", theme.bold("subagent "))}${asyncMark}parallel (${parallelCount})`, 0, 0);
6430
6581
  let description = !context?.result && !context?.isPartial && !context?.expanded && !context?.isError ? theme.fg("accent", args.description || args.task || "?") : "", title = theme.fg("toolTitle", theme.bold("subagent")), rest = [asyncMark.trim() ? theme.fg("warning", "async") : "", description].filter(Boolean).join(" ");
6431
- return new Text2(rest ? `${title} ${rest}` : title, 0, 0);
6582
+ return new Text3(rest ? `${title} ${rest}` : title, 0, 0);
6432
6583
  }
6433
6584
  function renderSubagentNotify(details, theme) {
6434
6585
  let status = typeof details?.status == "string" ? details.status : "", icon = status === "completed" ? theme.fg("success", "\u2713") : status === "failed" ? theme.fg("error", "\u2717") : theme.fg("warning", "\u25A0"), title = details?.agent || "child";
6435
- return new Text2(`${icon} ${theme.bold(title)} ${theme.fg("dim", status)}`, 0, 0);
6586
+ return new Text3(`${icon} ${theme.bold(title)} ${theme.fg("dim", status)}`, 0, 0);
6436
6587
  }
6437
6588
  function ensureSubagentResultAnimation(context) {
6438
6589
  let state = context.state;
@@ -6459,14 +6610,14 @@ function isStaleExtensionContextError(error) {
6459
6610
  }
6460
6611
  function rebuildSlashResultContainer(container, result2, options, theme) {
6461
6612
  container.clear(), container.addChild(new Spacer2(1));
6462
- let boxTheme = isSlashResultRunning(result2) ? "toolPendingBg" : isSlashResultError(result2) ? "toolErrorBg" : "toolSuccessBg", box = new Box(1, 1, (text) => theme.bg(boxTheme, text));
6613
+ let boxTheme = isSlashResultRunning(result2) ? "toolPendingBg" : isSlashResultError(result2) ? "toolErrorBg" : "toolSuccessBg", box = new Box2(1, 1, (text) => theme.bg(boxTheme, text));
6463
6614
  box.addChild(renderSubagentResult(result2, options, theme)), container.addChild(box);
6464
6615
  }
6465
6616
  function createSlashResultComponent(details, options, theme) {
6466
- let container = new Container2(), lastVersion = -1;
6617
+ let container = new Container3(), lastVersion = -1;
6467
6618
  return container.render = (width) => {
6468
6619
  let snapshot = getSlashRenderableSnapshot(details);
6469
- return (snapshot.version !== lastVersion || isSlashResultRunning(snapshot.result)) && (lastVersion = snapshot.version, rebuildSlashResultContainer(container, snapshot.result, options, theme)), Container2.prototype.render.call(container, width);
6620
+ return (snapshot.version !== lastVersion || isSlashResultRunning(snapshot.result)) && (lastVersion = snapshot.version, rebuildSlashResultContainer(container, snapshot.result, options, theme)), Container3.prototype.render.call(container, width);
6470
6621
  }, container;
6471
6622
  }
6472
6623
  function registerSubagentExtension(pi) {
@@ -6534,7 +6685,7 @@ function registerSubagentExtension(pi) {
6534
6685
  try {
6535
6686
  let currentGeneration = generation;
6536
6687
  if (signal?.throwIfAborted(), !executorPromise) {
6537
- let pending = import("./subagent-executor-MH4A7CCF.js").then(({ createSubagentExecutor }) => {
6688
+ let pending = import("./subagent-executor-M5VWB3D3.js").then(({ createSubagentExecutor }) => {
6538
6689
  if (generation !== currentGeneration)
6539
6690
  throw new Error("Subagent session changed before initialization");
6540
6691
  return createSubagentExecutor({
@@ -6563,27 +6714,31 @@ function registerSubagentExtension(pi) {
6563
6714
  }
6564
6715
  }
6565
6716
  };
6566
- executorExecute = executor.execute, pi.registerMessageRenderer(SLASH_RESULT_TYPE, (message, options, theme) => {
6717
+ executorExecute = executor.execute, registerSupervisorRenderers(pi, state), pi.registerMessageRenderer(SLASH_RESULT_TYPE, (message, options, theme) => {
6567
6718
  let details = resolveSlashMessageDetails(message.details);
6568
6719
  if (details)
6569
6720
  return createSlashResultComponent(details, options, theme);
6570
6721
  }), pi.registerMessageRenderer(SLASH_TEXT_RESULT_TYPE, (message, _options, _theme) => {
6571
6722
  let content = typeof message.content == "string" ? message.content : message.content.filter((entry) => entry.type === "text").map((entry) => entry.text).join(`
6572
6723
  `);
6573
- return new Text2(content, 0, 0);
6724
+ return new Text3(content, 0, 0);
6574
6725
  }), pi.registerMessageRenderer("subagent-notify", (message, _options, theme) => {
6575
6726
  let content = typeof message.content == "string" ? message.content : "", details = message.details ?? parseSubagentNotifyContent(content);
6576
- return details ? renderSubagentNotify(details, theme) : new Text2(content, 0, 0);
6727
+ return details ? renderSubagentNotify(details, theme) : new Text3(content, 0, 0);
6577
6728
  }), pi.registerMessageRenderer(SUBAGENT_STEERING_MESSAGE_TYPE, (message, _options, theme) => {
6578
6729
  let details = message.details;
6579
6730
  if (details)
6580
- return new Text2(theme.fg(details.state === "recovered" ? "warning" : "error", formatSteeringNotice(details)), 0, 0);
6731
+ return new Text3(theme.fg(details.state === "recovered" ? "warning" : "error", formatSteeringNotice(details)), 0, 0);
6581
6732
  }), pi.registerMessageRenderer(SUBAGENT_CONTROL_MESSAGE_TYPE, () => {
6582
6733
  });
6583
6734
  let executeSubagentCollapsed = async (id, params, signal, onUpdate, ctx) => {
6584
6735
  ctx.hasUI && ctx.ui.setToolsExpanded(!1);
6585
- let displayTitle = params.action === "steer" ? resolveSubagentActionDisplayTitle(params, state) : void 0, result2 = await executor.execute(id, params, signal, onUpdate, ctx);
6586
- return displayTitle && result2.details && (result2.details.displayTitle = displayTitle), result2;
6736
+ let isCommunication = (params.action === "steer" || params.action === "resume") && typeof params.message == "string", displayTitle = isCommunication ? resolveSubagentActionDisplayTitle(params, state) : void 0, jobs = isCommunication ? matchingActionJobs(state, (params.id || params.runId || "").trim()) : [], targetNames = new Map(jobs.length === 1 ? jobs[0].steps?.map((step, index) => [step.index ?? index, childRowLabel(step)]) : []), result2 = await executor.execute(id, params, signal, onUpdate, ctx);
6737
+ if (displayTitle && result2.details && (result2.details.displayTitle = displayTitle), isCommunication && result2.details) {
6738
+ let targets = result2.details.steering?.targets.map((target) => targetNames.get(target.index) ?? `Subagent ${target.index + 1}`), peer = targets?.length ? targets.join(", ") : displayTitle || "Subagent";
6739
+ result2.details.communication = { direction: "to", peer, kind: "steer", message: params.message };
6740
+ }
6741
+ return result2;
6587
6742
  }, slashBridge = registerSlashSubagentBridge({
6588
6743
  events: pi.events,
6589
6744
  getContext: () => state.lastUiContext,
@@ -6613,6 +6768,8 @@ function registerSubagentExtension(pi) {
6613
6768
  resolveActionTitle: (params) => resolveSubagentActionDisplayTitle(params, state)
6614
6769
  }),
6615
6770
  renderResult(result2, options, theme, context) {
6771
+ if (result2.details?.communication)
6772
+ return renderCommunicationResult(result2.content, result2.details, options.expanded, context.isError, theme);
6616
6773
  subagentResultIsRunning(result2) ? ensureSubagentResultAnimation(context) : clearLegacyResultAnimationTimer(context);
6617
6774
  let state2 = context.state, entries = [];
6618
6775
  state2.animEntries = entries, subagentAnimSink.current = entries;
@@ -6630,7 +6787,7 @@ function registerSubagentExtension(pi) {
6630
6787
  launches.length !== 0 && await awaitWithAbort(Promise.all(launches).then(() => {
6631
6788
  }), signal);
6632
6789
  }), pi.on("agent_end", async (_event, ctx) => {
6633
- ctx.hasUI || await drainOutstandingWork({ state, events: pi.events });
6790
+ ctx.hasUI || await drainOutstandingWork({ state, events: pi.events, hasPendingMessages: () => ctx.hasPendingMessages() });
6634
6791
  }), registerSlashCommands(pi, state);
6635
6792
  let eventUnsubscribeStoreKey = "__piSubagentEventUnsubscribes", controlNoticeSeenStoreKey = "__piSubagentVisibleControlNotices", previousEventUnsubscribes = globalStore[eventUnsubscribeStoreKey];
6636
6793
  if (Array.isArray(previousEventUnsubscribes)) {