@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":"subagent-prompt-runtime.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\nimport { registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt: Date.now(), supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
1
+ {"version":3,"file":"subagent-prompt-runtime.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ExtensionAPI } from \"@ashx-j/lunr\";\nimport { registerNativeSupervisorClient } from \"../../intercom/native-supervisor-channel.ts\";\nimport { consumeSteerRequestsFromDir, steerAckPathFromDir, writeSteerAckAt, writeSteerCapabilityAt, writeSteerRequestToDir, type SteerRequest } from \"../background/control-channel.ts\";\nimport { SUBAGENT_CHILD_AGENT_ENV, SUBAGENT_CHILD_INDEX_ENV, SUBAGENT_FANOUT_CHILD_ENV, SUBAGENT_STEER_ACK_DIR_ENV, SUBAGENT_STEER_CAPABILITY_ENV, SUBAGENT_STEER_INBOX_ENV } from \"./pi-args.ts\";\nimport { STRUCTURED_OUTPUT_CAPTURE_ENV, STRUCTURED_OUTPUT_SCHEMA_ENV, validateStructuredOutputValue } from \"./structured-output.ts\";\nimport {\n\tCHILD_TOOL_DIAGNOSTIC_PATH_ENV,\n\tformatChildToolDiagnostic,\n\tREQUIRED_CHILD_TOOLS_ENV,\n\twriteChildToolDiagnostic,\n\ttype ChildToolDiagnostic,\n} from \"./tool-availability.ts\";\nimport { TOOL_BUDGET_ENV, decodeToolBudgetEnv, shouldBlockToolForBudget, toolBudgetBlockedMessage, toolBudgetSoftNudge } from \"./tool-budget.ts\";\nimport type { JsonSchemaObject, ResolvedToolBudget, SubagentState } from \"../../shared/types.ts\";\nimport { resolveCurrentSessionId } from \"../../shared/session-identity.ts\";\nimport { resolveWatchPath } from \"../../shared/utils.ts\";\nimport { registerChildWatchdog } from \"../../watchdog/register-child.ts\";\nimport { SUBAGENT_WATCHDOG_WARNING_TYPE } from \"../../watchdog/types.ts\";\nimport { resolveWaitToolConfig } from \"../background/wait-config.ts\";\nimport { registerWaitTool } from \"../background/wait-tool.ts\";\nimport { drainOutstandingWork } from \"../background/auto-drain.ts\";\n\nconst SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV = \"PI_SUBAGENT_INHERIT_PROJECT_CONTEXT\";\nconst SUBAGENT_INHERIT_SKILLS_ENV = \"PI_SUBAGENT_INHERIT_SKILLS\";\nexport const SUBAGENT_INTERCOM_SESSION_NAME_ENV = \"PI_SUBAGENT_INTERCOM_SESSION_NAME\";\n\nconst STRUCTURED_OUTPUT_INSTRUCTIONS = [\n\t\"This subagent step has a strict structured output contract.\",\n\t\"Your final action must be to call the `structured_output` tool with JSON matching the provided schema.\",\n\t\"Do not rely on prose-only completion; if you do not call `structured_output`, the parent will fail this step.\",\n].join(\"\\n\");\n\nexport const CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent, not the parent orchestrator.\",\n\t\"The parent session owns delegation, orchestration, review fanout, and follow-up worker launches.\",\n\t\"Ignore prior parent-only orchestration instructions in inherited conversation history.\",\n\t\"Do not propose or run subagents. Complete only your assigned role-specific task with the tools available to you.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nexport const CHILD_FANOUT_BOUNDARY_INSTRUCTIONS = [\n\t\"You are a child subagent with explicit fanout responsibility for this assigned task.\",\n\t\"The parent session owns final orchestration, acceptance, and follow-up implementation launches.\",\n\t\"You may use the `subagent` tool only for the fanout work explicitly requested in this task.\",\n\t\"Do not broaden yourself into general parent orchestration. Do not launch follow-up workers unless the task explicitly asks for that.\",\n\t\"The maxSubagentDepth cap still applies and may block further fanout.\",\n\t\"If you need to edit files, use the available editing tools. Do not print tool-call syntax, patches, or pseudo-tool calls as text.\",\n].join(\"\\n\");\n\nconst PARENT_ONLY_CUSTOM_MESSAGE_TYPES = new Set([\n\t\"subagent-orchestration-instructions\",\n\t\"subagent-slash-result\",\n\t\"subagent-slash-text-result\",\n\t\"subagent-notify\",\n\t\"subagent_control_notice\",\n\t\"subagent-control\",\n\t\"subagent-control-notice\",\n]);\nconst SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN = /<name>\\s*pi-subagents\\s*<\\/name>/;\nconst PROJECT_CONTEXT_HEADER = \"\\n\\n# Project Context\\n\\nProject-specific instructions and guidelines:\\n\\n\";\nconst SKILLS_HEADER = \"\\n\\nThe following skills provide specialized instructions for specific tasks.\";\nconst DATE_HEADER = \"\\nCurrent date:\";\n\nfunction readBooleanEnv(name: string): boolean | undefined {\n\tconst value = process.env[name];\n\tif (value === undefined) return undefined;\n\treturn value !== \"0\";\n}\n\nfunction refreshChildToolDiagnostic(pi: ExtensionAPI): ChildToolDiagnostic | undefined {\n\tconst filePath = process.env[CHILD_TOOL_DIAGNOSTIC_PATH_ENV]?.trim();\n\tconst encoded = process.env[REQUIRED_CHILD_TOOLS_ENV]?.trim();\n\tif (!filePath || !encoded) return undefined;\n\tconst required = JSON.parse(encoded) as unknown;\n\tif (!Array.isArray(required) || required.some((name) => typeof name !== \"string\" || !name)) {\n\t\tthrow new Error(`Invalid ${REQUIRED_CHILD_TOOLS_ENV} payload.`);\n\t}\n\tconst available = pi.getAllTools().map((tool) => tool.name);\n\treturn writeChildToolDiagnostic(filePath, required, available, process.env[SUBAGENT_CHILD_AGENT_ENV]?.trim());\n}\n\nfunction findSectionEnd(prompt: string, startIndex: number, nextHeaders: string[]): number {\n\tlet endIndex = prompt.length;\n\tfor (const header of nextHeaders) {\n\t\tconst index = prompt.indexOf(header, startIndex);\n\t\tif (index !== -1 && index < endIndex) {\n\t\t\tendIndex = index;\n\t\t}\n\t}\n\treturn endIndex;\n}\n\nexport function stripProjectContext(prompt: string): string {\n\tconst startIndex = prompt.indexOf(PROJECT_CONTEXT_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + PROJECT_CONTEXT_HEADER.length, [SKILLS_HEADER, DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripInheritedSkills(prompt: string): string {\n\tconst startIndex = prompt.indexOf(SKILLS_HEADER);\n\tif (startIndex === -1) return prompt;\n\tconst endIndex = findSectionEnd(prompt, startIndex + SKILLS_HEADER.length, [DATE_HEADER]);\n\treturn `${prompt.slice(0, startIndex)}${prompt.slice(endIndex)}`;\n}\n\nexport function stripSubagentOrchestrationSkill(prompt: string): string {\n\treturn prompt\n\t\t.replace(/\\n{0,2}<skill\\s+name=[\"']pi-subagents[\"'][^>]*>[\\s\\S]*?<\\/skill>\\n{0,2}/g, \"\\n\\n\")\n\t\t.replace(/[ \\t]*<skill>\\s*[\\s\\S]*?<\\/skill>\\s*/g, (block) => SUBAGENT_ORCHESTRATION_SKILL_NAME_PATTERN.test(block) ? \"\" : block);\n}\n\nfunction stripChildBoundaryInstructions(prompt: string): string {\n\tlet rewritten = prompt;\n\tfor (const boundary of [CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS, CHILD_FANOUT_BOUNDARY_INSTRUCTIONS]) {\n\t\trewritten = rewritten.split(boundary).join(\"\");\n\t}\n\treturn rewritten.replace(/^(?:[ \\t]*\\r?\\n)+/, \"\");\n}\n\nexport function rewriteSubagentPrompt(\n\tprompt: string,\n\toptions: { inheritProjectContext: boolean; inheritSkills: boolean; fanoutChild?: boolean },\n): string {\n\tlet rewritten = prompt;\n\tif (!options.inheritProjectContext) {\n\t\trewritten = stripProjectContext(rewritten);\n\t}\n\tif (!options.inheritSkills) {\n\t\trewritten = stripInheritedSkills(rewritten);\n\t}\n\trewritten = stripSubagentOrchestrationSkill(rewritten);\n\trewritten = stripChildBoundaryInstructions(rewritten);\n\tconst boundary = options.fanoutChild ? CHILD_FANOUT_BOUNDARY_INSTRUCTIONS : CHILD_SUBAGENT_BOUNDARY_INSTRUCTIONS;\n\tconst structured = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV] ? `\\n\\n${STRUCTURED_OUTPUT_INSTRUCTIONS}` : \"\";\n\treturn `${boundary}${structured}\\n\\n${rewritten}`;\n}\n\nfunction isParentOnlySubagentMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; customType?: string };\n\tif (m?.role !== \"custom\" || typeof m.customType !== \"string\") return false;\n\tif (m.customType === SUBAGENT_WATCHDOG_WARNING_TYPE) return true;\n\treturn PARENT_ONLY_CUSTOM_MESSAGE_TYPES.has(m.customType);\n}\n\nfunction isSubagentToolResultMessage(message: unknown): boolean {\n\tconst m = message as { role?: string; toolName?: string };\n\treturn m?.role === \"toolResult\" && m.toolName === \"subagent\";\n}\n\nfunction isSubagentToolCallBlock(block: unknown): boolean {\n\tconst b = block as { type?: string; name?: string };\n\treturn b?.type === \"toolCall\" && b.name === \"subagent\";\n}\n\nfunction stripAssistantSubagentToolCallBlocks(message: unknown): unknown | undefined {\n\tconst m = message as { role?: string; content?: unknown };\n\tif (m?.role !== \"assistant\" || !Array.isArray(m.content)) return message;\n\tconst filteredContent = m.content.filter((block) => !isSubagentToolCallBlock(block));\n\tif (filteredContent.length === m.content.length) return message;\n\tif (filteredContent.length === 0) return undefined;\n\treturn { ...m, content: filteredContent };\n}\n\nexport function stripParentOnlySubagentMessages(messages: unknown[]): unknown[] {\n\tconst preserveCurrentFanoutToolHistory = process.env[SUBAGENT_FANOUT_CHILD_ENV] === \"1\";\n\tlet changed = false;\n\tconst filtered: unknown[] = [];\n\tfor (const message of messages) {\n\t\tif (isParentOnlySubagentMessage(message) || (!preserveCurrentFanoutToolHistory && isSubagentToolResultMessage(message))) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst stripped = preserveCurrentFanoutToolHistory ? message : stripAssistantSubagentToolCallBlocks(message);\n\t\tif (stripped === undefined) {\n\t\t\tchanged = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (stripped !== message) changed = true;\n\t\tfiltered.push(stripped);\n\t}\n\treturn changed ? filtered : messages;\n}\n\nexport function formatSteerMessage(request: SteerRequest): string {\n\treturn [\n\t\t\"Mid-run steering from the parent orchestrator:\",\n\t\t\"\",\n\t\trequest.message,\n\t\t\"\",\n\t\t\"Incorporate this guidance at the next safe point. Do not restart the task unless the guidance explicitly asks you to.\",\n\t].join(\"\\n\");\n}\n\nfunction registerToolBudget(pi: ExtensionAPI, budget: ResolvedToolBudget | undefined): void {\n\tif (!budget) return;\n\tlet toolCount = 0;\n\tlet softNudged = false;\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: { toolName?: string }) => unknown) => void;\n\tonRuntimeEvent(\"tool_call\", (event) => {\n\t\tconst toolName = typeof event.toolName === \"string\" ? event.toolName : \"tool\";\n\t\ttoolCount++;\n\t\tif (budget.soft !== undefined && toolCount >= budget.soft && !softNudged) {\n\t\t\tsoftNudged = true;\n\t\t\ttry {\n\t\t\t\tsendUserMessage?.(toolBudgetSoftNudge(budget, toolCount), { deliverAs: \"steer\" });\n\t\t\t} catch {\n\t\t\t\t// Budget nudges are advisory; blocking below remains authoritative.\n\t\t\t}\n\t\t}\n\t\tif (!shouldBlockToolForBudget(budget, toolName, toolCount)) return undefined;\n\t\treturn { block: true, reason: toolBudgetBlockedMessage(budget, toolName, toolCount) };\n\t});\n}\n\nexport function registerSteeringInbox(\n\tpi: ExtensionAPI,\n\tdeps: { watch?: typeof fs.watch; nativeRealpath?: (filePath: string) => string } = {},\n): void {\n\tconst steerInbox = process.env[SUBAGENT_STEER_INBOX_ENV]?.trim();\n\tif (!steerInbox) return;\n\tconst capabilityPath = process.env[SUBAGENT_STEER_CAPABILITY_ENV]?.trim();\n\tconst ackDir = process.env[SUBAGENT_STEER_ACK_DIR_ENV]?.trim();\n\tconst sendUserMessage = (pi as { sendUserMessage?: (content: string, options: { deliverAs: \"steer\" }) => unknown }).sendUserMessage;\n\tconst childIndex = Number(process.env[SUBAGENT_CHILD_INDEX_ENV]);\n\tconst pending = new Map<string, string[]>();\n\tlet disposed = false;\n\tlet flushing = false;\n\tlet started = false;\n\tlet canSteer = typeof sendUserMessage === \"function\";\n\tlet watcher: fs.FSWatcher | undefined;\n\tlet interval: NodeJS.Timeout | undefined;\n\tconst acknowledge = (request: SteerRequest, state: \"delivered\" | \"failed\", message: string): void => {\n\t\tif (!ackDir || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerAckAt(steerAckPathFromDir(ackDir, request.id), {\n\t\t\trequestId: request.id,\n\t\t\tindex: childIndex,\n\t\t\tts: Date.now(),\n\t\t\tstate,\n\t\t\tmessage,\n\t\t});\n\t};\n\tconst publishCapability = (): void => {\n\t\tif (!capabilityPath || !Number.isInteger(childIndex) || childIndex < 0) return;\n\t\twriteSteerCapabilityAt(capabilityPath, { index: childIndex, pid: process.pid, readyAt: Date.now(), supported: canSteer });\n\t};\n\tconst flush = (): void => {\n\t\tif (disposed || flushing) return;\n\t\tflushing = true;\n\t\ttry {\n\t\t\tconst requests = consumeSteerRequestsFromDir(steerInbox);\n\t\t\tfor (let index = 0; index < requests.length; index++) {\n\t\t\t\tconst request = requests[index]!;\n\t\t\t\tif (!canSteer || typeof sendUserMessage !== \"function\") {\n\t\t\t\t\tacknowledge(request, \"failed\", \"Child Pi session does not support sendUserMessage steering.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst formatted = formatSteerMessage(request);\n\t\t\t\tconst ids = pending.get(formatted) ?? [];\n\t\t\t\tids.push(request.id);\n\t\t\t\tpending.set(formatted, ids);\n\t\t\t\ttry {\n\t\t\t\t\tsendUserMessage(formatted, { deliverAs: \"steer\" });\n\t\t\t\t} catch (error) {\n\t\t\t\t\tids.pop();\n\t\t\t\t\tif (ids.length === 0) pending.delete(formatted);\n\t\t\t\t\tacknowledge(request, \"failed\", error instanceof Error ? error.message : String(error));\n\t\t\t\t\tfor (const retry of requests.slice(index + 1)) writeSteerRequestToDir(steerInbox, retry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tflushing = false;\n\t\t}\n\t};\n\tconst onInput = (event: unknown): undefined => {\n\t\tif (disposed || !event || typeof event !== \"object\") return undefined;\n\t\tconst input = event as { source?: unknown; streamingBehavior?: unknown; text?: unknown; content?: unknown };\n\t\tif (input.source !== \"extension\" || input.streamingBehavior !== \"steer\") return undefined;\n\t\tconst text = typeof input.text === \"string\" ? input.text : typeof input.content === \"string\" ? input.content : undefined;\n\t\tif (!text) return undefined;\n\t\tconst ids = pending.get(text);\n\t\tconst requestId = ids?.shift();\n\t\tif (!requestId) return undefined;\n\t\tif (ids?.length === 0) pending.delete(text);\n\t\tacknowledge({ type: \"steer\", id: requestId, ts: Date.now(), message: text }, \"delivered\", \"Pi accepted the correlated steering input.\");\n\t\treturn undefined;\n\t};\n\tconst start = (): void => {\n\t\tif (started || disposed) return;\n\t\ttry {\n\t\t\tfs.mkdirSync(steerInbox, { recursive: true });\n\t\t\tpublishCapability();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tstarted = true;\n\t\ttry {\n\t\t\twatcher = (deps.watch ?? fs.watch)(resolveWatchPath(steerInbox, deps.nativeRealpath), () => flush());\n\t\t\twatcher.on(\"error\", () => {});\n\t\t} catch {\n\t\t\twatcher = undefined;\n\t\t}\n\t\tinterval = setInterval(flush, 250);\n\t\tinterval.unref?.();\n\t};\n\tconst activate = (): undefined => {\n\t\tstart();\n\t\tflush();\n\t\treturn undefined;\n\t};\n\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\t// Register input before the watcher so an accepted extension input cannot race request dispatch.\n\tonRuntimeEvent(\"input\", onInput);\n\tonRuntimeEvent(\"session_start\", () => start());\n\tfor (const eventName of [\"message_start\", \"message_update\", \"message_end\", \"tool_execution_start\", \"tool_execution_end\", \"turn_end\"] as const) {\n\t\tonRuntimeEvent(eventName, activate);\n\t}\n\tonRuntimeEvent(\"session_shutdown\", () => {\n\t\tdisposed = true;\n\t\ttry { watcher?.close(); } catch {}\n\t\tif (interval) clearInterval(interval);\n\t});\n}\n\nexport default function registerSubagentPromptRuntime(pi: ExtensionAPI): void {\n\tregisterSteeringInbox(pi);\n\tregisterToolBudget(pi, decodeToolBudgetEnv(process.env[TOOL_BUDGET_ENV]));\n\tregisterChildWatchdog(pi);\n\tconst waitToolEnabled = resolveWaitToolConfig().enabled;\n\tconst waitState = {\n\t\tbaseCwd: \"\",\n\t\tcurrentSessionId: null,\n\t\tasyncJobs: new Map(),\n\t\tforegroundControls: new Map(),\n\t\tlastForegroundControlId: null,\n\t\tcleanupTimers: new Map(),\n\t\tlastUiContext: null,\n\t\tpoller: null,\n\t\tcompletionSeen: new Map(),\n\t\twatcher: null,\n\t\twatcherRestartTimer: null,\n\t\tresultFileCoalescer: { schedule: () => false, clear: () => {} },\n\t} as unknown as SubagentState;\n\tif (typeof pi.registerTool === \"function\") registerWaitTool(pi, waitState, waitToolEnabled);\n\tlet nativeSupervisorClientRegistered = false;\n\tlet nativeSupervisorFallbackRegistered = false;\n\tconst registerNativeSupervisorClientOnce = (): void => {\n\t\tif (nativeSupervisorClientRegistered) return;\n\t\tnativeSupervisorClientRegistered = true;\n\t\tregisterNativeSupervisorClient(pi, { includeIntercomFallback: false });\n\t};\n\tconst registerNativeSupervisorFallbackOnce = (): void => {\n\t\tregisterNativeSupervisorClientOnce();\n\t\tif (nativeSupervisorFallbackRegistered) return;\n\t\tnativeSupervisorFallbackRegistered = true;\n\t\tregisterNativeSupervisorClient(pi);\n\t};\n\tconst onRuntimeEvent = pi.on as unknown as (event: string, handler: (event: unknown) => unknown) => void;\n\tonRuntimeEvent(\"session_start\", (_event: unknown, ctx: unknown) => {\n\t\tconst sessionManager = (ctx as { sessionManager?: Parameters<typeof resolveCurrentSessionId>[0] } | undefined)?.sessionManager;\n\t\twaitState.currentSessionId = sessionManager ? resolveCurrentSessionId(sessionManager) : null;\n\t\tregisterNativeSupervisorClientOnce();\n\t\trefreshChildToolDiagnostic(pi);\n\t});\n\tonRuntimeEvent(\"agent_end\", async (_event: unknown, ctx: unknown) => {\n\t\tif ((ctx as { hasUI?: boolean } | undefined)?.hasUI === true) return;\n\t\tawait drainOutstandingWork({ state: waitState, events: pi.events });\n\t});\n\tconst structuredOutputPath = process.env[STRUCTURED_OUTPUT_CAPTURE_ENV];\n\tconst structuredSchemaPath = process.env[STRUCTURED_OUTPUT_SCHEMA_ENV];\n\tif (structuredOutputPath && structuredSchemaPath) {\n\t\tconst schema = JSON.parse(fs.readFileSync(structuredSchemaPath, \"utf-8\")) as JsonSchemaObject;\n\t\tconst parameters = {\n\t\t\ttype: \"object\",\n\t\t\tproperties: { value: schema },\n\t\t\trequired: [\"value\"],\n\t\t\tadditionalProperties: false,\n\t\t};\n\t\tconst registerTool = pi.registerTool as unknown as (tool: {\n\t\t\tname: string;\n\t\t\tlabel: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t\texecute: (_id: string, params: { value: unknown }) => Promise<unknown>;\n\t\t}) => void;\n\t\tregisterTool({\n\t\t\tname: \"structured_output\",\n\t\t\tlabel: \"Structured Output\",\n\t\t\tdescription: \"Submit the required final structured output for this subagent step. This terminates the step.\",\n\t\t\tparameters: parameters as never,\n\t\t\tasync execute(_id: string, params: { value: unknown }) {\n\t\t\t\tconst validation = validateStructuredOutputValue(schema, params.value);\n\t\t\t\tif (validation.status === \"invalid\") {\n\t\t\t\t\tthrow new Error(`Structured output validation failed: ${validation.message}`);\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(structuredOutputPath), { recursive: true });\n\t\t\t\tfs.writeFileSync(structuredOutputPath, JSON.stringify(params.value), { mode: 0o600 });\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: \"Structured output captured.\" }],\n\t\t\t\t\tdetails: { path: structuredOutputPath },\n\t\t\t\t\tterminate: true,\n\t\t\t\t};\n\t\t\t},\n\t\t});\n\t}\n\n\tonRuntimeEvent(\"context\", (event: { messages: unknown[] }) => {\n\t\tconst messages = stripParentOnlySubagentMessages(event.messages);\n\t\tif (messages === event.messages) return undefined;\n\t\treturn { messages };\n\t});\n\n\tonRuntimeEvent(\"before_agent_start\", async (event: { systemPrompt: string }) => {\n\t\tregisterNativeSupervisorFallbackOnce();\n\t\tconst toolDiagnostic = refreshChildToolDiagnostic(pi);\n\t\tconst intercomSessionName = process.env[SUBAGENT_INTERCOM_SESSION_NAME_ENV]?.trim();\n\t\tif (intercomSessionName && typeof pi.setSessionName === \"function\") {\n\t\t\tpi.setSessionName(intercomSessionName);\n\t\t}\n\n\t\tconst inheritProjectContext = readBooleanEnv(SUBAGENT_INHERIT_PROJECT_CONTEXT_ENV);\n\t\tconst inheritSkills = readBooleanEnv(SUBAGENT_INHERIT_SKILLS_ENV);\n\t\tconst fanoutChild = readBooleanEnv(SUBAGENT_FANOUT_CHILD_ENV);\n\t\tlet rewritten = event.systemPrompt;\n\t\tif (inheritProjectContext !== undefined || inheritSkills !== undefined || fanoutChild !== undefined) {\n\t\t\trewritten = rewriteSubagentPrompt(event.systemPrompt, {\n\t\t\t\tinheritProjectContext: inheritProjectContext ?? true,\n\t\t\t\tinheritSkills: inheritSkills ?? true,\n\t\t\t\tfanoutChild: fanoutChild === true,\n\t\t\t});\n\t\t}\n\t\tif (toolDiagnostic) {\n\t\t\trewritten = `${formatChildToolDiagnostic(toolDiagnostic)}\\nDo not claim tool-dependent work succeeded; report this configuration error to the parent.\\n\\n${rewritten}`;\n\t\t}\n\t\tif (rewritten === event.systemPrompt) return;\n\t\treturn { systemPrompt: rewritten };\n\t});\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { Message } from "@earendil-works/pi-ai";
1
+ import type { Message } from "@ashx-j/lunr-ai";
2
2
  export declare const CHILD_TRANSCRIPT_ARTIFACT_VERSION = 1;
3
3
  type ChildTranscriptSource = "foreground" | "async";
4
4
  type ChildTranscriptMessage = Message & {
@@ -1 +1 @@
1
- {"version":3,"file":"child-transcript.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-transcript.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAGnD,KAAK,qBAAqB,GAAG,YAAY,GAAG,OAAO,CAAC;AAGpD,KAAK,sBAAsB,GAAG,OAAO,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,UAAU,oBAAoB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,0BAA0B;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;CAC/B;AAgCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,qBAAqB,CAwIpG","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { extractTextFromContent, extractToolArgsPreview } from \"./utils.ts\";\n\nexport const CHILD_TRANSCRIPT_ARTIFACT_VERSION = 1;\nconst DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES = 50 * 1024 * 1024;\n\ntype ChildTranscriptSource = \"foreground\" | \"async\";\ntype ChildTranscriptRecordType = \"message\" | \"tool_start\" | \"tool_end\" | \"stdout\" | \"stderr\" | \"truncated\";\n\ntype ChildTranscriptMessage = Message & {\n\tmodel?: string;\n\terrorMessage?: string;\n\tstopReason?: string;\n\tusage?: unknown;\n};\n\ninterface ChildTranscriptEvent {\n\ttype?: string;\n\tmessage?: ChildTranscriptMessage;\n\ttoolName?: string;\n\targs?: unknown;\n}\n\ninterface ChildTranscriptWriterInput {\n\ttranscriptPath: string;\n\tsource: ChildTranscriptSource;\n\trunId: string;\n\tagent: string;\n\tchildIndex?: number;\n\tcwd: string;\n\tmaxBytes?: number;\n}\n\nexport interface ChildTranscriptWriter {\n\tpath: string;\n\twriteInitialUserMessage(prompt: string): void;\n\twriteChildEvent(event: ChildTranscriptEvent): void;\n\twriteStdoutLine(line: string): void;\n\twriteStderrLine(line: string): void;\n\twriteStderrText(text: string): void;\n\tgetError(): string | undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeUsage(value: unknown): { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number } | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst raw = value as Record<string, unknown>;\n\tconst rawCost = raw.cost;\n\tconst cost = rawCost && typeof rawCost === \"object\"\n\t\t? finiteNumber((rawCost as { total?: unknown }).total) ?? 0\n\t\t: finiteNumber(rawCost) ?? 0;\n\treturn {\n\t\tinput: finiteNumber(raw.input) ?? finiteNumber(raw.inputTokens) ?? 0,\n\t\toutput: finiteNumber(raw.output) ?? finiteNumber(raw.outputTokens) ?? 0,\n\t\tcacheRead: finiteNumber(raw.cacheRead) ?? 0,\n\t\tcacheWrite: finiteNumber(raw.cacheWrite) ?? 0,\n\t\tcost,\n\t};\n}\n\nfunction eventArgs(event: ChildTranscriptEvent): Record<string, unknown> {\n\treturn event.args && typeof event.args === \"object\" && !Array.isArray(event.args)\n\t\t? event.args as Record<string, unknown>\n\t\t: {};\n}\n\nexport function createChildTranscriptWriter(input: ChildTranscriptWriterInput): ChildTranscriptWriter {\n\tlet bytesWritten = 0;\n\tlet writeError: string | undefined;\n\tlet truncated = false;\n\tconst maxBytes = input.maxBytes ?? DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES;\n\n\tconst baseRecord = (recordType: ChildTranscriptRecordType) => {\n\t\tconst ts = Date.now();\n\t\treturn {\n\t\t\tversion: CHILD_TRANSCRIPT_ARTIFACT_VERSION,\n\t\t\trecordType,\n\t\t\tsource: input.source,\n\t\t\trunId: input.runId,\n\t\t\tagent: input.agent,\n\t\t\t...(input.childIndex !== undefined ? { childIndex: input.childIndex } : {}),\n\t\t\tcwd: input.cwd,\n\t\t\tts,\n\t\t\ttimestamp: new Date(ts).toISOString(),\n\t\t};\n\t};\n\n\tconst writeTruncatedMarker = () => {\n\t\ttruncated = true;\n\t\tconst marker = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tconst markerBytes = Buffer.byteLength(marker, \"utf-8\");\n\t\tif (bytesWritten + markerBytes > maxBytes) return false;\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, marker, \"utf-8\");\n\t\t\tbytesWritten += markerBytes;\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst writeRecord = (record: Record<string, unknown>) => {\n\t\tif (writeError || truncated) return;\n\t\tconst line = `${JSON.stringify(record)}\\n`;\n\t\tconst bytes = Buffer.byteLength(line, \"utf-8\");\n\t\tif (bytesWritten + bytes > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\tconst markerProbe = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tif (bytesWritten + bytes + Buffer.byteLength(markerProbe, \"utf-8\") > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, line, \"utf-8\");\n\t\t\tbytesWritten += bytes;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t}\n\t};\n\n\ttry {\n\t\tfs.mkdirSync(path.dirname(input.transcriptPath), { recursive: true });\n\t\tfs.writeFileSync(input.transcriptPath, \"\", \"utf-8\");\n\t} catch (error) {\n\t\twriteError = `Failed to initialize child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t}\n\n\tconst writeMessage = (sourceEventType: string, message: ChildTranscriptMessage) => {\n\t\tconst text = extractTextFromContent(message.content);\n\t\twriteRecord({\n\t\t\t...baseRecord(\"message\"),\n\t\t\tsourceEventType,\n\t\t\trole: message.role,\n\t\t\t...(text ? { text } : {}),\n\t\t\t...(message.model ? { model: message.model } : {}),\n\t\t\t...(message.stopReason ? { stopReason: message.stopReason } : {}),\n\t\t\t...(message.errorMessage ? { errorMessage: message.errorMessage } : {}),\n\t\t\t...(message.usage ? { usage: normalizeUsage(message.usage) } : {}),\n\t\t\tmessage,\n\t\t});\n\t};\n\n\treturn {\n\t\tpath: input.transcriptPath,\n\t\twriteInitialUserMessage(prompt: string) {\n\t\t\twriteRecord({\n\t\t\t\t...baseRecord(\"message\"),\n\t\t\t\tsourceEventType: \"initial_prompt\",\n\t\t\t\trole: \"user\",\n\t\t\t\ttext: prompt,\n\t\t\t\tmessage: { role: \"user\", content: [{ type: \"text\", text: prompt }] },\n\t\t\t});\n\t\t},\n\t\twriteChildEvent(event: ChildTranscriptEvent) {\n\t\t\tif ((event.type === \"message_end\" || event.type === \"tool_result_end\") && event.message) {\n\t\t\t\twriteMessage(event.type, event.message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_start\" && event.toolName) {\n\t\t\t\tconst args = eventArgs(event);\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_start\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t...(Object.keys(args).length > 0 ? { argsPreview: extractToolArgsPreview(args) } : {}),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_end\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\t...(event.toolName ? { toolName: event.toolName } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\twriteStdoutLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stdout\"), text: line });\n\t\t},\n\t\twriteStderrLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stderr\"), text: line });\n\t\t},\n\t\twriteStderrText(text: string) {\n\t\t\tfor (const line of text.split(/\\r?\\n/)) this.writeStderrLine(line);\n\t\t},\n\t\tgetError() {\n\t\t\treturn writeError;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"child-transcript.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-transcript.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAGnD,KAAK,qBAAqB,GAAG,YAAY,GAAG,OAAO,CAAC;AAGpD,KAAK,sBAAsB,GAAG,OAAO,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,UAAU,oBAAoB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,0BAA0B;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;CAC/B;AAgCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,qBAAqB,CAwIpG","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport { extractTextFromContent, extractToolArgsPreview } from \"./utils.ts\";\n\nexport const CHILD_TRANSCRIPT_ARTIFACT_VERSION = 1;\nconst DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES = 50 * 1024 * 1024;\n\ntype ChildTranscriptSource = \"foreground\" | \"async\";\ntype ChildTranscriptRecordType = \"message\" | \"tool_start\" | \"tool_end\" | \"stdout\" | \"stderr\" | \"truncated\";\n\ntype ChildTranscriptMessage = Message & {\n\tmodel?: string;\n\terrorMessage?: string;\n\tstopReason?: string;\n\tusage?: unknown;\n};\n\ninterface ChildTranscriptEvent {\n\ttype?: string;\n\tmessage?: ChildTranscriptMessage;\n\ttoolName?: string;\n\targs?: unknown;\n}\n\ninterface ChildTranscriptWriterInput {\n\ttranscriptPath: string;\n\tsource: ChildTranscriptSource;\n\trunId: string;\n\tagent: string;\n\tchildIndex?: number;\n\tcwd: string;\n\tmaxBytes?: number;\n}\n\nexport interface ChildTranscriptWriter {\n\tpath: string;\n\twriteInitialUserMessage(prompt: string): void;\n\twriteChildEvent(event: ChildTranscriptEvent): void;\n\twriteStdoutLine(line: string): void;\n\twriteStderrLine(line: string): void;\n\twriteStderrText(text: string): void;\n\tgetError(): string | undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeUsage(value: unknown): { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number } | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst raw = value as Record<string, unknown>;\n\tconst rawCost = raw.cost;\n\tconst cost = rawCost && typeof rawCost === \"object\"\n\t\t? finiteNumber((rawCost as { total?: unknown }).total) ?? 0\n\t\t: finiteNumber(rawCost) ?? 0;\n\treturn {\n\t\tinput: finiteNumber(raw.input) ?? finiteNumber(raw.inputTokens) ?? 0,\n\t\toutput: finiteNumber(raw.output) ?? finiteNumber(raw.outputTokens) ?? 0,\n\t\tcacheRead: finiteNumber(raw.cacheRead) ?? 0,\n\t\tcacheWrite: finiteNumber(raw.cacheWrite) ?? 0,\n\t\tcost,\n\t};\n}\n\nfunction eventArgs(event: ChildTranscriptEvent): Record<string, unknown> {\n\treturn event.args && typeof event.args === \"object\" && !Array.isArray(event.args)\n\t\t? event.args as Record<string, unknown>\n\t\t: {};\n}\n\nexport function createChildTranscriptWriter(input: ChildTranscriptWriterInput): ChildTranscriptWriter {\n\tlet bytesWritten = 0;\n\tlet writeError: string | undefined;\n\tlet truncated = false;\n\tconst maxBytes = input.maxBytes ?? DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES;\n\n\tconst baseRecord = (recordType: ChildTranscriptRecordType) => {\n\t\tconst ts = Date.now();\n\t\treturn {\n\t\t\tversion: CHILD_TRANSCRIPT_ARTIFACT_VERSION,\n\t\t\trecordType,\n\t\t\tsource: input.source,\n\t\t\trunId: input.runId,\n\t\t\tagent: input.agent,\n\t\t\t...(input.childIndex !== undefined ? { childIndex: input.childIndex } : {}),\n\t\t\tcwd: input.cwd,\n\t\t\tts,\n\t\t\ttimestamp: new Date(ts).toISOString(),\n\t\t};\n\t};\n\n\tconst writeTruncatedMarker = () => {\n\t\ttruncated = true;\n\t\tconst marker = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tconst markerBytes = Buffer.byteLength(marker, \"utf-8\");\n\t\tif (bytesWritten + markerBytes > maxBytes) return false;\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, marker, \"utf-8\");\n\t\t\tbytesWritten += markerBytes;\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst writeRecord = (record: Record<string, unknown>) => {\n\t\tif (writeError || truncated) return;\n\t\tconst line = `${JSON.stringify(record)}\\n`;\n\t\tconst bytes = Buffer.byteLength(line, \"utf-8\");\n\t\tif (bytesWritten + bytes > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\tconst markerProbe = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tif (bytesWritten + bytes + Buffer.byteLength(markerProbe, \"utf-8\") > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, line, \"utf-8\");\n\t\t\tbytesWritten += bytes;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t}\n\t};\n\n\ttry {\n\t\tfs.mkdirSync(path.dirname(input.transcriptPath), { recursive: true });\n\t\tfs.writeFileSync(input.transcriptPath, \"\", \"utf-8\");\n\t} catch (error) {\n\t\twriteError = `Failed to initialize child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t}\n\n\tconst writeMessage = (sourceEventType: string, message: ChildTranscriptMessage) => {\n\t\tconst text = extractTextFromContent(message.content);\n\t\twriteRecord({\n\t\t\t...baseRecord(\"message\"),\n\t\t\tsourceEventType,\n\t\t\trole: message.role,\n\t\t\t...(text ? { text } : {}),\n\t\t\t...(message.model ? { model: message.model } : {}),\n\t\t\t...(message.stopReason ? { stopReason: message.stopReason } : {}),\n\t\t\t...(message.errorMessage ? { errorMessage: message.errorMessage } : {}),\n\t\t\t...(message.usage ? { usage: normalizeUsage(message.usage) } : {}),\n\t\t\tmessage,\n\t\t});\n\t};\n\n\treturn {\n\t\tpath: input.transcriptPath,\n\t\twriteInitialUserMessage(prompt: string) {\n\t\t\twriteRecord({\n\t\t\t\t...baseRecord(\"message\"),\n\t\t\t\tsourceEventType: \"initial_prompt\",\n\t\t\t\trole: \"user\",\n\t\t\t\ttext: prompt,\n\t\t\t\tmessage: { role: \"user\", content: [{ type: \"text\", text: prompt }] },\n\t\t\t});\n\t\t},\n\t\twriteChildEvent(event: ChildTranscriptEvent) {\n\t\t\tif ((event.type === \"message_end\" || event.type === \"tool_result_end\") && event.message) {\n\t\t\t\twriteMessage(event.type, event.message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_start\" && event.toolName) {\n\t\t\t\tconst args = eventArgs(event);\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_start\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t...(Object.keys(args).length > 0 ? { argsPreview: extractToolArgsPreview(args) } : {}),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_end\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\t...(event.toolName ? { toolName: event.toolName } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\twriteStdoutLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stdout\"), text: line });\n\t\t},\n\t\twriteStderrLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stderr\"), text: line });\n\t\t},\n\t\twriteStderrText(text: string) {\n\t\t\tfor (const line of text.split(/\\r?\\n/)) this.writeStderrLine(line);\n\t\t},\n\t\tgetError() {\n\t\t\treturn writeError;\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"child-transcript.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-transcript.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@earendil-works/pi-ai\";\nimport { extractTextFromContent, extractToolArgsPreview } from \"./utils.ts\";\n\nexport const CHILD_TRANSCRIPT_ARTIFACT_VERSION = 1;\nconst DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES = 50 * 1024 * 1024;\n\ntype ChildTranscriptSource = \"foreground\" | \"async\";\ntype ChildTranscriptRecordType = \"message\" | \"tool_start\" | \"tool_end\" | \"stdout\" | \"stderr\" | \"truncated\";\n\ntype ChildTranscriptMessage = Message & {\n\tmodel?: string;\n\terrorMessage?: string;\n\tstopReason?: string;\n\tusage?: unknown;\n};\n\ninterface ChildTranscriptEvent {\n\ttype?: string;\n\tmessage?: ChildTranscriptMessage;\n\ttoolName?: string;\n\targs?: unknown;\n}\n\ninterface ChildTranscriptWriterInput {\n\ttranscriptPath: string;\n\tsource: ChildTranscriptSource;\n\trunId: string;\n\tagent: string;\n\tchildIndex?: number;\n\tcwd: string;\n\tmaxBytes?: number;\n}\n\nexport interface ChildTranscriptWriter {\n\tpath: string;\n\twriteInitialUserMessage(prompt: string): void;\n\twriteChildEvent(event: ChildTranscriptEvent): void;\n\twriteStdoutLine(line: string): void;\n\twriteStderrLine(line: string): void;\n\twriteStderrText(text: string): void;\n\tgetError(): string | undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeUsage(value: unknown): { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number } | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst raw = value as Record<string, unknown>;\n\tconst rawCost = raw.cost;\n\tconst cost = rawCost && typeof rawCost === \"object\"\n\t\t? finiteNumber((rawCost as { total?: unknown }).total) ?? 0\n\t\t: finiteNumber(rawCost) ?? 0;\n\treturn {\n\t\tinput: finiteNumber(raw.input) ?? finiteNumber(raw.inputTokens) ?? 0,\n\t\toutput: finiteNumber(raw.output) ?? finiteNumber(raw.outputTokens) ?? 0,\n\t\tcacheRead: finiteNumber(raw.cacheRead) ?? 0,\n\t\tcacheWrite: finiteNumber(raw.cacheWrite) ?? 0,\n\t\tcost,\n\t};\n}\n\nfunction eventArgs(event: ChildTranscriptEvent): Record<string, unknown> {\n\treturn event.args && typeof event.args === \"object\" && !Array.isArray(event.args)\n\t\t? event.args as Record<string, unknown>\n\t\t: {};\n}\n\nexport function createChildTranscriptWriter(input: ChildTranscriptWriterInput): ChildTranscriptWriter {\n\tlet bytesWritten = 0;\n\tlet writeError: string | undefined;\n\tlet truncated = false;\n\tconst maxBytes = input.maxBytes ?? DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES;\n\n\tconst baseRecord = (recordType: ChildTranscriptRecordType) => {\n\t\tconst ts = Date.now();\n\t\treturn {\n\t\t\tversion: CHILD_TRANSCRIPT_ARTIFACT_VERSION,\n\t\t\trecordType,\n\t\t\tsource: input.source,\n\t\t\trunId: input.runId,\n\t\t\tagent: input.agent,\n\t\t\t...(input.childIndex !== undefined ? { childIndex: input.childIndex } : {}),\n\t\t\tcwd: input.cwd,\n\t\t\tts,\n\t\t\ttimestamp: new Date(ts).toISOString(),\n\t\t};\n\t};\n\n\tconst writeTruncatedMarker = () => {\n\t\ttruncated = true;\n\t\tconst marker = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tconst markerBytes = Buffer.byteLength(marker, \"utf-8\");\n\t\tif (bytesWritten + markerBytes > maxBytes) return false;\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, marker, \"utf-8\");\n\t\t\tbytesWritten += markerBytes;\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst writeRecord = (record: Record<string, unknown>) => {\n\t\tif (writeError || truncated) return;\n\t\tconst line = `${JSON.stringify(record)}\\n`;\n\t\tconst bytes = Buffer.byteLength(line, \"utf-8\");\n\t\tif (bytesWritten + bytes > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\tconst markerProbe = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tif (bytesWritten + bytes + Buffer.byteLength(markerProbe, \"utf-8\") > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, line, \"utf-8\");\n\t\t\tbytesWritten += bytes;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t}\n\t};\n\n\ttry {\n\t\tfs.mkdirSync(path.dirname(input.transcriptPath), { recursive: true });\n\t\tfs.writeFileSync(input.transcriptPath, \"\", \"utf-8\");\n\t} catch (error) {\n\t\twriteError = `Failed to initialize child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t}\n\n\tconst writeMessage = (sourceEventType: string, message: ChildTranscriptMessage) => {\n\t\tconst text = extractTextFromContent(message.content);\n\t\twriteRecord({\n\t\t\t...baseRecord(\"message\"),\n\t\t\tsourceEventType,\n\t\t\trole: message.role,\n\t\t\t...(text ? { text } : {}),\n\t\t\t...(message.model ? { model: message.model } : {}),\n\t\t\t...(message.stopReason ? { stopReason: message.stopReason } : {}),\n\t\t\t...(message.errorMessage ? { errorMessage: message.errorMessage } : {}),\n\t\t\t...(message.usage ? { usage: normalizeUsage(message.usage) } : {}),\n\t\t\tmessage,\n\t\t});\n\t};\n\n\treturn {\n\t\tpath: input.transcriptPath,\n\t\twriteInitialUserMessage(prompt: string) {\n\t\t\twriteRecord({\n\t\t\t\t...baseRecord(\"message\"),\n\t\t\t\tsourceEventType: \"initial_prompt\",\n\t\t\t\trole: \"user\",\n\t\t\t\ttext: prompt,\n\t\t\t\tmessage: { role: \"user\", content: [{ type: \"text\", text: prompt }] },\n\t\t\t});\n\t\t},\n\t\twriteChildEvent(event: ChildTranscriptEvent) {\n\t\t\tif ((event.type === \"message_end\" || event.type === \"tool_result_end\") && event.message) {\n\t\t\t\twriteMessage(event.type, event.message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_start\" && event.toolName) {\n\t\t\t\tconst args = eventArgs(event);\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_start\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t...(Object.keys(args).length > 0 ? { argsPreview: extractToolArgsPreview(args) } : {}),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_end\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\t...(event.toolName ? { toolName: event.toolName } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\twriteStdoutLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stdout\"), text: line });\n\t\t},\n\t\twriteStderrLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stderr\"), text: line });\n\t\t},\n\t\twriteStderrText(text: string) {\n\t\t\tfor (const line of text.split(/\\r?\\n/)) this.writeStderrLine(line);\n\t\t},\n\t\tgetError() {\n\t\t\treturn writeError;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"child-transcript.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/child-transcript.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC;AACnD,MAAM,kCAAkC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAuC5D,SAAS,YAAY,CAAC,KAAc,EAAU;IAC7C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CAC9D;AAED,SAAS,YAAY,CAAC,KAAc,EAAsB;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC/E;AAED,SAAS,cAAc,CAAC,KAAc,EAAsG;IAC3I,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAClD,CAAC,CAAC,YAAY,CAAE,OAA+B,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACN,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;QACpE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;QACvE,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3C,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7C,IAAI;KACJ,CAAC;AAAA,CACF;AAED,SAAS,SAAS,CAAC,KAA2B,EAA2B;IACxE,OAAO,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QAChF,CAAC,CAAC,KAAK,CAAC,IAA+B;QACvC,CAAC,CAAC,EAAE,CAAC;AAAA,CACN;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAiC,EAAyB;IACrG,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,kCAAkC,CAAC;IAEtE,MAAM,UAAU,GAAG,CAAC,UAAqC,EAAE,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;YACN,OAAO,EAAE,iCAAiC;YAC1C,UAAU;YACV,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,EAAE;YACF,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;SACrC,CAAC;IAAA,CACF,CAAC;IAEF,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC;QAClC,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YAChC,GAAG,UAAU,CAAC,WAAW,CAAC;YAC1B,QAAQ;YACR,OAAO,EAAE,6BAA6B,QAAQ,uCAAuC;SACrF,CAAC,IAAI,CAAC;QACP,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,YAAY,GAAG,WAAW,GAAG,QAAQ;YAAE,OAAO,KAAK,CAAC;QACxD,IAAI,CAAC;YACJ,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,YAAY,IAAI,WAAW,CAAC;YAC5B,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,UAAU,GAAG,qCAAqC,KAAK,CAAC,cAAc,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAClG,OAAO,KAAK,CAAC;QACd,CAAC;IAAA,CACD,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,MAA+B,EAAE,EAAE,CAAC;QACxD,IAAI,UAAU,IAAI,SAAS;YAAE,OAAO;QACpC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,YAAY,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrC,oBAAoB,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACrC,GAAG,UAAU,CAAC,WAAW,CAAC;YAC1B,QAAQ;YACR,OAAO,EAAE,6BAA6B,QAAQ,uCAAuC;SACrF,CAAC,IAAI,CAAC;QACP,IAAI,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE,CAAC;YAC/E,oBAAoB,EAAE,CAAC;YACvB,OAAO;QACR,CAAC;QACD,IAAI,CAAC;YACJ,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,YAAY,IAAI,KAAK,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,UAAU,GAAG,qCAAqC,KAAK,CAAC,cAAc,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACnG,CAAC;IAAA,CACD,CAAC;IAEF,IAAI,CAAC;QACJ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,UAAU,GAAG,0CAA0C,KAAK,CAAC,cAAc,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IACxG,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,eAAuB,EAAE,OAA+B,EAAE,EAAE,CAAC;QAClF,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,WAAW,CAAC;YACX,GAAG,UAAU,CAAC,SAAS,CAAC;YACxB,eAAe;YACf,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO;SACP,CAAC,CAAC;IAAA,CACH,CAAC;IAEF,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,cAAc;QAC1B,uBAAuB,CAAC,MAAc,EAAE;YACvC,WAAW,CAAC;gBACX,GAAG,UAAU,CAAC,SAAS,CAAC;gBACxB,eAAe,EAAE,gBAAgB;gBACjC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;aACpE,CAAC,CAAC;QAAA,CACH;QACD,eAAe,CAAC,KAA2B,EAAE;YAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACzF,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;YACR,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC9B,WAAW,CAAC;oBACX,GAAG,UAAU,CAAC,YAAY,CAAC;oBAC3B,eAAe,EAAE,KAAK,CAAC,IAAI;oBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtF,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACzC,WAAW,CAAC;oBACX,GAAG,UAAU,CAAC,UAAU,CAAC;oBACzB,eAAe,EAAE,KAAK,CAAC,IAAI;oBAC3B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD,CAAC,CAAC;YACJ,CAAC;QAAA,CACD;QACD,eAAe,CAAC,IAAY,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,WAAW,CAAC,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAAA,CACrD;QACD,eAAe,CAAC,IAAY,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,WAAW,CAAC,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAAA,CACrD;QACD,eAAe,CAAC,IAAY,EAAE;YAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAAA,CACnE;QACD,QAAQ,GAAG;YACV,OAAO,UAAU,CAAC;QAAA,CAClB;KACD,CAAC;AAAA,CACF","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { Message } from \"@ashx-j/lunr-ai\";\nimport { extractTextFromContent, extractToolArgsPreview } from \"./utils.ts\";\n\nexport const CHILD_TRANSCRIPT_ARTIFACT_VERSION = 1;\nconst DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES = 50 * 1024 * 1024;\n\ntype ChildTranscriptSource = \"foreground\" | \"async\";\ntype ChildTranscriptRecordType = \"message\" | \"tool_start\" | \"tool_end\" | \"stdout\" | \"stderr\" | \"truncated\";\n\ntype ChildTranscriptMessage = Message & {\n\tmodel?: string;\n\terrorMessage?: string;\n\tstopReason?: string;\n\tusage?: unknown;\n};\n\ninterface ChildTranscriptEvent {\n\ttype?: string;\n\tmessage?: ChildTranscriptMessage;\n\ttoolName?: string;\n\targs?: unknown;\n}\n\ninterface ChildTranscriptWriterInput {\n\ttranscriptPath: string;\n\tsource: ChildTranscriptSource;\n\trunId: string;\n\tagent: string;\n\tchildIndex?: number;\n\tcwd: string;\n\tmaxBytes?: number;\n}\n\nexport interface ChildTranscriptWriter {\n\tpath: string;\n\twriteInitialUserMessage(prompt: string): void;\n\twriteChildEvent(event: ChildTranscriptEvent): void;\n\twriteStdoutLine(line: string): void;\n\twriteStderrLine(line: string): void;\n\twriteStderrText(text: string): void;\n\tgetError(): string | undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeUsage(value: unknown): { input: number; output: number; cacheRead: number; cacheWrite: number; cost: number } | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst raw = value as Record<string, unknown>;\n\tconst rawCost = raw.cost;\n\tconst cost = rawCost && typeof rawCost === \"object\"\n\t\t? finiteNumber((rawCost as { total?: unknown }).total) ?? 0\n\t\t: finiteNumber(rawCost) ?? 0;\n\treturn {\n\t\tinput: finiteNumber(raw.input) ?? finiteNumber(raw.inputTokens) ?? 0,\n\t\toutput: finiteNumber(raw.output) ?? finiteNumber(raw.outputTokens) ?? 0,\n\t\tcacheRead: finiteNumber(raw.cacheRead) ?? 0,\n\t\tcacheWrite: finiteNumber(raw.cacheWrite) ?? 0,\n\t\tcost,\n\t};\n}\n\nfunction eventArgs(event: ChildTranscriptEvent): Record<string, unknown> {\n\treturn event.args && typeof event.args === \"object\" && !Array.isArray(event.args)\n\t\t? event.args as Record<string, unknown>\n\t\t: {};\n}\n\nexport function createChildTranscriptWriter(input: ChildTranscriptWriterInput): ChildTranscriptWriter {\n\tlet bytesWritten = 0;\n\tlet writeError: string | undefined;\n\tlet truncated = false;\n\tconst maxBytes = input.maxBytes ?? DEFAULT_MAX_CHILD_TRANSCRIPT_BYTES;\n\n\tconst baseRecord = (recordType: ChildTranscriptRecordType) => {\n\t\tconst ts = Date.now();\n\t\treturn {\n\t\t\tversion: CHILD_TRANSCRIPT_ARTIFACT_VERSION,\n\t\t\trecordType,\n\t\t\tsource: input.source,\n\t\t\trunId: input.runId,\n\t\t\tagent: input.agent,\n\t\t\t...(input.childIndex !== undefined ? { childIndex: input.childIndex } : {}),\n\t\t\tcwd: input.cwd,\n\t\t\tts,\n\t\t\ttimestamp: new Date(ts).toISOString(),\n\t\t};\n\t};\n\n\tconst writeTruncatedMarker = () => {\n\t\ttruncated = true;\n\t\tconst marker = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tconst markerBytes = Buffer.byteLength(marker, \"utf-8\");\n\t\tif (bytesWritten + markerBytes > maxBytes) return false;\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, marker, \"utf-8\");\n\t\t\tbytesWritten += markerBytes;\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst writeRecord = (record: Record<string, unknown>) => {\n\t\tif (writeError || truncated) return;\n\t\tconst line = `${JSON.stringify(record)}\\n`;\n\t\tconst bytes = Buffer.byteLength(line, \"utf-8\");\n\t\tif (bytesWritten + bytes > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\tconst markerProbe = `${JSON.stringify({\n\t\t\t...baseRecord(\"truncated\"),\n\t\t\tmaxBytes,\n\t\t\tmessage: `Child transcript exceeded ${maxBytes} bytes; further records were omitted.`,\n\t\t})}\\n`;\n\t\tif (bytesWritten + bytes + Buffer.byteLength(markerProbe, \"utf-8\") > maxBytes) {\n\t\t\twriteTruncatedMarker();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfs.appendFileSync(input.transcriptPath, line, \"utf-8\");\n\t\t\tbytesWritten += bytes;\n\t\t} catch (error) {\n\t\t\twriteError = `Failed to write child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t\t}\n\t};\n\n\ttry {\n\t\tfs.mkdirSync(path.dirname(input.transcriptPath), { recursive: true });\n\t\tfs.writeFileSync(input.transcriptPath, \"\", \"utf-8\");\n\t} catch (error) {\n\t\twriteError = `Failed to initialize child transcript '${input.transcriptPath}': ${errorMessage(error)}`;\n\t}\n\n\tconst writeMessage = (sourceEventType: string, message: ChildTranscriptMessage) => {\n\t\tconst text = extractTextFromContent(message.content);\n\t\twriteRecord({\n\t\t\t...baseRecord(\"message\"),\n\t\t\tsourceEventType,\n\t\t\trole: message.role,\n\t\t\t...(text ? { text } : {}),\n\t\t\t...(message.model ? { model: message.model } : {}),\n\t\t\t...(message.stopReason ? { stopReason: message.stopReason } : {}),\n\t\t\t...(message.errorMessage ? { errorMessage: message.errorMessage } : {}),\n\t\t\t...(message.usage ? { usage: normalizeUsage(message.usage) } : {}),\n\t\t\tmessage,\n\t\t});\n\t};\n\n\treturn {\n\t\tpath: input.transcriptPath,\n\t\twriteInitialUserMessage(prompt: string) {\n\t\t\twriteRecord({\n\t\t\t\t...baseRecord(\"message\"),\n\t\t\t\tsourceEventType: \"initial_prompt\",\n\t\t\t\trole: \"user\",\n\t\t\t\ttext: prompt,\n\t\t\t\tmessage: { role: \"user\", content: [{ type: \"text\", text: prompt }] },\n\t\t\t});\n\t\t},\n\t\twriteChildEvent(event: ChildTranscriptEvent) {\n\t\t\tif ((event.type === \"message_end\" || event.type === \"tool_result_end\") && event.message) {\n\t\t\t\twriteMessage(event.type, event.message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_start\" && event.toolName) {\n\t\t\t\tconst args = eventArgs(event);\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_start\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\t...(Object.keys(args).length > 0 ? { argsPreview: extractToolArgsPreview(args) } : {}),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\twriteRecord({\n\t\t\t\t\t...baseRecord(\"tool_end\"),\n\t\t\t\t\tsourceEventType: event.type,\n\t\t\t\t\t...(event.toolName ? { toolName: event.toolName } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\twriteStdoutLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stdout\"), text: line });\n\t\t},\n\t\twriteStderrLine(line: string) {\n\t\t\tif (!line.trim()) return;\n\t\t\twriteRecord({ ...baseRecord(\"stderr\"), text: line });\n\t\t},\n\t\twriteStderrText(text: string) {\n\t\t\tfor (const line of text.split(/\\r?\\n/)) this.writeStderrLine(line);\n\t\t},\n\t\tgetError() {\n\t\t\treturn writeError;\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fork-context.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/fork-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjD,UAAU,kBAAkB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,oBAAoB;IAC7B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,kBAAkB,EAAE,CAAC;CACxC;AAED,UAAU,sBAAsB;IAC/B,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,IAAI,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;CAC1E;AAED,UAAU,0BAA0B;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC1E;2FACuF;IACvF,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACtD;AAOD,UAAU,mBAAmB;IAC5B,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxD,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAE/E;AAED;wFACwF;AACxF,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,eAAe,CAAC,EAAE,SAAS,EAAE,EAC7B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAMT;AA4DD,wBAAgB,yBAAyB,CACxC,cAAc,EAAE,sBAAsB,EACtC,gBAAgB,EAAE,OAAO,EACzB,OAAO,GAAE,0BAA+B,GACtC,mBAAmB,CA8ErB","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { SessionManager } from \"@earendil-works/pi-coding-agent\";\nimport { findModelInfo, type ModelInfo } from \"./model-info.ts\";\n\ntype SubagentExecutionContext = \"fresh\" | \"fork\";\n\ninterface BranchSessionEntry {\n\ttype: string;\n\tid?: string;\n\tparentId?: string | null;\n\ttimestamp?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tcontent?: unknown;\n\t\tprovider?: string;\n\t\tapi?: string;\n\t\tmodel?: string;\n\t};\n\tthinkingLevel?: string;\n}\n\ninterface BranchSessionManager {\n\tcreateBranchedSession(leafId: string): string | undefined;\n\tgetHeader?: () => BranchSessionEntry | null;\n\tgetEntries?: () => BranchSessionEntry[];\n}\n\ninterface ForkableSessionManager {\n\tgetSessionFile(): string | undefined;\n\tgetLeafId(): string | null;\n\tgetSessionDir?(): string;\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n}\n\ninterface ForkContextResolverOptions {\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n\t/** Decide per child index whether a sanitized transcript must also disable the child's\n\t * thinking. Defaults to true (the pre-existing conservative behavior) when omitted. */\n\tforceThinkingOffForIndex?: (index: number) => boolean;\n}\n\ninterface ForkContextResolution {\n\tsessionFile: string;\n\tthinkingOverride?: \"off\";\n}\n\ninterface ForkContextResolver {\n\tsessionFileForIndex(index?: number): string | undefined;\n\tthinkingOverrideForIndex(index?: number): \"off\" | undefined;\n}\n\nexport function resolveSubagentContext(value: unknown): SubagentExecutionContext {\n\treturn value === \"fork\" ? \"fork\" : \"fresh\";\n}\n\n/** Decide whether a resolved child model uses Anthropic's provider or message API, which\n * requires the sanitized fork to disable thinking. Unknown models stay conservative. */\nexport function forkedChildRequiresThinkingOff(\n\tmodel: string | undefined,\n\tavailableModels?: ModelInfo[],\n\tpreferredProvider?: string,\n): boolean {\n\tif (!model) return true;\n\tconst info = findModelInfo(model, availableModels, preferredProvider);\n\tif (!info) return true;\n\treturn info.provider.toLowerCase() === \"anthropic\"\n\t\t|| info.api?.toLowerCase() === \"anthropic-messages\";\n}\n\nfunction isUnsafeAnthropicThinkingBlock(message: BranchSessionEntry[\"message\"], block: unknown): boolean {\n\tif (!message || !block || typeof block !== \"object\" || !(\"type\" in block)) return false;\n\tconst provider = typeof message.provider === \"string\" ? message.provider.toLowerCase() : \"\";\n\tconst api = typeof message.api === \"string\" ? message.api.toLowerCase() : \"\";\n\tconst model = typeof message.model === \"string\" ? message.model.toLowerCase() : \"\";\n\tconst isAnthropic = provider === \"anthropic\" || api === \"anthropic-messages\" || model.startsWith(\"anthropic/\");\n\tif (block.type === \"redacted_thinking\") return true;\n\tif (block.type !== \"thinking\" || !isAnthropic) return false;\n\tconst signature = \"thinkingSignature\" in block ? block.thinkingSignature : \"signature\" in block ? block.signature : undefined;\n\treturn block.redacted === true || (typeof signature === \"string\" && signature.length > 0);\n}\n\nfunction createEntryId(entries: BranchSessionEntry[]): string {\n\tconst ids = new Set(entries.map((entry) => entry.id).filter((id): id is string => typeof id === \"string\"));\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!ids.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n\nfunction appendThinkingOffEntry(entries: BranchSessionEntry[]): void {\n\tconst last = entries[entries.length - 1];\n\tif (last?.type === \"thinking_level_change\" && last.thinkingLevel === \"off\") return;\n\tconst parent = [...entries].reverse().find((entry) => typeof entry.id === \"string\");\n\tentries.push({\n\t\ttype: \"thinking_level_change\",\n\t\tid: createEntryId(entries),\n\t\tparentId: parent?.id ?? null,\n\t\ttimestamp: new Date().toISOString(),\n\t\tthinkingLevel: \"off\",\n\t});\n}\n\nfunction sanitizeUnsafeThinkingBlocks(entries: BranchSessionEntry[]): boolean {\n\tlet sanitized = false;\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\" || entry.message?.role !== \"assistant\" || !Array.isArray(entry.message.content)) continue;\n\t\tconst filtered = entry.message.content.filter((block) => !isUnsafeAnthropicThinkingBlock(entry.message, block));\n\t\tif (filtered.length === entry.message.content.length) continue;\n\t\tentry.message.content = filtered;\n\t\tsanitized = true;\n\t}\n\treturn sanitized;\n}\n\nfunction readSessionEntries(sessionFile: string): BranchSessionEntry[] {\n\tconst lines = fs.readFileSync(sessionFile, \"utf-8\").split(\"\\n\").filter((line) => line.trim().length > 0);\n\treturn lines.map((line, index) => {\n\t\ttry {\n\t\t\treturn JSON.parse(line) as BranchSessionEntry;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Unable to inspect forked session ${sessionFile}: invalid JSONL on line ${index + 1}: ${cause.message}`, { cause });\n\t\t}\n\t});\n}\n\nexport function createForkContextResolver(\n\tsessionManager: ForkableSessionManager,\n\trequestedContext: unknown,\n\toptions: ForkContextResolverOptions = {},\n): ForkContextResolver {\n\tif (resolveSubagentContext(requestedContext) !== \"fork\") {\n\t\treturn {\n\t\t\tsessionFileForIndex: () => undefined,\n\t\t\tthinkingOverrideForIndex: () => undefined,\n\t\t};\n\t}\n\n\tconst parentSessionFile = sessionManager.getSessionFile();\n\tif (!parentSessionFile) {\n\t\tthrow new Error(\"Forked subagent context requires a persisted parent session.\");\n\t}\n\n\tconst leafId = sessionManager.getLeafId();\n\tif (!leafId) {\n\t\tthrow new Error(\"Forked subagent context requires a current leaf to fork from.\");\n\t}\n\n\tconst openSession = options.openSession\n\t\t?? sessionManager.openSession\n\t\t?? ((file: string, dir?: string) => SessionManager.open(file, dir));\n\tconst sessionDir = sessionManager.getSessionDir?.();\n\tconst cachedResolutions = new Map<number, ForkContextResolution>();\n\n\tconst resolveFork = (index = 0): ForkContextResolution => {\n\t\tconst cached = cachedResolutions.get(index);\n\t\tif (cached) return cached;\n\t\ttry {\n\t\t\tif (!fs.existsSync(parentSessionFile)) {\n\t\t\t\tthrow new Error(`Parent session file does not exist: ${parentSessionFile}. Pi has not persisted enough history to fork yet.`);\n\t\t\t}\n\t\t\tconst sourceManager = openSession(parentSessionFile, sessionDir);\n\t\t\tconst sessionFile = sourceManager.createBranchedSession(leafId);\n\t\t\tif (!sessionFile) {\n\t\t\t\tthrow new Error(\"Session manager did not return a forked session file.\");\n\t\t\t}\n\t\t\tconst forceThinkingOff = (sanitized: boolean): boolean =>\n\t\t\t\tsanitized && (options.forceThinkingOffForIndex?.(index) ?? true);\n\t\t\tlet thinkingOverride: \"off\" | undefined;\n\t\t\tif (!fs.existsSync(sessionFile)) {\n\t\t\t\tconst header = sourceManager.getHeader?.();\n\t\t\t\tconst entries = sourceManager.getEntries?.();\n\t\t\t\tif (!header || !entries) {\n\t\t\t\t\tthrow new Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${sessionFile}`);\n\t\t\t\t}\n\t\t\t\tif (forceThinkingOff(sanitizeUnsafeThinkingBlocks(entries))) {\n\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\t\t\tfs.writeFileSync(sessionFile, `${[header, ...entries].map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t} else {\n\t\t\t\tconst entries = readSessionEntries(sessionFile);\n\t\t\t\tif (sanitizeUnsafeThinkingBlocks(entries)) {\n\t\t\t\t\tif (forceThinkingOff(true)) {\n\t\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t\t}\n\t\t\t\t\tfs.writeFileSync(sessionFile, `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolution = { sessionFile, ...(thinkingOverride ? { thinkingOverride } : {}) };\n\t\t\tcachedResolutions.set(index, resolution);\n\t\t\treturn resolution;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Failed to create forked subagent session: ${cause.message}`, { cause });\n\t\t}\n\t};\n\n\treturn {\n\t\tsessionFileForIndex(index = 0): string | undefined {\n\t\t\treturn resolveFork(index).sessionFile;\n\t\t},\n\t\tthinkingOverrideForIndex(index = 0): \"off\" | undefined {\n\t\t\treturn resolveFork(index).thinkingOverride;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"fork-context.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/fork-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjD,UAAU,kBAAkB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,oBAAoB;IAC7B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,kBAAkB,EAAE,CAAC;CACxC;AAED,UAAU,sBAAsB;IAC/B,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,IAAI,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;CAC1E;AAED,UAAU,0BAA0B;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC1E;2FACuF;IACvF,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACtD;AAOD,UAAU,mBAAmB;IAC5B,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxD,wBAAwB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAE/E;AAED;wFACwF;AACxF,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,eAAe,CAAC,EAAE,SAAS,EAAE,EAC7B,iBAAiB,CAAC,EAAE,MAAM,GACxB,OAAO,CAMT;AA4DD,wBAAgB,yBAAyB,CACxC,cAAc,EAAE,sBAAsB,EACtC,gBAAgB,EAAE,OAAO,EACzB,OAAO,GAAE,0BAA+B,GACtC,mBAAmB,CA8ErB","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { SessionManager } from \"@ashx-j/lunr\";\nimport { findModelInfo, type ModelInfo } from \"./model-info.ts\";\n\ntype SubagentExecutionContext = \"fresh\" | \"fork\";\n\ninterface BranchSessionEntry {\n\ttype: string;\n\tid?: string;\n\tparentId?: string | null;\n\ttimestamp?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tcontent?: unknown;\n\t\tprovider?: string;\n\t\tapi?: string;\n\t\tmodel?: string;\n\t};\n\tthinkingLevel?: string;\n}\n\ninterface BranchSessionManager {\n\tcreateBranchedSession(leafId: string): string | undefined;\n\tgetHeader?: () => BranchSessionEntry | null;\n\tgetEntries?: () => BranchSessionEntry[];\n}\n\ninterface ForkableSessionManager {\n\tgetSessionFile(): string | undefined;\n\tgetLeafId(): string | null;\n\tgetSessionDir?(): string;\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n}\n\ninterface ForkContextResolverOptions {\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n\t/** Decide per child index whether a sanitized transcript must also disable the child's\n\t * thinking. Defaults to true (the pre-existing conservative behavior) when omitted. */\n\tforceThinkingOffForIndex?: (index: number) => boolean;\n}\n\ninterface ForkContextResolution {\n\tsessionFile: string;\n\tthinkingOverride?: \"off\";\n}\n\ninterface ForkContextResolver {\n\tsessionFileForIndex(index?: number): string | undefined;\n\tthinkingOverrideForIndex(index?: number): \"off\" | undefined;\n}\n\nexport function resolveSubagentContext(value: unknown): SubagentExecutionContext {\n\treturn value === \"fork\" ? \"fork\" : \"fresh\";\n}\n\n/** Decide whether a resolved child model uses Anthropic's provider or message API, which\n * requires the sanitized fork to disable thinking. Unknown models stay conservative. */\nexport function forkedChildRequiresThinkingOff(\n\tmodel: string | undefined,\n\tavailableModels?: ModelInfo[],\n\tpreferredProvider?: string,\n): boolean {\n\tif (!model) return true;\n\tconst info = findModelInfo(model, availableModels, preferredProvider);\n\tif (!info) return true;\n\treturn info.provider.toLowerCase() === \"anthropic\"\n\t\t|| info.api?.toLowerCase() === \"anthropic-messages\";\n}\n\nfunction isUnsafeAnthropicThinkingBlock(message: BranchSessionEntry[\"message\"], block: unknown): boolean {\n\tif (!message || !block || typeof block !== \"object\" || !(\"type\" in block)) return false;\n\tconst provider = typeof message.provider === \"string\" ? message.provider.toLowerCase() : \"\";\n\tconst api = typeof message.api === \"string\" ? message.api.toLowerCase() : \"\";\n\tconst model = typeof message.model === \"string\" ? message.model.toLowerCase() : \"\";\n\tconst isAnthropic = provider === \"anthropic\" || api === \"anthropic-messages\" || model.startsWith(\"anthropic/\");\n\tif (block.type === \"redacted_thinking\") return true;\n\tif (block.type !== \"thinking\" || !isAnthropic) return false;\n\tconst signature = \"thinkingSignature\" in block ? block.thinkingSignature : \"signature\" in block ? block.signature : undefined;\n\treturn block.redacted === true || (typeof signature === \"string\" && signature.length > 0);\n}\n\nfunction createEntryId(entries: BranchSessionEntry[]): string {\n\tconst ids = new Set(entries.map((entry) => entry.id).filter((id): id is string => typeof id === \"string\"));\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!ids.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n\nfunction appendThinkingOffEntry(entries: BranchSessionEntry[]): void {\n\tconst last = entries[entries.length - 1];\n\tif (last?.type === \"thinking_level_change\" && last.thinkingLevel === \"off\") return;\n\tconst parent = [...entries].reverse().find((entry) => typeof entry.id === \"string\");\n\tentries.push({\n\t\ttype: \"thinking_level_change\",\n\t\tid: createEntryId(entries),\n\t\tparentId: parent?.id ?? null,\n\t\ttimestamp: new Date().toISOString(),\n\t\tthinkingLevel: \"off\",\n\t});\n}\n\nfunction sanitizeUnsafeThinkingBlocks(entries: BranchSessionEntry[]): boolean {\n\tlet sanitized = false;\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\" || entry.message?.role !== \"assistant\" || !Array.isArray(entry.message.content)) continue;\n\t\tconst filtered = entry.message.content.filter((block) => !isUnsafeAnthropicThinkingBlock(entry.message, block));\n\t\tif (filtered.length === entry.message.content.length) continue;\n\t\tentry.message.content = filtered;\n\t\tsanitized = true;\n\t}\n\treturn sanitized;\n}\n\nfunction readSessionEntries(sessionFile: string): BranchSessionEntry[] {\n\tconst lines = fs.readFileSync(sessionFile, \"utf-8\").split(\"\\n\").filter((line) => line.trim().length > 0);\n\treturn lines.map((line, index) => {\n\t\ttry {\n\t\t\treturn JSON.parse(line) as BranchSessionEntry;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Unable to inspect forked session ${sessionFile}: invalid JSONL on line ${index + 1}: ${cause.message}`, { cause });\n\t\t}\n\t});\n}\n\nexport function createForkContextResolver(\n\tsessionManager: ForkableSessionManager,\n\trequestedContext: unknown,\n\toptions: ForkContextResolverOptions = {},\n): ForkContextResolver {\n\tif (resolveSubagentContext(requestedContext) !== \"fork\") {\n\t\treturn {\n\t\t\tsessionFileForIndex: () => undefined,\n\t\t\tthinkingOverrideForIndex: () => undefined,\n\t\t};\n\t}\n\n\tconst parentSessionFile = sessionManager.getSessionFile();\n\tif (!parentSessionFile) {\n\t\tthrow new Error(\"Forked subagent context requires a persisted parent session.\");\n\t}\n\n\tconst leafId = sessionManager.getLeafId();\n\tif (!leafId) {\n\t\tthrow new Error(\"Forked subagent context requires a current leaf to fork from.\");\n\t}\n\n\tconst openSession = options.openSession\n\t\t?? sessionManager.openSession\n\t\t?? ((file: string, dir?: string) => SessionManager.open(file, dir));\n\tconst sessionDir = sessionManager.getSessionDir?.();\n\tconst cachedResolutions = new Map<number, ForkContextResolution>();\n\n\tconst resolveFork = (index = 0): ForkContextResolution => {\n\t\tconst cached = cachedResolutions.get(index);\n\t\tif (cached) return cached;\n\t\ttry {\n\t\t\tif (!fs.existsSync(parentSessionFile)) {\n\t\t\t\tthrow new Error(`Parent session file does not exist: ${parentSessionFile}. Pi has not persisted enough history to fork yet.`);\n\t\t\t}\n\t\t\tconst sourceManager = openSession(parentSessionFile, sessionDir);\n\t\t\tconst sessionFile = sourceManager.createBranchedSession(leafId);\n\t\t\tif (!sessionFile) {\n\t\t\t\tthrow new Error(\"Session manager did not return a forked session file.\");\n\t\t\t}\n\t\t\tconst forceThinkingOff = (sanitized: boolean): boolean =>\n\t\t\t\tsanitized && (options.forceThinkingOffForIndex?.(index) ?? true);\n\t\t\tlet thinkingOverride: \"off\" | undefined;\n\t\t\tif (!fs.existsSync(sessionFile)) {\n\t\t\t\tconst header = sourceManager.getHeader?.();\n\t\t\t\tconst entries = sourceManager.getEntries?.();\n\t\t\t\tif (!header || !entries) {\n\t\t\t\t\tthrow new Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${sessionFile}`);\n\t\t\t\t}\n\t\t\t\tif (forceThinkingOff(sanitizeUnsafeThinkingBlocks(entries))) {\n\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\t\t\tfs.writeFileSync(sessionFile, `${[header, ...entries].map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t} else {\n\t\t\t\tconst entries = readSessionEntries(sessionFile);\n\t\t\t\tif (sanitizeUnsafeThinkingBlocks(entries)) {\n\t\t\t\t\tif (forceThinkingOff(true)) {\n\t\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t\t}\n\t\t\t\t\tfs.writeFileSync(sessionFile, `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolution = { sessionFile, ...(thinkingOverride ? { thinkingOverride } : {}) };\n\t\t\tcachedResolutions.set(index, resolution);\n\t\t\treturn resolution;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Failed to create forked subagent session: ${cause.message}`, { cause });\n\t\t}\n\t};\n\n\treturn {\n\t\tsessionFileForIndex(index = 0): string | undefined {\n\t\t\treturn resolveFork(index).sessionFile;\n\t\t},\n\t\tthinkingOverrideForIndex(index = 0): \"off\" | undefined {\n\t\t\treturn resolveFork(index).thinkingOverride;\n\t\t},\n\t};\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs";
4
4
  import * as path from "node:path";
5
- import { SessionManager } from "@earendil-works/pi-coding-agent";
5
+ import { SessionManager } from "@ashx-j/lunr";
6
6
  import { findModelInfo } from "./model-info.js";
7
7
  export function resolveSubagentContext(value) {
8
8
  return value === "fork" ? "fork" : "fresh";
@@ -1 +1 @@
1
- {"version":3,"file":"fork-context.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/fork-context.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { SessionManager } from \"@earendil-works/pi-coding-agent\";\nimport { findModelInfo, type ModelInfo } from \"./model-info.ts\";\n\ntype SubagentExecutionContext = \"fresh\" | \"fork\";\n\ninterface BranchSessionEntry {\n\ttype: string;\n\tid?: string;\n\tparentId?: string | null;\n\ttimestamp?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tcontent?: unknown;\n\t\tprovider?: string;\n\t\tapi?: string;\n\t\tmodel?: string;\n\t};\n\tthinkingLevel?: string;\n}\n\ninterface BranchSessionManager {\n\tcreateBranchedSession(leafId: string): string | undefined;\n\tgetHeader?: () => BranchSessionEntry | null;\n\tgetEntries?: () => BranchSessionEntry[];\n}\n\ninterface ForkableSessionManager {\n\tgetSessionFile(): string | undefined;\n\tgetLeafId(): string | null;\n\tgetSessionDir?(): string;\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n}\n\ninterface ForkContextResolverOptions {\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n\t/** Decide per child index whether a sanitized transcript must also disable the child's\n\t * thinking. Defaults to true (the pre-existing conservative behavior) when omitted. */\n\tforceThinkingOffForIndex?: (index: number) => boolean;\n}\n\ninterface ForkContextResolution {\n\tsessionFile: string;\n\tthinkingOverride?: \"off\";\n}\n\ninterface ForkContextResolver {\n\tsessionFileForIndex(index?: number): string | undefined;\n\tthinkingOverrideForIndex(index?: number): \"off\" | undefined;\n}\n\nexport function resolveSubagentContext(value: unknown): SubagentExecutionContext {\n\treturn value === \"fork\" ? \"fork\" : \"fresh\";\n}\n\n/** Decide whether a resolved child model uses Anthropic's provider or message API, which\n * requires the sanitized fork to disable thinking. Unknown models stay conservative. */\nexport function forkedChildRequiresThinkingOff(\n\tmodel: string | undefined,\n\tavailableModels?: ModelInfo[],\n\tpreferredProvider?: string,\n): boolean {\n\tif (!model) return true;\n\tconst info = findModelInfo(model, availableModels, preferredProvider);\n\tif (!info) return true;\n\treturn info.provider.toLowerCase() === \"anthropic\"\n\t\t|| info.api?.toLowerCase() === \"anthropic-messages\";\n}\n\nfunction isUnsafeAnthropicThinkingBlock(message: BranchSessionEntry[\"message\"], block: unknown): boolean {\n\tif (!message || !block || typeof block !== \"object\" || !(\"type\" in block)) return false;\n\tconst provider = typeof message.provider === \"string\" ? message.provider.toLowerCase() : \"\";\n\tconst api = typeof message.api === \"string\" ? message.api.toLowerCase() : \"\";\n\tconst model = typeof message.model === \"string\" ? message.model.toLowerCase() : \"\";\n\tconst isAnthropic = provider === \"anthropic\" || api === \"anthropic-messages\" || model.startsWith(\"anthropic/\");\n\tif (block.type === \"redacted_thinking\") return true;\n\tif (block.type !== \"thinking\" || !isAnthropic) return false;\n\tconst signature = \"thinkingSignature\" in block ? block.thinkingSignature : \"signature\" in block ? block.signature : undefined;\n\treturn block.redacted === true || (typeof signature === \"string\" && signature.length > 0);\n}\n\nfunction createEntryId(entries: BranchSessionEntry[]): string {\n\tconst ids = new Set(entries.map((entry) => entry.id).filter((id): id is string => typeof id === \"string\"));\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!ids.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n\nfunction appendThinkingOffEntry(entries: BranchSessionEntry[]): void {\n\tconst last = entries[entries.length - 1];\n\tif (last?.type === \"thinking_level_change\" && last.thinkingLevel === \"off\") return;\n\tconst parent = [...entries].reverse().find((entry) => typeof entry.id === \"string\");\n\tentries.push({\n\t\ttype: \"thinking_level_change\",\n\t\tid: createEntryId(entries),\n\t\tparentId: parent?.id ?? null,\n\t\ttimestamp: new Date().toISOString(),\n\t\tthinkingLevel: \"off\",\n\t});\n}\n\nfunction sanitizeUnsafeThinkingBlocks(entries: BranchSessionEntry[]): boolean {\n\tlet sanitized = false;\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\" || entry.message?.role !== \"assistant\" || !Array.isArray(entry.message.content)) continue;\n\t\tconst filtered = entry.message.content.filter((block) => !isUnsafeAnthropicThinkingBlock(entry.message, block));\n\t\tif (filtered.length === entry.message.content.length) continue;\n\t\tentry.message.content = filtered;\n\t\tsanitized = true;\n\t}\n\treturn sanitized;\n}\n\nfunction readSessionEntries(sessionFile: string): BranchSessionEntry[] {\n\tconst lines = fs.readFileSync(sessionFile, \"utf-8\").split(\"\\n\").filter((line) => line.trim().length > 0);\n\treturn lines.map((line, index) => {\n\t\ttry {\n\t\t\treturn JSON.parse(line) as BranchSessionEntry;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Unable to inspect forked session ${sessionFile}: invalid JSONL on line ${index + 1}: ${cause.message}`, { cause });\n\t\t}\n\t});\n}\n\nexport function createForkContextResolver(\n\tsessionManager: ForkableSessionManager,\n\trequestedContext: unknown,\n\toptions: ForkContextResolverOptions = {},\n): ForkContextResolver {\n\tif (resolveSubagentContext(requestedContext) !== \"fork\") {\n\t\treturn {\n\t\t\tsessionFileForIndex: () => undefined,\n\t\t\tthinkingOverrideForIndex: () => undefined,\n\t\t};\n\t}\n\n\tconst parentSessionFile = sessionManager.getSessionFile();\n\tif (!parentSessionFile) {\n\t\tthrow new Error(\"Forked subagent context requires a persisted parent session.\");\n\t}\n\n\tconst leafId = sessionManager.getLeafId();\n\tif (!leafId) {\n\t\tthrow new Error(\"Forked subagent context requires a current leaf to fork from.\");\n\t}\n\n\tconst openSession = options.openSession\n\t\t?? sessionManager.openSession\n\t\t?? ((file: string, dir?: string) => SessionManager.open(file, dir));\n\tconst sessionDir = sessionManager.getSessionDir?.();\n\tconst cachedResolutions = new Map<number, ForkContextResolution>();\n\n\tconst resolveFork = (index = 0): ForkContextResolution => {\n\t\tconst cached = cachedResolutions.get(index);\n\t\tif (cached) return cached;\n\t\ttry {\n\t\t\tif (!fs.existsSync(parentSessionFile)) {\n\t\t\t\tthrow new Error(`Parent session file does not exist: ${parentSessionFile}. Pi has not persisted enough history to fork yet.`);\n\t\t\t}\n\t\t\tconst sourceManager = openSession(parentSessionFile, sessionDir);\n\t\t\tconst sessionFile = sourceManager.createBranchedSession(leafId);\n\t\t\tif (!sessionFile) {\n\t\t\t\tthrow new Error(\"Session manager did not return a forked session file.\");\n\t\t\t}\n\t\t\tconst forceThinkingOff = (sanitized: boolean): boolean =>\n\t\t\t\tsanitized && (options.forceThinkingOffForIndex?.(index) ?? true);\n\t\t\tlet thinkingOverride: \"off\" | undefined;\n\t\t\tif (!fs.existsSync(sessionFile)) {\n\t\t\t\tconst header = sourceManager.getHeader?.();\n\t\t\t\tconst entries = sourceManager.getEntries?.();\n\t\t\t\tif (!header || !entries) {\n\t\t\t\t\tthrow new Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${sessionFile}`);\n\t\t\t\t}\n\t\t\t\tif (forceThinkingOff(sanitizeUnsafeThinkingBlocks(entries))) {\n\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\t\t\tfs.writeFileSync(sessionFile, `${[header, ...entries].map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t} else {\n\t\t\t\tconst entries = readSessionEntries(sessionFile);\n\t\t\t\tif (sanitizeUnsafeThinkingBlocks(entries)) {\n\t\t\t\t\tif (forceThinkingOff(true)) {\n\t\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t\t}\n\t\t\t\t\tfs.writeFileSync(sessionFile, `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolution = { sessionFile, ...(thinkingOverride ? { thinkingOverride } : {}) };\n\t\t\tcachedResolutions.set(index, resolution);\n\t\t\treturn resolution;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Failed to create forked subagent session: ${cause.message}`, { cause });\n\t\t}\n\t};\n\n\treturn {\n\t\tsessionFileForIndex(index = 0): string | undefined {\n\t\t\treturn resolveFork(index).sessionFile;\n\t\t},\n\t\tthinkingOverrideForIndex(index = 0): \"off\" | undefined {\n\t\t\treturn resolveFork(index).thinkingOverride;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"fork-context.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/shared/fork-context.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { randomUUID } from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { SessionManager } from \"@ashx-j/lunr\";\nimport { findModelInfo, type ModelInfo } from \"./model-info.ts\";\n\ntype SubagentExecutionContext = \"fresh\" | \"fork\";\n\ninterface BranchSessionEntry {\n\ttype: string;\n\tid?: string;\n\tparentId?: string | null;\n\ttimestamp?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tcontent?: unknown;\n\t\tprovider?: string;\n\t\tapi?: string;\n\t\tmodel?: string;\n\t};\n\tthinkingLevel?: string;\n}\n\ninterface BranchSessionManager {\n\tcreateBranchedSession(leafId: string): string | undefined;\n\tgetHeader?: () => BranchSessionEntry | null;\n\tgetEntries?: () => BranchSessionEntry[];\n}\n\ninterface ForkableSessionManager {\n\tgetSessionFile(): string | undefined;\n\tgetLeafId(): string | null;\n\tgetSessionDir?(): string;\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n}\n\ninterface ForkContextResolverOptions {\n\topenSession?: (path: string, sessionDir?: string) => BranchSessionManager;\n\t/** Decide per child index whether a sanitized transcript must also disable the child's\n\t * thinking. Defaults to true (the pre-existing conservative behavior) when omitted. */\n\tforceThinkingOffForIndex?: (index: number) => boolean;\n}\n\ninterface ForkContextResolution {\n\tsessionFile: string;\n\tthinkingOverride?: \"off\";\n}\n\ninterface ForkContextResolver {\n\tsessionFileForIndex(index?: number): string | undefined;\n\tthinkingOverrideForIndex(index?: number): \"off\" | undefined;\n}\n\nexport function resolveSubagentContext(value: unknown): SubagentExecutionContext {\n\treturn value === \"fork\" ? \"fork\" : \"fresh\";\n}\n\n/** Decide whether a resolved child model uses Anthropic's provider or message API, which\n * requires the sanitized fork to disable thinking. Unknown models stay conservative. */\nexport function forkedChildRequiresThinkingOff(\n\tmodel: string | undefined,\n\tavailableModels?: ModelInfo[],\n\tpreferredProvider?: string,\n): boolean {\n\tif (!model) return true;\n\tconst info = findModelInfo(model, availableModels, preferredProvider);\n\tif (!info) return true;\n\treturn info.provider.toLowerCase() === \"anthropic\"\n\t\t|| info.api?.toLowerCase() === \"anthropic-messages\";\n}\n\nfunction isUnsafeAnthropicThinkingBlock(message: BranchSessionEntry[\"message\"], block: unknown): boolean {\n\tif (!message || !block || typeof block !== \"object\" || !(\"type\" in block)) return false;\n\tconst provider = typeof message.provider === \"string\" ? message.provider.toLowerCase() : \"\";\n\tconst api = typeof message.api === \"string\" ? message.api.toLowerCase() : \"\";\n\tconst model = typeof message.model === \"string\" ? message.model.toLowerCase() : \"\";\n\tconst isAnthropic = provider === \"anthropic\" || api === \"anthropic-messages\" || model.startsWith(\"anthropic/\");\n\tif (block.type === \"redacted_thinking\") return true;\n\tif (block.type !== \"thinking\" || !isAnthropic) return false;\n\tconst signature = \"thinkingSignature\" in block ? block.thinkingSignature : \"signature\" in block ? block.signature : undefined;\n\treturn block.redacted === true || (typeof signature === \"string\" && signature.length > 0);\n}\n\nfunction createEntryId(entries: BranchSessionEntry[]): string {\n\tconst ids = new Set(entries.map((entry) => entry.id).filter((id): id is string => typeof id === \"string\"));\n\tfor (let attempt = 0; attempt < 100; attempt++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!ids.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n\nfunction appendThinkingOffEntry(entries: BranchSessionEntry[]): void {\n\tconst last = entries[entries.length - 1];\n\tif (last?.type === \"thinking_level_change\" && last.thinkingLevel === \"off\") return;\n\tconst parent = [...entries].reverse().find((entry) => typeof entry.id === \"string\");\n\tentries.push({\n\t\ttype: \"thinking_level_change\",\n\t\tid: createEntryId(entries),\n\t\tparentId: parent?.id ?? null,\n\t\ttimestamp: new Date().toISOString(),\n\t\tthinkingLevel: \"off\",\n\t});\n}\n\nfunction sanitizeUnsafeThinkingBlocks(entries: BranchSessionEntry[]): boolean {\n\tlet sanitized = false;\n\tfor (const entry of entries) {\n\t\tif (entry.type !== \"message\" || entry.message?.role !== \"assistant\" || !Array.isArray(entry.message.content)) continue;\n\t\tconst filtered = entry.message.content.filter((block) => !isUnsafeAnthropicThinkingBlock(entry.message, block));\n\t\tif (filtered.length === entry.message.content.length) continue;\n\t\tentry.message.content = filtered;\n\t\tsanitized = true;\n\t}\n\treturn sanitized;\n}\n\nfunction readSessionEntries(sessionFile: string): BranchSessionEntry[] {\n\tconst lines = fs.readFileSync(sessionFile, \"utf-8\").split(\"\\n\").filter((line) => line.trim().length > 0);\n\treturn lines.map((line, index) => {\n\t\ttry {\n\t\t\treturn JSON.parse(line) as BranchSessionEntry;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Unable to inspect forked session ${sessionFile}: invalid JSONL on line ${index + 1}: ${cause.message}`, { cause });\n\t\t}\n\t});\n}\n\nexport function createForkContextResolver(\n\tsessionManager: ForkableSessionManager,\n\trequestedContext: unknown,\n\toptions: ForkContextResolverOptions = {},\n): ForkContextResolver {\n\tif (resolveSubagentContext(requestedContext) !== \"fork\") {\n\t\treturn {\n\t\t\tsessionFileForIndex: () => undefined,\n\t\t\tthinkingOverrideForIndex: () => undefined,\n\t\t};\n\t}\n\n\tconst parentSessionFile = sessionManager.getSessionFile();\n\tif (!parentSessionFile) {\n\t\tthrow new Error(\"Forked subagent context requires a persisted parent session.\");\n\t}\n\n\tconst leafId = sessionManager.getLeafId();\n\tif (!leafId) {\n\t\tthrow new Error(\"Forked subagent context requires a current leaf to fork from.\");\n\t}\n\n\tconst openSession = options.openSession\n\t\t?? sessionManager.openSession\n\t\t?? ((file: string, dir?: string) => SessionManager.open(file, dir));\n\tconst sessionDir = sessionManager.getSessionDir?.();\n\tconst cachedResolutions = new Map<number, ForkContextResolution>();\n\n\tconst resolveFork = (index = 0): ForkContextResolution => {\n\t\tconst cached = cachedResolutions.get(index);\n\t\tif (cached) return cached;\n\t\ttry {\n\t\t\tif (!fs.existsSync(parentSessionFile)) {\n\t\t\t\tthrow new Error(`Parent session file does not exist: ${parentSessionFile}. Pi has not persisted enough history to fork yet.`);\n\t\t\t}\n\t\t\tconst sourceManager = openSession(parentSessionFile, sessionDir);\n\t\t\tconst sessionFile = sourceManager.createBranchedSession(leafId);\n\t\t\tif (!sessionFile) {\n\t\t\t\tthrow new Error(\"Session manager did not return a forked session file.\");\n\t\t\t}\n\t\t\tconst forceThinkingOff = (sanitized: boolean): boolean =>\n\t\t\t\tsanitized && (options.forceThinkingOffForIndex?.(index) ?? true);\n\t\t\tlet thinkingOverride: \"off\" | undefined;\n\t\t\tif (!fs.existsSync(sessionFile)) {\n\t\t\t\tconst header = sourceManager.getHeader?.();\n\t\t\t\tconst entries = sourceManager.getEntries?.();\n\t\t\t\tif (!header || !entries) {\n\t\t\t\t\tthrow new Error(`Session manager returned a forked session file that does not exist and cannot be persisted by fallback: ${sessionFile}`);\n\t\t\t\t}\n\t\t\t\tif (forceThinkingOff(sanitizeUnsafeThinkingBlocks(entries))) {\n\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t}\n\t\t\t\tfs.mkdirSync(path.dirname(sessionFile), { recursive: true });\n\t\t\t\tfs.writeFileSync(sessionFile, `${[header, ...entries].map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t} else {\n\t\t\t\tconst entries = readSessionEntries(sessionFile);\n\t\t\t\tif (sanitizeUnsafeThinkingBlocks(entries)) {\n\t\t\t\t\tif (forceThinkingOff(true)) {\n\t\t\t\t\t\tappendThinkingOffEntry(entries);\n\t\t\t\t\t\tthinkingOverride = \"off\";\n\t\t\t\t\t}\n\t\t\t\t\tfs.writeFileSync(sessionFile, `${entries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`, \"utf-8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolution = { sessionFile, ...(thinkingOverride ? { thinkingOverride } : {}) };\n\t\t\tcachedResolutions.set(index, resolution);\n\t\t\treturn resolution;\n\t\t} catch (error) {\n\t\t\tconst cause = error instanceof Error ? error : new Error(String(error));\n\t\t\tthrow new Error(`Failed to create forked subagent session: ${cause.message}`, { cause });\n\t\t}\n\t};\n\n\treturn {\n\t\tsessionFileForIndex(index = 0): string | undefined {\n\t\t\treturn resolveFork(index).sessionFile;\n\t\t},\n\t\tthinkingOverrideForIndex(index = 0): \"off\" | undefined {\n\t\t\treturn resolveFork(index).thinkingOverride;\n\t\t},\n\t};\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Type definitions 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 { FSWatcher } from "node:fs";
6
- import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
6
+ import type { ExtensionContext } from "@ashx-j/lunr";
7
7
  import type { ModelScopeConfig } from "../runs/shared/model-scope.ts";
8
8
  export interface MaxOutputConfig {
9
9
  bytes?: number;
@@ -949,7 +949,7 @@ export interface RunSyncOptions {
949
949
  toolBudget?: ResolvedToolBudget;
950
950
  allowIntercomDetach?: boolean;
951
951
  intercomEvents?: IntercomEventBus;
952
- onUpdate?: (r: import("@earendil-works/pi-agent-core").AgentToolResult<Details>) => void;
952
+ onUpdate?: (r: import("@ashx-j/lunr-agent").AgentToolResult<Details>) => void;
953
953
  onControlEvent?: (event: ControlEvent) => void;
954
954
  onDetachedExit?: (result: SingleResult) => void;
955
955
  controlConfig?: ResolvedControlConfig;