@rexvane/piweb 0.3.25 → 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 (345) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -5
  3. package/.next/build-manifest.json +4 -4
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +4 -4
  6. package/.next/react-loadable-manifest.json +14 -26
  7. package/.next/required-server-files.js +26 -26
  8. package/.next/required-server-files.json +26 -26
  9. package/.next/routes-manifest.json +6 -0
  10. package/.next/server/app/_global-error/page.js +2 -2
  11. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  12. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_global-error.html +1 -1
  14. package/.next/server/app/_global-error.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found/page.js +1 -1
  19. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_not-found.html +1 -1
  22. package/.next/server/app/_not-found.rsc +2 -2
  23. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  27. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  28. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/agent/[id]/route.js +1 -1
  30. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
  33. package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
  34. package/.next/server/app/api/agent/[id]/tree/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/agent/new/route.js +1 -1
  36. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  37. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/agent/resources/route.js +1 -0
  39. package/.next/server/app/api/agent/resources/route.js.nft.json +1 -0
  40. package/.next/server/app/api/agent/resources/route_client-reference-manifest.js +1 -0
  41. package/.next/server/app/api/config/route.js +1 -1
  42. package/.next/server/app/api/config/route.js.nft.json +1 -1
  43. package/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/files/route.js +1 -1
  45. package/.next/server/app/api/files/route.js.nft.json +1 -1
  46. package/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/fs/route.js +1 -1
  48. package/.next/server/app/api/fs/route.js.nft.json +1 -1
  49. package/.next/server/app/api/fs/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/git/route.js +4 -4
  51. package/.next/server/app/api/git/route.js.nft.json +1 -1
  52. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/github/route.js +4 -4
  54. package/.next/server/app/api/github/route.js.nft.json +1 -1
  55. package/.next/server/app/api/github/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/growth/route.js +1 -1
  57. package/.next/server/app/api/growth/route.js.nft.json +1 -1
  58. package/.next/server/app/api/growth/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/health/route.js +1 -1
  60. package/.next/server/app/api/health/route.js.nft.json +1 -1
  61. package/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/models/defaults/route.js +1 -1
  63. package/.next/server/app/api/models/defaults/route.js.nft.json +1 -1
  64. package/.next/server/app/api/models/defaults/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/models/route.js +1 -1
  66. package/.next/server/app/api/models/route.js.nft.json +1 -1
  67. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/pi-settings/route.js +1 -1
  69. package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
  70. package/.next/server/app/api/pi-settings/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/plugins/route.js +1 -1
  72. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  73. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/prompts/route.js +1 -1
  75. package/.next/server/app/api/prompts/route.js.nft.json +1 -1
  76. package/.next/server/app/api/prompts/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/remote/route.js +2 -2
  78. package/.next/server/app/api/remote/route.js.nft.json +1 -1
  79. package/.next/server/app/api/remote/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/security/route.js +1 -1
  81. package/.next/server/app/api/security/route.js.nft.json +1 -1
  82. package/.next/server/app/api/security/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  84. package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
  85. package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  87. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  88. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/sessions/import/route.js +2 -2
  90. package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
  91. package/.next/server/app/api/sessions/import/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/sessions/route.js +1 -1
  93. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  94. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/skills/route.js +2 -2
  96. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  97. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/update/route.js +2 -2
  99. package/.next/server/app/api/update/route.js.nft.json +1 -1
  100. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/version/route.js +1 -1
  102. package/.next/server/app/api/version/route.js.nft.json +1 -1
  103. package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/web-auth/route.js +2 -2
  105. package/.next/server/app/api/web-auth/route.js.nft.json +1 -1
  106. package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/workspaces/route.js +1 -1
  108. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  109. package/.next/server/app/api/workspaces/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/icon.svg/route.js +1 -1
  111. package/.next/server/app/icon.svg/route.js.nft.json +1 -1
  112. package/.next/server/app/index.html +1 -1
  113. package/.next/server/app/index.rsc +5 -5
  114. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  115. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  116. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  117. package/.next/server/app/login/page.js +1 -1
  118. package/.next/server/app/login/page.js.nft.json +1 -1
  119. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  120. package/.next/server/app/login.html +1 -1
  121. package/.next/server/app/login.rsc +4 -4
  122. package/.next/server/app/login.segments/_full.segment.rsc +4 -4
  123. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  124. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  125. package/.next/server/app/page.js +1 -1
  126. package/.next/server/app/page.js.nft.json +1 -1
  127. package/.next/server/app/page_client-reference-manifest.js +1 -1
  128. package/.next/server/app-paths-manifest.json +6 -5
  129. package/.next/server/chunks/{813.js → 1813.js} +1 -1
  130. package/.next/server/chunks/{430.js → 2430.js} +5 -5
  131. package/.next/server/chunks/{970.js → 2970.js} +1 -1
  132. package/.next/server/chunks/3924.js +6 -0
  133. package/.next/server/chunks/4807.js +1 -0
  134. package/.next/server/chunks/5393.js +1 -0
  135. package/.next/server/chunks/5802.js +2 -0
  136. package/.next/server/chunks/620.js +1 -1
  137. package/.next/server/chunks/6229.js +1 -0
  138. package/.next/server/chunks/7496.js +1 -0
  139. package/.next/server/chunks/7662.js +2 -0
  140. package/.next/server/chunks/8686.js +1 -0
  141. package/.next/server/chunks/{593.js → 974.js} +1 -1
  142. package/.next/server/chunks/{920.js → 9920.js} +1 -1
  143. package/.next/server/instrumentation.js +1 -1
  144. package/.next/server/instrumentation.js.nft.json +1 -1
  145. package/.next/server/middleware-build-manifest.js +1 -1
  146. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  147. package/.next/server/middleware.js +5 -5
  148. package/.next/server/pages/404.html +1 -1
  149. package/.next/server/pages/500.html +1 -1
  150. package/.next/server/preview-props.json +3 -3
  151. package/.next/server/server-reference-manifest.json +1 -1
  152. package/.next/server/webpack-runtime.js +1 -1
  153. package/.next/static/QJCtqgDKzGS2BdKABd9ch/_buildManifest.js +1 -0
  154. package/.next/static/chunks/2577.86c8538fbf05a8b2.js +1 -0
  155. package/.next/static/chunks/2716.fa561519675a3ff1.js +1 -0
  156. package/.next/static/chunks/2906.8a0e09bb47605cf1.js +1 -0
  157. package/.next/static/chunks/4673.ea36e55005c0f82f.js +1 -0
  158. package/.next/static/chunks/4686-4dc565817a160351.js +1 -0
  159. package/.next/static/chunks/4778.0d2c5d75b791d352.js +1 -0
  160. package/.next/static/chunks/app/_global-error/page-f2d93969c0bcf406.js +1 -0
  161. package/.next/static/chunks/app/_not-found/page-2d40d1d7d916666a.js +1 -0
  162. package/.next/static/chunks/app/api/agent/[id]/events/route-f2d93969c0bcf406.js +1 -0
  163. package/.next/static/chunks/app/api/agent/[id]/route-f2d93969c0bcf406.js +1 -0
  164. package/.next/static/chunks/app/api/agent/[id]/tree/route-f2d93969c0bcf406.js +1 -0
  165. package/.next/static/chunks/app/api/agent/new/route-f2d93969c0bcf406.js +1 -0
  166. package/.next/static/chunks/app/api/agent/resources/route-f2d93969c0bcf406.js +1 -0
  167. package/.next/static/chunks/app/api/config/route-f2d93969c0bcf406.js +1 -0
  168. package/.next/static/chunks/app/api/files/route-f2d93969c0bcf406.js +1 -0
  169. package/.next/static/chunks/app/api/fs/route-f2d93969c0bcf406.js +1 -0
  170. package/.next/static/chunks/app/api/git/route-f2d93969c0bcf406.js +1 -0
  171. package/.next/static/chunks/app/api/github/route-f2d93969c0bcf406.js +1 -0
  172. package/.next/static/chunks/app/api/growth/route-f2d93969c0bcf406.js +1 -0
  173. package/.next/static/chunks/app/api/health/route-f2d93969c0bcf406.js +1 -0
  174. package/.next/static/chunks/app/api/models/defaults/route-f2d93969c0bcf406.js +1 -0
  175. package/.next/static/chunks/app/api/models/route-f2d93969c0bcf406.js +1 -0
  176. package/.next/static/chunks/app/api/pi-settings/route-f2d93969c0bcf406.js +1 -0
  177. package/.next/static/chunks/app/api/plugins/route-f2d93969c0bcf406.js +1 -0
  178. package/.next/static/chunks/app/api/prompts/route-f2d93969c0bcf406.js +1 -0
  179. package/.next/static/chunks/app/api/remote/route-f2d93969c0bcf406.js +1 -0
  180. package/.next/static/chunks/app/api/security/route-f2d93969c0bcf406.js +1 -0
  181. package/.next/static/chunks/app/api/sessions/[id]/export/route-f2d93969c0bcf406.js +1 -0
  182. package/.next/static/chunks/app/api/sessions/[id]/route-f2d93969c0bcf406.js +1 -0
  183. package/.next/static/chunks/app/api/sessions/import/route-f2d93969c0bcf406.js +1 -0
  184. package/.next/static/chunks/app/api/sessions/route-f2d93969c0bcf406.js +1 -0
  185. package/.next/static/chunks/app/api/skills/route-f2d93969c0bcf406.js +1 -0
  186. package/.next/static/chunks/app/api/update/route-f2d93969c0bcf406.js +1 -0
  187. package/.next/static/chunks/app/api/version/route-f2d93969c0bcf406.js +1 -0
  188. package/.next/static/chunks/app/api/web-auth/route-f2d93969c0bcf406.js +1 -0
  189. package/.next/static/chunks/app/api/workspaces/route-f2d93969c0bcf406.js +1 -0
  190. package/.next/static/chunks/app/{layout-7f64fa67ea6ce980.js → layout-50d06e2078d6ce76.js} +1 -1
  191. package/.next/static/chunks/app/login/{page-00dbd2f395b364d5.js → page-5e276a1eeb8867df.js} +1 -1
  192. package/.next/static/chunks/app/page-71f2d3b3ed864b3d.js +1 -0
  193. package/.next/static/chunks/main-5403f0764579e5fe.js +5 -0
  194. package/.next/static/chunks/{main-app-56863ace24eb152f.js → main-app-e9b53f0e1c6591b2.js} +1 -1
  195. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f2d93969c0bcf406.js +1 -0
  196. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f2d93969c0bcf406.js +1 -0
  197. package/.next/static/chunks/next/dist/client/components/builtin/global-error-a7e260f8cc2582d7.js +1 -0
  198. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f2d93969c0bcf406.js +1 -0
  199. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f2d93969c0bcf406.js +1 -0
  200. package/.next/static/chunks/webpack-ffc09b5fcc8aaa6d.js +1 -0
  201. package/.next/static/css/7e3caf797e4cb19a.css +1 -0
  202. package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
  203. package/.next/types/app/api/agent/[id]/route.ts +1 -1
  204. package/.next/types/app/api/agent/[id]/tree/route.ts +1 -1
  205. package/.next/types/app/api/agent/new/route.ts +1 -1
  206. package/.next/types/app/api/agent/resources/route.ts +355 -0
  207. package/.next/types/app/api/config/route.ts +1 -1
  208. package/.next/types/app/api/files/route.ts +1 -1
  209. package/.next/types/app/api/fs/route.ts +1 -1
  210. package/.next/types/app/api/git/route.ts +1 -1
  211. package/.next/types/app/api/github/route.ts +1 -1
  212. package/.next/types/app/api/growth/route.ts +1 -1
  213. package/.next/types/app/api/health/route.ts +1 -1
  214. package/.next/types/app/api/models/defaults/route.ts +1 -1
  215. package/.next/types/app/api/models/route.ts +1 -1
  216. package/.next/types/app/api/pi-settings/route.ts +1 -1
  217. package/.next/types/app/api/plugins/route.ts +1 -1
  218. package/.next/types/app/api/prompts/route.ts +1 -1
  219. package/.next/types/app/api/remote/route.ts +1 -1
  220. package/.next/types/app/api/security/route.ts +1 -1
  221. package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
  222. package/.next/types/app/api/sessions/[id]/route.ts +1 -1
  223. package/.next/types/app/api/sessions/import/route.ts +1 -1
  224. package/.next/types/app/api/sessions/route.ts +1 -1
  225. package/.next/types/app/api/skills/route.ts +1 -1
  226. package/.next/types/app/api/update/route.ts +1 -1
  227. package/.next/types/app/api/version/route.ts +1 -1
  228. package/.next/types/app/api/web-auth/route.ts +1 -1
  229. package/.next/types/app/api/workspaces/route.ts +1 -1
  230. package/.next/types/app/layout.ts +1 -1
  231. package/.next/types/app/login/page.ts +1 -1
  232. package/.next/types/app/page.ts +1 -1
  233. package/.next/types/routes.d.ts +2 -1
  234. package/.next/types/validator.ts +10 -0
  235. package/LICENSE +1 -1
  236. package/README.md +1 -1
  237. package/bin/pi.js +0 -0
  238. package/bin/piweb.js +0 -0
  239. package/package.json +1 -1
  240. package/scripts/build-output.mjs +0 -0
  241. package/scripts/dev.mjs +0 -0
  242. package/scripts/entrypoint.mjs +0 -0
  243. package/scripts/install-build.mjs +0 -0
  244. package/scripts/launcher.mjs +0 -0
  245. package/scripts/pick-folder.ps1 +0 -0
  246. package/scripts/postinstall.mjs +0 -0
  247. package/scripts/process-runner.mjs +0 -0
  248. package/scripts/release.mjs +0 -0
  249. package/scripts/sync-file-icons.mjs +0 -0
  250. package/scripts/sync-provider-icons.mjs +0 -0
  251. package/src/app/api/agent/resources/route.ts +18 -0
  252. package/src/app/api/remote/route.ts +5 -7
  253. package/src/app/api/sessions/[id]/export/route.ts +3 -1
  254. package/src/app/globals.css +16 -0
  255. package/src/components/AppShell.tsx +68 -21
  256. package/src/components/ChatInput.tsx +98 -27
  257. package/src/components/ChatWindow.tsx +68 -11
  258. package/src/components/ContextMeter.tsx +24 -4
  259. package/src/components/ExtensionUI.tsx +9 -3
  260. package/src/components/FileViewer.tsx +24 -21
  261. package/src/components/GitPanel.tsx +449 -449
  262. package/src/components/GrowthTree.tsx +3 -1
  263. package/src/components/ImageViewer.tsx +72 -0
  264. package/src/components/MarkdownBlock.tsx +6 -3
  265. package/src/components/PreviewImage.tsx +33 -0
  266. package/src/components/ProjectPanel.tsx +5 -3
  267. package/src/components/PromptPanel.tsx +322 -313
  268. package/src/components/RemoteSection.tsx +2 -1
  269. package/src/components/SessionSidebar.tsx +22 -4
  270. package/src/components/SettingsPanel.tsx +2654 -2639
  271. package/src/components/composer/ComposerImages.tsx +1 -79
  272. package/src/hooks/usePiWeb.ts +47 -2
  273. package/src/i18n.tsx +24 -0
  274. package/src/lib/agent-manager.ts +275 -18
  275. package/src/lib/chat/skill-expansion.ts +10 -0
  276. package/src/lib/extension-ui.ts +25 -1
  277. package/src/lib/git-service.ts +291 -289
  278. package/src/lib/github-identity.ts +245 -245
  279. package/src/lib/growth-turns.ts +3 -1
  280. package/src/lib/session-reader.ts +25 -13
  281. package/src/lib/session-retention.ts +11 -8
  282. package/src/lib/slash-command-token.ts +14 -0
  283. package/src/lib/trajectory.ts +17 -6
  284. package/src/lib/types.ts +24 -2
  285. package/src/lib/workspace-store.ts +36 -1
  286. package/.next/diagnostics/build-diagnostics.json +0 -6
  287. package/.next/diagnostics/framework.json +0 -1
  288. package/.next/server/chunks/229.js +0 -1
  289. package/.next/server/chunks/393.js +0 -1
  290. package/.next/server/chunks/612.js +0 -1
  291. package/.next/server/chunks/662.js +0 -2
  292. package/.next/server/chunks/686.js +0 -1
  293. package/.next/server/chunks/802.js +0 -2
  294. package/.next/server/chunks/807.js +0 -1
  295. package/.next/server/chunks/924.js +0 -6
  296. package/.next/static/4snUelZTEIiQYCkB5nTW7/_buildManifest.js +0 -1
  297. package/.next/static/chunks/1966.1560d0f43ac9a41a.js +0 -1
  298. package/.next/static/chunks/2577.eebf2cf291a811ad.js +0 -1
  299. package/.next/static/chunks/2716.a5228b0eeedbe4c8.js +0 -1
  300. package/.next/static/chunks/2906.546a64377e12dfbc.js +0 -1
  301. package/.next/static/chunks/3899.55a0943bf5e7fec7.js +0 -1
  302. package/.next/static/chunks/4673.8eff281cb63e2799.js +0 -1
  303. package/.next/static/chunks/4686-f03275819a719fd8.js +0 -1
  304. package/.next/static/chunks/4778.2dae0c6a9e396326.js +0 -1
  305. package/.next/static/chunks/app/_global-error/page-f977af7f858990a2.js +0 -1
  306. package/.next/static/chunks/app/_not-found/page-851dc3883a1937aa.js +0 -1
  307. package/.next/static/chunks/app/api/agent/[id]/events/route-f977af7f858990a2.js +0 -1
  308. package/.next/static/chunks/app/api/agent/[id]/route-f977af7f858990a2.js +0 -1
  309. package/.next/static/chunks/app/api/agent/[id]/tree/route-f977af7f858990a2.js +0 -1
  310. package/.next/static/chunks/app/api/agent/new/route-f977af7f858990a2.js +0 -1
  311. package/.next/static/chunks/app/api/config/route-f977af7f858990a2.js +0 -1
  312. package/.next/static/chunks/app/api/files/route-f977af7f858990a2.js +0 -1
  313. package/.next/static/chunks/app/api/fs/route-f977af7f858990a2.js +0 -1
  314. package/.next/static/chunks/app/api/git/route-f977af7f858990a2.js +0 -1
  315. package/.next/static/chunks/app/api/github/route-f977af7f858990a2.js +0 -1
  316. package/.next/static/chunks/app/api/growth/route-f977af7f858990a2.js +0 -1
  317. package/.next/static/chunks/app/api/health/route-f977af7f858990a2.js +0 -1
  318. package/.next/static/chunks/app/api/models/defaults/route-f977af7f858990a2.js +0 -1
  319. package/.next/static/chunks/app/api/models/route-f977af7f858990a2.js +0 -1
  320. package/.next/static/chunks/app/api/pi-settings/route-f977af7f858990a2.js +0 -1
  321. package/.next/static/chunks/app/api/plugins/route-f977af7f858990a2.js +0 -1
  322. package/.next/static/chunks/app/api/prompts/route-f977af7f858990a2.js +0 -1
  323. package/.next/static/chunks/app/api/remote/route-f977af7f858990a2.js +0 -1
  324. package/.next/static/chunks/app/api/security/route-f977af7f858990a2.js +0 -1
  325. package/.next/static/chunks/app/api/sessions/[id]/export/route-f977af7f858990a2.js +0 -1
  326. package/.next/static/chunks/app/api/sessions/[id]/route-f977af7f858990a2.js +0 -1
  327. package/.next/static/chunks/app/api/sessions/import/route-f977af7f858990a2.js +0 -1
  328. package/.next/static/chunks/app/api/sessions/route-f977af7f858990a2.js +0 -1
  329. package/.next/static/chunks/app/api/skills/route-f977af7f858990a2.js +0 -1
  330. package/.next/static/chunks/app/api/update/route-f977af7f858990a2.js +0 -1
  331. package/.next/static/chunks/app/api/version/route-f977af7f858990a2.js +0 -1
  332. package/.next/static/chunks/app/api/web-auth/route-f977af7f858990a2.js +0 -1
  333. package/.next/static/chunks/app/api/workspaces/route-f977af7f858990a2.js +0 -1
  334. package/.next/static/chunks/app/page-0159987118376f42.js +0 -1
  335. package/.next/static/chunks/main-22ccebc2da4d291e.js +0 -5
  336. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f977af7f858990a2.js +0 -1
  337. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f977af7f858990a2.js +0 -1
  338. package/.next/static/chunks/next/dist/client/components/builtin/global-error-c37b7707077f50ce.js +0 -1
  339. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f977af7f858990a2.js +0 -1
  340. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f977af7f858990a2.js +0 -1
  341. package/.next/static/chunks/webpack-c1b43c269867b64f.js +0 -1
  342. package/.next/static/css/93ed3daa6f3fbc35.css +0 -1
  343. package/.next/trace +0 -58
  344. package/.next/trace-build +0 -1
  345. /package/.next/static/{4snUelZTEIiQYCkB5nTW7 → QJCtqgDKzGS2BdKABd9ch}/_ssgManifest.js +0 -0
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { useEffect, useRef, useState } from "react";
16
16
  import { createPortal } from "react-dom";
