@qt4798/pi-web 0.17.15 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +30 -28
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +32 -4
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/routes-manifest.json +26 -12
  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 +3 -3
  24. package/.next/server/app/api/agent/[id]/lease/route.js +1 -0
  25. package/.next/server/app/api/agent/[id]/lease/route.js.nft.json +1 -0
  26. package/.next/server/app/api/{deepseek/balance → agent/[id]/lease}/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/agent/[id]/route.js +1 -1
  28. package/.next/server/app/api/agent/new/route.js +1 -1
  29. package/.next/server/app/api/agent/running/events/route.js +2 -2
  30. package/.next/server/app/api/agent/running/route.js +1 -1
  31. package/.next/server/app/api/app-update/route.js +1 -1
  32. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  33. package/.next/server/app/api/auth/combined/route.js +1 -1
  34. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  35. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  36. package/.next/server/app/api/auth/providers/route.js +1 -1
  37. package/.next/server/app/api/backup/export/route.js +1 -1
  38. package/.next/server/app/api/backup/import/route.js +1 -1
  39. package/.next/server/app/api/cwd/browse/route.js +1 -1
  40. package/.next/server/app/api/cwd/validate/route.js +1 -1
  41. package/.next/server/app/api/default-cwd/route.js +1 -1
  42. package/.next/server/app/api/events/route.js +2 -2
  43. package/.next/server/app/api/features/route.js +1 -1
  44. package/.next/server/app/api/file-index/route.js +1 -1
  45. package/.next/server/app/api/files/[...path]/route.js +3 -3
  46. package/.next/server/app/api/git/diff/route.js +2 -2
  47. package/.next/server/app/api/git/push/route.js +1 -1
  48. package/.next/server/app/api/git/stash/route.js +1 -1
  49. package/.next/server/app/api/git/status/route.js +2 -2
  50. package/.next/server/app/api/home/route.js +1 -1
  51. package/.next/server/app/api/import/discover/route.js +1 -1
  52. package/.next/server/app/api/import/execute/route.js +1 -1
  53. package/.next/server/app/api/import/status/route.js +1 -1
  54. package/.next/server/app/api/logs/route.js +1 -1
  55. package/.next/server/app/api/mcp/restart/route.js +1 -1
  56. package/.next/server/app/api/mcp/route.js +2 -2
  57. package/.next/server/app/api/models/route.js +1 -1
  58. package/.next/server/app/api/models-config/builtin/route.js +1 -1
  59. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  60. package/.next/server/app/api/models-config/discover/route.js +1 -1
  61. package/.next/server/app/api/models-config/route.js +1 -1
  62. package/.next/server/app/api/models-config/test/route.js +1 -1
  63. package/.next/server/app/api/modes/route.js +1 -1
  64. package/.next/server/app/api/plugins/check/route.js +1 -1
  65. package/.next/server/app/api/plugins/route.js +1 -1
  66. package/.next/server/app/api/project-aliases/route.js +1 -1
  67. package/.next/server/app/api/project-state/route.js +1 -1
  68. package/.next/server/app/api/project-trust/route.js +1 -1
  69. package/.next/server/app/api/projects/visibility/route.js +1 -1
  70. package/.next/server/app/api/provider-usage/query/route.js +1 -0
  71. package/.next/server/app/api/{deepseek/balance → provider-usage/query}/route.js.nft.json +1 -1
  72. package/.next/server/app/api/provider-usage/query/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/proxy/route.js +1 -1
  74. package/.next/server/app/api/proxy/test/route.js +1 -1
  75. package/.next/server/app/api/sessions/[id]/auto-name/route.js +2 -2
  76. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  77. package/.next/server/app/api/sessions/[id]/details/route.js +1 -1
  78. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  79. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
  80. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  81. package/.next/server/app/api/sessions/[id]/queue-recovery/route.js +1 -1
  82. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  84. package/.next/server/app/api/sessions/route.js +1 -1
  85. package/.next/server/app/api/sessions/search/route.js +1 -1
  86. package/.next/server/app/api/settings/title-model/route.js +1 -1
  87. package/.next/server/app/api/skills/check/route.js +1 -1
  88. package/.next/server/app/api/skills/install/route.js +1 -1
  89. package/.next/server/app/api/skills/route.js +1 -1
  90. package/.next/server/app/api/skills/search/route.js +1 -1
  91. package/.next/server/app/api/skills/update/route.js +1 -1
  92. package/.next/server/app/api/snippets/[id]/route.js +1 -1
  93. package/.next/server/app/api/snippets/route.js +1 -1
  94. package/.next/server/app/api/subagents/[id]/route.js +1 -1
  95. package/.next/server/app/api/subagents/profiles/route.js +1 -1
  96. package/.next/server/app/api/subagents/settings/route.js +1 -1
  97. package/.next/server/app/api/tasks/[id]/[action]/route.js +1 -1
  98. package/.next/server/app/api/tasks/[id]/changed-files/route.js +1 -1
  99. package/.next/server/app/api/tasks/[id]/diff/route.js +2 -2
  100. package/.next/server/app/api/tasks/[id]/events/route.js +1 -1
  101. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  102. package/.next/server/app/api/tasks/batch/route.js +1 -1
  103. package/.next/server/app/api/tasks/events/route.js +1 -1
  104. package/.next/server/app/api/tasks/route.js +1 -1
  105. package/.next/server/app/api/tasks/settings/route.js +1 -1
  106. package/.next/server/app/api/tasks/templates/route.js +1 -1
  107. package/.next/server/app/api/terminal/[id]/events/route.js +2 -2
  108. package/.next/server/app/api/terminal/[id]/route.js +1 -1
  109. package/.next/server/app/api/terminal/route.js +1 -1
  110. package/.next/server/app/api/themes/[name]/route.js +1 -1
  111. package/.next/server/app/api/themes/route.js +1 -1
  112. package/.next/server/app/api/tools/extension-tools/route.js +1 -1
  113. package/.next/server/app/api/tools/settings/route.js +1 -1
  114. package/.next/server/app/api/usage/route.js +1 -1
  115. package/.next/server/app/api/vision-config/route.js +2 -2
  116. package/.next/server/app/api/web-auth/route.js +1 -0
  117. package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -0
  118. package/.next/server/app/api/worktrees/route.js +1 -1
  119. package/.next/server/app/icon.ico/route.js +1 -1
  120. package/.next/server/app/icon.png/route.js +1 -1
  121. package/.next/server/app/icon.svg/route.js +1 -1
  122. package/.next/server/app/index.html +1 -1
  123. package/.next/server/app/index.rsc +6 -6
  124. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  125. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  126. package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  127. package/.next/server/app/login/page.js +1 -0
  128. package/.next/server/app/login/page.js.nft.json +1 -0
  129. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  130. package/.next/server/app/login.html +1 -0
  131. package/.next/server/app/login.meta +26 -0
  132. package/.next/server/app/login.rsc +23 -0
  133. package/.next/server/app/login.segments/_full.segment.rsc +23 -0
  134. package/.next/server/app/login.segments/_tree.segment.rsc +4 -0
  135. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +29 -0
  136. package/.next/server/app/page.js +13 -13
  137. package/.next/server/app/page.js.nft.json +1 -1
  138. package/.next/server/app/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app-paths-manifest.json +30 -28
  140. package/.next/server/chunks/1352.js +1 -0
  141. package/.next/server/chunks/4253.js +7 -7
  142. package/.next/server/chunks/5582.js +5 -5
  143. package/.next/server/chunks/6429.js +7 -7
  144. package/.next/server/chunks/7915.js +1 -1
  145. package/.next/server/instrumentation.js +1 -1
  146. package/.next/server/instrumentation.js.nft.json +1 -1
  147. package/.next/server/middleware-build-manifest.js +1 -1
  148. package/.next/server/middleware.js +1 -1
  149. package/.next/server/pages/404.html +1 -1
  150. package/.next/server/pages/500.html +1 -1
  151. package/.next/server/prefetch-hints.json +14 -0
  152. package/.next/server/server-reference-manifest.json +1 -1
  153. package/.next/static/chunks/7650-4f948821e59fd720.js +1 -0
  154. package/.next/static/chunks/9247-b0a48419f2ad92ee.js +1 -0
  155. package/.next/static/chunks/app/_global-error/page-442ef8efc99801fc.js +1 -0
  156. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-442ef8efc99801fc.js +1 -0
  157. package/.next/static/chunks/app/api/agent/[id]/events/route-442ef8efc99801fc.js +1 -0
  158. package/.next/static/chunks/app/api/agent/[id]/lease/route-442ef8efc99801fc.js +1 -0
  159. package/.next/static/chunks/app/api/agent/[id]/route-442ef8efc99801fc.js +1 -0
  160. package/.next/static/chunks/app/api/agent/new/route-442ef8efc99801fc.js +1 -0
  161. package/.next/static/chunks/app/api/agent/running/events/route-442ef8efc99801fc.js +1 -0
  162. package/.next/static/chunks/app/api/agent/running/route-442ef8efc99801fc.js +1 -0
  163. package/.next/static/chunks/app/api/app-update/route-442ef8efc99801fc.js +1 -0
  164. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-442ef8efc99801fc.js +1 -0
  165. package/.next/static/chunks/app/api/auth/combined/route-442ef8efc99801fc.js +1 -0
  166. package/.next/static/chunks/app/api/auth/login/[provider]/route-442ef8efc99801fc.js +1 -0
  167. package/.next/static/chunks/app/api/auth/logout/[provider]/route-442ef8efc99801fc.js +1 -0
  168. package/.next/static/chunks/app/api/auth/providers/route-442ef8efc99801fc.js +1 -0
  169. package/.next/static/chunks/app/api/backup/export/route-442ef8efc99801fc.js +1 -0
  170. package/.next/static/chunks/app/api/backup/import/route-442ef8efc99801fc.js +1 -0
  171. package/.next/static/chunks/app/api/cwd/browse/route-442ef8efc99801fc.js +1 -0
  172. package/.next/static/chunks/app/api/cwd/validate/route-442ef8efc99801fc.js +1 -0
  173. package/.next/static/chunks/app/api/default-cwd/route-442ef8efc99801fc.js +1 -0
  174. package/.next/static/chunks/app/api/events/route-442ef8efc99801fc.js +1 -0
  175. package/.next/static/chunks/app/api/features/route-442ef8efc99801fc.js +1 -0
  176. package/.next/static/chunks/app/api/file-index/route-442ef8efc99801fc.js +1 -0
  177. package/.next/static/chunks/app/api/files/[...path]/route-442ef8efc99801fc.js +1 -0
  178. package/.next/static/chunks/app/api/git/diff/route-442ef8efc99801fc.js +1 -0
  179. package/.next/static/chunks/app/api/git/push/route-442ef8efc99801fc.js +1 -0
  180. package/.next/static/chunks/app/api/git/stash/route-442ef8efc99801fc.js +1 -0
  181. package/.next/static/chunks/app/api/git/status/route-442ef8efc99801fc.js +1 -0
  182. package/.next/static/chunks/app/api/home/route-442ef8efc99801fc.js +1 -0
  183. package/.next/static/chunks/app/api/import/discover/route-442ef8efc99801fc.js +1 -0
  184. package/.next/static/chunks/app/api/import/execute/route-442ef8efc99801fc.js +1 -0
  185. package/.next/static/chunks/app/api/import/status/route-442ef8efc99801fc.js +1 -0
  186. package/.next/static/chunks/app/api/logs/route-442ef8efc99801fc.js +1 -0
  187. package/.next/static/chunks/app/api/mcp/restart/route-442ef8efc99801fc.js +1 -0
  188. package/.next/static/chunks/app/api/mcp/route-442ef8efc99801fc.js +1 -0
  189. package/.next/static/chunks/app/api/models/route-442ef8efc99801fc.js +1 -0
  190. package/.next/static/chunks/app/api/models-config/builtin/route-442ef8efc99801fc.js +1 -0
  191. package/.next/static/chunks/app/api/models-config/catalog/route-442ef8efc99801fc.js +1 -0
  192. package/.next/static/chunks/app/api/models-config/discover/route-442ef8efc99801fc.js +1 -0
  193. package/.next/static/chunks/app/api/models-config/route-442ef8efc99801fc.js +1 -0
  194. package/.next/static/chunks/app/api/models-config/test/route-442ef8efc99801fc.js +1 -0
  195. package/.next/static/chunks/app/api/modes/route-442ef8efc99801fc.js +1 -0
  196. package/.next/static/chunks/app/api/plugins/check/route-442ef8efc99801fc.js +1 -0
  197. package/.next/static/chunks/app/api/plugins/route-442ef8efc99801fc.js +1 -0
  198. package/.next/static/chunks/app/api/project-aliases/route-442ef8efc99801fc.js +1 -0
  199. package/.next/static/chunks/app/api/project-state/route-442ef8efc99801fc.js +1 -0
  200. package/.next/static/chunks/app/api/project-trust/route-442ef8efc99801fc.js +1 -0
  201. package/.next/static/chunks/app/api/projects/visibility/route-442ef8efc99801fc.js +1 -0
  202. package/.next/static/chunks/app/api/provider-usage/query/route-442ef8efc99801fc.js +1 -0
  203. package/.next/static/chunks/app/api/proxy/route-442ef8efc99801fc.js +1 -0
  204. package/.next/static/chunks/app/api/proxy/test/route-442ef8efc99801fc.js +1 -0
  205. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-442ef8efc99801fc.js +1 -0
  206. package/.next/static/chunks/app/api/sessions/[id]/context/route-442ef8efc99801fc.js +1 -0
  207. package/.next/static/chunks/app/api/sessions/[id]/details/route-442ef8efc99801fc.js +1 -0
  208. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-442ef8efc99801fc.js +1 -0
  209. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route-442ef8efc99801fc.js +1 -0
  210. package/.next/static/chunks/app/api/sessions/[id]/export/route-442ef8efc99801fc.js +1 -0
  211. package/.next/static/chunks/app/api/sessions/[id]/queue-recovery/route-442ef8efc99801fc.js +1 -0
  212. package/.next/static/chunks/app/api/sessions/[id]/route-442ef8efc99801fc.js +1 -0
  213. package/.next/static/chunks/app/api/sessions/[id]/state/route-442ef8efc99801fc.js +1 -0
  214. package/.next/static/chunks/app/api/sessions/route-442ef8efc99801fc.js +1 -0
  215. package/.next/static/chunks/app/api/sessions/search/route-442ef8efc99801fc.js +1 -0
  216. package/.next/static/chunks/app/api/settings/title-model/route-442ef8efc99801fc.js +1 -0
  217. package/.next/static/chunks/app/api/skills/check/route-442ef8efc99801fc.js +1 -0
  218. package/.next/static/chunks/app/api/skills/install/route-442ef8efc99801fc.js +1 -0
  219. package/.next/static/chunks/app/api/skills/route-442ef8efc99801fc.js +1 -0
  220. package/.next/static/chunks/app/api/skills/search/route-442ef8efc99801fc.js +1 -0
  221. package/.next/static/chunks/app/api/skills/update/route-442ef8efc99801fc.js +1 -0
  222. package/.next/static/chunks/app/api/snippets/[id]/route-442ef8efc99801fc.js +1 -0
  223. package/.next/static/chunks/app/api/snippets/route-442ef8efc99801fc.js +1 -0
  224. package/.next/static/chunks/app/api/subagents/[id]/route-442ef8efc99801fc.js +1 -0
  225. package/.next/static/chunks/app/api/subagents/profiles/route-442ef8efc99801fc.js +1 -0
  226. package/.next/static/chunks/app/api/subagents/settings/route-442ef8efc99801fc.js +1 -0
  227. package/.next/static/chunks/app/api/tasks/[id]/[action]/route-442ef8efc99801fc.js +1 -0
  228. package/.next/static/chunks/app/api/tasks/[id]/changed-files/route-442ef8efc99801fc.js +1 -0
  229. package/.next/static/chunks/app/api/tasks/[id]/diff/route-442ef8efc99801fc.js +1 -0
  230. package/.next/static/chunks/app/api/tasks/[id]/events/route-442ef8efc99801fc.js +1 -0
  231. package/.next/static/chunks/app/api/tasks/[id]/route-442ef8efc99801fc.js +1 -0
  232. package/.next/static/chunks/app/api/tasks/batch/route-442ef8efc99801fc.js +1 -0
  233. package/.next/static/chunks/app/api/tasks/events/route-442ef8efc99801fc.js +1 -0
  234. package/.next/static/chunks/app/api/tasks/route-442ef8efc99801fc.js +1 -0
  235. package/.next/static/chunks/app/api/tasks/settings/route-442ef8efc99801fc.js +1 -0
  236. package/.next/static/chunks/app/api/tasks/templates/route-442ef8efc99801fc.js +1 -0
  237. package/.next/static/chunks/app/api/terminal/[id]/events/route-442ef8efc99801fc.js +1 -0
  238. package/.next/static/chunks/app/api/terminal/[id]/route-442ef8efc99801fc.js +1 -0
  239. package/.next/static/chunks/app/api/terminal/route-442ef8efc99801fc.js +1 -0
  240. package/.next/static/chunks/app/api/themes/[name]/route-442ef8efc99801fc.js +1 -0
  241. package/.next/static/chunks/app/api/themes/route-442ef8efc99801fc.js +1 -0
  242. package/.next/static/chunks/app/api/tools/extension-tools/route-442ef8efc99801fc.js +1 -0
  243. package/.next/static/chunks/app/api/tools/settings/route-442ef8efc99801fc.js +1 -0
  244. package/.next/static/chunks/app/api/usage/route-442ef8efc99801fc.js +1 -0
  245. package/.next/static/chunks/app/api/vision-config/route-442ef8efc99801fc.js +1 -0
  246. package/.next/static/chunks/app/api/web-auth/route-442ef8efc99801fc.js +1 -0
  247. package/.next/static/chunks/app/api/worktrees/route-442ef8efc99801fc.js +1 -0
  248. package/.next/static/chunks/app/{layout-4d62e08c230b8ea9.js → layout-9aea218f73c7fe87.js} +1 -1
  249. package/.next/static/chunks/app/login/page-da303309d00e41ed.js +1 -0
  250. package/.next/static/chunks/app/page-18186a874a627cbc.js +206 -0
  251. package/.next/static/chunks/next/dist/client/components/builtin/app-error-442ef8efc99801fc.js +1 -0
  252. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-442ef8efc99801fc.js +1 -0
  253. package/.next/static/chunks/next/dist/client/components/builtin/not-found-442ef8efc99801fc.js +1 -0
  254. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-442ef8efc99801fc.js +1 -0
  255. package/.next/static/css/452ea33c857da08e.css +1 -0
  256. package/.next/static/css/{cc02ff1fe55740e5.css → e06f7ff6c88e8ace.css} +1 -1
  257. package/.next/static/uQy0Ks6XKTlOjvQmyHp5g/_buildManifest.js +1 -0
  258. package/.next/trace +84 -9
  259. package/.next/trace-build +1 -1
  260. package/.next/types/app/api/{deepseek/balance → agent/[id]/lease}/route.ts +3 -3
  261. package/.next/types/app/api/provider-usage/query/route.ts +353 -0
  262. package/.next/types/app/api/{pair → web-auth}/route.ts +3 -3
  263. package/.next/types/app/login/page.ts +89 -0
  264. package/.next/types/routes.d.ts +6 -4
  265. package/.next/types/validator.ts +36 -18
  266. package/package.json +1 -1
  267. package/.next/server/app/api/deepseek/balance/route.js +0 -1
  268. package/.next/server/app/api/pair/route.js +0 -2
  269. package/.next/server/app/api/pair/route_client-reference-manifest.js +0 -1
  270. package/.next/server/chunks/4154.js +0 -1
  271. package/.next/static/BIWUktt-_gNHpArQ-xe2x/_buildManifest.js +0 -1
  272. package/.next/static/chunks/9660-8945dc0e772329fb.js +0 -1
  273. package/.next/static/chunks/app/_global-error/page-1f18a3ac6ad460ce.js +0 -1
  274. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-1f18a3ac6ad460ce.js +0 -1
  275. package/.next/static/chunks/app/api/agent/[id]/events/route-1f18a3ac6ad460ce.js +0 -1
  276. package/.next/static/chunks/app/api/agent/[id]/route-1f18a3ac6ad460ce.js +0 -1
  277. package/.next/static/chunks/app/api/agent/new/route-1f18a3ac6ad460ce.js +0 -1
  278. package/.next/static/chunks/app/api/agent/running/events/route-1f18a3ac6ad460ce.js +0 -1
  279. package/.next/static/chunks/app/api/agent/running/route-1f18a3ac6ad460ce.js +0 -1
  280. package/.next/static/chunks/app/api/app-update/route-1f18a3ac6ad460ce.js +0 -1
  281. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-1f18a3ac6ad460ce.js +0 -1
  282. package/.next/static/chunks/app/api/auth/combined/route-1f18a3ac6ad460ce.js +0 -1
  283. package/.next/static/chunks/app/api/auth/login/[provider]/route-1f18a3ac6ad460ce.js +0 -1
  284. package/.next/static/chunks/app/api/auth/logout/[provider]/route-1f18a3ac6ad460ce.js +0 -1
  285. package/.next/static/chunks/app/api/auth/providers/route-1f18a3ac6ad460ce.js +0 -1
  286. package/.next/static/chunks/app/api/backup/export/route-1f18a3ac6ad460ce.js +0 -1
  287. package/.next/static/chunks/app/api/backup/import/route-1f18a3ac6ad460ce.js +0 -1
  288. package/.next/static/chunks/app/api/cwd/browse/route-1f18a3ac6ad460ce.js +0 -1
  289. package/.next/static/chunks/app/api/cwd/validate/route-1f18a3ac6ad460ce.js +0 -1
  290. package/.next/static/chunks/app/api/deepseek/balance/route-1f18a3ac6ad460ce.js +0 -1
  291. package/.next/static/chunks/app/api/default-cwd/route-1f18a3ac6ad460ce.js +0 -1
  292. package/.next/static/chunks/app/api/events/route-1f18a3ac6ad460ce.js +0 -1
  293. package/.next/static/chunks/app/api/features/route-1f18a3ac6ad460ce.js +0 -1
  294. package/.next/static/chunks/app/api/file-index/route-1f18a3ac6ad460ce.js +0 -1
  295. package/.next/static/chunks/app/api/files/[...path]/route-1f18a3ac6ad460ce.js +0 -1
  296. package/.next/static/chunks/app/api/git/diff/route-1f18a3ac6ad460ce.js +0 -1
  297. package/.next/static/chunks/app/api/git/push/route-1f18a3ac6ad460ce.js +0 -1
  298. package/.next/static/chunks/app/api/git/stash/route-1f18a3ac6ad460ce.js +0 -1
  299. package/.next/static/chunks/app/api/git/status/route-1f18a3ac6ad460ce.js +0 -1
  300. package/.next/static/chunks/app/api/home/route-1f18a3ac6ad460ce.js +0 -1
  301. package/.next/static/chunks/app/api/import/discover/route-1f18a3ac6ad460ce.js +0 -1
  302. package/.next/static/chunks/app/api/import/execute/route-1f18a3ac6ad460ce.js +0 -1
  303. package/.next/static/chunks/app/api/import/status/route-1f18a3ac6ad460ce.js +0 -1
  304. package/.next/static/chunks/app/api/logs/route-1f18a3ac6ad460ce.js +0 -1
  305. package/.next/static/chunks/app/api/mcp/restart/route-1f18a3ac6ad460ce.js +0 -1
  306. package/.next/static/chunks/app/api/mcp/route-1f18a3ac6ad460ce.js +0 -1
  307. package/.next/static/chunks/app/api/models/route-1f18a3ac6ad460ce.js +0 -1
  308. package/.next/static/chunks/app/api/models-config/builtin/route-1f18a3ac6ad460ce.js +0 -1
  309. package/.next/static/chunks/app/api/models-config/catalog/route-1f18a3ac6ad460ce.js +0 -1
  310. package/.next/static/chunks/app/api/models-config/discover/route-1f18a3ac6ad460ce.js +0 -1
  311. package/.next/static/chunks/app/api/models-config/route-1f18a3ac6ad460ce.js +0 -1
  312. package/.next/static/chunks/app/api/models-config/test/route-1f18a3ac6ad460ce.js +0 -1
  313. package/.next/static/chunks/app/api/modes/route-1f18a3ac6ad460ce.js +0 -1
  314. package/.next/static/chunks/app/api/pair/route-1f18a3ac6ad460ce.js +0 -1
  315. package/.next/static/chunks/app/api/plugins/check/route-1f18a3ac6ad460ce.js +0 -1
  316. package/.next/static/chunks/app/api/plugins/route-1f18a3ac6ad460ce.js +0 -1
  317. package/.next/static/chunks/app/api/project-aliases/route-1f18a3ac6ad460ce.js +0 -1
  318. package/.next/static/chunks/app/api/project-state/route-1f18a3ac6ad460ce.js +0 -1
  319. package/.next/static/chunks/app/api/project-trust/route-1f18a3ac6ad460ce.js +0 -1
  320. package/.next/static/chunks/app/api/projects/visibility/route-1f18a3ac6ad460ce.js +0 -1
  321. package/.next/static/chunks/app/api/proxy/route-1f18a3ac6ad460ce.js +0 -1
  322. package/.next/static/chunks/app/api/proxy/test/route-1f18a3ac6ad460ce.js +0 -1
  323. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-1f18a3ac6ad460ce.js +0 -1
  324. package/.next/static/chunks/app/api/sessions/[id]/context/route-1f18a3ac6ad460ce.js +0 -1
  325. package/.next/static/chunks/app/api/sessions/[id]/details/route-1f18a3ac6ad460ce.js +0 -1
  326. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-1f18a3ac6ad460ce.js +0 -1
  327. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route-1f18a3ac6ad460ce.js +0 -1
  328. package/.next/static/chunks/app/api/sessions/[id]/export/route-1f18a3ac6ad460ce.js +0 -1
  329. package/.next/static/chunks/app/api/sessions/[id]/queue-recovery/route-1f18a3ac6ad460ce.js +0 -1
  330. package/.next/static/chunks/app/api/sessions/[id]/route-1f18a3ac6ad460ce.js +0 -1
  331. package/.next/static/chunks/app/api/sessions/[id]/state/route-1f18a3ac6ad460ce.js +0 -1
  332. package/.next/static/chunks/app/api/sessions/route-1f18a3ac6ad460ce.js +0 -1
  333. package/.next/static/chunks/app/api/sessions/search/route-1f18a3ac6ad460ce.js +0 -1
  334. package/.next/static/chunks/app/api/settings/title-model/route-1f18a3ac6ad460ce.js +0 -1
  335. package/.next/static/chunks/app/api/skills/check/route-1f18a3ac6ad460ce.js +0 -1
  336. package/.next/static/chunks/app/api/skills/install/route-1f18a3ac6ad460ce.js +0 -1
  337. package/.next/static/chunks/app/api/skills/route-1f18a3ac6ad460ce.js +0 -1
  338. package/.next/static/chunks/app/api/skills/search/route-1f18a3ac6ad460ce.js +0 -1
  339. package/.next/static/chunks/app/api/skills/update/route-1f18a3ac6ad460ce.js +0 -1
  340. package/.next/static/chunks/app/api/snippets/[id]/route-1f18a3ac6ad460ce.js +0 -1
  341. package/.next/static/chunks/app/api/snippets/route-1f18a3ac6ad460ce.js +0 -1
  342. package/.next/static/chunks/app/api/subagents/[id]/route-1f18a3ac6ad460ce.js +0 -1
  343. package/.next/static/chunks/app/api/subagents/profiles/route-1f18a3ac6ad460ce.js +0 -1
  344. package/.next/static/chunks/app/api/subagents/settings/route-1f18a3ac6ad460ce.js +0 -1
  345. package/.next/static/chunks/app/api/tasks/[id]/[action]/route-1f18a3ac6ad460ce.js +0 -1
  346. package/.next/static/chunks/app/api/tasks/[id]/changed-files/route-1f18a3ac6ad460ce.js +0 -1
  347. package/.next/static/chunks/app/api/tasks/[id]/diff/route-1f18a3ac6ad460ce.js +0 -1
  348. package/.next/static/chunks/app/api/tasks/[id]/events/route-1f18a3ac6ad460ce.js +0 -1
  349. package/.next/static/chunks/app/api/tasks/[id]/route-1f18a3ac6ad460ce.js +0 -1
  350. package/.next/static/chunks/app/api/tasks/batch/route-1f18a3ac6ad460ce.js +0 -1
  351. package/.next/static/chunks/app/api/tasks/events/route-1f18a3ac6ad460ce.js +0 -1
  352. package/.next/static/chunks/app/api/tasks/route-1f18a3ac6ad460ce.js +0 -1
  353. package/.next/static/chunks/app/api/tasks/settings/route-1f18a3ac6ad460ce.js +0 -1
  354. package/.next/static/chunks/app/api/tasks/templates/route-1f18a3ac6ad460ce.js +0 -1
  355. package/.next/static/chunks/app/api/terminal/[id]/events/route-1f18a3ac6ad460ce.js +0 -1
  356. package/.next/static/chunks/app/api/terminal/[id]/route-1f18a3ac6ad460ce.js +0 -1
  357. package/.next/static/chunks/app/api/terminal/route-1f18a3ac6ad460ce.js +0 -1
  358. package/.next/static/chunks/app/api/themes/[name]/route-1f18a3ac6ad460ce.js +0 -1
  359. package/.next/static/chunks/app/api/themes/route-1f18a3ac6ad460ce.js +0 -1
  360. package/.next/static/chunks/app/api/tools/extension-tools/route-1f18a3ac6ad460ce.js +0 -1
  361. package/.next/static/chunks/app/api/tools/settings/route-1f18a3ac6ad460ce.js +0 -1
  362. package/.next/static/chunks/app/api/usage/route-1f18a3ac6ad460ce.js +0 -1
  363. package/.next/static/chunks/app/api/vision-config/route-1f18a3ac6ad460ce.js +0 -1
  364. package/.next/static/chunks/app/api/worktrees/route-1f18a3ac6ad460ce.js +0 -1
  365. package/.next/static/chunks/app/page-14b489ee5908511c.js +0 -206
  366. package/.next/static/chunks/next/dist/client/components/builtin/app-error-1f18a3ac6ad460ce.js +0 -1
  367. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-1f18a3ac6ad460ce.js +0 -1
  368. package/.next/static/chunks/next/dist/client/components/builtin/not-found-1f18a3ac6ad460ce.js +0 -1
  369. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-1f18a3ac6ad460ce.js +0 -1
  370. package/.next/static/css/cec93cc3229def39.css +0 -1
  371. /package/.next/server/app/api/{pair → web-auth}/route.js.nft.json +0 -0
  372. /package/.next/static/{BIWUktt-_gNHpArQ-xe2x → uQy0Ks6XKTlOjvQmyHp5g}/_ssgManifest.js +0 -0
