@qt4798/pi-web 0.9.17-beta.1 → 0.9.17-beta.3

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 (292) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -4
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/required-server-files.js +1 -1
  5. package/.next/required-server-files.json +1 -1
  6. package/.next/routes-manifest.json +6 -0
  7. package/.next/server/app/_global-error/page.js +3 -3
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/server/app/_not-found/page.js +2 -2
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +1 -1
  20. package/.next/server/app/_not-found.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  28. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  29. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  30. package/.next/server/app/api/agent/[id]/route.js +1 -1
  31. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  32. package/.next/server/app/api/agent/new/route.js +1 -1
  33. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  34. package/.next/server/app/api/agent/running/route.js +1 -1
  35. package/.next/server/app/api/agent/running/route.js.nft.json +1 -1
  36. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  37. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  38. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  39. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  40. package/.next/server/app/api/auth/providers/route.js +1 -1
  41. package/.next/server/app/api/backup/export/route.js +1 -1
  42. package/.next/server/app/api/backup/import/route.js +1 -1
  43. package/.next/server/app/api/cwd/browse/route.js +1 -1
  44. package/.next/server/app/api/cwd/validate/route.js +1 -1
  45. package/.next/server/app/api/default-cwd/route.js +1 -1
  46. package/.next/server/app/api/features/route.js +1 -1
  47. package/.next/server/app/api/features/route.js.nft.json +1 -1
  48. package/.next/server/app/api/file-index/route.js +1 -1
  49. package/.next/server/app/api/files/[...path]/route.js +1 -1
  50. package/.next/server/app/api/git/diff/route.js +1 -1
  51. package/.next/server/app/api/git/push/route.js +1 -1
  52. package/.next/server/app/api/git/stash/route.js +1 -1
  53. package/.next/server/app/api/git/status/route.js +2 -2
  54. package/.next/server/app/api/home/route.js +1 -1
  55. package/.next/server/app/api/import/discover/route.js +1 -1
  56. package/.next/server/app/api/import/execute/route.js +1 -1
  57. package/.next/server/app/api/import/status/route.js +1 -1
  58. package/.next/server/app/api/models/route.js +1 -1
  59. package/.next/server/app/api/models/route.js.nft.json +1 -1
  60. package/.next/server/app/api/models-config/builtin/route.js +1 -1
  61. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  62. package/.next/server/app/api/models-config/discover/route.js +1 -1
  63. package/.next/server/app/api/models-config/route.js +1 -1
  64. package/.next/server/app/api/models-config/test/route.js +1 -1
  65. package/.next/server/app/api/models-config/test/route.js.nft.json +1 -1
  66. package/.next/server/app/api/modes/route.js +1 -0
  67. package/.next/server/app/api/modes/route.js.nft.json +1 -0
  68. package/.next/server/app/api/modes/route_client-reference-manifest.js +1 -0
  69. package/.next/server/app/api/plugins/route.js +1 -1
  70. package/.next/server/app/api/project-trust/route.js +1 -1
  71. package/.next/server/app/api/project-trust/route.js.nft.json +1 -1
  72. package/.next/server/app/api/proxy/route.js +1 -1
  73. package/.next/server/app/api/proxy/test/route.js +1 -1
  74. package/.next/server/app/api/sessions/[id]/auto-name/route.js +3 -3
  75. package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -1
  76. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  77. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  78. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  79. package/.next/server/app/api/sessions/[id]/queue-recovery/route.js +1 -1
  80. package/.next/server/app/api/sessions/[id]/queue-recovery/route.js.nft.json +1 -1
  81. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  82. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  83. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  84. package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -1
  85. package/.next/server/app/api/sessions/route.js +1 -1
  86. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  87. package/.next/server/app/api/settings/title-model/route.js +1 -1
  88. package/.next/server/app/api/settings/title-model/route.js.nft.json +1 -1
  89. package/.next/server/app/api/skills/check/route.js +1 -1
  90. package/.next/server/app/api/skills/install/route.js +1 -1
  91. package/.next/server/app/api/skills/route.js +1 -1
  92. package/.next/server/app/api/skills/search/route.js +1 -1
  93. package/.next/server/app/api/skills/update/route.js +1 -1
  94. package/.next/server/app/api/tasks/[id]/[action]/route.js +1 -1
  95. package/.next/server/app/api/tasks/[id]/[action]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/tasks/[id]/changed-files/route.js +2 -2
  97. package/.next/server/app/api/tasks/[id]/diff/route.js +2 -2
  98. package/.next/server/app/api/tasks/[id]/events/route.js +1 -1
  99. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  100. package/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/tasks/batch/route.js +1 -1
  102. package/.next/server/app/api/tasks/batch/route.js.nft.json +1 -1
  103. package/.next/server/app/api/tasks/events/route.js +2 -2
  104. package/.next/server/app/api/tasks/events/route.js.nft.json +1 -1
  105. package/.next/server/app/api/tasks/route.js +1 -1
  106. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  107. package/.next/server/app/api/tasks/settings/route.js +1 -1
  108. package/.next/server/app/api/tasks/settings/route.js.nft.json +1 -1
  109. package/.next/server/app/api/tasks/templates/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/usage/route.js +1 -1
  113. package/.next/server/app/api/worktrees/route.js +1 -1
  114. package/.next/server/app/icon.ico/route.js +1 -1
  115. package/.next/server/app/icon.png/route.js +1 -1
  116. package/.next/server/app/icon.svg/route.js +1 -1
  117. package/.next/server/app/index.html +1 -1
  118. package/.next/server/app/index.rsc +4 -4
  119. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  120. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  121. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  122. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  123. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  124. package/.next/server/app/page.js +35 -7
  125. package/.next/server/app/page_client-reference-manifest.js +1 -1
  126. package/.next/server/app-paths-manifest.json +5 -4
  127. package/.next/server/chunks/2349.js +2 -2
  128. package/.next/server/chunks/4253.js +2 -2
  129. package/.next/server/chunks/440.js +1 -1
  130. package/.next/server/chunks/4735.js +1 -0
  131. package/.next/server/chunks/5582.js +1 -1
  132. package/.next/server/chunks/6429.js +1 -1
  133. package/.next/server/chunks/7774.js +1 -1
  134. package/.next/server/chunks/7915.js +1 -1
  135. package/.next/server/instrumentation.js +1 -1
  136. package/.next/server/middleware-build-manifest.js +1 -1
  137. package/.next/server/pages/404.html +1 -1
  138. package/.next/server/pages/500.html +1 -1
  139. package/.next/static/chunks/6274-04455fad317a49e9.js +1 -0
  140. package/.next/static/chunks/app/{api/agent/[id]/route-fc8ab8f162e8d6f5.js → _global-error/page-3be1b7dbe464ad95.js} +1 -1
  141. package/.next/static/chunks/app/{_global-error/page-fc8ab8f162e8d6f5.js → api/agent/[id]/bash-output/route-3be1b7dbe464ad95.js} +1 -1
  142. package/.next/static/chunks/app/api/agent/[id]/{bash-output/route-fc8ab8f162e8d6f5.js → events/route-3be1b7dbe464ad95.js} +1 -1
  143. package/.next/static/chunks/app/api/agent/[id]/{events/route-fc8ab8f162e8d6f5.js → route-3be1b7dbe464ad95.js} +1 -1
  144. package/.next/static/chunks/app/api/agent/new/route-3be1b7dbe464ad95.js +1 -0
  145. package/.next/static/chunks/app/api/agent/running/route-3be1b7dbe464ad95.js +1 -0
  146. package/.next/static/chunks/app/api/auth/all-providers/route-3be1b7dbe464ad95.js +1 -0
  147. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-3be1b7dbe464ad95.js +1 -0
  148. package/.next/static/chunks/app/api/auth/login/[provider]/route-3be1b7dbe464ad95.js +1 -0
  149. package/.next/static/chunks/app/api/auth/logout/[provider]/route-3be1b7dbe464ad95.js +1 -0
  150. package/.next/static/chunks/app/api/auth/providers/route-3be1b7dbe464ad95.js +1 -0
  151. package/.next/static/chunks/app/api/backup/export/route-3be1b7dbe464ad95.js +1 -0
  152. package/.next/static/chunks/app/api/backup/import/route-3be1b7dbe464ad95.js +1 -0
  153. package/.next/static/chunks/app/api/cwd/browse/route-3be1b7dbe464ad95.js +1 -0
  154. package/.next/static/chunks/app/api/cwd/validate/route-3be1b7dbe464ad95.js +1 -0
  155. package/.next/static/chunks/app/api/default-cwd/route-3be1b7dbe464ad95.js +1 -0
  156. package/.next/static/chunks/app/api/features/route-3be1b7dbe464ad95.js +1 -0
  157. package/.next/static/chunks/app/api/file-index/route-3be1b7dbe464ad95.js +1 -0
  158. package/.next/static/chunks/app/api/files/[...path]/route-3be1b7dbe464ad95.js +1 -0
  159. package/.next/static/chunks/app/api/git/diff/route-3be1b7dbe464ad95.js +1 -0
  160. package/.next/static/chunks/app/api/git/push/route-3be1b7dbe464ad95.js +1 -0
  161. package/.next/static/chunks/app/api/git/stash/route-3be1b7dbe464ad95.js +1 -0
  162. package/.next/static/chunks/app/api/git/status/route-3be1b7dbe464ad95.js +1 -0
  163. package/.next/static/chunks/app/api/home/route-3be1b7dbe464ad95.js +1 -0
  164. package/.next/static/chunks/app/api/import/discover/route-3be1b7dbe464ad95.js +1 -0
  165. package/.next/static/chunks/app/api/import/execute/route-3be1b7dbe464ad95.js +1 -0
  166. package/.next/static/chunks/app/api/import/status/route-3be1b7dbe464ad95.js +1 -0
  167. package/.next/static/chunks/app/api/models/route-3be1b7dbe464ad95.js +1 -0
  168. package/.next/static/chunks/app/api/models-config/builtin/route-3be1b7dbe464ad95.js +1 -0
  169. package/.next/static/chunks/app/api/models-config/catalog/route-3be1b7dbe464ad95.js +1 -0
  170. package/.next/static/chunks/app/api/models-config/discover/route-3be1b7dbe464ad95.js +1 -0
  171. package/.next/static/chunks/app/api/models-config/route-3be1b7dbe464ad95.js +1 -0
  172. package/.next/static/chunks/app/api/models-config/test/route-3be1b7dbe464ad95.js +1 -0
  173. package/.next/static/chunks/app/api/modes/route-3be1b7dbe464ad95.js +1 -0
  174. package/.next/static/chunks/app/api/plugins/route-3be1b7dbe464ad95.js +1 -0
  175. package/.next/static/chunks/app/api/project-trust/route-3be1b7dbe464ad95.js +1 -0
  176. package/.next/static/chunks/app/api/proxy/route-3be1b7dbe464ad95.js +1 -0
  177. package/.next/static/chunks/app/api/proxy/test/route-3be1b7dbe464ad95.js +1 -0
  178. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-3be1b7dbe464ad95.js +1 -0
  179. package/.next/static/chunks/app/api/sessions/[id]/context/route-3be1b7dbe464ad95.js +1 -0
  180. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-3be1b7dbe464ad95.js +1 -0
  181. package/.next/static/chunks/app/api/sessions/[id]/export/route-3be1b7dbe464ad95.js +1 -0
  182. package/.next/static/chunks/app/api/sessions/[id]/queue-recovery/route-3be1b7dbe464ad95.js +1 -0
  183. package/.next/static/chunks/app/api/sessions/[id]/route-3be1b7dbe464ad95.js +1 -0
  184. package/.next/static/chunks/app/api/sessions/[id]/state/route-3be1b7dbe464ad95.js +1 -0
  185. package/.next/static/chunks/app/api/sessions/route-3be1b7dbe464ad95.js +1 -0
  186. package/.next/static/chunks/app/api/settings/title-model/route-3be1b7dbe464ad95.js +1 -0
  187. package/.next/static/chunks/app/api/skills/check/route-3be1b7dbe464ad95.js +1 -0
  188. package/.next/static/chunks/app/api/skills/install/route-3be1b7dbe464ad95.js +1 -0
  189. package/.next/static/chunks/app/api/skills/route-3be1b7dbe464ad95.js +1 -0
  190. package/.next/static/chunks/app/api/skills/search/route-3be1b7dbe464ad95.js +1 -0
  191. package/.next/static/chunks/app/api/skills/update/route-3be1b7dbe464ad95.js +1 -0
  192. package/.next/static/chunks/app/api/tasks/[id]/[action]/route-3be1b7dbe464ad95.js +1 -0
  193. package/.next/static/chunks/app/api/tasks/[id]/changed-files/route-3be1b7dbe464ad95.js +1 -0
  194. package/.next/static/chunks/app/api/tasks/[id]/diff/route-3be1b7dbe464ad95.js +1 -0
  195. package/.next/static/chunks/app/api/tasks/[id]/events/route-3be1b7dbe464ad95.js +1 -0
  196. package/.next/static/chunks/app/api/tasks/[id]/route-3be1b7dbe464ad95.js +1 -0
  197. package/.next/static/chunks/app/api/tasks/batch/route-3be1b7dbe464ad95.js +1 -0
  198. package/.next/static/chunks/app/api/tasks/events/route-3be1b7dbe464ad95.js +1 -0
  199. package/.next/static/chunks/app/api/tasks/route-3be1b7dbe464ad95.js +1 -0
  200. package/.next/static/chunks/app/api/tasks/settings/route-3be1b7dbe464ad95.js +1 -0
  201. package/.next/static/chunks/app/api/tasks/templates/route-3be1b7dbe464ad95.js +1 -0
  202. package/.next/static/chunks/app/api/themes/[name]/route-3be1b7dbe464ad95.js +1 -0
  203. package/.next/static/chunks/app/api/themes/route-3be1b7dbe464ad95.js +1 -0
  204. package/.next/static/chunks/app/api/usage/route-3be1b7dbe464ad95.js +1 -0
  205. package/.next/static/chunks/app/api/worktrees/route-3be1b7dbe464ad95.js +1 -0
  206. package/.next/static/chunks/app/page-35b0daa73a11f364.js +50 -0
  207. package/.next/static/chunks/next/dist/client/components/builtin/app-error-3be1b7dbe464ad95.js +1 -0
  208. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-3be1b7dbe464ad95.js +1 -0
  209. package/.next/static/chunks/next/dist/client/components/builtin/not-found-3be1b7dbe464ad95.js +1 -0
  210. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-3be1b7dbe464ad95.js +1 -0
  211. package/.next/static/css/288bff2da3ab1a4d.css +1 -0
  212. package/.next/static/lVkhyX-XEcFgvfYtDvmwH/_buildManifest.js +1 -0
  213. package/.next/trace +8 -8
  214. package/.next/trace-build +1 -1
  215. package/.next/types/app/api/modes/route.ts +351 -0
  216. package/.next/types/routes.d.ts +2 -1
  217. package/.next/types/validator.ts +9 -0
  218. package/README.en.md +46 -1
  219. package/README.md +38 -5
  220. package/bin/fix-pi-agent-undici.js +58 -43
  221. package/bin/pi-web.js +11 -0
  222. package/package.json +10 -12
  223. package/.next/static/chunks/8898-89d80b9022b54177.js +0 -1
  224. package/.next/static/chunks/app/api/agent/new/route-fc8ab8f162e8d6f5.js +0 -1
  225. package/.next/static/chunks/app/api/agent/running/route-fc8ab8f162e8d6f5.js +0 -1
  226. package/.next/static/chunks/app/api/auth/all-providers/route-fc8ab8f162e8d6f5.js +0 -1
  227. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-fc8ab8f162e8d6f5.js +0 -1
  228. package/.next/static/chunks/app/api/auth/login/[provider]/route-fc8ab8f162e8d6f5.js +0 -1
  229. package/.next/static/chunks/app/api/auth/logout/[provider]/route-fc8ab8f162e8d6f5.js +0 -1
  230. package/.next/static/chunks/app/api/auth/providers/route-fc8ab8f162e8d6f5.js +0 -1
  231. package/.next/static/chunks/app/api/backup/export/route-fc8ab8f162e8d6f5.js +0 -1
  232. package/.next/static/chunks/app/api/backup/import/route-fc8ab8f162e8d6f5.js +0 -1
  233. package/.next/static/chunks/app/api/cwd/browse/route-fc8ab8f162e8d6f5.js +0 -1
  234. package/.next/static/chunks/app/api/cwd/validate/route-fc8ab8f162e8d6f5.js +0 -1
  235. package/.next/static/chunks/app/api/default-cwd/route-fc8ab8f162e8d6f5.js +0 -1
  236. package/.next/static/chunks/app/api/features/route-fc8ab8f162e8d6f5.js +0 -1
  237. package/.next/static/chunks/app/api/file-index/route-fc8ab8f162e8d6f5.js +0 -1
  238. package/.next/static/chunks/app/api/files/[...path]/route-fc8ab8f162e8d6f5.js +0 -1
  239. package/.next/static/chunks/app/api/git/diff/route-fc8ab8f162e8d6f5.js +0 -1
  240. package/.next/static/chunks/app/api/git/push/route-fc8ab8f162e8d6f5.js +0 -1
  241. package/.next/static/chunks/app/api/git/stash/route-fc8ab8f162e8d6f5.js +0 -1
  242. package/.next/static/chunks/app/api/git/status/route-fc8ab8f162e8d6f5.js +0 -1
  243. package/.next/static/chunks/app/api/home/route-fc8ab8f162e8d6f5.js +0 -1
  244. package/.next/static/chunks/app/api/import/discover/route-fc8ab8f162e8d6f5.js +0 -1
  245. package/.next/static/chunks/app/api/import/execute/route-fc8ab8f162e8d6f5.js +0 -1
  246. package/.next/static/chunks/app/api/import/status/route-fc8ab8f162e8d6f5.js +0 -1
  247. package/.next/static/chunks/app/api/models/route-fc8ab8f162e8d6f5.js +0 -1
  248. package/.next/static/chunks/app/api/models-config/builtin/route-fc8ab8f162e8d6f5.js +0 -1
  249. package/.next/static/chunks/app/api/models-config/catalog/route-fc8ab8f162e8d6f5.js +0 -1
  250. package/.next/static/chunks/app/api/models-config/discover/route-fc8ab8f162e8d6f5.js +0 -1
  251. package/.next/static/chunks/app/api/models-config/route-fc8ab8f162e8d6f5.js +0 -1
  252. package/.next/static/chunks/app/api/models-config/test/route-fc8ab8f162e8d6f5.js +0 -1
  253. package/.next/static/chunks/app/api/plugins/route-fc8ab8f162e8d6f5.js +0 -1
  254. package/.next/static/chunks/app/api/project-trust/route-fc8ab8f162e8d6f5.js +0 -1
  255. package/.next/static/chunks/app/api/proxy/route-fc8ab8f162e8d6f5.js +0 -1
  256. package/.next/static/chunks/app/api/proxy/test/route-fc8ab8f162e8d6f5.js +0 -1
  257. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-fc8ab8f162e8d6f5.js +0 -1
  258. package/.next/static/chunks/app/api/sessions/[id]/context/route-fc8ab8f162e8d6f5.js +0 -1
  259. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-fc8ab8f162e8d6f5.js +0 -1
  260. package/.next/static/chunks/app/api/sessions/[id]/export/route-fc8ab8f162e8d6f5.js +0 -1
  261. package/.next/static/chunks/app/api/sessions/[id]/queue-recovery/route-fc8ab8f162e8d6f5.js +0 -1
  262. package/.next/static/chunks/app/api/sessions/[id]/route-fc8ab8f162e8d6f5.js +0 -1
  263. package/.next/static/chunks/app/api/sessions/[id]/state/route-fc8ab8f162e8d6f5.js +0 -1
  264. package/.next/static/chunks/app/api/sessions/route-fc8ab8f162e8d6f5.js +0 -1
  265. package/.next/static/chunks/app/api/settings/title-model/route-fc8ab8f162e8d6f5.js +0 -1
  266. package/.next/static/chunks/app/api/skills/check/route-fc8ab8f162e8d6f5.js +0 -1
  267. package/.next/static/chunks/app/api/skills/install/route-fc8ab8f162e8d6f5.js +0 -1
  268. package/.next/static/chunks/app/api/skills/route-fc8ab8f162e8d6f5.js +0 -1
  269. package/.next/static/chunks/app/api/skills/search/route-fc8ab8f162e8d6f5.js +0 -1
  270. package/.next/static/chunks/app/api/skills/update/route-fc8ab8f162e8d6f5.js +0 -1
  271. package/.next/static/chunks/app/api/tasks/[id]/[action]/route-fc8ab8f162e8d6f5.js +0 -1
  272. package/.next/static/chunks/app/api/tasks/[id]/changed-files/route-fc8ab8f162e8d6f5.js +0 -1
  273. package/.next/static/chunks/app/api/tasks/[id]/diff/route-fc8ab8f162e8d6f5.js +0 -1
  274. package/.next/static/chunks/app/api/tasks/[id]/events/route-fc8ab8f162e8d6f5.js +0 -1
  275. package/.next/static/chunks/app/api/tasks/[id]/route-fc8ab8f162e8d6f5.js +0 -1
  276. package/.next/static/chunks/app/api/tasks/batch/route-fc8ab8f162e8d6f5.js +0 -1
  277. package/.next/static/chunks/app/api/tasks/events/route-fc8ab8f162e8d6f5.js +0 -1
  278. package/.next/static/chunks/app/api/tasks/route-fc8ab8f162e8d6f5.js +0 -1
  279. package/.next/static/chunks/app/api/tasks/settings/route-fc8ab8f162e8d6f5.js +0 -1
  280. package/.next/static/chunks/app/api/tasks/templates/route-fc8ab8f162e8d6f5.js +0 -1
  281. package/.next/static/chunks/app/api/themes/[name]/route-fc8ab8f162e8d6f5.js +0 -1
  282. package/.next/static/chunks/app/api/themes/route-fc8ab8f162e8d6f5.js +0 -1
  283. package/.next/static/chunks/app/api/usage/route-fc8ab8f162e8d6f5.js +0 -1
  284. package/.next/static/chunks/app/api/worktrees/route-fc8ab8f162e8d6f5.js +0 -1
  285. package/.next/static/chunks/app/page-7fa160a50338d6b7.js +0 -22
  286. package/.next/static/chunks/next/dist/client/components/builtin/app-error-fc8ab8f162e8d6f5.js +0 -1
  287. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fc8ab8f162e8d6f5.js +0 -1
  288. package/.next/static/chunks/next/dist/client/components/builtin/not-found-fc8ab8f162e8d6f5.js +0 -1
  289. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fc8ab8f162e8d6f5.js +0 -1
  290. package/.next/static/css/f8b227e230256326.css +0 -1
  291. package/.next/static/dLdGlazBwRqCib28ilzT0/_buildManifest.js +0 -1
  292. /package/.next/static/{dLdGlazBwRqCib28ilzT0 → lVkhyX-XEcFgvfYtDvmwH}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=6429,exports.ids=[6429],exports.modules={7859:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bp:()=>p,Dm:()=>o,YB:()=>l,fr:()=>n,y8:()=>m});var e=c(29021),f=c(33873),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let q="titleModel";function j(){return(0,f.join)((0,g.getAgentDir)(),"settings.json")}function k(){let a=j();if(!(0,e.existsSync)(a))return{};try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));return null===b||"object"!=typeof b||Array.isArray(b)?{}:b}catch{return{}}}function l(){let a=k()[q];return"string"==typeof a&&a.length>0?a:null}function m(a){let b=k();null===a||""===a?delete b[q]:b[q]=a,(0,h.$)(j(),JSON.stringify(b,null,2))}function n(){let a=(0,f.join)((0,g.getAgentDir)(),"models.json");if(!(0,e.existsSync)(a))return{providers:{}};try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:{providers:{}}}catch{return{providers:{}}}}function o(a){let b=a.providers;if(!b||"object"!=typeof b)return[];let c=[];for(let[a,d]of Object.entries(b)){let b=d?.models;if(Array.isArray(b))for(let d of b)"string"==typeof d?.id&&0!==d.id.length&&c.push({provider:a,id:d.id,reasoning:!0===d.reasoning,label:`${a}/${d.id}`})}return c.sort((a,b)=>a.label.localeCompare(b.label))}function p(a,b){return b.some(b=>b.label===a)}d()}catch(a){d(a)}})},8102:(a,b,c)=>{c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},18904:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{I:()=>k,p:()=>j});var e=c(75430),f=c(7859),g=c(37171),h=a([e,f]);function i(a,b){return a.provider===b.provider&&a.id===b.modelId}async function j(a,b,c={}){let d=(0,f.fr)().providers??{},h=new Set;for(let[a,b]of Object.entries(d)){let c=(0,g.du)(b);for(let[b,d]of Object.entries(c))!0===d.hidden&&h.add(`${a}/${b}`)}let i=(b??[]).map(a=>a.trim()).filter(Boolean),k=[],l=[],m={},n=[];if(0===i.length)k=await a.getAvailable();else{let b=await (0,e.resolveModelScopeWithDiagnostics)(i,a);for(let c of(l=b.scopedModels,k=b.scopedModels.length>0?b.scopedModels.map(a=>a.model):await a.getAvailable(),n.push(...b.diagnostics.map(a=>a.message)),l))c.thinkingLevel&&(m[`${c.model.provider}/${c.model.id}`]=c.thinkingLevel)}return c.includeHidden||(k=k.filter(a=>!h.has(`${a.provider}/${a.id}`))),{visible:k,scopedModels:c.includeHidden||k.length===l.length?l:l.filter(a=>!h.has(`${a.model.provider}/${a.model.id}`)),thinkingLevelPins:m,warnings:n}}function k(a,b={}){let c=b.requestedModel?a.visible.find(a=>i(a,b.requestedModel)):void 0;if(b.requestedModel&&!c)throw Error(`Model is not available in the enabled scope: ${b.requestedModel.provider}/${b.requestedModel.modelId}`);let d=c?a.scopedModels.find(a=>i(a.model,{provider:c.provider,modelId:c.id})):void 0,e=!c&&b.defaultModel?a.scopedModels.find(a=>i(a.model,b.defaultModel)):void 0,f=c?void 0:e??a.scopedModels[0],g=c||f||!b.defaultModel?void 0:a.visible.find(a=>i(a,b.defaultModel)),h=c??f?.model??g,j=d??f,l=b.thinkingLevel??j?.thinkingLevel;return{...h?{model:h}:{},...l?{thinkingLevel:l}:{},scopedModels:[...a.scopedModels]}}[e,f]=h.then?(await h)():h,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){if(e.expiresAt>Date.now())return Promise.resolve(e.data);c.entries.delete(a)}let f=c.inFlight.get(a);if(f)return f;let g=c.generation,h=Promise.resolve().then(b).then(b=>{if(c.generation===g&&c.inFlight.get(a)===h){let d=Date.now();for(let[a,b]of c.entries)b.expiresAt<=d&&c.entries.delete(a);for(;c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(a,{data:b,expiresAt:d+6e4})}return b}).finally(()=>{c.inFlight.get(a)===h&&c.inFlight.delete(a)});return c.inFlight.set(a,h),h}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}}},37171:(a,b,c)=>{c.d(b,{S4:()=>h,du:()=>g});let d=["name","reasoning","contextWindow","maxTokens","thinkingLevelMap","hidden"];function e(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function f(a){let b=a?.modelOverrides;if(!e(b))return{};let c={};for(let[a,d]of Object.entries(b))e(d)&&(c[a]={...d});return c}function g(a){let b=function(a){let b={},c=a?.models;if(!Array.isArray(c))return b;for(let a of c)e(a)&&"string"==typeof a.id&&a.id&&(b[a.id]={...a});return b}(a),c=f(a),d=new Set([...Object.keys(b),...Object.keys(c)]),g={};for(let a of d)g[a]={...b[a]??{},...c[a]??{}};return g}function h(a,b){let c=a?{...a}:{},g=f(a),h=Array.isArray(a?.models)?a.models.filter(e).map(a=>({...a})):[];for(let[a,c]of Object.entries(b)){let b={...g[a]??{}},f=h.findIndex(b=>b.id===a),i=f>=0?h[f]:void 0;for(let[a,f]of Object.entries(c)){if(!d.includes(a))continue;i&&delete i[a];let c="thinkingLevelMap"===a&&e(f)&&0===Object.keys(f).length?null:f;null===c?delete b[a]:b[a]=c}(i&&Object.keys(i).every(a=>"id"===a)&&h.splice(f,1),Object.keys(b).length>0)?g[a]=b:delete g[a]}return h.length>0?c.models=h:Array.isArray(a?.models)&&delete c.models,Object.keys(g).length>0?c.modelOverrides=g:delete c.modelOverrides,c}},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{}}},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>w,HG:()=>z,OF:()=>A,_I:()=>x,oA:()=>y});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(30590),q=c(71069),r=a([e,f,m,n,o]);[e,f,m,n,o]=r.then?(await r)():r;let B=["read","bash","edit","write","grep","find","ls"];class C extends e.Theme{constructor(){super({thinkingXhigh:""},{},"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 D=new C,E=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function s(a,b){if(0===b.length)return[];let c=new Set(B),d=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...b,...d])]}class F{constructor(a,b){this.inner=a,this.cwd=b,this.listeners=[],this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.unsubscribe=null,this.idleTimer=null,this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this._alive=!0}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}isRunning(){return this._alive&&(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}start(){this.unsubscribe=this.inner.subscribe(a=>{"agent_end"===a.type&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),this.emit(a)}),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)}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()}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);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.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.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.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}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.applyForcedEmptySystemPrompt(),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.applyForcedEmptySystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a}applyForcedEmptySystemPrompt(){this.forceEmptySystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt="")}emit(a){for(let b of this.listeners)b(a)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.isRunning()?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},6e5)}persistBashOnlySession(){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";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.pendingUiRequests.values()))a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}}onDestroy(a){this.onDestroyCallback=a}async send(a){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)}switch(this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),b){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");let b=a.images,c=a.streamingBehavior;return c&&this.inner.isStreaming&&this.hintQueueImages("followUp"===c?"followUp":"steer",b),this.promptRunning=!0,this.inner.prompt(a.message,{...b?.length?{images:b}:{},...c?{streamingBehavior:c}:{},source:"rpc"}).then(()=>{this.promptRunning=!1,this.resetIdleTimer(),c||this.emit({type:"prompt_done"})}).catch(a=>{this.promptRunning=!1,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),c||this.emit({type:"prompt_done"})}),null}case"abort":return await this.inner.abort(),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.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,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()}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);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=a.entryId,d=this.inner.sessionManager,f=this.inner.sessionFile;if(!d.isPersisted())return{cancelled:!0};if(!f)throw Error("Persisted session is missing a session file");let g=d.getEntry(c);if(!g)throw Error("Invalid entry ID for forking");let h=d.getSessionDir();if(g.parentId){let a=e.SessionManager.open(f,h).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=e.SessionManager.create(d.getCwd(),h);a.newSession({parentSession:f}),b=a.getSessionFile()}let i=e.SessionManager.open(b,h).getSessionId();return(0,o.O8)(i,b),(0,o.mD)(),await this.shutdown(),{cancelled:!1,newSessionId:i}}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.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":{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":{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":{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;return this.hintQueueImages("steer",b),await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return this.hintQueueImages("followUp",b),await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({name:a.name,description:a.description,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.setForceEmptySystemPrompt(0===b.length),this.inner.setActiveToolsByName(s(this.inner,b)),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),"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"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.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear();try{this.inner.dispose()}finally{this.onDestroyCallback?.()}}}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)}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 q.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return q.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):q.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=(0,g.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,q.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,D,E,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=(0,g.randomUUID)(),h={type:"extension_ui_request",id:f,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise(a=>{let g,i=()=>{g&&clearTimeout(g),e?.removeEventListener("abort",k),this.pendingUiRequests.delete(f),this.pendingUiResponses.delete(f)},j=b=>{i(),a(b)},k=()=>j(b);d&&(g=setTimeout(()=>j(b),d)),e?.addEventListener("abort",k,{once:!0}),this.pendingUiRequests.set(f,h),this.pendingUiResponses.set(f,{resolve:a=>j(c(a)),cancel:()=>j(b)}),this.emit(h)})}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 D},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.applyForcedEmptySystemPrompt()}}}}function t(){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 u(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function v(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function w(a){return t().get(a)}function x(a){let b=u(a);return!!v().has(b)||Array.from(t().values()).some(a=>u(a.cwd)===b&&a.isRunning())}async function y(a){let b=u(a),c=Array.from(t().values()).filter(a=>u(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function z(){let a=new Set;for(let[b,c]of t())c.isRunning()&&a.add(c.sessionId||b);return[...a]}async function A(a,b,c,d={}){let f,g,h,{toolNames:i,initialModel:j,thinkingLevel:k}=d,q=t(),r=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),w=q.get(a);if(w?.isAlive())return{session:w,realSessionId:a};let x=r.get(a);if(x)return x;if(b)f=e.SessionManager.open(b,void 0);else{if(!c)throw Error("cwd is required for a new session");f=e.SessionManager.create(c,void 0)}let y=f.getCwd(),z=(g=v(),h=u(y),g.set(h,(g.get(h)??0)+1),()=>{let a=(g.get(h)??1)-1;a>0?g.set(h,a):g.delete(h)}),B=(async()=>{let a;(0,e.initTheme)();let b=(0,e.getAgentDir)();void 0!==i&&(a=0===i.length?[]:void 0);let c=(0,n.Fk)(y,b),d=await (0,e.createAgentSessionServices)({cwd:y,agentDir:b,...c?{resourceLoaderReloadOptions:c}:{}}),g=await (0,m.p)(d.modelRuntime,d.settingsManager.getEnabledModels()),h=d.settingsManager.getDefaultProvider(),r=d.settingsManager.getDefaultModel(),t=f.getBranch().some(a=>"message"===a.type)?{scopedModels:[...g.scopedModels]}:(0,m.I)(g,{...j?{requestedModel:j}:{},...h&&r?{defaultModel:{provider:h,modelId:r}}:{},...k?{thinkingLevel:k}:{}}),{session:u}=await (0,e.createAgentSessionFromServices)({services:d,sessionManager:f,...t.model?{model:t.model}:{},...t.thinkingLevel?{thinkingLevel:t.thinkingLevel}:{},...t.scopedModels.length>0?{scopedModels:t.scopedModels}:{},...void 0!==a?{tools:a}:{}});(await (0,p.o)(d.settingsManager,{...j?{model:j}:{},...k?{thinkingLevel:k}:{}},{...u.model?{model:{provider:u.model.provider,modelId:u.model.id}}:{},thinkingLevel:u.agent.state?.thinkingLevel??"off",supportsThinking:u.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),i&&i.length>0&&u.setActiveToolsByName(s(u,i));let v=new F(u,y);i?.length===0&&v.setForceEmptySystemPrompt(!0),v.start(),v.loadQueueRecovery();let w=u.sessionId,x=u.sessionFile;return x&&(0,o.O8)(w,x),v.onDestroy(()=>q.delete(w)),q.set(w,v),v.beginExtensionBinding({forceEmptySystemPrompt:i?.length===0}),{session:v,realSessionId:w}})().finally(()=>{r.delete(a),z()});return r.set(a,B),B}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)}})},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}}};