17
+ import { ImageViewer } from "@/components/ImageViewer";
17
18
  import { useI18n } from "@/i18n";
18
19
  import type { ImageAttachment } from "@/lib/types";
19
20
 
@@ -255,82 +256,3 @@ export function ComposerImages({ images, disabled, onRemove, onClear }: { images
255
256
  </>
256
257
  );
257
258
  }
258
-
259
- /** 放大预览:手机上没法用本机程序打开图片,应用内看最实在 */
260
- function ImageViewer({
261
- images,
262
- index,
263
- disabled,
264
- onIndex,
265
- onRemove,
266
- onClose,
267
- }: {
268
- images: ImageAttachment[];
269
- index: number;
270
- disabled?: boolean;
271
- onIndex: (index: number) => void;
272
- onRemove: (index: number) => void;
273
- onClose: () => void;
274
- }) {
275
- const { t } = useI18n();
276
- const dialogRef = useRef<HTMLDivElement>(null);
277
- const closeRef = useRef<HTMLButtonElement>(null);
278
- const count = images.length;
279
- const go = (delta: number) => onIndex((index + delta + count) % count);
280
-
281
- // 打开时把焦点移进来,关掉时还给原来那个元素(还在页面上的话)
282
- useEffect(() => {
283
- const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;
284
- closeRef.current?.focus();
285
- return () => {
286
- if (opener?.isConnected) opener.focus();
287
- };
288
- }, []);
289
-
290
- // 捕获阶段处理:Esc / 方向键不再传给页面上其它监听 document 的面板;Tab 只在预览里转
291
- useEffect(() => {
292
- const onKey = (event: KeyboardEvent) => {
293
- if (event.key === "Escape") onClose();
294
- else if (event.key === "ArrowLeft" && count > 1) go(-1);
295
- else if (event.key === "ArrowRight" && count > 1) go(1);
296
- else if (event.key === "Tab") {
297
- const focusable = [...(dialogRef.current?.querySelectorAll<HTMLElement>("button:not(:disabled)") ?? [])];
298
- if (!focusable.length) return;
299
- const at = focusable.indexOf(document.activeElement as HTMLElement);
300
- const next = event.shiftKey ? (at <= 0 ? focusable.length - 1 : at - 1) : at === focusable.length - 1 ? 0 : at + 1;
301
- focusable[next].focus();
302
- } else return;
303
- event.preventDefault();
304
- event.stopPropagation();
305
- };
306
- document.addEventListener("keydown", onKey, true);
307
- return () => document.removeEventListener("keydown", onKey, true);
308
- // onClose / onIndex 来自父组件的 setState 包装,语义不变;只随张数和当前张重绑
309
- // eslint-disable-next-line react-hooks/exhaustive-deps
310
- }, [count, index]);
311
-
312
- return (
313
- <div ref={dialogRef} className="pw-lightbox" role="dialog" aria-modal="true" aria-label={t.imageViewer} onClick={onClose}>
314
- <div className="pw-lightbox-bar" onClick={(event) => event.stopPropagation()}>
315
- <span className="pw-lightbox-count">{count > 1 ? `${index + 1} / ${count}` : ""}</span>
316
- <button type="button" className="pw-lightbox-btn" disabled={disabled} onClick={() => onRemove(index)}>
317
- {t.delete}
318
- </button>
319
- <button ref={closeRef} type="button" className="pw-lightbox-btn" aria-label={t.close} onClick={onClose}>
320
- ✕
321
- </button>
322
- </div>
323
- <img src={srcOf(images[index])} alt="" className="pw-lightbox-image" onClick={(event) => event.stopPropagation()} />
324
- {count > 1 ? (
325
- <>
326
- <button type="button" className="pw-lightbox-nav" data-side="prev" aria-label={t.imagePrev} onClick={(event) => { event.stopPropagation(); go(-1); }}>
327
- ‹
328
- </button>
329
- <button type="button" className="pw-lightbox-nav" data-side="next" aria-label={t.imageNext} onClick={(event) => { event.stopPropagation(); go(1); }}>
330
- ›
331
- </button>
332
- </>
333
- ) : null}
334
- </div>
335
- );
336
- }
@@ -44,6 +44,17 @@ export interface ExtensionDialog {
44
44
  ts: number;
45
45
  }
