@calmabacus/pi-web 1.2.7 → 1.2.9

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 (269) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +12 -10
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +6 -6
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +14 -0
  8. package/.next/server/app/_global-error/page.js +2 -2
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page.js +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +4 -4
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +4 -4
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  22. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  23. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  24. package/.next/server/app/api/agent/[id]/lease/route.js +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/new/route.js +1 -1
  27. package/.next/server/app/api/agent/running/route.js +1 -1
  28. package/.next/server/app/api/app-update/route.js +1 -1
  29. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  30. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  31. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  32. package/.next/server/app/api/auth/providers/route.js +1 -1
  33. package/.next/server/app/api/cwd/browse/route.js +1 -1
  34. package/.next/server/app/api/cwd/validate/route.js +1 -1
  35. package/.next/server/app/api/default-cwd/route.js +1 -1
  36. package/.next/server/app/api/file-index/route.js +1 -1
  37. package/.next/server/app/api/files/[...path]/route.js +1 -1
  38. package/.next/server/app/api/git/diff/route.js +2 -2
  39. package/.next/server/app/api/git/status/route.js +1 -1
  40. package/.next/server/app/api/home/route.js +1 -1
  41. package/.next/server/app/api/image-generation/route.js +1 -1
  42. package/.next/server/app/api/image-generation/settings/connections/route.js +1 -1
  43. package/.next/server/app/api/image-generation/settings/route.js +1 -1
  44. package/.next/server/app/api/models/route.js +1 -1
  45. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  46. package/.next/server/app/api/models-config/discover/route.js +1 -1
  47. package/.next/server/app/api/models-config/picker/route.js +1 -1
  48. package/.next/server/app/api/models-config/route.js +1 -1
  49. package/.next/server/app/api/models-config/runtime/route.js +1 -1
  50. package/.next/server/app/api/models-config/test/route.js +1 -1
  51. package/.next/server/app/api/plugins/check/route.js +1 -1
  52. package/.next/server/app/api/plugins/route.js +1 -1
  53. package/.next/server/app/api/project-overrides/route.js +1 -0
  54. package/.next/server/app/api/project-overrides/route.js.nft.json +1 -0
  55. package/.next/server/app/api/project-overrides/route_client-reference-manifest.js +1 -0
  56. package/.next/server/app/api/project-trust/route.js +1 -1
  57. package/.next/server/app/api/projects/route.js +1 -1
  58. package/.next/server/app/api/push/config/route.js +1 -1
  59. package/.next/server/app/api/push/subscribe/route.js +1 -1
  60. package/.next/server/app/api/sessions/[id]/auto-name/route.js +2 -2
  61. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  62. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  63. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
  64. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  65. package/.next/server/app/api/sessions/[id]/outline/route.js +1 -1
  66. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  67. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  68. package/.next/server/app/api/sessions/[id]/subagent-usage/route.js +1 -0
  69. package/.next/server/app/api/sessions/[id]/subagent-usage/route.js.nft.json +1 -0
  70. package/.next/server/app/api/sessions/[id]/subagent-usage/route_client-reference-manifest.js +1 -0
  71. package/.next/server/app/api/sessions/route.js +1 -1
  72. package/.next/server/app/api/sessions/search/route.js +1 -1
  73. package/.next/server/app/api/skills/check/route.js +1 -1
  74. package/.next/server/app/api/skills/check/route.js.nft.json +1 -1
  75. package/.next/server/app/api/skills/install/route.js +1 -1
  76. package/.next/server/app/api/skills/route.js +2 -2
  77. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  78. package/.next/server/app/api/skills/search/route.js +1 -1
  79. package/.next/server/app/api/skills/update/route.js +1 -1
  80. package/.next/server/app/api/skills/update/route.js.nft.json +1 -1
  81. package/.next/server/app/api/subagents/[id]/route.js +1 -1
  82. package/.next/server/app/api/subagents/profiles/route.js +1 -1
  83. package/.next/server/app/api/subagents/settings/route.js +1 -1
  84. package/.next/server/app/api/terminal/[id]/events/route.js +1 -1
  85. package/.next/server/app/api/terminal/[id]/route.js +1 -1
  86. package/.next/server/app/api/terminal/route.js +1 -1
  87. package/.next/server/app/api/tools/settings/route.js +1 -1
  88. package/.next/server/app/api/usage/route.js +1 -1
  89. package/.next/server/app/api/web-auth/route.js +1 -1
  90. package/.next/server/app/api/worktrees/route.js +1 -1
  91. package/.next/server/app/index.html +1 -1
  92. package/.next/server/app/index.rsc +7 -7
  93. package/.next/server/app/index.segments/__PAGE__.segment.rsc +13 -12
  94. package/.next/server/app/index.segments/_full.segment.rsc +7 -7
  95. package/.next/server/app/index.segments/_tree.segment.rsc +4 -4
  96. package/.next/server/app/login/page.js +2 -2
  97. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  98. package/.next/server/app/login.html +1 -1
  99. package/.next/server/app/login.rsc +5 -5
  100. package/.next/server/app/login.segments/_full.segment.rsc +5 -5
  101. package/.next/server/app/login.segments/_tree.segment.rsc +3 -3
  102. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  103. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  104. package/.next/server/app/page.js +23 -22
  105. package/.next/server/app/page_client-reference-manifest.js +1 -1
  106. package/.next/server/app-paths-manifest.json +12 -10
  107. package/.next/server/chunks/2243.js +1 -1
  108. package/.next/server/chunks/402.js +3 -2
  109. package/.next/server/chunks/4020.js +1 -0
  110. package/.next/server/chunks/6429.js +8 -6
  111. package/.next/server/chunks/7147.js +1 -1
  112. package/.next/server/middleware-build-manifest.js +1 -1
  113. package/.next/server/middleware.js +4 -4
  114. package/.next/server/pages/404.html +1 -1
  115. package/.next/server/pages/500.html +1 -1
  116. package/.next/server/server-reference-manifest.json +1 -1
  117. package/.next/static/6f_3UIpNmHjU9Xn8SsAAi/_buildManifest.js +1 -0
  118. package/.next/static/chunks/2981-5abf1fdfdb963718.js +1 -0
  119. package/.next/static/chunks/app/_global-error/page-be5d61c3d2d00f10.js +1 -0
  120. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-be5d61c3d2d00f10.js +1 -0
  121. package/.next/static/chunks/app/api/agent/[id]/events/route-be5d61c3d2d00f10.js +1 -0
  122. package/.next/static/chunks/app/api/agent/[id]/lease/route-be5d61c3d2d00f10.js +1 -0
  123. package/.next/static/chunks/app/api/agent/[id]/route-be5d61c3d2d00f10.js +1 -0
  124. package/.next/static/chunks/app/api/agent/new/route-be5d61c3d2d00f10.js +1 -0
  125. package/.next/static/chunks/app/api/agent/running/route-be5d61c3d2d00f10.js +1 -0
  126. package/.next/static/chunks/app/api/app-update/route-be5d61c3d2d00f10.js +1 -0
  127. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-be5d61c3d2d00f10.js +1 -0
  128. package/.next/static/chunks/app/api/auth/login/[provider]/route-be5d61c3d2d00f10.js +1 -0
  129. package/.next/static/chunks/app/api/auth/logout/[provider]/route-be5d61c3d2d00f10.js +1 -0
  130. package/.next/static/chunks/app/api/auth/providers/route-be5d61c3d2d00f10.js +1 -0
  131. package/.next/static/chunks/app/api/cwd/browse/route-be5d61c3d2d00f10.js +1 -0
  132. package/.next/static/chunks/app/api/cwd/validate/route-be5d61c3d2d00f10.js +1 -0
  133. package/.next/static/chunks/app/api/default-cwd/route-be5d61c3d2d00f10.js +1 -0
  134. package/.next/static/chunks/app/api/file-index/route-be5d61c3d2d00f10.js +1 -0
  135. package/.next/static/chunks/app/api/files/[...path]/route-be5d61c3d2d00f10.js +1 -0
  136. package/.next/static/chunks/app/api/git/diff/route-be5d61c3d2d00f10.js +1 -0
  137. package/.next/static/chunks/app/api/git/status/route-be5d61c3d2d00f10.js +1 -0
  138. package/.next/static/chunks/app/api/home/route-be5d61c3d2d00f10.js +1 -0
  139. package/.next/static/chunks/app/api/image-generation/route-be5d61c3d2d00f10.js +1 -0
  140. package/.next/static/chunks/app/api/image-generation/settings/connections/route-be5d61c3d2d00f10.js +1 -0
  141. package/.next/static/chunks/app/api/image-generation/settings/route-be5d61c3d2d00f10.js +1 -0
  142. package/.next/static/chunks/app/api/models/route-be5d61c3d2d00f10.js +1 -0
  143. package/.next/static/chunks/app/api/models-config/catalog/route-be5d61c3d2d00f10.js +1 -0
  144. package/.next/static/chunks/app/api/models-config/discover/route-be5d61c3d2d00f10.js +1 -0
  145. package/.next/static/chunks/app/api/models-config/picker/route-be5d61c3d2d00f10.js +1 -0
  146. package/.next/static/chunks/app/api/models-config/route-be5d61c3d2d00f10.js +1 -0
  147. package/.next/static/chunks/app/api/models-config/runtime/route-be5d61c3d2d00f10.js +1 -0
  148. package/.next/static/chunks/app/api/models-config/test/route-be5d61c3d2d00f10.js +1 -0
  149. package/.next/static/chunks/app/api/plugins/check/route-be5d61c3d2d00f10.js +1 -0
  150. package/.next/static/chunks/app/api/plugins/route-be5d61c3d2d00f10.js +1 -0
  151. package/.next/static/chunks/app/api/project-overrides/route-be5d61c3d2d00f10.js +1 -0
  152. package/.next/static/chunks/app/api/project-trust/route-be5d61c3d2d00f10.js +1 -0
  153. package/.next/static/chunks/app/api/projects/route-be5d61c3d2d00f10.js +1 -0
  154. package/.next/static/chunks/app/api/push/config/route-be5d61c3d2d00f10.js +1 -0
  155. package/.next/static/chunks/app/api/push/subscribe/route-be5d61c3d2d00f10.js +1 -0
  156. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-be5d61c3d2d00f10.js +1 -0
  157. package/.next/static/chunks/app/api/sessions/[id]/context/route-be5d61c3d2d00f10.js +1 -0
  158. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-be5d61c3d2d00f10.js +1 -0
  159. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route-be5d61c3d2d00f10.js +1 -0
  160. package/.next/static/chunks/app/api/sessions/[id]/export/route-be5d61c3d2d00f10.js +1 -0
  161. package/.next/static/chunks/app/api/sessions/[id]/outline/route-be5d61c3d2d00f10.js +1 -0
  162. package/.next/static/chunks/app/api/sessions/[id]/route-be5d61c3d2d00f10.js +1 -0
  163. package/.next/static/chunks/app/api/sessions/[id]/state/route-be5d61c3d2d00f10.js +1 -0
  164. package/.next/static/chunks/app/api/sessions/[id]/subagent-usage/route-be5d61c3d2d00f10.js +1 -0
  165. package/.next/static/chunks/app/api/sessions/route-be5d61c3d2d00f10.js +1 -0
  166. package/.next/static/chunks/app/api/sessions/search/route-be5d61c3d2d00f10.js +1 -0
  167. package/.next/static/chunks/app/api/skills/check/route-be5d61c3d2d00f10.js +1 -0
  168. package/.next/static/chunks/app/api/skills/install/route-be5d61c3d2d00f10.js +1 -0
  169. package/.next/static/chunks/app/api/skills/route-be5d61c3d2d00f10.js +1 -0
  170. package/.next/static/chunks/app/api/skills/search/route-be5d61c3d2d00f10.js +1 -0
  171. package/.next/static/chunks/app/api/skills/update/route-be5d61c3d2d00f10.js +1 -0
  172. package/.next/static/chunks/app/api/subagents/[id]/route-be5d61c3d2d00f10.js +1 -0
  173. package/.next/static/chunks/app/api/subagents/profiles/route-be5d61c3d2d00f10.js +1 -0
  174. package/.next/static/chunks/app/api/subagents/settings/route-be5d61c3d2d00f10.js +1 -0
  175. package/.next/static/chunks/app/api/terminal/[id]/events/route-be5d61c3d2d00f10.js +1 -0
  176. package/.next/static/chunks/app/api/terminal/[id]/route-be5d61c3d2d00f10.js +1 -0
  177. package/.next/static/chunks/app/api/terminal/route-be5d61c3d2d00f10.js +1 -0
  178. package/.next/static/chunks/app/api/tools/settings/route-be5d61c3d2d00f10.js +1 -0
  179. package/.next/static/chunks/app/api/usage/route-be5d61c3d2d00f10.js +1 -0
  180. package/.next/static/chunks/app/api/web-auth/route-be5d61c3d2d00f10.js +1 -0
  181. package/.next/static/chunks/app/api/worktrees/route-be5d61c3d2d00f10.js +1 -0
  182. package/.next/static/chunks/app/{layout-22234b8cb61d64cf.js → layout-2c4104276f105978.js} +1 -1
  183. package/.next/static/chunks/app/manifest.webmanifest/route-be5d61c3d2d00f10.js +1 -0
  184. package/.next/static/chunks/app/page-8a658c191630cbd4.js +213 -0
  185. package/.next/static/chunks/next/dist/client/components/builtin/app-error-be5d61c3d2d00f10.js +1 -0
  186. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-be5d61c3d2d00f10.js +1 -0
  187. package/.next/static/chunks/next/dist/client/components/builtin/not-found-be5d61c3d2d00f10.js +1 -0
  188. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-be5d61c3d2d00f10.js +1 -0
  189. package/.next/static/css/{b3798dc89672ccdb.css → 90f551ecf6f7f552.css} +1 -1
  190. package/.next/static/css/{1a6a041bd877a737.css → cdd9ca136f3e707d.css} +1 -1
  191. package/.next/static/css/eae95890104af950.css +1 -0
  192. package/.next/trace +9 -8
  193. package/.next/trace-build +1 -1
  194. package/.next/types/app/api/project-overrides/route.ts +353 -0
  195. package/.next/types/app/api/sessions/[id]/subagent-usage/route.ts +353 -0
  196. package/.next/types/routes.d.ts +3 -1
  197. package/.next/types/validator.ts +18 -0
  198. package/package.json +1 -1
  199. package/.next/static/A2v5X4hwZg1ACWwU7oRGo/_buildManifest.js +0 -1
  200. package/.next/static/chunks/2981-3cdf8a2b6a7acda7.js +0 -1
  201. package/.next/static/chunks/app/_global-error/page-65c0cd7526c36b6b.js +0 -1
  202. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-65c0cd7526c36b6b.js +0 -1
  203. package/.next/static/chunks/app/api/agent/[id]/events/route-65c0cd7526c36b6b.js +0 -1
  204. package/.next/static/chunks/app/api/agent/[id]/lease/route-65c0cd7526c36b6b.js +0 -1
  205. package/.next/static/chunks/app/api/agent/[id]/route-65c0cd7526c36b6b.js +0 -1
  206. package/.next/static/chunks/app/api/agent/new/route-65c0cd7526c36b6b.js +0 -1
  207. package/.next/static/chunks/app/api/agent/running/route-65c0cd7526c36b6b.js +0 -1
  208. package/.next/static/chunks/app/api/app-update/route-65c0cd7526c36b6b.js +0 -1
  209. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-65c0cd7526c36b6b.js +0 -1
  210. package/.next/static/chunks/app/api/auth/login/[provider]/route-65c0cd7526c36b6b.js +0 -1
  211. package/.next/static/chunks/app/api/auth/logout/[provider]/route-65c0cd7526c36b6b.js +0 -1
  212. package/.next/static/chunks/app/api/auth/providers/route-65c0cd7526c36b6b.js +0 -1
  213. package/.next/static/chunks/app/api/cwd/browse/route-65c0cd7526c36b6b.js +0 -1
  214. package/.next/static/chunks/app/api/cwd/validate/route-65c0cd7526c36b6b.js +0 -1
  215. package/.next/static/chunks/app/api/default-cwd/route-65c0cd7526c36b6b.js +0 -1
  216. package/.next/static/chunks/app/api/file-index/route-65c0cd7526c36b6b.js +0 -1
  217. package/.next/static/chunks/app/api/files/[...path]/route-65c0cd7526c36b6b.js +0 -1
  218. package/.next/static/chunks/app/api/git/diff/route-65c0cd7526c36b6b.js +0 -1
  219. package/.next/static/chunks/app/api/git/status/route-65c0cd7526c36b6b.js +0 -1
  220. package/.next/static/chunks/app/api/home/route-65c0cd7526c36b6b.js +0 -1
  221. package/.next/static/chunks/app/api/image-generation/route-65c0cd7526c36b6b.js +0 -1
  222. package/.next/static/chunks/app/api/image-generation/settings/connections/route-65c0cd7526c36b6b.js +0 -1
  223. package/.next/static/chunks/app/api/image-generation/settings/route-65c0cd7526c36b6b.js +0 -1
  224. package/.next/static/chunks/app/api/models/route-65c0cd7526c36b6b.js +0 -1
  225. package/.next/static/chunks/app/api/models-config/catalog/route-65c0cd7526c36b6b.js +0 -1
  226. package/.next/static/chunks/app/api/models-config/discover/route-65c0cd7526c36b6b.js +0 -1
  227. package/.next/static/chunks/app/api/models-config/picker/route-65c0cd7526c36b6b.js +0 -1
  228. package/.next/static/chunks/app/api/models-config/route-65c0cd7526c36b6b.js +0 -1
  229. package/.next/static/chunks/app/api/models-config/runtime/route-65c0cd7526c36b6b.js +0 -1
  230. package/.next/static/chunks/app/api/models-config/test/route-65c0cd7526c36b6b.js +0 -1
  231. package/.next/static/chunks/app/api/plugins/check/route-65c0cd7526c36b6b.js +0 -1
  232. package/.next/static/chunks/app/api/plugins/route-65c0cd7526c36b6b.js +0 -1
  233. package/.next/static/chunks/app/api/project-trust/route-65c0cd7526c36b6b.js +0 -1
  234. package/.next/static/chunks/app/api/projects/route-65c0cd7526c36b6b.js +0 -1
  235. package/.next/static/chunks/app/api/push/config/route-65c0cd7526c36b6b.js +0 -1
  236. package/.next/static/chunks/app/api/push/subscribe/route-65c0cd7526c36b6b.js +0 -1
  237. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-65c0cd7526c36b6b.js +0 -1
  238. package/.next/static/chunks/app/api/sessions/[id]/context/route-65c0cd7526c36b6b.js +0 -1
  239. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-65c0cd7526c36b6b.js +0 -1
  240. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route-65c0cd7526c36b6b.js +0 -1
  241. package/.next/static/chunks/app/api/sessions/[id]/export/route-65c0cd7526c36b6b.js +0 -1
  242. package/.next/static/chunks/app/api/sessions/[id]/outline/route-65c0cd7526c36b6b.js +0 -1
  243. package/.next/static/chunks/app/api/sessions/[id]/route-65c0cd7526c36b6b.js +0 -1
  244. package/.next/static/chunks/app/api/sessions/[id]/state/route-65c0cd7526c36b6b.js +0 -1
  245. package/.next/static/chunks/app/api/sessions/route-65c0cd7526c36b6b.js +0 -1
  246. package/.next/static/chunks/app/api/sessions/search/route-65c0cd7526c36b6b.js +0 -1
  247. package/.next/static/chunks/app/api/skills/check/route-65c0cd7526c36b6b.js +0 -1
  248. package/.next/static/chunks/app/api/skills/install/route-65c0cd7526c36b6b.js +0 -1
  249. package/.next/static/chunks/app/api/skills/route-65c0cd7526c36b6b.js +0 -1
  250. package/.next/static/chunks/app/api/skills/search/route-65c0cd7526c36b6b.js +0 -1
  251. package/.next/static/chunks/app/api/skills/update/route-65c0cd7526c36b6b.js +0 -1
  252. package/.next/static/chunks/app/api/subagents/[id]/route-65c0cd7526c36b6b.js +0 -1
  253. package/.next/static/chunks/app/api/subagents/profiles/route-65c0cd7526c36b6b.js +0 -1
  254. package/.next/static/chunks/app/api/subagents/settings/route-65c0cd7526c36b6b.js +0 -1
  255. package/.next/static/chunks/app/api/terminal/[id]/events/route-65c0cd7526c36b6b.js +0 -1
  256. package/.next/static/chunks/app/api/terminal/[id]/route-65c0cd7526c36b6b.js +0 -1
  257. package/.next/static/chunks/app/api/terminal/route-65c0cd7526c36b6b.js +0 -1
  258. package/.next/static/chunks/app/api/tools/settings/route-65c0cd7526c36b6b.js +0 -1
  259. package/.next/static/chunks/app/api/usage/route-65c0cd7526c36b6b.js +0 -1
  260. package/.next/static/chunks/app/api/web-auth/route-65c0cd7526c36b6b.js +0 -1
  261. package/.next/static/chunks/app/api/worktrees/route-65c0cd7526c36b6b.js +0 -1
  262. package/.next/static/chunks/app/manifest.webmanifest/route-65c0cd7526c36b6b.js +0 -1
  263. package/.next/static/chunks/app/page-9e1b2945ed34fc62.js +0 -212
  264. package/.next/static/chunks/next/dist/client/components/builtin/app-error-65c0cd7526c36b6b.js +0 -1
  265. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-65c0cd7526c36b6b.js +0 -1
  266. package/.next/static/chunks/next/dist/client/components/builtin/not-found-65c0cd7526c36b6b.js +0 -1
  267. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-65c0cd7526c36b6b.js +0 -1
  268. package/.next/static/css/b121d2362092b3ab.css +0 -1
  269. /package/.next/static/{A2v5X4hwZg1ACWwU7oRGo → 6f_3UIpNmHjU9Xn8SsAAi}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- exports.id=6429,exports.ids=[6429],exports.modules={305:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Up:()=>r,dp:()=>q,wQ:()=>m});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=a([g]);g=(j.then?(await j)():j)[0];let s=["read","bash","edit","write"],t=new Set(["bash","powershell"]);function k(a,b=process.platform){return"win32"===b&&a?.includes("powershell")===!0&&!a.includes("bash")}function l(a,b){let c=b?"powershell":"bash",d=[];for(let b of a){let a=t.has(b)?c:b;d.includes(a)||d.push(a)}return d}function m(a,b,c=process.platform){return l(a,k(b,c))}function n(a=(0,g.getAgentDir)()){return(0,f.join)(a,"settings.json")}function o(a){if(!(0,e.existsSync)(a))return{};let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))throw Error("Invalid settings.json: expected an object");return b}function p(a){if(void 0!==a.defaultTools){if(!Array.isArray(a.defaultTools)||a.defaultTools.some(a=>"string"!=typeof a))throw Error("Invalid settings.json: defaultTools must be an array of strings");return a.defaultTools}}async function q(a=n(),b=process.platform){if(!(0,e.existsSync)(a))return!1;let c=await i().lock(a,{realpath:!1,retries:10});try{return k(p(o(a)),b)}finally{await c()}}async function r(a,b=n(),c=process.platform){if("win32"!==c)throw Error("PowerShell tool settings are only available on Windows");(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0});try{(0,e.writeFileSync)(b,"{}",{flag:"wx",mode:384})}catch(a){if("EEXIST"!==a.code)throw a}let d=await i().lock(b,{realpath:!1,retries:10});try{let c=o(b),d=p(c)??s,f=l(d,a);d.some(a=>t.has(a))||f.push(a?"powershell":"bash"),c.defaultTools=f,(0,e.writeFileSync)(b,JSON.stringify(c,null,2),"utf8"),(0,e.chmodSync)(b,384)}finally{await d()}return a}d()}catch(a){d(a)}})},5687:(a,b,c)=>{"use strict";c.d(b,{z:()=>j});var d=c(4573),e=c(78970),f=c(96782),g=c(10424);function h(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function i(a,b){let c=await b.modelRegistry.getProviderAuth(a.provider);if(!c)throw Error(`No credentials configured for image provider ${a.provider}`);let d=b.modelRegistry.getProvider(a.provider),e=c.auth.baseUrl??d?.baseUrl;if(!e)throw Error(`No base URL configured for image provider ${a.provider}`);let f=Object.fromEntries(Object.entries(c.auth.headers??{}).filter(a=>"string"==typeof a[1]));return c.auth.apiKey&&!Object.keys(f).some(a=>"authorization"===a.toLowerCase())&&(f.Authorization=`Bearer ${c.auth.apiKey}`),{baseUrl:e.replace(/\/+$/,""),headers:f}}async function j(a,b,c,j,k,l,m,n){let o,p=await i(a,b),q=(0,g.e4)(k),r=!!j,s={model:a.model,prompt:c,n:1,response_format:"b64_json",...l?{resolution:l}:{},...m?{quality:m}:{}};r?(s.image={url:`data:${j.mimeType};base64,${j.bytes.toString("base64")}`,type:"image_url"},q&&"auto"!==q&&(s.aspect_ratio=q)):q&&(s.aspect_ratio=q);let t=new Headers(p.headers);t.set("Accept","application/json"),t.set("Content-Type","application/json");let u=JSON.stringify(s),v=`${p.baseUrl}/images/${r?"edits":"generations"}`,w=AbortSignal.timeout(18e4),x=n?AbortSignal.any([n,w]):w,y=await fetch(v,{method:"POST",headers:t,body:u,signal:x});if(!y.ok){let a=y.headers.get("x-request-id")??y.headers.get("request-id"),b=await (0,f.S)(y,65536,x).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return h(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return h(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return h(a.message.trim(),600)}catch{}return h(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${y.status}${c?`: ${c}`:""}${a?` (request ${h(a,160)})`:""}`)}let z=await (0,f.S)(y,0x2000000,x);try{o=JSON.parse(z.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let A=o?.data?.[0]?.b64_json;if("string"!=typeof A)throw Error("Image API returned no base64 image");let B=(0,e.Si)(A);if(null===B)throw Error("Image API returned invalid base64 image");if(B>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(A,"base64")}},6259:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Bm:()=>m,NQ:()=>n});var e=c(76760),f=c.n(e),g=c(28802),h=c(75430),i=c(10424),j=c(6759),k=c(59457),l=a([g,h,j,k]);[g,h,j,k]=l.then?(await l)():l;let o="<inline:image-generation>";function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has(i.PZ))return a;let c=!1,d=a.extensions.map(a=>{if(a.path===o||!a.tools.has(i.PZ))return a;c=!0;let b=new Map(a.tools);return b.delete(i.PZ),{...a,tools:b}});return c?{...a,extensions:d}:a}function n(a,b={}){return{name:"image-generation",hidden:!0,factory:async c=>{var d;let e;if(!(0,j.h8)(a))return;let l=(0,j.al)(a),m=(0,j.h)(l);if(!l.enabled||!m.connections.length)return;let n=b.hasAuth?void 0:await h.ModelRuntime.create({authPath:f().join(a,"auth.json"),modelsPath:f().join(a,"models.json"),refreshOnCreate:!1}),o=b.hasAuth??(a=>n?.getProviderAuthStatus(a).configured===!0),p=m.connections.filter(a=>o(a.provider));if(!p.length)return;let q=(d={enabled:!0,defaultConnection:p.some(a=>a.id===m.defaultConnection)?m.defaultConnection:p[0].id,connections:Object.fromEntries(p.map(a=>[a.id,a]))},e=Object.values(d.connections).map(a=>{let b=[a.capabilities.editing?"editing":void 0,a.capabilities.sizes?.length?`aspect ratios: ${a.capabilities.sizes.join(", ")}`:void 0,a.capabilities.resolutions?.length?`resolutions: ${a.capabilities.resolutions.join(", ")}`:void 0,a.capabilities.qualities?.length?`qualities: ${a.capabilities.qualities.join(", ")}`:void 0].filter(Boolean);return`${a.id}${b.length?` (${b.join("; ")})`:""}`}),`Configured image connections: ${e.join("; ")}. Omit connection so the user's default connection from Settings is used, with automatic quota fallback. Set connection only when the user names one in this request. Omit size, resolution, and quality unless the user asks for them.`);c.registerTool({name:i.PZ,label:"Generate image",description:"Generate a new image, or edit one existing image, with a configured image connection.",promptSnippet:"Generate or edit an image with a configured image connection",promptGuidelines:[`Use ${i.PZ} when the user asks to generate or edit an image.`,q,`When the user wants to change an existing image, ${i.PZ} edits it. Rewrite their intent as the edit prompt; do not generate a new picture from scratch.`,"If they @-mentioned or named an image file, that file is the source. If this user message includes an attached image, that attachment is the source. Otherwise the most recent generated image is the source.","Set new_image only when the user wants an unrelated new picture, not a change to the current one.","If the user attached an image to edit, set use_last_attachment. If they named a file under the working directory, set target.",`${i.PZ} results are shown inline; do not embed the image again in the final response.`,"Pass size as a declared aspect ratio such as auto, 1:1, 16:9, or 9:16. Pass resolution only when the connection declares it. Never invent pixel sizes.",`Do not retry a failed ${i.PZ} call unless the user explicitly asks you to retry.`,`Do not read a generated image file after ${i.PZ} succeeds unless the user asks you to inspect it.`],parameters:g.Type.Object({prompt:g.Type.String({minLength:1,maxLength:32e3,description:"Complete generation instruction, or the change to make when editing."}),connection:g.Type.Optional(g.Type.String({minLength:1,description:"Configured connection ID. Omit to use the default."})),target:g.Type.Optional(g.Type.String({minLength:1,description:"Image file under the current working directory to edit."})),new_image:g.Type.Optional(g.Type.Boolean({description:"Create a new picture instead of editing the most recent generated image."})),use_last_attachment:g.Type.Optional(g.Type.Boolean({description:"Edit an image attached in the most recent user message that contains attachments."})),size:g.Type.Optional(g.Type.String({minLength:1,description:"Declared aspect ratio such as auto, 1:1, 16:9, or 9:16."})),resolution:g.Type.Optional(g.Type.String({minLength:1,description:"Declared output resolution such as 1k or 2k."})),quality:g.Type.Optional(g.Type.String({minLength:1,description:"Declared output quality such as low or medium."}))}),async execute(b,c,d,e,f){let g=await (0,k.dt)(a,c,f,d);return{content:[{type:"text",text:`Generated image: ${g.path}`}],details:g}}})}}}d()}catch(a){d(a)}})},7667:(a,b,c)=>{"use strict";c.d(b,{V:()=>d});class d{enqueue(a,b,c,d,e){let f,g=this.parents.get(a)??{limit:1,active:0,items:[]};g.limit=Math.max(1,Math.floor(b)||1);let h=new Promise((a,b)=>{f={run:c,onState:d,onCancel:e,resolve:a,reject:b,state:"queued",cancelled:!1}});return g.items.push(f),this.parents.set(a,g),d("queued"),this.pump(a,g),{promise:h,cancel:()=>"queued"===f.state&&!f.cancelled&&(f.cancelled=!0,Promise.resolve(f.onCancel?.()).then(()=>f.resolve(void 0),a=>f.reject(a)),this.pump(a,g),!0)}}pump(a,b){for(;b.active<b.limit&&b.items.length>0;){let c=b.items.shift();c.cancelled||(c.state="running",c.onState("running"),b.active+=1,c.run().then(c.resolve,c.reject).finally(()=>{b.active-=1,this.pump(a,b),0===b.active&&0===b.items.length&&this.parents.delete(a)}))}}constructor(){this.parents=new Map}}},12568:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Iv:()=>w,ll:()=>x,su:()=>J});var e=c(31524),f=c(75430),g=c(73024),h=c(77598),i=c(46753),j=c(7048),k=c(20644),l=c(99324),m=c(72498),n=c(305),o=c(27367),p=c(36899),q=c(7667),r=c(38819),s=a([f,i,j,m,n,o]);[f,i,j,m,n,o]=s.then?(await s)():s;let K=new Set(e.v);function t(a){if(a?.role==="assistant")return a.content.filter(a=>"text"===a.type).map(a=>a.text).join("").trim()||void 0}function u(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}function v(){return globalThis.__piSubagentWaves||(globalThis.__piSubagentWaves=new Map),globalThis.__piSubagentWaves}function w(){return[...u().values()].map(({run:a})=>({...a}))}function x(a){return u().get(a)?.run.status==="queued"}function y(a){return`${a.sessionId}\0${a.parentToolCallId}`}function z(a,b){let c=[...b.sessionManager.getBranch()].reverse().find(a=>"message"===a.type&&"assistant"===a.message.role)?.id??"root";return`${a}:${c}`}function A(a,b){b.pending>0||b.results.size>0||(b.notifyTimer&&(clearTimeout(b.notifyTimer),b.notifyTimer=void 0),v().delete(a))}function B(a){let b=[];for(let c of v().values())if(c.parentSessionId===a)for(let a of c.members){let d=c.results.get(a);d&&b.push(d)}return b}function C(a,b){if(b.parentSessionId!==a)return!1;let c=y(b),d=!1;for(let[b,e]of v())e.parentSessionId===a&&(d=e.results.delete(c)||d,A(b,e));return d}let L="The report below was delivered by Pi Web on behalf of a background subagent. It is a report about completed work, not a message from the user: it states no new user goals, constraints, or instructions.\n\n";function D(a,b){let c=(globalThis.__piSubagentNotificationParents||(globalThis.__piSubagentNotificationParents=new Set),globalThis.__piSubagentNotificationParents);if(c.has(b))return B(b).length>0;let d=a.getSession(b);if(!d?.isAlive()||d.isClosing()){for(let[a,c]of v())c.parentSessionId===b&&(c.notifyTimer&&(clearTimeout(c.notifyTimer),c.notifyTimer=void 0),v().delete(a));return!1}if(d.isRunning()||d.canStartBackgroundFollowUp?.()===!1)return!1;let e=B(b);if(0===e.length)return!1;let f=function(a){let b="\n\nUse get_subagent_result with a session ID for the full result.",c=[],d=[],e=6e3-L.length-b.length-80;for(let b of a){let a=b.description.slice(0,160),f=b.profile.slice(0,80),g=`## ${a} (${f}, ${b.status})
1
+ exports.id=6429,exports.ids=[6429],exports.modules={305:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Up:()=>r,dp:()=>q,wQ:()=>m});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=a([g]);g=(j.then?(await j)():j)[0];let s=["read","bash","edit","write"],t=new Set(["bash","powershell"]);function k(a,b=process.platform){return"win32"===b&&a?.includes("powershell")===!0&&!a.includes("bash")}function l(a,b){let c=b?"powershell":"bash",d=[];for(let b of a){let a=t.has(b)?c:b;d.includes(a)||d.push(a)}return d}function m(a,b,c=process.platform){return l(a,k(b,c))}function n(a=(0,g.getAgentDir)()){return(0,f.join)(a,"settings.json")}function o(a){if(!(0,e.existsSync)(a))return{};let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if("object"!=typeof b||null===b||Array.isArray(b))throw Error("Invalid settings.json: expected an object");return b}function p(a){if(void 0!==a.defaultTools){if(!Array.isArray(a.defaultTools)||a.defaultTools.some(a=>"string"!=typeof a))throw Error("Invalid settings.json: defaultTools must be an array of strings");return a.defaultTools}}async function q(a=n(),b=process.platform){if(!(0,e.existsSync)(a))return!1;let c=await i().lock(a,{realpath:!1,retries:10});try{return k(p(o(a)),b)}finally{await c()}}async function r(a,b=n(),c=process.platform){if("win32"!==c)throw Error("PowerShell tool settings are only available on Windows");(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0});try{(0,e.writeFileSync)(b,"{}",{flag:"wx",mode:384})}catch(a){if("EEXIST"!==a.code)throw a}let d=await i().lock(b,{realpath:!1,retries:10});try{let c=o(b),d=p(c)??s,f=l(d,a);d.some(a=>t.has(a))||f.push(a?"powershell":"bash"),c.defaultTools=f,(0,e.writeFileSync)(b,JSON.stringify(c,null,2),"utf8"),(0,e.chmodSync)(b,384)}finally{await d()}return a}d()}catch(a){d(a)}})},5687:(a,b,c)=>{"use strict";c.d(b,{z:()=>j});var d=c(4573),e=c(78970),f=c(96782),g=c(10424);function h(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function i(a,b){let c=await b.modelRegistry.getProviderAuth(a.provider);if(!c)throw Error(`No credentials configured for image provider ${a.provider}`);let d=b.modelRegistry.getProvider(a.provider),e=c.auth.baseUrl??d?.baseUrl;if(!e)throw Error(`No base URL configured for image provider ${a.provider}`);let f=Object.fromEntries(Object.entries(c.auth.headers??{}).filter(a=>"string"==typeof a[1]));return c.auth.apiKey&&!Object.keys(f).some(a=>"authorization"===a.toLowerCase())&&(f.Authorization=`Bearer ${c.auth.apiKey}`),{baseUrl:e.replace(/\/+$/,""),headers:f}}async function j(a,b,c,j,k,l,m,n){let o,p=await i(a,b),q=(0,g.e4)(k),r=!!j,s={model:a.model,prompt:c,n:1,response_format:"b64_json",...l?{resolution:l}:{},...m?{quality:m}:{}};r?(s.image={url:`data:${j.mimeType};base64,${j.bytes.toString("base64")}`,type:"image_url"},q&&"auto"!==q&&(s.aspect_ratio=q)):q&&(s.aspect_ratio=q);let t=new Headers(p.headers);t.set("Accept","application/json"),t.set("Content-Type","application/json");let u=JSON.stringify(s),v=`${p.baseUrl}/images/${r?"edits":"generations"}`,w=AbortSignal.timeout(18e4),x=n?AbortSignal.any([n,w]):w,y=await fetch(v,{method:"POST",headers:t,body:u,signal:x});if(!y.ok){let a=y.headers.get("x-request-id")??y.headers.get("request-id"),b=await (0,f.S)(y,65536,x).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return h(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return h(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return h(a.message.trim(),600)}catch{}return h(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${y.status}${c?`: ${c}`:""}${a?` (request ${h(a,160)})`:""}`)}let z=await (0,f.S)(y,0x2000000,x);try{o=JSON.parse(z.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let A=o?.data?.[0]?.b64_json;if("string"!=typeof A)throw Error("Image API returned no base64 image");let B=(0,e.Si)(A);if(null===B)throw Error("Image API returned invalid base64 image");if(B>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(A,"base64")}},7667:(a,b,c)=>{"use strict";c.d(b,{V:()=>d});class d{enqueue(a,b,c,d,e){let f,g=this.parents.get(a)??{limit:1,active:0,items:[]};g.limit=Math.max(1,Math.floor(b)||1);let h=new Promise((a,b)=>{f={run:c,onState:d,onCancel:e,resolve:a,reject:b,state:"queued",cancelled:!1}});return g.items.push(f),this.parents.set(a,g),d("queued"),this.pump(a,g),{promise:h,cancel:()=>"queued"===f.state&&!f.cancelled&&(f.cancelled=!0,Promise.resolve(f.onCancel?.()).then(()=>f.resolve(void 0),a=>f.reject(a)),this.pump(a,g),!0)}}pump(a,b){for(;b.active<b.limit&&b.items.length>0;){let c=b.items.shift();c.cancelled||(c.state="running",c.onState("running"),b.active+=1,c.run().then(c.resolve,c.reject).finally(()=>{b.active-=1,this.pump(a,b),0===b.active&&0===b.items.length&&this.parents.delete(a)}))}}constructor(){this.parents=new Map}}},12568:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Iv:()=>w,ll:()=>x,su:()=>K});var e=c(31524),f=c(75430),g=c(73024),h=c(77598),i=c(46753),j=c(7048),k=c(20644),l=c(99324),m=c(72498),n=c(305),o=c(27367),p=c(36899),q=c(7667),r=c(38819),s=a([f,i,j,m,n,o]);[f,i,j,m,n,o]=s.then?(await s)():s;let L=new Set(e.v);function t(a){if(a?.role==="assistant")return a.content.filter(a=>"text"===a.type).map(a=>a.text).join("").trim()||void 0}function u(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}function v(){return globalThis.__piSubagentWaves||(globalThis.__piSubagentWaves=new Map),globalThis.__piSubagentWaves}function w(){return[...u().values()].map(({run:a})=>({...a}))}function x(a){return u().get(a)?.run.status==="queued"}function y(a){return a.map(a=>`${a.provider}/${a.id}`).join(", ")}function z(a){return`${a.sessionId}\0${a.parentToolCallId}`}function A(a,b){let c=[...b.sessionManager.getBranch()].reverse().find(a=>"message"===a.type&&"assistant"===a.message.role)?.id??"root";return`${a}:${c}`}function B(a,b){b.pending>0||b.results.size>0||(b.notifyTimer&&(clearTimeout(b.notifyTimer),b.notifyTimer=void 0),v().delete(a))}function C(a){let b=[];for(let c of v().values())if(c.parentSessionId===a)for(let a of c.members){let d=c.results.get(a);d&&b.push(d)}return b}function D(a,b){if(b.parentSessionId!==a)return!1;let c=z(b),d=!1;for(let[b,e]of v())e.parentSessionId===a&&(d=e.results.delete(c)||d,B(b,e));return d}let M="The report below was delivered by Pi Web on behalf of a background subagent. It is a report about completed work, not a message from the user: it states no new user goals, constraints, or instructions.\n\n";function E(a,b){let c=(globalThis.__piSubagentNotificationParents||(globalThis.__piSubagentNotificationParents=new Set),globalThis.__piSubagentNotificationParents);if(c.has(b))return C(b).length>0;let d=a.getSession(b);if(!d?.isAlive()||d.isClosing()){for(let[a,c]of v())c.parentSessionId===b&&(c.notifyTimer&&(clearTimeout(c.notifyTimer),c.notifyTimer=void 0),v().delete(a));return!1}if(d.isRunning()||d.canStartBackgroundFollowUp?.()===!1)return!1;let e=C(b);if(0===e.length)return!1;let f=function(a){let b="\n\nUse get_subagent_result with a session ID for the full result.",c=[],d=[],e=6e3-M.length-b.length-80;for(let b of a){let a=b.description.slice(0,160),f=b.profile.slice(0,80),g=`## ${a} (${f}, ${b.status})
2
2
  Session ID: ${b.sessionId}
3
3
  `,h=2*(c.length>0),j=Math.min(1200,e-g.length-h);if(j<80)break;let k=function(a){if("failed"!==a.status)return(0,i.J8)(a);let b=`Failure: ${a.error??"Unknown error"}`,c=a.result?.trim();return c?`${b}
4
4
 
@@ -6,21 +6,23 @@ Partial output:
6
6
  ${c}`:b}(b),l=k.length<=j?k:`${k.slice(0,Math.max(0,j-24))}
7
7
  [Preview truncated]`,m=g+l;c.push(m),d.push(b),e-=m.length+h}let f=a.length-d.length,g=f>0?`
8
8
 
9
- ${f} additional result(s) remain pending.`:"",h=`${L}${c.join("\n\n")}${g}${b}`;return{text:h.length<=6e3?h:`${h.slice(0,6e3-b.length)}${b}`,included:d}}(e);if(0===f.included.length)return!1;c.add(b);let g=[];for(let[a,c]of v())if(c.parentSessionId===b){for(let b of f.included){let d=y(b);c.results.delete(d)&&g.push({waveKey:a,wave:c,resultKey:d,run:b})}A(a,c)}let j=(0,h.randomUUID)(),k=d.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:f.text,display:!0,details:{kind:"pi-web-subagent-wave",notificationId:j,sessionIds:f.included.map(a=>a.sessionId),results:f.included.map(a=>({sessionId:a.sessionId,parentToolCallId:a.parentToolCallId}))}},{deliverAs:"followUp",triggerTurn:!0}),l=!0;return k.catch(a=>{if(!(l=d.inner.sessionManager.getEntries().some(a=>{if("custom_message"!==a.type||"pi-web:subagent-notification"!==a.customType)return!1;let b=a.details;return"object"==typeof b&&null!==b&&b.notificationId===j}))&&d.isAlive()&&!d.isClosing()){let a=v();for(let b of g){let c=a.get(b.waveKey)??b.wave;c.results.set(b.resultKey,b.run),a.set(b.waveKey,c)}}console.error("[pi-web] failed to notify parent of subagent results:",a instanceof Error?a.message:a)}).finally(()=>{c.delete(b),l&&queueMicrotask(()=>D(a,b))}),d.isRunning()}function E(a){return a instanceof Error?a.message:String(a)}function F(a,b){return{...a,status:"failed",completedAt:new Date().toISOString(),error:E(b)}}function G(a,b,c,d){let e={...b};delete e.worktreeBranch,d.cleanupError||delete e.worktreePath,d.branch&&(e.worktreeBranch=d.branch),a.appendCustomEntry(j.tP,e);let f={...c};return(delete f.worktreeBranch,d.cleanupError)?{...f,...d.branch?{worktreeBranch:d.branch}:{},worktreeCleanupError:d.cleanupError}:(delete f.worktreePath,{...f,...d.branch?{worktreeBranch:d.branch}:{}})}function H(a,b){let c,d,e=new Promise(a=>{c=a}),f={run:b.initialRun,completion:e,abortRequested:!1},g={manager:b.manager},h=u();if(h.set(b.initialRun.sessionId,f),b.runInBackground){var i,k,l;let a,c;f.waveKey=b.waveKey,i=b.waveKey,k=b.parentSessionId,l=b.initialRun,(c=(a=v()).get(i)??{parentSessionId:k,members:[],results:new Map,pending:0}).members.push(y(l)),c.pending+=1,a.set(i,c)}let m=!1,n=()=>{},p=c=>{var d,e,i;if(m)return f.run;m=!0,n();let k=function(a,b){try{let c;return c={version:1,status:b.status,completedAt:b.completedAt??new Date().toISOString(),...b.wrappedAtTurnLimit?{wrappedAtTurnLimit:!0}:{},...b.result?{result:b.result}:{},...b.error?{error:b.error}:{},...b.worktreeCleanupError?{worktreeCleanupError:b.worktreeCleanupError}:{},...b.worktreeBranch?{worktreeBranch:b.worktreeBranch}:{}},a.appendCustomEntry(j.pv,c),{run:b,persisted:!0}}catch(a){return{run:F(b,Error(`Failed to persist subagent result: ${E(a)}`)),persisted:!1}}}(g.manager,c);f.run=k.run;try{b.onUpdate?.(f.run)}catch{}h.get(f.run.sessionId)===f&&h.delete(f.run.sessionId);try{a.invalidateSessionList()}catch{}if(b.runInBackground&&f.waveKey)if(k.persisted){let b;d=f.waveKey,e=f.run,(b=v().get(d))&&(b.results.set(y(e),e),b.pending=Math.max(0,b.pending-1),b.notifyTimer||(b.notifyTimer=setTimeout(()=>{b.notifyTimer=void 0,D(a,b.parentSessionId)},100)))}else{let a;i=f.waveKey,(a=v().get(i))&&(a.pending=Math.max(0,a.pending-1),A(i,a))}return f.run},r=()=>{if(f.abortRequested=!0,"queued"===f.run.status)return void f.cancelQueued?.();let c=a.getSession(b.initialRun.sessionId);c?.isAlive()&&c.isRunning()&&c.inner.abort()};!b.runInBackground&&(b.signal?.aborted?f.abortRequested=!0:b.signal&&(b.signal.addEventListener("abort",r,{once:!0}),n=()=>b.signal?.removeEventListener("abort",r)));let s=async()=>{if(f.abortRequested)return p({...f.run,status:"aborted",completedAt:new Date().toISOString()});try{return p(await b.execute(f,g))}catch(a){return p(F(f.run,a))}},t=async()=>{if("queued"!==f.run.status)return;let a=p({...f.run,status:"aborted",completedAt:new Date().toISOString()});c(a)};try{d=(!globalThis.__piSubagentQueue&&(globalThis.__piSubagentQueue=new q.V),globalThis.__piSubagentQueue).enqueue(b.parentSessionId,(0,o.hd)().maxConcurrent,s,c=>{f.run={...f.run,status:c},b.onUpdate?.(f.run),a.invalidateSessionList()},t)}catch(b){let a=p(F(f.run,b));return c(a),{run:a,completion:e}}return f.cancelQueued=d.cancel,d.promise.then(a=>{a&&c(a)},a=>{let b=p(F(f.run,a));c(b)}),{run:f.run,completion:e}}async function I(a,b,c,d){var e,f;let g,h,i,j,k,l,m,n={turnCount:0,wrapUpRequested:!1,turnLimitReached:!1},o=a.agent.finishTurn;d.turnLimit&&(a.agent.finishTurn=async(b,c)=>{var e,f,g;let h,i,j=await o?.(b,c),k=(e=n,f=b.message,g=d.turnLimit,h=e.turnCount+1,i="assistant"===f.role&&f.content.some(a=>"toolCall"===a.type),!e.wrapUpRequested&&h>=g&&i?{state:{turnCount:h,wrapUpRequested:!0,turnLimitReached:!1},requestWrapUp:!0}:{state:{turnCount:h,wrapUpRequested:e.wrapUpRequested,turnLimitReached:e.wrapUpRequested&&h>=g+1},requestWrapUp:!1});return(n=k.state,k.requestWrapUp&&a.agent.steer?.({role:"user",content:[{type:"text",text:"You have reached your turn limit. Wrap up immediately and provide your final answer now without calling more tools."}],timestamp:Date.now()}),j?.action==="continue")?{action:"continue"}:j?.action==="end"||n.turnLimitReached?{action:"end"}:void 0});let p=a.agent.state?.messages?.length??0;try{if(c.abortRequested)throw new DOMException("Subagent was stopped","AbortError");await a.prompt(b,{source:"rpc"})}catch(a){m=E(a)}finally{a.agent.finishTurn=o}return e=a.agent.state?.messages?.slice(p)??[],f={abortRequested:c.abortRequested,turnLimitReached:n.turnLimitReached,...m?{thrownError:m}:{}},h=(g=e.filter(a=>"assistant"===a.role)).at(-1),i=[...g].reverse().map(t).find(Boolean),j=h?.role==="assistant"?h.stopReason:void 0,k=h?.role==="assistant"?h.errorMessage?.trim():void 0,l=h?.role==="assistant"&&h.content.some(a=>"toolCall"===a.type),f.abortRequested||"aborted"===j?{status:"aborted",...i?{result:i}:{}}:"error"===j?{status:"failed",...i?{result:i}:{},error:k||f.thrownError||"Subagent model request failed"}:"length"===j?{status:"failed",...i?{result:i}:{},error:"Subagent response reached its output limit"}:f.thrownError?{status:"failed",...i?{result:i}:{},error:f.thrownError}:f.turnLimitReached&&(l||!t(h))?{status:"failed",...i?{result:i}:{},error:"Subagent reached its turn limit before producing a final response"}:i?{status:"completed",...f.turnLimitReached?{wrappedAtTurnLimit:!0}:{},result:i}:{status:"failed",error:"Subagent completed without text output"}}function J(a){async function b(b){if(!(a.isBuiltInSubagentsEnabled??o.N)())throw Error("Pi Web built-in sub-agents are disabled");let d=b.parentContext.sessionManager.getSessionId(),e=await c(b.sessionId);if(!e)throw Error(`Subagent not found: ${b.sessionId}`);if(e.parentSessionId!==d)throw Error("Subagent does not belong to this parent session");if("running"===e.status||"queued"===e.status)throw Error("Subagent is already running");let h=a.getSession(d);if(!h?.isAlive())throw Error("Parent session is no longer available");if(a.isSessionFileMutationReserved?.(b.sessionId))throw Error("Session file is being modified");let i=e.sessionPath||await a.resolveSessionPath(b.sessionId);if(i&&(0,g.existsSync)(i)||(i=await a.resolveSessionPath(b.sessionId)||""),!i||!(0,g.existsSync)(i))throw Error(`Subagent session file not found: ${b.sessionId}`);let k=a.getSession(b.sessionId);if(k?.isClosing()&&(k=void 0),k?.isAlive()&&k.isRunning())throw Error("Subagent is already running");let l=b.runInBackground??e.runInBackground,m=e.maxTurns,n=e.isolation,p={...e,parentToolCallId:b.parentToolCallId,task:b.task,description:b.description.trim()||e.description,runInBackground:l,...m?{maxTurns:m}:{},...n?{isolation:n}:{},status:"queued",completedAt:void 0,wrappedAtTurnLimit:void 0,result:void 0,error:void 0,worktreePath:void 0,worktreeBranch:void 0,worktreeCleanupError:void 0},q=(globalThis.__piSubagentResumeClaims||(globalThis.__piSubagentResumeClaims=new Set),globalThis.__piSubagentResumeClaims);if(q.has(b.sessionId)||u().has(b.sessionId))throw Error("Subagent is already running");q.add(b.sessionId);try{let c=k?.isAlive()&&!k.isClosing()?k.inner.sessionManager:f.SessionManager.open(i),e=(0,j.nY)(c.getEntries());if(!e)throw Error(`Subagent metadata not found: ${b.sessionId}`);let g={...e,parentToolCallId:b.parentToolCallId,task:b.task,description:p.description,runInBackground:l,...m?{maxTurns:m}:{},...n?{isolation:n}:{}};delete g.worktreePath,delete g.worktreeBranch,c.appendCustomEntry(j.tP,g),c.appendCustomEntry(j.o2,{version:1,status:"queued"});let o=H(a,{parentSessionId:d,waveKey:z(d,b.parentContext),initialRun:p,manager:c,signal:b.signal,runInBackground:l,onUpdate:b.onUpdate,execute:async(c,d)=>{let e,f=g,l=!1;try{if("worktree"===n&&(e=await (0,r.B)(h.cwd,b.sessionId),f={...g,worktreePath:e.path,worktreeBranch:e.branch},d.manager.appendCustomEntry(j.tP,f),c.run={...c.run,worktreePath:e.path,worktreeBranch:e.branch},b.onUpdate?.(c.run),k?.isAlive()&&!k.isClosing()&&await k.shutdown(),k=void 0),!k?.isAlive()||k.isClosing()){if(!a.reopenSession)throw Error("Subagent session is no longer available");k=await a.reopenSession(b.sessionId,i,e?.workPath),l=!0}if(!k.isAlive())throw Error("Subagent session is no longer available");if(await k.waitUntilReady(),d.manager=k.inner.sessionManager,e&&d.manager.appendCustomEntry(j.tP,f),c.abortRequested){let a=e?await (0,r.F)(h.cwd,e,g.description):void 0;return e=void 0,a?G(d.manager,f,{...c.run,status:"aborted",completedAt:new Date().toISOString()},a):{...c.run,status:"aborted",completedAt:new Date().toISOString()}}d.manager.appendCustomEntry(j.o2,{version:1,status:"running"}),c.run={...c.run,status:"running"},b.onUpdate?.(c.run),a.invalidateSessionList();let o=await I(k.inner,b.task,c,{turnLimit:m}),p={...c.run,...o,completedAt:new Date().toISOString()};if(e){let a=await (0,r.F)(h.cwd,e,g.description);e=void 0,p=G(d.manager,f,p,a)}return p}catch(a){if(l&&k?.isAlive()&&await k.shutdown(),e){let a=await (0,r.F)(h.cwd,e,g.description);c.run=G(d.manager,f,c.run,a)}throw a}}});return q.delete(b.sessionId),o}catch(a){throw q.delete(b.sessionId),a}}async function c(b){let c=u().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,j.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let e=await a.resolveSessionPath(b);if(!e||!(0,g.existsSync)(e))return null;let h=f.SessionManager.open(e);return(0,j.$u)(h.getEntries(),b,e)}async function d(a,b){let d=await c(b);if(d&&d.parentSessionId!==a)throw Error("Subagent does not belong to this parent session");return d}async function e(b,c){let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");if(!c.trim())throw Error("Steering message is required");await d.inner.steer(c.trim())}async function i(a,b,c){if(!await d(a,b))throw Error(`Subagent not found: ${b}`);await e(b,c)}async function q(b){let c=u().get(b);if(c){if(c.abortRequested=!0,"queued"===c.run.status){if(!c.cancelQueued?.())throw Error("Subagent is no longer queued");return}let d=a.getSession(b);d?.isAlive()&&d.isRunning()&&await d.inner.abort();return}let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");await d.inner.abort()}async function s(d,f){let g=f.trim();if(!g)throw Error("Subagent message is required");let i=await c(d);if(!i)throw Error(`Subagent not found: ${d}`);if("queued"===i.status)throw Error("Subagent is queued");if("starting"===i.status||"running"===i.status)return await e(d,g),{action:"steered",run:i};let j=a.getSession(i.parentSessionId);if(!j?.isAlive()||j.isClosing()){let b=await a.resolveSessionPath(i.parentSessionId);if(!b||!a.reopenSession)throw Error("Parent session is no longer available");j=await a.reopenSession(i.parentSessionId,b)}await j.waitUntilReady();let k=await b({parentContext:{sessionManager:j.inner.sessionManager},parentToolCallId:`ui:${(0,h.randomUUID)()}`,sessionId:d,task:g,description:i.description,runInBackground:!0});return{action:"resumed",run:k.run}}return{extensionRuntime:{start:async function(b){if(!(a.isBuiltInSubagentsEnabled??o.N)())throw Error("Pi Web built-in sub-agents are disabled");let c=b.parentContext.sessionManager.getSessionId(),d=a.getSession(c);if(!d?.isAlive())throw Error("Parent session is no longer available");if(!d.sessionFile)throw Error("Parent session must be persisted before starting a subagent");let e=(0,j.rh)(d.cwd,b.profile);if(!e)throw Error(`Unknown or disabled subagent profile: ${b.profile}`);let i=b.runInBackground??e.runInBackground,q="off"===e.isolation?void 0:b.isolation??e.isolation,s=b.inheritContext??e.inheritContext,t=b.maxTurns??e.maxTurns;if(void 0!==t&&(!Number.isFinite(t)||t<0))throw Error("max_turns must be a non-negative number");let u=t&&t>0?Math.floor(t):void 0,v=b.thinking??e.thinking??d.inner.agent.state?.thinkingLevel;if(v&&!K.has(v))throw Error(`Invalid subagent thinking level: ${v}`);let w=(0,f.getAgentDir)(),x=d.inner.modelRuntime,y=s?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
9
+ ${f} additional result(s) remain pending.`:"",h=`${M}${c.join("\n\n")}${g}${b}`;return{text:h.length<=6e3?h:`${h.slice(0,6e3-b.length)}${b}`,included:d}}(e);if(0===f.included.length)return!1;c.add(b);let g=[];for(let[a,c]of v())if(c.parentSessionId===b){for(let b of f.included){let d=z(b);c.results.delete(d)&&g.push({waveKey:a,wave:c,resultKey:d,run:b})}B(a,c)}let j=(0,h.randomUUID)(),k=d.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:f.text,display:!0,details:{kind:"pi-web-subagent-wave",notificationId:j,sessionIds:f.included.map(a=>a.sessionId),results:f.included.map(a=>({sessionId:a.sessionId,parentToolCallId:a.parentToolCallId}))}},{deliverAs:"followUp",triggerTurn:!0}),l=!0;return k.catch(a=>{if(!(l=d.inner.sessionManager.getEntries().some(a=>{if("custom_message"!==a.type||"pi-web:subagent-notification"!==a.customType)return!1;let b=a.details;return"object"==typeof b&&null!==b&&b.notificationId===j}))&&d.isAlive()&&!d.isClosing()){let a=v();for(let b of g){let c=a.get(b.waveKey)??b.wave;c.results.set(b.resultKey,b.run),a.set(b.waveKey,c)}}console.error("[pi-web] failed to notify parent of subagent results:",a instanceof Error?a.message:a)}).finally(()=>{c.delete(b),l&&queueMicrotask(()=>E(a,b))}),d.isRunning()}function F(a){return a instanceof Error?a.message:String(a)}function G(a,b){return{...a,status:"failed",completedAt:new Date().toISOString(),error:F(b)}}function H(a,b,c,d){let e={...b};delete e.worktreeBranch,d.cleanupError||delete e.worktreePath,d.branch&&(e.worktreeBranch=d.branch),a.appendCustomEntry(j.tP,e);let f={...c};return(delete f.worktreeBranch,d.cleanupError)?{...f,...d.branch?{worktreeBranch:d.branch}:{},worktreeCleanupError:d.cleanupError}:(delete f.worktreePath,{...f,...d.branch?{worktreeBranch:d.branch}:{}})}function I(a,b){let c,d,e=new Promise(a=>{c=a}),f={run:b.initialRun,completion:e,abortRequested:!1},g={manager:b.manager},h=u();if(h.set(b.initialRun.sessionId,f),b.runInBackground){var i,k,l;let a,c;f.waveKey=b.waveKey,i=b.waveKey,k=b.parentSessionId,l=b.initialRun,(c=(a=v()).get(i)??{parentSessionId:k,members:[],results:new Map,pending:0}).members.push(z(l)),c.pending+=1,a.set(i,c)}let m=!1,n=()=>{},p=c=>{var d,e,i;if(m)return f.run;m=!0,n();let k=function(a,b){try{let c;return c={version:1,status:b.status,completedAt:b.completedAt??new Date().toISOString(),...b.wrappedAtTurnLimit?{wrappedAtTurnLimit:!0}:{},...b.result?{result:b.result}:{},...b.error?{error:b.error}:{},...b.worktreeCleanupError?{worktreeCleanupError:b.worktreeCleanupError}:{},...b.worktreeBranch?{worktreeBranch:b.worktreeBranch}:{}},a.appendCustomEntry(j.pv,c),{run:b,persisted:!0}}catch(a){return{run:G(b,Error(`Failed to persist subagent result: ${F(a)}`)),persisted:!1}}}(g.manager,c);f.run=k.run;try{b.onUpdate?.(f.run)}catch{}h.get(f.run.sessionId)===f&&h.delete(f.run.sessionId);try{a.invalidateSessionList()}catch{}if(b.runInBackground&&f.waveKey)if(k.persisted){let b;d=f.waveKey,e=f.run,(b=v().get(d))&&(b.results.set(z(e),e),b.pending=Math.max(0,b.pending-1),b.notifyTimer||(b.notifyTimer=setTimeout(()=>{b.notifyTimer=void 0,E(a,b.parentSessionId)},100)))}else{let a;i=f.waveKey,(a=v().get(i))&&(a.pending=Math.max(0,a.pending-1),B(i,a))}return f.run},r=()=>{if(f.abortRequested=!0,"queued"===f.run.status)return void f.cancelQueued?.();let c=a.getSession(b.initialRun.sessionId);c?.isAlive()&&c.isRunning()&&c.inner.abort()};!b.runInBackground&&(b.signal?.aborted?f.abortRequested=!0:b.signal&&(b.signal.addEventListener("abort",r,{once:!0}),n=()=>b.signal?.removeEventListener("abort",r)));let s=async()=>{if(f.abortRequested)return p({...f.run,status:"aborted",completedAt:new Date().toISOString()});try{return p(await b.execute(f,g))}catch(a){return p(G(f.run,a))}},t=async()=>{if("queued"!==f.run.status)return;let a=p({...f.run,status:"aborted",completedAt:new Date().toISOString()});c(a)};try{d=(!globalThis.__piSubagentQueue&&(globalThis.__piSubagentQueue=new q.V),globalThis.__piSubagentQueue).enqueue(b.parentSessionId,(0,o.hd)().maxConcurrent,s,c=>{f.run={...f.run,status:c},b.onUpdate?.(f.run),a.invalidateSessionList()},t)}catch(b){let a=p(G(f.run,b));return c(a),{run:a,completion:e}}return f.cancelQueued=d.cancel,d.promise.then(a=>{a&&c(a)},a=>{let b=p(G(f.run,a));c(b)}),{run:f.run,completion:e}}async function J(a,b,c,d){var e,f;let g,h,i,j,k,l,m,n={turnCount:0,wrapUpRequested:!1,turnLimitReached:!1},o=a.agent.finishTurn;d.turnLimit&&(a.agent.finishTurn=async(b,c)=>{var e,f,g;let h,i,j=await o?.(b,c),k=(e=n,f=b.message,g=d.turnLimit,h=e.turnCount+1,i="assistant"===f.role&&f.content.some(a=>"toolCall"===a.type),!e.wrapUpRequested&&h>=g&&i?{state:{turnCount:h,wrapUpRequested:!0,turnLimitReached:!1},requestWrapUp:!0}:{state:{turnCount:h,wrapUpRequested:e.wrapUpRequested,turnLimitReached:e.wrapUpRequested&&h>=g+1},requestWrapUp:!1});return(n=k.state,k.requestWrapUp&&a.agent.steer?.({role:"user",content:[{type:"text",text:"You have reached your turn limit. Wrap up immediately and provide your final answer now without calling more tools."}],timestamp:Date.now()}),j?.action==="continue")?{action:"continue"}:j?.action==="end"||n.turnLimitReached?{action:"end"}:void 0});let p=a.agent.state?.messages?.length??0;try{if(c.abortRequested)throw new DOMException("Subagent was stopped","AbortError");await a.prompt(b,{source:"rpc"})}catch(a){m=F(a)}finally{a.agent.finishTurn=o}return e=a.agent.state?.messages?.slice(p)??[],f={abortRequested:c.abortRequested,turnLimitReached:n.turnLimitReached,...m?{thrownError:m}:{}},h=(g=e.filter(a=>"assistant"===a.role)).at(-1),i=[...g].reverse().map(t).find(Boolean),j=h?.role==="assistant"?h.stopReason:void 0,k=h?.role==="assistant"?h.errorMessage?.trim():void 0,l=h?.role==="assistant"&&h.content.some(a=>"toolCall"===a.type),f.abortRequested||"aborted"===j?{status:"aborted",...i?{result:i}:{}}:"error"===j?{status:"failed",...i?{result:i}:{},error:k||f.thrownError||"Subagent model request failed"}:"length"===j?{status:"failed",...i?{result:i}:{},error:"Subagent response reached its output limit"}:f.thrownError?{status:"failed",...i?{result:i}:{},error:f.thrownError}:f.turnLimitReached&&(l||!t(h))?{status:"failed",...i?{result:i}:{},error:"Subagent reached its turn limit before producing a final response"}:i?{status:"completed",...f.turnLimitReached?{wrappedAtTurnLimit:!0}:{},result:i}:{status:"failed",error:"Subagent completed without text output"}}function K(a){async function b(b){if(!(a.isBuiltInSubagentsEnabled??o.N)())throw Error("Pi Web built-in sub-agents are disabled");let d=b.parentContext.sessionManager.getSessionId(),e=await c(b.sessionId);if(!e){let a=b.parentContext.sessionManager.getEntries();throw Error((0,j.Yp)(a,b.sessionId))}if(e.parentSessionId!==d)throw Error("Subagent does not belong to this parent session");if("running"===e.status||"queued"===e.status)throw Error("Subagent is already running");let h=a.getSession(d);if(!h?.isAlive())throw Error("Parent session is no longer available");if(a.isSessionFileMutationReserved?.(b.sessionId))throw Error("Session file is being modified");let i=e.sessionPath||await a.resolveSessionPath(b.sessionId);if(i&&(0,g.existsSync)(i)||(i=await a.resolveSessionPath(b.sessionId)||""),!i||!(0,g.existsSync)(i))throw Error(`Subagent session file not found: ${b.sessionId}`);let k=a.getSession(b.sessionId);if(k?.isClosing()&&(k=void 0),k?.isAlive()&&k.isRunning())throw Error("Subagent is already running");let l=b.runInBackground??e.runInBackground,m=e.maxTurns,n=e.isolation,p={...e,parentToolCallId:b.parentToolCallId,task:b.task,description:b.description.trim()||e.description,runInBackground:l,...m?{maxTurns:m}:{},...n?{isolation:n}:{},status:"queued",completedAt:void 0,wrappedAtTurnLimit:void 0,result:void 0,error:void 0,worktreePath:void 0,worktreeBranch:void 0,worktreeCleanupError:void 0},q=(globalThis.__piSubagentResumeClaims||(globalThis.__piSubagentResumeClaims=new Set),globalThis.__piSubagentResumeClaims);if(q.has(b.sessionId)||u().has(b.sessionId))throw Error("Subagent is already running");q.add(b.sessionId);try{let c=k?.isAlive()&&!k.isClosing()?k.inner.sessionManager:f.SessionManager.open(i),e=(0,j.nY)(c.getEntries());if(!e)throw Error(`Subagent metadata not found: ${b.sessionId}`);let g={...e,parentToolCallId:b.parentToolCallId,task:b.task,description:p.description,runInBackground:l,...m?{maxTurns:m}:{},...n?{isolation:n}:{}};delete g.worktreePath,delete g.worktreeBranch,c.appendCustomEntry(j.tP,g),c.appendCustomEntry(j.o2,{version:1,status:"queued"});let o=I(a,{parentSessionId:d,waveKey:A(d,b.parentContext),initialRun:p,manager:c,signal:b.signal,runInBackground:l,onUpdate:b.onUpdate,execute:async(c,d)=>{let e,f=g,l=!1;try{if("worktree"===n&&(e=await (0,r.B)(h.cwd,b.sessionId),f={...g,worktreePath:e.path,worktreeBranch:e.branch},d.manager.appendCustomEntry(j.tP,f),c.run={...c.run,worktreePath:e.path,worktreeBranch:e.branch},b.onUpdate?.(c.run),k?.isAlive()&&!k.isClosing()&&await k.shutdown(),k=void 0),!k?.isAlive()||k.isClosing()){if(!a.reopenSession)throw Error("Subagent session is no longer available");k=await a.reopenSession(b.sessionId,i,e?.workPath),l=!0}if(!k.isAlive())throw Error("Subagent session is no longer available");if(await k.waitUntilReady(),d.manager=k.inner.sessionManager,e&&d.manager.appendCustomEntry(j.tP,f),c.abortRequested){let a=e?await (0,r.F)(h.cwd,e,g.description):void 0;return e=void 0,a?H(d.manager,f,{...c.run,status:"aborted",completedAt:new Date().toISOString()},a):{...c.run,status:"aborted",completedAt:new Date().toISOString()}}d.manager.appendCustomEntry(j.o2,{version:1,status:"running"}),c.run={...c.run,status:"running"},b.onUpdate?.(c.run),a.invalidateSessionList();let o=await J(k.inner,b.task,c,{turnLimit:m}),p={...c.run,...o,completedAt:new Date().toISOString()};if(e){let a=await (0,r.F)(h.cwd,e,g.description);e=void 0,p=H(d.manager,f,p,a)}return p}catch(a){if(l&&k?.isAlive()&&await k.shutdown(),e){let a=await (0,r.F)(h.cwd,e,g.description);c.run=H(d.manager,f,c.run,a)}throw a}}});return q.delete(b.sessionId),o}catch(a){throw q.delete(b.sessionId),a}}async function c(b){let c=u().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,j.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let e=await a.resolveSessionPath(b);if(!e||!(0,g.existsSync)(e))return null;let h=f.SessionManager.open(e);return(0,j.$u)(h.getEntries(),b,e)}async function d(a,b){let d=await c(b);if(d&&d.parentSessionId!==a)throw Error("Subagent does not belong to this parent session");return d}async function e(b,c){let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");if(!c.trim())throw Error("Steering message is required");await d.inner.steer(c.trim())}async function i(b,c,f){let g=await d(b,c);if(!g){let d=a.getSession(b)?.inner.sessionManager.getEntries()??[];throw Error((0,j.Yp)(d,c))}if("queued"===g.status)throw Error(`Subagent ${c} is queued and has not started, so the message was not delivered. Steer it after it starts running.`);if("starting"!==g.status&&"running"!==g.status)throw Error(`Subagent ${c} already finished (${g.status}), so the message was not delivered. Read its result with get_subagent_result, or continue it with Agent resume.`);await e(c,f)}async function q(b){let c=u().get(b);if(c){if(c.abortRequested=!0,"queued"===c.run.status){if(!c.cancelQueued?.())throw Error("Subagent is no longer queued");return}let d=a.getSession(b);d?.isAlive()&&d.isRunning()&&await d.inner.abort();return}let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");await d.inner.abort()}async function s(d,f){let g=f.trim();if(!g)throw Error("Subagent message is required");let i=await c(d);if(!i)throw Error(`Subagent not found: ${d}`);if("queued"===i.status)throw Error("Subagent is queued");if("starting"===i.status||"running"===i.status)return await e(d,g),{action:"steered",run:i};let j=a.getSession(i.parentSessionId);if(!j?.isAlive()||j.isClosing()){let b=await a.resolveSessionPath(i.parentSessionId);if(!b||!a.reopenSession)throw Error("Parent session is no longer available");j=await a.reopenSession(i.parentSessionId,b)}await j.waitUntilReady();let k=await b({parentContext:{sessionManager:j.inner.sessionManager},parentToolCallId:`ui:${(0,h.randomUUID)()}`,sessionId:d,task:g,description:i.description,runInBackground:!0});return{action:"resumed",run:k.run}}return{extensionRuntime:{start:async function(b){if(!(a.isBuiltInSubagentsEnabled??o.N)())throw Error("Pi Web built-in sub-agents are disabled");let c=b.parentContext.sessionManager.getSessionId(),d=a.getSession(c);if(!d?.isAlive())throw Error("Parent session is no longer available");if(!d.sessionFile)throw Error("Parent session must be persisted before starting a subagent");let e=(0,j.rh)(d.cwd,b.profile);if(!e)throw Error(`Unknown or disabled subagent profile: ${b.profile}`);let i=b.runInBackground??e.runInBackground,q="off"===e.isolation?void 0:b.isolation??e.isolation,s=b.inheritContext??e.inheritContext,t=b.maxTurns??e.maxTurns;if(void 0!==t&&(!Number.isFinite(t)||t<0))throw Error("max_turns must be a non-negative number");let u=t&&t>0?Math.floor(t):void 0,v=b.thinking??e.thinking??d.inner.agent.state?.thinkingLevel;if(v&&!L.has(v))throw Error(`Invalid subagent thinking level: ${v}`);let w=(0,f.getAgentDir)(),x=d.inner.modelRuntime,z=s?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
10
10
  ${function(a,b=5e4){let c=a.flatMap(a=>{if("user"===a.role||"assistant"===a.role){var b;let c=(b=a.content,"string"==typeof b?b.trim():Array.isArray(b)?b.filter(a=>"object"==typeof a&&null!==a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n").trim():"");return c?[`[${"user"===a.role?"User":"Assistant"}]
11
11
  ${c}`]:[]}if("compactionSummary"===a.role){let b=a.summary.trim();return b?[`[Summary]
12
- ${b}`]:[]}return[]}),d=c.join("\n\n");if(Buffer.byteLength(d,"utf8")<=b)return d;let e="[Earlier parent context omitted]",f=Buffer.byteLength(e,"utf8");if(b<f)return"";let g=b-f-2,h=[],i=0;for(let a=c.length-1;a>=0;a-=1){let b=c[a],d=Buffer.byteLength(b,"utf8")+2*(h.length>0);if(i+d>g)break;h.push(b),i+=d}return h.reverse(),[e,...h].join("\n\n")}(d.inner.sessionManager.buildSessionContext().messages)}`:void 0,A=(0,l.vH)(d.cwd,b.inputFiles??[]),B=function(a,b){if("builtin"===a.scope&&"general-purpose"===a.name)return(0,p.c)(b).trim()||void 0}(e,d.inner.resourceLoader.getAgentsFiles().agentsFiles),C=(0,k.r)({profileSystemPrompt:e.systemPrompt,projectInstructions:B,tools:e.tools,loadSkills:e.loadSkills,loadExtensions:e.loadExtensions,promptMode:e.promptMode,task:(0,l.jN)(b.task,A),inheritedParentContext:y}),{chatOnly:D,appendSystemPrompt:E,delegatedTask:F}=C,J=(0,h.randomUUID)(),L=f.SessionManager.create(d.cwd,d.inner.sessionManager.getSessionDir(),{parentSession:d.sessionFile,id:J}),M=L.getSessionFile()??"",N=new Date().toISOString(),O={version:1,parentSessionId:c,parentSessionPath:d.sessionFile,parentToolCallId:b.parentToolCallId,profile:e.name,description:b.description.trim()||e.displayName,task:b.task,runInBackground:i,...u?{maxTurns:u}:{},...q?{isolation:q}:{},createdAt:N,resourceSnapshot:{version:1,appendSystemPrompt:[...E],tools:[...e.tools],loadSkills:e.loadSkills,loadExtensions:e.loadExtensions,...void 0!==C.exactSystemPrompt?{exactSystemPrompt:C.exactSystemPrompt}:{}}};L.appendCustomEntry(j.tP,O),L.appendSessionInfo(O.description),L.appendCustomEntry(j.o2,{version:1,status:"queued"}),function(a){let b=a.getSessionFile();if(!b||(0,g.existsSync)(b))return;let c=a.getHeader();if(!c)throw Error("Subagent session is missing its session header");let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,g.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0}(L);let P={sessionId:J,sessionPath:M,parentSessionId:c,parentToolCallId:b.parentToolCallId,profile:e.name,description:O.description,task:b.task,runInBackground:i,...u?{maxTurns:u}:{},...q?{isolation:q}:{},status:"queued",createdAt:N};return H(a,{parentSessionId:c,waveKey:z(c,b.parentContext),initialRun:P,manager:L,signal:b.signal,runInBackground:i,onUpdate:b.onUpdate,execute:async(c,g)=>{let h,i,k=O;try{"worktree"===q&&(h=await (0,r.B)(d.cwd,J));let l=h?.workPath??d.cwd;h&&(g.manager=f.SessionManager.open(M,void 0,l),k={...O,worktreePath:h.path,worktreeBranch:h.branch},g.manager.appendCustomEntry(j.tP,k),c.run={...c.run,worktreePath:h.path,worktreeBranch:h.branch},b.onUpdate?.(c.run));let o=f.SettingsManager.create(l,w);D||(0,f.initTheme)();let s=await (0,f.createAgentSessionServices)({cwd:l,agentDir:w,modelRuntime:x,settingsManager:o,resourceLoaderOptions:{noExtensions:!e.loadExtensions,noSkills:!e.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...void 0!==C.exactSystemPrompt?{extensionFactories:[(0,p.Q)(C.exactSystemPrompt)],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:E}},...e.loadExtensions||e.loadSkills?{resourceLoaderReloadOptions:(0,m.Fk)(l,w)}:{}}),t=e.loadExtensions?e.extensionTools?.length?(0,j.gY)(s.resourceLoader.getExtensions().extensions,e.extensionTools):s.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],y=(0,n.wQ)((0,j.I6)(e.tools,t),o.getDefaultTools()),z={...k,resourceSnapshot:{...k.resourceSnapshot,tools:[...y]}};g.manager.appendCustomEntry(j.tP,z),k=z;let A=function(a,b){if(!b?.trim())return;let c=b.trim(),d=c.indexOf("/");if(d>0){let b=c.slice(0,d),e=c.slice(d+1),f=a.getModel(b,e);if(!f)throw Error(`Subagent model not found: ${c}`);return f}let e=a.getModels().filter(a=>a.id===c);if(1===e.length)return e[0];if(0===e.length)throw Error(`Subagent model not found: ${c}`);throw Error(`Subagent model is ambiguous; use provider/modelId: ${c}`)}(x,b.model??e.model),B=d.inner.model,{session:H}=await (0,f.createAgentSessionFromServices)({services:s,sessionManager:g.manager,model:A??B,...v?{thinkingLevel:v}:{},tools:y,excludeTools:[...j.st]});if(a.registerSession(H,{chatOnly:D}),i=a.getSession(J),await i?.waitUntilReady(),c.abortRequested){let a=h?await (0,r.F)(d.cwd,h,O.description):void 0;return h=void 0,a?G(g.manager,k,{...c.run,status:"aborted",completedAt:new Date().toISOString()},a):{...c.run,status:"aborted",completedAt:new Date().toISOString()}}g.manager.appendCustomEntry(j.o2,{version:1,status:"running"}),c.run={...c.run,status:"running",sessionPath:H.sessionFile??M},b.onUpdate?.(c.run),a.invalidateSessionList();let K=await I(H,F,c,{turnLimit:u}),L={...c.run,...K,completedAt:new Date().toISOString()};if(h){let a=await (0,r.F)(d.cwd,h,O.description);h=void 0,L=G(g.manager,k,L,a)}return L}catch(a){if(i?.isAlive()&&await i.shutdown(),h){let a=await (0,r.F)(d.cwd,h,O.description);c.run=G(g.manager,k,c.run,a)}throw a}}})},resume:b,get:d,steer:i,consume:C},get:c,steer:e,abort:q,sendUiMessage:s,flushParentNotifications:b=>D(a,b)}}d()}catch(a){d(a)}})},18904:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I:()=>l,p:()=>k});var e=c(75430),f=c(31524),g=a([e]);e=(g.then?(await g)():g)[0];let m=new Set(f.v);function h(a,b){return a.provider===b.provider&&a.id===b.modelId}function i(a){return a.includes("*")||a.includes("?")||a.includes("[")}function j(a,b){let c=a.toLowerCase(),d=b.filter(a=>`${a.provider}/${a.id}`.toLowerCase()===c);return d.length>0?d:b.filter(a=>a.id.toLowerCase()===c)}async function k(a,b){let c=(b??[]).map(a=>a.trim()).filter(Boolean);if(0===c.length)return{visible:await a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:[],ambiguous:[]};let d=await a.getAvailable(),f=function(a,b){let c=[];for(let d of a){if(i(d))continue;let a=j(d,b);if(0===a.length){let c=d.lastIndexOf(":"),e=c>=0?d.slice(c+1):"";m.has(e)&&(a=j(d.slice(0,c),b))}a.length>1&&c.push(d)}return c}(c,d),g=c.filter(a=>!f.includes(a)),{scopedModels:h,diagnostics:k}=await (0,e.resolveModelScopeWithDiagnostics)(g,{getAvailable:async()=>d}),l=k.filter(a=>"no-match"!==a.code||0===h.length||!function(a){if(!i(a))return!1;let b=a.lastIndexOf(":");return b<0||m.has(a.slice(b+1))}(a.pattern)).map(a=>a.message);if(0===h.length)return{visible:f.length>0?await a.getAvailable():d,scopedModels:[],thinkingLevelPins:{},warnings:l,ambiguous:f};let n={};for(let a of h)a.thinkingLevel&&(n[`${a.model.provider}/${a.model.id}`]=a.thinkingLevel);return{visible:h.map(a=>a.model),scopedModels:h,thinkingLevelPins:n,warnings:l,ambiguous:f}}function l(a,b={}){let c=b.requestedModel,d=b.defaultModel,e=c?a.visible.find(a=>h(a,c)):void 0;if(c&&!e)throw Error(`Model is not available in the enabled scope: ${c.provider}/${c.modelId}`);let f=e?a.scopedModels.find(a=>a.model===e||h(a.model,{provider:e.provider,modelId:e.id})):void 0,g=!e&&d?a.scopedModels.find(a=>h(a.model,d)):void 0,i=e?void 0:g??a.scopedModels[0],j=e||i||!d?void 0:a.visible.find(a=>h(a,d)),k=e??i?.model??j,m=f??i,n=b.thinkingLevel??m?.thinkingLevel;return{...k?{model:k}:{},...n?{thinkingLevel:n}:{},scopedModels:[...a.scopedModels]}}d()}catch(a){d(a)}})},20644:(a,b,c)=>{"use strict";function d(a){let b=0===a.tools.length&&!a.loadSkills&&!a.loadExtensions,c="replace"===a.promptMode,d=[a.profileSystemPrompt,...!c&&a.projectInstructions?[a.projectInstructions]:[]].filter(a=>!!a?.trim());return a.inheritedParentContext&&!b&&d.push(a.inheritedParentContext),{chatOnly:b,appendSystemPrompt:d,delegatedTask:a.inheritedParentContext&&b?`${a.task}
12
+ ${b}`]:[]}return[]}),d=c.join("\n\n");if(Buffer.byteLength(d,"utf8")<=b)return d;let e="[Earlier parent context omitted]",f=Buffer.byteLength(e,"utf8");if(b<f)return"";let g=b-f-2,h=[],i=0;for(let a=c.length-1;a>=0;a-=1){let b=c[a],d=Buffer.byteLength(b,"utf8")+2*(h.length>0);if(i+d>g)break;h.push(b),i+=d}return h.reverse(),[e,...h].join("\n\n")}(d.inner.sessionManager.buildSessionContext().messages)}`:void 0,B=(0,l.vH)(d.cwd,b.inputFiles??[]),C=function(a,b){if("builtin"===a.scope&&"general-purpose"===a.name)return(0,p.c)(b).trim()||void 0}(e,d.inner.resourceLoader.getAgentsFiles().agentsFiles),D=(0,k.r)({profileSystemPrompt:e.systemPrompt,projectInstructions:C,tools:e.tools,loadSkills:e.loadSkills,loadExtensions:e.loadExtensions,promptMode:e.promptMode,task:(0,l.jN)(b.task,B),inheritedParentContext:z}),{chatOnly:E,appendSystemPrompt:F,delegatedTask:G}=D,K=(0,h.randomUUID)(),M=f.SessionManager.create(d.cwd,d.inner.sessionManager.getSessionDir(),{parentSession:d.sessionFile,id:K}),N=M.getSessionFile()??"",O=new Date().toISOString(),P={version:1,parentSessionId:c,parentSessionPath:d.sessionFile,parentToolCallId:b.parentToolCallId,profile:e.name,description:b.description.trim()||e.displayName,task:b.task,runInBackground:i,...u?{maxTurns:u}:{},...q?{isolation:q}:{},createdAt:O,resourceSnapshot:{version:1,appendSystemPrompt:[...F],tools:[...e.tools],loadSkills:e.loadSkills,loadExtensions:e.loadExtensions,...void 0!==D.exactSystemPrompt?{exactSystemPrompt:D.exactSystemPrompt}:{}}};M.appendCustomEntry(j.tP,P),M.appendSessionInfo(P.description),M.appendCustomEntry(j.o2,{version:1,status:"queued"}),function(a){let b=a.getSessionFile();if(!b||(0,g.existsSync)(b))return;let c=a.getHeader();if(!c)throw Error("Subagent session is missing its session header");let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,g.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0}(M);let Q={sessionId:K,sessionPath:N,parentSessionId:c,parentToolCallId:b.parentToolCallId,profile:e.name,description:P.description,task:b.task,runInBackground:i,...u?{maxTurns:u}:{},...q?{isolation:q}:{},status:"queued",createdAt:O};return I(a,{parentSessionId:c,waveKey:A(c,b.parentContext),initialRun:Q,manager:M,signal:b.signal,runInBackground:i,onUpdate:b.onUpdate,execute:async(c,g)=>{let h,i,k=P;try{"worktree"===q&&(h=await (0,r.B)(d.cwd,K));let l=h?.workPath??d.cwd;h&&(g.manager=f.SessionManager.open(N,void 0,l),k={...P,worktreePath:h.path,worktreeBranch:h.branch},g.manager.appendCustomEntry(j.tP,k),c.run={...c.run,worktreePath:h.path,worktreeBranch:h.branch},b.onUpdate?.(c.run));let o=f.SettingsManager.create(l,w);E||(0,f.initTheme)();let s=await (0,f.createAgentSessionServices)({cwd:l,agentDir:w,modelRuntime:x,settingsManager:o,resourceLoaderOptions:{noExtensions:!e.loadExtensions,noSkills:!e.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...void 0!==D.exactSystemPrompt?{extensionFactories:[(0,p.Q)(D.exactSystemPrompt)],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:F}},...e.loadExtensions||e.loadSkills?{resourceLoaderReloadOptions:(0,m.Fk)(l,w)}:{}}),t=e.loadExtensions?e.extensionTools?.length?(0,j.gY)(s.resourceLoader.getExtensions().extensions,e.extensionTools):s.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],z=(0,n.wQ)((0,j.I6)(e.tools,t),o.getDefaultTools()),A={...k,resourceSnapshot:{...k.resourceSnapshot,tools:[...z]}};g.manager.appendCustomEntry(j.tP,A),k=A;let B=function(a,b){if(!b?.trim())return;let c=b.trim(),d=c.indexOf("/");if(d>0){let b=c.slice(0,d),e=c.slice(d+1),f=a.getModel(b,e);if(f)return f;let g=a.getModels().filter(a=>a.id===e);throw Error(`Subagent model not found: ${c}${g.length>0?`. Same model id is available as: ${y(g)}`:""}`)}let e=a.getModels().filter(a=>a.id===c);if(1===e.length)return e[0];if(0===e.length)throw Error(`Subagent model not found: ${c}`);throw Error(`Subagent model is ambiguous: ${c}. Use one of: ${y(e)}`)}(x,b.model??e.model),C=d.inner.model,{session:I}=await (0,f.createAgentSessionFromServices)({services:s,sessionManager:g.manager,model:B??C,...v?{thinkingLevel:v}:{},tools:z,excludeTools:[...j.st]});if(a.registerSession(I,{chatOnly:E}),i=a.getSession(K),await i?.waitUntilReady(),c.abortRequested){let a=h?await (0,r.F)(d.cwd,h,P.description):void 0;return h=void 0,a?H(g.manager,k,{...c.run,status:"aborted",completedAt:new Date().toISOString()},a):{...c.run,status:"aborted",completedAt:new Date().toISOString()}}g.manager.appendCustomEntry(j.o2,{version:1,status:"running"}),c.run={...c.run,status:"running",sessionPath:I.sessionFile??N},b.onUpdate?.(c.run),a.invalidateSessionList();let L=await J(I,G,c,{turnLimit:u}),M={...c.run,...L,completedAt:new Date().toISOString()};if(h){let a=await (0,r.F)(d.cwd,h,P.description);h=void 0,M=H(g.manager,k,M,a)}return M}catch(a){if(i?.isAlive()&&await i.shutdown(),h){let a=await (0,r.F)(d.cwd,h,P.description);c.run=H(g.manager,k,c.run,a)}throw a}}})},resume:b,get:d,steer:i,consume:D},get:c,steer:e,abort:q,sendUiMessage:s,flushParentNotifications:b=>E(a,b)}}d()}catch(a){d(a)}})},18904:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{I:()=>l,p:()=>k});var e=c(75430),f=c(31524),g=a([e]);e=(g.then?(await g)():g)[0];let m=new Set(f.v);function h(a,b){return a.provider===b.provider&&a.id===b.modelId}function i(a){return a.includes("*")||a.includes("?")||a.includes("[")}function j(a,b){let c=a.toLowerCase(),d=b.filter(a=>`${a.provider}/${a.id}`.toLowerCase()===c);return d.length>0?d:b.filter(a=>a.id.toLowerCase()===c)}async function k(a,b){let c=(b??[]).map(a=>a.trim()).filter(Boolean);if(0===c.length)return{visible:await a.getAvailable(),scopedModels:[],thinkingLevelPins:{},warnings:[],ambiguous:[]};let d=await a.getAvailable(),f=function(a,b){let c=[];for(let d of a){if(i(d))continue;let a=j(d,b);if(0===a.length){let c=d.lastIndexOf(":"),e=c>=0?d.slice(c+1):"";m.has(e)&&(a=j(d.slice(0,c),b))}a.length>1&&c.push(d)}return c}(c,d),g=c.filter(a=>!f.includes(a)),{scopedModels:h,diagnostics:k}=await (0,e.resolveModelScopeWithDiagnostics)(g,{getAvailable:async()=>d}),l=k.filter(a=>"no-match"!==a.code||0===h.length||!function(a){if(!i(a))return!1;let b=a.lastIndexOf(":");return b<0||m.has(a.slice(b+1))}(a.pattern)).map(a=>a.message);if(0===h.length)return{visible:f.length>0?await a.getAvailable():d,scopedModels:[],thinkingLevelPins:{},warnings:l,ambiguous:f};let n={};for(let a of h)a.thinkingLevel&&(n[`${a.model.provider}/${a.model.id}`]=a.thinkingLevel);return{visible:h.map(a=>a.model),scopedModels:h,thinkingLevelPins:n,warnings:l,ambiguous:f}}function l(a,b={}){let c=b.requestedModel,d=b.defaultModel,e=c?a.visible.find(a=>h(a,c)):void 0;if(c&&!e)throw Error(`Model is not available in the enabled scope: ${c.provider}/${c.modelId}`);let f=e?a.scopedModels.find(a=>a.model===e||h(a.model,{provider:e.provider,modelId:e.id})):void 0,g=!e&&d?a.scopedModels.find(a=>h(a.model,d)):void 0,i=e?void 0:g??a.scopedModels[0],j=e||i||!d?void 0:a.visible.find(a=>h(a,d)),k=e??i?.model??j,m=f??i,n=b.thinkingLevel??m?.thinkingLevel;return{...k?{model:k}:{},...n?{thinkingLevel:n}:{},scopedModels:[...a.scopedModels]}}d()}catch(a){d(a)}})},20644:(a,b,c)=>{"use strict";function d(a){let b=0===a.tools.length&&!a.loadSkills&&!a.loadExtensions,c="replace"===a.promptMode,d=[a.profileSystemPrompt,...!c&&a.projectInstructions?[a.projectInstructions]:[]].filter(a=>!!a?.trim());return a.inheritedParentContext&&!b&&d.push(a.inheritedParentContext),{chatOnly:b,appendSystemPrompt:d,delegatedTask:a.inheritedParentContext&&b?`${a.task}
13
13
 