1
+ "use strict";exports.id=6429,exports.ids=[6429],exports.modules={7859:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bp:()=>n,Dm:()=>m,YB:()=>j,fr:()=>l,y8:()=>k});var e=c(29021),f=c(33873),g=c(75430),h=c(6999),i=a([g,h]);[g,h]=i.then?(await i)():i;let o="titleModel";function j(){let a=(0,h.Tu)()[o];return"string"==typeof a&&a.length>0?a:null}async function k(a){await (0,h.o$)(b=>(null===a||""===a?delete b[o]:b[o]=a,{settings:b}))}function l(){let a=(0,f.join)((0,g.getAgentDir)(),"models.json");if(!(0,e.existsSync)(a))return{providers:{}};try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:{providers:{}}}catch{return{providers:{}}}}function m(a){let b=a.providers;if(!b||"object"!=typeof b)return[];let c=[];for(let[a,d]of Object.entries(b)){let b=d?.models;if(Array.isArray(b))for(let d of b)"string"==typeof d?.id&&0!==d.id.length&&c.push({provider:a,id:d.id,reasoning:!0===d.reasoning,label:`${a}/${d.id}`})}return c.sort((a,b)=>a.label.localeCompare(b.label))}function n(a,b){return b.some(b=>b.label===a)}d()}catch(a){d(a)}})},18904:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{I:()=>k,p:()=>j});var e=c(75430),f=c(7859),g=c(37171),h=a([e,f]);function i(a,b){return a.provider===b.provider&&a.id===b.modelId}async function j(a,b,c={}){let d=(0,f.fr)().providers??{},h=new Set;for(let[a,b]of Object.entries(d)){let c=(0,g.du)(b);for(let[b,d]of Object.entries(c))!0===d.hidden&&h.add(`${a}/${b}`)}let i=(b??[]).map(a=>a.trim()).filter(Boolean),k=[],l=[],m={},n=[];if(0===i.length)k=await a.getAvailable();else{let b=await (0,e.resolveModelScopeWithDiagnostics)(i,a);for(let c of(l=b.scopedModels,k=b.scopedModels.length>0?b.scopedModels.map(a=>a.model):await a.getAvailable(),n.push(...b.diagnostics.map(a=>a.message)),l))c.thinkingLevel&&(m[`${c.model.provider}/${c.model.id}`]=c.thinkingLevel)}return c.includeHidden||(k=k.filter(a=>!h.has(`${a.provider}/${a.id}`))),{visible:k,scopedModels:c.includeHidden||k.length===l.length?l:l.filter(a=>!h.has(`${a.model.provider}/${a.model.id}`)),thinkingLevelPins:m,warnings:n}}function k(a,b={}){let c=b.requestedModel?a.visible.find(a=>i(a,b.requestedModel)):void 0;if(b.requestedModel&&!c)throw Error(`Model is not available in the enabled scope: ${b.requestedModel.provider}/${b.requestedModel.modelId}`);let d=c?a.scopedModels.find(a=>i(a.model,{provider:c.provider,modelId:c.id})):void 0,e=!c&&b.defaultModel?a.scopedModels.find(a=>i(a.model,b.defaultModel)):void 0,f=c?void 0:e??a.scopedModels[0],g=c||f||!b.defaultModel?void 0:a.visible.find(a=>i(a,b.defaultModel)),h=c??f?.model??g,j=d??f,l=b.thinkingLevel??j?.thinkingLevel;return{...h?{model:h}:{},...l?{thinkingLevel:l}:{},scopedModels:[...a.scopedModels]}}[e,f]=h.then?(await h)():h,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){if(e.expiresAt>Date.now())return Promise.resolve(e.data);c.entries.delete(a)}let f=c.inFlight.get(a);if(f)return f;let g=c.generation,h=Promise.resolve().then(b).then(b=>{if(c.generation===g&&c.inFlight.get(a)===h){let d=Date.now();for(let[a,b]of c.entries)b.expiresAt<=d&&c.entries.delete(a);for(;c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(a,{data:b,expiresAt:d+6e4})}return b}).finally(()=>{c.inFlight.get(a)===h&&c.inFlight.delete(a)});return c.inFlight.set(a,h),h}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}}},37171:(a,b,c)=>{c.d(b,{S4:()=>h,du:()=>g});let d=["name","reasoning","contextWindow","maxTokens","thinkingLevelMap","hidden"];function e(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function f(a){let b=a?.modelOverrides;if(!e(b))return{};let c={};for(let[a,d]of Object.entries(b))e(d)&&(c[a]={...d});return c}function g(a){let b=function(a){let b={},c=a?.models;if(!Array.isArray(c))return b;for(let a of c)e(a)&&"string"==typeof a.id&&a.id&&(b[a.id]={...a});return b}(a),c=f(a),d=new Set([...Object.keys(b),...Object.keys(c)]),g={};for(let a of d)g[a]={...b[a]??{},...c[a]??{}};return g}function h(a,b){let c=a?{...a}:{},g=f(a),h=Array.isArray(a?.models)?a.models.filter(e).map(a=>({...a})):[];for(let[a,c]of Object.entries(b)){let b={...g[a]??{}},f=h.findIndex(b=>b.id===a),i=f>=0?h[f]:void 0;for(let[a,f]of Object.entries(c)){if(!d.includes(a))continue;i&&delete i[a];let c="thinkingLevelMap"===a&&e(f)&&0===Object.keys(f).length?null:f;null===c?delete b[a]:b[a]=c}(i&&Object.keys(i).every(a=>"id"===a)&&h.splice(f,1),Object.keys(b).length>0)?g[a]=b:delete g[a]}return h.length>0?c.models=h:Array.isArray(a?.models)&&delete c.models,Object.keys(g).length>0?c.modelOverrides=g:delete c.modelOverrides,c}},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{}}},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>z,HG:()=>C,OF:()=>D,_I:()=>A,oA:()=>B});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(30590),q=c(64735),r=c(36193),s=c(67264),t=c(71069),u=a([e,f,m,n,o,q]);[e,f,m,n,o,q]=u.then?(await u)():u;let E=["read","bash","edit","write","grep","find","ls"];class F extends e.Theme{constructor(){super({thinkingXhigh:""},{},"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 G=new F,H=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function v(a,b){if(0===b.length)return[];let c=new Set(E),d=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...b,...d])]}class I{constructor(a,b){this.inner=a,this.cwd=b,this.listeners=[],this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.unsubscribe=null,this.idleTimer=null,this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this._alive=!0,this.approvalPolicy=(0,r.ni)((0,q.lN)().permissionRules),this.approvalMode=(0,q.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}isRunning(){return this._alive&&(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}start(){this.installApprovalHook(),this.unsubscribe=this.inner.subscribe(a=>{"agent_end"===a.type&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),this.emit(a)}),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)}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,r.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:s.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()}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);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.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.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.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}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.applyForcedEmptySystemPrompt(),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.applyForcedEmptySystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a}applyForcedEmptySystemPrompt(){this.forceEmptySystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt="")}emit(a){for(let b of this.listeners)b(a)}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.isRunning()?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},6e5)}persistBashOnlySession(){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";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.pendingUiRequests.values()))a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}}onDestroy(a){this.onDestroyCallback=a}async send(a){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)}switch(this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),b){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");let b=a.images,c=a.streamingBehavior;return c&&this.inner.isStreaming&&this.hintQueueImages("followUp"===c?"followUp":"steer",b),this.promptRunning=!0,this.inner.prompt(a.message,{...b?.length?{images:b}:{},...c?{streamingBehavior:c}:{},source:"rpc"}).then(()=>{this.promptRunning=!1,this.resetIdleTimer(),c||this.emit({type:"prompt_done"})}).catch(a=>{this.promptRunning=!1,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),c||this.emit({type:"prompt_done"})}),null}case"abort":return await this.inner.abort(),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.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,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()}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);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=a.entryId,d=this.inner.sessionManager,f=this.inner.sessionFile;if(!d.isPersisted())return{cancelled:!0};if(!f)throw Error("Persisted session is missing a session file");let g=d.getEntry(c);if(!g)throw Error("Invalid entry ID for forking");let h=d.getSessionDir();if(g.parentId){let a=e.SessionManager.open(f,h).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=e.SessionManager.create(d.getCwd(),h);a.newSession({parentSession:f}),b=a.getSessionFile()}let i=e.SessionManager.open(b,h).getSessionId();return(0,o.O8)(i,b),(0,o.mD)(),await this.shutdown(),{cancelled:!1,newSessionId:i}}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.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":{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":{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":{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;return this.hintQueueImages("steer",b),await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return this.hintQueueImages("followUp",b),await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({name:a.name,description:a.description,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.setForceEmptySystemPrompt(0===b.length),this.inner.setActiveToolsByName(v(this.inner,b)),this.applyForcedEmptySystemPrompt(),null}case"reload":return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),"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,r.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.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext});try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}destroy(){if(this._alive){for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.rejectAllApprovals("Session closed while approval was pending");try{this.inner.dispose()}finally{this.onDestroyCallback?.()}}}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)}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 t.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return t.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):t.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=(0,g.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,t.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,G,H,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=(0,g.randomUUID)(),h={type:"extension_ui_request",id:f,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise(a=>{let g,i=()=>{g&&clearTimeout(g),e?.removeEventListener("abort",k),this.pendingUiRequests.delete(f),this.pendingUiResponses.delete(f)},j=b=>{i(),a(b)},k=()=>j(b);d&&(g=setTimeout(()=>j(b),d)),e?.addEventListener("abort",k,{once:!0}),this.pendingUiRequests.set(f,h),this.pendingUiResponses.set(f,{resolve:a=>j(c(a)),cancel:()=>j(b)}),this.emit(h)})}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 G},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.applyForcedEmptySystemPrompt()}}}}function w(){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 x(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function y(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function z(a){return w().get(a)}function A(a){let b=x(a);return!!y().has(b)||Array.from(w().values()).some(a=>x(a.cwd)===b&&a.isRunning())}async function B(a){let b=x(a),c=Array.from(w().values()).filter(a=>x(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function C(){let a=new Set;for(let[b,c]of w())c.isRunning()&&a.add(c.sessionId||b);return[...a]}async function D(a,b,c,d={}){let f,g,h,{toolNames:i,initialModel:j,thinkingLevel:k}=d,q=w(),r=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),s=q.get(a);if(s?.isAlive())return{session:s,realSessionId:a};let t=r.get(a);if(t)return t;if(b)f=e.SessionManager.open(b,void 0);else{if(!c)throw Error("cwd is required for a new session");f=e.SessionManager.create(c,void 0)}let u=f.getCwd(),z=(g=y(),h=x(u),g.set(h,(g.get(h)??0)+1),()=>{let a=(g.get(h)??1)-1;a>0?g.set(h,a):g.delete(h)}),A=(async()=>{let a;(0,e.initTheme)();let b=(0,e.getAgentDir)();void 0!==i&&(a=0===i.length?[]:void 0);let c=(0,n.Fk)(u,b),d=await (0,e.createAgentSessionServices)({cwd:u,agentDir:b,...c?{resourceLoaderReloadOptions:c}:{}}),g=await (0,m.p)(d.modelRuntime,d.settingsManager.getEnabledModels()),h=d.settingsManager.getDefaultProvider(),r=d.settingsManager.getDefaultModel(),s=f.getBranch().some(a=>"message"===a.type)?{scopedModels:[...g.scopedModels]}:(0,m.I)(g,{...j?{requestedModel:j}:{},...h&&r?{defaultModel:{provider:h,modelId:r}}:{},...k?{thinkingLevel:k}:{}}),{session:t}=await (0,e.createAgentSessionFromServices)({services:d,sessionManager:f,...s.model?{model:s.model}:{},...s.thinkingLevel?{thinkingLevel:s.thinkingLevel}:{},...s.scopedModels.length>0?{scopedModels:s.scopedModels}:{},...void 0!==a?{tools:a}:{}});(await (0,p.o)(d.settingsManager,{...j?{model:j}:{},...k?{thinkingLevel:k}:{}},{...t.model?{model:{provider:t.model.provider,modelId:t.model.id}}:{},thinkingLevel:t.agent.state?.thinkingLevel??"off",supportsThinking:t.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),i&&i.length>0&&t.setActiveToolsByName(v(t,i));let w=new I(t,u);i?.length===0&&w.setForceEmptySystemPrompt(!0),w.start(),w.loadQueueRecovery();let x=t.sessionId,y=t.sessionFile;return y&&(0,o.O8)(x,y),w.onDestroy(()=>q.delete(x)),q.set(x,w),w.beginExtensionBinding({forceEmptySystemPrompt:i?.length===0}),{session:w,realSessionId:x}})().finally(()=>{r.delete(a),z()});return r.set(a,A),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)}})},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}}};