@@ -1,21 +1,21 @@
1
1
  "use strict";exports.id=6429,exports.ids=[6429],exports.modules={305:(a,b,c)=>{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)}})},4504:(a,b,c)=>{c.d(b,{LF:()=>e,aA:()=>j,bo:()=>g,eG:()=>i});var d=c(29021);let e=`Continue pursuing the active goal. Do the next useful work, then report your disposition:
2
2
  - "continue" with the next concrete step;
3
3
  - "complete" only when fully done and verified;
4
- - "blocked" when only the user can unblock you.`;function f(a){return`${a}.goal.json`}function g(a){let b=f(a);if(!(0,d.existsSync)(b))return h();try{var c;let a=JSON.parse((0,d.readFileSync)(b,"utf8"));if(!a||1!==a.version||!a.state||"object"!=typeof a.state)return h();let e=a.state;return{status:(c=e.status,["idle","running","paused","blocked","budget_limited","complete"].includes(c)?c:"idle"),goalText:"string"==typeof e.goalText?e.goalText:null,turnsUsed:Number.isFinite(e.turnsUsed)?e.turnsUsed:0,turnsLimit:Number.isFinite(e.turnsLimit)?e.turnsLimit:10,noProgressTurns:Number.isFinite(e.noProgressTurns)?e.noProgressTurns:0,noProgressLimit:Number.isFinite(e.noProgressLimit)?e.noProgressLimit:4,tokensUsed:Number.isFinite(e.tokensUsed)?e.tokensUsed:0,tokenBudget:null===e.tokenBudget||Number.isFinite(e.tokenBudget)?e.tokenBudget??null:null,timeUsedSeconds:Number.isFinite(e.timeUsedSeconds)?e.timeUsedSeconds:0,startedAt:Number.isFinite(e.startedAt)?e.startedAt:void 0,updatedAt:Number.isFinite(e.updatedAt)?e.updatedAt:void 0}}catch{return h()}}function h(){return{status:"idle",goalText:null,turnsUsed:0,turnsLimit:10,noProgressTurns:0,noProgressLimit:4,tokensUsed:0,tokenBudget:null,timeUsedSeconds:0}}function i(a,b){let c=f(a),e=`${c}.tmp`;try{(0,d.writeFileSync)(e,JSON.stringify({version:1,state:b}),{encoding:"utf8",mode:384}),(0,d.renameSync)(e,c)}catch{try{(0,d.rmSync)(e,{force:!0})}catch{}}}class j{constructor(a){this.continuationArmed=!1,this.turnStartMs=0,this.onChanged=null,this.state=a?g(a):h()}hydrate(a){this.state={...a}}getState(){return{...this.state}}isRunning(){return"running"===this.state.status}hasActiveGoal(){return"idle"!==this.state.status}isContinuable(){return"running"===this.state.status}isContinuationArmed(){return this.continuationArmed}armContinuation(){this.continuationArmed=!0}disarmContinuation(){this.continuationArmed=!1}onAgentStart(){this.continuationArmed=!1,this.turnStartMs=Date.now()}setOnChanged(a){this.onChanged=a}commit(a){a.updatedAt=Date.now(),this.state=a,this.onChanged?.(this.getState())}start(a,b=null){let c=Date.now(),d=b??this.state.tokenBudget??null,e={status:"running",goalText:a.trim(),turnsUsed:0,turnsLimit:this.state.turnsLimit,noProgressTurns:0,noProgressLimit:this.state.noProgressLimit,tokensUsed:0,tokenBudget:d,timeUsedSeconds:0,startedAt:c,updatedAt:c};return this.commit(e),this.getState()}pause(){return"running"!==this.state.status||this.commit({...this.state,status:"paused"}),this.getState()}resume(){return"paused"!==this.state.status&&"blocked"!==this.state.status||this.commit({...this.state,status:"running"}),this.getState()}stop(){if("idle"===this.state.status)return this.getState();let a=h();return a.turnsLimit=this.state.turnsLimit,a.noProgressLimit=this.state.noProgressLimit,this.commit(a),this.continuationArmed=!1,this.getState()}edit(a){if("idle"===this.state.status)return this.getState();let b="complete"===this.state.status||"budget_limited"===this.state.status?"running":this.state.status;return this.commit({...this.state,goalText:a.trim(),status:b}),this.getState()}settleTurn(a,b,c){if("running"!==this.state.status)return{verdict:{action:"continue"},state:this.getState()};let d=(a??"").toLowerCase(),e=this.turnStartMs>0?Math.max(0,Math.round((Date.now()-this.turnStartMs)/1e3)):0,f=this.state.tokensUsed+Math.max(0,b),g=this.state.timeUsedSeconds+e,h=this.state.turnsUsed+1;if(d.includes("[goal: complete]")||/(?:^|\n|[.!?]\s+)(?:goal(?:\s+is)?\s+complete|goal\s+complete)\b/.test(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"complete"}),{verdict:{action:"complete"},state:this.getState()}}if(function(a){let b;if(a.includes("[goal: blocked]")||a.includes("goal blocked"))return!0;let c=/(?:^|[^a-z])blocked\s*:/g;for(;null!==(b=c.exec(a));){let c=a.slice(0,b.index).trimEnd();if(!/\bnot$/.test(c))return!0}return!1}(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}}let i=0===c?this.state.noProgressTurns+1:0;return null!==this.state.tokenBudget&&f>=this.state.tokenBudget?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"budget_limited"}),{verdict:{action:"budget_limited"},state:this.getState()}):i>=this.state.noProgressLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}):h>=this.state.turnsLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"paused"}),{verdict:{action:"pause"},state:this.getState()}):(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i}),{verdict:{action:"continue"},state:this.getState()})}}},11301:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{hH:()=>s,oH:()=>r,wF:()=>q});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let t=new Set([400,401,402,403,404,406,408,409,413,422,429,451,500,502,503,504]),u=new Set(["opencode-zen-external","opencode-zen-switch","opencode-zen-runtime","opencode-zen-sync"]);function j(){return(0,f.join)((0,g.getAgentDir)(),"pi-web-error-log.json")}function k(){globalThis.__piErrorLogState||(globalThis.__piErrorLogState={loaded:!1,entries:[]});let a=globalThis.__piErrorLogState;if(!a.loaded){a.loaded=!0;try{if((0,e.existsSync)(j())){let b=JSON.parse((0,e.readFileSync)(j(),"utf8"));if(Array.isArray(b)){let c=b.filter(l).slice(-500),d=c.filter(a=>!u.has(a.source));d.length!==c.length&&p(d),a.entries=d}}}catch{a.entries=[]}}return a}function l(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"string"==typeof a.timestamp&&("error"===a.level||"warning"===a.level||"info"===a.level)&&"string"==typeof a.source&&"string"==typeof a.message}function m(a){return a.replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"https://[redacted]@").replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"sk-[redacted]").replace(/\b(?:oc|opencode|zen)[_-]?[A-Za-z0-9._~-]{12,}\b/gi,"[key-redacted]").replace(/((?:api[_-]?key|token|password|secret)\s*[:=]\s*)([^\s,;]+)/gi,"$1[redacted]")}function n(a){return a.length>2e4?`${a.slice(0,2e4)}…`:a}function o(a){let b=a.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b|\b(4\d{2}|5\d{2})\b/i),c=Number(b?.[1]??b?.[2]??b?.[3]);return t.has(c)?c:void 0}function p(a){try{(0,h.$)(j(),JSON.stringify(a,null,2))}catch{}}function q(a){let b=k(),c=n(m(a.message.trim())),d=a.details?n(m(a.details)):void 0,e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),level:a.level??"error",source:a.source??"unknown",...void 0!==a.statusCode?{statusCode:a.statusCode}:void 0!==o(c)?{statusCode:o(c)}:{},...a.provider?{provider:a.provider}:{},...a.model?{model:a.model}:{},...a.sessionId?{sessionId:a.sessionId}:{},message:c||"Unknown error",...d?{details:d}:{}};return b.entries.push(e),b.entries.length>500&&b.entries.splice(0,b.entries.length-500),p(b.entries),e}function r(a={}){let b=a.query?.trim().toLocaleLowerCase(),c=Math.min(Math.max(a.limit??200,1),500),d=void 0!==a.source&&u.has(a.source);return k().entries.filter(a=>d||!u.has(a.source)).filter(b=>void 0===a.statusCode||b.statusCode===a.statusCode).filter(b=>!a.level||b.level===a.level).filter(b=>!a.source||b.source===a.source).filter(a=>!b||[a.message,a.details,a.provider,a.model,a.source].filter(Boolean).some(a=>a.toLocaleLowerCase().includes(b))).slice().reverse().slice(0,c)}function s(){k().entries=[],p([])}d()}catch(a){d(a)}})},12568:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{s:()=>o});var e=c(75430),f=c(46753),g=c(7048),h=c(20644),i=c(99324),j=c(305),k=c(72498),l=c(27367),m=a([e,f,g,j,k,l]);[e,f,g,j,k,l]=m.then?(await m)():m;let p=new Set(["off","minimal","low","medium","high","xhigh","max"]);function n(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}function o(a){async function b(b){let c=n().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,g.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let f=await a.resolveSessionPath(b);if(!f)return null;let h=e.SessionManager.open(f);return(0,g.$u)(h.getEntries(),b,f)}async function c(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 d(b){let c=a.getSession(b.parentSessionId);if(!c?.isAlive()){let d=await a.resolveSessionPath(b.parentSessionId);if(!d)throw Error(`Parent session not found: ${b.parentSessionId}`);c=await a.reopenSession(b.parentSessionId,d)}if(await c.waitUntilReady(),!c.isAlive())throw Error(`Parent session is no longer available: ${b.parentSessionId}`);await c.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:(0,f.J8)(b),display:!0,details:(0,f.o2)(b)},{deliverAs:"followUp",triggerTurn:!0})}async function m(b){let c=a.getSession(b);if(!c?.isAlive()||!c.isRunning())throw Error("Subagent is not running");let d=n().get(b);d&&(d.abortRequested=!0),await c.inner.abort()}return{extensionRuntime:{start:async function(b){if(!(a.isBuiltInSubagentsEnabled??l.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 f=function(a){let b=(globalThis.__piSubagentStartingCounts||(globalThis.__piSubagentStartingCounts=new Map),globalThis.__piSubagentStartingCounts),c=[...n().values()].filter(b=>b.run.parentSessionId===a&&("starting"===b.run.status||"running"===b.run.status)).length,d=b.get(a)??0;if(c+d>=4)throw Error("A session can run at most 4 subagents at once");return b.set(a,d+1),()=>{let c=(b.get(a)??1)-1;c>0?b.set(a,c):b.delete(a)}}(c);try{let f,l,m=(0,g.rh)(d.cwd,b.profile);if(!m)throw Error(`Unknown or disabled subagent profile: ${b.profile}`);let o=b.runInBackground??m.runInBackground,q=b.inheritContext??m.inheritContext,r=b.maxTurns??m.maxTurns;if(void 0!==r&&(!Number.isFinite(r)||r<0))throw Error("max_turns must be a non-negative number");let s=r&&r>0?Math.floor(r):void 0,t=b.thinking??m.thinking??d.inner.agent.state?.thinkingLevel;if(t&&!p.has(t))throw Error(`Invalid subagent thinking level: ${t}`);let u=(0,e.getAgentDir)(),v=d.inner.modelRuntime,w=e.SettingsManager.create(d.cwd,u),x=q?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
5
- ${f=d.inner.sessionManager.buildSessionContext().messages,(l=JSON.stringify(f)).length<=5e4?l:`${l.slice(0,5e4)}
6
- [Parent context truncated]`}`:void 0,y=(0,i.vH)(d.cwd,b.inputFiles??[]),z=(0,h.r)({profileSystemPrompt:m.systemPrompt,tools:m.tools,loadSkills:m.loadSkills,loadExtensions:m.loadExtensions,task:(0,i.jN)(b.task,y),inheritedParentContext:x}),{chatOnly:A,appendSystemPrompt:B,delegatedTask:C}=z;A||(0,e.initTheme)();let D=await (0,e.createAgentSessionServices)({cwd:d.cwd,agentDir:u,modelRuntime:v,settingsManager:w,resourceLoaderOptions:{noExtensions:!m.loadExtensions,noSkills:!m.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...A?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:B},...m.loadExtensions||m.loadSkills?{resourceLoaderReloadOptions:(0,k.Fk)(d.cwd,u)}:{}}),E=m.loadExtensions?D.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],F=(0,j.wQ)((0,g.I6)(m.tools,E),w.getDefaultTools()),G=e.SessionManager.create(d.cwd,void 0,{parentSession:d.sessionFile}),H=new Date().toISOString(),I={version:1,parentSessionId:c,parentSessionPath:d.sessionFile,parentToolCallId:b.parentToolCallId,profile:m.name,description:b.description.trim()||m.displayName,task:b.task,runInBackground:o,createdAt:H,resourceSnapshot:{version:1,appendSystemPrompt:[...B],tools:[...F],loadSkills:m.loadSkills,loadExtensions:m.loadExtensions}};G.appendCustomEntry(g.tP,I),G.appendSessionInfo(I.description);let J=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}`)}(v,b.model??m.model),K=d.inner.model,{session:L}=await (0,e.createAgentSessionFromServices)({services:D,sessionManager:G,model:J??K,...t?{thinkingLevel:t}:{},tools:F,excludeTools:[...g.st]});a.registerSession(L,{...void 0!==z.exactSystemPrompt?{exactSystemPrompt:z.exactSystemPrompt}:{},chatOnly:A});let M={sessionId:L.sessionId,sessionPath:L.sessionFile??G.getSessionFile()??"",parentSessionId:c,parentToolCallId:b.parentToolCallId,profile:m.name,description:I.description,task:b.task,runInBackground:o,status:"running",createdAt:H},N=0,O=!1,P=!1,Q=s?L.subscribe(a=>{"turn_end"===a.type&&(N+=1,!P&&N>=s?(P=!0,L.steer("You have reached your turn limit. Wrap up immediately and provide your final answer now.")):P&&N>=s+1&&(O=!0,L.abort()))}):()=>{},R={run:M,completion:Promise.resolve(M),abortRequested:!1};n().set(M.sessionId,R),b.onUpdate?.(M),a.invalidateSessionList();let S=()=>{R.abortRequested=!0,L.abort()};return o||b.signal?.addEventListener("abort",S,{once:!0}),R.completion=(async()=>{let c;try{await L.prompt(C,{source:"rpc",...A?{preflightResult:a=>{a&&L.agent.state&&(L.agent.state.systemPrompt=m.systemPrompt)}}:{}});let a=L.getLastAssistantText()?.trim(),b=R.abortRequested&&!O;c={...M,status:b?"aborted":"completed",completedAt:new Date().toISOString(),...a?{result:a}:{}}}catch(e){let a=L.getLastAssistantText()?.trim(),d=R.abortRequested||b.signal?.aborted;c={...M,status:d?"aborted":O?"completed":"failed",completedAt:new Date().toISOString(),...a?{result:a}:{},...!d&&!O?{error:e instanceof Error?e.message:String(e)}:{}}}finally{Q(),b.signal?.removeEventListener("abort",S)}let d={version:1,status:c.status,completedAt:c.completedAt,...c.result?{result:c.result}:{},...c.error?{error:c.error}:{}};return G.appendCustomEntry(g.pv,d),R.run=c,b.onUpdate?.(c),n().delete(M.sessionId),a.invalidateSessionList(),a.notifyRunningChange(),c})(),{run:M,completion:R.completion}}finally{f()}},get:b,steer:c,notifyParent:d},get:b,steer:c,abort:m}}d()}catch(a){d(a)}})},20644:(a,b,c)=>{c.d(b,{r:()=>d});function d(a){let b=0===a.tools.length&&!a.loadSkills&&!a.loadExtensions,c=[a.profileSystemPrompt];return a.inheritedParentContext&&!b&&c.push(a.inheritedParentContext),{chatOnly:b,appendSystemPrompt:c,delegatedTask:a.inheritedParentContext&&b?`${a.task}
4
+ - "blocked" when only the user can unblock you.`;function f(a){return`${a}.goal.json`}function g(a){let b=f(a);if(!(0,d.existsSync)(b))return h();try{var c;let a=JSON.parse((0,d.readFileSync)(b,"utf8"));if(!a||1!==a.version||!a.state||"object"!=typeof a.state)return h();let e=a.state;return{status:(c=e.status,["idle","running","paused","blocked","budget_limited","complete"].includes(c)?c:"idle"),goalText:"string"==typeof e.goalText?e.goalText:null,turnsUsed:Number.isFinite(e.turnsUsed)?e.turnsUsed:0,turnsLimit:Number.isFinite(e.turnsLimit)?e.turnsLimit:10,noProgressTurns:Number.isFinite(e.noProgressTurns)?e.noProgressTurns:0,noProgressLimit:Number.isFinite(e.noProgressLimit)?e.noProgressLimit:4,tokensUsed:Number.isFinite(e.tokensUsed)?e.tokensUsed:0,tokenBudget:null===e.tokenBudget||Number.isFinite(e.tokenBudget)?e.tokenBudget??null:null,timeUsedSeconds:Number.isFinite(e.timeUsedSeconds)?e.timeUsedSeconds:0,startedAt:Number.isFinite(e.startedAt)?e.startedAt:void 0,updatedAt:Number.isFinite(e.updatedAt)?e.updatedAt:void 0}}catch{return h()}}function h(){return{status:"idle",goalText:null,turnsUsed:0,turnsLimit:10,noProgressTurns:0,noProgressLimit:4,tokensUsed:0,tokenBudget:null,timeUsedSeconds:0}}function i(a,b){let c=f(a),e=`${c}.tmp`;try{(0,d.writeFileSync)(e,JSON.stringify({version:1,state:b}),{encoding:"utf8",mode:384}),(0,d.renameSync)(e,c)}catch{try{(0,d.rmSync)(e,{force:!0})}catch{}}}class j{constructor(a){this.continuationArmed=!1,this.turnStartMs=0,this.onChanged=null,this.state=a?g(a):h()}hydrate(a){this.state={...a}}getState(){return{...this.state}}isRunning(){return"running"===this.state.status}hasActiveGoal(){return"idle"!==this.state.status}isContinuable(){return"running"===this.state.status}isContinuationArmed(){return this.continuationArmed}armContinuation(){this.continuationArmed=!0}disarmContinuation(){this.continuationArmed=!1}onAgentStart(){this.continuationArmed=!1,this.turnStartMs=Date.now()}setOnChanged(a){this.onChanged=a}commit(a){a.updatedAt=Date.now(),this.state=a,this.onChanged?.(this.getState())}start(a,b=null){let c=Date.now(),d=b??this.state.tokenBudget??null,e={status:"running",goalText:a.trim(),turnsUsed:0,turnsLimit:this.state.turnsLimit,noProgressTurns:0,noProgressLimit:this.state.noProgressLimit,tokensUsed:0,tokenBudget:d,timeUsedSeconds:0,startedAt:c,updatedAt:c};return this.commit(e),this.getState()}pause(){return"running"!==this.state.status||this.commit({...this.state,status:"paused"}),this.getState()}resume(){return"paused"!==this.state.status&&"blocked"!==this.state.status||this.commit({...this.state,status:"running"}),this.getState()}stop(){if("idle"===this.state.status)return this.getState();let a=h();return a.turnsLimit=this.state.turnsLimit,a.noProgressLimit=this.state.noProgressLimit,this.commit(a),this.continuationArmed=!1,this.getState()}edit(a){if("idle"===this.state.status)return this.getState();let b="complete"===this.state.status||"budget_limited"===this.state.status?"running":this.state.status;return this.commit({...this.state,goalText:a.trim(),status:b}),this.getState()}settleTurn(a,b,c){if("running"!==this.state.status)return{verdict:{action:"continue"},state:this.getState()};let d=(a??"").toLowerCase(),e=this.turnStartMs>0?Math.max(0,Math.round((Date.now()-this.turnStartMs)/1e3)):0,f=this.state.tokensUsed+Math.max(0,b),g=this.state.timeUsedSeconds+e,h=this.state.turnsUsed+1;if(d.includes("[goal: complete]")||/(?:^|\n|[.!?]\s+)(?:goal(?:\s+is)?\s+complete|goal\s+complete)\b/.test(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"complete"}),{verdict:{action:"complete"},state:this.getState()}}if(function(a){let b;if(a.includes("[goal: blocked]")||a.includes("goal blocked"))return!0;let c=/(?:^|[^a-z])blocked\s*:/g;for(;null!==(b=c.exec(a));){let c=a.slice(0,b.index).trimEnd();if(!/\bnot$/.test(c))return!0}return!1}(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}}let i=0===c?this.state.noProgressTurns+1:0;return null!==this.state.tokenBudget&&f>=this.state.tokenBudget?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"budget_limited"}),{verdict:{action:"budget_limited"},state:this.getState()}):i>=this.state.noProgressLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}):h>=this.state.turnsLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"paused"}),{verdict:{action:"pause"},state:this.getState()}):(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i}),{verdict:{action:"continue"},state:this.getState()})}}},7667:(a,b,c)=>{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}}},11301:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{hH:()=>s,oH:()=>r,wF:()=>q});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let t=new Set([400,401,402,403,404,406,408,409,413,422,429,451,500,502,503,504]),u=new Set(["opencode-zen-external","opencode-zen-switch","opencode-zen-runtime","opencode-zen-sync"]);function j(){return(0,f.join)((0,g.getAgentDir)(),"pi-web-error-log.json")}function k(){globalThis.__piErrorLogState||(globalThis.__piErrorLogState={loaded:!1,entries:[]});let a=globalThis.__piErrorLogState;if(!a.loaded){a.loaded=!0;try{if((0,e.existsSync)(j())){let b=JSON.parse((0,e.readFileSync)(j(),"utf8"));if(Array.isArray(b)){let c=b.filter(l).slice(-500),d=c.filter(a=>!u.has(a.source));d.length!==c.length&&p(d),a.entries=d}}}catch{a.entries=[]}}return a}function l(a){return!(!a||"object"!=typeof a||Array.isArray(a))&&"string"==typeof a.id&&"string"==typeof a.timestamp&&("error"===a.level||"warning"===a.level||"info"===a.level)&&"string"==typeof a.source&&"string"==typeof a.message}function m(a){return a.replace(/https?:\/\/[^\s/@]+:[^\s/@]+@/gi,"https://[redacted]@").replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"sk-[redacted]").replace(/\b(?:oc|opencode|zen)[_-]?[A-Za-z0-9._~-]{12,}\b/gi,"[key-redacted]").replace(/((?:api[_-]?key|token|password|secret)\s*[:=]\s*)([^\s,;]+)/gi,"$1[redacted]")}function n(a){return a.length>2e4?`${a.slice(0,2e4)}…`:a}function o(a){let b=a.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b|\b(4\d{2}|5\d{2})\b/i),c=Number(b?.[1]??b?.[2]??b?.[3]);return t.has(c)?c:void 0}function p(a){try{(0,h.$)(j(),JSON.stringify(a,null,2))}catch{}}function q(a){let b=k(),c=n(m(a.message.trim())),d=a.details?n(m(a.details)):void 0,e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date().toISOString(),level:a.level??"error",source:a.source??"unknown",...void 0!==a.statusCode?{statusCode:a.statusCode}:void 0!==o(c)?{statusCode:o(c)}:{},...a.provider?{provider:a.provider}:{},...a.model?{model:a.model}:{},...a.sessionId?{sessionId:a.sessionId}:{},message:c||"Unknown error",...d?{details:d}:{}};return b.entries.push(e),b.entries.length>500&&b.entries.splice(0,b.entries.length-500),p(b.entries),e}function r(a={}){let b=a.query?.trim().toLocaleLowerCase(),c=Math.min(Math.max(a.limit??200,1),500),d=void 0!==a.source&&u.has(a.source);return k().entries.filter(a=>d||!u.has(a.source)).filter(b=>void 0===a.statusCode||b.statusCode===a.statusCode).filter(b=>!a.level||b.level===a.level).filter(b=>!a.source||b.source===a.source).filter(a=>!b||[a.message,a.details,a.provider,a.model,a.source].filter(Boolean).some(a=>a.toLocaleLowerCase().includes(b))).slice().reverse().slice(0,c)}function s(){k().entries=[],p([])}d()}catch(a){d(a)}})},12568:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{s:()=>t});var e=c(75430),f=c(46753),g=c(7048),h=c(20644),i=c(99324),j=c(72498),k=c(305),l=c(27367),m=c(7667),n=c(24923),o=c(77598),p=a([e,f,g,j,k,l]);[e,f,g,j,k,l]=p.then?(await p)():p;let u=new Set(["off","minimal","low","medium","high","xhigh","max"]);function q(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}function r(){return globalThis.__piSubagentQueue||(globalThis.__piSubagentQueue=new m.V),globalThis.__piSubagentQueue}async function s(a,b){if(b)try{await (0,n.IL)(a,b.path);return}catch(a){return`Worktree retained at ${b.path}: ${a instanceof Error?a.message:String(a)}`}}function t(a){async function b(b){let d;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let e=b.parentContext.sessionManager.getSessionId(),f=await c(b.sessionId);if(!f)throw Error(`Subagent not found: ${b.sessionId}`);if(f.parentSessionId!==e)throw Error("Subagent does not belong to this parent session");if("running"===f.status||"queued"===f.status)throw Error("Subagent is already running");let h=a.getSession(e);if(!h?.isAlive())throw Error("Parent session is no longer available");let i=f.sessionPath||await a.resolveSessionPath(b.sessionId);if(!i)throw Error(`Subagent session file not found: ${b.sessionId}`);let j=a.getSession(b.sessionId);if(j?.isAlive()||(j=await a.reopenSession(b.sessionId,i)),!j.isAlive())throw Error("Subagent session is no longer available");if(j.isRunning())throw Error("Subagent is already running");let k=b.runInBackground??f.runInBackground,m={...f,parentToolCallId:b.parentToolCallId,task:b.task,description:b.description.trim()||f.description,runInBackground:k,status:"queued",completedAt:void 0,result:void 0,error:void 0},n=j.inner.sessionManager,o=new Promise(a=>{d=a}),p={run:m,completion:o,abortRequested:!1};q().set(b.sessionId,p),b.onUpdate?.(m),a.invalidateSessionList();let s=()=>{p.abortRequested=!0,"queued"===p.run.status?p.cancelQueued?.():j.inner.abort()};k||b.signal?.addEventListener("abort",s,{once:!0});let t=async()=>{let c;if(p.abortRequested){let a={...m,status:"aborted",completedAt:new Date().toISOString()};return n.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:a.completedAt}),p.run=a,q().delete(b.sessionId),d(a),a}p.run={...p.run,status:"running"},n.appendCustomEntry(g.o2,{version:1,status:"running"}),b.onUpdate?.(p.run);try{await j.inner.prompt(b.task,{source:"rpc"});let a=j.inner.getLastAssistantText()?.trim();c={...m,status:p.abortRequested?"aborted":"completed",completedAt:new Date().toISOString(),...a?{result:a}:{}}}catch(a){c={...m,status:p.abortRequested||b.signal?.aborted?"aborted":"failed",completedAt:new Date().toISOString(),...!p.abortRequested&&!b.signal?.aborted?{error:a instanceof Error?a.message:String(a)}:{}}}finally{b.signal?.removeEventListener("abort",s)}return n.appendCustomEntry(g.pv,{version:1,status:c.status,completedAt:c.completedAt,...c.result?{result:c.result}:{},...c.error?{error:c.error}:{}}),p.run=c,b.onUpdate?.(c),q().delete(b.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),c},u=r().enqueue(e,(0,l.hd)().maxConcurrent,t,c=>{"queued"===c&&n.appendCustomEntry(g.o2,{version:1,status:"queued"}),p.run={...p.run,status:c},b.onUpdate?.(p.run),a.invalidateSessionList()},()=>{if("queued"!==p.run.status)return;let c={...m,status:"aborted",completedAt:new Date().toISOString()};n.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:c.completedAt}),p.run=c,b.onUpdate?.(c),q().delete(b.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d(c)});return p.cancelQueued=u.cancel,u.promise.then(d,a=>d({...m,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)})),{run:p.run,completion:o}}async function c(b){let c=q().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,g.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let f=await a.resolveSessionPath(b);if(!f)return null;let h=e.SessionManager.open(f);return(0,g.$u)(h.getEntries(),b,f)}async function d(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 m(b){let c=a.getSession(b.parentSessionId);if(!c?.isAlive()){let d=await a.resolveSessionPath(b.parentSessionId);if(!d)throw Error(`Parent session not found: ${b.parentSessionId}`);c=await a.reopenSession(b.parentSessionId,d)}if(await c.waitUntilReady(),!c.isAlive())throw Error(`Parent session is no longer available: ${b.parentSessionId}`);await c.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:(0,f.J8)(b),display:!0,details:(0,f.o2)(b)},{deliverAs:"followUp",triggerTurn:!0})}async function p(b){let c=a.getSession(b),d=q().get(b);if(d?.run.status==="queued"){if(d.abortRequested=!0,!d.cancelQueued?.())throw Error("Subagent is no longer queued");return}if(!c?.isAlive()||!c.isRunning())throw Error("Subagent is not running");d&&(d.abortRequested=!0),await c.inner.abort()}return{extensionRuntime:{start:async function(b){let c;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let d=b.parentContext.sessionManager.getSessionId(),f=a.getSession(d);if(!f?.isAlive())throw Error("Parent session is no longer available");if(!f.sessionFile)throw Error("Parent session must be persisted before starting a subagent");try{let m,p,t,v=(0,g.rh)(f.cwd,b.profile);if(!v)throw Error(`Unknown or disabled subagent profile: ${b.profile}`);let w=b.runInBackground??v.runInBackground,x="off"===v.isolation?void 0:b.isolation??v.isolation;"worktree"===x&&(c=await (0,n.l)(f.cwd,`pi-web-agent-${(0,o.randomUUID)()}`));let y=c?.path??f.cwd,z=b.inheritContext??v.inheritContext,A=b.maxTurns??v.maxTurns;if(void 0!==A&&(!Number.isFinite(A)||A<0))throw Error("max_turns must be a non-negative number");let B=A&&A>0?Math.floor(A):void 0,C=b.thinking??v.thinking??f.inner.agent.state?.thinkingLevel;if(C&&!u.has(C))throw Error(`Invalid subagent thinking level: ${C}`);let D=(0,e.getAgentDir)(),E=f.inner.modelRuntime,F=e.SettingsManager.create(y,D),G=z?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
5
+ ${p=f.inner.sessionManager.buildSessionContext().messages,(t=JSON.stringify(p)).length<=5e4?t:`${t.slice(0,5e4)}
6
+ [Parent context truncated]`}`:void 0,H=(0,i.vH)(f.cwd,b.inputFiles??[]),I=(0,h.r)({profileSystemPrompt:v.systemPrompt,tools:v.tools,loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,promptMode:v.promptMode,task:(0,i.jN)(b.task,H),inheritedParentContext:G}),{chatOnly:J,appendSystemPrompt:K,delegatedTask:L}=I;J||(0,e.initTheme)();let M=await (0,e.createAgentSessionServices)({cwd:y,agentDir:D,modelRuntime:E,settingsManager:F,resourceLoaderOptions:{noExtensions:!v.loadExtensions,noSkills:!v.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...J||void 0!==I.exactSystemPrompt?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:K},...v.loadExtensions||v.loadSkills?{resourceLoaderReloadOptions:(0,j.Fk)(y,D)}:{}}),N=v.loadExtensions?v.extensionTools?.length?(0,g.gY)(M.resourceLoader.getExtensions().extensions,v.extensionTools):M.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],O=(0,k.wQ)((0,g.I6)(v.tools,N),F.getDefaultTools()),P=c?e.SessionManager.create(y,void 0,{parentSession:f.sessionFile}):e.SessionManager.create(f.cwd,void 0,{parentSession:f.sessionFile}),Q=new Date().toISOString(),R={version:1,parentSessionId:d,parentSessionPath:f.sessionFile,parentToolCallId:b.parentToolCallId,profile:v.name,description:b.description.trim()||v.displayName,task:b.task,runInBackground:w,createdAt:Q,resourceSnapshot:{version:1,appendSystemPrompt:[...K],tools:[...O],loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,...void 0!==I.exactSystemPrompt?{exactSystemPrompt:I.exactSystemPrompt}:{}},...c?{worktreePath:c.path,worktreeBranch:c.branch}:{}};P.appendCustomEntry(g.tP,R),P.appendSessionInfo(R.description);let S=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}`)}(E,b.model??v.model),T=f.inner.model,{session:U}=await (0,e.createAgentSessionFromServices)({services:M,sessionManager:P,model:S??T,...C?{thinkingLevel:C}:{},tools:O,excludeTools:[...g.st]});a.registerSession(U,{...void 0!==I.exactSystemPrompt?{exactSystemPrompt:I.exactSystemPrompt}:{},chatOnly:J});let V={sessionId:U.sessionId,sessionPath:U.sessionFile??P.getSessionFile()??"",parentSessionId:d,parentToolCallId:b.parentToolCallId,profile:v.name,description:R.description,task:b.task,runInBackground:w,status:"queued",createdAt:Q,...c?{worktreePath:c.path,worktreeBranch:c.branch}:{}},W=0,X=!1,Y=!1,Z=B?U.subscribe(a=>{"turn_end"===a.type&&(W+=1,!Y&&W>=B?(Y=!0,U.steer("You have reached your turn limit. Wrap up immediately and provide your final answer now.")):Y&&W>=B+1&&(X=!0,U.abort()))}):()=>{},$=new Promise(a=>{m=a}),_={run:V,completion:$,abortRequested:!1};q().set(V.sessionId,_),b.onUpdate?.(V),a.invalidateSessionList();let aa=()=>{_.abortRequested=!0,"queued"===_.run.status?_.cancelQueued?.():U.abort()};w||b.signal?.addEventListener("abort",aa,{once:!0});let ab=async()=>{let d;if(_.abortRequested){let d={...V,status:"aborted",completedAt:new Date().toISOString()};return P.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:d.completedAt}),await s(f.cwd,c),_.run=d,b.onUpdate?.(d),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d}_.run={..._.run,status:"running"},P.appendCustomEntry(g.o2,{version:1,status:"running"}),b.onUpdate?.(_.run),a.invalidateSessionList();try{await U.prompt(L,{source:"rpc",...J?{preflightResult:a=>{a&&U.agent.state&&(U.agent.state.systemPrompt=v.systemPrompt)}}:{}});let a=U.getLastAssistantText()?.trim(),b=_.abortRequested&&!X;d={...V,status:b?"aborted":"completed",completedAt:new Date().toISOString(),...a?{result:a}:{}}}catch(e){let a=U.getLastAssistantText()?.trim(),c=_.abortRequested||b.signal?.aborted;d={...V,status:c?"aborted":X?"completed":"failed",completedAt:new Date().toISOString(),...a?{result:a}:{},...!c&&!X?{error:e instanceof Error?e.message:String(e)}:{}}}finally{Z(),b.signal?.removeEventListener("abort",aa)}let e=await s(f.cwd,c);e&&(d={...d,worktreeCleanupError:e});let h={version:1,status:d.status,completedAt:d.completedAt,...d.result?{result:d.result}:{},...d.error?{error:d.error}:{},...d.worktreeCleanupError?{worktreeCleanupError:d.worktreeCleanupError}:{}};return P.appendCustomEntry(g.pv,h),_.run=d,b.onUpdate?.(d),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d},ac=async()=>{if("queued"!==_.run.status)return;let d={...V,status:"aborted",completedAt:new Date().toISOString()},e=await s(f.cwd,c),h=e?{...d,worktreeCleanupError:e}:d;P.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:h.completedAt,...e?{worktreeCleanupError:e}:{}}),_.run=h,b.onUpdate?.(h),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),m(h)},ad=r().enqueue(d,(0,l.hd)().maxConcurrent,ab,c=>{"queued"===c&&P.appendCustomEntry(g.o2,{version:1,status:"queued"}),b.onUpdate?.({..._.run,status:c}),_.run={..._.run,status:c},a.invalidateSessionList()},ac);return _.cancelQueued=ad.cancel,ad.promise.then(m,a=>{m({...V,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)})}),{run:_.run,completion:_.completion}}catch(a){if(c)try{await (0,n.IL)(f.cwd,c.path)}catch{}throw a}},resume:b,get:c,steer:d,notifyParent:m},get:c,steer:d,abort:p}}d()}catch(a){d(a)}})},20644:(a,b,c)=>{c.d(b,{r:()=>d});function d(a){let b=0===a.tools.length&&!a.loadSkills&&!a.loadExtensions,c="replace"===a.promptMode,d=[a.profileSystemPrompt];return a.inheritedParentContext&&!b&&d.push(a.inheritedParentContext),{chatOnly:b,appendSystemPrompt:d,delegatedTask:a.inheritedParentContext&&b?`${a.task}
7
7
 
8
- ${a.inheritedParentContext}`:a.task,...b?{exactSystemPrompt:a.profileSystemPrompt}:{}}}},21560:(a,b,c)=>{c.d(b,{b5:()=>j,dS:()=>h,vw:()=>i});var d=c(41761);let e="pi-web:tool-selection",f=new Set(d.C1);function g(a){if(!("object"!=typeof a||null===a||Array.isArray(a))&&!(1!==a.version||!Array.isArray(a.tools)||a.tools.some(a=>"string"!=typeof a||!f.has(a))))return[...new Set(a.tools)]}function h(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=g(c.data);if(void 0!==d)return d}}function i(a){let b=g({version:1,tools:a});if(void 0===b)throw Error("toolNames must contain only built-in tool names");return b}function j(a,b){a.appendCustomEntry(e,{version:1,tools:[...b]})}},27367:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{M6:()=>j,N:()=>m,ef:()=>n,hd:()=>l});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);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()){let b=k(a);return{builtInEnabled:!0===b.builtInEnabled}}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)),{builtInEnabled:a}}g=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},28967:(a,b,c)=>{function d(){return globalThis.__piModelsCacheState||(globalThis.__piModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__piModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a,b){let c=d(),e=c.entries.get(a);if(e&&e.expiresAt>Date.now())return Promise.resolve(e.data);if(e)return c.inFlight.has(a)||g(c,a,b).catch(()=>{}),Promise.resolve(e.data);let f=c.inFlight.get(a);return f||g(c,a,b)}function g(a,b,c){let d=a.inFlight.get(b);if(d)return d;let e=a.generation,f=Promise.resolve().then(c).then(c=>{if(a.generation===e&&a.inFlight.get(b)===f){let d=Date.now();for(let[b,c]of a.entries)c.expiresAt<=d&&a.entries.delete(b);for(;a.entries.size>=32;){let b=a.entries.keys().next().value;if(void 0===b)break;a.entries.delete(b)}a.entries.set(b,{data:c,expiresAt:d+6e4})}return c}).finally(()=>{a.inFlight.get(b)===f&&a.inFlight.delete(b)});return a.inFlight.set(b,f),f}c.d(b,{k:()=>e,r:()=>f})},30590:(a,b,c)=>{c.d(b,{o:()=>d});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}}},36193:(a,b,c)=>{c.d(b,{LD:()=>m,kP:()=>o,ni:()=>n});var d=c(67264);function e(a){if(!a)return[];let b=[];for(let c of a){let a=function(a){let b=a.trim();if(!b)return null;let c=b.indexOf("="),d=b.indexOf("(");if(c>0&&(d<0||c<d)){let a=b.slice(0,c).trim();return a?{tool:a,subject:b.slice(c+1),literal:!0}:null}if(d>=0&&b.endsWith(")")){let a=b.slice(0,d).trim();return a?{tool:a,subject:b.slice(d+1,-1)}:null}return{tool:b}}(c);a&&b.push(a)}return b}function f(a){return void 0===a.subject?a.tool:a.literal?`${a.tool}=${a.subject}`:`${a.tool}(${a.subject})`}function g(a){return a.includes("*")||a.includes("?")}function h(a,b){return void 0===b.subject||""!==a&&(b.literal||!g(b.subject)?a===b.subject:(function(a){let b="^";for(let c of a)"*"===c?b+=".*":"?"===c?b+=".":b+=c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return RegExp(b+"$")})(b.subject).test(a))}function i(a,b){return a.toLowerCase()===b.toLowerCase()}function j(a,b,c){for(let d of a)if(i(d.tool,b)&&h(c,d))return!0;return!1}function k(a){let b=a.trim();return!!b&&!!(/\$\(/.test(b)||/`/.test(b)||/(^|\s)(python|python3|node|ruby|perl|php)\s+-[a-z]*c(\s|$)/i.test(b)||/(^|\s)(sh|bash|zsh)\s+-c(\s|$)/i.test(b)||/(^|\s)(sudo|su)\s/i.test(b)||/;\s*[a-z]/i.test(b)||/\|\s*(sh|bash|zsh|python|python3|node)\b/i.test(b)||/\|\s*tee\b/i.test(b))}let l=["ls","cat","head","tail","grep","rg","find","wc","echo","pwd","cd","git status","git diff","git log","git branch","git remote","git stash list","git show","git ls-files","which","type","env","file","stat","du","df","history","man","less","more","tree","git diff --","git log --","curl -I","curl --head"];function m(a,b,c={}){let e=c.mode??"auto",f=c.readOnly??d.MJ.has(b.toLowerCase()),n=function(a,b){if("bash"===a.toLowerCase()){let a=b?.command;return"string"==typeof a&&a.trim()?`command:${a.trim()}`:""}let c=b??{},d="string"==typeof c.source_path?c.source_path:"",e="string"==typeof c.destination_path?c.destination_path:"";if(d&&e)return e!==d?`${d}\u0000${e}`:d;for(let a of["path","file_path","file","glob","pattern","directory"]){let b=c[a];if("string"==typeof b&&b)return b}return""}(b,c.args),o="bash"===b.toLowerCase(),p=o&&n.startsWith("command:")?n.slice(8):"";if(j(a.deny,b,n))return"deny";if(o&&p){let c=k(p);return j(a.allow,b,n)&&!c?"allow":j(a.ask,b,n)?"ask":c?a.allow.some(a=>i(a.tool,b)&&void 0!==a.subject&&!g(a.subject)&&h(n,a))||"yolo"===e?"allow":"ask":!function(a){let b=a.trim();if(!b||k(b)||/[;&|>]/.test(b))return!1;let c=b.toLowerCase();for(let a of l)if(c===a||c.startsWith(a+" "))return!0;return!1}(p)?"ask"===e?"ask":"allow":"allow"}return j(a.allow,b,n)?"allow":j(a.ask,b,n)?"ask":f?"allow":"ask"===e?"ask":"allow"}function n(a){return{allow:e(a?.allow),ask:e(a?.ask),deny:e(a?.deny)}}function o(a){return{allow:a.allow.map(f),ask:a.ask.map(f),deny:a.deny.map(f)}}},43671:(a,b,c)=>{c.d(b,{Gc:()=>g,ov:()=>h,pj:()=>i,wx:()=>j});var d=c(55511),e=c(29021);function f(a){return`${a}.queue.json`}function g(a,b,c){return{id:(0,d.randomUUID)(),kind:a,text:b,...c&&c.length>0?{images:c}:{},queuedAt:Date.now()}}function h(a){let b=f(a);if(!(0,e.existsSync)(b))return[];try{let a=JSON.parse((0,e.readFileSync)(b,"utf8"));if(!a||1!==a.version||!Array.isArray(a.entries))return[];return a.entries.filter(a=>!!a&&("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text)}catch{return[]}}function i(a,b){if(!a)return;let c=f(a),g=`${c}.tmp-${process.pid}-${(0,d.randomUUID)()}`;try{(0,e.writeFileSync)(g,JSON.stringify({version:1,entries:b}),"utf8"),(0,e.renameSync)(g,c)}catch(a){try{(0,e.rmSync)(g,{force:!0})}catch{}console.error(`[pi-web] failed to persist queue sidecar ${c}:`,a instanceof Error?a.message:String(a))}}function j(a){try{(0,e.rmSync)(f(a),{force:!0})}catch{}}},44271:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(53303),g=c(75430),h=c(84229),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
8
+ ${a.inheritedParentContext}`:a.task,...b||c?{exactSystemPrompt:a.profileSystemPrompt}:{}}}},21560:(a,b,c)=>{c.d(b,{b5:()=>j,dS:()=>h,vw:()=>i});var d=c(41761);let e="pi-web:tool-selection",f=new Set(d.C1);function g(a){if(!("object"!=typeof a||null===a||Array.isArray(a))&&!(1!==a.version||!Array.isArray(a.tools)||a.tools.some(a=>"string"!=typeof a||!f.has(a))))return[...new Set(a.tools)]}function h(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=g(c.data);if(void 0!==d)return d}}function i(a){let b=g({version:1,tools:a});if(void 0===b)throw Error("toolNames must contain only built-in tool names");return b}function j(a,b){a.appendCustomEntry(e,{version:1,tools:[...b]})}},27367:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{M6:()=>j,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,c,d;let e=k(a);return c=!0===e.builtInEnabled,b=e.maxConcurrent,d="number"==typeof b&&Number.isInteger(b)&&b>=1&&b<=p?b:10,Object.defineProperty({builtInEnabled:c},"maxConcurrent",{value:d,enumerable:!1,configurable:!0})}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)}})},28967:(a,b,c)=>{function d(){return globalThis.__piModelsCacheState||(globalThis.__piModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__piModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a,b){let c=d(),e=c.entries.get(a);if(e&&e.expiresAt>Date.now())return Promise.resolve(e.data);if(e)return c.inFlight.has(a)||g(c,a,b).catch(()=>{}),Promise.resolve(e.data);let f=c.inFlight.get(a);return f||g(c,a,b)}function g(a,b,c){let d=a.inFlight.get(b);if(d)return d;let e=a.generation,f=Promise.resolve().then(c).then(c=>{if(a.generation===e&&a.inFlight.get(b)===f){let d=Date.now();for(let[b,c]of a.entries)c.expiresAt<=d&&a.entries.delete(b);for(;a.entries.size>=32;){let b=a.entries.keys().next().value;if(void 0===b)break;a.entries.delete(b)}a.entries.set(b,{data:c,expiresAt:d+6e4})}return c}).finally(()=>{a.inFlight.get(b)===f&&a.inFlight.delete(b)});return a.inFlight.set(b,f),f}c.d(b,{k:()=>e,r:()=>f})},30590:(a,b,c)=>{c.d(b,{o:()=>d});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}}},36193:(a,b,c)=>{c.d(b,{LD:()=>m,kP:()=>o,ni:()=>n});var d=c(67264);function e(a){if(!a)return[];let b=[];for(let c of a){let a=function(a){let b=a.trim();if(!b)return null;let c=b.indexOf("="),d=b.indexOf("(");if(c>0&&(d<0||c<d)){let a=b.slice(0,c).trim();return a?{tool:a,subject:b.slice(c+1),literal:!0}:null}if(d>=0&&b.endsWith(")")){let a=b.slice(0,d).trim();return a?{tool:a,subject:b.slice(d+1,-1)}:null}return{tool:b}}(c);a&&b.push(a)}return b}function f(a){return void 0===a.subject?a.tool:a.literal?`${a.tool}=${a.subject}`:`${a.tool}(${a.subject})`}function g(a){return a.includes("*")||a.includes("?")}function h(a,b){return void 0===b.subject||""!==a&&(b.literal||!g(b.subject)?a===b.subject:(function(a){let b="^";for(let c of a)"*"===c?b+=".*":"?"===c?b+=".":b+=c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return RegExp(b+"$")})(b.subject).test(a))}function i(a,b){return a.toLowerCase()===b.toLowerCase()}function j(a,b,c){for(let d of a)if(i(d.tool,b)&&h(c,d))return!0;return!1}function k(a){let b=a.trim();return!!b&&!!(/\$\(/.test(b)||/`/.test(b)||/(^|\s)(python|python3|node|ruby|perl|php)\s+-[a-z]*c(\s|$)/i.test(b)||/(^|\s)(sh|bash|zsh)\s+-c(\s|$)/i.test(b)||/(^|\s)(sudo|su)\s/i.test(b)||/;\s*[a-z]/i.test(b)||/\|\s*(sh|bash|zsh|python|python3|node)\b/i.test(b)||/\|\s*tee\b/i.test(b))}let l=["ls","cat","head","tail","grep","rg","find","wc","echo","pwd","cd","git status","git diff","git log","git branch","git remote","git stash list","git show","git ls-files","which","type","env","file","stat","du","df","history","man","less","more","tree","git diff --","git log --","curl -I","curl --head"];function m(a,b,c={}){let e=c.mode??"auto",f=c.readOnly??d.MJ.has(b.toLowerCase()),n=function(a,b){if("bash"===a.toLowerCase()){let a=b?.command;return"string"==typeof a&&a.trim()?`command:${a.trim()}`:""}let c=b??{},d="string"==typeof c.source_path?c.source_path:"",e="string"==typeof c.destination_path?c.destination_path:"";if(d&&e)return e!==d?`${d}\u0000${e}`:d;for(let a of["path","file_path","file","glob","pattern","directory"]){let b=c[a];if("string"==typeof b&&b)return b}return""}(b,c.args),o="bash"===b.toLowerCase(),p=o&&n.startsWith("command:")?n.slice(8):"";if(j(a.deny,b,n))return"deny";if(o&&p){let c=k(p);return j(a.allow,b,n)&&!c?"allow":j(a.ask,b,n)?"ask":c?a.allow.some(a=>i(a.tool,b)&&void 0!==a.subject&&!g(a.subject)&&h(n,a))||"yolo"===e?"allow":"ask":!function(a){let b=a.trim();if(!b||k(b)||/[;&|>]/.test(b))return!1;let c=b.toLowerCase();for(let a of l)if(c===a||c.startsWith(a+" "))return!0;return!1}(p)?"ask"===e?"ask":"allow":"allow"}return j(a.allow,b,n)?"allow":j(a.ask,b,n)?"ask":f?"allow":"ask"===e?"ask":"allow"}function n(a){return{allow:e(a?.allow),ask:e(a?.ask),deny:e(a?.deny)}}function o(a){return{allow:a.allow.map(f),ask:a.ask.map(f),deny:a.deny.map(f)}}},43671:(a,b,c)=>{c.d(b,{Gc:()=>g,ov:()=>h,pj:()=>i,wx:()=>j});var d=c(55511),e=c(29021);function f(a){return`${a}.queue.json`}function g(a,b,c){return{id:(0,d.randomUUID)(),kind:a,text:b,...c&&c.length>0?{images:c}:{},queuedAt:Date.now()}}function h(a){let b=f(a);if(!(0,e.existsSync)(b))return[];try{let a=JSON.parse((0,e.readFileSync)(b,"utf8"));if(!a||1!==a.version||!Array.isArray(a.entries))return[];return a.entries.filter(a=>!!a&&("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text)}catch{return[]}}function i(a,b){if(!a)return;let c=f(a),g=`${c}.tmp-${process.pid}-${(0,d.randomUUID)()}`;try{(0,e.writeFileSync)(g,JSON.stringify({version:1,entries:b}),"utf8"),(0,e.renameSync)(g,c)}catch(a){try{(0,e.rmSync)(g,{force:!0})}catch{}console.error(`[pi-web] failed to persist queue sidecar ${c}:`,a instanceof Error?a.message:String(a))}}function j(a){try{(0,e.rmSync)(f(a),{force:!0})}catch{}}},44271:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(53303),g=c(75430),h=c(84229),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
9
9
  ... ${this.omittedBytes} bytes omitted ...
10
10
 
11
11
  `)),a.push(...this.tail),Buffer.concat(a).toString("utf-8")}reset(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}constructor(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}}function j(a){if("win32"===process.platform)try{(0,e.spawn)("taskkill",["/F","/T","/PID",String(a)],{stdio:"ignore",detached:!0,windowsHide:!0})}catch{}else try{process.kill(-a,"SIGKILL")}catch{try{process.kill(a,"SIGKILL")}catch{}}}class p{spawn(a,b,c){let d,f=this.nextId++,h=(0,g.getShellConfig)(),i="stdin"===h.commandTransport,j=i?h.args:[...h.args,a],k=(0,e.spawn)(h.shell,j,{cwd:b,detached:"win32"!==process.platform,env:{...c,NO_COLOR:"1",TERM:"dumb"},stdio:["pipe","pipe","pipe"],windowsHide:!0});k.stdin?.on("error",()=>{}),i&&k.stdin?.end(a);let l=new Promise(a=>{d=a}),m={id:f,child:k,command:a,cwd:b,startedAt:Date.now(),buffer:new o,deltaBuffer:new o,exitCode:null,exited:!1,settled:l},n=a=>{m.buffer.append(a),m.deltaBuffer.append(a)};return k.stdout?.on("data",n),k.stderr?.on("data",n),k.once("exit",a=>{m.exited=!0,m.exitCode=a}),k.once("close",()=>d()),k.once("error",a=>{m.exited=!0;let b=Buffer.from(`
12
12
  [process error] ${a.message}
13
13
  `);m.buffer.append(b),m.deltaBuffer.append(b),d()}),this.processes.set(f,m),m}get(a){return this.processes.get(a)}writeStdin(a,b){let c=this.processes.get(a);if(!c)return{ok:!1,error:`No process with session_id ${a}`};if(c.exited)return{ok:!1,error:`Process ${a} has already exited`};if(!c.child.stdin||c.child.stdin.destroyed)return{ok:!1,error:`Process ${a} stdin is not available`};if("\x03"===b)try{c.child.kill("SIGINT")}catch{return{ok:!1,error:`Failed to send SIGINT to process ${a}`}}else try{c.child.stdin.write(b)}catch(b){return{ok:!1,error:`Failed to write to process ${a}: ${b}`}}return{ok:!0}}async poll(a,b){let c=this.processes.get(a);if(!c)return{output:`Process ${a} not found (it may have been cleaned up)`,exited:!0,exitCode:null};c.exited||await Promise.race([k(b),c.settled]);let d=c.deltaBuffer.toSnapshot();return c.deltaBuffer.reset(),{output:d,exited:c.exited,exitCode:c.exitCode}}kill(a){let b=this.processes.get(a);return!!b&&(b.child.pid&&j(b.child.pid),this.remove(a),!0)}remove(a){let b=this.processes.get(a);if(b&&b.child.pid&&function(a){try{return process.kill(-a,0),!0}catch(b){let a=b.code;return"EPERM"===a}}(b.child.pid))try{j(b.child.pid)}catch{}this.processes.delete(a)}cleanup(){for(let a of Array.from(this.processes.values()))!a.exited&&a.child.pid&&j(a.child.pid);this.processes.clear()}constructor(){this.processes=new Map,this.nextId=1}}function k(a){return new Promise(b=>setTimeout(b,a))}function l(a,b=250){return Math.max(b,Math.min(a,3e4))}function m(a){let b=[];if(a.command&&b.push(`$ ${a.command}`),a.output.trim()?b.push(a.output):b.push("(no new output)"),b.push(""),a.exited){let c=a.exitCode;0===c?b.push("Process exited successfully (code 0)."):null===c?b.push("Process exited (no exit code captured)."):b.push(`Process exited with code ${c}.`),b.push("No further interaction is possible. Do not call bash_io for this session.")}else null!==a.sessionId&&(b.push(`Process is still running (session_id: ${a.sessionId}).`),b.push(`Call bash_io with session_id ${a.sessionId} to poll for more output (leave chars empty) or to send input.`));return b.push(`Wall time: ${(a.wallMs/1e3).toFixed(1)}s`),b.join("\n")}function n(a){let b=(0,g.defineTool)({name:"bash",label:"Bash",description:"Execute a bash command in the current working directory. Spawns the command and waits up to yield_time_ms (default 2s) for output, then returns. If the command finishes within the wait, returns the full output and exit code. If the command is still running after the wait, returns the output collected so far plus a session_id - use bash_io with that session_id to poll for more output, send input, or interrupt. This is the primary shell tool; use it for all commands including ls, grep, find, builds, tests, and dev servers.",parameters:h.ZUJ.Object({command:h.ZUJ.String({description:"Bash command to execute"}),yield_time_ms:h.ZUJ.Optional(h.ZUJ.Integer({description:"Milliseconds to wait for output before returning (default: 2000, range: 250-30000). If the command is still running after this time, it continues in the background and a session_id is returned for bash_io."}))}),promptSnippet:"bash(command, yield_time_ms?): run any shell command; long-running ones return session_id for bash_io",promptGuidelines:["`bash` runs all shell commands. Short commands finish within yield_time_ms (default 2s) and return full output directly.","For commands still running after the wait, `bash` returns a `session_id` - poll it via `bash_io` (empty chars) or raise yield_time_ms for commands that need more time to produce output.","Poll a running process by calling `bash_io` with an empty `chars` string and the `session_id`.","Send input or Ctrl-C to a running process via `bash_io` with `chars` set to the input text or `\\u0003` for Ctrl-C.","After a process exits (exit code returned), do NOT call `bash_io` for that `session_id` again.","Like a human monitoring a long task: every few minutes poll the running process with bash_io, inspect the log, and decide whether to keep waiting, send input, or interrupt (Ctrl-C) and adjust."],async execute(b,c,d,e,g){let h,i=c.command,j=c.yield_time_ms?l(c.yield_time_ms):2e3,k=g.cwd,n=Date.now();try{h=a.spawn(i,k,(0,f.$9)(process.env))}catch(a){throw Error(`Failed to spawn command: ${a instanceof Error?a.message:String(a)}`)}e&&e({content:[{type:"text",text:`$ ${i}
14
- (spawning background process...)`}],details:{command:i,sessionId:h.id,spawning:!0}});let{output:o,exited:p,exitCode:q}=await a.poll(h.id,j),r=Date.now()-n;p&&a.remove(h.id);let s=m({output:o,exited:p,exitCode:q,sessionId:p?null:h.id,command:i,wallMs:r}),t={command:i,sessionId:p?null:h.id,exited:p,exitCode:p?q:null};return e&&e({content:[{type:"text",text:s}],details:t}),{content:[{type:"text",text:s}],details:t}}}),c=(0,g.defineTool)({name:"bash_io",label:"Interact with Background Process",description:'Interact with a background process started by bash. Can write text to the process\'s stdin, send Ctrl-C (use "\\u0003" as chars), or poll for new output (leave chars empty). Always waits yield_time_ms (default 5s) to collect output before returning. Use this to monitor long-running tasks, respond to prompts, or send additional commands.',parameters:h.ZUJ.Object({session_id:h.ZUJ.Integer({description:"The session_id returned by bash for the running process."}),chars:h.ZUJ.Optional(h.ZUJ.String({description:'Text to write to the process\'s stdin. Use "\\u0003" (Ctrl-C) to interrupt. Leave empty to just poll for output (no write). Defaults to empty.'})),yield_time_ms:h.ZUJ.Optional(h.ZUJ.Integer({description:"Milliseconds to wait for output after writing/polling (default: 5000, range: 250-30000)."}))}),promptSnippet:"bash_io(session_id, chars?, yield_time_ms?): poll or send input to a bash process",promptGuidelines:["`bash_io` interacts with a background process started by `bash` using its `session_id`.","Poll with empty `chars` to collect new output since the last poll.","Send input via `chars`; use `\\u0003` for Ctrl-C to interrupt the process.","If the process exited, `bash_io` reports the exit code and the process is cleaned up."],async execute(b,c,d,e){let f=c.session_id,g=c.chars??"",h=c.yield_time_ms?l(c.yield_time_ms,g?250:5e3):5e3,i=Date.now(),j=a.get(f);if(!j)throw Error(`No background process with session_id ${f}. The process may have exited and been cleaned up, or the ID is invalid. Use bash to start a new process.`);if(e){let a=""===g?"polling":"\x03"===g?"interrupting":"writing to";e({content:[{type:"text",text:`${a} process ${f} ($ ${j.command})`}],details:{sessionId:f,command:j.command,action:a}})}if(""!==g){let b=a.writeStdin(f,g);if(!b.ok)throw Error(b.error??"bash_io failed");await k(100)}let{output:n,exited:o,exitCode:p}=await a.poll(f,h),q=Date.now()-i;o&&a.remove(f);let r=m({output:n,exited:o,exitCode:p,sessionId:o?null:f,wallMs:q}),s={sessionId:o?null:f,exited:o,exitCode:o?p:null};return e&&e({content:[{type:"text",text:r}],details:s}),{content:[{type:"text",text:r}],details:s}}});return[b,c]}d()}catch(a){d(a)}})},46753:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l,o2:()=>j});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,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.error?{error:a.error}:{}}}function k(a){return"starting"===a.status||"running"===a.status?`Subagent ${a.sessionId} is ${a.status}.`:"completed"===a.status?a.result?.trim()||"Subagent completed without text output.":"aborted"===a.status?`Subagent ${a.sessionId} was stopped.`:"interrupted"===a.status?`Subagent ${a.sessionId} was interrupted before completion.`:`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. Use background mode for independent work and foreground mode when the result is needed immediately.
14
+ (spawning background process...)`}],details:{command:i,sessionId:h.id,spawning:!0}});let{output:o,exited:p,exitCode:q}=await a.poll(h.id,j),r=Date.now()-n;p&&a.remove(h.id);let s=m({output:o,exited:p,exitCode:q,sessionId:p?null:h.id,command:i,wallMs:r}),t={command:i,sessionId:p?null:h.id,exited:p,exitCode:p?q:null};return e&&e({content:[{type:"text",text:s}],details:t}),{content:[{type:"text",text:s}],details:t}}}),c=(0,g.defineTool)({name:"bash_io",label:"Interact with Background Process",description:'Interact with a background process started by bash. Can write text to the process\'s stdin, send Ctrl-C (use "\\u0003" as chars), or poll for new output (leave chars empty). Always waits yield_time_ms (default 5s) to collect output before returning. Use this to monitor long-running tasks, respond to prompts, or send additional commands.',parameters:h.ZUJ.Object({session_id:h.ZUJ.Integer({description:"The session_id returned by bash for the running process."}),chars:h.ZUJ.Optional(h.ZUJ.String({description:'Text to write to the process\'s stdin. Use "\\u0003" (Ctrl-C) to interrupt. Leave empty to just poll for output (no write). Defaults to empty.'})),yield_time_ms:h.ZUJ.Optional(h.ZUJ.Integer({description:"Milliseconds to wait for output after writing/polling (default: 5000, range: 250-30000)."}))}),promptSnippet:"bash_io(session_id, chars?, yield_time_ms?): poll or send input to a bash process",promptGuidelines:["`bash_io` interacts with a background process started by `bash` using its `session_id`.","Poll with empty `chars` to collect new output since the last poll.","Send input via `chars`; use `\\u0003` for Ctrl-C to interrupt the process.","If the process exited, `bash_io` reports the exit code and the process is cleaned up."],async execute(b,c,d,e){let f=c.session_id,g=c.chars??"",h=c.yield_time_ms?l(c.yield_time_ms,g?250:5e3):5e3,i=Date.now(),j=a.get(f);if(!j)throw Error(`No background process with session_id ${f}. The process may have exited and been cleaned up, or the ID is invalid. Use bash to start a new process.`);if(e){let a=""===g?"polling":"\x03"===g?"interrupting":"writing to";e({content:[{type:"text",text:`${a} process ${f} ($ ${j.command})`}],details:{sessionId:f,command:j.command,action:a}})}if(""!==g){let b=a.writeStdin(f,g);if(!b.ok)throw Error(b.error??"bash_io failed");await k(100)}let{output:n,exited:o,exitCode:p}=await a.poll(f,h),q=Date.now()-i;o&&a.remove(f);let r=m({output:n,exited:o,exitCode:p,sessionId:o?null:f,wallMs:q}),s={sessionId:o?null:f,exited:o,exitCode:o?p:null};return e&&e({content:[{type:"text",text:r}],details:s}),{content:[{type:"text",text:r}],details:s}}});return[b,c]}d()}catch(a){d(a)}})},46753:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l,o2:()=>j});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,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.error?{error:a.error}:{},...a.worktreePath?{worktreePath:a.worktreePath}:{},...a.worktreeBranch?{worktreeBranch:a.worktreeBranch}:{},...a.worktreeCleanupError?{worktreeCleanupError:a.worktreeCleanupError}:{}}}function k(a){return"starting"===a.status||"running"===a.status?`Subagent ${a.sessionId} is ${a.status}.`:"completed"===a.status?a.result?.trim()||"Subagent completed without text output.":"aborted"===a.status?`Subagent ${a.sessionId} was stopped.`:"interrupted"===a.status?`Subagent ${a.sessionId} was interrupted before completion.`:`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. Use background mode for independent work and foreground mode when the result is needed immediately.
15
15
 
16
16
  Available agent types:
17
- ${(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.","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}. Default: general-purpose.`})),prompt:e.Type.String({description:"The complete task for the subagent."}),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 and notify this session when complete."})),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."}))}),async execute(b,c,d,e,f){try{let g=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}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(g.run.runInBackground)return g.completion.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${g.run.sessionId}. You will be notified when it completes.`}],details:j(g.run)};let h=await g.completion;return{content:[{type:"text",text:k(h)}],details:j(h),..."failed"===h.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),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."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),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){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!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)=>{c.a(a,async(a,d)=>{try{c.d(b,{$9:()=>h,J1:()=>i});var e=c(75430),f=c(76760),g=a([e]);function h(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}function i(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 i;let j,k,l,m=(i=h(f.env??c,g),j="win32"===g?Object.keys(i).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",k="win32"===g?";":":",(l=i[j]??"").split(k).filter(Boolean).includes(b)||(i[j]=[b,l].filter(Boolean).join(k)),i);return d.exec(a,e,{...f,env:m})}}}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$Z:()=>R,A4:()=>L,Bp:()=>S,C4:()=>O,Fn:()=>P,HG:()=>U,OF:()=>aa,Zo:()=>W,_I:()=>M,d_:()=>V,iP:()=>$,l8:()=>Y,oA:()=>N,wW:()=>X,x8:()=>T});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(43671),l=c(28967),m=c(18904),n=c(72498),o=c(40402),p=c(46753),q=c(7048),r=c(21560),s=c(95412),t=c(12568),u=c(27367),v=c(305),w=c(78963),x=c(53303),y=c(30590),z=c(64735),A=c(36193),B=c(67264),C=c(71069),D=c(11301),E=c(4504),F=c(44271),G=a([e,f,m,n,o,p,q,t,u,v,w,x,z,D,F]);[e,f,m,n,o,p,q,t,u,v,w,x,z,D,F]=G.then?(await G)():G;let ab=new Set(["off","minimal","low","medium","high","xhigh","max"]),ac=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),ad=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),ae=new Set(["fork","clone"]),af=new Set(["get_state","abort","steer","follow_up_draft"]),ag=["read","bash","powershell","edit","write","grep","find","ls"];class ah extends e.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 ai=new ah,aj=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function H(a,b){if(0===b.length)return[];let c=new Set(ag),d=(0,v.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,w.H4)([...new Set([...d,...e])],(0,w.t0)())}class ak{constructor(a,b=""){this.inner=a,this.listeners=[],this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,A.ni)((0,z.lN)().permissionRules),this.approvalMode=(0,z.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new E.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt());const d=(0,z.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,A.ni)(d.permissionRules),a.sessionFile){const b=(0,E.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&(0,E.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),$("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&(this.goalEngine.onAgentStart(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),ac.has(a.type)&&$(a.type,this.sessionId,a),this.emit(a),Q()}),this.resetIdleTimer()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),Q();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),Q()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();await this.inner.prompt(E.LF),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,A.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:B.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile)return;let a=[...this.queueRecovery,...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{return await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(this.inner.isStreaming||this.inner.isBashRunning||this.promptRunning)return;let a=[...this.queueMirror];0!==a.length&&(this.queueMirror=[],this.persistQueue(),this.promptRunning=!0,this.promptPhase="waiting_model",this.bootstrapQueuedRun(a))}async bootstrapQueuedRun(a){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))try{await this.inner.prompt(b.text,b.images?.length?{images:b.images}:void 0)}catch(a){this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),this.emit({type:"prompt_done"});return}this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyExactSystemPrompt(),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,g.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.extensionsBound=!0,this.applyExactSystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),ak.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}applyForcedEmptySystemPrompt(){this.inner.agent.state&&(this.forceEmptySystemPrompt?this.inner.agent.state.systemPrompt="":null!==this.exactSystemPrompt&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt))}applyExactSystemPrompt(){!this.forceEmptySystemPrompt&&null!==this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt)}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent,b=a.prepareNextTurnWithContext;a.prepareNextTurnWithContext=async(a,c)=>{let d=await b?.(a,c);return{...d,context:{...d?.context??a.context,systemPrompt:this.exactSystemPrompt}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(H(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==ad&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,s.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)})},ad))}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}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}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){if(!this._alive)throw Error("Session is shutting down");this.touch(),this.resetIdleTimer();let b=a.type;if("prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=af.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(ae.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();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,j.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)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,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,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",Q();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&(this.applyExactSystemPrompt(),b())}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),Q(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),Q(),this.maybeDriveGoalContinuation()}).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,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return null;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,phase:this.runtimeSnapshot().phase,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()]},pendingRecovery:this.pendingRecoveryView(),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",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.mD)(),{id:d.id,provider:d.provider}}case"fork":{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 f=c.getSessionDir(),g=e.SessionManager.open(d,f).createBranchedSession(b);if(!g)throw Error("Failed to create forked session");let h=e.SessionManager.open(g,f).getSessionId();return(0,o.O8)(h,g),(0,o.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(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.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,o.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",Q();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,Q()}return null}case"follow_up":{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",Q();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,Q()}return 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"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(H(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,A.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"bash":{if(this.promptRunning||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.settingsManager?.getShellPath?.(),c=(0,x.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),Q(),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._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.sessionFile&&this.goalEngine.hasActiveGoal()&&(0,E.eG)(this.sessionFile,this.goalEngine.getState()),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.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{Q()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>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.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)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return C.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return C.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):C.p1}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,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,C.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,ai,aj,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 h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.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&&(g=setTimeout(()=>m(b),d)),h.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)})}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,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return ai},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}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.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}}function I(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}function J(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function K(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function L(a){return I().get(a)}function M(a){let b=J(a);return!!K().has(b)||Array.from(I().values()).some(a=>J(a.cwd)===b&&a.isRunning())}async function N(a){let b=J(a),c=Array.from(I().values()).filter(a=>J(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function O(){let a=[];for(let[b,c]of I()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}function P(a){return globalThis.__piRunningListeners??=new Set,globalThis.__piRunningListeners.add(a),()=>globalThis.__piRunningListeners?.delete(a)}let al="";function Q(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){al="";return}let b=O(),c=JSON.stringify(b);if(c!==al)for(let d of(al=c,a))try{d(b)}catch{}}async function R(a,b,c){let d=(0,r.vw)(c),f=L(a);if(!f?.isAlive()){if(!b)throw Error("Session not found");let c=e.SessionManager.open(b,void 0);if((0,q.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");(0,r.b5)(c,d),(0,o.mD)();let f=await aa(a,b,void 0);return{session:f.session,sessionId:f.realSessionId,recreated:!1}}if(f.isRunning())throw Error("Cannot change tools while the session is running");if((0,q.ph)(f.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let i="function"!=typeof f.isChatOnly||"function"!=typeof f.setActiveToolSelection||f.isChatOnly()!==(0===d.length);if((0,r.b5)(f.inner.sessionManager,d),(0,o.mD)(),!i)return f.setActiveToolSelection(d),{session:f,sessionId:a,recreated:!1};let j=f.sessionFile&&(0,h.existsSync)(f.sessionFile)?f.sessionFile:void 0,k=f.cwd,l=f.inner.model,m=f.inner.agent.state?.thinkingLevel;if(await f.shutdown(),j){let b=await aa(a,j,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let n=await aa(`__recreate__${(0,g.randomUUID)()}`,"",k,{toolNames:d,...l?{initialModel:{provider:l.provider,modelId:l.id}}:{},allowInitialModelFallback:!0,...m&&ab.has(m)?{thinkingLevel:m}:{}});return{session:n.session,sessionId:n.realSessionId,recreated:!0}}function S(){let a=[];for(let b of I().values()){if(!b.isAlive())continue;let c=b.inner.sessionManager,d=c.getHeader(),e=c.getEntries(),f=e.filter(a=>"message"===a.type),g=f.find(a=>"user"===a.message.role),i=c.getSessionFile()??b.sessionFile,j=!!(i&&(0,h.existsSync)(i)),k=(0,q.$u)(e,d?.id??b.sessionId,i??"");if(!j&&(!b.isRunning()||!g))continue;let l=d?.timestamp??e[0]?.timestamp??new Date().toISOString(),m=new Date(l).getTime(),n=Number.isNaN(m)?Date.now():m;for(let a of f){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&&(n=Math.max(n,b))}a.push({path:i??"",id:d?.id??b.sessionId,cwd:d?.cwd??b.cwd,name:c.getSessionName(),created:l,modified:new Date(n).toISOString(),messageCount:f.length,firstMessage:g&&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(" ")}(g)||"(no messages)",...k?{parentSessionId:k.parentSessionId,relation:{kind:"subagent",parentSessionId:k.parentSessionId,profile:k.profile,description:k.description,status:b.isRunning()?"running":k.status}}:{},transient:!j})}return a}function T(){let a=new Set;for(let[b,c]of I())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}function U(){return O().map(a=>a.id)}let am=(0,t.s)({getSession:a=>I().get(a),registerSession:(a,b)=>{let c,d,e;c=new ak(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=I(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await aa(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:Q,isBuiltInSubagentsEnabled:u.N});function V(a){return am.get(a)}function W(a,b){return am.steer(a,b)}function X(a){return am.abort(a)}function Y(a){return globalThis.__piSessionBusListeners??=new Set,globalThis.__piSessionBusListeners.add(a),()=>globalThis.__piSessionBusListeners?.delete(a)}!function(){try{let a=(0,u.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let an=new Map;function Z(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function $(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void Z({type:a,sessionId:b,payload:c});let e=an.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):an.set(b,{event:f,timer:setTimeout(()=>{let a=an.get(b);a&&(an.delete(b),Z(a.event))},80)})}function _(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,D.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,D.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function aa(a,b,d,f={}){let g,h,i,j,{toolNames:k,initialModel:r,thinkingLevel:s,allowInitialModelFallback:t}=f,v=I(),w=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),x=v.get(a);if(x?.isAlive()&&!x.isShuttingDown())return{session:x,realSessionId:a,created:!1};if(x){let a=x.whenShutdown();a&&await Promise.race([a,new Promise(a=>setTimeout(a,1e4))])}let z=w.get(a);if(z)return z;if(b)g=e.SessionManager.open(b,void 0);else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let A=g.getCwd(),B=b?(0,q.ph)(g.getEntries()):null,C=(i=K(),j=J(A),i.set(j,(i.get(j)??0)+1),()=>{let a=(i.get(j)??1)-1;a>0?i.set(j,a):i.delete(j)}),D=new AbortController,E=setTimeout(()=>D.abort(),25e3),G=!1,L=!1,M=()=>{L||(L=!0,C())},N=(async()=>{let b,d=B?.tools??k??[],f=0===d.length;f||(0,e.initTheme)();let h=(0,e.getAgentDir)(),i=B?.tools;B||void 0===k||(i=0===d.length?[]:void 0);let j=B?void 0:(0,n.Fk)(A,h),w=await (0,e.createAgentSessionServices)({cwd:A,agentDir:h,modelRuntimeSignal:D.signal,resourceLoaderOptions:B?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:B.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)(am.extensionRuntime,()=>(0,q.IR)(A),u.N)],extensionsOverride:a=>(0,p.U6)(a)},...j?{resourceLoaderReloadOptions:j}:{}}),{createAsyncBashTools:x}=await Promise.resolve().then(c.bind(c,44271)),z=new F.B,C=x(z),E=await (0,m.py)(w.modelRuntime,w.settingsManager.getEnabledModels(),{signal:D.signal}),J=r&&(!t||E.visible.some(a=>a.provider===r.provider&&a.id===r.modelId))?r:void 0,K=w.settingsManager.getDefaultProvider(),L=w.settingsManager.getDefaultModel(),M=g.getBranch().some(a=>"message"===a.type)?{scopedModels:[...E.scopedModels]}:(0,m.IR)(E,{...J?{requestedModel:J}:{},...K&&L?{defaultModel:{provider:K,modelId:L}}:{},...s?{thinkingLevel:s}:{}}),N=!1,O=(0,e.createAgentSessionFromServices)({services:w,sessionManager:g,...M.model?{model:M.model}:{},...M.thinkingLevel?{thinkingLevel:M.thinkingLevel}:{},...M.scopedModels.length>0?{scopedModels:M.scopedModels}:{},...void 0!==i?{tools:i}:{},customTools:C}),{session:P}=await Promise.race([O,new Promise((a,c)=>{b=setTimeout(()=>{N=!0,D.abort(),c(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4)})]);clearTimeout(b),O.then(({session:a})=>{if(N)try{a.dispose()}catch{}},()=>{});let Q=z.cleanup.bind(z);try{let b=P.agent,c=b.streamFunction;if(b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>_(c,{provider:b.provider,modelId:b.id,sessionId:a})):_(f,{provider:b.provider,modelId:b.id,sessionId:a})},(await (0,y.o)(w.settingsManager,{...r?{model:r}:{},...s?{thinkingLevel:s}:{}},{...P.model?{model:{provider:P.model.provider,modelId:P.model.id}}:{},thinkingLevel:P.agent.state?.thinkingLevel??"off",supportsThinking:P.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),!B&&k&&k.length>0&&P.setActiveToolsByName(H(P,k)),G){try{P.dispose()}catch{}try{Q()}catch{}throw Error("Session startup abandoned after hard timeout")}let d=new ak(P,A);d.setChatOnly(f),d.setSuppressCompletionNotifications(void 0!==B),k?.length===0||B?.tools.length===0?d.setForceEmptySystemPrompt(!0):B&&B.appendSystemPrompt.length>0&&d.setExactSystemPrompt(B.appendSystemPrompt[0]),d.start(),d.loadQueueRecovery();let e=P.sessionId,g=P.sessionFile;return g&&(0,o.O8)(e,g),d.persistSessionFileIfMissing(),d.onDestroy(()=>{Q(),v.get(e)===d&&v.delete(e)}),v.set(e,d),d.beginExtensionBinding({forceEmptySystemPrompt:k?.length===0}),!function(){let a=I();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:d,realSessionId:e,created:!0}}catch(a){try{P.dispose()}catch{}try{Q()}catch{}throw a}})().finally(()=>{clearTimeout(E),clearTimeout(h),w.delete(a),M()}),O=Promise.race([N,new Promise((b,c)=>{h=setTimeout(()=>{G=!0,D.abort(),w.delete(a),M(),c(Error("Session startup timed out after 60s (extension/resource binding may be hung); the start lock was released — retry the request to start over."))},6e4)})]);return N.then(()=>{},()=>{}),w.set(a,O),O}d()}catch(a){d(a)}})},64735:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{S3:()=>k,lN:()=>j});var e=c(6999),f=c(67264),g=c(36193),h=a([e]);e=(h.then?(await h)():h)[0];let l="modes",m="modesPerSession";function i(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=a.permissionRules,c=(0,g.kP)((0,g.ni)(b));return{collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:{allow:Array.isArray(c.allow)?c.allow:[],ask:Array.isArray(c.ask)?c.ask:[],deny:Array.isArray(c.deny)?c.deny:[]}}}function j(a){let b=(0,f.Md)(),c=(0,e.Tu)();if(a){let b=c[m];if(b&&"object"==typeof b&&!Array.isArray(b)){let c=i(b[a]);if(c)return c}}return i(c[l])??b}async function k(a,b){let c={collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:a.permissionRules};await (0,e.o$)(a=>{if(b){let d=a[m]??{};d[b]=c,a[m]=d}else a[l]=c;return{settings:a}})}d()}catch(a){d(a)}})},71069:(a,b,c)=>{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)=>{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){return a&&(0,e.hasTrustRequiringProjectResources)(a)?{requiresTrust:!0,trusted:!0===new e.ProjectTrustStore(b).get(a)}:{requiresTrust:!1,trusted:!0}}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)}})},78963:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{H4:()=>m,kx:()=>k,qV:()=>o,t0:()=>n});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=a([g]);function k(a=(0,g.getAgentDir)()){return(0,f.join)(a,"extension-tools.json")}function l(a){return"object"!=typeof a||null===a||Array.isArray(a)?{disabled:[]}:{disabled:Array.isArray(a.disabled)?[...new Set(a.disabled.filter(a=>"string"==typeof a&&""!==a.trim()).map(a=>a.trim()))]:[]}}function m(a,b){if(0===b.disabled.length)return[...a];let c=new Set(b.disabled);return a.filter(a=>!c.has(a))}function n(a=k()){if(!(0,e.existsSync)(a))return{disabled:[]};try{return l(JSON.parse((0,e.readFileSync)(a,"utf8")))}catch{return{disabled:[]}}}async function o(a,b=k()){let c=l(a);(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0});try{(0,e.writeFileSync)(b,JSON.stringify({version:1,disabled:[]},null,2),{flag:"wx",mode:384})}catch(a){if("EEXIST"!==a.code)throw a}let d=await i().lock(b,{realpath:!1,retries:10});try{(0,e.writeFileSync)(b,`${JSON.stringify({version:1,disabled:c.disabled},null,2)}
18
- `,"utf8"),(0,e.chmodSync)(b,384)}finally{await d()}return c}g=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(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(!function(a){var b;if(!a||"object"!=typeof a||"image"!==a.type||"string"!=typeof a.data||"string"!=typeof a.mimeType||(b=a.mimeType,!/^image\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/.test(b)))return!1;let c=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b,d=null;for(let b=0;b<c;b+=1){var e;let c=(e=a.charCodeAt(b))>=65&&e<=90?e-65:e>=97&&e<=122?e-97+26:e>=48&&e<=57?e-48+52:43===e?62:47===e?63:null;if(null===c)return null;d=c}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return 2===b&&d%16!=0||1===b&&d%4!=0?null:a.length/4*3-b}(a.data);return null!==c&&c<=0xa00000}(b))return"Each image must be valid base64 image data with an image MIME type and be 10MB or smaller";return null}},95412:(a,b,c)=>{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:()=>f});let e=function(){let a,b=globalThis,c=Symbol.for("@agegr/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(a){return e.hasActiveProvider(a)}},99324:(a,b,c)=>{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)}>
17
+ ${(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.","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}. Default: general-purpose.`})),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 and notify this session when complete."})),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."}))}),async execute(b,c,d,e,f){try{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.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${h.run.sessionId}. You will be notified when it completes.`}],details:j(h.run)};let i=await h.completion;return{content:[{type:"text",text:k(i)}],details:j(i),..."failed"===i.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),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."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),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){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!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)=>{c.a(a,async(a,d)=>{try{c.d(b,{$9:()=>h,J1:()=>i});var e=c(75430),f=c(76760),g=a([e]);function h(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}function i(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 i;let j,k,l,m=(i=h(f.env??c,g),j="win32"===g?Object.keys(i).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",k="win32"===g?";":":",(l=i[j]??"").split(k).filter(Boolean).includes(b)||(i[j]=[b,l].filter(Boolean).join(k)),i);return d.exec(a,e,{...f,env:m})}}}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$Z:()=>R,A4:()=>L,Bp:()=>S,C4:()=>O,Fn:()=>P,HG:()=>U,OF:()=>aa,Zo:()=>W,_I:()=>M,d_:()=>V,iP:()=>$,l8:()=>Y,oA:()=>N,wW:()=>X,x8:()=>T});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(43671),l=c(28967),m=c(18904),n=c(72498),o=c(40402),p=c(46753),q=c(7048),r=c(21560),s=c(95412),t=c(12568),u=c(27367),v=c(305),w=c(78963),x=c(53303),y=c(30590),z=c(64735),A=c(36193),B=c(67264),C=c(71069),D=c(11301),E=c(4504),F=c(44271),G=a([e,f,m,n,o,p,q,t,u,v,w,x,z,D,F]);[e,f,m,n,o,p,q,t,u,v,w,x,z,D,F]=G.then?(await G)():G;let ab=new Set(["off","minimal","low","medium","high","xhigh","max"]),ac=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),ad=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),ae=new Set(["fork","clone"]),af=new Set(["get_state","abort","steer","follow_up_draft"]),ag=["read","bash","powershell","edit","write","grep","find","ls"];class ah extends e.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 ai=new ah,aj=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function H(a,b){if(0===b.length)return[];let c=new Set(ag),d=(0,v.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,w.H4)([...new Set([...d,...e])],(0,w.t0)())}class ak{constructor(a,b=""){this.inner=a,this.listeners=[],this.activeToolEvents=new Map,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,A.ni)((0,z.lN)().permissionRules),this.approvalMode=(0,z.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new E.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt());const d=(0,z.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,A.ni)(d.permissionRules),a.sessionFile){const b=(0,E.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&(0,E.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),$("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&(this.goalEngine.onAgentStart(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),ac.has(a.type)&&$(a.type,this.sessionId,a);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)),this.emit(a),Q()}),this.resetIdleTimer()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),Q();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),Q()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();await this.inner.prompt(E.LF),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,A.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:B.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile)return;let a=[...this.queueRecovery,...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{return await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(this.inner.isStreaming||this.inner.isBashRunning||this.promptRunning)return;let a=[...this.queueMirror];0!==a.length&&(this.queueMirror=[],this.persistQueue(),this.promptRunning=!0,this.promptPhase="waiting_model",this.bootstrapQueuedRun(a))}async bootstrapQueuedRun(a){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))try{await this.inner.prompt(b.text,b.images?.length?{images:b.images}:void 0)}catch(a){this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),this.emit({type:"prompt_done"});return}this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyExactSystemPrompt(),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,g.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.extensionsBound=!0,this.applyExactSystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),ak.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}applyForcedEmptySystemPrompt(){this.inner.agent.state&&(this.forceEmptySystemPrompt?this.inner.agent.state.systemPrompt="":null!==this.exactSystemPrompt&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt))}applyExactSystemPrompt(){!this.forceEmptySystemPrompt&&null!==this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt)}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent,b=a.prepareNextTurnWithContext;a.prepareNextTurnWithContext=async(a,c)=>{let d=await b?.(a,c);return{...d,context:{...d?.context??a.context,systemPrompt:this.exactSystemPrompt}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(H(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==ad&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,s.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)})},ad))}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}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}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){if(!this._alive)throw Error("Session is shutting down");this.touch(),this.resetIdleTimer();let b=a.type;if("prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=af.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(ae.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();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,j.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)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,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,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",Q();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&(this.applyExactSystemPrompt(),b())}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),Q(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),Q(),this.maybeDriveGoalContinuation()}).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,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return null;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,phase:this.runtimeSnapshot().phase,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()]},pendingRecovery:this.pendingRecoveryView(),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",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.mD)(),{id:d.id,provider:d.provider}}case"fork":{let b,c,d=a.entryId,f=this.inner.sessionManager,g=this.inner.sessionFile;if(!f.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let i=f.getEntry(d);if(!i)throw Error("Invalid entry ID for forking");let j=f.getSessionDir();if(i.parentId){let a=(c=e.SessionManager.open(g,j)).createBranchedSession(i.parentId);if(!a)throw Error("Failed to create forked session");b=a}else b=(c=e.SessionManager.create(f.getCwd(),j,{parentSession:g})).getSessionFile();if(!(0,h.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,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,o.O8)(k,b),(0,o.mD)(),{cancelled:!1,newSessionId:k}}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(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.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,o.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",Q();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,Q()}return null}case"follow_up":{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",Q();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,Q()}return 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"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(H(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,A.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"bash":{if(this.promptRunning||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.settingsManager?.getShellPath?.(),c=(0,x.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),Q(),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._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.sessionFile&&this.goalEngine.hasActiveGoal()&&(0,E.eG)(this.sessionFile,this.goalEngine.getState()),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(),this.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{Q()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>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.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)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return C.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return C.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):C.p1}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,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,C.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,ai,aj,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 h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.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&&(g=setTimeout(()=>m(b),d)),h.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)})}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,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return ai},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}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.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}}function I(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}function J(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function K(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function L(a){return I().get(a)}function M(a){let b=J(a);return!!K().has(b)||Array.from(I().values()).some(a=>J(a.cwd)===b&&a.isRunning())}async function N(a){let b=J(a),c=Array.from(I().values()).filter(a=>J(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function O(){let a=[];for(let[b,c]of I()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}function P(a){return globalThis.__piRunningListeners??=new Set,globalThis.__piRunningListeners.add(a),()=>globalThis.__piRunningListeners?.delete(a)}let al="";function Q(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){al="";return}let b=O(),c=JSON.stringify(b);if(c!==al)for(let d of(al=c,a))try{d(b)}catch{}}async function R(a,b,c){let d=(0,r.vw)(c),f=L(a);if(!f?.isAlive()){if(!b)throw Error("Session not found");let c=e.SessionManager.open(b,void 0);if((0,q.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");(0,r.b5)(c,d),(0,o.mD)();let f=await aa(a,b,void 0);return{session:f.session,sessionId:f.realSessionId,recreated:!1}}if(f.isRunning())throw Error("Cannot change tools while the session is running");if((0,q.ph)(f.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let i="function"!=typeof f.isChatOnly||"function"!=typeof f.setActiveToolSelection||f.isChatOnly()!==(0===d.length);if((0,r.b5)(f.inner.sessionManager,d),(0,o.mD)(),!i)return f.setActiveToolSelection(d),{session:f,sessionId:a,recreated:!1};let j=f.sessionFile&&(0,h.existsSync)(f.sessionFile)?f.sessionFile:void 0,k=f.cwd,l=f.inner.model,m=f.inner.agent.state?.thinkingLevel;if(await f.shutdown(),j){let b=await aa(a,j,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let n=await aa(`__recreate__${(0,g.randomUUID)()}`,"",k,{toolNames:d,...l?{initialModel:{provider:l.provider,modelId:l.id}}:{},allowInitialModelFallback:!0,...m&&ab.has(m)?{thinkingLevel:m}:{}});return{session:n.session,sessionId:n.realSessionId,recreated:!0}}function S(a={}){let b=[];for(let c of I().values()){if("function"!=typeof c.isAlive||!c.isAlive())continue;let d=c.inner?.sessionManager;if(!d)continue;let e=d.getHeader(),f=d.getEntries(),g=f.filter(a=>"message"===a.type),i=g.find(a=>"user"===a.message.role),j=d.getSessionFile()??c.sessionFile,k=!!(j&&(0,h.existsSync)(j)),l=(0,q.$u)(f,e?.id??c.sessionId,j??"");if(!k&&!a.includeTransient&&(!c.isRunning()||!i))continue;let m=e?.timestamp??f[0]?.timestamp??new Date().toISOString(),n=new Date(m).getTime(),o=Number.isNaN(n)?Date.now():n;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&&(o=Math.max(o,b))}b.push({path:j??"",id:e?.id??c.sessionId,cwd:e?.cwd??c.cwd,name:d.getSessionName(),created:m,modified:new Date(o).toISOString(),messageCount:g.length,firstMessage:i&&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(" ")}(i)||"(no messages)",...l?{parentSessionId:l.parentSessionId,relation:{kind:"subagent",parentSessionId:l.parentSessionId,profile:l.profile,description:l.description,status:c.isRunning()?"running":l.status}}:{},transient:!k})}return b}function T(){let a=new Set;for(let[b,c]of I())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}function U(){return O().map(a=>a.id)}let am=(0,t.s)({getSession:a=>I().get(a),registerSession:(a,b)=>{let c,d,e;c=new ak(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=I(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await aa(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:Q,isBuiltInSubagentsEnabled:u.N});function V(a){return am.get(a)}function W(a,b){return am.steer(a,b)}function X(a){return am.abort(a)}function Y(a){return globalThis.__piSessionBusListeners??=new Set,globalThis.__piSessionBusListeners.add(a),()=>globalThis.__piSessionBusListeners?.delete(a)}!function(){try{let a=(0,u.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let an=new Map;function Z(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function $(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void Z({type:a,sessionId:b,payload:c});let e=an.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):an.set(b,{event:f,timer:setTimeout(()=>{let a=an.get(b);a&&(an.delete(b),Z(a.event))},80)})}function _(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,D.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,D.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function aa(a,b,d,f={}){let g,h,i,j,{toolNames:k,initialModel:r,thinkingLevel:s,allowInitialModelFallback:t}=f,v=I(),w=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),x=v.get(a);if(x?.isAlive()&&!x.isShuttingDown())return{session:x,realSessionId:a,created:!1};if(x){let a=x.whenShutdown();a&&await Promise.race([a,new Promise(a=>setTimeout(a,1e4))])}let z=w.get(a);if(z)return z;if(b)g=e.SessionManager.open(b,void 0);else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let A=g.getCwd(),B=b?(0,q.ph)(g.getEntries()):null,C=(i=K(),j=J(A),i.set(j,(i.get(j)??0)+1),()=>{let a=(i.get(j)??1)-1;a>0?i.set(j,a):i.delete(j)}),D=new AbortController,E=setTimeout(()=>D.abort(),25e3),G=!1,L=!1,M=()=>{L||(L=!0,C())},N=(async()=>{let b,d=B?.tools??k??[],f=0===d.length;f||(0,e.initTheme)();let h=(0,e.getAgentDir)(),i=B?.tools;B||void 0===k||(i=0===d.length?[]:void 0);let j=B?void 0:(0,n.Fk)(A,h),w=await (0,e.createAgentSessionServices)({cwd:A,agentDir:h,modelRuntimeSignal:D.signal,resourceLoaderOptions:B?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:B.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)(am.extensionRuntime,()=>(0,q.IR)(A),u.N)],extensionsOverride:a=>(0,p.U6)(a)},...j?{resourceLoaderReloadOptions:j}:{}}),{createAsyncBashTools:x}=await Promise.resolve().then(c.bind(c,44271)),z=new F.B,C=x(z),E=await (0,m.py)(w.modelRuntime,w.settingsManager.getEnabledModels(),{signal:D.signal}),J=r&&(!t||E.visible.some(a=>a.provider===r.provider&&a.id===r.modelId))?r:void 0,K=w.settingsManager.getDefaultProvider(),L=w.settingsManager.getDefaultModel(),M=g.getBranch(),N=M.some(a=>"message"===a.type),O=N?(0,o.Vg)(M):null,P=O?w.modelRuntime.getModel(O.provider,O.modelId):void 0,Q=N?null:(0,m.IR)(E,{...J?{requestedModel:J}:{},...K&&L?{defaultModel:{provider:K,modelId:L}}:{},...s?{thinkingLevel:s}:{}}),R=P&&w.modelRuntime.hasConfiguredAuth(P.provider)?P:Q?.model,S=!1,T=(0,e.createAgentSessionFromServices)({services:w,sessionManager:g,...R?{model:R}:{},...Q?.thinkingLevel?{thinkingLevel:Q.thinkingLevel}:{},...E.scopedModels.length>0?{scopedModels:[...E.scopedModels]}:{},...void 0!==i?{tools:i}:{},customTools:C}),{session:U}=await Promise.race([T,new Promise((a,c)=>{b=setTimeout(()=>{S=!0,D.abort(),c(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4)})]);clearTimeout(b),T.then(({session:a})=>{if(S)try{a.dispose()}catch{}},()=>{});let V=z.cleanup.bind(z);try{let b=U.agent,c=b.streamFunction;if(b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>_(c,{provider:b.provider,modelId:b.id,sessionId:a})):_(f,{provider:b.provider,modelId:b.id,sessionId:a})},(await (0,y.o)(w.settingsManager,{...r?{model:r}:{},...s?{thinkingLevel:s}:{}},{...U.model?{model:{provider:U.model.provider,modelId:U.model.id}}:{},thinkingLevel:U.agent.state?.thinkingLevel??"off",supportsThinking:U.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),!B&&k&&k.length>0&&U.setActiveToolsByName(H(U,k)),G){try{U.dispose()}catch{}try{V()}catch{}throw Error("Session startup abandoned after hard timeout")}let d=new ak(U,A);d.setChatOnly(f),d.setSuppressCompletionNotifications(void 0!==B),k?.length===0||B?.tools.length===0?d.setForceEmptySystemPrompt(!0):B&&B.appendSystemPrompt.length>0&&d.setExactSystemPrompt(B.appendSystemPrompt[0]),d.start(),d.loadQueueRecovery();let e=U.sessionId,g=U.sessionFile;return g&&(0,o.O8)(e,g),d.persistSessionFileIfMissing(),d.onDestroy(()=>{V(),v.get(e)===d&&v.delete(e)}),v.set(e,d),d.beginExtensionBinding({forceEmptySystemPrompt:k?.length===0}),!function(){let a=I();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:d,realSessionId:e,created:!0}}catch(a){try{U.dispose()}catch{}try{V()}catch{}throw a}})().finally(()=>{clearTimeout(E),clearTimeout(h),w.delete(a),M()}),O=Promise.race([N,new Promise((b,c)=>{h=setTimeout(()=>{G=!0,D.abort(),w.delete(a),M(),c(Error("Session startup timed out after 60s (extension/resource binding may be hung); the start lock was released — retry the request to start over."))},6e4)})]);return N.then(()=>{},()=>{}),w.set(a,O),O}d()}catch(a){d(a)}})},64735:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{S3:()=>k,lN:()=>j});var e=c(6999),f=c(67264),g=c(36193),h=a([e]);e=(h.then?(await h)():h)[0];let l="modes",m="modesPerSession";function i(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=a.permissionRules,c=(0,g.kP)((0,g.ni)(b));return{collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:{allow:Array.isArray(c.allow)?c.allow:[],ask:Array.isArray(c.ask)?c.ask:[],deny:Array.isArray(c.deny)?c.deny:[]}}}function j(a){let b=(0,f.Md)(),c=(0,e.Tu)();if(a){let b=c[m];if(b&&"object"==typeof b&&!Array.isArray(b)){let c=i(b[a]);if(c)return c}}return i(c[l])??b}async function k(a,b){let c={collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:a.permissionRules};await (0,e.o$)(a=>{if(b){let d=a[m]??{};d[b]=c,a[m]=d}else a[l]=c;return{settings:a}})}d()}catch(a){d(a)}})},71069:(a,b,c)=>{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)=>{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){return a&&(0,e.hasTrustRequiringProjectResources)(a)?{requiresTrust:!0,trusted:!0===new e.ProjectTrustStore(b).get(a)}:{requiresTrust:!1,trusted:!0}}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)}})},78963:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{H4:()=>m,kx:()=>k,qV:()=>o,t0:()=>n});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=a([g]);function k(a=(0,g.getAgentDir)()){return(0,f.join)(a,"extension-tools.json")}function l(a){return"object"!=typeof a||null===a||Array.isArray(a)?{disabled:[]}:{disabled:Array.isArray(a.disabled)?[...new Set(a.disabled.filter(a=>"string"==typeof a&&""!==a.trim()).map(a=>a.trim()))]:[]}}function m(a,b){if(0===b.disabled.length)return[...a];let c=new Set(b.disabled);return a.filter(a=>!c.has(a))}function n(a=k()){if(!(0,e.existsSync)(a))return{disabled:[]};try{return l(JSON.parse((0,e.readFileSync)(a,"utf8")))}catch{return{disabled:[]}}}async function o(a,b=k()){let c=l(a);(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0});try{(0,e.writeFileSync)(b,JSON.stringify({version:1,disabled:[]},null,2),{flag:"wx",mode:384})}catch(a){if("EEXIST"!==a.code)throw a}let d=await i().lock(b,{realpath:!1,retries:10});try{(0,e.writeFileSync)(b,`${JSON.stringify({version:1,disabled:c.disabled},null,2)}
18
+ `,"utf8"),(0,e.chmodSync)(b,384)}finally{await d()}return c}g=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(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(!function(a){var b;if(!a||"object"!=typeof a||"image"!==a.type||"string"!=typeof a.data||"string"!=typeof a.mimeType||(b=a.mimeType,!/^image\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/.test(b)))return!1;let c=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b,d=null;for(let b=0;b<c;b+=1){var e;let c=(e=a.charCodeAt(b))>=65&&e<=90?e-65:e>=97&&e<=122?e-97+26:e>=48&&e<=57?e-48+52:43===e?62:47===e?63:null;if(null===c)return null;d=c}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return 2===b&&d%16!=0||1===b&&d%4!=0?null:a.length/4*3-b}(a.data);return null!==c&&c<=0xa00000}(b))return"Each image must be valid base64 image data with an image MIME type and be 10MB or smaller";return null}},95412:(a,b,c)=>{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("@agegr/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("@agegr/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-selected-session",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)}},99324:(a,b,c)=>{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)}>
19
19
  ${a.content}
20
20
  </document>`).join("\n\n");return`${a}
21
21