@rexvane/piweb 0.3.24 → 0.3.26

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 (285) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -11
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +13 -20
  6. package/.next/required-server-files.js +2 -1
  7. package/.next/required-server-files.json +2 -1
  8. package/.next/routes-manifest.json +6 -8
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  24. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  27. package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
  28. package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
  29. package/.next/server/app/api/agent/new/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  31. package/.next/server/app/api/agent/resources/route.js +1 -0
  32. package/.next/server/app/api/agent/resources/route.js.nft.json +1 -0
  33. package/.next/server/app/api/agent/resources/route_client-reference-manifest.js +1 -0
  34. package/.next/server/app/api/config/route.js +1 -1
  35. package/.next/server/app/api/config/route.js.nft.json +1 -1
  36. package/.next/server/app/api/files/route.js +1 -1
  37. package/.next/server/app/api/files/route.js.nft.json +1 -1
  38. package/.next/server/app/api/fs/route.js +1 -1
  39. package/.next/server/app/api/fs/route.js.nft.json +1 -1
  40. package/.next/server/app/api/git/route.js +4 -4
  41. package/.next/server/app/api/git/route.js.nft.json +1 -1
  42. package/.next/server/app/api/github/route.js +4 -4
  43. package/.next/server/app/api/github/route.js.nft.json +1 -1
  44. package/.next/server/app/api/growth/route.js +1 -1
  45. package/.next/server/app/api/growth/route.js.nft.json +1 -1
  46. package/.next/server/app/api/health/route.js +1 -1
  47. package/.next/server/app/api/models/defaults/route.js +1 -1
  48. package/.next/server/app/api/models/defaults/route.js.nft.json +1 -1
  49. package/.next/server/app/api/models/route.js +1 -1
  50. package/.next/server/app/api/models/route.js.nft.json +1 -1
  51. package/.next/server/app/api/pi-settings/route.js +1 -1
  52. package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
  53. package/.next/server/app/api/plugins/route.js +1 -1
  54. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  55. package/.next/server/app/api/prompts/route.js +1 -1
  56. package/.next/server/app/api/prompts/route.js.nft.json +1 -1
  57. package/.next/server/app/api/remote/route.js +4 -3
  58. package/.next/server/app/api/security/route.js +1 -1
  59. package/.next/server/app/api/security/route.js.nft.json +1 -1
  60. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  61. package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
  62. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  63. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/sessions/import/route.js +2 -2
  65. package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
  66. package/.next/server/app/api/sessions/route.js +1 -1
  67. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  68. package/.next/server/app/api/skills/route.js +2 -2
  69. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  70. package/.next/server/app/api/update/route.js +2 -2
  71. package/.next/server/app/api/update/route.js.nft.json +1 -1
  72. package/.next/server/app/api/version/route.js +1 -1
  73. package/.next/server/app/api/version/route.js.nft.json +1 -1
  74. package/.next/server/app/api/web-auth/route.js +2 -2
  75. package/.next/server/app/api/workspaces/route.js +1 -1
  76. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  77. package/.next/server/app/icon.svg/route.js +1 -1
  78. package/.next/server/app/index.html +1 -1
  79. package/.next/server/app/index.rsc +6 -7
  80. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -7
  81. package/.next/server/app/index.segments/_full.segment.rsc +6 -7
  82. package/.next/server/app/index.segments/_tree.segment.rsc +2 -3
  83. package/.next/server/app/login/page.js +1 -1
  84. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/login.html +1 -1
  86. package/.next/server/app/login.rsc +3 -3
  87. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  88. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  89. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  90. package/.next/server/app/page.js +1 -1
  91. package/.next/server/app/page.js.nft.json +1 -1
  92. package/.next/server/app/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app-paths-manifest.json +11 -11
  94. package/.next/server/chunks/3924.js +3 -3
  95. package/.next/server/chunks/538.js +1 -1
  96. package/.next/server/chunks/620.js +1 -0
  97. package/.next/server/chunks/6229.js +1 -1
  98. package/.next/server/chunks/7496.js +1 -1
  99. package/.next/server/chunks/7662.js +2 -2
  100. package/.next/server/chunks/8686.js +1 -1
  101. package/.next/server/functions-config-manifest.json +1 -2
  102. package/.next/server/instrumentation.js.nft.json +1 -1
  103. package/.next/server/middleware-build-manifest.js +1 -1
  104. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  105. package/.next/server/pages/404.html +1 -1
  106. package/.next/server/pages/500.html +1 -1
  107. package/.next/server/preview-props.json +3 -3
  108. package/.next/server/server-reference-manifest.json +1 -1
  109. package/.next/static/QJCtqgDKzGS2BdKABd9ch/_buildManifest.js +1 -0
  110. package/.next/static/chunks/2577.86c8538fbf05a8b2.js +1 -0
  111. package/.next/static/chunks/2716.fa561519675a3ff1.js +1 -0
  112. package/.next/static/chunks/2906.8a0e09bb47605cf1.js +1 -0
  113. package/.next/static/chunks/4673.ea36e55005c0f82f.js +1 -0
  114. package/.next/static/chunks/4686-4dc565817a160351.js +1 -0
  115. package/.next/static/chunks/4778.0d2c5d75b791d352.js +1 -0
  116. package/.next/static/chunks/{618.949981da99be7182.js → 618.9a22656b863f242b.js} +2 -2
  117. package/.next/static/chunks/app/_global-error/page-f2d93969c0bcf406.js +1 -0
  118. package/.next/static/chunks/app/api/agent/[id]/events/route-f2d93969c0bcf406.js +1 -0
  119. package/.next/static/chunks/app/api/agent/[id]/route-f2d93969c0bcf406.js +1 -0
  120. package/.next/static/chunks/app/api/agent/[id]/tree/route-f2d93969c0bcf406.js +1 -0
  121. package/.next/static/chunks/app/api/agent/new/route-f2d93969c0bcf406.js +1 -0
  122. package/.next/static/chunks/app/api/agent/resources/route-f2d93969c0bcf406.js +1 -0
  123. package/.next/static/chunks/app/api/config/route-f2d93969c0bcf406.js +1 -0
  124. package/.next/static/chunks/app/api/files/route-f2d93969c0bcf406.js +1 -0
  125. package/.next/static/chunks/app/api/fs/route-f2d93969c0bcf406.js +1 -0
  126. package/.next/static/chunks/app/api/git/route-f2d93969c0bcf406.js +1 -0
  127. package/.next/static/chunks/app/api/github/route-f2d93969c0bcf406.js +1 -0
  128. package/.next/static/chunks/app/api/growth/route-f2d93969c0bcf406.js +1 -0
  129. package/.next/static/chunks/app/api/health/route-f2d93969c0bcf406.js +1 -0
  130. package/.next/static/chunks/app/api/models/defaults/route-f2d93969c0bcf406.js +1 -0
  131. package/.next/static/chunks/app/api/models/route-f2d93969c0bcf406.js +1 -0
  132. package/.next/static/chunks/app/api/pi-settings/route-f2d93969c0bcf406.js +1 -0
  133. package/.next/static/chunks/app/api/plugins/route-f2d93969c0bcf406.js +1 -0
  134. package/.next/static/chunks/app/api/prompts/route-f2d93969c0bcf406.js +1 -0
  135. package/.next/static/chunks/app/api/remote/route-f2d93969c0bcf406.js +1 -0
  136. package/.next/static/chunks/app/api/security/route-f2d93969c0bcf406.js +1 -0
  137. package/.next/static/chunks/app/api/sessions/[id]/export/route-f2d93969c0bcf406.js +1 -0
  138. package/.next/static/chunks/app/api/sessions/[id]/route-f2d93969c0bcf406.js +1 -0
  139. package/.next/static/chunks/app/api/sessions/import/route-f2d93969c0bcf406.js +1 -0
  140. package/.next/static/chunks/app/api/sessions/route-f2d93969c0bcf406.js +1 -0
  141. package/.next/static/chunks/app/api/skills/route-f2d93969c0bcf406.js +1 -0
  142. package/.next/static/chunks/app/api/update/route-f2d93969c0bcf406.js +1 -0
  143. package/.next/static/chunks/app/api/version/route-f2d93969c0bcf406.js +1 -0
  144. package/.next/static/chunks/app/api/web-auth/route-f2d93969c0bcf406.js +1 -0
  145. package/.next/static/chunks/app/api/workspaces/route-f2d93969c0bcf406.js +1 -0
  146. package/.next/static/chunks/app/page-71f2d3b3ed864b3d.js +1 -0
  147. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f2d93969c0bcf406.js +1 -0
  148. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f2d93969c0bcf406.js +1 -0
  149. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f2d93969c0bcf406.js +1 -0
  150. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f2d93969c0bcf406.js +1 -0
  151. package/.next/static/chunks/webpack-ffc09b5fcc8aaa6d.js +1 -0
  152. package/.next/static/css/014eb1f21414e615.css +1 -0
  153. package/.next/static/css/56b129a13637fcfd.css +1 -0
  154. package/.next/static/css/7e3caf797e4cb19a.css +1 -0
  155. package/.next/types/app/api/agent/{[id]/side-chat → resources}/route.ts +3 -3
  156. package/.next/types/routes.d.ts +2 -2
  157. package/.next/types/validator.ts +9 -9
  158. package/README.md +1 -1
  159. package/next.config.ts +1 -1
  160. package/package.json +9 -9
  161. package/scripts/apply-global.mjs +87 -0
  162. package/scripts/launcher.mjs +21 -0
  163. package/scripts/testing/prepare-sdk-tools.mjs +19 -0
  164. package/src/app/api/agent/new/route.ts +2 -1
  165. package/src/app/api/agent/resources/route.ts +18 -0
  166. package/src/app/api/models/route.ts +22 -1
  167. package/src/app/api/plugins/route.ts +3 -2
  168. package/src/app/api/prompts/route.ts +3 -2
  169. package/src/app/api/remote/route.ts +22 -4
  170. package/src/app/api/sessions/[id]/export/route.ts +3 -1
  171. package/src/app/api/skills/route.ts +3 -2
  172. package/src/app/globals.css +1002 -1765
  173. package/src/components/AppShell.tsx +128 -93
  174. package/src/components/ChatInput.tsx +177 -98
  175. package/src/components/ChatWindow.tsx +189 -56
  176. package/src/components/ContextMeter.tsx +33 -9
  177. package/src/components/CustomSelect.module.css +142 -0
  178. package/src/components/CustomSelect.tsx +157 -0
  179. package/src/components/DrawerPanel.tsx +1 -1
  180. package/src/components/ExtensionUI.tsx +9 -3
  181. package/src/components/FileViewer.tsx +24 -21
  182. package/src/components/GitPanel.tsx +35 -13
  183. package/src/components/GrowthTree.tsx +6 -2
  184. package/src/components/ImageViewer.tsx +72 -0
  185. package/src/components/MarkdownBlock.tsx +67 -96
  186. package/src/components/ModelSelector.tsx +36 -39
  187. package/src/components/PiMark.tsx +76 -41
  188. package/src/components/PreviewImage.tsx +33 -0
  189. package/src/components/ProjectPanel.tsx +8 -5
  190. package/src/components/PromptPanel.tsx +85 -20
  191. package/src/components/ProviderSetupModal.module.css +12 -11
  192. package/src/components/ProviderSetupModal.tsx +107 -36
  193. package/src/components/RemoteSection.tsx +53 -2
  194. package/src/components/SessionImportSection.tsx +30 -15
  195. package/src/components/SessionSidebar.tsx +72 -62
  196. package/src/components/SettingsPanel.tsx +49 -151
  197. package/src/components/TrajectoryAnalyzer.module.css +26 -11
  198. package/src/components/TrajectoryView.tsx +11 -3
  199. package/src/components/chat/markdown-actions.tsx +23 -0
  200. package/src/components/composer/ComposerFiles.tsx +224 -0
  201. package/src/components/composer/ComposerImages.tsx +59 -127
  202. package/src/hooks/usePiWeb.ts +47 -2
  203. package/src/i18n.tsx +62 -80
  204. package/src/lib/agent-manager.ts +365 -33
  205. package/src/lib/chat/file-path.ts +54 -0
  206. package/src/lib/chat/skill-expansion.ts +51 -0
  207. package/src/lib/extension-ui.ts +25 -1
  208. package/src/lib/font.ts +37 -39
  209. package/src/lib/git-service.ts +4 -2
  210. package/src/lib/growth-turns.ts +3 -1
  211. package/src/lib/model-draft.ts +69 -2
  212. package/src/lib/models-service.ts +53 -3
  213. package/src/lib/pi.ts +2 -2
  214. package/src/lib/remote/assets.json +1 -1
  215. package/src/lib/remote/supervisor.ts +48 -5
  216. package/src/lib/security-service.ts +2 -1
  217. package/src/lib/session-reader.ts +25 -13
  218. package/src/lib/session-retention.ts +11 -8
  219. package/src/lib/skills-service.ts +2 -1
  220. package/src/lib/slash-command-token.ts +14 -0
  221. package/src/lib/trajectory.ts +111 -15
  222. package/src/lib/types.ts +28 -3
  223. package/src/lib/update-service.ts +29 -9
  224. package/src/lib/workspace-store.ts +36 -1
  225. package/.next/server/app/api/agent/[id]/side-chat/route.js +0 -5
  226. package/.next/server/app/api/agent/[id]/side-chat/route.js.nft.json +0 -1
  227. package/.next/server/app/api/agent/[id]/side-chat/route_client-reference-manifest.js +0 -1
  228. package/.next/server/chunks/3421.js +0 -1
  229. package/.next/static/chunks/2716.44fdf1b21454b961.js +0 -1
  230. package/.next/static/chunks/4673.e261707dce391be7.js +0 -1
  231. package/.next/static/chunks/4686-0cd87513f9ea3538.js +0 -1
  232. package/.next/static/chunks/4778.eddd3a5813f85824.js +0 -1
  233. package/.next/static/chunks/7411.5f79671208209b13.js +0 -1
  234. package/.next/static/chunks/8552.25c39ef4c995eba0.js +0 -1
  235. package/.next/static/chunks/app/_global-error/page-cbaaee0d7aacb85a.js +0 -1
  236. package/.next/static/chunks/app/api/agent/[id]/events/route-cbaaee0d7aacb85a.js +0 -1
  237. package/.next/static/chunks/app/api/agent/[id]/route-cbaaee0d7aacb85a.js +0 -1
  238. package/.next/static/chunks/app/api/agent/[id]/side-chat/route-cbaaee0d7aacb85a.js +0 -1
  239. package/.next/static/chunks/app/api/agent/[id]/tree/route-cbaaee0d7aacb85a.js +0 -1
  240. package/.next/static/chunks/app/api/agent/new/route-cbaaee0d7aacb85a.js +0 -1
  241. package/.next/static/chunks/app/api/config/route-cbaaee0d7aacb85a.js +0 -1
  242. package/.next/static/chunks/app/api/files/route-cbaaee0d7aacb85a.js +0 -1
  243. package/.next/static/chunks/app/api/fs/route-cbaaee0d7aacb85a.js +0 -1
  244. package/.next/static/chunks/app/api/git/route-cbaaee0d7aacb85a.js +0 -1
  245. package/.next/static/chunks/app/api/github/route-cbaaee0d7aacb85a.js +0 -1
  246. package/.next/static/chunks/app/api/growth/route-cbaaee0d7aacb85a.js +0 -1
  247. package/.next/static/chunks/app/api/health/route-cbaaee0d7aacb85a.js +0 -1
  248. package/.next/static/chunks/app/api/models/defaults/route-cbaaee0d7aacb85a.js +0 -1
  249. package/.next/static/chunks/app/api/models/route-cbaaee0d7aacb85a.js +0 -1
  250. package/.next/static/chunks/app/api/pi-settings/route-cbaaee0d7aacb85a.js +0 -1
  251. package/.next/static/chunks/app/api/plugins/route-cbaaee0d7aacb85a.js +0 -1
  252. package/.next/static/chunks/app/api/prompts/route-cbaaee0d7aacb85a.js +0 -1
  253. package/.next/static/chunks/app/api/remote/route-cbaaee0d7aacb85a.js +0 -1
  254. package/.next/static/chunks/app/api/security/route-cbaaee0d7aacb85a.js +0 -1
  255. package/.next/static/chunks/app/api/sessions/[id]/export/route-cbaaee0d7aacb85a.js +0 -1
  256. package/.next/static/chunks/app/api/sessions/[id]/route-cbaaee0d7aacb85a.js +0 -1
  257. package/.next/static/chunks/app/api/sessions/import/route-cbaaee0d7aacb85a.js +0 -1
  258. package/.next/static/chunks/app/api/sessions/route-cbaaee0d7aacb85a.js +0 -1
  259. package/.next/static/chunks/app/api/skills/route-cbaaee0d7aacb85a.js +0 -1
  260. package/.next/static/chunks/app/api/update/route-cbaaee0d7aacb85a.js +0 -1
  261. package/.next/static/chunks/app/api/version/route-cbaaee0d7aacb85a.js +0 -1
  262. package/.next/static/chunks/app/api/web-auth/route-cbaaee0d7aacb85a.js +0 -1
  263. package/.next/static/chunks/app/api/workspaces/route-cbaaee0d7aacb85a.js +0 -1
  264. package/.next/static/chunks/app/page-dc3cb41d91c7432e.js +0 -1
  265. package/.next/static/chunks/next/dist/client/components/builtin/app-error-cbaaee0d7aacb85a.js +0 -1
  266. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-cbaaee0d7aacb85a.js +0 -1
  267. package/.next/static/chunks/next/dist/client/components/builtin/not-found-cbaaee0d7aacb85a.js +0 -1
  268. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-cbaaee0d7aacb85a.js +0 -1
  269. package/.next/static/chunks/webpack-2ac3d76b81895f5b.js +0 -1
  270. package/.next/static/css/08815507594e8b8d.css +0 -1
  271. package/.next/static/css/9fc559c2c4ad1d0f.css +0 -1
  272. package/.next/static/css/c6e2227c36ec2fd6.css +0 -1
  273. package/.next/static/css/f15a853af8b5127f.css +0 -1
  274. package/.next/static/lvKCJmjFj8LuqSojRVLRF/_buildManifest.js +0 -1
  275. package/src/app/api/agent/[id]/side-chat/route.ts +0 -77
  276. package/src/components/side-chat/SideChatPanel.module.css +0 -131
  277. package/src/components/side-chat/SideChatPanel.tsx +0 -189
  278. package/src/components/side-chat/icons.tsx +0 -8
  279. package/src/components/side-chat/request-history.ts +0 -29
  280. package/src/components/side-chat/store.ts +0 -248
  281. package/src/lib/chat/stream-settings.ts +0 -192
  282. package/src/lib/side-chat/context.ts +0 -123
  283. package/src/lib/side-chat/service.ts +0 -191
  284. package/src/lib/side-chat/types.ts +0 -61
  285. /package/.next/static/{lvKCJmjFj8LuqSojRVLRF → QJCtqgDKzGS2BdKABd9ch}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=8686,exports.ids=[8686],exports.modules={3672:(a,b,c)=>{c.d(b,{H4:()=>f,Pn:()=>h,WZ:()=>i});var d=c(29296);function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>=0?a:void 0}function f(a){if(!a||"object"!=typeof a)return;let b={};return"number"==typeof a.input&&(b.input=a.input),"number"==typeof a.output&&(b.output=a.output),"number"==typeof a.cacheRead&&(b.cacheRead=a.cacheRead),"number"==typeof a.cacheWrite&&(b.cacheWrite=a.cacheWrite),Object.keys(b).length?b:void 0}function g(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(g).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}class h{constructor(a=[]){this.streamingStart=null,this.turnStartedAt=null,this.toolIndex=new Map,this.toolStart=new Map,this.pendingToolArgs=new Map,this.dirty=[],this.entries=a.map(a=>({...a})),this.nextSeq=Math.max(0,...this.entries.map(a=>a.seq))+1}push(a){let b={...a,seq:this.nextSeq++};return this.entries.push(b),this.dirty.push(b),b}touch(a){a&&!this.dirty.includes(a)&&this.dirty.push(a)}drainDirty(){let a=this.dirty;return this.dirty=[],a}onEvent(a,b=Date.now()){switch(a.type){case"turn_start":this.turnStartedAt=b;break;case"message_start":{let c=a.message;if(c?.role==="user")this.push({kind:"user",ts:c.timestamp??b,detail:g(c.content)});else if(c?.role==="assistant"){let a=this.turnStartedAt??b;this.turnStartedAt=null,this.streamingStart={seq:this.nextSeq,t0:a},this.push({kind:"message",ts:a,title:"assistant"})}else if(c?.role==="toolResult"){let a=c.toolCallId?this.toolIndex.get(c.toolCallId):void 0;if(void 0!==a){let b=this.entries[a],h=(0,d.R)(g(c.content));b.detail=h.text||b.detail,b.encodingLoss=h.encodingLoss||b.encodingLoss,b.isError=!0===c.isError,b.tokens=f(c.usage)??b.tokens;let i=e(c.durationMs);void 0!==i&&(b.timing={...b.timing,durationMs:i}),this.touch(b)}}break}case"message_update":{let c=a.assistantMessageEvent;if(!c)break;if(("text_delta"===c.type||"thinking_delta"===c.type||"toolcall_delta"===c.type)&&c.delta?.length>0&&this.streamingStart&&void 0===this.streamingStart.firstToken){this.streamingStart.firstToken=b;let a=this.entries[this.entries.length-1];a?.kind==="message"&&(a.timing={...a.timing??{},ttftMs:b-this.streamingStart.t0},this.touch(a))}"toolcall_end"===c.type&&c.toolCall&&this.pendingToolArgs.set(c.toolCall.id,c.toolCall.arguments);break}case"message_end":{let c=a.message;if(c?.role==="assistant"){let a=this.entries[this.entries.length-1],d=a?.kind==="message"?a:this.push({kind:"message",ts:b});this.streamingStart&&(d.timing={...void 0===this.streamingStart.firstToken?{}:{ttftMs:this.streamingStart.firstToken-this.streamingStart.t0,decodeMs:b-this.streamingStart.firstToken},durationMs:b-this.streamingStart.t0});let h=e(c.durationMs);for(let a of(void 0!==h&&(d.timing={...d.timing,durationMs:h}),d.tokens=f(c.usage),d.thinking=g((c.content??[]).filter(a=>"thinking"===a.type).map(a=>a.thinking)),d.detail=g((c.content??[]).filter(a=>"text"===a.type)),d.isError="error"===c.stopReason,"error"===c.stopReason&&(d.title="error"),this.touch(d),this.streamingStart=null,c.content??[]))"toolCall"===a.type&&(this.toolIndex.set(a.id,this.entries.length),this.push({kind:"tool",ts:b,toolName:a.name,toolCallId:a.id,title:a.name,detail:JSON.stringify(a.arguments??{},null,2)}))}break}case"tool_execution_start":{this.toolStart.set(a.toolCallId,b);let c=this.toolIndex.get(a.toolCallId);if(void 0===c)c=this.entries.length,this.toolIndex.set(a.toolCallId,c),this.push({kind:"tool",ts:b,toolName:a.toolName,toolCallId:a.toolCallId,title:a.toolName,detail:JSON.stringify(a.args??{},null,2)});else{let b=this.entries[c];b.detail=JSON.stringify(a.args??{},null,2),this.touch(b)}break}case"tool_execution_update":{let b=this.toolIndex.get(a.toolCallId);if(void 0!==b){let c=this.entries[b],e=(0,d.R)(g(a.partialResult));e.text&&(c.preview=e.text.slice(-2e3)),c.encodingLoss=e.encodingLoss||c.encodingLoss,this.touch(c)}break}case"tool_execution_end":{let c=this.toolIndex.get(a.toolCallId);if(void 0!==c){let f=this.entries[c],h=(0,d.R)(g(a.result));f.detail=[f.detail,h.text].filter(Boolean).join("\n\n---\n\n"),f.encodingLoss=h.encodingLoss||f.encodingLoss,f.isError=!0===a.isError;let i=this.toolStart.get(a.toolCallId),j=e(a.durationMs)??(void 0!==i?b-i:void 0);void 0!==j&&(f.timing={...f.timing??{},durationMs:j}),this.touch(f)}this.toolStart.delete(a.toolCallId);break}case"compaction_start":this.push({kind:"compacted",ts:b,title:`compact (${a.reason})`});break;case"compaction_end":{let b=[...this.entries].reverse().find(a=>"compacted"===a.kind);b&&(a.errorMessage&&(b.isError=!0,b.detail=a.errorMessage),a.result?.tokensBefore!=null&&(b.tokens={input:a.result.tokensBefore}),this.touch(b))}}}}function i(a){let b=[],c=1,h=a=>"number"==typeof a?.timestamp?a.timestamp:Date.now();for(let i of a)if("message"===i.type){let a=i.message;if(!a)continue;if("user"===a.role)b.push({seq:c++,kind:"user",ts:h(a),detail:g(a.content)});else if("assistant"===a.role){let d=g((a.content??[]).filter(a=>"thinking"===a.type)),i=g((a.content??[]).filter(a=>"text"===a.type)),j=e(a.durationMs);for(let e of(b.push({seq:c++,kind:"message",ts:h(a),title:"error"===a.stopReason?"error":"assistant",detail:i,thinking:d||void 0,tokens:f(a.usage),...void 0===j?{}:{timing:{durationMs:j}},isError:"error"===a.stopReason||void 0}),a.content??[]))"toolCall"===e.type&&b.push({seq:c++,kind:"tool",ts:h(a),toolName:e.name,toolCallId:e.id,title:e.name,detail:JSON.stringify(e.arguments??{},null,2)})}else if("toolResult"===a.role){let c=b.findLast?.(b=>"tool"===b.kind&&(a.toolCallId?b.toolCallId===a.toolCallId:b.toolName===a.toolName));if(c){let b=(0,d.R)(g(a.content));c.detail=[c.detail,b.text].filter(Boolean).join("\n\n---\n\n"),c.encodingLoss=b.encodingLoss||c.encodingLoss,c.isError=!0===a.isError||void 0,c.tokens=f(a.usage)??c.tokens;let h=e(a.durationMs);void 0!==h&&(c.timing={durationMs:h})}}}else"compaction"===i.type?b.push({seq:c++,kind:"compacted",ts:h(i),title:"compact",tokens:null!=i.tokensBefore?{input:i.tokensBefore}:f(i.usage)}):"branch_summary"===i.type&&b.push({seq:c++,kind:"compacted",ts:h(i),title:"branch summary",tokens:f(i.usage),detail:i.summary});return b}},6896:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Iz:()=>E,JZ:()=>D,PY:()=>y,Tp:()=>z,XG:()=>G,X_:()=>J,cH:()=>B,qM:()=>A,qh:()=>H,r7:()=>F,vQ:()=>C});var e=c(51455),f=c.n(e),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(92584),l=c(31421),m=c(46193),n=c(87982),o=c(77598),p=c(49904),q=a([n]);function r(){return j().join((0,n.$M)(),"web-workspaces.json")}async function s(a=r()){try{let b=JSON.parse(await f().readFile(a,"utf8"));if(!b||"object"!=typeof b||Array.isArray(b))throw Error("invalid workspace registry");let c=Object.fromEntries(Object.entries("object"==typeof b.aliases&&null!==b.aliases?b.aliases:{}).filter(a=>"string"==typeof a[1])),d=Object.fromEntries(Object.entries("object"==typeof b.growthInit&&null!==b.growthInit?b.growthInit:{}).filter(a=>"boolean"==typeof a[1]));return{workspaces:Array.isArray(b.workspaces)?b.workspaces.filter(a=>"string"==typeof a):[],aliases:c,archivedSessions:Array.isArray(b.archivedSessions)?b.archivedSessions.filter(a=>"string"==typeof a):[],removedWorkspaces:Array.isArray(b.removedWorkspaces)?b.removedWorkspaces.filter(a=>"string"==typeof a):[],...Object.keys(d).length?{growthInit:d}:{}}}catch(a){if("ENOENT"!==a.code)throw a}return{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}function t(a){let b=j().resolve(a);return"win32"===process.platform?b.toLowerCase():b}async function u(a,b){await f().mkdir(j().dirname(b),{recursive:!0});let c=`${b}.${(0,o.randomUUID)()}.tmp`;try{await f().writeFile(c,JSON.stringify(a,null,2),{encoding:"utf8",flag:"wx",mode:384}),await f().rename(c,b)}finally{await f().unlink(c).catch(()=>void 0)}}n=(q.then?(await q)():q)[0];let K=null;async function v(a){var b;let c;try{c=await f().stat(a)}catch(a){if("ENOENT"!==a.code)throw a;return K=null,{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}let d=(b=c,`${b.mtimeMs}:${b.ctimeMs}:${b.size}:${b.ino}`);if(K&&K.path===a&&K.stamp===d)return K.data;let e=await s(a);return K={path:a,stamp:d,data:e},e}async function w(){return v(r())}async function x(a){let b=r();return(0,p.Ax)(b,()=>(0,p._i)(b,async()=>{try{return await a(await s(b),b)}finally{K=null}}))}async function y(){return(await w()).removedWorkspaces??[]}async function z(a,b){let c=t(j().resolve(a));return x(async(a,d)=>{for(let b of(a.aliases||(a.aliases={}),Object.keys(a.aliases)))b!==c&&t(b)===c&&delete a.aliases[b];return b.trim()?a.aliases[c]=b.trim():delete a.aliases[c],await u(a,d),a.aliases})}async function A(a){return(await w()).growthInit?.[t(a)]??null}async function B(a,b){let c=t(a);await x(async(a,d)=>{a.growthInit={...a.growthInit,[c]:b},await u(a,d)})}async function C(){let a=await w();return{workspaces:a.workspaces,aliases:a.aliases??{},archivedSessions:a.archivedSessions??[],removedWorkspaces:a.removedWorkspaces??[]}}async function D(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>(a.archivedSessions||(a.archivedSessions=[]),a.archivedSessions.some(a=>t(a)===c)||(a.archivedSessions.push(b),await u(a,d)),a.archivedSessions))}async function E(a){let b=t(j().resolve(a));return x(async(a,c)=>{let d=a.archivedSessions??[],e=d.filter(a=>t(a)!==b);return e.length!==d.length&&(a.archivedSessions=e,await u(a,c)),e})}async function F(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{let e=!1;if(a.workspaces.some(a=>t(a)===c)||(a.workspaces.push(b),e=!0),a.removedWorkspaces){let b=a.removedWorkspaces.filter(a=>t(a)!==c);e||=b.length!==a.removedWorkspaces.length,a.removedWorkspaces=b}return e&&await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces??[]}})}async function G(a){let b=r(),c=await v(b),d=new Set((c.removedWorkspaces??[]).map(t)),e=new Set(c.workspaces.map(t)),f=!1;for(let b of a){if(!b||"string"!=typeof b)continue;let a=t(j().resolve(b));d.has(a)||e.has(a)||(e.add(a),f=!0)}return f?x(async(b,c)=>{let d=!1,e=new Set((b.removedWorkspaces??[]).map(t)),f=new Set(b.workspaces.map(t));for(let c of a){if(!c||"string"!=typeof c)continue;let a=j().resolve(c),g=t(a);e.has(g)||f.has(g)||(b.workspaces.push(a),f.add(g),d=!0)}return d&&await u(b,c),b.workspaces}):c.workspaces}async function H(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{if(a.workspaces=a.workspaces.filter(a=>t(a)!==c),a.removedWorkspaces||(a.removedWorkspaces=[]),a.removedWorkspaces.some(a=>t(a)===c)||a.removedWorkspaces.push(b),a.aliases)for(let b of Object.keys(a.aliases))t(b)===c&&delete a.aliases[b];return await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces,aliases:a.aliases??{}}})}let L=!1;function I(a,b={}){let{timeoutMs:c=3e5,windowsHide:d=!1}=b;return new Promise((b,e)=>{let f,g=(0,l.spawn)(a[0],a.slice(1),{stdio:["ignore","pipe","pipe"],windowsHide:d}),h=new m.StringDecoder("utf8"),i="",j="",k=!1;g.stdout.on("data",a=>{i+=h.write(a)}),g.stderr.on("data",a=>{j=(j+a.toString("utf8")).slice(-1e3)});let n=!1,o=a=>{n||(n=!0,clearTimeout(f),k||(k=!0,i+=h.end()),a?e(a):b(i.trim()))};g.on("error",a=>o(a)),g.on("close",a=>o(0===a?void 0:Error(j||`folder picker exited with code ${a}`))),f=setTimeout(()=>{try{g.kill()}catch{}o(Error("folder picker timed out"))},c)})}async function J(){if(L)return{path:null,canceled:!0};L=!0;try{if("win32"===process.platform){let a=j().join(k.V,"scripts","pick-folder.ps1"),b=await I(["powershell.exe","-NoProfile","-STA","-ExecutionPolicy","Bypass","-File",a,"选择工作区文件夹"],{windowsHide:!0});return b?{path:b,canceled:!1}:{path:null,canceled:!0}}if("darwin"===process.platform){let a=await I(["osascript","-e",'POSIX path of (choose folder with prompt "选择工作区文件夹")']),b=function(a){let b=a.trim();if((b=b.replace(/^alias\s+/i,"").replace(/^"(.*)"$/s,"$1")).startsWith("/"))return b.replace(/\\(.)/g,"$1");if(/^[A-Za-z][A-Za-z0-9 ]*:(.+)$/.test(b)){let a=b.slice(b.indexOf(":")+1);return`/${a.split(":").filter(Boolean).join("/")}`}return b}(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}for(let a of[["zenity","--file-selection","--directory","--title=选择工作区文件夹"],["kdialog","--getexistingdirectory",`${h().homedir()}`,"--title","选择工作区文件夹"]])try{let b=await I(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}catch(a){if(a instanceof Error&&/ENOENT|not found|not recognized/i.test(a.message))continue;if(/exited with code (1|5)$/.test(a instanceof Error?a.message:String(a)))return{path:null,canceled:!0};throw a}throw Error("no folder picker available: install zenity or kdialog, or type the path manually")}finally{L=!1}}d()}catch(a){d(a)}})},14719:(a,b,c)=>{c.d(b,{X:()=>e});var d=c(77598);function e(a){let b=new Map,c=new Map,e=!1,f=(c,f,g,h)=>{if(e||!a.hasViewers()||f?.signal?.aborted)return Promise.resolve(g);let i=(0,d.randomUUID)();return new Promise(d=>{let e=c=>{let e=b.get(i);e&&(b.delete(i),e.timer&&clearTimeout(e.timer),e.removeAbortListener?.(),a.publish({type:"extension_ui_resolved",id:i,ts:Date.now()}),d(c?h(c):g))},j={type:"extension_ui",id:i,...c,timeout:f?.timeout,ts:Date.now()},k={request:j,resolve:a=>e(a)};k.timer=setTimeout(()=>e(null),f?.timeout??6e5),k.timer.unref?.();let l=()=>e(null);f?.signal?.addEventListener("abort",l,{once:!0}),k.removeAbortListener=()=>f?.signal?.removeEventListener("abort",l),b.set(i,k),a.publish(j)})};return{uiContext:{select:(a,b,c)=>f({method:"select",title:a,options:b},c,void 0,a=>a.cancelled?void 0:a.value),confirm:(a,b,c)=>f({method:"confirm",title:a,message:b},c,!1,a=>!a.cancelled&&!0===a.confirmed),input:(a,b,c)=>f({method:"input",title:a,placeholder:b},c,void 0,a=>a.cancelled?void 0:a.value),notify:(b,c)=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"notify",message:b,notifyType:c??"info",ts:Date.now()})},setStatus:(b,e)=>{void 0===e?c.delete(b):c.set(b,e),a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setStatus",statusKey:b,statusText:e,ts:Date.now()})},setWorkingMessage:b=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setWorkingMessage",message:b,ts:Date.now()})},onTerminalInput:()=>()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:()=>{},setFooter:()=>{},setHeader:()=>{},setTitle:()=>{},custom:async()=>void 0,pasteToEditor:()=>{},setEditorText:()=>{},getEditorText:()=>"",editor:async()=>void 0,addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>{},getToolsExpanded:()=>!1,setToolsExpanded:()=>{}},statuses:c,getPendingRequests:()=>[...b.values()].map(({request:a})=>({...a,options:a.options?[...a.options]:void 0})),respond(a,c){let d=b.get(a);return!!d&&(d.resolve(c),!0)},dispose(){for(let a of(e=!0,b.values()))a.resolve({cancelled:!0});b.clear()}}}},22567:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>g});var e=c(75430),f=a([e]);function g(a,b,c){let d;if(c<=0)return null;let f=0;for(let c of a.entries)for(let a of c.messages){if("assistant"===a.role&&"error"!==a.stopReason&&"aborted"!==a.stopReason&&a.usage){let g=(0,e.calculateContextTokens)(a.usage);g>0&&(d={tokens:g,messageIndex:f,branchIndex:b.findIndex(a=>a.id===c.sourceEntry.id)})}f++}let g=b.findLastIndex(a=>"compaction"===a.type);if(g>=0&&(!d||d.branchIndex<=g))return{tokens:null,contextWindow:c,percent:null};let h=b.findLastIndex(a=>"compaction"===a.type||"context_edit"===a.type),i=d&&d.branchIndex>h?d.tokens+a.messages.slice(d.messageIndex+1).reduce((a,b)=>a+(0,e.estimateTokens)(b),0):a.messages.reduce((a,b)=>a+(0,e.estimateTokens)(b),0);return{tokens:i,contextWindow:c,percent:i/c*100}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},28686:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B1:()=>ao,H$:()=>x,Hx:()=>ae,Lf:()=>P,Lz:()=>an,PO:()=>am,Rq:()=>aw,SG:()=>Q,Sj:()=>ak,al:()=>ap,bS:()=>M,g7:()=>au,kQ:()=>aq,lX:()=>av,mk:()=>N,oW:()=>aj,tX:()=>al,vJ:()=>ax});var e=c(73024),f=c(77598),g=c(76760),h=c.n(g),i=c(75430),j=c(87982),k=c(14719),l=c(35851),m=c(34007),n=c(22567),o=c(3672),p=c(31374),q=c(29296),r=c(62433),s=c(53634),t=c(6896),u=c(28802),v=a([i,j,n,p,r,t,u]);[i,j,n,p,r,t,u]=v.then?(await v)():v;let ay=globalThis,az=ay.__piWebSessions??=new Map;function w(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(w).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}function x(a,b){if(!a||"object"!=typeof a)return{role:"other",content:[]};let c={role:"other",content:[]};b?c.id=b:"string"==typeof a.id&&(c.id=a.id),"number"==typeof a.timestamp&&(c.timestamp=a.timestamp);let d=[];for(let b of Array.isArray(a.content)?a.content:"string"==typeof a.content?[{type:"text",text:a.content}]:[])b&&"object"==typeof b&&("text"===b.type&&"string"==typeof b.text?d.push({type:"text",text:b.text}):"thinking"===b.type&&"string"==typeof b.thinking?d.push({type:"thinking",thinking:b.thinking}):"toolCall"===b.type?d.push({type:"toolCall",id:String(b.id??""),name:String(b.name??""),arguments:b.arguments}):"image"===b.type&&"string"==typeof b.data&&"string"==typeof b.mimeType&&d.push({type:"image",data:b.data,mimeType:b.mimeType}));if(c.content=d,"user"===a.role)c.role="user";else if("assistant"===a.role)c.role="assistant",c.stopReason=a.stopReason,c.errorMessage=a.errorMessage??void 0,c.usage=(0,o.H4)(a.usage),a.usage?.cost?.total!=null&&(c.usage={...c.usage,cost:{total:a.usage.cost.total}}),c.model="string"==typeof a.model?a.model:void 0,c.provider="string"==typeof a.provider?a.provider:void 0;else if("toolResult"===a.role){c.role="toolResult";let b=(0,q.R)(w(a.content));c.content=[{type:"toolResult",toolCallId:a.toolCallId,text:b.text,isError:!0===a.isError,encodingLoss:b.encodingLoss||void 0,patch:z(a.details)}]}return c}let aA=new WeakMap;function y(a,b){return{...x(b,function(a,b){if(!b||"object"!=typeof b)return;let c=a.getEntryCount,d=c?null:a.getEntries(),e=c?c.call(a):d.length,f=aA.get(a);if(!f||f.count!==e){for(let b of(f={count:e,ids:new WeakMap},d??a.getEntries()))b?.type==="message"&&b.message&&"object"==typeof b.message&&f.ids.set(b.message,b.id);aA.set(a,f)}return f.ids.get(b)}(a.sm,b)),streamId:function(a,b){if(!b||"object"!=typeof b)return;a.messageIds??=new WeakMap;let c=a.messageIds.get(b);return c||(c=(0,f.randomUUID)(),a.messageIds.set(b,c)),c}(a,b)}}function z(a){let b=a?.patch;return"string"==typeof b&&b.trim()?b.slice(0,6e4):void 0}let aB=new Map;function A(a){return{target:"string"==typeof a?.path?a.path:"string"==typeof a?.file_path?a.file_path:"",content:"string"==typeof a?.content?a.content:void 0}}function B(a){if(null!=a){if("string"==typeof a)return a.slice(-4e3);if(Array.isArray(a))return a.map(w).join("").slice(-4e3)||void 0;if("object"==typeof a){let b=w(a.content);if(b)return b.slice(-4e3);try{return JSON.stringify(a).slice(-4e3)}catch{}}}}let aC=new WeakMap;function C(a){let b=aC.get(a);if(b){for(;b.length>0&&null!==b[0].events;)for(let c of b.shift().events)D(a,c);0===b.length&&aC.delete(a)}}function D(a,b){if(a.disposed)return;a.seq+=1;let c=JSON.stringify(b);for(let b of(a.buffer.push({seq:a.seq,json:c}),a.buffer.length>400&&a.buffer.shift(),a.subscribers))try{b(a.seq,c)}catch{a.subscribers.delete(b)}}function E(a,b){let c=aC.get(a);if(!c)return D(a,b);c.push({events:[b]}),C(a)}function F(a,b){let c=b.model;E(a,{type:"model",provider:c?String(c.provider??""):void 0,model:c?String(c.id??""):void 0,thinkingLevel:String(b.thinkingLevel??""),thinkingLevels:b.getAvailableThinkingLevels(),ts:Date.now()})}function G(a,b){if(!a.desiredThinkingLevel)return;let c=(0,u.clampThinkingLevel)(b.model,a.desiredThinkingLevel);c!==b.thinkingLevel&&b.setThinkingLevel(c)}function H(a){let b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;for(let k of a.ledger.entries){if("tool"===k.kind){k.timing?.durationMs!==void 0&&i++,c+=Math.max(0,k.timing?.durationMs??0);continue}"message"===k.kind&&(k.timing?.durationMs!==void 0&&h++,b+=Math.max(0,k.timing?.durationMs??0),k.timing?.ttftMs!==void 0&&(d+=Math.max(0,k.timing.ttftMs),e+=1),(k.timing?.decodeMs??0)>0&&k.tokens?.output!==void 0&&(j++,f+=Math.max(0,k.timing?.decodeMs??0),g+=Math.max(0,k.tokens.output)))}return{llmMs:b,toolMs:c,ttftMs:d,ttftSteps:e,decodeMs:f,decodeTokens:g,llmTimedSteps:h,toolTimedCalls:i,decodeSteps:j}}function I(a){if(!a.session)return null;try{let b=a.session.getSessionStats();return{userMessages:b.userMessages,assistantMessages:b.assistantMessages,toolCalls:b.toolCalls,totalMessages:b.totalMessages,tokens:b.tokens,cost:b.cost,...H(a)}}catch{return null}}function J(a){if(!a.session)return null;let b=I(a),c=a.session.getContextUsage()??null;return{type:"usage",stats:b,contextUsage:c?{tokens:c.tokens,contextWindow:c.contextWindow,percent:c.percent}:null,ts:Date.now()}}function K(a){let b=J(a);b&&E(a,b)}function L(a){return a.growth&&a.growth.version!==l.I&&(a.growth.dispose(),a.growth=null),a.growth??=(0,l.k)({cwd:a.cwd,sessionPath:a.sessionPath,publish:b=>E(a,b),entries:()=>a.sm.getEntries(),consent:()=>(0,t.qM)(a.cwd).catch(()=>null)})}async function M(a){return O(a),L(a).recordNow()}async function N(a,b){O(a),await (0,t.cH)(a.cwd,b);let c=a=>"win32"===process.platform?h().resolve(a).toLowerCase():h().resolve(a);for(let d of az.values())d!==a&&d.growth?.getConsentRequest()&&c(d.cwd)===c(a.cwd)&&d.growth.consentAnswered(b).catch(()=>void 0);return L(a).consentAnswered(b)}function O(a){a.lastActive=Date.now()}let aD=new Set;function P(a){for(let b of a){if(!b||aD.size>=2)return;let a="win32"===process.platform?b.toLowerCase():b;!aD.has(a)&&(aD.add(a),(0,j.v9)(b)||(0,j.Df)(b).catch(()=>void 0))}}function Q(a){let b=az.get(a);if(!b){if(!(0,e.existsSync)(a))throw new r.BV("session not found");let c=(0,j.G1)(a);b=R(a,c.getCwd()||process.cwd(),c)}return O(b),b}function R(a,b,c){let d=[];try{d=(0,o.WZ)(c.getEntries())}catch{}let e={sessionPath:a,cwd:b,sm:c,session:null,creating:null,subscribers:new Set,buffer:[],seq:0,epoch:(0,f.randomUUID)().replace(/-/g,"").slice(0,12),inflight:null,ui:null,growth:null,ledger:new o.Pn(d),lastActive:Date.now(),toolPreset:"readonly",requestedTools:new Set,resourceVersion:0,resourceReloadPending:!1,resourceReloading:!1,promptSubmitting:!1,runActive:!1,disposed:!1,messageIds:new WeakMap};return az.set(a,e),e}function S(a,b=(0,j.ye)(a)){let c=b.getAgentsFiles().agentsFiles.map(a=>({path:a.path,content:a.content,source:"project"})),d=b.getAppendSystemPrompt(),e=b.getAppendSystemPromptSources();return[...c,...d.map((a,b)=>({path:e[b]?.path??`Appended system prompt ${b+1}`,content:a,source:"extension"}))]}let aE="</available_skills>";async function T(a,b){let c=a.session,d={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0,autoCompactBuffer:0,...c?{}:{cold:!0}},e=b.filter(a=>"project"===a.source).map(a=>a.content).join("\n\n"),f={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0};try{let b=a.sm.buildSessionProjection().messages,g=b.findLast(a=>"system"===a.role);if(g){let a="string"==typeof g.content?g.content.length:w(g.content).length;f.memory=g.sections?.project_context?.length??0,f.skills=g.sections?.skills?.length??0,f.systemPrompt=a+Object.entries(g.sections??{}).filter(([a])=>"project_context"!==a&&"skills"!==a).reduce((a,[,b])=>a+("string"==typeof b?b.length:0),0);let b=new Set(c?c.getAllTools().filter(a=>a.sourceInfo?.source==="builtin").map(a=>a.name):["read","bash","edit","write","grep","find","ls"]);for(let a of g.toolsAdded??[])f[b.has(a.name)?"systemTools":"customTools"]+=JSON.stringify(a).length;delete d.cold}else if(c){let a=c.systemPrompt??"";f.memory=e.length;let b=a.indexOf("The following skills provide specialized instructions"),d=a.indexOf(aE);f.skills=b>=0&&d>b?a.slice(b,d+aE.length).length:0,f.systemPrompt=Math.max(0,a.length-f.memory-f.skills);let g=new Set(c.getActiveToolNames());for(let a of c.getAllTools().filter(a=>g.has(a.name))){let b=JSON.stringify({name:a.name,description:a.description,parameters:a.parameters}).length;f[a.sourceInfo?.source==="builtin"?"systemTools":"customTools"]+=b}}else{f.memory=e.length;let b=(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd);f.skills=(0,i.formatSkillsForPrompt)(b.getSkills().skills).trim().length}for(let a of b)("compactionSummary"===a.role||"branchSummary"===a.role)&&(f.compacted+=a.summary?.length??0);for(let a of(d.characters=f,Object.keys(f)))d[a]=Math.ceil(f[a]/4)}catch{}try{let b=(0,j.vT)(a.cwd).getCompactionSettings(c?.model);b.enabled&&(d.autoCompactBuffer=b.reserveTokens)}catch{}return d}function U(a){a.breakdownQueued||a.disposed||(a.breakdownQueued=!0,queueMicrotask(()=>{if(a.breakdownQueued=!1,a.disposed)return;let b=[];try{b=S(a.cwd,a.session?.resourceLoader)}catch{}T(a,b).then(b=>{a.disposed||E(a,{type:"context_breakdown",breakdown:b,ts:Date.now()})},()=>void 0)}))}function V(a,b,c){let d=a.ledger.entries[0]?.ts??Date.now(),e=[];b?.systemPrompt&&e.push({seq:-1,kind:"system",ts:d,title:"Initial System Prompt",detail:b.systemPrompt});try{(c??S(a.cwd,a.session?.resourceLoader)).forEach((a,b)=>e.push({seq:-2-b,kind:"context",ts:d,title:a.path,detail:a.content}))}catch{}return e}function W(a,b){for(let c of V(a,b))E(a,{type:"traj",entry:c,ts:Date.now()})}async function X(a){if(a.disposed)throw Error("session is disposed");return a.creating?a.creating:a.session?a.session:(a.creating=(async()=>{let b;await (0,j.Df)(a.cwd);let c=await (0,j.Yb)(a.cwd);try{var d,f;let g,l;if(a.disposed)throw Error("session is disposed");let{session:m}=await (0,j.az)({cwd:a.cwd,agentDir:(0,j.$M)(),sessionManager:a.sm,modelRuntime:await (0,j.uU)(),resourceLoader:c,settingsManager:(0,j.vT)(a.cwd)});if(b=m,a.disposed)throw Error("session is disposed");a.session=m,a.requestedTools=new Set(m.getActiveToolNames()),d=a,g=(f=m).setActiveToolsByName.bind(f),aF.set(f,g),f.setActiveToolsByName=a=>{let b=[...new Set(a)];for(let a of ac(f))b.includes(a)||d.requestedTools.delete(a);for(let a of b)d.requestedTools.add(a);let c=Z(d,f);g(b.filter(a=>c.includes(a)))},l=f.reload.bind(f),f.reload=async a=>{if(d.disposed)throw Error("session is disposed");if(Y(d))throw Error("session is busy");d.resourceReloading=!0;try{await (0,j.YW)(async()=>{if(d.disposed||d.runActive||!f.isIdle)throw Error("session is busy");await l({beforeSessionStart:async()=>{for(let a of ac(f))d.requestedTools.add(a);$(d,f),await a?.beforeSessionStart?.(),$(d,f)}})}),d.resourceVersion=(0,j.Ec)(d.cwd)}finally{$(d,f),d.resourceReloading=!1,d.disposed||(aa(d,f),W(d,f),ag(d))}},$(a,m),m.subscribe(b=>{a.disposed||function(a,b){a.ledger.onEvent(b),L(a).onEvent(b);let c=Date.now();switch(b.type){case"message_start":{let d=b.message,e=y(a,d);"assistant"===e.role&&(a.inflight=d,a.inflightId=e.streamId,a.inflightIndex=a.session?.messages.length,e.stopReason="pending",e.content=e.content.map(a=>"text"===a.type?{...a,text:""}:"thinking"===a.type?{...a,thinking:""}:a)),("user"===e.role||"assistant"===e.role)&&E(a,{type:"message",message:e,phase:"start",ts:c});break}case"message_update":{let d=b.assistantMessageEvent;if(b.message&&(a.inflight=b.message,a.inflightId&&a.messageIds.set(b.message,a.inflightId)),!d)break;"text_delta"===d.type&&"string"==typeof d.delta?E(a,{type:"delta",kind:"text",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c}):"thinking_delta"===d.type&&"string"==typeof d.delta&&E(a,{type:"delta",kind:"thinking",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c});break}case"message_end":{let d,e,f=b.message;f?.role==="assistant"&&(a.inflightId&&a.messageIds.set(f,a.inflightId),a.inflight=null,a.inflightId=void 0,a.inflightIndex=void 0),d=aC.get(a)??[],e={events:null},d.push(e),aC.set(a,d),queueMicrotask(()=>{e.events=(()=>{let b=y(a,f);"assistant"===b.role&&(b.endedAt=c,a.breakdownProjected||(a.breakdownProjected=!0,U(a)));let d=J(a);return d?[{type:"message",message:b,phase:"end",ts:c},d]:[{type:"message",message:b,phase:"end",ts:c}]})(),C(a)});break}case"tool_execution_start":b.toolName?.toLowerCase()==="write"&&function(a,b,c,d){let{target:f}=A(d);if(f)try{let d=h().isAbsolute(f)?f:h().resolve(a,f),g=(0,e.statSync)(d);if(!g.isFile()||g.size>524288)return;let i=(0,e.readFileSync)(d,"utf8");if(i.includes("\0"))return;aB.size>=256&&aB.delete(aB.keys().next().value),aB.set(`${b}\0${c}`,i)}catch{}}(a.cwd,a.sessionPath,b.toolCallId,b.args),E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",ts:c});break;case"tool_execution_update":{let d=(0,q.R)(B(b.partialResult)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,state:"running",partialResult:d.text||void 0,encodingLoss:d.encodingLoss||void 0,ts:c});break}case"tool_execution_end":{let d=(0,q.R)(B(b.result)??"");E(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"done",result:d.text||void 0,isError:b.isError,encodingLoss:d.encodingLoss||void 0,patch:z(b.result?.details)??(b.toolName?.toLowerCase()==="write"?function(a,b,c,d){let e=`${b}\0${c}`,f=aB.get(e);if(aB.delete(e),void 0===f)return;let{target:g,content:h}=A(d);if(void 0!==h&&h!==f)try{return(0,i.generateUnifiedPatch)(g,f,h).slice(0,6e4)}catch{return}}(a.cwd,a.sessionPath,b.toolCallId,b.args):void 0),ts:c}),K(a);break}case"agent_start":a.runActive=!0,E(a,{type:"status",isStreaming:!0,state:"running",ts:c});break;case"agent_end":K(a);break;case"agent_settled":a.runActive=!1,E(a,{type:"status",isStreaming:!1,state:"idle",ts:c}),K(a),a.resourceReloadPending&&queueMicrotask(()=>void ah(a));break;case"queue_update":E(a,{type:"queue",steering:[...b.steering],followUp:[...b.followUp],ts:c});break;case"compaction_start":E(a,{type:"status",isStreaming:!0,state:"compacting",ts:c}),E(a,{type:"compaction",phase:"start",reason:b.reason,ts:c});break;case"compaction_end":E(a,{type:"compaction",phase:"end",reason:b.reason,errorMessage:b.errorMessage,ts:c}),K(a),U(a),"manual"===b.reason&&(E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:c}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a)));break;case"session_info_changed":E(a,{type:"name",name:b.name??"",ts:c});break;case"thinking_level_changed":a.session?F(a,a.session):E(a,{type:"model",thinkingLevel:b.level,ts:c});break;case"auto_retry_start":E(a,{type:"retry",attempt:Number(b.attempt)||0,maxAttempts:Number(b.maxAttempts)||0,message:String(b.errorMessage??""),ts:c});break;case"auto_retry_end":E(a,{type:"retry_end",attempt:Number(b.attempt)||0,ts:c})}for(let b of a.ledger.drainDirty())E(a,{type:"traj",entry:b,ts:Date.now()})}(a,b)});let n=(0,k.X)({publish:b=>E(a,b),hasViewers:()=>!a.disposed&&ar(a)});if(a.ui=n,await m.bindExtensions({mode:"rpc",uiContext:n.uiContext,onError:b=>{E(a,{type:"error",message:`扩展 ${b.extensionPath.split(/[\\/]/).pop()} 在 ${b.event} 出错:${b.error}`,ts:Date.now()})},abortHandler:()=>void m.abort().catch(()=>void 0)}),a.disposed)throw Error("session is disposed");return $(a,m),a.resourceVersion=(0,j.Ec)(a.cwd),W(a,m),aa(a,m),ag(a),K(a),m}catch(e){a.ui?.dispose(),a.ui=null;let d=c.getExtensions().runtime;throw b?_(b).finally(()=>d.invalidate()):d.invalidate(),a.session=null,e}})().catch(b=>{throw a.disposed||E(a,{type:"error",message:String(b?.message??b),ts:Date.now()}),b}).finally(()=>{a.creating=null}),a.creating)}function Y(a){return a.promptSubmitting||a.resourceReloading||a.runActive||!!(a.session&&!a.session.isIdle)}function Z(a,b){let c=a.customActiveTools;return ab(b).filter(b=>c?c.includes(b):(0,j.YQ)(a.toolPreset,b))}let aF=new WeakMap;function $(a,b){let c=function(a,b){let c=Z(a,b);if(a.customActiveTools)return c;let d=new Set(b.getAllTools().filter(a=>("direct"===a.exposure||"model-only"===a.exposure)&&b.getToolDefinition(a.name)?.defaultActive!==!1).map(a=>a.name));return c.filter(b=>d.has(b)||a.requestedTools.has(b))}(a,b);(aF.get(b)??b.setActiveToolsByName.bind(b))(c)}let aG=new WeakMap;function _(a){let b,c=aG.get(a);if(c)return c;try{a.agent.abort()}catch{}let d=Promise.resolve();try{let b=a.extensionRunner;b.hasHandlers("session_shutdown")&&(d=b.emit({type:"session_shutdown",reason:"quit"}))}catch{}let e=new Promise(a=>{b=setTimeout(a,5e3),b.unref?.()}),f=Promise.race([d.then(()=>void 0,()=>void 0),e]).finally(()=>{clearTimeout(b);try{a.dispose()}catch{}});return aG.set(a,f),f}function aa(a,b){E(a,{type:"tools",active:ac(b),all:ab(b),toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,ts:Date.now()}),U(a)}function ab(a){let b=a.getAllTools?.();return b?b.map(a=>a.name):[]}function ac(a){return a.getActiveToolNames?.()??[]}function ad(a){if(!a.disposed){for(let b of(a.disposed=!0,a.ui?.dispose(),a.ui=null,a.growth?.dispose(),a.growth=null,a.session&&_(a.session),a.creating&&a.creating.then(a=>a?_(a):void 0).catch(()=>void 0),a.subscribers))try{b(a.seq,JSON.stringify({type:"status",isStreaming:!1,state:"disposed",ts:Date.now()}))}catch{}a.subscribers.clear(),az.delete(a.sessionPath)}}async function ae(a){let b=az.get(a);if(!b)return;let c=b.session??(b.creating?await b.creating.catch(()=>null):null);c?.isStreaming&&await c.abort().catch(()=>void 0),ad(b)}{let a=globalThis;a.__piWebReaper&&clearInterval(a.__piWebReaper),a.__piWebReaper=setInterval(function(){let a=Date.now();for(let b of[...az.values()])!ar(b)&&!(a-b.lastActive<=6e5)&&(b.creating||Y(b)||ad(b));let b=[...az.values()].filter(a=>a.session);if(b.length>6)for(let a of b.filter(a=>!a.creating&&!Y(a)&&!ar(a)).sort((a,b)=>a.lastActive-b.lastActive).slice(0,b.length-6))ad(a)},6e4),a.__piWebReaper.unref?.()}function af(a){let b=a.session?.resourceLoader??(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd),c=[],d=[];try{let a=b.getSkills();for(let b of(d=a.skills.map(a=>({name:String(a.name??""),description:String(a.description??"")})),a.diagnostics??[]))c.push({kind:"skill",path:b.path,message:b.message})}catch{d=[]}let e=[];try{let a=b.getPrompts();for(let b of(e=a.prompts.map(a=>({name:String(a.name??""),description:String(a.description??""),argumentHint:a.argumentHint})),a.diagnostics??[]))c.push({kind:"prompt",path:b.path,message:b.message})}catch{e=[]}try{for(let a of b.getExtensions().errors??[])c.push({kind:"extension",path:a.path,message:a.error})}catch{}let f=[];if(a.session)try{let b=a.session.extensionRunner;if(b)for(let a of(f=b.getRegisteredCommands().map(a=>({name:a.invocationName,description:String(a.description??""),source:String(a.sourceInfo?.path??"").split(/[\\/]/).pop()??""})),b.getCommandDiagnostics()??[]))c.push({kind:"command",path:a.path,message:a.message})}catch{f=[]}return{skills:d,promptTemplates:e,extensionCommands:f,projectTrust:(0,j.af)(a.cwd),resourceDiagnostics:c}}function ag(a){E(a,{type:"resources",...af(a),ts:Date.now()}),U(a)}async function ah(a){if(a.disposed||!a.session||a.creating||Y(a))return!1;a.resourceReloadPending=!1;try{return await a.session.reload(),ai(a.session),!0}catch(b){return E(a,{type:"error",message:`重载扩展失败:${String(b?.message??b)}`,ts:Date.now()}),!1}finally{a.resourceReloadPending&&!Y(a)&&queueMicrotask(()=>void ah(a))}}function ai(a){let b=a.model,c=b&&a.modelRuntime.getModel(b.provider,b.id);c&&c!==b&&(a.agent.state.model=c)}function aj(a,b){let c=0;for(let d of az.values()){let e=d.session?.model;d.session&&e?.provider===a&&e.id===b&&(ai(d.session),K(d),c+=1)}return c}async function ak(a){let b=a=>"win32"===process.platform?a.replace(/\\/g,"/").toLowerCase():a.replace(/\\/g,"/"),c=0;for(let d of az.values())if(!a||b(d.cwd)===b(a)){if(!d.session){ar(d)&&ag(d);continue}if(d.creating||Y(d)){d.resourceReloadPending=!0,E(d,{type:"error",message:"资源已更新,将在本轮结束后生效",ts:Date.now()}),ag(d);continue}await ah(d)&&(c+=1)}return c}async function al(a){let b,c,d,e;O(a),await (0,j.Df)(a.cwd);try{a.session&&Y(a)?((0,j.Dc)(a.cwd)||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0):(await (0,j.jz)(a.cwd),a.session&&(a.resourceReloadPending||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0,await ah(a)))}catch{}let f=a.session,g=[],h=!1,i=["off","minimal","low","medium","high","xhigh","max"];if(f){let e=function(a,b){if(!a.inflightId||void 0===a.inflightIndex)return!1;let c=b.messages[a.inflightIndex];return!!c&&"assistant"===c.role&&(a.messageIds.set(c,a.inflightId),!0)}(a,f);if(g=f.messages.map(b=>y(a,b)),!e&&a.inflight){let b=y(a,a.inflight);"assistant"===b.role&&g.push({...b,stopReason:"pending"})}b=a.seq;let j=f.model;j&&(c={provider:String(j.provider??""),id:String(j.id??""),name:String(j.name??j.id??"")}),d=String(f.thinkingLevel??"");try{i=f.getAvailableThinkingLevels()}catch{}h=Y(a)}else{try{g=a.sm.buildContextEntries().filter(a=>"message"===a.type&&a.message).map(a=>x(a.message,a.id))}catch{g=[]}try{let b=a.sm,e=b.buildSessionContext?.();if(e?.model&&(c={provider:e.model.provider,id:e.model.modelId,name:e.model.modelId}),d=e?.thinkingLevel,e?.model){let a=(await (0,j.uU)()).getModel(e.model.provider,e.model.modelId);a&&(i=(0,u.getSupportedThinkingLevels)(a),d&&(d=(0,u.clampThinkingLevel)(a,d)))}}catch{}}let k=f?I(a):function(a){let b=0,c=0,d=0,e=0,f={input:0,output:0,cacheRead:0,cacheWrite:0,total:0},g=0,h=a=>{a&&"object"==typeof a&&(f.input+=Number(a.input??0),f.output+=Number(a.output??0),f.cacheRead+=Number(a.cacheRead??0),f.cacheWrite+=Number(a.cacheWrite??0),g+=Number(a.cost?.total??0))};for(let f of a.sm.getEntries()){if(("usage"===f.type||"branch_summary"===f.type||"compaction"===f.type)&&f.usage&&h(f.usage),"message"!==f.type||!f.message)continue;e+=1;let a=f.message;"user"===a.role?b+=1:"assistant"===a.role?(c+=1,d+=Array.isArray(a.content)?a.content.filter(a=>a?.type==="toolCall").length:0,h(a.usage)):"toolResult"===a.role&&h(a.usage)}return f.total=f.input+f.output+f.cacheRead+f.cacheWrite,{userMessages:b,assistantMessages:c,toolCalls:d,totalMessages:e,tokens:f,cost:g,...H(a)}}(a),l=null;if(f){let a=f.getContextUsage()??null;l=a?{tokens:a.tokens,contextWindow:a.contextWindow,percent:a.percent}:null}else if(c)try{let b=(await (0,j.uU)()).getModels(c.provider).find(a=>String(a.id)===c.id);l=(0,n.$)(a.sm.buildSessionProjection(),a.sm.getBranch(),Number(b?.contextWindow??0))}catch{}let p=f?{active:ac(f),all:ab(f).map(a=>({name:a}))}:{active:[],all:[]},q=f?{steering:[...f.getSteeringMessages()],followUp:[...f.getFollowUpMessages()]}:{steering:[],followUp:[]},r="";try{r=a.sm.getSessionName?.()??""}catch{r=""}let s=[],t=!1;try{s=S(a.cwd,a.session?.resourceLoader),t=!0}catch{s=[]}try{e=await T(a,s)}catch{e=void 0}let v=af(a),w=a.ledger.entries.length?a.ledger.entries:function(a){try{return(0,o.WZ)(a.sm.getEntries())}catch{return[]}}(a),z=[...V(a,f,t?s:void 0),...w];return{seq:b??a.seq,sessionPath:a.sessionPath,cwd:a.cwd,name:r,contextFiles:s.map(a=>a.path),contextResources:s,contextBreakdown:e,...v,messages:g,userTurns:(0,m.g)(a.sm.getEntries()),growthError:a.growth?.getError?.()??null,growthConsent:a.growth?.getConsentRequest?.()??null,model:c,thinkingLevel:d,thinkingLevels:i,toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,extensionUiRequests:a.ui?.getPendingRequests()??[],extensionStatuses:Object.fromEntries(a.ui?.statuses??[]),tools:p,stats:k,contextUsage:l,queue:q,trajectory:z,isStreaming:h}}function am(a,b){return`${a.epoch}.${b}`}function an(a,b){let c=/^([A-Za-z0-9]+)\.(\d+)$/.exec(b?.trim()??"");if(!c||c[1]!==a.epoch)return;let d=Number(c[2]);return Number.isSafeInteger(d)?d:void 0}function ao(a,b,c){if(O(a),c<0||c>a.seq)return!1;let d=a.buffer.filter(a=>a.seq>c);if(d.length!==a.seq-c)return!1;let e=new Set(a.ui?.getPendingRequests().map(a=>a.id));if(d.some(a=>{let b=JSON.parse(a.json);return"extension_ui"===b.type&&["select","confirm","input"].includes(b.method)&&!e.has(b.id)}))return!1;for(let c of(a.subscribers.add(b),d))b(c.seq,c.json);return!0}function ap(a,b){a.subscribers.delete(b)}function aq(a,b){a.viewerGraceUntil=Math.max(a.viewerGraceUntil??0,Date.now()+b)}function ar(a){return a.subscribers.size>0||(a.viewerGraceUntil??0)>Date.now()}async function as(a){await Promise.race([L(a).prepare().catch(()=>void 0),new Promise(a=>setTimeout(a,5e3))])}function at(a,b,c,d={}){return new Promise(e=>{let f=!1;b.prompt(c,{...d,source:"rpc",preflightResult:a=>{a&&(f=!0,e({ok:!0,data:{accepted:!0}}))}}).then(()=>{f||e({ok:!1,error:"prompt completed without acceptance"})},b=>{let c=String(b?.message??b);f?E(a,{type:"error",message:c,ts:Date.now()}):e({ok:!1,error:c})})})}async function au(a,b){O(a);try{switch(b.cmd){case"prepare":return await X(a),{ok:!0};case"prompt":{let c=(b.text??"").trim();if(!c&&!b.images?.length)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let d=await X(a);if(a.disposed)throw Error("session is disposed");if((d.isStreaming||a.runActive)&&!b.behavior)return{ok:!1,error:"session is busy; choose steer or followUp"};if(d.isStreaming||await as(a),a.disposed)throw Error("session is disposed");return await at(a,d,c,{images:b.images,streamingBehavior:b.behavior})}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a))}}case"steer":case"followUp":{if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};let c=await X(a);if(a.promptSubmitting||a.resourceReloading||!c.isStreaming)return{ok:!1,error:"session is not accepting queued messages"};return await c[b.cmd](b.text??"",b.images),{ok:!0}}case"clearQueue":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return E(a,{type:"queue",steering:[],followUp:[],ts:Date.now()}),{ok:!0,data:b}}case"abort":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return await a.session.abort(),E(a,{type:"status",isStreaming:!1,state:"aborted",ts:Date.now()}),{ok:!0,data:b}}case"compact":{let c=await X(a);return await c.compact(b.instructions||void 0),{ok:!0}}case"setModel":{let c=await X(a),d=(await (0,j.uU)()).getModels(b.provider).find(a=>a.id===b.modelId);if(!d)return{ok:!1,error:`unknown model ${b.provider}/${b.modelId}`};return await c.setModel(d,{persist:!1}),G(a,c),!0!==b.fresh||a.desiredThinkingLevel||function(a,b){let c=b.model;if(!c)return;let d=(0,j.vT)(a.cwd),e=(0,s.dD)({supported:b.getAvailableThinkingLevels(),modelOverride:d.getModelThinkingLevel(c.provider,c.id),defaultLevel:d.getDefaultThinkingLevel()});e!==b.thinkingLevel&&b.setThinkingLevel(e)}(a,c),F(a,c),{ok:!0,data:{thinkingLevel:c.thinkingLevel,thinkingLevels:c.getAvailableThinkingLevels()}}}case"setThinkingLevel":{let c=await X(a),d=String(b.level??"medium"),e=(0,u.clampThinkingLevel)(c.model,d);return a.desiredThinkingLevel=d,c.setThinkingLevel(e),F(a,c),{ok:!0,data:{requested:d,thinkingLevel:c.thinkingLevel,clamped:c.thinkingLevel!==d}}}case"setToolPreset":{let c=b.preset;if(!Object.hasOwn(j.Ax,c))return{ok:!1,error:"invalid tool preset"};if(Y(a))return{ok:!1,error:"cannot change tools while the agent is running"};if(!a.session&&!a.creating)return a.toolPreset=c,a.customActiveTools=void 0,E(a,{type:"tools",active:[],all:[],toolPreset:c,customActiveTools:null,ts:Date.now()}),{ok:!0};let d=await X(a);if(Y(a))return{ok:!1,error:"cannot change tools while the agent is running"};return a.toolPreset=c,a.customActiveTools=void 0,$(a,d),W(a,d),aa(a,d),{ok:!0}}case"setActiveTools":{if(Y(a))return{ok:!1,error:"cannot change tools while the agent is running"};let c=await X(a);if(Y(a))return{ok:!1,error:"cannot change tools while the agent is running"};let d=Array.isArray(b.names)?b.names.map(String):[],e=ab(c),f=[...new Set(d)].filter(a=>e.includes(a));if(0===f.length)return{ok:!1,error:"cannot disable all tools"};return a.customActiveTools=f,$(a,c),W(a,c),aa(a,c),{ok:!0,data:{active:ac(c)}}}case"cycleModel":{let c=await X(a),d=await c.cycleModel(b.direction??"forward");if(d?.model)return G(a,c),F(a,c),{ok:!0,data:{model:String(d.model.id??""),thinkingLevel:c.thinkingLevel}};return{ok:!1,error:"no scoped models to cycle"}}case"navigate":{let c=await X(a),d=String(b.entryId??"");if(!d)return{ok:!1,error:"missing entryId"};let e=await c.navigateTree(d);return{ok:!e?.cancelled,data:{cancelled:e?.cancelled===!0,editorText:e?.editorText}}}case"editAndResend":{let c=String(b.entryId??""),d=(b.text??"").trim();if(!c)return{ok:!1,error:"missing entryId"};if(!d)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let b=await X(a);if(a.disposed)throw Error("session is disposed");if(b.isStreaming||a.runActive){await b.abort().catch(()=>void 0);for(let c=0;c<50&&!a.disposed&&(b.isStreaming||a.runActive);c+=1)await new Promise(a=>setTimeout(a,100))}if(a.disposed)throw Error("session is disposed");let e=await b.navigateTree(c);if(e?.cancelled)return{ok:!1,error:"edit cancelled"};if(await as(a),a.disposed)throw Error("session is disposed");return await at(a,b,d)}finally{a.promptSubmitting=!1,a.disposed||E(a,{type:"status",isStreaming:Y(a),state:Y(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void ah(a))}}case"rename":{let c=(b.text??"").trim();return a.session?a.session.setSessionName(c):a.sm.appendSessionInfo(c),E(a,{type:"name",name:c,ts:Date.now()}),{ok:!0}}case"extensionUiResponse":return a.ui?.respond(String(b.requestId),{value:b.value,confirmed:b.confirmed,cancelled:b.cancelled})?{ok:!0}:{ok:!1,error:"no pending extension request"};case"reload":{if(Y(a))return{ok:!1,error:"session is busy"};for(let b of(await (0,j.x9)(),az.values()))b!==a&&b.session&&(Y(b)?b.resourceReloadPending=!0:ai(b.session));let b=await X(a);return await b.reload(),ai(b),{ok:!0}}case"fork":{let c=(b.entryId?j.Cv.open(a.sessionPath).createBranchedSession(b.entryId):j.Cv.forkFrom(a.sessionPath,a.cwd).getSessionFile())??"";if(!c)return{ok:!1,error:"failed to create forked session"};return{ok:!0,data:{sessionPath:c}}}default:return{ok:!1,error:"unknown cmd"}}}catch(a){return{ok:!1,error:String(a?.message??a)}}}async function av(a){let b=j.Cv.create(a),c=b.getSessionFile()??"";if(!c)throw Error("failed to create session file");return R(c,a,b),{sessionPath:c}}function aw(){let a={};for(let[b,c]of az){let d;if(c.session){for(let a=c.ledger.entries.length-1;a>=0;a-=1){let b=c.ledger.entries[a];if("tool"===b.kind){d=[b.toolName,(b.preview??b.title??"").split("\n")[0].slice(0,80)].filter(Boolean).join(" \xb7 ");break}}a[b]={streaming:Y(c),lastStep:d}}}return a}async function ax(a,b){let d=a.sessionPath.replace(/\\/g,"/").split("/").pop()??"session";if("jsonl"===b){let{readFile:b}=await Promise.resolve().then(c.t.bind(c,51455,23));return{filename:d,content:await b(a.sessionPath,"utf8"),contentType:"application/jsonl"}}let e=await X(a),f=await e.exportToHtml(),{readFile:g,rm:h}=await Promise.resolve().then(c.t.bind(c,51455,23)),i=await g(f,"utf8");return await h(f,{force:!0}).catch(()=>void 0),{filename:d.replace(/\.jsonl$/,".html"),content:i,contentType:"text/html"}}(0,p.j8)({isActive:function(a){let b="win32"===process.platform?a.toLowerCase():a;for(let a of az.keys())if(("win32"===process.platform?a.toLowerCase():a)===b)return!0;return!1},log:a=>console.log(a)}),d()}catch(a){d(a)}})},31374:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{j8:()=>l});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(6896),j=a([i]);async function k({now:a=Date.now(),retentionDays:b=30,isActive:d=()=>!1,log:e=console.log,dryRun:g=!1}={}){let j={scanned:0,deleted:[],missing:[],skippedActive:[],kept:0};if(!Number.isFinite(b)||b<=0)return j;let l=a-24*b*36e5,{archivedSessions:m}=await (0,i.vQ)();for(let k of m){let m;j.scanned+=1;let n=h().resolve(k);if(d(n)){j.skippedActive.push(n),j.kept+=1;continue}try{let a=await f().stat(n);if(!a.isFile())throw Object.assign(Error("not a file"),{code:"ENOENT"});m=a.mtimeMs}catch(a){if("ENOENT"!==a.code)throw a;j.missing.push(n),g||await (0,i.Iz)(n);continue}if(m>l){j.kept+=1;continue}let o=Math.floor((a-m)/864e5);if(j.deleted.push({path:n,idleDays:o}),g)continue;let{deleteSession:p}=await c.e(6229).then(c.bind(c,66229));await p(n),await (0,i.Iz)(n),e(`[piweb] 归档会话已超过 ${b} 天没有活动(${o} 天),已删除:${n}`)}return j}i=(j.then?(await j)():j)[0];let m=!1;function l({intervalMs:a=216e5,delayMs:b=5e3,log:c=console.log,isActive:d}={}){if(m)return;m=!0;let e=async()=>{Date.now();try{let a=await k({log:c,isActive:d});(a.deleted.length||a.missing.length)&&c(`[piweb] 归档清理:删除 ${a.deleted.length} 个,清理失效记录 ${a.missing.length} 个,保留 ${a.kept} 个`)}catch(a){c(`[piweb] 归档清理失败:${a instanceof Error?a.message:a}`)}},f=setTimeout(()=>{e();let b=setInterval(()=>void e(),a);b.unref?.()},b);f.unref?.()}d()}catch(a){d(a)}})},34007:(a,b,c)=>{function d(a){let b=[];for(let[c,d]of a.entries()){if("message"!==d.type||d.message?.role!=="user")continue;let a="number"==typeof d.timestamp?d.timestamp:Date.parse(d.timestamp??""),e=Number.isFinite(a)?a:d.message.timestamp;b.push({id:d.id??`entry:${c}`,ts:"number"==typeof e&&Number.isFinite(e)?e:0/0})}return b}function e(a,b=0){let c=[],d="";for(let e of a.slice(Math.max(0,b)))if("message"===e.type&&e.message?.role==="user"&&e.id){var f;c.push(e.id),d||(d=("string"==typeof(f=e.message.content)?f:!Array.isArray(f)?"":f.map(a=>a&&"object"==typeof a&&"text"===a.type?String(a.text??""):"").join("")).split("\n").map(a=>a.trim()).find(Boolean)??"")}return{ids:c,title:d}}c.d(b,{S:()=>e,g:()=>d})},35851:(a,b,c)=>{c.d(b,{I:()=>f,k:()=>g});var d=c(83188),e=c(34007);let f=5;function g(a){let{cwd:b,sessionPath:c,publish:g,entries:h,consent:i}=a,j=!1,k=null,l=!1,m=0,n=!1,o=null,p=Promise.resolve(),q=null,r=0,s=!1,t=null,u=a=>{let c=a instanceof Error?a.message:String(a),e=a instanceof d.qy&&("unavailable"===a.code||"too-large"===a.code);e&&(j=!0,k=a,q=null),n=!0,o=c;let f=Date.now();(e||!(f-m<6e4))&&(m=f,console.warn(`[piweb] growth commit failed for ${b}: ${c}`),g({type:"growth_error",message:c,ts:f}))},v=a=>p=p.then(a,a).catch(u),w=a=>(n&&(n=!1,o=null,g({type:"growth_error",message:null,ts:Date.now()})),a&&!l&&g({type:"growth",round:a,ts:Date.now()}),a),x=()=>{j=!0,k=new d.qy("growth tracking was declined for this workspace","unavailable"),q=null},y=async(a,c)=>{let e=s?await i():null;if(!1===e)return void x();if(!s||null!==e)try{return await a({allowInit:!0===e,abortIf:c})}catch(f){if(!(f instanceof d.qy)||"needs-consent"!==f.code)throw f;s=!0;let e=await i();if(!1===e)return void x();if(!0===e)return a({allowInit:!0,abortIf:c});t||l||g({type:"growth_consent",request:t={cwd:b,reason:f.target?.reason??"not-git",parent:f.target?.parent},ts:Date.now()});return}},z=a=>y(a=>(0,d.uP)(b,c,a),a);return{version:f,getError:()=>o,getConsentRequest:()=>t,prepare(){if(j||l)return p;let a=r;return v(async()=>{if(j||l)return;let b=await z(()=>r!==a);void 0!==b&&w(b)})},onEvent(a){if(!l&&!j)switch(a.type){case"agent_start":null===q&&(q=h().length,r+=1);break;case"agent_settled":{if(null===q)break;let a=h().slice(q),{ids:f,title:g}=(0,e.S)(a);q=null,v(async()=>{if(j||l)return;let e=await y(e=>(0,d.qo)(b,{kind:"round",session:c,title:g,promptIds:f,status:function(a){for(let b=a.length-1;b>=0;b-=1){let c="message"===a[b].type?a[b].message:void 0;if(c?.role==="assistant"){if("aborted"===c.stopReason)return"aborted";if("error"===c.stopReason)return"error";break}}return"done"}(a)},e));void 0!==e&&w(e)})}}},async recordNow(){let a;if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let b=null;if(await v(async()=>{try{if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let a=await z();if(void 0===a)throw j?k??new d.qy("growth tracking is disabled for this workspace","unavailable"):new d.qy("growth tracking is waiting for permission to create a git repository","needs-consent");b=w(a)}catch(b){a=b,b instanceof d.qy&&"needs-consent"===b.code||u(b)}}),a)throw a;return b},async consentAnswered(a){let b=t;if(t=null,b&&!l&&g({type:"growth_consent",request:null,ts:Date.now()}),!a)return x(),null;if(j||l)return null;let c=null;return await v(async()=>{let a=await z();c=void 0===a?null:w(a)}),c},dispose(){l=!0}}}},49904:(a,b,c)=>{c.d(b,{Ax:()=>k,Jt:()=>m,_i:()=>l});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(80974),i=c.n(h);let j=new Map;function k(a,b){let c=g().resolve(a),d="win32"===process.platform?c.toLowerCase():c,e=(j.get(d)??Promise.resolve()).then(b,b),f=e.then(()=>void 0,()=>void 0);return j.set(d,f),f.then(()=>{j.get(d)===f&&j.delete(d)}),e}async function l(a,b){await e().mkdir(g().dirname(a),{recursive:!0});let c=await i().lock(a,{realpath:!1,retries:{retries:20,minTimeout:20,maxTimeout:100}});try{return await b()}finally{await c()}}async function m(a){await a.flush();let b=a.drainErrors();if(b.length)throw Error(`Pi settings failed: ${b.map(({scope:a,error:b})=>`${a}: ${b.message}`).join("; ")}`,{cause:b[0].error})}},53634:(a,b,c)=>{c.d(b,{dD:()=>e});let d=["off","minimal","low","medium","high","xhigh","max"];function e(a){return function(a,b){if(a.includes(b))return b;let c=d.indexOf(b);if(-1===c)return a[0]??"off";for(let b=c;b<d.length;b+=1)if(a.includes(d[b]))return d[b];for(let b=c-1;b>=0;b-=1)if(a.includes(d[b]))return d[b];return a[0]??"off"}(a.supported,a.requested||a.modelOverride||a.defaultLevel||"medium")}},92584:(a,b,c)=>{c.d(b,{V:()=>e});var d=c(76760);let e=(c.n(d))().resolve(process.env.PI_WEB_ROOT??process.cwd())}};
1
+ "use strict";exports.id=8686,exports.ids=[8686],exports.modules={777:(a,b,c)=>{c.d(b,{K:()=>d});function d(a){let b=function(a){let b=a.trimStart();if(!b.startsWith("<skill "))return null;let c=/^<skill\s+([^>]*)>/.exec(b);if(!c)return null;let d=c[1],e=/\bname\s*=\s*"([^"]*)"/.exec(d)?.[1]?.trim();if(!e)return null;let f=b.lastIndexOf("</skill>");return f<0?null:{name:e,args:b.slice(f+8).trim()}}(a);return b?b.args?`/skill:${b.name} ${b.args}`:`/skill:${b.name}`:a}},3672:(a,b,c)=>{c.d(b,{H4:()=>f,Pn:()=>m,WZ:()=>n,Zt:()=>l});var d=c(29296);function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>=0?a:void 0}function f(a){if(!a||"object"!=typeof a)return;let b={};return"number"==typeof a.input&&(b.input=a.input),"number"==typeof a.output&&(b.output=a.output),"number"==typeof a.cacheRead&&(b.cacheRead=a.cacheRead),"number"==typeof a.cacheWrite&&(b.cacheWrite=a.cacheWrite),Object.keys(b).length?b:void 0}function g(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(g).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}let h=["command","cmd","script","file_path","path","pattern","query","url"];function i(a,b){return a.length<=b?a:`${a.slice(0,b)}…`}function j(a){if(!a||"object"!=typeof a||Array.isArray(a))return"";try{let b=Object.fromEntries(Object.entries(a).map(([a,b])=>[a,"string"==typeof b?b.slice(0,100):b])),c=JSON.parse(JSON.stringify(b));if(!c||"object"!=typeof c||Array.isArray(c))return"";for(let a of h){let b=c[a];if("string"==typeof b&&b.trim())return b.trim().replace(/\s+/g," ").slice(0,80)}}catch{}return""}function k(a){let b=a&&"object"==typeof a&&!Array.isArray(a)?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,"string"==typeof b&&b.length>2e3?`${b.slice(0,2e3)}…`:b])):a;try{return i(JSON.stringify(b??{},null,2),8e3)}catch{return""}}function l(a){let b,c=(a.preview??"").split("\n")[0].trim();if(c)return c.slice(0,80);if(a.argSummary)return a.argSummary.slice(0,80);try{let c=JSON.parse(a.detail??"");c&&"object"==typeof c&&!Array.isArray(c)&&(b=c)}catch{}if(b)for(let a of h){let c=b[a];if("string"==typeof c&&c.trim())return c.trim().replace(/\s+/g," ").slice(0,80)}return""}class m{constructor(a=[]){this.streamingStart=null,this.turnStartedAt=null,this.toolIndex=new Map,this.toolStart=new Map,this.pendingToolArgs=new Map,this.dirty=[],this.entries=a.map(a=>({...a})),this.nextSeq=Math.max(0,...this.entries.map(a=>a.seq))+1}push(a){let b={...a,seq:this.nextSeq++};return this.entries.push(b),this.dirty.push(b),b}touch(a){a&&!this.dirty.includes(a)&&this.dirty.push(a)}drainDirty(){let a=this.dirty;return this.dirty=[],a}onEvent(a,b=Date.now()){switch(a.type){case"turn_start":this.turnStartedAt=b;break;case"message_start":{let c=a.message;if(c?.role==="user")this.push({kind:"user",ts:c.timestamp??b,detail:g(c.content)});else if(c?.role==="assistant"){let a=this.turnStartedAt??b;this.turnStartedAt=null,this.streamingStart={seq:this.nextSeq,t0:a},this.push({kind:"message",ts:a,title:"assistant"})}else if(c?.role==="toolResult"){let a=c.toolCallId?this.toolIndex.get(c.toolCallId):void 0;if(void 0!==a){let b=this.entries[a],h=(0,d.R)(g(c.content));b.detail=h.text||b.detail,b.encodingLoss=h.encodingLoss||b.encodingLoss,b.isError=!0===c.isError,b.tokens=f(c.usage)??b.tokens;let i=e(c.durationMs);void 0!==i&&(b.timing={...b.timing,durationMs:i}),this.touch(b)}}break}case"message_update":{let c=a.assistantMessageEvent;if(!c)break;if(("text_delta"===c.type||"thinking_delta"===c.type||"toolcall_delta"===c.type)&&c.delta?.length>0&&this.streamingStart&&void 0===this.streamingStart.firstToken){this.streamingStart.firstToken=b;let a=this.entries[this.entries.length-1];a?.kind==="message"&&(a.timing={...a.timing??{},ttftMs:b-this.streamingStart.t0},this.touch(a))}"toolcall_end"===c.type&&c.toolCall&&this.pendingToolArgs.set(c.toolCall.id,c.toolCall.arguments);break}case"message_end":{let c=a.message;if(c?.role==="assistant"){let a=this.entries[this.entries.length-1],d=a?.kind==="message"?a:this.push({kind:"message",ts:b});this.streamingStart&&(d.timing={...void 0===this.streamingStart.firstToken?{}:{ttftMs:this.streamingStart.firstToken-this.streamingStart.t0,decodeMs:b-this.streamingStart.firstToken},durationMs:b-this.streamingStart.t0});let h=e(c.durationMs);for(let a of(void 0!==h&&(d.timing={...d.timing,durationMs:h}),d.tokens=f(c.usage),d.thinking=i(g((c.content??[]).filter(a=>"thinking"===a.type).map(a=>a.thinking)),1e5)||void 0,d.detail=i(g((c.content??[]).filter(a=>"text"===a.type)),1e5)||void 0,d.isError="error"===c.stopReason,"error"===c.stopReason&&(d.title="error"),this.touch(d),this.streamingStart=null,c.content??[]))"toolCall"===a.type&&(this.toolIndex.set(a.id,this.entries.length),this.push({kind:"tool",ts:b,toolName:a.name,toolCallId:a.id,title:a.name,detail:k(a.arguments),argSummary:j(a.arguments)}))}break}case"tool_execution_start":{this.toolStart.set(a.toolCallId,b);let c=this.toolIndex.get(a.toolCallId);if(void 0===c)c=this.entries.length,this.toolIndex.set(a.toolCallId,c),this.push({kind:"tool",ts:b,toolName:a.toolName,toolCallId:a.toolCallId,title:a.toolName,detail:k(a.args),argSummary:j(a.args)});else{let b=this.entries[c];b.detail=k(a.args),b.argSummary=j(a.args),this.touch(b)}break}case"tool_execution_update":{let b=this.toolIndex.get(a.toolCallId);if(void 0!==b){let c=this.entries[b],e=(0,d.R)(g(a.partialResult));e.text&&(c.preview=e.text.slice(-2e3)),c.encodingLoss=e.encodingLoss||c.encodingLoss,this.touch(c)}break}case"tool_execution_end":{let c=this.toolIndex.get(a.toolCallId);if(void 0!==c){let f=this.entries[c],h=(0,d.R)(g(a.result)),j=f.detail?.includes("\n\n---\n\n")?f.detail.slice(0,f.detail.indexOf("\n\n---\n\n")):f.detail;f.detail=[j,i(h.text,8e3)].filter(Boolean).join("\n\n---\n\n")||void 0,f.encodingLoss=h.encodingLoss||f.encodingLoss,f.isError=!0===a.isError;let k=this.toolStart.get(a.toolCallId),l=e(a.durationMs)??(void 0!==k?b-k:void 0);void 0!==l&&(f.timing={...f.timing??{},durationMs:l}),this.touch(f)}this.toolStart.delete(a.toolCallId);break}case"compaction_start":this.push({kind:"compacted",ts:b,title:`compact (${a.reason})`});break;case"compaction_end":{let b=[...this.entries].reverse().find(a=>"compacted"===a.kind);b&&(a.errorMessage&&(b.isError=!0,b.detail=a.errorMessage),a.result?.tokensBefore!=null&&(b.tokens={input:a.result.tokensBefore}),this.touch(b))}}}}function n(a){let b,c=[],h=1,i=(...a)=>{for(let c of a){let a="number"==typeof c?c:"string"==typeof c?Date.parse(c):0/0;if(Number.isFinite(a))return b=a}return b??Date.now()};for(let b of a)if("message"===b.type){let a=b.message;if(!a)continue;if("user"===a.role)c.push({seq:h++,kind:"user",ts:i(a.timestamp,b.timestamp),detail:g(a.content)});else if("assistant"===a.role){let d=g((a.content??[]).filter(a=>"thinking"===a.type)),l=g((a.content??[]).filter(a=>"text"===a.type)),m=e(a.durationMs),n=i(a.timestamp,b.timestamp);for(let b of(c.push({seq:h++,kind:"message",ts:n,title:"error"===a.stopReason?"error":"assistant",detail:l,thinking:d||void 0,tokens:f(a.usage),...void 0===m?{}:{timing:{durationMs:m}},isError:"error"===a.stopReason||void 0}),a.content??[]))"toolCall"===b.type&&c.push({seq:h++,kind:"tool",ts:n,toolName:b.name,toolCallId:b.id,title:b.name,detail:k(b.arguments),argSummary:j(b.arguments)})}else if("toolResult"===a.role){let b=c.findLast?.(b=>"tool"===b.kind&&(a.toolCallId?b.toolCallId===a.toolCallId:b.toolName===a.toolName));if(b){let c=(0,d.R)(g(a.content));b.detail=[b.detail,c.text].filter(Boolean).join("\n\n---\n\n"),b.encodingLoss=c.encodingLoss||b.encodingLoss,b.isError=!0===a.isError||void 0,b.tokens=f(a.usage)??b.tokens;let h=e(a.durationMs);void 0!==h&&(b.timing={durationMs:h})}}}else"compaction"===b.type?c.push({seq:h++,kind:"compacted",ts:i(b.timestamp),title:"compact",tokens:null!=b.tokensBefore?{input:b.tokensBefore}:f(b.usage)}):"branch_summary"===b.type&&c.push({seq:h++,kind:"compacted",ts:i(b.timestamp),title:"branch summary",tokens:f(b.usage),detail:b.summary});return c}},6896:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Iz:()=>E,JZ:()=>D,PY:()=>y,Tp:()=>z,XG:()=>H,X_:()=>K,cH:()=>B,nO:()=>F,qM:()=>A,qh:()=>I,r7:()=>G,vQ:()=>C});var e=c(51455),f=c.n(e),g=c(48161),h=c.n(g),i=c(76760),j=c.n(i),k=c(92584),l=c(31421),m=c(46193),n=c(87982),o=c(77598),p=c(49904),q=a([n]);function r(){return j().join((0,n.$M)(),"web-workspaces.json")}async function s(a=r()){try{let b=JSON.parse(await f().readFile(a,"utf8"));if(!b||"object"!=typeof b||Array.isArray(b))throw Error("invalid workspace registry");let c=Object.fromEntries(Object.entries("object"==typeof b.aliases&&null!==b.aliases?b.aliases:{}).filter(a=>"string"==typeof a[1])),d=Object.fromEntries(Object.entries("object"==typeof b.growthInit&&null!==b.growthInit?b.growthInit:{}).filter(a=>"boolean"==typeof a[1])),e=Object.fromEntries(Object.entries("object"==typeof b.archivedAt&&null!==b.archivedAt?b.archivedAt:{}).filter(a=>"number"==typeof a[1]&&Number.isFinite(a[1])));return{workspaces:Array.isArray(b.workspaces)?b.workspaces.filter(a=>"string"==typeof a):[],aliases:c,archivedSessions:Array.isArray(b.archivedSessions)?b.archivedSessions.filter(a=>"string"==typeof a):[],...Object.keys(e).length?{archivedAt:e}:{},removedWorkspaces:Array.isArray(b.removedWorkspaces)?b.removedWorkspaces.filter(a=>"string"==typeof a):[],...Object.keys(d).length?{growthInit:d}:{}}}catch(a){if("ENOENT"!==a.code)throw a}return{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}function t(a){let b=j().resolve(a);return"win32"===process.platform?b.toLowerCase():b}async function u(a,b){await f().mkdir(j().dirname(b),{recursive:!0});let c=`${b}.${(0,o.randomUUID)()}.tmp`;try{await f().writeFile(c,JSON.stringify(a,null,2),{encoding:"utf8",flag:"wx",mode:384}),await f().rename(c,b)}finally{await f().unlink(c).catch(()=>void 0)}}n=(q.then?(await q)():q)[0];let L=null;async function v(a){var b;let c;try{c=await f().stat(a)}catch(a){if("ENOENT"!==a.code)throw a;return L=null,{workspaces:[],aliases:{},archivedSessions:[],removedWorkspaces:[]}}let d=(b=c,`${b.mtimeMs}:${b.ctimeMs}:${b.size}:${b.ino}`);if(L&&L.path===a&&L.stamp===d)return L.data;let e=await s(a);return L={path:a,stamp:d,data:e},e}async function w(){return v(r())}async function x(a){let b=r();return(0,p.Ax)(b,()=>(0,p._i)(b,async()=>{try{return await a(await s(b),b)}finally{L=null}}))}async function y(){return(await w()).removedWorkspaces??[]}async function z(a,b){let c=t(j().resolve(a));return x(async(a,d)=>{for(let b of(a.aliases||(a.aliases={}),Object.keys(a.aliases)))b!==c&&t(b)===c&&delete a.aliases[b];return b.trim()?a.aliases[c]=b.trim():delete a.aliases[c],await u(a,d),a.aliases})}async function A(a){return(await w()).growthInit?.[t(a)]??null}async function B(a,b){let c=t(a);await x(async(a,d)=>{a.growthInit={...a.growthInit,[c]:b},await u(a,d)})}async function C(){let a=await w();return{workspaces:a.workspaces,aliases:a.aliases??{},archivedSessions:a.archivedSessions??[],removedWorkspaces:a.removedWorkspaces??[]}}async function D(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>(a.archivedSessions||(a.archivedSessions=[]),a.archivedSessions.some(a=>t(a)===c)||(a.archivedSessions.push(b),a.archivedAt={...a.archivedAt,[c]:Date.now()},await u(a,d)),a.archivedSessions))}async function E(a){let b=t(j().resolve(a));return x(async(a,c)=>{let d=a.archivedSessions??[],e=d.filter(a=>t(a)!==b),f=!!a.archivedAt&&b in a.archivedAt;return(e.length!==d.length||f)&&(a.archivedSessions=e,a.archivedAt&&delete a.archivedAt[b],await u(a,c)),e})}async function F({now:a=Date.now(),persist:b=!0}={}){let c=await w(),d=c.archivedAt??{},e=c.archivedSessions??[];return!b||e.every(a=>"number"==typeof d[t(a)])?e.map(b=>({path:b,archivedAt:d[t(b)]??a})):x(async(b,c)=>{let d=b.archivedSessions??[],e={};for(let c of d){let d=t(c);e[d]=b.archivedAt?.[d]??a}return b.archivedAt=e,await u(b,c),d.map(a=>({path:a,archivedAt:e[t(a)]}))})}async function G(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{let e=!1;if(a.workspaces.some(a=>t(a)===c)||(a.workspaces.push(b),e=!0),a.removedWorkspaces){let b=a.removedWorkspaces.filter(a=>t(a)!==c);e||=b.length!==a.removedWorkspaces.length,a.removedWorkspaces=b}return e&&await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces??[]}})}async function H(a){let b=r(),c=await v(b),d=new Set((c.removedWorkspaces??[]).map(t)),e=new Set(c.workspaces.map(t)),f=!1;for(let b of a){if(!b||"string"!=typeof b)continue;let a=t(j().resolve(b));d.has(a)||e.has(a)||(e.add(a),f=!0)}return f?x(async(b,c)=>{let d=!1,e=new Set((b.removedWorkspaces??[]).map(t)),f=new Set(b.workspaces.map(t));for(let c of a){if(!c||"string"!=typeof c)continue;let a=j().resolve(c),g=t(a);e.has(g)||f.has(g)||(b.workspaces.push(a),f.add(g),d=!0)}return d&&await u(b,c),b.workspaces}):c.workspaces}async function I(a){let b=j().resolve(a),c=t(b);return x(async(a,d)=>{if(a.workspaces=a.workspaces.filter(a=>t(a)!==c),a.removedWorkspaces||(a.removedWorkspaces=[]),a.removedWorkspaces.some(a=>t(a)===c)||a.removedWorkspaces.push(b),a.aliases)for(let b of Object.keys(a.aliases))t(b)===c&&delete a.aliases[b];return await u(a,d),{workspaces:a.workspaces,removedWorkspaces:a.removedWorkspaces,aliases:a.aliases??{}}})}let M=!1;function J(a,b={}){let{timeoutMs:c=3e5,windowsHide:d=!1}=b;return new Promise((b,e)=>{let f,g=(0,l.spawn)(a[0],a.slice(1),{stdio:["ignore","pipe","pipe"],windowsHide:d}),h=new m.StringDecoder("utf8"),i="",j="",k=!1;g.stdout.on("data",a=>{i+=h.write(a)}),g.stderr.on("data",a=>{j=(j+a.toString("utf8")).slice(-1e3)});let n=!1,o=a=>{n||(n=!0,clearTimeout(f),k||(k=!0,i+=h.end()),a?e(a):b(i.trim()))};g.on("error",a=>o(a)),g.on("close",a=>o(0===a?void 0:Error(j||`folder picker exited with code ${a}`))),f=setTimeout(()=>{try{g.kill()}catch{}o(Error("folder picker timed out"))},c)})}async function K(){if(M)return{path:null,canceled:!0};M=!0;try{if("win32"===process.platform){let a=j().join(k.V,"scripts","pick-folder.ps1"),b=await J(["powershell.exe","-NoProfile","-STA","-ExecutionPolicy","Bypass","-File",a,"选择工作区文件夹"],{windowsHide:!0});return b?{path:b,canceled:!1}:{path:null,canceled:!0}}if("darwin"===process.platform){let a=await J(["osascript","-e",'POSIX path of (choose folder with prompt "选择工作区文件夹")']),b=function(a){let b=a.trim();if((b=b.replace(/^alias\s+/i,"").replace(/^"(.*)"$/s,"$1")).startsWith("/"))return b.replace(/\\(.)/g,"$1");if(/^[A-Za-z][A-Za-z0-9 ]*:(.+)$/.test(b)){let a=b.slice(b.indexOf(":")+1);return`/${a.split(":").filter(Boolean).join("/")}`}return b}(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}for(let a of[["zenity","--file-selection","--directory","--title=选择工作区文件夹"],["kdialog","--getexistingdirectory",`${h().homedir()}`,"--title","选择工作区文件夹"]])try{let b=await J(a);return b?{path:b,canceled:!1}:{path:null,canceled:!0}}catch(a){if(a instanceof Error&&/ENOENT|not found|not recognized/i.test(a.message))continue;if(/exited with code (1|5)$/.test(a instanceof Error?a.message:String(a)))return{path:null,canceled:!0};throw a}throw Error("no folder picker available: install zenity or kdialog, or type the path manually")}finally{M=!1}}d()}catch(a){d(a)}})},14719:(a,b,c)=>{c.d(b,{X:()=>g});var d=c(77598);let e=a=>"string"==typeof a?a:String(a??""),f={name:"piweb-plain",style:a=>e(a),fg:(a,b)=>e(b),bg:(a,b)=>e(b),bold:e,italic:e,underline:e,inverse:e,strikethrough:e,getFgAnsi:()=>"",getBgAnsi:()=>"",getColorMode:()=>"truecolor",getThinkingBorderColor:()=>e,getBashModeBorderColor:()=>e};function g(a){let b=new Map,c=new Map,e=!1,g=(c,f,g,h)=>{if(e||!a.hasViewers()||f?.signal?.aborted)return Promise.resolve(g);let i=(0,d.randomUUID)();return new Promise(d=>{let e=c=>{let e=b.get(i);e&&(b.delete(i),e.timer&&clearTimeout(e.timer),e.removeAbortListener?.(),a.publish({type:"extension_ui_resolved",id:i,ts:Date.now()}),d(c?h(c):g))},j={type:"extension_ui",id:i,...c,timeout:f?.timeout,ts:Date.now()},k={request:j,resolve:a=>e(a)};k.timer=setTimeout(()=>e(null),f?.timeout??6e5),k.timer.unref?.();let l=()=>e(null);f?.signal?.addEventListener("abort",l,{once:!0}),k.removeAbortListener=()=>f?.signal?.removeEventListener("abort",l),b.set(i,k),a.publish(j)})};return{uiContext:{select:(a,b,c)=>g({method:"select",title:a,options:b},c,void 0,a=>a.cancelled?void 0:a.value),confirm:(a,b,c)=>g({method:"confirm",title:a,message:b},c,!1,a=>!a.cancelled&&!0===a.confirmed),input:(a,b,c)=>g({method:"input",title:a,placeholder:b},c,void 0,a=>a.cancelled?void 0:a.value),notify:(b,c)=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"notify",message:b,notifyType:c??"info",ts:Date.now()})},setStatus:(b,e)=>{void 0===e?c.delete(b):c.set(b,e),a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setStatus",statusKey:b,statusText:e,ts:Date.now()})},setWorkingMessage:b=>{a.publish({type:"extension_ui",id:(0,d.randomUUID)(),method:"setWorkingMessage",message:b,ts:Date.now()})},onTerminalInput:()=>()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:()=>{},setFooter:()=>{},setHeader:()=>{},setTitle:()=>{},custom:async()=>void 0,pasteToEditor:()=>{},setEditorText:()=>{},getEditorText:()=>"",editor:async()=>void 0,addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,theme:f,getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"UI not available"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}},statuses:c,getPendingRequests:()=>[...b.values()].map(({request:a})=>({...a,options:a.options?[...a.options]:void 0})),respond(a,c){let d=b.get(a);return!!d&&(d.resolve(c),!0)},dispose(){for(let a of(e=!0,b.values()))a.resolve({cancelled:!0});b.clear()}}}},22567:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>g});var e=c(75430),f=a([e]);function g(a,b,c){let d;if(c<=0)return null;let f=0;for(let c of a.entries)for(let a of c.messages){if("assistant"===a.role&&"error"!==a.stopReason&&"aborted"!==a.stopReason&&a.usage){let g=(0,e.calculateContextTokens)(a.usage);g>0&&(d={tokens:g,messageIndex:f,branchIndex:b.findIndex(a=>a.id===c.sourceEntry.id)})}f++}let g=b.findLastIndex(a=>"compaction"===a.type);if(g>=0&&(!d||d.branchIndex<=g))return{tokens:null,contextWindow:c,percent:null};let h=b.findLastIndex(a=>"compaction"===a.type||"context_edit"===a.type),i=d&&d.branchIndex>h?d.tokens+a.messages.slice(d.messageIndex+1).reduce((a,b)=>a+(0,e.estimateTokens)(b),0):a.messages.reduce((a,b)=>a+(0,e.estimateTokens)(b),0);return{tokens:i,contextWindow:c,percent:i/c*100}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},28686:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$w:()=>ak,B1:()=>au,Hx:()=>aj,Lf:()=>S,Lz:()=>at,PO:()=>as,Rq:()=>aC,SG:()=>T,Sj:()=>aq,al:()=>av,bS:()=>P,g7:()=>aA,kQ:()=>aw,lX:()=>aB,mk:()=>Q,nK:()=>A,oW:()=>ap,tX:()=>ar,vJ:()=>aD,yn:()=>V});var e=c(73024),f=c(77598),g=c(76760),h=c.n(g),i=c(75430),j=c(87982),k=c(14719),l=c(35851),m=c(34007),n=c(22567),o=c(3672),p=c(31374),q=c(29296),r=c(62433),s=c(53634),t=c(6896),u=c(28802),v=a([i,j,n,p,r,t,u]);[i,j,n,p,r,t,u]=v.then?(await v)():v;let aE=globalThis,aF=aE.__piWebSessions??=new Map;function w(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(w).join("");if("object"==typeof a){if("string"==typeof a.text)return a.text;if("string"==typeof a.thinking)return a.thinking}return""}function x(a,b){if(!a||"object"!=typeof a)return{role:"other",content:[]};let c={role:"other",content:[]};b?c.id=b:"string"==typeof a.id&&(c.id=a.id),"number"==typeof a.timestamp&&(c.timestamp=a.timestamp);let d=[];for(let b of Array.isArray(a.content)?a.content:"string"==typeof a.content?[{type:"text",text:a.content}]:[])b&&"object"==typeof b&&("text"===b.type&&"string"==typeof b.text?d.push({type:"text",text:b.text}):"thinking"===b.type&&"string"==typeof b.thinking?d.push({type:"thinking",thinking:b.thinking}):"toolCall"===b.type?d.push({type:"toolCall",id:String(b.id??""),name:String(b.name??""),arguments:b.arguments}):"image"===b.type&&"string"==typeof b.data&&"string"==typeof b.mimeType&&d.push({type:"image",data:b.data,mimeType:b.mimeType}));if(c.content=d,"user"===a.role)c.role="user";else if("assistant"===a.role)c.role="assistant",c.stopReason=a.stopReason,c.errorMessage=a.errorMessage??void 0,c.usage=(0,o.H4)(a.usage),a.usage?.cost?.total!=null&&(c.usage={...c.usage,cost:{total:a.usage.cost.total}}),c.model="string"==typeof a.model?a.model:void 0,c.provider="string"==typeof a.provider?a.provider:void 0;else if("toolResult"===a.role){c.role="toolResult";let b=(0,q.R)(w(a.content));c.content=[{type:"toolResult",toolCallId:a.toolCallId,text:b.text,isError:!0===a.isError,encodingLoss:b.encodingLoss||void 0,patch:C(a.details)}]}else("compactionSummary"===a.role||"branchSummary"===a.role)&&(c.role="summary",c.summaryKind="branchSummary"===a.role?"branch":"compaction",c.summary="string"==typeof a.summary?a.summary:"","number"==typeof a.tokensBefore&&Number.isFinite(a.tokensBefore)&&(c.tokensBefore=a.tokensBefore));return c}function y(a){if(a?.type==="message"&&a.message)return x(a.message,a.id);if(a?.type!=="compaction"&&!(a?.type==="branch_summary"&&a.summary))return null;let b=Date.parse(a.timestamp);return x({role:"compaction"===a.type?"compactionSummary":"branchSummary",summary:a.summary,tokensBefore:a.tokensBefore,timestamp:Number.isFinite(b)?b:void 0},a.id)}function z(a,b){if(b[0]?.type!=="compaction")return[];let c=new Set(b.map(a=>a.id)),d=a.getBranch().filter(a=>!c.has(a.id)),e=new Map(d.map((a,b)=>[a.id,b])),f=new Map,g=new Set;d.forEach((a,b)=>{if("compaction"!==a.type)return;let c=e.get(a.firstKeptEntryId);if(void 0===c||c>=b)return;let d=y(a);f.set(a.firstKeptEntryId,[...f.get(a.firstKeptEntryId)??[],d]),g.add(a.id)});let h=[];for(let a of d){if(h.push(...f.get(a.id)??[]),g.has(a.id))continue;let b=y(a);b&&h.push(b)}return h}function A(a){let b=a.buildContextEntries(),c=b.flatMap((a,b)=>{if("compaction"===a.type&&b>0)return[];let c=y(a);return c?[c]:[]});return[...z(a,b),...c]}let aG=new WeakMap;function B(a,b){return{...x(b,function(a,b){if(!b||"object"!=typeof b)return;let c=a.getEntryCount,d=c?null:a.getEntries(),e=c?c.call(a):d.length,f=aG.get(a);if(!f||f.count!==e){for(let b of(f={count:e,ids:new WeakMap},d??a.getEntries()))b?.type==="message"&&b.message&&"object"==typeof b.message&&f.ids.set(b.message,b.id);aG.set(a,f)}return f.ids.get(b)}(a.sm,b)),streamId:function(a,b){if(!b||"object"!=typeof b)return;a.messageIds??=new WeakMap;let c=a.messageIds.get(b);return c||(c=(0,f.randomUUID)(),a.messageIds.set(b,c)),c}(a,b)}}function C(a){let b=a?.patch;return"string"==typeof b&&b.trim()?b.slice(0,6e4):void 0}let aH=new Map;function D(a){return{target:"string"==typeof a?.path?a.path:"string"==typeof a?.file_path?a.file_path:"",content:"string"==typeof a?.content?a.content:void 0}}function E(a){if(null!=a){if("string"==typeof a)return a.slice(-4e3);if(Array.isArray(a))return a.map(w).join("").slice(-4e3)||void 0;if("object"==typeof a){let b=w(a.content);if(b)return b.slice(-4e3);try{return JSON.stringify(a).slice(-4e3)}catch{}}}}let aI=new WeakMap;function F(a){let b=aI.get(a);if(b){for(;b.length>0&&null!==b[0].events;)for(let c of b.shift().events)G(a,c);0===b.length&&aI.delete(a)}}function G(a,b){if(a.disposed)return;a.seq+=1;let c=JSON.stringify(b);for(let b of(a.buffer.push({seq:a.seq,json:c}),a.buffer.length>400&&a.buffer.shift(),a.subscribers))try{b(a.seq,c)}catch{a.subscribers.delete(b)}}function H(a,b){let c=aI.get(a);if(!c)return G(a,b);c.push({events:[b]}),F(a)}function I(a,b){let c=b.model;H(a,{type:"model",provider:c?String(c.provider??""):void 0,model:c?String(c.id??""):void 0,thinkingLevel:String(b.thinkingLevel??""),thinkingLevels:b.getAvailableThinkingLevels(),ts:Date.now()})}function J(a,b){if(!a.desiredThinkingLevel)return;let c=(0,u.clampThinkingLevel)(b.model,a.desiredThinkingLevel);c!==b.thinkingLevel&&b.setThinkingLevel(c)}function K(a){let b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;for(let k of a.ledger.entries){if("tool"===k.kind){k.timing?.durationMs!==void 0&&i++,c+=Math.max(0,k.timing?.durationMs??0);continue}"message"===k.kind&&(k.timing?.durationMs!==void 0&&h++,b+=Math.max(0,k.timing?.durationMs??0),k.timing?.ttftMs!==void 0&&(d+=Math.max(0,k.timing.ttftMs),e+=1),(k.timing?.decodeMs??0)>0&&k.tokens?.output!==void 0&&(j++,f+=Math.max(0,k.timing?.decodeMs??0),g+=Math.max(0,k.tokens.output)))}return{llmMs:b,toolMs:c,ttftMs:d,ttftSteps:e,decodeMs:f,decodeTokens:g,llmTimedSteps:h,toolTimedCalls:i,decodeSteps:j}}let aJ=new WeakMap;function L(a){if(!a.session)return null;try{let b=a.session.getSessionStats();return{userMessages:b.userMessages,assistantMessages:b.assistantMessages,toolCalls:b.toolCalls,totalMessages:b.totalMessages,tokens:b.tokens,cost:b.cost,...K(a)}}catch{return null}}function M(a){if(!a.session)return null;try{let b=a.sm.getEntryCount?.()??a.sm.getEntries().length,c=a.sm.getLeafId(),d=aJ.get(a);if(d&&d.entryCount===b&&d.leafId===c)return{...d.evt,ts:Date.now()}}catch{}let b=L(a),c=null;try{c=a.session.getContextUsage()??null}catch{c=null}let d={type:"usage",stats:b,contextUsage:c?{tokens:c.tokens,contextWindow:c.contextWindow,percent:c.percent}:null,ts:Date.now()};try{let b=a.sm.getEntryCount?.()??a.sm.getEntries().length;aJ.set(a,{entryCount:b,leafId:a.sm.getLeafId(),evt:d})}catch{}return d}let aK=new WeakMap;function N(a,b=!1){let c=Date.now();if(!b&&c-(aK.get(a)??0)<500)return;aK.set(a,c);let d=M(a);d&&H(a,d)}function O(a){return a.growth&&a.growth.version!==l.I&&(a.growth.dispose(),a.growth=null),a.growth??=(0,l.k)({cwd:a.cwd,sessionPath:a.sessionPath,publish:b=>H(a,b),entries:()=>a.sm.getEntries(),consent:()=>(0,t.qM)(a.cwd).catch(()=>null)})}async function P(a){return R(a),O(a).recordNow()}async function Q(a,b){R(a),await (0,t.cH)(a.cwd,b);let c=a=>"win32"===process.platform?h().resolve(a).toLowerCase():h().resolve(a);for(let d of aF.values())d!==a&&d.growth?.getConsentRequest()&&c(d.cwd)===c(a.cwd)&&d.growth.consentAnswered(b).catch(()=>void 0);return O(a).consentAnswered(b)}function R(a){a.lastActive=Date.now()}let aL=new Set;function S(a){for(let b of a){if(!b||aL.size>=2)return;let a="win32"===process.platform?b.toLowerCase():b;!aL.has(a)&&(aL.add(a),(0,j.v9)(b)||(0,j.Df)(b).catch(()=>void 0))}}function T(a){let b=aF.get(a);if(b)b=U(b);else{if(!(0,e.existsSync)(a))throw new r.BV("session not found");let c=(0,j.G1)(a);b=W(a,c.getCwd()||process.cwd(),c)}return R(b),b}function U(a){let b=function(a){let b,c;try{b=(0,e.statSync)(a.sessionPath).size}catch{return 0}if(b===a.diskSize)return 0;let d=b<a.diskSize?0:a.diskSize,f=Buffer.alloc(b-d);try{c=(0,e.openSync)(a.sessionPath,"r"),f=f.subarray(0,(0,e.readSync)(c,f,0,f.length,d))}catch{return 0}finally{void 0!==c&&(0,e.closeSync)(c)}let g=f.lastIndexOf(10);a.diskSize=d+g+1;let h=0;for(let b of f.subarray(0,Math.max(0,g)).toString("utf8").split("\n"))if(b.trim())try{let c=JSON.parse(b);c?.type==="session"||"string"!=typeof c?.id||a.sm.getEntry(c.id)||(h+=1)}catch{}return h}(a);return b||a.externalEntries?(a.externalEntries+=b,a.creating||ab(a))?(b&&H(a,{type:"external_write",entries:a.externalEntries,ts:Date.now()}),a):function(a){let b;try{b=(0,j.G1)(a.sessionPath)}catch{return a}let c=Date.now(),d={entries:a.externalEntries,at:c},e=JSON.stringify({type:"external_reload",...d,ts:c});for(let b of a.subscribers)try{b(a.seq,e)}catch{}ai(a);let f=W(a.sessionPath,b.getCwd()||a.cwd,b);return f.diskSize=a.diskSize,f.toolPreset=a.toolPreset,f.customActiveTools=a.customActiveTools,f.desiredThinkingLevel=a.desiredThinkingLevel,f.viewerGraceUntil=a.viewerGraceUntil,f.externalReload=d,f}(a):a}function V(){for(let a of[...aF.values()])try{U(a)}catch{}}function W(a,b,c){let d=[];try{d=(0,o.WZ)(c.getEntries())}catch{}let g={sessionPath:a,cwd:b,sm:c,session:null,creating:null,subscribers:new Set,buffer:[],seq:0,epoch:(0,f.randomUUID)().replace(/-/g,"").slice(0,12),inflight:null,ui:null,growth:null,ledger:new o.Pn(d),lastActive:Date.now(),toolPreset:"readonly",requestedTools:new Set,resourceVersion:0,resourceReloadPending:!1,resourceReloading:!1,promptSubmitting:!1,runActive:!1,disposed:!1,messageIds:new WeakMap,diskSize:function(a){try{return(0,e.statSync)(a).size}catch{return 0}}(a),externalEntries:0};return aF.set(a,g),g}function X(a,b=(0,j.ye)(a)){let c=b.getAgentsFiles().agentsFiles.map(a=>({path:a.path,content:a.content,source:"project"})),d=b.getAppendSystemPrompt(),e=b.getAppendSystemPromptSources();return[...c,...d.map((a,b)=>({path:e[b]?.path??`Appended system prompt ${b+1}`,content:a,source:"extension"}))]}let aM="</available_skills>";async function Y(a,b){let c=a.session,d={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0,autoCompactBuffer:0,...c?{}:{cold:!0}},e=b.filter(a=>"project"===a.source).map(a=>a.content).join("\n\n"),f={systemPrompt:0,systemTools:0,customTools:0,memory:0,skills:0,compacted:0};try{let b=a.sm.buildSessionProjection().messages,g=b.findLast(a=>"system"===a.role);if(g){let a="string"==typeof g.content?g.content.length:w(g.content).length;f.memory=g.sections?.project_context?.length??0,f.skills=g.sections?.skills?.length??0,f.systemPrompt=a+Object.entries(g.sections??{}).filter(([a])=>"project_context"!==a&&"skills"!==a).reduce((a,[,b])=>a+("string"==typeof b?b.length:0),0);let b=new Set(c?c.getAllTools().filter(a=>a.sourceInfo?.source==="builtin").map(a=>a.name):["read","bash","edit","write","grep","find","ls"]);for(let a of g.toolsAdded??[])f[b.has(a.name)?"systemTools":"customTools"]+=JSON.stringify(a).length;delete d.cold}else if(c){let a=c.systemPrompt??"";f.memory=e.length;let b=a.indexOf("The following skills provide specialized instructions"),d=a.indexOf(aM);f.skills=b>=0&&d>b?a.slice(b,d+aM.length).length:0,f.systemPrompt=Math.max(0,a.length-f.memory-f.skills);let g=new Set(c.getActiveToolNames());for(let a of c.getAllTools().filter(a=>g.has(a.name))){let b=JSON.stringify({name:a.name,description:a.description,parameters:a.parameters}).length;f[a.sourceInfo?.source==="builtin"?"systemTools":"customTools"]+=b}}else{f.memory=e.length;let b=(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd);f.skills=(0,i.formatSkillsForPrompt)(b.getSkills().skills).trim().length}for(let a of b)("compactionSummary"===a.role||"branchSummary"===a.role)&&(f.compacted+=a.summary?.length??0);for(let a of(d.characters=f,Object.keys(f)))d[a]=Math.ceil(f[a]/4)}catch{}try{let b=(0,j.vT)(a.cwd).getCompactionSettings(c?.model);b.enabled&&(d.autoCompactBuffer=b.reserveTokens)}catch{}return d}function Z(a){a.breakdownQueued||a.disposed||(a.breakdownQueued=!0,queueMicrotask(()=>{if(a.breakdownQueued=!1,a.disposed)return;let b=[];try{b=X(a.cwd,a.session?.resourceLoader)}catch{}Y(a,b).then(b=>{a.disposed||H(a,{type:"context_breakdown",breakdown:b,ts:Date.now()})},()=>void 0)}))}function $(a,b,c){let d=a.ledger.entries[0]?.ts??Date.now(),e=[];b?.systemPrompt&&e.push({seq:-1,kind:"system",ts:d,title:"Initial System Prompt",detail:b.systemPrompt});try{(c??X(a.cwd,a.session?.resourceLoader)).forEach((a,b)=>e.push({seq:-2-b,kind:"context",ts:d,title:a.path,detail:a.content.length>4e3?`${a.content.slice(0,4e3)}…`:a.content}))}catch{}return e}function _(a,b){for(let c of $(a,b))H(a,{type:"traj",entry:c,ts:Date.now()})}async function aa(a){if(a.disposed)throw Error("session is disposed");return a.creating?a.creating:a.session?a.session:(a.creating=(async()=>{let b;await (0,j.Df)(a.cwd);let c=(0,j.vT)(a.cwd),d=await (0,j.Yb)(a.cwd);try{var f,g;let l,m;if(a.disposed)throw Error("session is disposed");let{session:n}=await (0,j.az)({cwd:a.cwd,agentDir:(0,j.$M)(),sessionManager:a.sm,modelRuntime:await (0,j.uU)(),resourceLoader:d,settingsManager:c});if(b=n,a.disposed)throw Error("session is disposed");a.session=n,a.requestedTools=new Set(n.getActiveToolNames()),f=a,l=(g=n).setActiveToolsByName.bind(g),aN.set(g,l),g.setActiveToolsByName=a=>{let b=[...new Set(a)];for(let a of ah(g))b.includes(a)||f.requestedTools.delete(a);for(let a of b)f.requestedTools.add(a);let c=ac(f,g);l(b.filter(a=>c.includes(a)))},m=g.reload.bind(g),g.reload=async a=>{if(f.disposed)throw Error("session is disposed");if(ab(f))throw Error("session is busy");f.resourceReloading=!0;try{await (0,j.YW)(async()=>{if(f.disposed||f.runActive||!g.isIdle)throw Error("session is busy");await m({beforeSessionStart:async()=>{for(let a of ah(g))f.requestedTools.add(a);ad(f,g),await a?.beforeSessionStart?.(),ad(f,g)}})}),f.resourceVersion=(0,j.Ec)(f.cwd)}finally{ad(f,g),f.resourceReloading=!1,f.disposed||(af(f,g),_(f,g),am(f))}},ad(a,n),n.subscribe(b=>{a.disposed||function(a,b){a.ledger.onEvent(b),O(a).onEvent(b);let c=Date.now();switch(b.type){case"message_start":{let d=b.message,e=B(a,d);"assistant"===e.role&&(a.inflight=d,a.inflightId=e.streamId,a.inflightIndex=a.session?.messages.length,e.stopReason="pending",e.content=e.content.map(a=>"text"===a.type?{...a,text:""}:"thinking"===a.type?{...a,thinking:""}:a)),("user"===e.role||"assistant"===e.role)&&H(a,{type:"message",message:e,phase:"start",ts:c});break}case"message_update":{let d=b.assistantMessageEvent;if(b.message&&(a.inflight=b.message,a.inflightId&&a.messageIds.set(b.message,a.inflightId)),!d)break;"text_delta"===d.type&&"string"==typeof d.delta?H(a,{type:"delta",kind:"text",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c}):"thinking_delta"===d.type&&"string"==typeof d.delta&&H(a,{type:"delta",kind:"thinking",contentIndex:d.contentIndex,delta:d.delta,messageId:a.inflightId,ts:c});break}case"message_end":{let d,e,f=b.message;f?.role==="assistant"&&(a.inflightId&&a.messageIds.set(f,a.inflightId),a.inflight=null,a.inflightId=void 0,a.inflightIndex=void 0),d=aI.get(a)??[],e={events:null},d.push(e),aI.set(a,d),queueMicrotask(()=>{e.events=(()=>{let b=B(a,f);"assistant"===b.role&&(b.endedAt=c,a.breakdownProjected||(a.breakdownProjected=!0,Z(a)));let d=M(a);return d?[{type:"message",message:b,phase:"end",ts:c},d]:[{type:"message",message:b,phase:"end",ts:c}]})(),F(a)});break}case"tool_execution_start":b.toolName?.toLowerCase()==="write"&&function(a,b,c,d){let{target:f}=D(d);if(f)try{let d=h().isAbsolute(f)?f:h().resolve(a,f),g=(0,e.statSync)(d);if(!g.isFile()||g.size>524288)return;let i=(0,e.readFileSync)(d,"utf8");if(i.includes("\0"))return;aH.size>=256&&aH.delete(aH.keys().next().value),aH.set(`${b}\0${c}`,i)}catch{}}(a.cwd,a.sessionPath,b.toolCallId,b.args),H(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"running",ts:c});break;case"tool_execution_update":{let d=(0,q.R)(E(b.partialResult)??"");H(a,{type:"tool",id:b.toolCallId,name:b.toolName,state:"running",partialResult:d.text||void 0,encodingLoss:d.encodingLoss||void 0,ts:c});break}case"tool_execution_end":{let d=(0,q.R)(E(b.result)??"");H(a,{type:"tool",id:b.toolCallId,name:b.toolName,args:b.args,state:"done",result:d.text||void 0,isError:b.isError,encodingLoss:d.encodingLoss||void 0,patch:C(b.result?.details)??(b.toolName?.toLowerCase()==="write"?function(a,b,c,d){let e=`${b}\0${c}`,f=aH.get(e);if(aH.delete(e),void 0===f)return;let{target:g,content:h}=D(d);if(void 0!==h&&h!==f)try{return(0,i.generateUnifiedPatch)(g,f,h).slice(0,6e4)}catch{return}}(a.cwd,a.sessionPath,b.toolCallId,b.args):void 0),ts:c}),N(a);break}case"agent_start":a.runActive=!0,H(a,{type:"status",isStreaming:!0,state:"running",ts:c});break;case"agent_end":N(a);break;case"agent_settled":a.runActive=!1,H(a,{type:"status",isStreaming:!1,state:"idle",ts:c}),N(a,!0),a.resourceReloadPending&&queueMicrotask(()=>void an(a));break;case"queue_update":H(a,{type:"queue",steering:[...b.steering],followUp:[...b.followUp],ts:c});break;case"compaction_start":H(a,{type:"status",isStreaming:!0,state:"compacting",ts:c}),H(a,{type:"compaction",phase:"start",reason:b.reason,ts:c});break;case"compaction_end":H(a,{type:"compaction",phase:"end",reason:b.reason,errorMessage:b.errorMessage,...b.result&&!b.errorMessage?function(a){try{let b=a.sm.buildContextEntries();if(b[0]?.type!=="compaction")return{};let c=b.find(a=>"message"===a.type&&(a.message?.role==="user"||a.message?.role==="assistant"));return{marker:y(b[0])??void 0,beforeId:c?.id,beforeStreamId:c?a.messageIds?.get(c.message):void 0}}catch{return{}}}(a):{},ts:c}),N(a,!0),Z(a),"manual"===b.reason&&(H(a,{type:"status",isStreaming:ab(a),state:ab(a)?"running":"idle",ts:c}),a.resourceReloadPending&&queueMicrotask(()=>void an(a)));break;case"session_info_changed":H(a,{type:"name",name:b.name??"",ts:c});break;case"thinking_level_changed":a.session?I(a,a.session):H(a,{type:"model",thinkingLevel:b.level,ts:c});break;case"auto_retry_start":H(a,{type:"retry",attempt:Number(b.attempt)||0,maxAttempts:Number(b.maxAttempts)||0,message:String(b.errorMessage??""),ts:c});break;case"auto_retry_end":H(a,{type:"retry_end",attempt:Number(b.attempt)||0,ts:c})}for(let b of a.ledger.drainDirty())H(a,{type:"traj",entry:b,ts:Date.now()})}(a,b)});let o=(0,k.X)({publish:b=>H(a,b),hasViewers:()=>!a.disposed&&ax(a)});if(a.ui=o,await n.bindExtensions({mode:"rpc",uiContext:o.uiContext,onError:b=>{H(a,{type:"error",message:`扩展 ${b.extensionPath.split(/[\\/]/).pop()} 在 ${b.event} 出错:${b.error}`,ts:Date.now()})},abortHandler:()=>void n.abort().catch(()=>void 0)}),a.disposed)throw Error("session is disposed");return ad(a,n),a.resourceVersion=(0,j.Ec)(a.cwd),_(a,n),af(a,n),am(a),N(a),n}catch(e){a.ui?.dispose(),a.ui=null;let c=d.getExtensions().runtime;throw b?ae(b).finally(()=>c.invalidate()):c.invalidate(),a.session=null,e}})().catch(b=>{throw a.disposed||H(a,{type:"error",message:String(b?.message??b),ts:Date.now()}),b}).finally(()=>{a.creating=null}),a.creating)}function ab(a){return a.promptSubmitting||a.resourceReloading||a.runActive||!!(a.session&&!a.session.isIdle)}function ac(a,b){let c=a.customActiveTools;return ag(b).filter(b=>c?c.includes(b):(0,j.YQ)(a.toolPreset,b))}let aN=new WeakMap;function ad(a,b){let c=function(a,b){let c=ac(a,b);if(a.customActiveTools)return c;let d=new Set(b.getAllTools().filter(a=>("direct"===a.exposure||"model-only"===a.exposure)&&b.getToolDefinition(a.name)?.defaultActive!==!1).map(a=>a.name));return c.filter(b=>d.has(b)||a.requestedTools.has(b))}(a,b);(aN.get(b)??b.setActiveToolsByName.bind(b))(c)}let aO=new WeakMap;function ae(a){let b,c=aO.get(a);if(c)return c;try{a.agent.abort()}catch{}let d=Promise.resolve();try{let b=a.extensionRunner;b.hasHandlers("session_shutdown")&&(d=b.emit({type:"session_shutdown",reason:"quit"}))}catch{}let e=new Promise(a=>{b=setTimeout(a,5e3),b.unref?.()}),f=Promise.race([d.then(()=>void 0,()=>void 0),e]).finally(()=>{clearTimeout(b);try{a.dispose()}catch{}});return aO.set(a,f),f}function af(a,b){H(a,{type:"tools",active:ah(b),all:ag(b),toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,ts:Date.now()}),Z(a)}function ag(a){let b=a.getAllTools?.();return b?b.map(a=>a.name):[]}function ah(a){return a.getActiveToolNames?.()??[]}function ai(a){if(!a.disposed){for(let b of(a.disposed=!0,a.ui?.dispose(),a.ui=null,a.growth?.dispose(),a.growth=null,a.session&&ae(a.session),a.creating&&a.creating.then(a=>a?ae(a):void 0).catch(()=>void 0),a.subscribers))try{b(a.seq,JSON.stringify({type:"status",isStreaming:!1,state:"disposed",ts:Date.now()}))}catch{}a.subscribers.clear(),aF.delete(a.sessionPath)}}async function aj(a){let b=aF.get(a);if(!b)return;let c=b.session??(b.creating?await b.creating.catch(()=>null):null);c?.isStreaming&&await c.abort().catch(()=>void 0),ai(b)}{let a=globalThis;a.__piWebReaper&&clearInterval(a.__piWebReaper),a.__piWebReaper=setInterval(function(){let a=Date.now();for(let b of[...aF.values()])!ax(b)&&!(a-b.lastActive<=6e5)&&(b.creating||ab(b)||ai(b));let b=[...aF.values()].filter(a=>a.session);if(b.length>6)for(let a of b.filter(a=>!a.creating&&!ab(a)&&!ax(a)).sort((a,b)=>a.lastActive-b.lastActive).slice(0,b.length-6))ai(a)},6e4),a.__piWebReaper.unref?.()}async function ak(a){await (0,j.jz)(a);let b=new i.ModelRegistry(await (0,j.uU)());return(0,j.YW)(async()=>{let{extensions:c,runtime:d}=(0,j.ye)(a).getExtensions(),e=new i.ExtensionRunner(c,d,a,j.Cv.inMemory(a),b);return al({cwd:a,session:null},e)})}function al(a,b){let c=a.session?.resourceLoader??(0,j.v9)(a.cwd)??(0,j.ye)(a.cwd),d=[],e=[];try{let a=c.getSkills();for(let b of(e=a.skills.map(a=>({name:String(a.name??""),description:String(a.description??"")})),a.diagnostics??[]))d.push({kind:"skill",path:b.path,message:b.message})}catch{e=[]}let f=[];try{let a=c.getPrompts();for(let b of(f=a.prompts.map(a=>({name:String(a.name??""),description:String(a.description??""),argumentHint:a.argumentHint})),a.diagnostics??[]))d.push({kind:"prompt",path:b.path,message:b.message})}catch{f=[]}try{for(let a of c.getExtensions().errors??[])d.push({kind:"extension",path:a.path,message:a.error})}catch{}let g=[];if(a.session||b)try{let c=b??a.session?.extensionRunner;if(c)for(let a of(g=c.getRegisteredCommands().map(a=>({name:a.invocationName,description:String(a.description??""),source:String(a.sourceInfo?.path??"").split(/[\\/]/).pop()??""})),c.getCommandDiagnostics()??[]))d.push({kind:"command",path:a.path,message:a.message})}catch{g=[]}return{skills:e,promptTemplates:f,extensionCommands:g,projectTrust:(0,j.af)(a.cwd),resourceDiagnostics:d}}function am(a){H(a,{type:"resources",...al(a),ts:Date.now()}),Z(a)}async function an(a){if(a.disposed||!a.session||a.creating||ab(a))return!1;a.resourceReloadPending=!1;try{await a.session.reload();try{ad(a,a.session)}catch{}return ao(a.session),!0}catch(b){return H(a,{type:"error",message:`重载扩展失败:${String(b?.message??b)}`,ts:Date.now()}),!1}finally{a.resourceReloadPending&&!ab(a)&&queueMicrotask(()=>void an(a))}}function ao(a){let b=a.model,c=b&&a.modelRuntime.getModel(b.provider,b.id);c&&c!==b&&(a.agent.state.model=c)}function ap(a,b){let c=0;for(let d of aF.values()){let e=d.session?.model;d.session&&e?.provider===a&&e.id===b&&(ao(d.session),aJ.delete(d),N(d,!0),c+=1)}return c}async function aq(a){let b=a=>"win32"===process.platform?a.replace(/\\/g,"/").toLowerCase():a.replace(/\\/g,"/"),c=0;for(let d of aF.values())if(!a||b(d.cwd)===b(a)){if(!d.session){ax(d)&&am(d);continue}if(d.creating||ab(d)){d.resourceReloadPending=!0,H(d,{type:"error",message:"资源已更新,将在本轮结束后生效",ts:Date.now()}),am(d);continue}await an(d)&&(c+=1)}return c}async function ar(a){let b,c,d,e;R(a),await (0,j.Df)(a.cwd);try{a.creating||(a.session&&ab(a)?((0,j.Dc)(a.cwd)||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0):(await (0,j.jz)(a.cwd),a.session&&(a.resourceReloadPending||a.resourceVersion!==(0,j.Ec)(a.cwd))&&(a.resourceReloadPending=!0,await an(a))))}catch{}let f=a.session,g=[],h=!1,i=["off","minimal","low","medium","high","xhigh","max"];if(f){let e=function(a,b){if(!a.inflightId||void 0===a.inflightIndex)return!1;let c=b.messages[a.inflightIndex];return!!c&&"assistant"===c.role&&(a.messageIds.set(c,a.inflightId),!0)}(a,f),j=[],k=[];try{j=a.sm.buildContextEntries(),k=z(a.sm,j)}catch{}if(g=[...k,...f.messages.map(b=>{var c;return b?.role==="compactionSummary"||b?.role==="branchSummary"?x(b,(c=j,b?.role==="compactionSummary"?c[0]?.type==="compaction"?c[0].id:void 0:c.find(a=>"branch_summary"===a.type&&a.fromId===b?.fromId&&Date.parse(a.timestamp)===b?.timestamp)?.id)):B(a,b)})],!e&&a.inflight){let b=B(a,a.inflight);"assistant"===b.role&&g.push({...b,stopReason:"pending"})}b=a.seq;let l=f.model;l&&(c={provider:String(l.provider??""),id:String(l.id??""),name:String(l.name??l.id??"")}),d=String(f.thinkingLevel??"");try{i=f.getAvailableThinkingLevels()}catch{}h=ab(a)}else{try{g=A(a.sm)}catch{g=[]}try{let b=a.sm,e=b.buildSessionContext?.();if(e?.model&&(c={provider:e.model.provider,id:e.model.modelId,name:e.model.modelId}),d=e?.thinkingLevel,e?.model){let a=(await (0,j.uU)()).getModel(e.model.provider,e.model.modelId);a&&(i=(0,u.getSupportedThinkingLevels)(a),d&&(d=(0,u.clampThinkingLevel)(a,d)))}}catch{}}let k=f?L(a):function(a){let b=0,c=0,d=0,e=0,f={input:0,output:0,cacheRead:0,cacheWrite:0,total:0},g=0,h=a=>{a&&"object"==typeof a&&(f.input+=Number(a.input??0),f.output+=Number(a.output??0),f.cacheRead+=Number(a.cacheRead??0),f.cacheWrite+=Number(a.cacheWrite??0),g+=Number(a.cost?.total??0))};for(let f of a.sm.getEntries()){if(("usage"===f.type||"branch_summary"===f.type||"compaction"===f.type)&&f.usage&&h(f.usage),"message"!==f.type||!f.message)continue;e+=1;let a=f.message;"user"===a.role?b+=1:"assistant"===a.role?(c+=1,d+=Array.isArray(a.content)?a.content.filter(a=>a?.type==="toolCall").length:0,h(a.usage)):"toolResult"===a.role&&h(a.usage)}return f.total=f.input+f.output+f.cacheRead+f.cacheWrite,{userMessages:b,assistantMessages:c,toolCalls:d,totalMessages:e,tokens:f,cost:g,...K(a)}}(a),l=null;if(f){let a=f.getContextUsage()??null;l=a?{tokens:a.tokens,contextWindow:a.contextWindow,percent:a.percent}:null}else if(c)try{let b=(await (0,j.uU)()).getModels(c.provider).find(a=>String(a.id)===c.id);l=(0,n.$)(a.sm.buildSessionProjection(),a.sm.getBranch(),Number(b?.contextWindow??0))}catch{}let p=f?{active:ah(f),all:ag(f).map(a=>({name:a}))}:{active:[],all:[]},q=f?{steering:[...f.getSteeringMessages()],followUp:[...f.getFollowUpMessages()]}:{steering:[],followUp:[]},r="";try{r=a.sm.getSessionName?.()??""}catch{r=""}let s=[],t=!1;try{s=X(a.cwd,a.session?.resourceLoader),t=!0}catch{s=[]}try{e=await Y(a,s)}catch{e=void 0}let v=f&&!a.creating?al(a):await ak(a.cwd),w=a.ledger.entries.length?a.ledger.entries:function(a){try{return(0,o.WZ)(a.sm.getEntries())}catch{return[]}}(a),y=[...$(a,f,t?s:void 0),...w];return{seq:b??a.seq,sessionPath:a.sessionPath,cwd:a.cwd,name:r,contextFiles:s.map(a=>a.path),contextResources:s,contextBreakdown:e,...v,messages:g,userTurns:(0,m.g)(a.sm.getEntries()),growthError:a.growth?.getError?.()??null,growthConsent:a.growth?.getConsentRequest?.()??null,model:c,thinkingLevel:d,thinkingLevels:i,toolPreset:a.toolPreset,customActiveTools:a.customActiveTools??null,extensionUiRequests:a.ui?.getPendingRequests()??[],extensionStatuses:Object.fromEntries(a.ui?.statuses??[]),tools:p,stats:k,contextUsage:l,queue:q,trajectory:y,isStreaming:h,...a.externalReload&&Date.now()-a.externalReload.at<6e4?{externalReload:a.externalReload}:{}}}function as(a,b){return`${a.epoch}.${b}`}function at(a,b){let c=/^([A-Za-z0-9]+)\.(\d+)$/.exec(b?.trim()??"");if(!c||c[1]!==a.epoch)return;let d=Number(c[2]);return Number.isSafeInteger(d)?d:void 0}function au(a,b,c){if(R(a),c<0||c>a.seq)return!1;let d=a.buffer.filter(a=>a.seq>c);if(d.length!==a.seq-c)return!1;let e=new Set(a.ui?.getPendingRequests().map(a=>a.id));if(d.some(a=>{let b=JSON.parse(a.json);return"extension_ui"===b.type&&["select","confirm","input"].includes(b.method)&&!e.has(b.id)}))return!1;for(let c of(a.subscribers.add(b),d))b(c.seq,c.json);return!0}function av(a,b){a.subscribers.delete(b)}function aw(a,b){a.viewerGraceUntil=Math.max(a.viewerGraceUntil??0,Date.now()+b)}function ax(a){return a.viewerAvailable?a.viewerAvailable():a.subscribers.size>0||(a.viewerGraceUntil??0)>Date.now()}async function ay(a){await Promise.race([O(a).prepare().catch(()=>void 0),new Promise(a=>setTimeout(a,5e3))])}function az(a,b,c,d={}){return new Promise(e=>{let f=!1;b.prompt(c,{...d,source:"rpc",preflightResult:a=>{a&&(f=!0,e({ok:!0,data:{accepted:!0}}))}}).then(()=>{f||e({ok:!0,data:{accepted:!0}})},b=>{let c=String(b?.message??b);f?H(a,{type:"error",message:c,ts:Date.now()}):e({ok:!1,error:c})})})}async function aA(a,b){R(a);try{switch(b.cmd){case"prepare":return await aa(a),{ok:!0};case"prompt":{let c=(b.text??"").trim();if(!c&&!b.images?.length)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let d=await aa(a);if(a.disposed)throw Error("session is disposed");if((d.isStreaming||a.runActive)&&!b.behavior)return{ok:!1,error:"session is busy; choose steer or followUp"};if(d.isStreaming||await ay(a),a.disposed)throw Error("session is disposed");return await az(a,d,c,{images:b.images,streamingBehavior:b.behavior})}finally{a.promptSubmitting=!1,a.disposed||H(a,{type:"status",isStreaming:ab(a),state:ab(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void an(a))}}case"steer":case"followUp":{if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};let c=await aa(a);if(a.promptSubmitting||a.resourceReloading||!c.isStreaming)return{ok:!1,error:"session is not accepting queued messages"};return await c[b.cmd](b.text??"",b.images),{ok:!0}}case"clearQueue":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return H(a,{type:"queue",steering:[],followUp:[],ts:Date.now()}),{ok:!0,data:b}}case"abort":{if(!a.session)return{ok:!0,data:{steering:[],followUp:[]}};let b=a.session.clearQueue();return await a.session.abort(),H(a,{type:"status",isStreaming:!1,state:"aborted",ts:Date.now()}),{ok:!0,data:b}}case"compact":{let c=await aa(a);return await c.compact(b.instructions||void 0),{ok:!0}}case"setModel":{let c=await aa(a),d=(await (0,j.uU)()).getModels(b.provider).find(a=>a.id===b.modelId);if(!d)return{ok:!1,error:`unknown model ${b.provider}/${b.modelId}`};return await c.setModel(d,{persist:!1}),J(a,c),!0!==b.fresh||a.desiredThinkingLevel||function(a,b){let c=b.model;if(!c)return;let d=(0,j.vT)(a.cwd),e=(0,s.dD)({supported:b.getAvailableThinkingLevels(),modelOverride:d.getModelThinkingLevel(c.provider,c.id),defaultLevel:d.getDefaultThinkingLevel()});e!==b.thinkingLevel&&b.setThinkingLevel(e)}(a,c),aJ.delete(a),I(a,c),N(a,!0),{ok:!0,data:{thinkingLevel:c.thinkingLevel,thinkingLevels:c.getAvailableThinkingLevels()}}}case"setThinkingLevel":{let c=await aa(a),d=String(b.level??"medium"),e=(0,u.clampThinkingLevel)(c.model,d);return a.desiredThinkingLevel=d,c.setThinkingLevel(e),I(a,c),{ok:!0,data:{requested:d,thinkingLevel:c.thinkingLevel,clamped:c.thinkingLevel!==d}}}case"setToolPreset":{let c=b.preset;if(!Object.hasOwn(j.Ax,c))return{ok:!1,error:"invalid tool preset"};if(!a.session&&!a.creating)return a.toolPreset=c,a.customActiveTools=void 0,H(a,{type:"tools",active:[],all:[],toolPreset:c,customActiveTools:null,ts:Date.now()}),{ok:!0};let d=await aa(a);if(a.disposed)return{ok:!1,error:"session is disposed"};return a.toolPreset=c,a.customActiveTools=void 0,ad(a,d),_(a,d),af(a,d),{ok:!0}}case"setActiveTools":{let c=await aa(a);if(a.disposed)return{ok:!1,error:"session is disposed"};let d=Array.isArray(b.names)?b.names.map(String):[],e=ag(c),f=[...new Set(d)].filter(a=>e.includes(a));if(0===f.length)return{ok:!1,error:"cannot disable all tools"};return a.customActiveTools=f,ad(a,c),_(a,c),af(a,c),{ok:!0,data:{active:ah(c)}}}case"cycleModel":{let c=await aa(a),d=await c.cycleModel(b.direction??"forward");if(d?.model)return J(a,c),I(a,c),{ok:!0,data:{model:String(d.model.id??""),thinkingLevel:c.thinkingLevel}};return{ok:!1,error:"no scoped models to cycle"}}case"navigate":{let c=await aa(a),d=String(b.entryId??"");if(!d)return{ok:!1,error:"missing entryId"};let e=await c.navigateTree(d);return{ok:!e?.cancelled,data:{cancelled:e?.cancelled===!0,editorText:e?.editorText}}}case"editAndResend":{let c=String(b.entryId??""),d=(b.text??"").trim();if(!c)return{ok:!1,error:"missing entryId"};if(!d)return{ok:!1,error:"empty prompt"};if(a.promptSubmitting||a.resourceReloading)return{ok:!1,error:"session is busy accepting another command"};a.promptSubmitting=!0;try{let b,e=await aa(a);if(a.disposed)throw Error("session is disposed");if(e.isStreaming||a.runActive){await e.abort().catch(()=>void 0);for(let b=0;b<50&&!a.disposed&&(e.isStreaming||a.runActive);b+=1)await new Promise(a=>setTimeout(a,100))}if(a.disposed)throw Error("session is disposed");let f=(b=e.sessionManager?.getEntry?.(c),b?.type==="message"&&b.message?.role==="user"&&Array.isArray(b.message.content)?b.message.content.filter(a=>a?.type==="image"&&"string"==typeof a.data&&"string"==typeof a.mimeType):[]),g=await e.navigateTree(c);if(g?.cancelled)return{ok:!1,error:"edit cancelled"};if(await ay(a),a.disposed)throw Error("session is disposed");return await az(a,e,d,f.length?{images:f}:{})}finally{a.promptSubmitting=!1,a.disposed||H(a,{type:"status",isStreaming:ab(a),state:ab(a)?"running":"idle",ts:Date.now()}),a.resourceReloadPending&&queueMicrotask(()=>void an(a))}}case"rename":{let c=(b.text??"").trim();return a.session?a.session.setSessionName(c):a.sm.appendSessionInfo(c),H(a,{type:"name",name:c,ts:Date.now()}),{ok:!0}}case"extensionUiResponse":return a.ui?.respond(String(b.requestId),{value:b.value,confirmed:b.confirmed,cancelled:b.cancelled})?{ok:!0}:{ok:!1,error:"no pending extension request"};case"reload":{if(ab(a))return{ok:!1,error:"session is busy"};for(let b of(await (0,j.x9)(),aF.values()))b!==a&&b.session&&(ab(b)?b.resourceReloadPending=!0:ao(b.session));let b=await aa(a);await b.reload();try{ad(a,b)}catch{}return ao(b),{ok:!0}}case"fork":{let c=(b.entryId?j.Cv.open(a.sessionPath).createBranchedSession(b.entryId):j.Cv.forkFrom(a.sessionPath,a.cwd).getSessionFile())??"";if(!c)return{ok:!1,error:"failed to create forked session"};return{ok:!0,data:{sessionPath:c}}}default:return{ok:!1,error:"unknown cmd"}}}catch(a){return{ok:!1,error:String(a?.message??a)}}}async function aB(a){let b=j.Cv.create(a),c=b.getSessionFile()??"";if(!c)throw Error("failed to create session file");return W(c,a,b),{sessionPath:c}}function aC(){let a={};for(let[b,c]of aF){let d;if(c.session){for(let a=c.ledger.entries.length-1;a>=0;a-=1){let b=c.ledger.entries[a];if("tool"===b.kind){d=[b.toolName,(0,o.Zt)(b)].filter(Boolean).join(" \xb7 ");break}}a[b]={streaming:ab(c),lastStep:d}}}return a}async function aD(a,b){let d=a.sessionPath.replace(/\\/g,"/").split("/").pop()??"session";if("jsonl"===b){let{readFile:b}=await Promise.resolve().then(c.t.bind(c,51455,23));return{filename:d,content:await b(a.sessionPath,"utf8"),contentType:"application/jsonl"}}let e=await aa(a),f=await e.exportToHtml(),{readFile:g,rm:h}=await Promise.resolve().then(c.t.bind(c,51455,23)),i=await g(f,"utf8");return await h(f,{force:!0}).catch(()=>void 0),{filename:d.replace(/\.jsonl$/,".html"),content:i,contentType:"text/html"}}(0,p.j8)({isActive:function(a){let b="win32"===process.platform?a.toLowerCase():a;for(let a of aF.keys())if(("win32"===process.platform?a.toLowerCase():a)===b)return!0;return!1},log:a=>console.log(a)}),d()}catch(a){d(a)}})},31374:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{j8:()=>l});var e=c(51455),f=c.n(e),g=c(76760),h=c.n(g),i=c(6896),j=a([i]);async function k({now:a=Date.now(),retentionDays:b=30,isActive:d=()=>!1,log:e=console.log,dryRun:g=!1}={}){let j={scanned:0,deleted:[],missing:[],skippedActive:[],kept:0};if(!Number.isFinite(b)||b<=0)return j;let l=a-24*b*36e5;for(let{path:k,archivedAt:m}of(await (0,i.nO)({now:a,persist:!g}))){let n;j.scanned+=1;let o=h().resolve(k);if(d(o)){j.skippedActive.push(o),j.kept+=1;continue}try{let a=await f().stat(o);if(!a.isFile())throw Object.assign(Error("not a file"),{code:"ENOENT"});n=a.mtimeMs}catch(a){if("ENOENT"!==a.code)throw a;j.missing.push(o),g||await (0,i.Iz)(o);continue}let p=Math.max(m,n);if(p>l){j.kept+=1;continue}let q=Math.floor((a-p)/864e5);if(j.deleted.push({path:o,idleDays:q}),g)continue;let{deleteSession:r}=await c.e(6229).then(c.bind(c,66229));await r(o),await (0,i.Iz)(o),e(`[piweb] 归档会话已满 ${b} 天(归档后 ${q} 天没有活动),已删除:${o}`)}return j}i=(j.then?(await j)():j)[0];let m=!1;function l({intervalMs:a=216e5,delayMs:b=5e3,log:c=console.log,isActive:d}={}){if(m)return;m=!0;let e=async()=>{Date.now();try{let a=await k({log:c,isActive:d});(a.deleted.length||a.missing.length)&&c(`[piweb] 归档清理:删除 ${a.deleted.length} 个,清理失效记录 ${a.missing.length} 个,保留 ${a.kept} 个`)}catch(a){c(`[piweb] 归档清理失败:${a instanceof Error?a.message:a}`)}},f=setTimeout(()=>{e();let b=setInterval(()=>void e(),a);b.unref?.()},b);f.unref?.()}d()}catch(a){d(a)}})},34007:(a,b,c)=>{c.d(b,{S:()=>f,g:()=>e});var d=c(777);function e(a){let b=[];for(let[c,d]of a.entries()){if("message"!==d.type||d.message?.role!=="user")continue;let a="number"==typeof d.timestamp?d.timestamp:Date.parse(d.timestamp??""),e=Number.isFinite(a)?a:d.message.timestamp;b.push({id:d.id??`entry:${c}`,ts:"number"==typeof e&&Number.isFinite(e)?e:0/0})}return b}function f(a,b=0){let c=[],e="";for(let f of a.slice(Math.max(0,b)))if("message"===f.type&&f.message?.role==="user"&&f.id){var g;c.push(f.id),e||(e=(0,d.K)("string"==typeof(g=f.message.content)?g:!Array.isArray(g)?"":g.map(a=>a&&"object"==typeof a&&"text"===a.type?String(a.text??""):"").join("")).split("\n").map(a=>a.trim()).find(Boolean)??"")}return{ids:c,title:e}}},35851:(a,b,c)=>{c.d(b,{I:()=>f,k:()=>g});var d=c(83188),e=c(34007);let f=5;function g(a){let{cwd:b,sessionPath:c,publish:g,entries:h,consent:i}=a,j=!1,k=null,l=!1,m=0,n=!1,o=null,p=Promise.resolve(),q=null,r=0,s=!1,t=null,u=a=>{let c=a instanceof Error?a.message:String(a),e=a instanceof d.qy&&("unavailable"===a.code||"too-large"===a.code);e&&(j=!0,k=a,q=null),n=!0,o=c;let f=Date.now();(e||!(f-m<6e4))&&(m=f,console.warn(`[piweb] growth commit failed for ${b}: ${c}`),g({type:"growth_error",message:c,ts:f}))},v=a=>p=p.then(a,a).catch(u),w=a=>(n&&(n=!1,o=null,g({type:"growth_error",message:null,ts:Date.now()})),a&&!l&&g({type:"growth",round:a,ts:Date.now()}),a),x=()=>{j=!0,k=new d.qy("growth tracking was declined for this workspace","unavailable"),q=null},y=async(a,c)=>{let e=s?await i():null;if(!1===e)return void x();if(!s||null!==e)try{return await a({allowInit:!0===e,abortIf:c})}catch(f){if(!(f instanceof d.qy)||"needs-consent"!==f.code)throw f;s=!0;let e=await i();if(!1===e)return void x();if(!0===e)return a({allowInit:!0,abortIf:c});t||l||g({type:"growth_consent",request:t={cwd:b,reason:f.target?.reason??"not-git",parent:f.target?.parent},ts:Date.now()});return}},z=a=>y(a=>(0,d.uP)(b,c,a),a);return{version:f,getError:()=>o,getConsentRequest:()=>t,prepare(){if(j||l)return p;let a=r;return v(async()=>{if(j||l)return;let b=await z(()=>r!==a);void 0!==b&&w(b)})},onEvent(a){if(!l&&!j)switch(a.type){case"agent_start":null===q&&(q=h().length,r+=1);break;case"agent_settled":{if(null===q)break;let a=h().slice(q),{ids:f,title:g}=(0,e.S)(a);q=null,v(async()=>{if(j||l)return;let e=await y(e=>(0,d.qo)(b,{kind:"round",session:c,title:g,promptIds:f,status:function(a){for(let b=a.length-1;b>=0;b-=1){let c="message"===a[b].type?a[b].message:void 0;if(c?.role==="assistant"){if("aborted"===c.stopReason)return"aborted";if("error"===c.stopReason)return"error";break}}return"done"}(a)},e));void 0!==e&&w(e)})}}},async recordNow(){let a;if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let b=null;if(await v(async()=>{try{if(j)throw k??new d.qy("growth tracking is disabled for this workspace","unavailable");let a=await z();if(void 0===a)throw j?k??new d.qy("growth tracking is disabled for this workspace","unavailable"):new d.qy("growth tracking is waiting for permission to create a git repository","needs-consent");b=w(a)}catch(b){a=b,b instanceof d.qy&&"needs-consent"===b.code||u(b)}}),a)throw a;return b},async consentAnswered(a){let b=t;if(t=null,b&&!l&&g({type:"growth_consent",request:null,ts:Date.now()}),!a)return x(),null;if(j||l)return null;let c=null;return await v(async()=>{let a=await z();c=void 0===a?null:w(a)}),c},dispose(){l=!0}}}},49904:(a,b,c)=>{c.d(b,{Ax:()=>k,Jt:()=>m,_i:()=>l});var d=c(51455),e=c.n(d),f=c(76760),g=c.n(f),h=c(80974),i=c.n(h);let j=new Map;function k(a,b){let c=g().resolve(a),d="win32"===process.platform?c.toLowerCase():c,e=(j.get(d)??Promise.resolve()).then(b,b),f=e.then(()=>void 0,()=>void 0);return j.set(d,f),f.then(()=>{j.get(d)===f&&j.delete(d)}),e}async function l(a,b){await e().mkdir(g().dirname(a),{recursive:!0});let c=await i().lock(a,{realpath:!1,retries:{retries:20,minTimeout:20,maxTimeout:100}});try{return await b()}finally{await c()}}async function m(a){await a.flush();let b=a.drainErrors();if(b.length)throw Error(`Pi settings failed: ${b.map(({scope:a,error:b})=>`${a}: ${b.message}`).join("; ")}`,{cause:b[0].error})}},53634:(a,b,c)=>{c.d(b,{dD:()=>e});let d=["off","minimal","low","medium","high","xhigh","max"];function e(a){return function(a,b){if(a.includes(b))return b;let c=d.indexOf(b);if(-1===c)return a[0]??"off";for(let b=c;b<d.length;b+=1)if(a.includes(d[b]))return d[b];for(let b=c-1;b>=0;b-=1)if(a.includes(d[b]))return d[b];return a[0]??"off"}(a.supported,a.requested||a.modelOverride||a.defaultLevel||"medium")}},92584:(a,b,c)=>{c.d(b,{V:()=>e});var d=c(76760);let e=(c.n(d))().resolve(process.env.PI_WEB_ROOT??process.cwd())}};
@@ -9,7 +9,6 @@
9
9
  "originalSource": "/((?!_next/|_piweb-dev/|icon\\.svg|favicon\\.ico).*)"
10
10
  }
11
11
  ]
12
- },
13
- "/api/agent/[id]/side-chat": {}
12
+ }
14
13
  }
15
14
  }