46
46
 
47
+ /** 右下角的短通知:扩展 notify,或 PiWeb 自己的提示(带 code,渲染时按语言取文案) */
48
+ export interface PiWebNotice {
49
+ id: string;
50
+ message: string;
51
+ type: "info" | "warning" | "error";
52
+ ts: number;
53
+ /** external_reload:终端写了这个会话,已从磁盘重载;external_write:正在跑时终端也在写 */
54
+ code?: "external_reload" | "external_write";
55
+ count?: number;
56
+ }
57
+
47
58
  export interface PiWebState {
48
59
  snapshot: WebSnapshot | null;
49
60
  messages: WebMessage[];
@@ -57,7 +68,7 @@ export interface PiWebState {
57
68
  /** 扩展对话框队列(按到达顺序,一次显示一个) */
58
69
  extensionDialogs: ExtensionDialog[];
59
70
  /** 扩展通知(notify),显示几秒后消失 */
60
- extensionNotices: { id: string; message: string; type: "info" | "warning" | "error"; ts: number }[];
71
+ extensionNotices: PiWebNotice[];
61
72
  /** 扩展设的页脚状态文本(setStatus) */
62
73
  extensionStatuses: Record<string, string>;
63
74
  /** 扩展覆盖的「工作中」文案(setWorkingMessage) */
@@ -176,6 +187,17 @@ export const foldPiWebEvent = (state: PiWebState, evt: WebEvent): PiWebState =>
176
187
  return s;
177
188
  case "compaction":
178
189
  s.compaction = { phase: evt.phase, errorMessage: evt.errorMessage, ts: evt.ts };
190
+ if (evt.marker) {
191
+ // 已显示的消息全部保留;分隔卡插到保留下来的第一条前面,和刷新后的快照位置一致
192
+ const marker = evt.marker;
193
+ const msgs = s.messages.filter((message) => !(marker.id && message.id === marker.id));
194
+ const at = msgs.findIndex((message) =>
195
+ (!!evt.beforeId && message.id === evt.beforeId) ||
196
+ (!!evt.beforeStreamId && message.streamId === evt.beforeStreamId));
197
+ if (at >= 0) msgs.splice(at, 0, marker);
198
+ else msgs.push(marker);
199
+ s.messages = msgs;
200
+ }
179
201
  return s;
180
202
  case "traj": {
181
203
  if (s.snapshot) {
@@ -236,6 +258,12 @@ export const foldPiWebEvent = (state: PiWebState, evt: WebEvent): PiWebState =>
236
258
  case "extension_ui_resolved":
237
259
  s.extensionDialogs = s.extensionDialogs.filter((dialog) => dialog.id !== evt.id);
238
260
  return s;
261
+ case "external_write":
262
+ s.extensionNotices = [
263
+ ...s.extensionNotices.filter((notice) => notice.code !== "external_write").slice(-4),
264
+ { id: `external-write-${evt.ts}`, message: "", type: "warning", ts: evt.ts, code: "external_write", count: evt.entries },
265
+ ];
266
+ return s;
239
267
  case "status":
240
268
  if (s.snapshot) s.snapshot = { ...s.snapshot, isStreaming: evt.isStreaming };
241
269
  if (!evt.isStreaming) {
@@ -366,6 +394,7 @@ export function usePiWeb() {
366
394
  const [snapshotEpoch, setSnapshotEpoch] = useState(0);
367
395
  const esRef = useRef<{ close(): void } | null>(null);
368
396
  const promptRequestsRef = useRef(new Set<string>());
397
+ const shownReloadsRef = useRef(new Set<string>());
369
398
  const presetRestoreAttemptRef = useRef<string | null>(null);
370
399
  const presetRestorePromiseRef = useRef<Promise<void> | null>(null);
371
400
  const activeSessionRef = useRef(currentId);
@@ -689,6 +718,14 @@ export function usePiWeb() {
689
718
  : { ...emptyState(savedToolPreset()), connected: false });
690
719
  let retryDelayMs = 2000;
691
720
  const eventsUrl = `/api/agent/${currentId}/events`;
721
+ // 同一次重载既有 external_reload 事件、又会出现在随后若干快照里:按重载时间只提示一次
722
+ const reloadNotice = (reload?: { entries: number; at: number }): PiWebNotice | null => {
723
+ if (!reload) return null;
724
+ const key = `${currentId}:${reload.at}`;
725
+ if (shownReloadsRef.current.has(key)) return null;
726
+ shownReloadsRef.current.add(key);
727
+ return { id: `external-reload-${reload.at}`, message: "", type: "info", ts: Date.now(), code: "external_reload", count: reload.entries };
728
+ };
692
729
  const connect = () => {
693
730
  // 流式事件按帧合并:token 速率再高也只每 16ms 渲染一次(见 event-batcher)
694
731
  const batcher = createEventBatcher<WebEvent>({
@@ -707,11 +744,19 @@ export function usePiWeb() {
707
744
  // 单帧损坏(代理截断等)只丢弃该帧,不能让 EventSource 回调抛异常
708
745
  return;
709
746
  }
747
+ if (parsed.type === "external_reload") {
748
+ // 服务端发现终端写过这个会话、已从磁盘重载,旧流随即关闭:不等 EventSource 2 秒后自己重连,马上换新连接拿快照
749
+ const notice = reloadNotice(parsed);
750
+ if (notice) setState((s) => ({ ...s, extensionNotices: [...s.extensionNotices.slice(-4), notice] }));
751
+ setResyncNonce((n) => n + 1);
752
+ return;
753
+ }
710
754
  if (parsed.type === "snapshot" && parsed.snapshot) {
711
755
  // 快照是权威状态:之前缓冲的增量已经过时,直接丢弃
712
756
  batcher.cancel();
713
757
  retryDelayMs = 2000;
714
758
  const snap = parsed.snapshot as WebSnapshot;
759
+ const notice = reloadNotice(snap.externalReload);
715
760
  setSnapshotEpoch((epoch) => epoch + 1);
716
761
  setState((prev) => ({
717
762
  snapshot: snap,
@@ -724,7 +769,7 @@ export function usePiWeb() {
724
769
  retryNotice: null,
725
770
  // 服务器当前 pending 集合是权威来源,刷新可恢复、已答请求不能复活。
726
771
  extensionDialogs: extensionDialogsFromSnapshot(snap, prev.extensionDialogs),
727
- extensionNotices: prev.extensionNotices,
772
+ extensionNotices: notice ? [...prev.extensionNotices.slice(-4), notice] : prev.extensionNotices,
728
773
  extensionStatuses: snap.extensionStatuses ?? {},
729
774
  workingMessage: null,
730
775
  // 重连的快照不带生长账本;连接期间已收到的步保留,useGrowth 会按 seq 与拉取结果去重
package/src/i18n.tsx CHANGED
@@ -34,6 +34,15 @@ const zh = {
34
34
  compacting: "正在压缩上下文…",
35
35
  compactionComplete: "上下文压缩完成",
36
36
  compactionFailed: "上下文压缩失败",
37
+ compactedTitle: "上下文已压缩",
38
+ compactedTitleTokens: "上下文已压缩 · 压缩前约 {tokens} tokens",
39
+ compactedHint: "以上内容模型只看得到摘要",
40
+ branchSummaryTitle: "分支摘要",
41
+ branchSummaryHint: "切换分支时,离开的那条分支以摘要形式发给模型",
42
+ showSummary: "查看摘要",
43
+ hideSummary: "收起摘要",
44
+ externalSessionReloaded: "终端在这个会话里写了 {n} 条新内容,已重新载入",
45
+ externalSessionWriting: "终端也在写这个会话({n} 条)。两边同时写会分叉,这一轮结束后自动重新载入",
37
46
  pickWorkspaceFirst: "请先选择工作区",
38
47
  capacityFields: "容量",
39
48
  contextWindowLabel: "上下文窗口",
@@ -215,6 +224,8 @@ const zh = {
215
224
  archiveSession: "归档会话",
216
225
  unarchiveSession: "取消归档",
217
226
  archivedSessions: "已归档",
227
+ archiveRetentionHint: "归档满 30 天自动删除",
228
+ archiveRetentionDetail: "归档的会话从归档那天起保留 30 天,之后自动删除;归档后又用过的,从最后一次使用起算。打开中的会话不会被删。",
218
229
  deleteAllSessions: "删除全部会话",
219
230
  deleteAllConfirm: "删除此工作区的全部会话?不可恢复。",
220
231
  contextInject: "上下文注入",
@@ -645,6 +656,7 @@ const zh = {
645
656
  uninstall: "卸载",
646
657
  confirmUninstallPackage: "确定卸载“{source}”吗?",
647
658
  update: "更新",
659
+ updateNeedsEnable: "已停用的插件要先启用才能更新",
648
660
  pluginConfig: "插件配置",
649
661
  pluginList: "插件列表",
650
662
  pluginPageDesc: "配置和查看本部署已安装的插件。",
@@ -772,6 +784,15 @@ const en: Dict = {
772
784
  compacting: "Compacting context…",
773
785
  compactionComplete: "Context compaction complete",
774
786
  compactionFailed: "Context compaction failed",
787
+ compactedTitle: "Context compacted",
788
+ compactedTitleTokens: "Context compacted · about {tokens} tokens before",
789
+ compactedHint: "The model only sees a summary of everything above",
790
+ branchSummaryTitle: "Branch summary",
791
+ branchSummaryHint: "The branch you left is sent to the model as a summary",
792
+ showSummary: "Show summary",
793
+ hideSummary: "Hide summary",
794
+ externalSessionReloaded: "The terminal added {n} new entries to this session — reloaded",
795
+ externalSessionWriting: "The terminal is also writing to this session ({n} entries). Writing from both sides forks it; it reloads after this turn",
775
796
  pickWorkspaceFirst: "Select a workspace first",
776
797
  capacityFields: "Capacities",
777
798
  contextWindowLabel: "Context window",
@@ -953,6 +974,8 @@ const en: Dict = {
953
974
  archiveSession: "Archive session",
954
975
  unarchiveSession: "Unarchive",
955
976
  archivedSessions: "Archived",
977
+ archiveRetentionHint: "Deleted 30 days after archiving",
978
+ archiveRetentionDetail: "Archived sessions are kept for 30 days from the day they were archived, then deleted automatically. If you use one after archiving, the 30 days restart from its last use. Open sessions are never deleted.",
956
979
  deleteAllSessions: "Delete all sessions",
957
980
  deleteAllConfirm: "Delete ALL sessions in this workspace? This cannot be undone.",
958
981
  contextInject: "Context",
@@ -1376,6 +1399,7 @@ const en: Dict = {
1376
1399
  uninstall: "Uninstall",
1377
1400
  confirmUninstallPackage: "Uninstall \"{source}\"?",
1378
1401
  update: "Update",
1402
+ updateNeedsEnable: "Enable this plugin before updating it",
1379
1403
  pluginConfig: "Plugin config",
1380
1404
  pluginList: "Plugin list",
1381
1405
  pluginPageDesc: "Configure and view installed plugins for this deployment.",