14
- ${a.inheritedParentContext}`:a.task,...b||c?{exactSystemPrompt:d.join("\n\n")}:{}}}c.d(b,{r:()=>d})},21560:(a,b,c)=>{"use strict";c.d(b,{b5:()=>k,dS:()=>i,lp:()=>l,vw:()=>j});var d=c(41761);let e="pi-web:tool-selection",f=new Set(d.C1),g=Symbol("cleared-tool-selection");function h(a){return"object"!=typeof a||null===a||Array.isArray(a)||1!==a.version?void 0:!0===a.cleared?g:!Array.isArray(a.tools)||a.tools.some(a=>"string"!=typeof a||!f.has(a))?void 0:[...new Set(a.tools)]}function i(a){for(let b=a.length-1;b>=0;b-=1){let c=a[b];if("custom"!==c.type||c.customType!==e)continue;let d=h(c.data);if(d===g)break;if(void 0!==d)return d}}function j(a){let b=h({version:1,tools:a});if(void 0===b||b===g)throw Error("toolNames must contain only built-in tool names");return b}function k(a,b){a.appendCustomEntry(e,{version:1,tools:[...b]})}function l(a){a.appendCustomEntry(e,{version:1,cleared:!0})}},21966:(a,b,c)=>{"use strict";c.d(b,{xT:()=>i});var d=c(4573),e=c(78970),f=c(10424),g=c(96782);function h(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/sk-[A-Za-z0-9._-]+/g,"sk-[redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function i(a,b,c,i,j,k,l){var m;let n,o,p,q=await b.modelRegistry.getProviderAuth(a.provider);if(!q?.auth.apiKey)throw Error(`No credentials configured for image provider ${a.provider}`);let r=function(a,b){if(!a?.trim())throw Error("No base URL configured for this image connection");let c=a.trim().replace(/\/+$/,"");return c.endsWith("/images/generations")||c.endsWith("/images/edits")?`${c.slice(0,c.lastIndexOf("/"))}/${b}`:c.endsWith("/images")?`${c}/${b}`:`${c}/images/${b}`}(q.auth.baseUrl??b.modelRegistry.getProvider(a.provider)?.baseUrl,i?"edits":"generations"),s=AbortSignal.timeout(18e4),t=l?AbortSignal.any([l,s]):s,u=await fetch(r,{method:"POST",headers:{Authorization:`Bearer ${q.auth.apiKey}`,Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify((m=a.model,o={prompt:c,model:m},(p=(0,f.zd)(j))&&(o.size=p),k&&(o.quality=k),i&&(o.images=[{image_url:`data:${i.mimeType};base64,${i.bytes.toString("base64")}`}]),o)),signal:t});if(!u.ok){let a=u.headers.get("x-request-id")??u.headers.get("request-id"),b=await (0,g.S)(u,65536,t).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return h(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return h(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return h(a.message.trim(),600)}catch{}return h(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${u.status}${c?`: ${c}`:""}${a?` (request ${h(a,160)})`:""}`)}let v=await (0,g.S)(u,0x2000000,t);try{n=JSON.parse(v.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let w=n?.data?.[0]?.b64_json;if("string"!=typeof w)throw Error("Image API returned no base64 image");let x=(0,e.Si)(w);if(null===x)throw Error("Image API returned invalid base64 image");if(x>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(w,"base64")}},27367:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{N:()=>m,UF:()=>p,UM:()=>o,ef:()=>n,hd:()=>l});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let p=32;function j(a=(0,g.getAgentDir)()){return(0,f.join)(a,"agents","settings.json")}function k(a){if(!(0,e.existsSync)(a))return{};let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if(null===b||"object"!=typeof b||Array.isArray(b))throw Error("Invalid subagent settings: expected an object");return b}function l(a=j()){var b;let c=k(a);return{builtInEnabled:!1!==c.builtInEnabled,maxConcurrent:(b=c.maxConcurrent,"number"==typeof b&&Number.isInteger(b)&&b>=1&&b<=p?b:10)}}function m(a=j()){try{return l(a).builtInEnabled}catch{return!1}}function n(a,b=j()){let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,builtInEnabled:a},null,2)),l(b)}function o(a,b=j()){if(!Number.isInteger(a)||a<1||a>p)throw Error(`maxConcurrent must be an integer between 1 and ${p}`);let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,maxConcurrent:a},null,2)),l(b)}d()}catch(a){d(a)}})},30590:(a,b,c)=>{"use strict";async function d(a,b,c){if(!b.model&&!b.thinkingLevel)return{modelDefaultChanged:!1};let d=!1;return b.model&&c.model&&b.model.provider===c.model.provider&&b.model.modelId===c.model.modelId&&(a.setDefaultModelAndProvider(c.model.provider,c.model.modelId),d=!0),b.thinkingLevel&&(c.supportsThinking||"off"!==c.thinkingLevel)&&a.setDefaultThinkingLevel(c.thinkingLevel),await a.flush(),{modelDefaultChanged:d}}c.d(b,{o:()=>d})},36899:(a,b,c)=>{"use strict";function d(a){return a.map(a=>a.content).join("\n\n")}function e(a){let b="function"==typeof a?a:()=>a;return{name:"pi-web-exact-system-prompt",hidden:!0,factory:a=>{a.on("before_agent_start",()=>({systemPrompt:b()}))}}}c.d(b,{Q:()=>e,c:()=>d})},38819:(a,b,c)=>{"use strict";c.d(b,{B:()=>o,F:()=>q});var d=c(31421),e=c(73024),f=c(48161),g=c(76760),h=c(57975),i=c(77598),j=c(58864),k=c(25252);let l=(0,h.promisify)(d.execFile);async function m(a,b,c=1e4){let{stdout:d}=await l("git",["-C",a,...b],{timeout:c,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return d.trim()}function n(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function o(a,b){let c=await m(a,["rev-parse","HEAD"]),d=(0,j.gB)(await m(a,["rev-parse","--path-format=absolute","--show-toplevel"])),e=(0,g.relative)(n(d),n(a)),h=(0,i.randomUUID)().slice(0,8),l=(0,g.join)((0,f.tmpdir)(),`pi-web-agent-${b.slice(0,8)}-${h}`);try{await m(a,["worktree","add","--detach",l,"HEAD"],3e4)}catch(b){try{await p(a,l)}catch{}throw b}return(0,k.wz)(l),{path:l,workPath:e?(0,g.join)(l,e):l,branch:`pi-web-agent-${b.slice(0,8)}`,baseSha:c}}async function p(a,b){try{await m(a,["worktree","remove","--force",b],15e3)}catch{if(await m(a,["worktree","prune"],5e3),(0,e.existsSync)(b))throw Error(`Failed to remove isolated worktree: ${b}`)}}async function q(a,b,c){let d;if(!(0,e.existsSync)(b.path))return{hasChanges:!1};let f=!1;try{let e=await m(b.path,["status","--porcelain"]);if(f=!!e,e)await m(b.path,["add","-A"]),await m(b.path,["commit","--no-verify","-m",`pi-web-agent: ${c.slice(0,200)}`]);else if(await m(b.path,["rev-parse","HEAD"])===b.baseSha)return await p(a,b.path),{hasChanges:!1};let g=b.branch;try{await m(b.path,["branch",g])}catch{g=`${b.branch}-${Date.now()}`,await m(b.path,["branch",g])}return d=g,await p(a,b.path),{hasChanges:!0,branch:d}}catch(c){if(!f)try{await p(a,b.path)}catch{}return{hasChanges:f,...d?{branch:d}:{},cleanupError:c instanceof Error?c.message:String(c)}}}},46753:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l});var e=c(28802),f=c(75430),g=c(7048),h=c(99324),i=a([e,f,g]);[e,f,g]=i.then?(await i)():i;let n="pi-web-subagents",o=`<inline:${n}>`,p=new Set(g.st),q="pi-subagents";function j(a){return{kind:"pi-web-subagent",sessionId:a.sessionId,parentToolCallId:a.parentToolCallId,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.wrappedAtTurnLimit?{wrappedAtTurnLimit:!0}:{},...a.error?{error:a.error}:{}}}function k(a){if("starting"===a.status||"running"===a.status||"queued"===a.status)return`Subagent ${a.sessionId} is ${a.status}.`;if("completed"===a.status){let b=a.result?.trim()||"Subagent completed without text output.";return a.wrappedAtTurnLimit?`${b}
14
+ ${a.inheritedParentContext}`:a.task,...b||c?{exactSystemPrompt:d.join("\n\n")}:{}}}c.d(b,{r:()=>d})},21560:(a,b,c)=>{"use strict";c.d(b,{b5:()=>k,dS:()=>i,lp:()=>l,vw:()=>j});var d=c(41761);let e="pi-web:tool-selection",f=new Set(d.C1),g=Symbol("cleared-tool-selection");function h(a){return"object"!=typeof a||null===a||Array.isArray(a)||1!==a.version?void 0:!0===a.cleared?g:!Array.isArray(a.tools)||a.tools.some(a=>"string"!=typeof a||!f.has(a))?void 0:[...new Set(a.tools)]}function i(a){for(let b=a.length-1;b>=0;b-=1){let c=a[b];if("custom"!==c.type||c.customType!==e)continue;let d=h(c.data);if(d===g)break;if(void 0!==d)return d}}function j(a){let b=h({version:1,tools:a});if(void 0===b||b===g)throw Error("toolNames must contain only built-in tool names");return b}function k(a,b){a.appendCustomEntry(e,{version:1,tools:[...b]})}function l(a){a.appendCustomEntry(e,{version:1,cleared:!0})}},21966:(a,b,c)=>{"use strict";c.d(b,{xT:()=>i});var d=c(4573),e=c(78970),f=c(10424),g=c(96782);function h(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/sk-[A-Za-z0-9._-]+/g,"sk-[redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function i(a,b,c,i,j,k,l){var m;let n,o,p,q=await b.modelRegistry.getProviderAuth(a.provider);if(!q?.auth.apiKey)throw Error(`No credentials configured for image provider ${a.provider}`);let r=function(a,b){if(!a?.trim())throw Error("No base URL configured for this image connection");let c=a.trim().replace(/\/+$/,"");return c.endsWith("/images/generations")||c.endsWith("/images/edits")?`${c.slice(0,c.lastIndexOf("/"))}/${b}`:c.endsWith("/images")?`${c}/${b}`:`${c}/images/${b}`}(q.auth.baseUrl??b.modelRegistry.getProvider(a.provider)?.baseUrl,i?"edits":"generations"),s=AbortSignal.timeout(18e4),t=l?AbortSignal.any([l,s]):s,u=await fetch(r,{method:"POST",headers:{Authorization:`Bearer ${q.auth.apiKey}`,Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify((m=a.model,o={prompt:c,model:m},(p=(0,f.zd)(j))&&(o.size=p),k&&(o.quality=k),i&&(o.images=[{image_url:`data:${i.mimeType};base64,${i.bytes.toString("base64")}`}]),o)),signal:t});if(!u.ok){let a=u.headers.get("x-request-id")??u.headers.get("request-id"),b=await (0,g.S)(u,65536,t).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return h(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return h(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return h(a.message.trim(),600)}catch{}return h(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${u.status}${c?`: ${c}`:""}${a?` (request ${h(a,160)})`:""}`)}let v=await (0,g.S)(u,0x2000000,t);try{n=JSON.parse(v.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let w=n?.data?.[0]?.b64_json;if("string"!=typeof w)throw Error("Image API returned no base64 image");let x=(0,e.Si)(w);if(null===x)throw Error("Image API returned invalid base64 image");if(x>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(w,"base64")}},27367:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{N:()=>m,UF:()=>p,UM:()=>o,ef:()=>n,hd:()=>l});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let p=32;function j(a=(0,g.getAgentDir)()){return(0,f.join)(a,"agents","settings.json")}function k(a){if(!(0,e.existsSync)(a))return{};let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if(null===b||"object"!=typeof b||Array.isArray(b))throw Error("Invalid subagent settings: expected an object");return b}function l(a=j()){var b;let c=k(a);return{builtInEnabled:!1!==c.builtInEnabled,maxConcurrent:(b=c.maxConcurrent,"number"==typeof b&&Number.isInteger(b)&&b>=1&&b<=p?b:10)}}function m(a=j()){try{return l(a).builtInEnabled}catch{return!1}}function n(a,b=j()){let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,builtInEnabled:a},null,2)),l(b)}function o(a,b=j()){if(!Number.isInteger(a)||a<1||a>p)throw Error(`maxConcurrent must be an integer between 1 and ${p}`);let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,maxConcurrent:a},null,2)),l(b)}d()}catch(a){d(a)}})},28640:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Bm:()=>m,NQ:()=>n});var e=c(76760),f=c.n(e),g=c(28802),h=c(75430),i=c(10424),j=c(6759),k=c(59457),l=a([g,h,j,k]);[g,h,j,k]=l.then?(await l)():l;let o="<inline:image-generation>";function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has(i.PZ))return a;let c=!1,d=a.extensions.map(a=>{if(a.path===o||!a.tools.has(i.PZ))return a;c=!0;let b=new Map(a.tools);return b.delete(i.PZ),{...a,tools:b}});return c?{...a,extensions:d}:a}function n(a,b={}){return{name:"image-generation",hidden:!0,factory:async c=>{var d;let e;if(!(0,j.h8)(a))return;let l=(0,j.al)(a),m=(0,j.h)(l);if(!l.enabled||!m.connections.length)return;let n=b.hasAuth?void 0:await h.ModelRuntime.create({authPath:f().join(a,"auth.json"),modelsPath:f().join(a,"models.json"),refreshOnCreate:!1}),o=b.hasAuth??(a=>n?.getProviderAuthStatus(a).configured===!0),p=m.connections.filter(a=>o(a.provider));if(!p.length)return;let q=(d={enabled:!0,defaultConnection:p.some(a=>a.id===m.defaultConnection)?m.defaultConnection:p[0].id,connections:Object.fromEntries(p.map(a=>[a.id,a]))},e=Object.values(d.connections).map(a=>{let b=[a.capabilities.editing?"editing":void 0,a.capabilities.sizes?.length?`aspect ratios: ${a.capabilities.sizes.join(", ")}`:void 0,a.capabilities.resolutions?.length?`resolutions: ${a.capabilities.resolutions.join(", ")}`:void 0,a.capabilities.qualities?.length?`qualities: ${a.capabilities.qualities.join(", ")}`:void 0].filter(Boolean);return`${a.id}${b.length?` (${b.join("; ")})`:""}`}),`Configured image connections: ${e.join("; ")}. Omit connection so the user's default connection from Settings is used, with automatic quota fallback. Set connection only when the user names one in this request. Omit size, resolution, and quality unless the user asks for them.`);c.registerTool({name:i.PZ,label:"Generate image",description:"Generate a new image, or edit one existing image, with a configured image connection.",promptSnippet:"Generate or edit an image with a configured image connection",promptGuidelines:[`Use ${i.PZ} when the user asks to generate or edit an image.`,q,`When the user wants to change an existing image, ${i.PZ} edits it. Rewrite their intent as the edit prompt; do not generate a new picture from scratch.`,"If they @-mentioned or named an image file, that file is the source. If this user message includes an attached image, that attachment is the source. Otherwise the most recent generated image is the source.","Set new_image only when the user wants an unrelated new picture, not a change to the current one.","If the user attached an image to edit, set use_last_attachment. If they named a file under the working directory, set target.",`${i.PZ} results are shown inline; do not embed the image again in the final response.`,"Pass size as a declared aspect ratio such as auto, 1:1, 16:9, or 9:16. Pass resolution only when the connection declares it. Never invent pixel sizes.",`Do not retry a failed ${i.PZ} call unless the user explicitly asks you to retry.`,`Do not read a generated image file after ${i.PZ} succeeds unless the user asks you to inspect it.`],parameters:g.Type.Object({prompt:g.Type.String({minLength:1,maxLength:32e3,description:"Complete generation instruction, or the change to make when editing."}),connection:g.Type.Optional(g.Type.String({minLength:1,description:"Configured connection ID. Omit to use the default."})),target:g.Type.Optional(g.Type.String({minLength:1,description:"Image file under the current working directory to edit."})),new_image:g.Type.Optional(g.Type.Boolean({description:"Create a new picture instead of editing the most recent generated image."})),use_last_attachment:g.Type.Optional(g.Type.Boolean({description:"Edit an image attached in the most recent user message that contains attachments."})),size:g.Type.Optional(g.Type.String({minLength:1,description:"Declared aspect ratio such as auto, 1:1, 16:9, or 9:16."})),resolution:g.Type.Optional(g.Type.String({minLength:1,description:"Declared output resolution such as 1k or 2k."})),quality:g.Type.Optional(g.Type.String({minLength:1,description:"Declared output quality such as low or medium."}))}),async execute(b,c,d,e,f){let g=await (0,k.dt)(a,c,f,d);return{content:[{type:"text",text:`Generated image: ${g.path}`}],details:g}}})}}}d()}catch(a){d(a)}})},30590:(a,b,c)=>{"use strict";async function d(a,b,c){if(!b.model&&!b.thinkingLevel)return{modelDefaultChanged:!1};let d=!1;return b.model&&c.model&&b.model.provider===c.model.provider&&b.model.modelId===c.model.modelId&&(a.setDefaultModelAndProvider(c.model.provider,c.model.modelId),d=!0),b.thinkingLevel&&(c.supportsThinking||"off"!==c.thinkingLevel)&&a.setDefaultThinkingLevel(c.thinkingLevel),await a.flush(),{modelDefaultChanged:d}}c.d(b,{o:()=>d})},36899:(a,b,c)=>{"use strict";function d(a){return a.map(a=>a.content).join("\n\n")}function e(a){let b="function"==typeof a?a:()=>a;return{name:"pi-web-exact-system-prompt",hidden:!0,factory:a=>{a.on("before_agent_start",()=>({systemPrompt:b()}))}}}c.d(b,{Q:()=>e,c:()=>d})},38819:(a,b,c)=>{"use strict";c.d(b,{B:()=>o,F:()=>q});var d=c(31421),e=c(73024),f=c(48161),g=c(76760),h=c(57975),i=c(77598),j=c(58864),k=c(25252);let l=(0,h.promisify)(d.execFile);async function m(a,b,c=1e4){let{stdout:d}=await l("git",["-C",a,...b],{timeout:c,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return d.trim()}function n(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function o(a,b){let c=await m(a,["rev-parse","HEAD"]),d=(0,j.gB)(await m(a,["rev-parse","--path-format=absolute","--show-toplevel"])),e=(0,g.relative)(n(d),n(a)),h=(0,i.randomUUID)().slice(0,8),l=(0,g.join)((0,f.tmpdir)(),`pi-web-agent-${b.slice(0,8)}-${h}`);try{await m(a,["worktree","add","--detach",l,"HEAD"],3e4)}catch(b){try{await p(a,l)}catch{}throw b}return(0,k.wz)(l),{path:l,workPath:e?(0,g.join)(l,e):l,branch:`pi-web-agent-${b.slice(0,8)}`,baseSha:c}}async function p(a,b){try{await m(a,["worktree","remove","--force",b],15e3)}catch{if(await m(a,["worktree","prune"],5e3),(0,e.existsSync)(b))throw Error(`Failed to remove isolated worktree: ${b}`)}}async function q(a,b,c){let d;if(!(0,e.existsSync)(b.path))return{hasChanges:!1};let f=!1;try{let e=await m(b.path,["status","--porcelain"]);if(f=!!e,e)await m(b.path,["add","-A"]),await m(b.path,["commit","--no-verify","-m",`pi-web-agent: ${c.slice(0,200)}`]);else if(await m(b.path,["rev-parse","HEAD"])===b.baseSha)return await p(a,b.path),{hasChanges:!1};let g=b.branch;try{await m(b.path,["branch",g])}catch{g=`${b.branch}-${Date.now()}`,await m(b.path,["branch",g])}return d=g,await p(a,b.path),{hasChanges:!0,branch:d}}catch(c){if(!f)try{await p(a,b.path)}catch{}return{hasChanges:f,...d?{branch:d}:{},cleanupError:c instanceof Error?c.message:String(c)}}}},46753:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l});var e=c(28802),f=c(75430),g=c(7048),h=c(99324),i=a([e,f,g]);[e,f,g]=i.then?(await i)():i;let n="pi-web-subagents",o=`<inline:${n}>`,p=new Set(g.st),q="pi-subagents";function j(a){return{kind:"pi-web-subagent",sessionId:a.sessionId,parentToolCallId:a.parentToolCallId,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.wrappedAtTurnLimit?{wrappedAtTurnLimit:!0}:{},...a.error?{error:a.error}:{}}}function k(a){if("starting"===a.status||"running"===a.status||"queued"===a.status)return`Subagent ${a.sessionId} is ${a.status}.`;if("completed"===a.status){let b=a.result?.trim()||"Subagent completed without text output.";return a.wrappedAtTurnLimit?`${b}
15
15
 
16
16
  [Subagent wrapped up after reaching its turn limit.]`:b}return"aborted"===a.status?a.result?.trim()?`${a.result.trim()}
17
17
 
18
18
  [Subagent was stopped before completing normally.]`:`Subagent ${a.sessionId} was stopped.`:"interrupted"===a.status?`Subagent ${a.sessionId} was interrupted before completion.`:a.result?.trim()?`${a.result.trim()}
19
19
 
20
- [Subagent failed: ${a.error??"Unknown error"}]`:`Subagent ${a.sessionId} failed: ${a.error??"Unknown error"}`}function l(a,b,c=()=>!0){return{name:n,hidden:!0,factory:d=>{let g;if(!c())return;let i=b().filter(a=>a.enabled),l=i.map(a=>a.name),m=l.length>0?l.join(", "):"none";d.registerTool((0,f.defineTool)({name:"Agent",label:"Agent",description:`Delegate a focused task to a configured subagent. Each subagent runs as a full, inspectable Pi session. Background is the default: the call returns immediately, and unread results notify the parent after its current run settles. Use foreground mode when no useful work can continue without the result.
20
+ [Subagent failed: ${a.error??"Unknown error"}]`:`Subagent ${a.sessionId} failed: ${a.error??"Unknown error"}`}function l(a,b,c=()=>!0){return{name:n,hidden:!0,factory:d=>{let i;if(!c())return;let l=b().filter(a=>a.enabled),m=l.map(a=>a.name),n=m.length>0?m.join(", "):"none";d.on("tool_result",a=>{if("Agent"!==a.toolName&&"get_subagent_result"!==a.toolName)return;let b=a.details;return b?.kind==="pi-web-subagent"&&"failed"===b.status?{isError:!0}:void 0}),d.registerTool((0,f.defineTool)({name:"Agent",label:"Agent",description:`Delegate a focused task to a configured subagent. Each subagent runs as a full, inspectable Pi session. Background is the default: the call returns immediately, and unread results notify the parent after its current run settles. Use foreground mode when no useful work can continue without the result.
21
21
 
22
22
  Available agent types:
23
- ${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently enabled.":g.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Use foreground Agent calls when the next action cannot proceed without their results.","After useful parallel work is done, use get_subagent_result with wait=true once as the join point; do not repeatedly poll background agents.","Pass resume with an existing subagent session ID to continue that session instead of creating a new one.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${m}. ${l.includes("general-purpose")?"Default: general-purpose.":"Required: general-purpose is disabled."}`})),prompt:e.Type.String({description:"The complete task for the subagent."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately. Default true. Unread results notify the parent after its current run settles."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree copy."}))}),async execute(b,c,d,e,f){let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground)return h.completion.catch(a=>{console.error("[pi-web] background subagent failed to settle:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${h.run.sessionId}. Use get_subagent_result to check it later.`}],details:j(h.run)};let i=await h.completion;if("failed"===i.status)throw Error(k(i));return{content:[{type:"text",text:k(i)}],details:j(i)}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."})),timeout_ms:e.Type.Optional(e.Type.Number({description:"Maximum wait in milliseconds. Default: 300000.",minimum:1,maximum:18e5}))}),async execute(b,c,d,e,f){let g=f.sessionManager.getSessionId(),h=await a.get(g,c.agent_id);if(!h)throw Error(`Subagent not found: ${c.agent_id}`);let i=c.timeout_ms??3e5,l=Date.now()+i;for(;c.wait&&("starting"===h.status||"queued"===h.status||"running"===h.status);){let b=l-Date.now();if(b<=0)return{content:[{type:"text",text:`Subagent ${h.sessionId} is still ${h.status} after waiting ${i}ms.`}],details:j(h)};if(await new Promise((a,c)=>{let e=()=>{clearTimeout(f),c(Error("Result wait aborted"))},f=setTimeout(()=>{d?.removeEventListener("abort",e),a()},Math.min(500,b));d?.aborted?e():d?.addEventListener("abort",e,{once:!0})}),!(h=await a.get(g,c.agent_id)))throw Error(`Subagent not found: ${c.agent_id}`)}if("starting"!==h.status&&"queued"!==h.status&&"running"!==h.status&&a.consume(g,h),"failed"===h.status)throw Error(k(h));return{content:[{type:"text",text:k(h)}],details:j(h)}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c,d,e,f){let g=f.sessionManager.getSessionId();return await a.steer(g,c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ds:()=>j,J1:()=>h,eD:()=>i});var e=c(75430),f=c(76760),g=a([e]);e=(g.then?(await g)():g)[0];let k="pi-web-project-command-environment",l=`<inline:${k}>`;function h(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var h;let i,j,k,l=(h=function(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}(f.env??c,g),i="win32"===g?Object.keys(h).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",j="win32"===g?";":":",(k=h[i]??"").split(j).filter(Boolean).includes(b)||(h[i]=[b,k].filter(Boolean).join(j)),h);return d.exec(a,e,{...f,env:l})}}}function i(a){return{name:k,hidden:!0,factory:b=>{let c=(0,e.createBashToolDefinition)(a.cwd);b.registerTool({...c,execute:(b,c,d,f,g)=>(0,e.createBashToolDefinition)(a.cwd,{commandPrefix:a.settings.getShellCommandPrefix(),operations:h({shellPath:a.settings.getShellPath()})}).execute(b,c,d,f,g)})}}}function j(a){let b=a.extensions.findIndex(a=>a.path===l);if(b<0)return a;let c=a.extensions.slice(0,b).find(a=>a.tools.has("bash"));return c?{...a,extensions:a.extensions.filter((a,c)=>c!==b),errors:a.errors.filter(a=>a.path!==l||a.error!==`Tool "bash" conflicts with ${c.path}`)}:a}d()}catch(a){d(a)}})},56429:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{AgentSessionWrapper:()=>at,abortSubagent:()=>S,destroyRpcSessionsForCwd:()=>ae,getCompletionNotificationSuppressedRpcSessionIds:()=>ag,getRpcSession:()=>Y,getRpcSessionInfos:()=>ac,getRunningRpcSessionIds:()=>af,getSubagentRun:()=>Q,hasAppUpdateBlockingSessions:()=>X,hasBusyRpcSessionForCwd:()=>ad,isSubagentQueued:()=>C.ll,releaseRpcSessionForExternalWrite:()=>Z,reserveRpcSessionFileMutation:()=>_,resolveSessionIdleTimeoutMs:()=>L,sendSubagentUiMessage:()=>T,setRpcSessionTools:()=>aa,startRpcSession:()=>ah,steerSubagent:()=>R});var e=c(98469),f=c(75430),g=c(29862),h=c(55511),i=c(29021),j=c(33873),k=c(1932),l=c(78970),m=c(91712),n=c(28967),o=c(31524),p=c(18904),q=c(53303),r=c(40402),s=c(45232),t=c(88914),u=c(72498),v=c(30590),w=c(92243),x=c(95412),y=c(75493),z=c(71069),A=c(46753),B=c(7048),C=c(12568),D=c(27367),E=c(305),F=c(36899),G=c(6259),H=c(10424),I=c(59457),J=c(21560),K=a([f,g,p,q,r,u,w,A,B,C,D,E,G,I]);[f,g,p,q,r,u,w,A,B,C,D,E,G,I]=K.then?(await K)():K;let ai=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]);function L(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){if(void 0!==a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b)&&b>=0&&b<=0x7fffffff)return b;console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 10 minutes`)}return 6e5}let aj=L(),ak=new Set(["fork","clone"]),al=new Set(["get_state","get_session_stats","get_last_assistant_text","get_tools","get_commands","extension_ui_response","extension_ui_input"]),am=["read","bash","powershell","edit","write","grep","find","ls"],an=new Set(o.v);class ao extends f.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let ap=new ao,aq=new g.KeybindingsManager(g.TUI_KEYBINDINGS);class ar extends f.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(a,b){return`${this.getFgAnsi(a)}${b}\x1b[39m`}bg(a,b){return`${this.getBgAnsi(a)}${b}\x1b[49m`}bold(a){return`\x1b[1m${a}\x1b[22m`}italic(a){return`\x1b[3m${a}\x1b[23m`}underline(a){return`\x1b[4m${a}\x1b[24m`}strikethrough(a){return`\x1b[9m${a}\x1b[29m`}getFgAnsi(a){return"accent"===a?"\x1b[34m":"success"===a?"\x1b[32m":"error"===a?"\x1b[31m":"warning"===a?"\x1b[33m":"muted"===a||"dim"===a?"\x1b[90m":"\x1b[39m"}getBgAnsi(a){return"selectedBg"===a?"\x1b[100m":"\x1b[49m"}}let as=new ar;function M(a,b){if(0===b.length)return[];let c=new Set(am),d=(0,E.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class at{constructor(a,b={}){this.inner=a,this.subscriptions=[],this.activeToolEvents=new Map,this.closeListeners=new Set,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.pendingPromptCount=0,this.directImageAbortController=null,this.directImageRequestId=null,this.pendingImageCancellationId=null,this.activeMutatingCommands=0,this.sessionReplacement=null,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this.forceShutdownOnIdle=!1,this._alive=!0,this._closing=!1,this.chatOnly=b.chatOnly??!1,this.beforeAgentRunComplete=b.beforeAgentRunComplete,this.onAgentRunComplete=b.onAgentRunComplete,this.suppressCompletionNotifications=b.suppressCompletionNotifications??!1}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}get streamingMessage(){return this.inner.agent.state?.streamingMessage}get isStreaming(){return this.inner.isStreaming}isAlive(){return this._alive}isClosing(){return this._closing}isRunning(){return this._alive&&(this.pendingPromptCount>0||null!==this.directImageAbortController||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}isBusyForFileMutation(){return this._closing||this.activeMutatingCommands>0||null!==this.sessionReplacement||this.isRunning()}isChatOnly(){return this.chatOnly}hasSuppressedCompletionNotifications(){return this.suppressCompletionNotifications}canStartBackgroundFollowUp(){return this._alive&&!this._closing&&!N().has(this.sessionId)}start(){this.unsubscribe=this.inner.subscribe(a=>{"agent_start"===a.type&&(this.agentRunNeedsCompletion=!0),"agent_end"===a.type&&(0,r.mD)();let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),ai.has(a.type)&&this.resetIdleTimer(),this.emit(a),"agent_settled"===a.type&&this.notifyAgentRunCompleteIfIdle()}),this.resetIdleTimer()}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())){try{if(this.beforeAgentRunComplete?.(this.sessionId)||this.isRunning())return}catch(a){console.error("[pi-web] pre-completion listener failed:",a instanceof Error?a.message:a)}if(this.agentRunNeedsCompletion=!1,!this.suppressCompletionNotifications)try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}}beginExtensionBinding(){this.ensureExtensionsBound().catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(){return this.extensionsBound?Promise.resolve():(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in Pi Web."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this._alive&&(this.extensionsBound=!0,console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`))})().catch(a=>{throw this.extensionBindingError=a,this.emit({type:"extension_error",extensionPath:"extensions",event:"session_start",error:a instanceof Error?a.message:String(a)}),a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}async withFinalIdleReset(a){try{return await a()}finally{this.resetIdleTimer()}}setActiveToolSelection(a){this.inner.setActiveToolsByName(M(this.inner,a))}emit(a){for(let{listener:b}of this.subscriptions)try{b(a)}catch(b){console.error(`[pi-web] failed to deliver ${a.type} event:`,b instanceof Error?b.message:b)}}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),!this._alive||this._closing||0!==aj&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||this.hasConnectedKeepAlive()||(0,x.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},aj))}persistCommandOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,i.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,i.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,r.O8)(this.inner.sessionId,b)}onEvent(a,b=!1){let c={listener:a,keepAlive:!0===b};for(let b of(this.subscriptions.push(c),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return this.resetIdleTimer(),()=>{let a=this.subscriptions.indexOf(c);-1!==a&&this.subscriptions.splice(a,1),this.resetIdleTimer()}}onClose(a){return this._alive?(this.closeListeners.add(a),()=>this.closeListeners.delete(a)):(a(),()=>{})}onDestroy(a){this.onDestroyCallback=a}async withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0||null!==this.directImageAbortController}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}async send(a){(0,e.b)();let b=a.type,c=al.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(!this._alive||this._closing)throw Error("Session is closing");if(ak.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);let d=!c;d&&(this.activeMutatingCommands+=1);try{if("get_state"!==b&&this.resetIdleTimer(),this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,l.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(this.inner.isBashRunning||this.directImageAbortController)throw Error("Cannot send a prompt while another session command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior,g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g||(g=!0,N().delete(this.sessionId),this.agentRunNeedsCompletion=!0,h||(h=!0,a()))},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1;try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&b()}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),f||this.emit({type:"prompt_done"})},a=>{c(a),k(),(0,r.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"}))}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.forceShutdownOnIdle=!0,N().add(this.sessionId),this.directImageAbortController?.abort(new DOMException("Image generation cancelled","AbortError")),this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{return await this.withFinalIdleReset(()=>this.inner.abort()),null}finally{this.isRunning()||(this.forceShutdownOnIdle=!1)}case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.pendingPromptCount>0,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off"}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(d||(await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)),!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d,{persist:!0}),(0,n.kn)(),(0,r.mD)(),{id:d.id,provider:d.provider,thinkingLevel:this.inner.thinkingLevel}}case"fork":if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");return this.withSessionReplacement("fork",async()=>{let b,c,d=a.entryId,e=this.inner.sessionManager,g=this.inner.sessionFile;if(!e.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let h=e.getEntry(d);if(!h)throw Error("Invalid entry ID for forking");let j=e.getSessionDir();if(h.parentId){let a=(c=f.SessionManager.open(g,j)).createBranchedSession(h.parentId);if(!a)throw Error("Failed to create forked session");b=a}else(c=f.SessionManager.create(e.getCwd(),j)).newSession({parentSession:g}),b=c.getSessionFile();if(!(0,i.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,i.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,r.O8)(k,b),(0,r.mD)(),await this.shutdownAfterSessionReplacement("fork"),{cancelled:!1,newSessionId:k}});case"fork_branch":{if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");let b=a.entryId,c=this.inner.sessionManager,d=this.inner.sessionFile;if(!c.isPersisted())return{cancelled:!0};if(!d)throw Error("Persisted session is missing a session file");if(!c.getEntry(b))throw Error("Invalid entry ID for forking");let e=c.getSessionDir(),g=f.SessionManager.open(d,e).createBranchedSession(b);if(!g)throw Error("Failed to create forked session");let h=f.SessionManager.open(g,e).getSessionId();return(0,r.O8)(h,g),(0,r.mD)(),{cancelled:!1,newSessionId:h}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),e=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!e||!c||!(0,i.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),e=f.SessionManager.open(c,a).createBranchedSession(d);if(!e||!(0,i.existsSync)(e))throw Error("Failed to clone current session branch");let g=f.SessionManager.open(e,a).getSessionId();return(0,r.O8)(g,e),(0,r.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"bug_report":if(this.isSessionRunningForReplacement())throw Error("Cannot report a bug while the session is running");return await this.withFinalIdleReset(()=>ab(this.inner,a.hint?.trim()||void 0));case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b,{persist:!0}),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,n.kn)(),(0,r.mD)(),null}case"compact":try{return await this.withFinalIdleReset(()=>this.inner.compact(a.customInstructions))}finally{(0,r.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,r.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),costs:(0,t.P)(this.inner.sessionManager.getEntries()).costs,sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":{let a=(0,m.HY)(this.inner.agent),b=(0,m.vt)(a);return this.inner.clearQueue(),b}case"steer":{let b=a.images;return await this.inner.steer(a.message,b?.length?b:void 0,{source:"rpc"}),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0,{source:"rpc"}),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case H.mk:{if(this.isRunning())throw Error("Cannot generate an image while the session is busy");let b="string"==typeof a.requestId&&a.requestId?a.requestId:null;if(!b)throw Error("Image generation requestId is required");if(this.pendingImageCancellationId===b)throw this.pendingImageCancellationId=null,new DOMException("Image generation cancelled","AbortError");this.pendingImageCancellationId=null;let c=new AbortController;this.directImageAbortController=c,this.directImageRequestId=b;try{let b=a.arguments;if(void 0!==a.sourceImage){if(!(0,l.wb)(a.sourceImage))throw Error("sourceImage must be base64 image data within the attachment size limit");if(!b||"object"!=typeof b||Array.isArray(b))throw Error("Image request must be an object");b={...b,target:await (0,I.Um)(this.cwd,a.sourceImage)}}let d=await (0,I.dt)((0,f.getAgentDir)(),b,{cwd:this.cwd,sessionManager:this.inner.sessionManager,modelRegistry:{getProviderAuth:a=>this.inner.modelRuntime.getAuth(a),getProvider:a=>this.inner.modelRuntime.getProvider(a)}},c.signal),e=[`Generated image: ${d.path}`,`Prompt: ${d.prompt}`,`Connection: ${d.connection}`,`Model: ${d.model}`,...d.size?[`Size: ${d.size}`]:[],...d.resolution?[`Resolution: ${d.resolution}`]:[],...d.quality?[`Quality: ${d.quality}`]:[]].join("\n");return await this.inner.sendCustomMessage({customType:H.Ds,content:e,display:!0,details:d}),this.persistCommandOnlySession(),(0,r.mD)(),d}finally{this.directImageAbortController=null,this.directImageRequestId=null,this.resetIdleTimer()}}case H.l6:{let b="string"==typeof a.requestId&&a.requestId?a.requestId:null;if(!b)throw Error("Image generation requestId is required");return this.directImageRequestId===b?this.directImageAbortController?.abort(new DOMException("Image generation cancelled","AbortError")):this.pendingImageCancellationId=b,null}case"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.syncProjectTrust(),await this.inner.reload(),this.setActiveToolSelection(a),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),(0,n.kn)(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.pendingPromptCount>0||this.directImageAbortController||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:(0,q.J1)({shellPath:this.inner.settingsManager.getShellPath()})});try{let a=await b;return this.persistCommandOnlySession(),a}finally{this.resetIdleTimer(),(0,r.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,N().add(this.sessionId),this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}destroy(){if(!this._alive)return;for(let a of(this._closing=!0,this._alive=!1,this.closeListeners))try{a()}catch{}for(let a of(this.closeListeners.clear(),this.idleTimer&&clearTimeout(this.idleTimer),this.directImageAbortController?.abort(new DOMException("Session closed","AbortError")),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.activeToolEvents.clear();let a=()=>{try{this.inner.dispose()}finally{this.onDestroyCallback?.()}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():(async()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"}))().catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this._closing=!0,this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getCustomUiWidth(a){if(!a||"object"!=typeof a)return z.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return z.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,h.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,z.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,ap,aq,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let g=e?AbortSignal.any([e,f]):f,i=(0,h.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let h,k=!1,l=()=>{h&&clearTimeout(h),g.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(h=setTimeout(()=>m(b),d)),g.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}hasConnectedKeepAlive(){return this.subscriptions.some(a=>a.keepAlive)}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"notify",message:(0,y.a)(a),notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement})},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return as},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in Pi Web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}})}}}syncProjectTrust(){let a=(0,u.Y1)(this.cwd,(0,f.getAgentDir)());this.inner.settingsManager.setProjectTrusted(a.trusted)}}function N(){return globalThis.__piPausedAutomaticFollowUps||(globalThis.__piPausedAutomaticFollowUps=new Set),globalThis.__piPausedAutomaticFollowUps}function O(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>{let a=Array.from(globalThis.__piSessions?.values()??[]);Promise.allSettled(a.map(a=>a.shutdown()))};process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__piSessions}function P(a){let b=O(),c=a.sessionId;a.sessionFile&&(0,r.O8)(c,a.sessionFile),a.onDestroy(()=>{b.get(c)===a&&b.delete(c)}),b.set(c,a),a.start(),a.isChatOnly()||a.beginExtensionBinding()}let au=(0,C.su)({getSession:a=>O().get(a),registerSession:(a,b)=>{let c=new at(a,{chatOnly:b?.chatOnly,suppressCompletionNotifications:!0});P(c)},resolveSessionPath:r.os,reopenSession:async(a,b,c)=>{let{session:d}=await ah(a,b,void 0,{...c?{cwdOverride:c}:{}});return d},isSessionFileMutationReserved:a=>$().has(a),invalidateSessionList:r.mD,isBuiltInSubagentsEnabled:D.N});function Q(a){return au.get(a)}function R(a,b){return au.steer(a,b)}function S(a){return au.abort(a)}function T(a,b){return au.sendUiMessage(a,b)}function U(){return globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks}function V(a){let b=(0,j.resolve)(a);try{return(0,i.realpathSync)(b)}catch{return b}}function W(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function X(){return U().size>0||$().size>0||(0,C.Iv)().length>0||[...O().values()].some(a=>a.isBusyForFileMutation())}function Y(a){return O().get(a)}function Z(a){if(U().has(a))return!1;let b=O().get(a);return!(!b?.isAlive()||b.isRunning()||b.isBusyForFileMutation()||$().has(a))&&(b.destroy(),!0)}function $(){return globalThis.__piSessionFileMutations||(globalThis.__piSessionFileMutations=new Set),globalThis.__piSessionFileMutations}async function _(a){let b=[...new Set(a.filter(Boolean))],c=$(),d=U();if(b.some(a=>c.has(a)||d.has(a)))return null;let e=b.map(a=>O().get(a)).filter(a=>!!a);if((0,C.Iv)().some(a=>b.includes(a.sessionId))||e.some(a=>a.isBusyForFileMutation()))return null;for(let a of b)c.add(a);let f=()=>{for(let a of b)c.delete(a)};try{return await Promise.all(e.map(a=>a.shutdown())),f}catch(a){throw f(),a}}async function aa(a,b,c){let d=void 0===c?void 0:(0,J.vw)(c),e=Y(a);if(!e?.isAlive()){if(!b)throw Error("Session not found");let c=f.SessionManager.open(b,void 0);if((0,B.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");void 0===d?(0,J.lp)(c):(0,J.b5)(c,d),(0,r.mD)();let e=await ah(a,b,void 0);return{session:e.session,sessionId:e.realSessionId,recreated:!1}}if(e.isRunning())throw Error("Cannot change tools while the session is running");if((0,B.ph)(e.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let g="function"==typeof e.isChatOnly&&"function"==typeof e.setActiveToolSelection,j=void 0===d||!g||e.isChatOnly()!==(0===d.length);if(void 0===d?(0,J.lp)(e.inner.sessionManager):(0,J.b5)(e.inner.sessionManager,d),(0,r.mD)(),void 0!==d&&!j)return e.setActiveToolSelection(d),{session:e,sessionId:a,recreated:!1};let k=e.sessionFile&&(0,i.existsSync)(e.sessionFile)?e.sessionFile:void 0,l=e.cwd,m=e.inner.model,n=e.inner.agent.state?.thinkingLevel;if(await e.shutdown(),k){let b=await ah(a,k,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let o=await ah(`__recreate__${(0,h.randomUUID)()}`,"",l,{...void 0!==d?{toolNames:d}:{},...m?{initialModel:{provider:m.provider,modelId:m.id}}:{},allowInitialModelFallback:!0,...n&&an.has(n)?{thinkingLevel:n}:{}});return{session:o.session,sessionId:o.realSessionId,recreated:!0}}let av=null;async function ab(a,b){let{bugReport:d,bugReportUpload:e,crashLog:g}=await (av??=(async()=>{let a=(0,j.join)((0,f.getPackageDir)(),"dist/core"),b=b=>c(98279)((0,k.pathToFileURL)((0,j.join)(a,b)).href),[d,e,g]=await Promise.all([b("bug-report.js"),b("bug-report-upload.js"),b("crash-log.js")]);return{bugReport:d,bugReportUpload:e,crashLog:g}})()),h=g.readCrashLog(),i=a.resourceLoader.getExtensions(),l={metadata:d.collectBugReportMetadata({hint:b,sessionId:a.sessionId,cwd:a.sessionManager.getCwd(),includeSession:!1,includeSummary:!1,messageCount:a.messages.length,model:a.model,modelRuntime:a.modelRuntime,thinkingLevel:a.thinkingLevel,extensions:i.extensions,extensionErrors:i.errors,globalSettings:a.settingsManager.getGlobalSettings(),projectSettings:a.settingsManager.getProjectSettings()}),diagnostics:d.collectBugReportDiagnostics(a.sessionManager,h)},m=b=>{a.sessionManager.appendCustomEntry(d.BUG_REPORT_CUSTOM_ENTRY_TYPE,{id:l.metadata.id,createdAt:l.metadata.createdAt,hint:l.metadata.hint,sessionIncluded:!1,summaryIncluded:!1,...b}),h.length>0&&g.clearCrashLog(),(0,r.mD)()};try{let a=await e.uploadBugReport(l);return m({delivery:"upload"}),{delivery:"upload",id:a.id}}catch(c){let b=(0,j.join)(a.sessionManager.getCwd(),d.bugReportArchiveFileName(l.metadata.id));return await d.writeBugReportArchive(l,b),m({delivery:"zip",path:b}),{delivery:"zip",id:l.metadata.id,path:b,error:c instanceof Error?c.message:String(c)}}}function ac(){let a=[],b=new Map((0,C.Iv)().map(a=>[a.sessionId,a]));for(let c of O().values()){if(!c.isAlive())continue;let d=c.inner.sessionManager,e=d.getHeader(),f=d.getEntries(),g=f.filter(a=>"message"===a.type),h=g.find(a=>"user"===a.message.role),j=f.filter(a=>"custom_message"===a.type&&"customType"in a&&a.customType===H.Ds),k=j[0]?.details?.prompt,l=d.getSessionFile()??c.sessionFile,m=!!(l&&(0,i.existsSync)(l)),n=(0,B.$u)(f,e?.id??c.sessionId,l??"");if(!m&&(!c.isRunning()||!h))continue;let o=e?.timestamp??f[0]?.timestamp??new Date().toISOString(),p=new Date(o).getTime(),q=Number.isNaN(p)?Date.now():p;for(let a of g){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(q=Math.max(q,b))}for(let a of j){let b=new Date(a.timestamp).getTime();Number.isNaN(b)||(q=Math.max(q,b))}a.push({path:l??"",id:e?.id??c.sessionId,cwd:e?.cwd??c.cwd,name:d.getSessionName(),created:o,modified:new Date(q).toISOString(),messageCount:g.length+j.length,firstMessage:(0,s.M3)(h?function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content;return"string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ")}(h)||"(no messages)":"string"==typeof k&&k.trim()?k:"(no messages)"),...n?{parentSessionId:n.parentSessionId,relation:{kind:"subagent",parentSessionId:n.parentSessionId,profile:n.profile,description:n.description,status:b.get(c.sessionId)?.status??(c.isRunning()?"running":n.status)}}:{},transient:!m})}let c=new Set(a.map(a=>a.id));for(let d of b.values()){if(c.has(d.sessionId))continue;let b=O().get(d.parentSessionId);a.push({path:d.sessionPath,id:d.sessionId,cwd:b?.cwd??"",name:d.description,created:d.createdAt,modified:d.createdAt,messageCount:0,firstMessage:(0,s.M3)(d.task||"(no messages)"),parentSessionId:d.parentSessionId,relation:{kind:"subagent",parentSessionId:d.parentSessionId,profile:d.profile,description:d.description,status:d.status},transient:!d.sessionPath||!(0,i.existsSync)(d.sessionPath)})}return a}function ad(a){let b=V(a);return!!W().has(b)||Array.from(O().values()).some(a=>V(a.cwd)===b&&a.isRunning())}async function ae(a){let b=V(a),c=Array.from(O().values()).filter(a=>V(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function af(){let a=new Set;for(let[b,c]of O())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function ag(){let a=new Set;for(let[b,c]of O())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}async function ah(a,b,c,d={}){let g,h,i;(0,e.b)();let{initialModel:j,allowInitialModelFallback:k,thinkingLevel:l,cwdOverride:m}=d;if($().has(a))throw Error("Session file is being modified");let o=void 0===d.toolNames?void 0:(0,J.vw)(d.toolNames),s=O(),t=U(),x=s.get(a);if(x?.isAlive())return{session:x,realSessionId:a};let y=t.get(a);if(y)return y;if(b)g=f.SessionManager.open(b,void 0,m);else{if(!c)throw Error("cwd is required for a new session");g=f.SessionManager.create(c,void 0)}let z=g.getCwd(),C=b?(0,B.ph)(g.getEntries()):null,E=C?void 0:(0,J.dS)(g.getEntries()),H=C?.tools??E??o;C||void 0!==E||void 0===o||(0,J.b5)(g,o);let I=!!(C?.loadExtensions||C?.loadSkills),K=H?.length===0&&!I,L=(h=W(),i=V(z),h.set(i,(h.get(i)??0)+1),()=>{let a=(h.get(i)??1)-1;a>0?h.set(i,a):h.delete(i)}),N=(async()=>{K||(0,f.initTheme)();let a=(0,f.getAgentDir)(),b=K&&!C?(0,F.Q)(()=>(0,F.c)((0,f.loadProjectContextFiles)({cwd:z,agentDir:a}))||" "):void 0,c=C?.tools;C||void 0===H||(c=0===H.length?[]:void 0);let d=C?I?(0,u.Fk)(z,a):void 0:K?void 0:(0,u.Fk)(z,a),e=f.SettingsManager.create(z,a),h=await (0,f.createAgentSessionServices)({cwd:z,agentDir:a,settingsManager:e,resourceLoaderOptions:C?{noExtensions:!C.loadExtensions,noSkills:!C.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...void 0!==C.exactSystemPrompt?{extensionFactories:[(0,F.Q)(C.exactSystemPrompt)],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:C.appendSystemPrompt}}:K?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,extensionFactories:[b],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{extensionFactories:[(0,q.eD)({cwd:z,settings:e}),(0,G.NQ)(a),(0,A.Vj)(au.extensionRuntime,()=>(0,B.IR)(z),D.N)],extensionsOverride:a=>(0,q.Ds)((0,G.Bm)((0,A.U6)(a)))},...d?{resourceLoaderReloadOptions:d}:{}}),i=await (0,p.p)(h.modelRuntime,h.settingsManager.getEnabledModels()),m=j&&(!k||i.visible.some(a=>a.provider===j.provider&&a.id===j.modelId))?j:void 0,o=h.settingsManager.getDefaultProvider(),s=h.settingsManager.getDefaultModel(),t=g.getBranch(),x=t.some(a=>"message"===a.type),y=x?(0,r.Vg)(t):null,E=y?h.modelRuntime.getModel(y.provider,y.modelId):void 0,J=x?null:(0,p.I)(i,{...m?{requestedModel:m}:{},...o&&s?{defaultModel:{provider:o,modelId:s}}:{},...l?{thinkingLevel:l}:{}}),L=E&&h.modelRuntime.hasConfiguredAuth(E.provider)?E:J?.model,{session:N}=await (0,f.createAgentSessionFromServices)({services:h,sessionManager:g,...L?{model:L}:{},...J?.thinkingLevel?{thinkingLevel:J.thinkingLevel}:{},...i.scopedModels.length>0?{scopedModels:[...i.scopedModels]}:{},...void 0!==c?{tools:c}:{},...C?{excludeTools:[...B.st]}:{}});(await (0,v.o)(h.settingsManager,{...m?{model:m}:{},...l?{thinkingLevel:l}:{}},{...N.model?{model:{provider:N.model.provider,modelId:N.model.id}}:{},thinkingLevel:N.thinkingLevel,supportsThinking:N.supportsThinking()})).modelDefaultChanged&&(0,n.kn)(),C||K||N.setActiveToolsByName(M(N,H??N.getActiveToolNames()));let O=new at(N,{chatOnly:K,beforeAgentRunComplete:a=>au.flushParentNotifications(a),onAgentRunComplete:a=>{(0,w.lB)(a).catch(a=>{console.error("[pi-web] failed to send completion push:",a instanceof Error?a.message:a)})},suppressCompletionNotifications:!!C}),Q=N.sessionId;return P(O),{session:O,realSessionId:Q}})().finally(()=>{t.delete(a),L()});return t.set(a,N),N}d()}catch(a){d(a)}})},59457:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Um:()=>z,dt:()=>A});var e=c(77598),f=c(51455),g=c(76760),h=c.n(g),i=c(4573),j=c(29862),k=c(78970),l=c(64439),m=c(85462),n=c(21966),o=c(5687),p=c(10424),q=c(6759),r=c(82536),s=c(58864),t=a([j,m,q]);function u(a,b){if("string"!=typeof a||!a.trim())throw Error(`${b} must be a non-empty string`);return a.trim()}function v(a,b){if(!a.length||a.length>0x1400000)throw Error(`Image ${b} exceeds the 20MB limit`);let c=a.length>=24&&i.Buffer.from(a.subarray(0,8)).equals(i.Buffer.from([137,80,78,71,13,10,26,10]))?{mimeType:"image/png",extension:"png"}:a.length>=10&&255===a[0]&&216===a[1]?{mimeType:"image/jpeg",extension:"jpg"}:a.length>=30&&"RIFF"===i.Buffer.from(a.subarray(0,4)).toString("ascii")&&"WEBP"===i.Buffer.from(a.subarray(8,12)).toString("ascii")?{mimeType:"image/webp",extension:"webp"}:null;if(!c)throw Error(`Unsupported image: ${b}`);let d=(0,j.getImageDimensions)(a.toString("base64"),c.mimeType);if(!d||d.widthPx<=0||d.heightPx<=0)throw Error(`Unsupported image: ${b}`);return{bytes:a,...c,width:d.widthPx,height:d.heightPx}}async function w(a,b){let c=await (0,f.realpath)(a),d=await (0,f.realpath)(h().resolve(a,(0,s.gB)(b.replace(/^@/,""))));if(!(0,r.o)(d,new Set([c])))throw Error(`Image path is outside the working directory: ${b}`);let e=await (0,f.stat)(d);if(!e.isFile())throw Error(`Image path is not a file: ${b}`);if(e.size>0x1400000)throw Error(`Image ${b} exceeds the 20MB limit`);return v(await (0,f.readFile)(d),h().basename(d))}function x(a,b){let c=(0,k.Si)(a.data);if(null===c)throw Error(`Image ${a.fileName??b} is not valid base64`);if(c>0x1400000)throw Error(`Image ${a.fileName??b} exceeds the 20MB limit`);return v(i.Buffer.from(a.data,"base64"),a.fileName??b)}async function y(a,b){let c=await (0,f.realpath)(a),d=c;for(let a of[".pi","generated-images"])if(d=h().join(d,a),await (0,f.mkdir)(d,{recursive:!0}),d=await (0,f.realpath)(d),!(0,r.o)(d,new Set([c])))throw Error("Generated image directory escapes the working directory");let g=h().posix.join(".pi","generated-images",`image-${(0,e.randomUUID)()}.${b.extension}`);return await (0,f.writeFile)(h().join(c,...g.split("/")),b.bytes,{flag:"wx"}),g}async function z(a,b){return y(a,x(b,"source-image"))}async function A(a,b,c,d){let e,f,g;d?.throwIfAborted();let h=function(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Image request must be an object");let b=new Set(["prompt","connection","target","use_last_attachment","new_image","size","resolution","quality"]),c=Object.keys(a).find(a=>!b.has(a));if(c)throw Error(`Image request field ${c} is not supported`);let d=u(a.prompt,"prompt");if(d.length>32e3)throw Error("prompt must not exceed 32000 characters");if(void 0!==a.use_last_attachment&&"boolean"!=typeof a.use_last_attachment)throw Error("use_last_attachment must be a boolean");if(void 0!==a.new_image&&"boolean"!=typeof a.new_image)throw Error("new_image must be a boolean");if(!0===a.new_image&&(void 0!==a.target||!0===a.use_last_attachment))throw Error("new_image cannot be combined with an edit source");return{prompt:d,...void 0===a.connection?{}:{connection:u(a.connection,"connection")},...void 0===a.target?{}:{target:u(a.target,"target")},...void 0===a.use_last_attachment?{}:{use_last_attachment:a.use_last_attachment},...void 0===a.new_image?{}:{new_image:a.new_image},...void 0===a.size?{}:{size:u(a.size,"size")},...void 0===a.resolution?{}:{resolution:u(a.resolution,"resolution")},...void 0===a.quality?{}:{quality:u(a.quality,"quality")}}}(b),i=(0,q.al)(a);if(!i.enabled)throw Error("Image generation is disabled");let j=(0,q.h)(i).defaultConnection,k=h.connection?[h.connection]:[j,...Object.keys(i.connections).filter(a=>a!==j)];if(!k[0])throw Error("No runnable image connection is configured");if(h.connection&&!i.connections[h.connection])throw Error(`Unknown image connection: ${h.connection}`);let r=!h.target&&!h.new_image,s=r?function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let d=b[a];if("message"===d.type&&d.message?.role==="user"){var c;return(0,p.L7)((c=d.message.content,"string"==typeof c?c:Array.isArray(c)?c.filter(a=>!!a&&"object"==typeof a).filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n"):""))}}}(c):void 0,t=r&&!s?function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let c=b[a];if("message"===c.type&&c.message?.role==="user"){if(!Array.isArray(c.message.content))return;for(let a of c.message.content)if(a&&"object"==typeof a&&"image"===a.type&&"string"==typeof a.data&&"string"==typeof a.mimeType)return{data:a.data,mimeType:a.mimeType,fileName:"attachment-1"};break}}}(c):void 0,z=!r||h.use_last_attachment||s||t?void 0:function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let c=b[a];if("custom_message"===c.type||c.customType){let a=(0,p.VV)(c.details);if(a)return a.path}if("message"===c.type&&c.message?.role==="toolResult"){let a=(0,p.VV)(c.message.details);if(a)return a.path}}}(c),A=!!(h.target||h.use_last_attachment||s||t||z),B=[["size","sizes",h.size],["resolution","resolutions",h.resolution],["quality","qualities",h.quality]],C=a=>A&&!0!==a.capabilities.editing?`Image connection ${a.id} does not declare editing support`:null;if(h.connection){let a=i.connections[h.connection],b=C(a)??B.filter(([,b,c])=>c&&!a.capabilities[b]?.includes(c)).map(([b,,c])=>`Image connection ${a.id} does not support ${b} ${c}`)[0];if(b)throw Error(b)}else for(let[a,b,c]of B)if(c&&!Object.values(i.connections).some(a=>a.capabilities[b]?.includes(c)))throw Error(`No configured image connection supports ${a} ${c}`);if(h.target?(e=await w(c.cwd,h.target),f=h.target):s?(e=await w(c.cwd,s),f=s):t?(e=x(t,"attachment-1"),f=t.fileName??"attachment"):z&&(e=await w(c.cwd,z),f=z),!e&&h.use_last_attachment)throw Error("No image attachment is available in the current conversation");let D=null;for(let a of k){let b=i.connections[a];if(!b||!h.connection&&!await c.modelRegistry.getProviderAuth(b.provider))continue;let j=C(b);if(j){D??=j;continue}let k=(a,c)=>c&&b.capabilities[a]?.includes(c)?c:void 0,q=k("sizes",h.size)??b.defaults?.size,r=k("resolutions",h.resolution)??b.defaults?.resolution,s=k("qualities",h.quality)??b.defaults?.quality;try{let a,g=(0,p.bG)(b);a="codex"===g?v(await (0,m.wS)(b,c,h.prompt,e,q,s,d),"generated-image"):"antigravity"===g?v(await (0,l.Lf)(b,c,h.prompt,e,q,r,d),"generated-image"):"openai-images"===g?v(await (0,n.xT)(b,c,h.prompt,e,q,s,d),"generated-image"):v(await (0,o.z)(b,c,h.prompt,e,q,r,s,d),"generated-image"),d?.throwIfAborted();let i=await y(c.cwd,a);return{type:p.Ds,version:1,path:i,mimeType:a.mimeType,width:a.width,height:a.height,prompt:h.prompt,connection:b.id,label:b.label,model:b.model,...q?{size:q}:{},...r?{resolution:r}:{},...s?{quality:s}:{},...f?{source:f}:{}}}catch(a){if(d?.throwIfAborted(),h.connection||!(a instanceof Error)||!(/Image API returned HTTP (?:401|402|429)\b/.test(a.message)||/\b(?:quota|rate.?limit|resource.exhausted|insufficient.credits)\b/i.test(a.message)))throw a;g=a}}if(g)throw g;if(D)throw Error(D);throw Error("No available image connection supports this request")}[j,m,q]=t.then?(await t)():t,d()}catch(a){d(a)}})},64439:(a,b,c)=>{"use strict";c.d(b,{Lf:()=>o});var d=c(4573),e=c(78970),f=c(96782);let g=["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com","https://cloudcode-pa.googleapis.com"],h=new Set([403,404,429,500,502,503,504]),i=new Set(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]),j={"1k":"1K","2k":"2K"};function k(a,b){return a.replace(/ya29\.[A-Za-z0-9._-]+/g,"ya29.[redacted]").replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}function l(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.status,b.code].map(a=>"string"==typeof a||"number"==typeof a?String(a).trim():"").filter(Boolean);if(c.length)return k(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return k(a.message.trim(),600)}catch{}return k(b,400)||void 0}async function m(a){let b=function(a){if(a)try{let b=JSON.parse(a);if("string"!=typeof b.token||!b.token||"string"!=typeof b.projectId||!b.projectId.trim())return;return{token:b.token,projectId:b.projectId.trim()}}catch{return}}((await a("antigravity"))?.auth.apiKey);if(!b)throw Error("No Antigravity credentials. Run /login antigravity first.");return b}async function n(a,b){let c;if(!a.body)throw Error("Image API returned no body");let f=a.body.getReader(),g=new TextDecoder,h="",i=0;try{for(;;){b.throwIfAborted();let{done:a,value:j}=await f.read();if(a)break;if((i+=j.byteLength)>0x2000000)throw Error("Image API response is too large");let k=(h+=g.decode(j,{stream:!0})).split("\n");for(let a of(h=k.pop()||"",k)){let b;if(!a.startsWith("data:"))continue;let f=a.slice(5).trim();if(f&&"[DONE]"!==f){try{b=JSON.parse(f)}catch{continue}for(let a of("string"==typeof b.error?.message&&b.error.message.trim()&&(c=b.error.message.trim()),(b.response??b).candidates??[]))for(let b of a.content?.parts??[]){let a=b.inlineData?.data;if("string"!=typeof a)continue;let c=(0,e.Si)(a);if(null===c)throw Error("Image API returned invalid base64 image");if(c>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(a,"base64")}}}}}finally{f.releaseLock()}throw Error(c?k(c,600):"Image API returned no image")}async function o(a,b,c,d,e,f,h){var k;let l,n,o,q,{token:r,projectId:s}=await m(b.modelRegistry.getProviderAuth),t=JSON.stringify((k=a.model,l={},n=function(a){if(!a)return;let b=a.trim();if(b&&"auto"!==b){if(i.has(b))return b;throw Error(`Unsupported image size: ${a}`)}}(e),o=function(a){if(!a)return;let b=j[a.trim().toLowerCase()];if(b)return b;throw Error(`Unsupported image resolution: ${a}`)}(f),n&&(l.aspectRatio=n),o&&(l.imageSize=o),q=[{text:c}],d&&q.push({inlineData:{mimeType:d.mimeType,data:d.bytes.toString("base64")}}),{project:s,model:k,request:{contents:[{role:"user",parts:q}],generationConfig:{...Object.keys(l).length?{imageConfig:l}:{},candidateCount:1}},requestType:"agent",userAgent:"antigravity",requestId:`agent/${crypto.randomUUID()}/${Date.now()}/${crypto.randomUUID()}/2`}));return p(function(a){let b=a?.trim();if(b)return[b.replace(/\/+$/,"")];let c=process.env.ANTIGRAVITY_BASE_URL?.trim();return c?[c.replace(/\/+$/,"")]:g}(b.modelRegistry.getProvider(a.provider)?.baseUrl),{Authorization:`Bearer ${r}`,"Content-Type":"application/json",Accept:"text/event-stream","User-Agent":"antigravity/hub/2.8.0 (aidev_client; os_type=linux; arch=x64; cl=963137146)","X-Goog-Api-Client":"google-cloud-sdk vscode_cloudshelleditor/0.1","Client-Metadata":JSON.stringify({ideType:"ANTIGRAVITY",platform:"darwin"===process.platform?"MACOS":"win32"===process.platform?"WINDOWS":"LINUX",pluginType:"GEMINI"})},t,h)}async function p(a,b,c,e,{connectMs:g=6e4,totalMs:i=18e4}={}){let j=AbortSignal.timeout(i),m=e?AbortSignal.any([e,j]):j,o=(a,b)=>(e?.throwIfAborted(),j.aborted?Error(`Antigravity image request to ${a} timed out after ${i/1e3}s while ${b}`):void 0),q="no Antigravity image endpoint available";for(let e of a){let a;m.throwIfAborted();let i=new AbortController,j=setTimeout(()=>i.abort(),g);try{a=await fetch(`${e}/v1internal:streamGenerateContent?alt=sse`,{method:"POST",headers:b,body:c,signal:AbortSignal.any([m,i.signal])})}catch(b){let a=o(e,"connecting");if(a)throw a;q=i.signal.aborted?`Antigravity image endpoint ${e} sent no response within ${g/1e3}s`:`${e}: ${k(b instanceof Error?b.message:String(b),400)}`;continue}finally{clearTimeout(j)}if(!a.ok){let b=await (0,f.S)(a,65536,m,"Image API error response is too large").catch(()=>d.Buffer.alloc(0));if(q=`Image API returned HTTP ${a.status}${l(b)?`: ${l(b)}`:""}`,h.has(a.status))continue;break}try{return await n(a,m)}catch(a){throw o(e,"streaming the image")??a}}throw Error(q)}},71069:(a,b,c)=>{"use strict";c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},75493:(a,b,c)=>{"use strict";c.d(b,{a:()=>f});let d=/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1B\\))/g,e=/\x1B_pi:c\x07/g;function f(a){return a.replace(e,"").replace(d,"")}},78970:(a,b,c)=>{"use strict";function d(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}function e(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=d(a.data);return null!==b&&b<=0xa00000}function f(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!e(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}c.d(b,{Si:()=>d,kc:()=>f,wb:()=>e})},85462:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{wS:()=>l});var e=c(4573),f=c(72322),g=c(78970),h=c(10424),i=c(96782),j=a([f]);function k(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function l(a,b,c,d,j,l,m){var n,o;let p,q,r,s,t=await b.modelRegistry.getProviderAuth(a.provider);if(!t?.auth.apiKey)throw Error(`No credentials configured for image provider ${a.provider}`);let u=t.auth.apiKey,v=function(a){try{let b=a.split(".");if(3!==b.length)throw Error("Invalid token");let c=JSON.parse(e.Buffer.from(b[1],"base64url").toString("utf8")),d=c?.["https://api.openai.com/auth"]?.chatgpt_account_id;if("string"!=typeof d||!d)throw Error("No account ID in token");return d}catch{throw Error("Failed to extract accountId from token")}}(u),w=t.auth.baseUrl??b.modelRegistry.getProvider(a.provider)?.baseUrl,x=(n=d?"edits":"generations",(q=(w&&w.trim()?w.trim():"https://chatgpt.com/backend-api").replace(/\/+$/,"")).endsWith("/codex/images/generations")||q.endsWith("/codex/images/edits")?`${q.slice(0,q.lastIndexOf("/"))}/${n}`:q.endsWith("/codex/images")?`${q}/${n}`:q.endsWith("/codex")?`${q}/images/${n}`:`${q}/codex/images/${n}`),y=new Headers({Authorization:`Bearer ${u}`,"chatgpt-account-id":v,originator:"pi","User-Agent":(0,f.getPiUserAgent)(),Accept:"application/json","Content-Type":"application/json"}),z=AbortSignal.timeout(18e4),A=m?AbortSignal.any([m,z]):z,B=await fetch(x,{method:"POST",headers:y,body:JSON.stringify((o=a.model,r={prompt:c,model:o},(s=(0,h.zd)(j))&&(r.size=s),l&&(r.quality=l),d&&(r.images=[{image_url:`data:${d.mimeType};base64,${d.bytes.toString("base64")}`}]),r)),signal:A});if(!B.ok){let a=B.headers.get("x-request-id")??B.headers.get("request-id"),b=await (0,i.S)(B,65536,A).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return k(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return k(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return k(a.message.trim(),600)}catch{}return k(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${B.status}${c?`: ${c}`:""}${a?` (request ${k(a,160)})`:""}`)}let C=await (0,i.S)(B,0x2000000,A);try{p=JSON.parse(C.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let D=p?.data?.[0]?.b64_json;if("string"!=typeof D)throw Error("Image API returned no base64 image");let E=(0,g.Si)(D);if(null===E)throw Error("Image API returned invalid base64 image");if(E>0x1400000)throw Error("Generated image exceeds the 20MB limit");return e.Buffer.from(D,"base64")}f=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},88914:(a,b,c)=>{"use strict";function d(a,b){b&&(a.tokens.input+=b.input??0,a.tokens.output+=b.output??0,a.tokens.cacheRead+=b.cacheRead??0,a.tokens.cacheWrite+=b.cacheWrite??0,a.cost+=b.cost?.total??0,a.costs.input+=b.cost?.input??0,a.costs.output+=b.cost?.output??0,a.costs.cacheRead+=b.cost?.cacheRead??0,a.costs.cacheWrite+=b.cost?.cacheWrite??0)}function e(a){var b;let c={userMessages:0,assistantMessages:0,toolCalls:0,toolResults:0,totalMessages:0,tokens:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0},cost:0,costs:{input:0,output:0,cacheRead:0,cacheWrite:0}};for(let e of a){if("usage"===e.type||"compaction"===e.type||"branch_summary"===e.type){d(c,e.usage);continue}"message"===e.type&&(b=e.message,c.totalMessages+=1,"user"===b.role?c.userMessages+=1:"toolResult"===b.role?(c.toolResults+=1,d(c,b.usage)):"assistant"===b.role&&(c.assistantMessages+=1,Array.isArray(b.content)&&(c.toolCalls+=b.content.filter(a=>"toolCall"===a.type).length),d(c,b.usage)))}return c.tokens.total=c.tokens.input+c.tokens.output+c.tokens.cacheRead+c.tokens.cacheWrite,c}c.d(b,{P:()=>e})},91712:(a,b,c)=>{"use strict";c.d(b,{HY:()=>f,vt:()=>h});class d extends Error{constructor(a){super(a),this.name="QueuedDeliveryError"}}function e(a,b){if(!a||"object"!=typeof a)throw new d(`Agent ${b} delivery queue is not readable`);let c=a.messages;if(!Array.isArray(c))throw new d(`Agent ${b} delivery queue messages are not an array`);return[...c]}function f(a){if(!a||"object"!=typeof a)throw new d("Agent delivery queues are not readable");let b=e(a.steeringQueue,"steering"),c=e(a.followUpQueue,"follow-up");if("function"==typeof a.hasQueuedMessages&&!!a.hasQueuedMessages.call(a)!=(b.length>0||c.length>0))throw new d("Agent delivery queue pending state does not match readable messages");return{steering:b,followUp:c}}function g(a){if(!a||"object"!=typeof a)throw new d("Queued delivery message is not an object");if("user"!==a.role)throw new d("custom"===a.role?"Queued custom/extension messages cannot be recalled as user prompts":"Queued delivery message is not a user message");if("string"==typeof a.content)return{text:a.content,images:[]};if(!Array.isArray(a.content))throw new d("Queued user message content is not text or content blocks");let b=[],c=[];for(let e of a.content){if(!e||"object"!=typeof e)throw new d("Queued user message contains an invalid content block");if("text"===e.type){if("string"!=typeof e.text)throw new d("Queued text block is missing text");b.push(e.text);continue}if("image"===e.type){c.push(function(a){if("string"==typeof a.data&&a.data.length>0&&"string"==typeof a.mimeType&&a.mimeType.startsWith("image/"))return{data:a.data,mimeType:a.mimeType};throw new d("Queued image cannot be restored")}(e));continue}throw new d(`Unsupported queued content type ${String(e.type)}`)}return{text:b.join("\n"),images:c}}function h(a){return{steering:a.steering.map(g),followUp:a.followUp.map(g)}}},95412:(a,b,c)=>{"use strict";function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>j,mb:()=>h,u4:()=>i});let e=function(){let a,b=globalThis,c=Symbol.for("@calmabacus/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(){let a=globalThis,b=Symbol.for("@calmabacus/pi-web/session-liveness-leases/v1"),c=a[b];if(c instanceof Map)return c;let d=new Map;return a[b]=d,d}function g(a){a.timer&&clearTimeout(a.timer),a.timer=setTimeout(()=>{!a.released&&a.expiresAt<=Date.now()?a.release():a.released||g(a)},Math.max(1,a.expiresAt-Date.now()));let b=a.timer.unref;b?.call(a.timer)}function h(a){var b;let c=f(),d=(b={name:"pi-web-open-tab",sessionId:a,isActive:()=>!h.released&&h.expiresAt>Date.now()},e.register(b)),h={sessionId:a,expiresAt:Date.now()+9e4,released:!1,timer:null,renew:()=>{h.released||(h.expiresAt=Date.now()+9e4,g(h))},release:()=>{if(h.released)return;h.released=!0,h.timer&&clearTimeout(h.timer),d();let b=c.get(a);b?.delete(h),b?.size===0&&c.delete(a)}},i=c.get(a)??new Set;return i.add(h),c.set(a,i),g(h),h}function i(a){let b=f().get(a);if(!b)return 0;let c=0;for(let a of[...b]){if(a.released||a.expiresAt<=Date.now()){a.release();continue}a.renew(),c+=1}return c}function j(a){return e.hasActiveProvider(a)}},96782:(a,b,c)=>{"use strict";c.d(b,{S:()=>e});var d=c(4573);async function e(a,b,c,f="Image API response is too large"){let g=Number(a.headers.get("content-length"));if(Number.isFinite(g)&&g>b)throw Error(f);let h=a.body?.getReader();if(!h){let c=d.Buffer.from(await a.arrayBuffer());if(c.length>b)throw Error(f);return c}let i=[],j=0;for(;;){c?.throwIfAborted();let{done:a,value:d}=await h.read();if(a)break;if((j+=d.byteLength)>b)throw await h.cancel(),Error(f);i.push(d)}return d.Buffer.concat(i,j)}},98279:a=>{function b(a){return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b})}b.keys=()=>[],b.resolve=b,b.id=98279,a.exports=b},98469:(a,b,c)=>{"use strict";function d(){if(globalThis.__piWebUpdating)throw Error("Pi Web is updating. Please wait for the restart.")}c.d(b,{b:()=>d})},99324:(a,b,c)=>{"use strict";c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
23
+ ${(i=l.filter(a=>a.enabled),0===i.length?"No subagent profiles are currently enabled.":i.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Use foreground Agent calls when the next action cannot proceed without their results.","After useful parallel work is done, use get_subagent_result with wait=true once as the join point; do not repeatedly poll background agents.","Pass resume with an existing subagent session ID to continue that session instead of creating a new one.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${n}. ${m.includes("general-purpose")?"Default: general-purpose.":"Required: general-purpose is disabled."}`})),prompt:e.Type.String({description:"The complete task for the subagent."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately. Default true. Unread results notify the parent after its current run settles."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree copy."}))}),async execute(b,c,d,e,f){let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground&&"failed"!==h.run.status)return h.completion.catch(a=>{console.error("[pi-web] background subagent failed to settle:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${h.run.sessionId}. Use get_subagent_result to check it later.`}],details:j(h.run)};let i=await h.completion;return i.runInBackground&&a.consume(f.sessionManager.getSessionId(),i),{content:[{type:"text",text:`${k(i)}
24
+
25
+ [Subagent session ID: ${i.sessionId} (pass as resume to continue)]`}],details:j(i)}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."})),timeout_ms:e.Type.Optional(e.Type.Number({description:"Maximum wait in milliseconds. Default: 300000.",minimum:1,maximum:18e5}))}),async execute(b,c,d,e,f){let h=f.sessionManager.getSessionId(),i=await a.get(h,c.agent_id);if(!i){let a;throw a=c.agent_id,Error((0,g.Yp)(f.sessionManager.getEntries(),a))}let l=c.timeout_ms??3e5,m=Date.now()+l;for(;c.wait&&("starting"===i.status||"queued"===i.status||"running"===i.status);){let b=m-Date.now();if(b<=0)return{content:[{type:"text",text:`Subagent ${i.sessionId} is still ${i.status} after waiting ${l}ms.`}],details:j(i)};if(await new Promise((a,c)=>{let e=()=>{clearTimeout(f),c(Error("Result wait aborted"))},f=setTimeout(()=>{d?.removeEventListener("abort",e),a()},Math.min(500,b));d?.aborted?e():d?.addEventListener("abort",e,{once:!0})}),!(i=await a.get(h,c.agent_id)))throw Error(`Subagent not found: ${c.agent_id}`)}return"starting"!==i.status&&"queued"!==i.status&&"running"!==i.status&&a.consume(h,i),{content:[{type:"text",text:k(i)}],details:j(i)}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c,d,e,f){let g=f.sessionManager.getSessionId();return await a.steer(g,c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Ds:()=>j,J1:()=>h,eD:()=>i});var e=c(75430),f=c(76760),g=a([e]);e=(g.then?(await g)():g)[0];let k="pi-web-project-command-environment",l=`<inline:${k}>`;function h(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var h;let i,j,k,l=(h=function(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}(f.env??c,g),i="win32"===g?Object.keys(h).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",j="win32"===g?";":":",(k=h[i]??"").split(j).filter(Boolean).includes(b)||(h[i]=[b,k].filter(Boolean).join(j)),h);return d.exec(a,e,{...f,env:l})}}}function i(a){return{name:k,hidden:!0,factory:b=>{let c=(0,e.createBashToolDefinition)(a.cwd);b.registerTool({...c,execute:(b,c,d,f,g)=>(0,e.createBashToolDefinition)(a.cwd,{commandPrefix:a.settings.getShellCommandPrefix(),operations:h({shellPath:a.settings.getShellPath()})}).execute(b,c,d,f,g)})}}}function j(a){let b=a.extensions.findIndex(a=>a.path===l);if(b<0)return a;let c=a.extensions.slice(0,b).find(a=>a.tools.has("bash"));return c?{...a,extensions:a.extensions.filter((a,c)=>c!==b),errors:a.errors.filter(a=>a.path!==l||a.error!==`Tool "bash" conflicts with ${c.path}`)}:a}d()}catch(a){d(a)}})},56429:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{AgentSessionWrapper:()=>at,abortSubagent:()=>S,destroyRpcSessionsForCwd:()=>ae,getCompletionNotificationSuppressedRpcSessionIds:()=>ag,getRpcSession:()=>Y,getRpcSessionInfos:()=>ac,getRunningRpcSessionIds:()=>af,getSubagentRun:()=>Q,hasAppUpdateBlockingSessions:()=>X,hasBusyRpcSessionForCwd:()=>ad,isSubagentQueued:()=>C.ll,releaseRpcSessionForExternalWrite:()=>Z,reserveRpcSessionFileMutation:()=>_,resolveSessionIdleTimeoutMs:()=>L,sendSubagentUiMessage:()=>T,setRpcSessionTools:()=>aa,startRpcSession:()=>ah,steerSubagent:()=>R});var e=c(98469),f=c(75430),g=c(29862),h=c(55511),i=c(29021),j=c(33873),k=c(1932),l=c(78970),m=c(91712),n=c(28967),o=c(31524),p=c(18904),q=c(53303),r=c(40402),s=c(45232),t=c(88914),u=c(72498),v=c(30590),w=c(92243),x=c(95412),y=c(75493),z=c(71069),A=c(46753),B=c(7048),C=c(12568),D=c(27367),E=c(305),F=c(36899),G=c(28640),H=c(10424),I=c(59457),J=c(21560),K=a([f,g,p,q,r,u,w,A,B,C,D,E,G,I]);[f,g,p,q,r,u,w,A,B,C,D,E,G,I]=K.then?(await K)():K;let ai=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]);function L(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){if(void 0!==a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b)&&b>=0&&b<=0x7fffffff)return b;console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 10 minutes`)}return 6e5}let aj=L(),ak=new Set(["fork","clone"]),al=new Set(["get_state","get_session_stats","get_last_assistant_text","get_tools","get_commands","extension_ui_response","extension_ui_input"]),am=["read","bash","powershell","edit","write","grep","find","ls"],an=new Set(o.v);class ao extends f.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let ap=new ao,aq=new g.KeybindingsManager(g.TUI_KEYBINDINGS);class ar extends f.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(a,b){return`${this.getFgAnsi(a)}${b}\x1b[39m`}bg(a,b){return`${this.getBgAnsi(a)}${b}\x1b[49m`}bold(a){return`\x1b[1m${a}\x1b[22m`}italic(a){return`\x1b[3m${a}\x1b[23m`}underline(a){return`\x1b[4m${a}\x1b[24m`}strikethrough(a){return`\x1b[9m${a}\x1b[29m`}getFgAnsi(a){return"accent"===a?"\x1b[34m":"success"===a?"\x1b[32m":"error"===a?"\x1b[31m":"warning"===a?"\x1b[33m":"muted"===a||"dim"===a?"\x1b[90m":"\x1b[39m"}getBgAnsi(a){return"selectedBg"===a?"\x1b[100m":"\x1b[49m"}}let as=new ar;function M(a,b){if(0===b.length)return[];let c=new Set(am),d=(0,E.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class at{constructor(a,b={}){this.inner=a,this.subscriptions=[],this.activeToolEvents=new Map,this.closeListeners=new Set,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.pendingPromptCount=0,this.directImageAbortController=null,this.directImageRequestId=null,this.pendingImageCancellationId=null,this.activeMutatingCommands=0,this.sessionReplacement=null,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this.forceShutdownOnIdle=!1,this._alive=!0,this._closing=!1,this.chatOnly=b.chatOnly??!1,this.beforeAgentRunComplete=b.beforeAgentRunComplete,this.onAgentRunComplete=b.onAgentRunComplete,this.suppressCompletionNotifications=b.suppressCompletionNotifications??!1}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}get streamingMessage(){return this.inner.agent.state?.streamingMessage}get isStreaming(){return this.inner.isStreaming}isAlive(){return this._alive}isClosing(){return this._closing}isRunning(){return this._alive&&(this.pendingPromptCount>0||null!==this.directImageAbortController||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}isBusyForFileMutation(){return this._closing||this.activeMutatingCommands>0||null!==this.sessionReplacement||this.isRunning()}isChatOnly(){return this.chatOnly}hasSuppressedCompletionNotifications(){return this.suppressCompletionNotifications}canStartBackgroundFollowUp(){return this._alive&&!this._closing&&!N().has(this.sessionId)}start(){this.unsubscribe=this.inner.subscribe(a=>{"agent_start"===a.type&&(this.agentRunNeedsCompletion=!0),"agent_end"===a.type&&(0,r.mD)();let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),ai.has(a.type)&&this.resetIdleTimer(),this.emit(a),"agent_settled"===a.type&&this.notifyAgentRunCompleteIfIdle()}),this.resetIdleTimer()}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())){try{if(this.beforeAgentRunComplete?.(this.sessionId)||this.isRunning())return}catch(a){console.error("[pi-web] pre-completion listener failed:",a instanceof Error?a.message:a)}if(this.agentRunNeedsCompletion=!1,!this.suppressCompletionNotifications)try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}}beginExtensionBinding(){this.ensureExtensionsBound().catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(){return this.extensionsBound?Promise.resolve():(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in Pi Web."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this._alive&&(this.extensionsBound=!0,console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`))})().catch(a=>{throw this.extensionBindingError=a,this.emit({type:"extension_error",extensionPath:"extensions",event:"session_start",error:a instanceof Error?a.message:String(a)}),a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}async withFinalIdleReset(a){try{return await a()}finally{this.resetIdleTimer()}}setActiveToolSelection(a){this.inner.setActiveToolsByName(M(this.inner,a))}emit(a){for(let{listener:b}of this.subscriptions)try{b(a)}catch(b){console.error(`[pi-web] failed to deliver ${a.type} event:`,b instanceof Error?b.message:b)}}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),!this._alive||this._closing||0!==aj&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||this.hasConnectedKeepAlive()||(0,x.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},aj))}persistCommandOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,i.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,i.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,r.O8)(this.inner.sessionId,b)}onEvent(a,b=!1){let c={listener:a,keepAlive:!0===b};for(let b of(this.subscriptions.push(c),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return this.resetIdleTimer(),()=>{let a=this.subscriptions.indexOf(c);-1!==a&&this.subscriptions.splice(a,1),this.resetIdleTimer()}}onClose(a){return this._alive?(this.closeListeners.add(a),()=>this.closeListeners.delete(a)):(a(),()=>{})}onDestroy(a){this.onDestroyCallback=a}async withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0||null!==this.directImageAbortController}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}async send(a){(0,e.b)();let b=a.type,c=al.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(!this._alive||this._closing)throw Error("Session is closing");if(ak.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);let d=!c;d&&(this.activeMutatingCommands+=1);try{if("get_state"!==b&&this.resetIdleTimer(),this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,l.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(this.inner.isBashRunning||this.directImageAbortController)throw Error("Cannot send a prompt while another session command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior,g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g||(g=!0,N().delete(this.sessionId),this.agentRunNeedsCompletion=!0,h||(h=!0,a()))},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1;try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&b()}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),f||this.emit({type:"prompt_done"})},a=>{c(a),k(),(0,r.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"}))}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.forceShutdownOnIdle=!0,N().add(this.sessionId),this.directImageAbortController?.abort(new DOMException("Image generation cancelled","AbortError")),this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{return await this.withFinalIdleReset(()=>this.inner.abort()),null}finally{this.isRunning()||(this.forceShutdownOnIdle=!1)}case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.pendingPromptCount>0,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off"}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(d||(await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)),!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d,{persist:!0}),(0,n.kn)(),(0,r.mD)(),{id:d.id,provider:d.provider,thinkingLevel:this.inner.thinkingLevel}}case"fork":if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");return this.withSessionReplacement("fork",async()=>{let b,c,d=a.entryId,e=this.inner.sessionManager,g=this.inner.sessionFile;if(!e.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let h=e.getEntry(d);if(!h)throw Error("Invalid entry ID for forking");let j=e.getSessionDir();if(h.parentId){let a=(c=f.SessionManager.open(g,j)).createBranchedSession(h.parentId);if(!a)throw Error("Failed to create forked session");b=a}else(c=f.SessionManager.create(e.getCwd(),j)).newSession({parentSession:g}),b=c.getSessionFile();if(!(0,i.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,i.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,r.O8)(k,b),(0,r.mD)(),await this.shutdownAfterSessionReplacement("fork"),{cancelled:!1,newSessionId:k}});case"fork_branch":{if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");let b=a.entryId,c=this.inner.sessionManager,d=this.inner.sessionFile;if(!c.isPersisted())return{cancelled:!0};if(!d)throw Error("Persisted session is missing a session file");if(!c.getEntry(b))throw Error("Invalid entry ID for forking");let e=c.getSessionDir(),g=f.SessionManager.open(d,e).createBranchedSession(b);if(!g)throw Error("Failed to create forked session");let h=f.SessionManager.open(g,e).getSessionId();return(0,r.O8)(h,g),(0,r.mD)(),{cancelled:!1,newSessionId:h}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),e=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!e||!c||!(0,i.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),e=f.SessionManager.open(c,a).createBranchedSession(d);if(!e||!(0,i.existsSync)(e))throw Error("Failed to clone current session branch");let g=f.SessionManager.open(e,a).getSessionId();return(0,r.O8)(g,e),(0,r.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"bug_report":if(this.isSessionRunningForReplacement())throw Error("Cannot report a bug while the session is running");return await this.withFinalIdleReset(()=>ab(this.inner,a.hint?.trim()||void 0));case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b,{persist:!0}),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,n.kn)(),(0,r.mD)(),null}case"compact":try{return await this.withFinalIdleReset(()=>this.inner.compact(a.customInstructions))}finally{(0,r.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,r.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),costs:(0,t.P)(this.inner.sessionManager.getEntries()).costs,sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":{let a=(0,m.HY)(this.inner.agent),b=(0,m.vt)(a);return this.inner.clearQueue(),b}case"steer":{let b=a.images;return await this.inner.steer(a.message,b?.length?b:void 0,{source:"rpc"}),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0,{source:"rpc"}),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case H.mk:{if(this.isRunning())throw Error("Cannot generate an image while the session is busy");let b="string"==typeof a.requestId&&a.requestId?a.requestId:null;if(!b)throw Error("Image generation requestId is required");if(this.pendingImageCancellationId===b)throw this.pendingImageCancellationId=null,new DOMException("Image generation cancelled","AbortError");this.pendingImageCancellationId=null;let c=new AbortController;this.directImageAbortController=c,this.directImageRequestId=b;try{let b=a.arguments;if(void 0!==a.sourceImage){if(!(0,l.wb)(a.sourceImage))throw Error("sourceImage must be base64 image data within the attachment size limit");if(!b||"object"!=typeof b||Array.isArray(b))throw Error("Image request must be an object");b={...b,target:await (0,I.Um)(this.cwd,a.sourceImage)}}let d=await (0,I.dt)((0,f.getAgentDir)(),b,{cwd:this.cwd,sessionManager:this.inner.sessionManager,modelRegistry:{getProviderAuth:a=>this.inner.modelRuntime.getAuth(a),getProvider:a=>this.inner.modelRuntime.getProvider(a)}},c.signal),e=[`Generated image: ${d.path}`,`Prompt: ${d.prompt}`,`Connection: ${d.connection}`,`Model: ${d.model}`,...d.size?[`Size: ${d.size}`]:[],...d.resolution?[`Resolution: ${d.resolution}`]:[],...d.quality?[`Quality: ${d.quality}`]:[]].join("\n");return await this.inner.sendCustomMessage({customType:H.Ds,content:e,display:!0,details:d}),this.persistCommandOnlySession(),(0,r.mD)(),d}finally{this.directImageAbortController=null,this.directImageRequestId=null,this.resetIdleTimer()}}case H.l6:{let b="string"==typeof a.requestId&&a.requestId?a.requestId:null;if(!b)throw Error("Image generation requestId is required");return this.directImageRequestId===b?this.directImageAbortController?.abort(new DOMException("Image generation cancelled","AbortError")):this.pendingImageCancellationId=b,null}case"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.syncProjectTrust(),await this.inner.reload(),this.setActiveToolSelection(a),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),(0,n.kn)(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.pendingPromptCount>0||this.directImageAbortController||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:(0,q.J1)({shellPath:this.inner.settingsManager.getShellPath()})});try{let a=await b;return this.persistCommandOnlySession(),a}finally{this.resetIdleTimer(),(0,r.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,N().add(this.sessionId),this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}destroy(){if(!this._alive)return;for(let a of(this._closing=!0,this._alive=!1,this.closeListeners))try{a()}catch{}for(let a of(this.closeListeners.clear(),this.idleTimer&&clearTimeout(this.idleTimer),this.directImageAbortController?.abort(new DOMException("Session closed","AbortError")),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.activeToolEvents.clear();let a=()=>{try{this.inner.dispose()}finally{this.onDestroyCallback?.()}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():(async()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"}))().catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this._closing=!0,this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getCustomUiWidth(a){if(!a||"object"!=typeof a)return z.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return z.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,h.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,z.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,ap,aq,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let g=e?AbortSignal.any([e,f]):f,i=(0,h.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let h,k=!1,l=()=>{h&&clearTimeout(h),g.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(h=setTimeout(()=>m(b),d)),g.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}hasConnectedKeepAlive(){return this.subscriptions.some(a=>a.keepAlive)}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"notify",message:(0,y.a)(a),notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement})},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,h.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return as},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in Pi Web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}})}}}syncProjectTrust(){let a=(0,u.Y1)(this.cwd,(0,f.getAgentDir)());this.inner.settingsManager.setProjectTrusted(a.trusted)}}function N(){return globalThis.__piPausedAutomaticFollowUps||(globalThis.__piPausedAutomaticFollowUps=new Set),globalThis.__piPausedAutomaticFollowUps}function O(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>{let a=Array.from(globalThis.__piSessions?.values()??[]);Promise.allSettled(a.map(a=>a.shutdown()))};process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__piSessions}function P(a){let b=O(),c=a.sessionId;a.sessionFile&&(0,r.O8)(c,a.sessionFile),a.onDestroy(()=>{b.get(c)===a&&b.delete(c)}),b.set(c,a),a.start(),a.isChatOnly()||a.beginExtensionBinding()}let au=(0,C.su)({getSession:a=>O().get(a),registerSession:(a,b)=>{let c=new at(a,{chatOnly:b?.chatOnly,suppressCompletionNotifications:!0});P(c)},resolveSessionPath:r.os,reopenSession:async(a,b,c)=>{let{session:d}=await ah(a,b,void 0,{...c?{cwdOverride:c}:{}});return d},isSessionFileMutationReserved:a=>$().has(a),invalidateSessionList:r.mD,isBuiltInSubagentsEnabled:D.N});function Q(a){return au.get(a)}function R(a,b){return au.steer(a,b)}function S(a){return au.abort(a)}function T(a,b){return au.sendUiMessage(a,b)}function U(){return globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks}function V(a){let b=(0,j.resolve)(a);try{return(0,i.realpathSync)(b)}catch{return b}}function W(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function X(){return U().size>0||$().size>0||(0,C.Iv)().length>0||[...O().values()].some(a=>a.isBusyForFileMutation())}function Y(a){return O().get(a)}function Z(a){if(U().has(a))return!1;let b=O().get(a);return!(!b?.isAlive()||b.isRunning()||b.isBusyForFileMutation()||$().has(a))&&(b.destroy(),!0)}function $(){return globalThis.__piSessionFileMutations||(globalThis.__piSessionFileMutations=new Set),globalThis.__piSessionFileMutations}async function _(a){let b=[...new Set(a.filter(Boolean))],c=$(),d=U();if(b.some(a=>c.has(a)||d.has(a)))return null;let e=b.map(a=>O().get(a)).filter(a=>!!a);if((0,C.Iv)().some(a=>b.includes(a.sessionId))||e.some(a=>a.isBusyForFileMutation()))return null;for(let a of b)c.add(a);let f=()=>{for(let a of b)c.delete(a)};try{return await Promise.all(e.map(a=>a.shutdown())),f}catch(a){throw f(),a}}async function aa(a,b,c){let d=void 0===c?void 0:(0,J.vw)(c),e=Y(a);if(!e?.isAlive()){if(!b)throw Error("Session not found");let c=f.SessionManager.open(b,void 0);if((0,B.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");void 0===d?(0,J.lp)(c):(0,J.b5)(c,d),(0,r.mD)();let e=await ah(a,b,void 0);return{session:e.session,sessionId:e.realSessionId,recreated:!1}}if(e.isRunning())throw Error("Cannot change tools while the session is running");if((0,B.ph)(e.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let g="function"==typeof e.isChatOnly&&"function"==typeof e.setActiveToolSelection,j=void 0===d||!g||e.isChatOnly()!==(0===d.length);if(void 0===d?(0,J.lp)(e.inner.sessionManager):(0,J.b5)(e.inner.sessionManager,d),(0,r.mD)(),void 0!==d&&!j)return e.setActiveToolSelection(d),{session:e,sessionId:a,recreated:!1};let k=e.sessionFile&&(0,i.existsSync)(e.sessionFile)?e.sessionFile:void 0,l=e.cwd,m=e.inner.model,n=e.inner.agent.state?.thinkingLevel;if(await e.shutdown(),k){let b=await ah(a,k,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let o=await ah(`__recreate__${(0,h.randomUUID)()}`,"",l,{...void 0!==d?{toolNames:d}:{},...m?{initialModel:{provider:m.provider,modelId:m.id}}:{},allowInitialModelFallback:!0,...n&&an.has(n)?{thinkingLevel:n}:{}});return{session:o.session,sessionId:o.realSessionId,recreated:!0}}let av=null;async function ab(a,b){let{bugReport:d,bugReportUpload:e,crashLog:g}=await (av??=(async()=>{let a=(0,j.join)((0,f.getPackageDir)(),"dist/core"),b=b=>c(98279)((0,k.pathToFileURL)((0,j.join)(a,b)).href),[d,e,g]=await Promise.all([b("bug-report.js"),b("bug-report-upload.js"),b("crash-log.js")]);return{bugReport:d,bugReportUpload:e,crashLog:g}})()),h=g.readCrashLog(),i=a.resourceLoader.getExtensions(),l={metadata:d.collectBugReportMetadata({hint:b,sessionId:a.sessionId,cwd:a.sessionManager.getCwd(),includeSession:!1,includeSummary:!1,messageCount:a.messages.length,model:a.model,modelRuntime:a.modelRuntime,thinkingLevel:a.thinkingLevel,extensions:i.extensions,extensionErrors:i.errors,globalSettings:a.settingsManager.getGlobalSettings(),projectSettings:a.settingsManager.getProjectSettings()}),diagnostics:d.collectBugReportDiagnostics(a.sessionManager,h)},m=b=>{a.sessionManager.appendCustomEntry(d.BUG_REPORT_CUSTOM_ENTRY_TYPE,{id:l.metadata.id,createdAt:l.metadata.createdAt,hint:l.metadata.hint,sessionIncluded:!1,summaryIncluded:!1,...b}),h.length>0&&g.clearCrashLog(),(0,r.mD)()};try{let a=await e.uploadBugReport(l);return m({delivery:"upload"}),{delivery:"upload",id:a.id}}catch(c){let b=(0,j.join)(a.sessionManager.getCwd(),d.bugReportArchiveFileName(l.metadata.id));return await d.writeBugReportArchive(l,b),m({delivery:"zip",path:b}),{delivery:"zip",id:l.metadata.id,path:b,error:c instanceof Error?c.message:String(c)}}}function ac(){let a=[],b=new Map((0,C.Iv)().map(a=>[a.sessionId,a]));for(let c of O().values()){if(!c.isAlive())continue;let d=c.inner.sessionManager,e=d.getHeader(),f=d.getEntries(),g=f.filter(a=>"message"===a.type),h=g.find(a=>"user"===a.message.role),j=f.filter(a=>"custom_message"===a.type&&"customType"in a&&a.customType===H.Ds),k=j[0]?.details?.prompt,l=d.getSessionFile()??c.sessionFile,m=!!(l&&(0,i.existsSync)(l)),n=(0,B.$u)(f,e?.id??c.sessionId,l??"");if(!m&&(!c.isRunning()||!h))continue;let o=e?.timestamp??f[0]?.timestamp??new Date().toISOString(),p=new Date(o).getTime(),q=Number.isNaN(p)?Date.now():p;for(let a of g){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(q=Math.max(q,b))}for(let a of j){let b=new Date(a.timestamp).getTime();Number.isNaN(b)||(q=Math.max(q,b))}a.push({path:l??"",id:e?.id??c.sessionId,cwd:e?.cwd??c.cwd,name:d.getSessionName(),created:o,modified:new Date(q).toISOString(),messageCount:g.length+j.length,firstMessage:(0,s.M3)(h?function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content;return"string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ")}(h)||"(no messages)":"string"==typeof k&&k.trim()?k:"(no messages)"),...n?{parentSessionId:n.parentSessionId,relation:{kind:"subagent",parentSessionId:n.parentSessionId,profile:n.profile,description:n.description,status:b.get(c.sessionId)?.status??(c.isRunning()?"running":n.status),...c.inner.model?{model:{provider:c.inner.model.provider,id:c.inner.model.id}}:{}}}:{},transient:!m})}let c=new Set(a.map(a=>a.id));for(let d of b.values()){if(c.has(d.sessionId))continue;let b=O().get(d.parentSessionId);a.push({path:d.sessionPath,id:d.sessionId,cwd:b?.cwd??"",name:d.description,created:d.createdAt,modified:d.createdAt,messageCount:0,firstMessage:(0,s.M3)(d.task||"(no messages)"),parentSessionId:d.parentSessionId,relation:{kind:"subagent",parentSessionId:d.parentSessionId,profile:d.profile,description:d.description,status:d.status},transient:!d.sessionPath||!(0,i.existsSync)(d.sessionPath)})}return a}function ad(a){let b=V(a);return!!W().has(b)||Array.from(O().values()).some(a=>V(a.cwd)===b&&a.isRunning())}async function ae(a){let b=V(a),c=Array.from(O().values()).filter(a=>V(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function af(){let a=new Set;for(let[b,c]of O())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function ag(){let a=new Set;for(let[b,c]of O())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}async function ah(a,b,c,d={}){let g,h,i;(0,e.b)();let{initialModel:j,allowInitialModelFallback:k,thinkingLevel:l,cwdOverride:m}=d;if($().has(a))throw Error("Session file is being modified");let o=void 0===d.toolNames?void 0:(0,J.vw)(d.toolNames),s=O(),t=U(),x=s.get(a);if(x?.isAlive())return{session:x,realSessionId:a};let y=t.get(a);if(y)return y;if(b)g=f.SessionManager.open(b,void 0,m);else{if(!c)throw Error("cwd is required for a new session");g=f.SessionManager.create(c,void 0)}let z=g.getCwd(),C=b?(0,B.ph)(g.getEntries()):null,E=C?void 0:(0,J.dS)(g.getEntries()),H=C?.tools??E??o;C||void 0!==E||void 0===o||(0,J.b5)(g,o);let I=!!(C?.loadExtensions||C?.loadSkills),K=H?.length===0&&!I,L=(h=W(),i=V(z),h.set(i,(h.get(i)??0)+1),()=>{let a=(h.get(i)??1)-1;a>0?h.set(i,a):h.delete(i)}),N=(async()=>{K||(0,f.initTheme)();let a=(0,f.getAgentDir)(),b=K&&!C?(0,F.Q)(()=>(0,F.c)((0,f.loadProjectContextFiles)({cwd:z,agentDir:a}))||" "):void 0,c=C?.tools;C||void 0===H||(c=0===H.length?[]:void 0);let d=C?I?(0,u.Fk)(z,a):void 0:K?void 0:(0,u.Fk)(z,a),e=f.SettingsManager.create(z,a),h=await (0,f.createAgentSessionServices)({cwd:z,agentDir:a,settingsManager:e,resourceLoaderOptions:C?{noExtensions:!C.loadExtensions,noSkills:!C.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...void 0!==C.exactSystemPrompt?{extensionFactories:[(0,F.Q)(C.exactSystemPrompt)],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:C.appendSystemPrompt}}:K?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,extensionFactories:[b],systemPrompt:" ",systemPromptOverride:()=>void 0,appendSystemPrompt:[]}:{extensionFactories:[(0,q.eD)({cwd:z,settings:e}),(0,G.NQ)(a),(0,A.Vj)(au.extensionRuntime,()=>(0,B.IR)(z),D.N)],extensionsOverride:a=>(0,q.Ds)((0,G.Bm)((0,A.U6)(a)))},...d?{resourceLoaderReloadOptions:d}:{}}),i=await (0,p.p)(h.modelRuntime,h.settingsManager.getEnabledModels()),m=j&&(!k||i.visible.some(a=>a.provider===j.provider&&a.id===j.modelId))?j:void 0,o=h.settingsManager.getDefaultProvider(),s=h.settingsManager.getDefaultModel(),t=g.getBranch(),x=t.some(a=>"message"===a.type),y=x?(0,r.Vg)(t):null,E=y?h.modelRuntime.getModel(y.provider,y.modelId):void 0,J=x?null:(0,p.I)(i,{...m?{requestedModel:m}:{},...o&&s?{defaultModel:{provider:o,modelId:s}}:{},...l?{thinkingLevel:l}:{}}),L=E&&h.modelRuntime.hasConfiguredAuth(E.provider)?E:J?.model,{session:N}=await (0,f.createAgentSessionFromServices)({services:h,sessionManager:g,...L?{model:L}:{},...J?.thinkingLevel?{thinkingLevel:J.thinkingLevel}:{},...i.scopedModels.length>0?{scopedModels:[...i.scopedModels]}:{},...void 0!==c?{tools:c}:{},...C?{excludeTools:[...B.st]}:{}});(await (0,v.o)(h.settingsManager,{...m?{model:m}:{},...l?{thinkingLevel:l}:{}},{...N.model?{model:{provider:N.model.provider,modelId:N.model.id}}:{},thinkingLevel:N.thinkingLevel,supportsThinking:N.supportsThinking()})).modelDefaultChanged&&(0,n.kn)(),C||K||N.setActiveToolsByName(M(N,H??N.getActiveToolNames()));let O=new at(N,{chatOnly:K,beforeAgentRunComplete:a=>au.flushParentNotifications(a),onAgentRunComplete:a=>{(0,w.lB)(a).catch(a=>{console.error("[pi-web] failed to send completion push:",a instanceof Error?a.message:a)})},suppressCompletionNotifications:!!C}),Q=N.sessionId;return P(O),{session:O,realSessionId:Q}})().finally(()=>{t.delete(a),L()});return t.set(a,N),N}d()}catch(a){d(a)}})},59457:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Um:()=>z,dt:()=>A});var e=c(77598),f=c(51455),g=c(76760),h=c.n(g),i=c(4573),j=c(29862),k=c(78970),l=c(64439),m=c(85462),n=c(21966),o=c(5687),p=c(10424),q=c(6759),r=c(82536),s=c(58864),t=a([j,m,q]);function u(a,b){if("string"!=typeof a||!a.trim())throw Error(`${b} must be a non-empty string`);return a.trim()}function v(a,b){if(!a.length||a.length>0x1400000)throw Error(`Image ${b} exceeds the 20MB limit`);let c=a.length>=24&&i.Buffer.from(a.subarray(0,8)).equals(i.Buffer.from([137,80,78,71,13,10,26,10]))?{mimeType:"image/png",extension:"png"}:a.length>=10&&255===a[0]&&216===a[1]?{mimeType:"image/jpeg",extension:"jpg"}:a.length>=30&&"RIFF"===i.Buffer.from(a.subarray(0,4)).toString("ascii")&&"WEBP"===i.Buffer.from(a.subarray(8,12)).toString("ascii")?{mimeType:"image/webp",extension:"webp"}:null;if(!c)throw Error(`Unsupported image: ${b}`);let d=(0,j.getImageDimensions)(a.toString("base64"),c.mimeType);if(!d||d.widthPx<=0||d.heightPx<=0)throw Error(`Unsupported image: ${b}`);return{bytes:a,...c,width:d.widthPx,height:d.heightPx}}async function w(a,b){let c=await (0,f.realpath)(a),d=await (0,f.realpath)(h().resolve(a,(0,s.gB)(b.replace(/^@/,""))));if(!(0,r.o)(d,new Set([c])))throw Error(`Image path is outside the working directory: ${b}`);let e=await (0,f.stat)(d);if(!e.isFile())throw Error(`Image path is not a file: ${b}`);if(e.size>0x1400000)throw Error(`Image ${b} exceeds the 20MB limit`);return v(await (0,f.readFile)(d),h().basename(d))}function x(a,b){let c=(0,k.Si)(a.data);if(null===c)throw Error(`Image ${a.fileName??b} is not valid base64`);if(c>0x1400000)throw Error(`Image ${a.fileName??b} exceeds the 20MB limit`);return v(i.Buffer.from(a.data,"base64"),a.fileName??b)}async function y(a,b){let c=await (0,f.realpath)(a),d=c;for(let a of[".pi","generated-images"])if(d=h().join(d,a),await (0,f.mkdir)(d,{recursive:!0}),d=await (0,f.realpath)(d),!(0,r.o)(d,new Set([c])))throw Error("Generated image directory escapes the working directory");let g=h().posix.join(".pi","generated-images",`image-${(0,e.randomUUID)()}.${b.extension}`);return await (0,f.writeFile)(h().join(c,...g.split("/")),b.bytes,{flag:"wx"}),g}async function z(a,b){return y(a,x(b,"source-image"))}async function A(a,b,c,d){let e,f,g;d?.throwIfAborted();let h=function(a){if(!a||"object"!=typeof a||Array.isArray(a))throw Error("Image request must be an object");let b=new Set(["prompt","connection","target","use_last_attachment","new_image","size","resolution","quality"]),c=Object.keys(a).find(a=>!b.has(a));if(c)throw Error(`Image request field ${c} is not supported`);let d=u(a.prompt,"prompt");if(d.length>32e3)throw Error("prompt must not exceed 32000 characters");if(void 0!==a.use_last_attachment&&"boolean"!=typeof a.use_last_attachment)throw Error("use_last_attachment must be a boolean");if(void 0!==a.new_image&&"boolean"!=typeof a.new_image)throw Error("new_image must be a boolean");if(!0===a.new_image&&(void 0!==a.target||!0===a.use_last_attachment))throw Error("new_image cannot be combined with an edit source");return{prompt:d,...void 0===a.connection?{}:{connection:u(a.connection,"connection")},...void 0===a.target?{}:{target:u(a.target,"target")},...void 0===a.use_last_attachment?{}:{use_last_attachment:a.use_last_attachment},...void 0===a.new_image?{}:{new_image:a.new_image},...void 0===a.size?{}:{size:u(a.size,"size")},...void 0===a.resolution?{}:{resolution:u(a.resolution,"resolution")},...void 0===a.quality?{}:{quality:u(a.quality,"quality")}}}(b),i=(0,q.al)(a);if(!i.enabled)throw Error("Image generation is disabled");let j=(0,q.h)(i).defaultConnection,k=h.connection?[h.connection]:[j,...Object.keys(i.connections).filter(a=>a!==j)];if(!k[0])throw Error("No runnable image connection is configured");if(h.connection&&!i.connections[h.connection])throw Error(`Unknown image connection: ${h.connection}`);let r=!h.target&&!h.new_image,s=r?function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let d=b[a];if("message"===d.type&&d.message?.role==="user"){var c;return(0,p.L7)((c=d.message.content,"string"==typeof c?c:Array.isArray(c)?c.filter(a=>!!a&&"object"==typeof a).filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n"):""))}}}(c):void 0,t=r&&!s?function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let c=b[a];if("message"===c.type&&c.message?.role==="user"){if(!Array.isArray(c.message.content))return;for(let a of c.message.content)if(a&&"object"==typeof a&&"image"===a.type&&"string"==typeof a.data&&"string"==typeof a.mimeType)return{data:a.data,mimeType:a.mimeType,fileName:"attachment-1"};break}}}(c):void 0,z=!r||h.use_last_attachment||s||t?void 0:function(a){let b=a.sessionManager.getBranch();for(let a=b.length-1;a>=0;a-=1){let c=b[a];if("custom_message"===c.type||c.customType){let a=(0,p.VV)(c.details);if(a)return a.path}if("message"===c.type&&c.message?.role==="toolResult"){let a=(0,p.VV)(c.message.details);if(a)return a.path}}}(c),A=!!(h.target||h.use_last_attachment||s||t||z),B=[["size","sizes",h.size],["resolution","resolutions",h.resolution],["quality","qualities",h.quality]],C=a=>A&&!0!==a.capabilities.editing?`Image connection ${a.id} does not declare editing support`:null;if(h.connection){let a=i.connections[h.connection],b=C(a)??B.filter(([,b,c])=>c&&!a.capabilities[b]?.includes(c)).map(([b,,c])=>`Image connection ${a.id} does not support ${b} ${c}`)[0];if(b)throw Error(b)}else for(let[a,b,c]of B)if(c&&!Object.values(i.connections).some(a=>a.capabilities[b]?.includes(c)))throw Error(`No configured image connection supports ${a} ${c}`);if(h.target?(e=await w(c.cwd,h.target),f=h.target):s?(e=await w(c.cwd,s),f=s):t?(e=x(t,"attachment-1"),f=t.fileName??"attachment"):z&&(e=await w(c.cwd,z),f=z),!e&&h.use_last_attachment)throw Error("No image attachment is available in the current conversation");let D=null;for(let a of k){let b=i.connections[a];if(!b||!h.connection&&!await c.modelRegistry.getProviderAuth(b.provider))continue;let j=C(b);if(j){D??=j;continue}let k=(a,c)=>c&&b.capabilities[a]?.includes(c)?c:void 0,q=k("sizes",h.size)??b.defaults?.size,r=k("resolutions",h.resolution)??b.defaults?.resolution,s=k("qualities",h.quality)??b.defaults?.quality;try{let a,g=(0,p.bG)(b);a="codex"===g?v(await (0,m.wS)(b,c,h.prompt,e,q,s,d),"generated-image"):"antigravity"===g?v(await (0,l.Lf)(b,c,h.prompt,e,q,r,d),"generated-image"):"openai-images"===g?v(await (0,n.xT)(b,c,h.prompt,e,q,s,d),"generated-image"):v(await (0,o.z)(b,c,h.prompt,e,q,r,s,d),"generated-image"),d?.throwIfAborted();let i=await y(c.cwd,a);return{type:p.Ds,version:1,path:i,mimeType:a.mimeType,width:a.width,height:a.height,prompt:h.prompt,connection:b.id,label:b.label,model:b.model,...q?{size:q}:{},...r?{resolution:r}:{},...s?{quality:s}:{},...f?{source:f}:{}}}catch(a){if(d?.throwIfAborted(),h.connection||!(a instanceof Error)||!(/Image API returned HTTP (?:401|402|429)\b/.test(a.message)||/\b(?:quota|rate.?limit|resource.exhausted|insufficient.credits)\b/i.test(a.message)))throw a;g=a}}if(g)throw g;if(D)throw Error(D);throw Error("No available image connection supports this request")}[j,m,q]=t.then?(await t)():t,d()}catch(a){d(a)}})},64439:(a,b,c)=>{"use strict";c.d(b,{Lf:()=>o});var d=c(4573),e=c(78970),f=c(96782);let g=["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com","https://cloudcode-pa.googleapis.com"],h=new Set([403,404,429,500,502,503,504]),i=new Set(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]),j={"1k":"1K","2k":"2K"};function k(a,b){return a.replace(/ya29\.[A-Za-z0-9._-]+/g,"ya29.[redacted]").replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}function l(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.status,b.code].map(a=>"string"==typeof a||"number"==typeof a?String(a).trim():"").filter(Boolean);if(c.length)return k(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return k(a.message.trim(),600)}catch{}return k(b,400)||void 0}async function m(a){let b=function(a){if(a)try{let b=JSON.parse(a);if("string"!=typeof b.token||!b.token||"string"!=typeof b.projectId||!b.projectId.trim())return;return{token:b.token,projectId:b.projectId.trim()}}catch{return}}((await a("antigravity"))?.auth.apiKey);if(!b)throw Error("No Antigravity credentials. Run /login antigravity first.");return b}async function n(a,b){let c;if(!a.body)throw Error("Image API returned no body");let f=a.body.getReader(),g=new TextDecoder,h="",i=0;try{for(;;){b.throwIfAborted();let{done:a,value:j}=await f.read();if(a)break;if((i+=j.byteLength)>0x2000000)throw Error("Image API response is too large");let k=(h+=g.decode(j,{stream:!0})).split("\n");for(let a of(h=k.pop()||"",k)){let b;if(!a.startsWith("data:"))continue;let f=a.slice(5).trim();if(f&&"[DONE]"!==f){try{b=JSON.parse(f)}catch{continue}for(let a of("string"==typeof b.error?.message&&b.error.message.trim()&&(c=b.error.message.trim()),(b.response??b).candidates??[]))for(let b of a.content?.parts??[]){let a=b.inlineData?.data;if("string"!=typeof a)continue;let c=(0,e.Si)(a);if(null===c)throw Error("Image API returned invalid base64 image");if(c>0x1400000)throw Error("Generated image exceeds the 20MB limit");return d.Buffer.from(a,"base64")}}}}}finally{f.releaseLock()}throw Error(c?k(c,600):"Image API returned no image")}async function o(a,b,c,d,e,f,h){var k;let l,n,o,q,{token:r,projectId:s}=await m(b.modelRegistry.getProviderAuth),t=JSON.stringify((k=a.model,l={},n=function(a){if(!a)return;let b=a.trim();if(b&&"auto"!==b){if(i.has(b))return b;throw Error(`Unsupported image size: ${a}`)}}(e),o=function(a){if(!a)return;let b=j[a.trim().toLowerCase()];if(b)return b;throw Error(`Unsupported image resolution: ${a}`)}(f),n&&(l.aspectRatio=n),o&&(l.imageSize=o),q=[{text:c}],d&&q.push({inlineData:{mimeType:d.mimeType,data:d.bytes.toString("base64")}}),{project:s,model:k,request:{contents:[{role:"user",parts:q}],generationConfig:{...Object.keys(l).length?{imageConfig:l}:{},candidateCount:1}},requestType:"agent",userAgent:"antigravity",requestId:`agent/${crypto.randomUUID()}/${Date.now()}/${crypto.randomUUID()}/2`}));return p(function(a){let b=a?.trim();if(b)return[b.replace(/\/+$/,"")];let c=process.env.ANTIGRAVITY_BASE_URL?.trim();return c?[c.replace(/\/+$/,"")]:g}(b.modelRegistry.getProvider(a.provider)?.baseUrl),{Authorization:`Bearer ${r}`,"Content-Type":"application/json",Accept:"text/event-stream","User-Agent":"antigravity/hub/2.8.0 (aidev_client; os_type=linux; arch=x64; cl=963137146)","X-Goog-Api-Client":"google-cloud-sdk vscode_cloudshelleditor/0.1","Client-Metadata":JSON.stringify({ideType:"ANTIGRAVITY",platform:"darwin"===process.platform?"MACOS":"win32"===process.platform?"WINDOWS":"LINUX",pluginType:"GEMINI"})},t,h)}async function p(a,b,c,e,{connectMs:g=6e4,totalMs:i=18e4}={}){let j=AbortSignal.timeout(i),m=e?AbortSignal.any([e,j]):j,o=(a,b)=>(e?.throwIfAborted(),j.aborted?Error(`Antigravity image request to ${a} timed out after ${i/1e3}s while ${b}`):void 0),q="no Antigravity image endpoint available";for(let e of a){let a;m.throwIfAborted();let i=new AbortController,j=setTimeout(()=>i.abort(),g);try{a=await fetch(`${e}/v1internal:streamGenerateContent?alt=sse`,{method:"POST",headers:b,body:c,signal:AbortSignal.any([m,i.signal])})}catch(b){let a=o(e,"connecting");if(a)throw a;q=i.signal.aborted?`Antigravity image endpoint ${e} sent no response within ${g/1e3}s`:`${e}: ${k(b instanceof Error?b.message:String(b),400)}`;continue}finally{clearTimeout(j)}if(!a.ok){let b=await (0,f.S)(a,65536,m,"Image API error response is too large").catch(()=>d.Buffer.alloc(0));if(q=`Image API returned HTTP ${a.status}${l(b)?`: ${l(b)}`:""}`,h.has(a.status))continue;break}try{return await n(a,m)}catch(a){throw o(e,"streaming the image")??a}}throw Error(q)}},71069:(a,b,c)=>{"use strict";c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},75493:(a,b,c)=>{"use strict";c.d(b,{a:()=>f});let d=/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1B\\))/g,e=/\x1B_pi:c\x07/g;function f(a){return a.replace(e,"").replace(d,"")}},78970:(a,b,c)=>{"use strict";function d(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}function e(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=d(a.data);return null!==b&&b<=0xa00000}function f(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!e(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}c.d(b,{Si:()=>d,kc:()=>f,wb:()=>e})},85462:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{wS:()=>l});var e=c(4573),f=c(72322),g=c(78970),h=c(10424),i=c(96782),j=a([f]);function k(a,b){return a.replace(/Bearer\s+\S+/gi,"Bearer [redacted]").replace(/[\x00-\x1f\x7f]+/g," ").trim().slice(0,b)}async function l(a,b,c,d,j,l,m){var n,o;let p,q,r,s,t=await b.modelRegistry.getProviderAuth(a.provider);if(!t?.auth.apiKey)throw Error(`No credentials configured for image provider ${a.provider}`);let u=t.auth.apiKey,v=function(a){try{let b=a.split(".");if(3!==b.length)throw Error("Invalid token");let c=JSON.parse(e.Buffer.from(b[1],"base64url").toString("utf8")),d=c?.["https://api.openai.com/auth"]?.chatgpt_account_id;if("string"!=typeof d||!d)throw Error("No account ID in token");return d}catch{throw Error("Failed to extract accountId from token")}}(u),w=t.auth.baseUrl??b.modelRegistry.getProvider(a.provider)?.baseUrl,x=(n=d?"edits":"generations",(q=(w&&w.trim()?w.trim():"https://chatgpt.com/backend-api").replace(/\/+$/,"")).endsWith("/codex/images/generations")||q.endsWith("/codex/images/edits")?`${q.slice(0,q.lastIndexOf("/"))}/${n}`:q.endsWith("/codex/images")?`${q}/${n}`:q.endsWith("/codex")?`${q}/images/${n}`:`${q}/codex/images/${n}`),y=new Headers({Authorization:`Bearer ${u}`,"chatgpt-account-id":v,originator:"pi","User-Agent":(0,f.getPiUserAgent)(),Accept:"application/json","Content-Type":"application/json"}),z=AbortSignal.timeout(18e4),A=m?AbortSignal.any([m,z]):z,B=await fetch(x,{method:"POST",headers:y,body:JSON.stringify((o=a.model,r={prompt:c,model:o},(s=(0,h.zd)(j))&&(r.size=s),l&&(r.quality=l),d&&(r.images=[{image_url:`data:${d.mimeType};base64,${d.bytes.toString("base64")}`}]),r)),signal:A});if(!B.ok){let a=B.headers.get("x-request-id")??B.headers.get("request-id"),b=await (0,i.S)(B,65536,A).catch(()=>null),c=b?function(a){let b=a.toString("utf8");try{let a=JSON.parse(b);if("string"==typeof a.error&&a.error.trim()){let b="string"==typeof a.code&&a.code.trim()?a.code.trim():void 0;return k(b?`${a.error.trim()} (${b})`:a.error.trim(),600)}if(a.error&&"object"==typeof a.error&&!Array.isArray(a.error)){let b=a.error,c=[b.message,b.code,b.type].filter(a=>"string"==typeof a&&!!a.trim());if(c.length)return k(c.join("; "),600)}if("string"==typeof a.message&&a.message.trim())return k(a.message.trim(),600)}catch{}return k(b,400)||void 0}(b):void 0;throw Error(`Image API returned HTTP ${B.status}${c?`: ${c}`:""}${a?` (request ${k(a,160)})`:""}`)}let C=await (0,i.S)(B,0x2000000,A);try{p=JSON.parse(C.toString("utf8"))}catch{throw Error("Image API returned invalid JSON")}let D=p?.data?.[0]?.b64_json;if("string"!=typeof D)throw Error("Image API returned no base64 image");let E=(0,g.Si)(D);if(null===E)throw Error("Image API returned invalid base64 image");if(E>0x1400000)throw Error("Generated image exceeds the 20MB limit");return e.Buffer.from(D,"base64")}f=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},88914:(a,b,c)=>{"use strict";function d(a,b){b&&(a.tokens.input+=b.input??0,a.tokens.output+=b.output??0,a.tokens.cacheRead+=b.cacheRead??0,a.tokens.cacheWrite+=b.cacheWrite??0,a.cost+=b.cost?.total??0,a.costs.input+=b.cost?.input??0,a.costs.output+=b.cost?.output??0,a.costs.cacheRead+=b.cost?.cacheRead??0,a.costs.cacheWrite+=b.cost?.cacheWrite??0)}function e(a){var b;let c={userMessages:0,assistantMessages:0,toolCalls:0,toolResults:0,totalMessages:0,tokens:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0},cost:0,costs:{input:0,output:0,cacheRead:0,cacheWrite:0}};for(let e of a){if("usage"===e.type||"compaction"===e.type||"branch_summary"===e.type){d(c,e.usage);continue}"message"===e.type&&(b=e.message,c.totalMessages+=1,"user"===b.role?c.userMessages+=1:"toolResult"===b.role?(c.toolResults+=1,d(c,b.usage)):"assistant"===b.role&&(c.assistantMessages+=1,Array.isArray(b.content)&&(c.toolCalls+=b.content.filter(a=>"toolCall"===a.type).length),d(c,b.usage)))}return c.tokens.total=c.tokens.input+c.tokens.output+c.tokens.cacheRead+c.tokens.cacheWrite,c}c.d(b,{P:()=>e})},91712:(a,b,c)=>{"use strict";c.d(b,{HY:()=>f,vt:()=>h});class d extends Error{constructor(a){super(a),this.name="QueuedDeliveryError"}}function e(a,b){if(!a||"object"!=typeof a)throw new d(`Agent ${b} delivery queue is not readable`);let c=a.messages;if(!Array.isArray(c))throw new d(`Agent ${b} delivery queue messages are not an array`);return[...c]}function f(a){if(!a||"object"!=typeof a)throw new d("Agent delivery queues are not readable");let b=e(a.steeringQueue,"steering"),c=e(a.followUpQueue,"follow-up");if("function"==typeof a.hasQueuedMessages&&!!a.hasQueuedMessages.call(a)!=(b.length>0||c.length>0))throw new d("Agent delivery queue pending state does not match readable messages");return{steering:b,followUp:c}}function g(a){if(!a||"object"!=typeof a)throw new d("Queued delivery message is not an object");if("user"!==a.role)throw new d("custom"===a.role?"Queued custom/extension messages cannot be recalled as user prompts":"Queued delivery message is not a user message");if("string"==typeof a.content)return{text:a.content,images:[]};if(!Array.isArray(a.content))throw new d("Queued user message content is not text or content blocks");let b=[],c=[];for(let e of a.content){if(!e||"object"!=typeof e)throw new d("Queued user message contains an invalid content block");if("text"===e.type){if("string"!=typeof e.text)throw new d("Queued text block is missing text");b.push(e.text);continue}if("image"===e.type){c.push(function(a){if("string"==typeof a.data&&a.data.length>0&&"string"==typeof a.mimeType&&a.mimeType.startsWith("image/"))return{data:a.data,mimeType:a.mimeType};throw new d("Queued image cannot be restored")}(e));continue}throw new d(`Unsupported queued content type ${String(e.type)}`)}return{text:b.join("\n"),images:c}}function h(a){return{steering:a.steering.map(g),followUp:a.followUp.map(g)}}},95412:(a,b,c)=>{"use strict";function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>j,mb:()=>h,u4:()=>i});let e=function(){let a,b=globalThis,c=Symbol.for("@calmabacus/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(){let a=globalThis,b=Symbol.for("@calmabacus/pi-web/session-liveness-leases/v1"),c=a[b];if(c instanceof Map)return c;let d=new Map;return a[b]=d,d}function g(a){a.timer&&clearTimeout(a.timer),a.timer=setTimeout(()=>{!a.released&&a.expiresAt<=Date.now()?a.release():a.released||g(a)},Math.max(1,a.expiresAt-Date.now()));let b=a.timer.unref;b?.call(a.timer)}function h(a){var b;let c=f(),d=(b={name:"pi-web-open-tab",sessionId:a,isActive:()=>!h.released&&h.expiresAt>Date.now()},e.register(b)),h={sessionId:a,expiresAt:Date.now()+9e4,released:!1,timer:null,renew:()=>{h.released||(h.expiresAt=Date.now()+9e4,g(h))},release:()=>{if(h.released)return;h.released=!0,h.timer&&clearTimeout(h.timer),d();let b=c.get(a);b?.delete(h),b?.size===0&&c.delete(a)}},i=c.get(a)??new Set;return i.add(h),c.set(a,i),g(h),h}function i(a){let b=f().get(a);if(!b)return 0;let c=0;for(let a of[...b]){if(a.released||a.expiresAt<=Date.now()){a.release();continue}a.renew(),c+=1}return c}function j(a){return e.hasActiveProvider(a)}},96782:(a,b,c)=>{"use strict";c.d(b,{S:()=>e});var d=c(4573);async function e(a,b,c,f="Image API response is too large"){let g=Number(a.headers.get("content-length"));if(Number.isFinite(g)&&g>b)throw Error(f);let h=a.body?.getReader();if(!h){let c=d.Buffer.from(await a.arrayBuffer());if(c.length>b)throw Error(f);return c}let i=[],j=0;for(;;){c?.throwIfAborted();let{done:a,value:d}=await h.read();if(a)break;if((j+=d.byteLength)>b)throw await h.cancel(),Error(f);i.push(d)}return d.Buffer.concat(i,j)}},98279:a=>{function b(a){return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b})}b.keys=()=>[],b.resolve=b,b.id=98279,a.exports=b},98469:(a,b,c)=>{"use strict";function d(){if(globalThis.__piWebUpdating)throw Error("Pi Web is updating. Please wait for the restart.")}c.d(b,{b:()=>d})},99324:(a,b,c)=>{"use strict";c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
24
26
  ${a.content}
25
27
  </document>`).join("\n\n");return`${a}
26
28