pi-app 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -3
  3. package/.next/build-manifest.json +4 -4
  4. package/.next/next-server.js.nft.json +1 -1
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/react-loadable-manifest.json +17 -17
  7. package/.next/required-server-files.js +6 -6
  8. package/.next/required-server-files.json +6 -6
  9. package/.next/server/app/_global-error/page.js +3 -3
  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/_global-error.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found/page.js +2 -2
  20. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  31. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  32. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/agent/[id]/export.html/route.js +1 -1
  34. package/.next/server/app/api/agent/[id]/export.html/route.js.nft.json +1 -1
  35. package/.next/server/app/api/agent/[id]/export.html/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/agent/[id]/route.js +1 -1
  37. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  38. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/agent/new/route.js +1 -1
  40. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  41. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  43. package/.next/server/app/api/auth/all-providers/route.js.nft.json +1 -1
  44. package/.next/server/app/api/auth/all-providers/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  46. package/.next/server/app/api/auth/api-key/[provider]/route.js.nft.json +1 -1
  47. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  49. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -1
  50. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  52. package/.next/server/app/api/auth/logout/[provider]/route.js.nft.json +1 -1
  53. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/auth/providers/route.js +1 -1
  55. package/.next/server/app/api/auth/providers/route.js.nft.json +1 -1
  56. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/cwd/validate/route.js +1 -1
  58. package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/default-cwd/route.js +1 -1
  60. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/extensions/route.js +1 -1
  62. package/.next/server/app/api/extensions/route.js.nft.json +1 -1
  63. package/.next/server/app/api/extensions/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/files/[...path]/route.js +1 -1
  65. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -1
  66. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/files/stage/route.js +1 -1
  68. package/.next/server/app/api/files/stage/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/git-branch/route.js +1 -1
  70. package/.next/server/app/api/git-branch/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/health/route.js +1 -1
  72. package/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/history/[id]/route.js +2 -2
  74. package/.next/server/app/api/history/[id]/route.js.nft.json +1 -1
  75. package/.next/server/app/api/history/[id]/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/history/route.js +2 -2
  77. package/.next/server/app/api/history/route.js.nft.json +1 -1
  78. package/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/home/route.js +1 -1
  80. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/models/route.js +1 -1
  82. package/.next/server/app/api/models/route.js.nft.json +1 -1
  83. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/models-config/route.js +1 -1
  85. package/.next/server/app/api/models-config/route.js.nft.json +1 -1
  86. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/models-config/test/route.js +1 -1
  88. package/.next/server/app/api/models-config/test/route.js.nft.json +1 -1
  89. package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/notifications/agent-end/route.js +3 -3
  91. package/.next/server/app/api/notifications/agent-end/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/preferences/route.js +1 -1
  93. package/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/product-sessions/[id]/route.js +1 -1
  95. package/.next/server/app/api/product-sessions/[id]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/product-sessions/[id]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/push/route.js +2 -2
  98. package/.next/server/app/api/push/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/remote/audit/route.js +1 -1
  100. package/.next/server/app/api/remote/audit/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/remote/client/route.js +1 -1
  102. package/.next/server/app/api/remote/client/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/remote/pair/route.js +1 -1
  104. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/remote/route.js +1 -1
  106. package/.next/server/app/api/remote/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/scene-overrides/[sceneId]/route.js +2 -2
  108. package/.next/server/app/api/scene-overrides/[sceneId]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/scene-overrides/export/route.js +4 -4
  110. package/.next/server/app/api/scene-overrides/export/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/scene-overrides/import/route.js +2 -2
  112. package/.next/server/app/api/scene-overrides/import/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/scene-overrides/route.js +1 -1
  114. package/.next/server/app/api/scene-overrides/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/sessions/[id]/context/route.js +2 -2
  116. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
  117. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  119. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  120. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/sessions/[id]/share/route.js +1 -1
  122. package/.next/server/app/api/sessions/[id]/share/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/sessions/new/route.js +1 -1
  124. package/.next/server/app/api/sessions/new/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/sessions/route.js +2 -2
  126. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  127. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/settings/default-model/route.js +1 -1
  129. package/.next/server/app/api/settings/default-model/route.js.nft.json +1 -1
  130. package/.next/server/app/api/settings/default-model/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/share/[token]/route.js +1 -1
  132. package/.next/server/app/api/share/[token]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/share/[token]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/skills/install/route.js +1 -1
  135. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/skills/route.js +2 -2
  137. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  138. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/skills/search/route.js +1 -1
  140. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/usage/route.js +2 -2
  142. package/.next/server/app/api/usage/route.js.nft.json +1 -1
  143. package/.next/server/app/api/usage/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/web-fetch/install-agent-browser/route.js +2 -2
  145. package/.next/server/app/api/web-fetch/install-agent-browser/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/web-fetch/preferences/route.js +1 -1
  147. package/.next/server/app/api/web-fetch/preferences/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/web-fetch/status/route.js +1 -1
  149. package/.next/server/app/api/web-fetch/status/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/favicon.ico/route.js +1 -1
  151. package/.next/server/app/index.html +1 -1
  152. package/.next/server/app/index.rsc +3 -3
  153. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  154. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  155. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  156. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  157. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  158. package/.next/server/app/page.js +5 -5
  159. package/.next/server/app/page.js.nft.json +1 -1
  160. package/.next/server/app/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/share/[token]/page.js +2 -2
  162. package/.next/server/app/share/[token]/page.js.nft.json +1 -1
  163. package/.next/server/app/share/[token]/page_client-reference-manifest.js +1 -1
  164. package/.next/server/app-paths-manifest.json +3 -3
  165. package/.next/server/chunks/1381.js +1 -1
  166. package/.next/server/chunks/1703.js +1 -1
  167. package/.next/server/chunks/319.js +3 -3
  168. package/.next/server/chunks/3284.js +1 -0
  169. package/.next/server/chunks/3379.js +1 -1
  170. package/.next/server/chunks/3493.js +1 -1
  171. package/.next/server/chunks/4035.js +1 -1
  172. package/.next/server/chunks/4367.js +1 -1
  173. package/.next/server/chunks/4406.js +1 -1
  174. package/.next/server/chunks/4980.js +1 -1
  175. package/.next/server/chunks/5293.js +1 -1
  176. package/.next/server/chunks/5797.js +1 -1
  177. package/.next/server/chunks/5851.js +1 -1
  178. package/.next/server/chunks/6206.js +1 -1
  179. package/.next/server/chunks/7270.js +1 -1
  180. package/.next/server/chunks/8916.js +1 -1
  181. package/.next/server/chunks/9280.js +62 -62
  182. package/.next/server/chunks/9315.js +1 -1
  183. package/.next/server/chunks/9537.js +90 -0
  184. package/.next/server/chunks/966.js +1 -1
  185. package/.next/server/middleware-build-manifest.js +1 -1
  186. package/.next/server/middleware-manifest.json +5 -5
  187. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  188. package/.next/server/middleware.js +2 -2
  189. package/.next/server/next-font-manifest.js +1 -1
  190. package/.next/server/next-font-manifest.json +1 -1
  191. package/.next/server/pages/404.html +1 -1
  192. package/.next/server/pages/500.html +1 -1
  193. package/.next/server/server-reference-manifest.json +1 -1
  194. package/.next/static/chunks/{0b9a0da7.915b07ceecd18755.js → 0b9a0da7.9075af772487e743.js} +2 -2
  195. package/.next/static/chunks/{1852.4afb7f7ef17737c1.js → 1852.5543122f11aa7fed.js} +1 -1
  196. package/.next/static/chunks/{2419.fb50b8bb1874d556.js → 2419.347fdfe3c170854d.js} +1 -1
  197. package/.next/static/chunks/{3079.90c6008a4bba4ee1.js → 3079.4c511fa1144e3adf.js} +1 -1
  198. package/.next/static/chunks/{3308.115707ee3fd446be.js → 3308.1964a3fa76cba02f.js} +16 -16
  199. package/.next/static/chunks/{3325.01cdecedf0fb6d62.js → 3325.e4bfe1ca657f3b5b.js} +1 -1
  200. package/.next/static/chunks/3506.2a7eaa08b9f55337.js +90 -0
  201. package/.next/static/chunks/{394.2860c5a408dc8801.js → 394.91597771688df6d0.js} +1 -1
  202. package/.next/static/chunks/{3997.42e942ad02cc6f4b.js → 3997.1009c06025691712.js} +1 -1
  203. package/.next/static/chunks/{5034.cbaaf32db6d2086d.js → 5034.8f16c3fa3ce75411.js} +1 -1
  204. package/.next/static/chunks/{5074.fc63ed48a3b1a61f.js → 5074.d16651da01ec4e02.js} +1 -1
  205. package/.next/static/chunks/{6696.c05e02f280b8186b.js → 6696.a41aec266e657d54.js} +2 -2
  206. package/.next/static/chunks/{7343.9574ac32b87d5050.js → 7343.9fbb58204d8ac681.js} +1 -1
  207. package/.next/static/chunks/{7547.8caf31f3b18ded65.js → 7547.58bda8a2aabba0d4.js} +1 -1
  208. package/.next/static/chunks/{8489.fd81b5e4de9f8431.js → 8489.45f22859734f514f.js} +1 -1
  209. package/.next/static/chunks/9b0008ae.46f64400562a173e.js +2 -0
  210. package/.next/static/chunks/app/_not-found/page-433674846cbe1a12.js +1 -0
  211. package/.next/static/chunks/app/{layout-e74bc51db18cfddb.js → layout-dee60f48aba33b70.js} +1 -1
  212. package/.next/static/chunks/app/{page-16d9d8fcb33b2a19.js → page-9ea7c5df0546e3fb.js} +2 -2
  213. package/.next/static/chunks/app/share/[token]/{page-801df8f03e50e9cc.js → page-d022d0fda2951611.js} +1 -1
  214. package/.next/static/chunks/{main-app-4543b2d36de0bf44.js → main-app-a8eaf0472b160e89.js} +1 -1
  215. package/.next/static/chunks/next/dist/client/components/builtin/global-error-e9772fcbe090eed4.js +1 -0
  216. package/.next/static/chunks/webpack-3c29a7a6de61bd6b.js +1 -0
  217. package/.next/trace +82 -6
  218. package/.next/trace-build +1 -1
  219. package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
  220. package/.next/types/app/api/agent/[id]/export.html/route.ts +1 -1
  221. package/.next/types/app/api/agent/[id]/route.ts +1 -1
  222. package/.next/types/app/api/agent/new/route.ts +1 -1
  223. package/.next/types/app/api/auth/all-providers/route.ts +1 -1
  224. package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
  225. package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
  226. package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
  227. package/.next/types/app/api/auth/providers/route.ts +1 -1
  228. package/.next/types/app/api/cwd/validate/route.ts +1 -1
  229. package/.next/types/app/api/default-cwd/route.ts +1 -1
  230. package/.next/types/app/api/extensions/route.ts +1 -1
  231. package/.next/types/app/api/files/[...path]/route.ts +1 -1
  232. package/.next/types/app/api/files/stage/route.ts +1 -1
  233. package/.next/types/app/api/git-branch/route.ts +1 -1
  234. package/.next/types/app/api/health/route.ts +1 -1
  235. package/.next/types/app/api/history/[id]/route.ts +1 -1
  236. package/.next/types/app/api/history/route.ts +1 -1
  237. package/.next/types/app/api/home/route.ts +1 -1
  238. package/.next/types/app/api/models/route.ts +1 -1
  239. package/.next/types/app/api/models-config/route.ts +1 -1
  240. package/.next/types/app/api/models-config/test/route.ts +1 -1
  241. package/.next/types/app/api/notifications/agent-end/route.ts +1 -1
  242. package/.next/types/app/api/preferences/route.ts +1 -1
  243. package/.next/types/app/api/product-sessions/[id]/route.ts +1 -1
  244. package/.next/types/app/api/push/route.ts +1 -1
  245. package/.next/types/app/api/remote/audit/route.ts +1 -1
  246. package/.next/types/app/api/remote/client/route.ts +1 -1
  247. package/.next/types/app/api/remote/pair/route.ts +1 -1
  248. package/.next/types/app/api/remote/route.ts +1 -1
  249. package/.next/types/app/api/scene-overrides/[sceneId]/route.ts +1 -1
  250. package/.next/types/app/api/scene-overrides/export/route.ts +1 -1
  251. package/.next/types/app/api/scene-overrides/import/route.ts +1 -1
  252. package/.next/types/app/api/scene-overrides/route.ts +1 -1
  253. package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
  254. package/.next/types/app/api/sessions/[id]/route.ts +1 -1
  255. package/.next/types/app/api/sessions/[id]/share/route.ts +1 -1
  256. package/.next/types/app/api/sessions/new/route.ts +1 -1
  257. package/.next/types/app/api/sessions/route.ts +1 -1
  258. package/.next/types/app/api/settings/default-model/route.ts +1 -1
  259. package/.next/types/app/api/share/[token]/route.ts +1 -1
  260. package/.next/types/app/api/skills/install/route.ts +1 -1
  261. package/.next/types/app/api/skills/route.ts +1 -1
  262. package/.next/types/app/api/skills/search/route.ts +1 -1
  263. package/.next/types/app/api/usage/route.ts +1 -1
  264. package/.next/types/app/api/web-fetch/install-agent-browser/route.ts +1 -1
  265. package/.next/types/app/api/web-fetch/preferences/route.ts +1 -1
  266. package/.next/types/app/api/web-fetch/status/route.ts +1 -1
  267. package/.next/types/app/page.ts +1 -1
  268. package/.next/types/app/share/[token]/page.ts +1 -1
  269. package/package.json +1 -1
  270. package/.next/server/chunks/4325.js +0 -90
  271. package/.next/server/chunks/4880.js +0 -1
  272. package/.next/static/chunks/5035.3755dbc45ec0eb8d.js +0 -90
  273. package/.next/static/chunks/9b0008ae.3afefd8b13735168.js +0 -2
  274. package/.next/static/chunks/app/_not-found/page-647d65d4d44f4663.js +0 -1
  275. package/.next/static/chunks/next/dist/client/components/builtin/global-error-7fe17cf3265b4136.js +0 -1
  276. package/.next/static/chunks/webpack-bef1f311e5b374f6.js +0 -1
  277. /package/.next/static/{g5lgqsoouzYM8ahLSJb8- → qDeNXpEzVER9ldna4emiI}/_buildManifest.js +0 -0
  278. /package/.next/static/{g5lgqsoouzYM8ahLSJb8- → qDeNXpEzVER9ldna4emiI}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ exports.id=3284,exports.ids=[3284],exports.modules={19630:(a,b,c)=>{Promise.resolve().then(c.bind(c,83712))},26016:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23)),Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},32056:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,metadata:()=>h});var d=c(5735),e=c(59452),f=c.n(e),g=c(69298);c(82704);let h={title:"Pi Agent Web",description:"Pi Coding Agent Web Interface",manifest:"/manifest.webmanifest",appleWebApp:{capable:!0,title:"Pi Web"}};function i({children:a}){return(0,d.jsxs)("html",{lang:"en",className:f().variable,suppressHydrationWarning:!0,children:[(0,d.jsx)("head",{children:(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:'(function(){try{var t=localStorage.getItem("pi-theme");if(t==="dark")document.documentElement.classList.add("dark");var l=localStorage.getItem("pi-web.locale");if(l!=="en"&&l!=="zh-CN"){var n=(navigator.languages&&navigator.languages[0])||navigator.language||"en";l=/^zh/i.test(n)?"zh-CN":"en";}document.documentElement.lang=l;}catch(e){}})();'}})}),(0,d.jsx)("body",{style:{height:"100dvh",display:"flex",flexDirection:"column"},children:(0,d.jsx)(g.AppProviders,{children:a})})]})}},46055:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(88868);let e=async a=>[{type:"image/x-icon",sizes:"512x512",url:(0,d.fillMetadataSegment)(".",await a.params,"favicon.ico",!0)+"?8aa486c701a3d218"}]},49894:(a,b,c)=>{Promise.resolve().then(c.bind(c,69298))},62464:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23)),Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},65863:(a,b,c)=>{"use strict";c.d(b,{Y:()=>j,s:()=>k});var d=c(48249),e=c(67484);let f={en:{metadata:{title:"Pi Agent Web",description:"Pi Coding Agent Web Interface"},common:{back:"Back",cancel:"Cancel",close:"Close",copy:"Copy",copied:"Copied",delete:"Delete",failed:"Failed",loading:"Loading...",open:"Open",remove:"Remove",retry:"Retry",save:"Save",saving:"Saving...",serverUnavailable:"Cannot reach pi-web. Make sure the server is running.",settings:"Settings",unknown:"unknown"},appShell:{sessionTitleFallback:"Chat",cloneSession:"Copy as new chat",cloningSession:"Copying...",cloneSessionTitle:"Copy the current branch into a new session file",createDefaultWorkspaceError:"Unable to create default workspace",hideSidebar:"Hide sidebar",showSidebar:"Show sidebar",switchToLightMode:"Switch to light mode",switchToDarkMode:"Switch to dark mode",home:"Home",history:"History",settings:"Settings",system:"System",tooltipIn:"in: {value}",tooltipOut:"out: {value}",tooltipCacheRead:"cache read: {value}",tooltipCacheWrite:"cache write: {value}",tooltipCost:"cost: ${value}",tooltipContext:"context: {used} / {total} tokens",sessionReport:"Usage report",sessionReportEmpty:"No usage data yet.",reportCacheRead:"Cache read",reportCacheWrite:"Cache write",systemPromptEmpty:"System prompt is empty (tools are disabled)",systemPromptLoadHint:"Send a message to load the system prompt",noFileOpen:"No file open",hideFilePanel:"Hide file panel",showFilePanel:"Show file panel",restoringSession:"Opening conversation…",sessionNotFound:"That conversation link is invalid or no longer available."},sessionSidebar:{justNow:"just now",minutesAgo:"{count}m ago",hoursAgo:"{count}h ago",daysAgo:"{count}d ago",title:"Pi Agent Web",newSessionIn:"New session in {cwd}",selectProjectFirst:"Select a project first",newSession:"New",refresh:"Refresh",selectProject:"Select project...",useDefaultDirectory:"Use default directory",customPath:"Custom path...",customPathPlaceholder:"/path/to/project",open:"Open",cancel:"Cancel",loading:"Loading...",serverUnavailable:"Cannot reach pi-web. Make sure the server is running.",noSessionsFound:"No sessions found",explorer:"Explorer",refreshExplorer:"Refresh explorer",deleteSessionPrompt:'Delete "{name}"?',messagesCount:"{count} msgs",expandForks:"Expand forks",collapseForks:"Collapse forks",rename:"Rename",delete:"Delete"},chatWindow:{runningTool:"Running tool...",runningNamedTool:"Running {name}...",waitingForModel:"Waiting for model...",thinking:"Thinking...",latest:"Latest: {summary}",suggested:"Suggested",copied:"Copied",exported:"Exported",loadingSession:"Loading session...",estimatedTokens:"Estimated tokens (streaming)",tokensPerSecond:"{value} t/s"},chatInput:{thinkingLevelDefault:"Use pi default",thinkingLevelOff:"Thinking off",thinkingLevelMinimal:"Minimal thinking",thinkingLevelLow:"Low thinking",thinkingLevelMedium:"Medium thinking",thinkingLevelHigh:"High thinking",thinkingLevelMax:"Max thinking",placeholderSteer:"Steer injects immediately / Follow-up queues after the current run...",placeholderRunning:"Agent is running...",placeholderDefault:"Message...",retrying:"Retrying ({attempt}/{maxAttempts})...",retryingWithError:"Retrying ({attempt}/{maxAttempts})... — {error}",steerTitle:"Interrupt the current run and inject the message immediately",steer:"Steer",followUpTitle:"Queue the message after the current run finishes",followUp:"Follow-up",send:"Send",attachImage:"Attach image",attachFile:"Attach file (any location)",attachFileStaging:"Staging files...",attachFileFailed:"Failed to attach files",imagesNotSupported:"Current model does not support images",toggleThinking:"Toggle thinking level",toggleToolPreset:"Toggle tool preset",defaultPreset:"default",toolPresetNone:"No tools, chat only",toolPresetDefault:"4 built-in tools",toolPresetFull:"All built-in tools",stopCompacting:"Stop compacting",compactContext:"Compact context",compacting:"Compacting...",compact:"Compact",stopAgentTitle:"Stop agent",stop:"Stop",soundOn:"Enable completion sound",soundOff:"Disable completion sound",slashCommands:"Slash commands",exportHtml:"Export HTML",exportHtmlTitle:"Download conversation as HTML",exportHtmlStreaming:"Wait for the reply to finish before exporting.",exportHtmlFailed:"Could not export conversation."},shareConversation:{title:"Share conversation",subtitle:"Anyone with this link can read the conversation (while pi-web is running).",button:"Share",generating:"Generating link…",copyLink:"Copy link",copied:"Copied",hint:"Share the URL in chat or email. The reader needs network access to this pi-web instance.",createFailed:"Could not create share link.",copyFailed:"Could not copy link.",loadFailed:"This share link is invalid or expired.",readOnly:"Read-only"},extensionsSettings:{title:"Installed extensions",description:"Read-only list of pi extensions loaded for your workspace. Edit files on disk, then restart pi-web.",empty:"No extensions found for this workspace.",enabled:"enabled",disabled:"disabled",commands:"Commands",restartHint:"After changing extensions, restart pi-web. See",docsLink:"pi extensions docs"},webFetchSettings:{title:"Web Fetch",description:"Tool that lets the LLM fetch URLs as structured JSON-LD or clean Markdown. Tier 0 (JSON-LD) and Tier 1 (Readability) are always available; Tier 2 (browser) requires agent-browser or Pi.app on macOS.",installed:"Installed",notInstalled:"Not installed",install:"Install",installing:"Installing…",installHint:"Downloads agent-browser + Chrome (~200 MB, one-time)",available:"Available",notInPiApp:"Available in Pi.app on macOS",webkitHint:"Faster than agent-browser; reuses Pi.app's WebView.",t2Backend:"Tier 2 backend",t2Auto:"Auto — prefer WebKit on macOS Pi.app, fall back to agent-browser",t2Webkit:"WebKit — macOS Pi.app only (fastest)",t2Agent:"agent-browser — cross-platform",cacheTtl:"Cache TTL",toolHint:"The LLM calls the web_fetch tool automatically when given a URL. No need to invoke manually."},scenePack:{title:"Scene pack",description:"Export or import scene override JSON for another machine or teammate.",export:"Export pack",exporting:"Exporting…",import:"Import pack",importing:"Reading…",previewTitle:"Import preview",confirmImport:"Apply import",exportSuccess:"Scene pack downloaded.",importApplied:"Applied {count} scene override(s).",action:{create:"add",update:"update",unchanged:"unchanged"}},messageView:{copyMessage:"Copy message",editFromHereTitle:"Edit from here — branches within this session",editFromHere:"Edit from here",forkFromHereTitle:"Fork from here — opens a new session file from this point",creatingSession:"Creating...",forkFromHere:"Fork from here",compactionSummaryLabel:"Compacted",branchSummaryLabel:"Branch summary",summaryExpand:"Show full summary",summaryCollapse:"Show less",estimatedTokens:"Estimated tokens (streaming)",thinking:"Thinking",noOutput:"(no output)",usageIn:"{count} in",usageOut:"{count} out",usageCache:"{count} cache",codeCopy:"copy",codeCopied:"copied"},branchNavigator:{assistantFallback:"[assistant]",noActiveSession:"No active session",noBranches:"This session has no branches",mainBranch:"main",branches:"Branches",summarizeBeforeSwitch:"Summarize before switching",summarizeBeforeSwitchHint:"Summarize the branch you leave before opening another",switching:"Switching branch…",errorNoModel:"Choose a model before summarizing a branch",errorCancelled:"Branch switch cancelled",errorGeneric:"Could not switch branch"},toolPanel:{presetOff:"Off",presetOffDescription:"No tools",presetLow:"Low",presetLowDescription:"read \xb7 bash \xb7 edit \xb7 write",presetHigh:"High",presetHighDescription:"read \xb7 bash \xb7 edit \xb7 write \xb7 grep \xb7 find \xb7 ls",noToolsEnabled:"No tools enabled",noToolsDetail:"agent will not use any tools",appliesNextTurn:"takes effect on next turn"},workbenchHome:{enterpriseWorkbench:"Enterprise Workbench",title:"Pi Workbench",description:"Start a conversation in your workspace, or continue from recent chats below.",newChat:"New conversation",startingChat:"Starting...",myWork:"My Work",recentWorkDescription:"Recent conversations",recentWorkError:"Couldn't load recent work: {error}",noRecentWork:"No recent work yet.",viewAllHistory:"View all",showLessHistory:"Show less",startChatError:"Couldn't start a conversation: {error}"},workbenchHistory:{workbench:"Workbench",myWork:"My Work",loadingHistory:"Loading history...",noWorkFound:"No work found.",showDetails:"Show details",details:"Details"},workbenchHistoryDetail:{active:"Active",completed:"Completed",draft:"Draft",historyDetails:"History details",messagesCountOne:"{count} message",messagesCountOther:"{count} messages",closeDetails:"Close details",latestResultSummary:"Latest result summary",noSummary:"No summary recorded for this session yet.",firstMessage:"First message",started:"Started",lastUpdated:"Last updated",workingDirectory:"Working directory",sessionFile:"Session file",close:"Close",openChat:"Open chat"},workbenchSettings:{about:"About",aboutDescription:"Versions bundled with this pi-web install.",piWebVersion:"pi-web",piCodingAgentVersion:"pi-coding-agent",platform:"Platform",settings:"Settings",language:"Language",languageDescription:"Choose the display language for the product UI.",english:"English",simplifiedChinese:"简体中文",models:"Models",modelsDescription:"Connect services, default model, providers, and models.json.",skills:"Skills",skillsDescription:"Runtime tools and installed capabilities for the selected workspace."},remoteAccess:{sectionLabel:"Remote",title:"Remote access",description:"Let another phone or computer view conversations on this Mac. Off by default.",wizardPurposeTitle:"What remote access does",wizardPurposeBody:"Pair a phone or tablet to read (or optionally send) messages while this Mac runs pi-web. Use only on networks you trust.",wizardRiskTitle:"Before you turn it on",wizardRiskBody:"Anyone with the pairing link can connect until you revoke them. Prefer read-only for phones. Do not expose pi-web to the public internet without a tunnel you control.",wizardNext:"Continue",wizardEnable:"Turn on and pair",viewOnPhone:"View on phone",adminPasswordTitle:"Admin password (shown once)",adminPasswordHint:"Copy this password now. It is shown once. Rotating it disconnects all paired devices.",rotateAdminPassword:"Rotate admin password",developerSection:"Developer options",loading:"Loading remote settings...",enabled:"Remote access enabled",disabled:"Remote access disabled",enable:"Set up remote access",enabling:"Enabling...",disable:"Disable",disabling:"Disabling...",allowedHostnames:"Allowed hostnames",allowedHostnamesHint:"Optional Host header allowlist (one per line). Leave empty to allow any hostname once authenticated.",allowedHostnamesPlaceholder:"100.x.y.z\nmybox.tailnet.ts.net",readOnly:"View only — cannot send messages from paired devices",saveSettings:"Save settings",generatePairing:"Generate pairing link",generatingPairing:"Generating...",rotateToken:"Rotate admin password",rotatingToken:"Rotating...",masterTokenTitle:"Admin password (shown once)",masterTokenHint:"Copy this password now. It is shown once. Rotating it disconnects all paired devices.",pairedDevices:"Paired devices",revoke:"Revoke",pairingTitle:"Pair a device",pairingRowHint:"Scan a QR code or copy a link to connect your phone to this host",pairingModalHint:"Scan this QR code with pi-web on your phone, or copy the link below.",pairingHint:"Scan the QR code or open the pairing link on your phone while it is valid.",qrAlt:"Pairing QR code",copyPairingLink:"Copy pairing link",pairingExpires:"Expires at {time}",noPairingGenerated:"Generate a pairing link to connect another device.",pairingInProgress:"Pairing device...",pairingSuccess:"Device paired successfully.",authRequired:"Remote authentication required. Pair this device from Settings on the host machine.",readOnlyBanner:"Remote access is read-only on this device. Viewing and streaming are allowed; writes are blocked.",tunnelTitle:"Public tunnel (no open port)",tunnelDescription:"Expose pi-web over HTTPS without port forwarding. Keep remote auth enabled and pair devices before sharing URLs.",tunnelTailscale:"Tailscale Funnel",tunnelCloudflared:"Cloudflare quick tunnel",pushTitle:"Push notifications",pushDescription:"Get notified when an agent finishes while this browser tab is in the background.",pushEnable:"Enable notifications",pushEnabling:"Enabling...",pushDisable:"Disable notifications",pushUnsupported:"Push notifications are not supported in this browser.",pushServerCount:"{count} server subscription(s)",revokeAll:"Revoke all devices",deviceLabel:"Label",deviceLabelPlaceholder:"Phone, iPad, ...",saveLabel:"Save",auditTitle:"Audit log",auditDescription:"Recent remote authentication and management events (local view only).",auditEmpty:"No audit events yet.",auditLoadError:"Failed to load audit log",advancedTitle:"Advanced",relayE2eeTitle:"E2EE relay (Phase 3)",relayE2eeDescription:"End-to-end encrypted tunnel via a dumb HTTP relay. The relay cannot read traffic; pair pi-web separately after connecting.",relayGenerateOffer:"Generate E2EE offer",relayGeneratingOffer:"Generating...",relayOfferTitle:"Connection offer",relayOfferHint:"Open this URL on the remote machine, then run the client proxy command below.",relayServerCmd:"1. Start relay (any machine)",relayHostCmd:"2. Host bridge (this machine)",relayClientCmd:"3. Client proxy (remote machine)"},fileViewer:{noChanges:"No changes",unchangedLines:"... {count} unchanged lines ...",image:"image",audio:"audio",liveSyncActive:"Live sync active",notWatching:"Not watching",live:"live",static:"static",failedToLoadImage:"Failed to load image",failedToLoadAudio:"Failed to load audio",failedToLoadPdf:"Failed to load PDF",pdf:"PDF",officeBinaryHint:"This file type cannot be previewed in the browser. Open it in your default app.",systemOpenedExternally:"Opened in your default app. Use the button above or below to open again.",officeExcelHint:"Spreadsheets are not previewed in-app yet. Open in Excel or Numbers, or ask the agent to summarize the file.",officeWordHint:"Word documents are not previewed in-app yet. Use Open in default app above, or ask the agent to read the file.",officePptHint:"Presentations are not previewed in-app yet. Open in Keynote or PowerPoint, or ask the agent to summarize the slides.",openExternally:"Open in default app",loading:"Loading...",source:"Source",diff:"Diff",disableWordWrap:"Disable word wrap",enableWordWrap:"Enable word wrap",wrap:"wrap",code:"Code",preview:"Preview",raw:"Raw",htmlPreview:"HTML preview",copyAsImage:"Copy image",saveAsImage:"Save image",copyPreviewImage:"Copy preview as image",savePreviewImage:"Save preview as image",exportingImage:"Exporting...",copiedImage:"Copied",savedImage:"Saved",savedInstead:"Saved instead",imageExportFailed:"Image export failed"},fileExplorer:{insertPathIntoChat:"Insert path into chat",mention:"mention",empty:"empty",loadingFiles:"Loading files...",noFilesFound:"No files found"},modelsConfig:{hideApiKey:"Hide API key",showApiKey:"Show API key",inheritNone:"— inherit / none —",provider:"Provider",delete:"Delete",providerName:"Provider name",baseUrl:"Base URL",apiKey:"API Key",api:"API",apiKeyPlaceholder:"ENV_VAR_NAME, !shell-command, or literal key",apiKeyHint:"Prefix with ! to run a shell command, or use an env var name",default:"Default",disabled:"Disabled",custom:"Custom",testingModelConnection:"Testing model connection...",connected:"Connected",failed:"Failed",model:"Model",testModelConnection:"Test model connection",testing:"Testing...",ok:"OK",test:"Test",chatTestNotSupported:"Connection test uses chat completions and is not available for image/video generation models.",chatTestNotSupportedShort:"Chat test not supported",modelIdCaseHint:"Model IDs are usually lowercase. If testing fails, try: {suggestedId}",reasoningNotSupportedHint:"This model does not support reasoning. Reasoning was turned off — save and test again.",remove:"Remove",idRequired:"ID *",name:"Name",apiOverride:"API override",reasoningThinking:"Reasoning / thinking",imageInput:"Image input",deepSeekThinkingCompat:"DeepSeek thinking compat",thinkingLevelMap:"Thinking level map",clearAll:"clear all",contextWindowTokens:"Context window (tokens)",maxOutputTokens:"Max output tokens",costPerMillionTokens:"Cost (per million tokens)",input:"input",output:"output",cacheRead:"cacheRead",cacheWrite:"cacheWrite",connectionLost:"Connection lost",verifying:"Verifying...",networkError:"Network error",serverError:"Server error {status}",continuing:"Continuing...",subscription:"Subscription",connectedState:"connected",notConnectedState:"not connected",connectAccount:"Connect your {provider} account.",alreadyConnected:"Already connected. You can re-login or disconnect.",openingBrowser:"Opening browser...",browserCompleteHint:"Complete sign-in in the browser, then copy the redirect URL from the address bar and paste it below.",openLoginPageHint:"If the browser window did not open, click here to open the login page",callbackPlaceholder:"http://localhost:1455/auth/callback?code=...",enterValuePlaceholder:"Enter value...",submit:"Submit",verificationPageHint:"Open the verification page and enter this code:",expiresInMinutes:"Expires in {count} minutes.",connectedSuccessfully:"Connected successfully.",reLogin:"Re-login",login:"Login",disconnect:"Disconnect",configured:"configured",apiKeyStored:"API key is stored. Enter a new key below to replace it, or disconnect to remove it.",enterApiKey:"Enter your {provider} API key to enable {count} models.",enterNewKeyPlaceholder:"Enter new key to replace...",apiKeyMaskedPlaceholder:"sk-...",saved:"Saved",saving:"Saving...",removing:"Removing...",searchProviders:"Search providers...",noProvidersMatch:"No providers match",customGroup:"Custom",openAiCompatible:"OpenAI / Anthropic compatible",customEndpointFormat:"Custom endpoint format",subscriptions:"Subscriptions",oauth:"OAuth",apiKeyShort:"API Key",modelsCount:"{count} models",models:"Models",modelsPath:"~/.pi/agent/models.json",defaultModel:"Default model",defaultModelDescription:"Used when you start a new conversation. Change the model anytime from the chat input bar.",perSessionModelHint:"Each conversation can use a different model via the selector below the message box.",selectDefaultModel:"Select a model",manageAllConnections:"Manage all models and connections…",newModel:"new model",addModel:"+ model",addProvider:"+ Add provider",selectProviderOrModel:"Select a provider or model"},skillsConfig:{sourceGlobal:"global",sourceProject:"project",sourcePath:"path",visibleInPrompt:"Visible in model prompt — click to disable",hiddenFromPrompt:"Hidden from model prompt — click to enable",name:"Name",description:"Description",noSkillsFound:"No skills found",addSkill:"Add Skill",searchPlaceholder:"e.g. react, testing, deploy",searching:"Searching...",search:"Search",installed:"Installed",installing:"Installing...",install:"Install",discoverAndInstall:"to discover and install skills for your agent.",skills:"Skills",loading:"Loading...",project:"project",global:"global",path:"path",close:"Close",selectSkill:"Select a skill"},tabBar:{close:"Close"},accounts:{platform:"Pi",title:"AI services",description:"Connect the AI services you use. Credentials stay on this Mac and sync with the Pi CLI.",connectedServices:"Connected",noConnectedServices:"No services connected yet.",addService:"Add a service",connected:"Connected",notConnected:"Not connected",connect:"Connect",connecting:"Connecting…",disconnect:"Disconnect",defaultModel:"Default model",defaultModelDescription:"Used when you start a new conversation. Change the model anytime from the chat input bar.",perSessionModelHint:"Each conversation can use a different model via the selector below the message box.",selectDefaultModel:"Select a model",configureModels:"Configure models",oauthTimeout:"Login timed out",oauthFailed:"Login failed",needAccountTitle:"Configure models first",needAccountDescription:"Connect at least one service and configure an available model before sending messages."},settings:{exporting:"Exporting…",sessionUsageTitle:"Conversation usage",sessionUsageDescription:"Token usage and estimated cost for the session below (not all conversations).",sessionUsageSubject:"Session",sessionUsageOpen:"Open this conversation",sessionUsageId:"ID {id}",inputTokens:"Input tokens",outputTokens:"Output tokens",estimatedCost:"Estimated cost",activityTitle:"Recent activity",activityDescription:"Sessions started and completed over the last 7 days (UTC).",activityStarted:"Started",activityCompleted:"Completed",activityActive:"Active",activityLoading:"Loading activity…",activityEmpty:"No sessions in this period."},tools:{capability:{readFiles:"Can read files",editFiles:"Can edit files",searchFiles:"Can search files"},simpleMode:"Simple",standardMode:"Standard",advancedMode:"Advanced"}},"zh-CN":{metadata:{title:"Pi Agent Web",description:"Pi 编码助手 Web 界面"},common:{back:"返回",cancel:"取消",close:"关闭",copy:"复制",copied:"已复制",delete:"删除",failed:"失败",loading:"加载中...",open:"打开",remove:"移除",retry:"重试",save:"保存",saving:"保存中...",serverUnavailable:"无法连接 pi-web,请确认服务已启动。",settings:"设置",unknown:"未知"},appShell:{sessionTitleFallback:"对话",cloneSession:"复制为新对话",cloningSession:"复制中...",cloneSessionTitle:"把当前分支复制到新的会话文件",createDefaultWorkspaceError:"无法创建默认工作目录",hideSidebar:"隐藏侧边栏",showSidebar:"显示侧边栏",switchToLightMode:"切换到浅色模式",switchToDarkMode:"切换到深色模式",home:"首页",history:"历史",settings:"设置",system:"系统",tooltipIn:"输入: {value}",tooltipOut:"输出: {value}",tooltipCacheRead:"缓存读取: {value}",tooltipCacheWrite:"缓存写入: {value}",tooltipCost:"成本: ${value}",tooltipContext:"上下文: {used} / {total} tokens",sessionReport:"用量报告",sessionReportEmpty:"暂无用量数据。",reportCacheRead:"缓存读取",reportCacheWrite:"缓存写入",systemPromptEmpty:"System prompt 为空(工具已禁用)",systemPromptLoadHint:"发送一条消息以加载 system prompt",noFileOpen:"未打开文件",hideFilePanel:"隐藏文件面板",showFilePanel:"显示文件面板",restoringSession:"正在打开对话…",sessionNotFound:"该对话链接无效或已不存在。"},sessionSidebar:{justNow:"刚刚",minutesAgo:"{count} 分钟前",hoursAgo:"{count} 小时前",daysAgo:"{count} 天前",title:"Pi Agent Web",newSessionIn:"在 {cwd} 中新建会话",selectProjectFirst:"请先选择项目",newSession:"新建",refresh:"刷新",selectProject:"选择项目...",useDefaultDirectory:"使用默认目录",customPath:"自定义路径...",customPathPlaceholder:"/path/to/project",open:"打开",cancel:"取消",loading:"加载中...",serverUnavailable:"无法连接 pi-web,请确认服务已启动。",noSessionsFound:"未找到会话",explorer:"资源管理器",refreshExplorer:"刷新资源管理器",deleteSessionPrompt:"删除“{name}”?",messagesCount:"{count} 条消息",expandForks:"展开分支",collapseForks:"收起分支",rename:"重命名",delete:"删除"},chatWindow:{runningTool:"正在运行工具...",runningNamedTool:"正在运行 {name}...",waitingForModel:"等待模型响应...",thinking:"思考中...",latest:"最新结果:{summary}",suggested:"建议操作",copied:"已复制",exported:"已导出",loadingSession:"会话加载中...",estimatedTokens:"预估 token 数(流式中)",tokensPerSecond:"{value} t/s"},chatInput:{thinkingLevelDefault:"沿用 pi 默认设置",thinkingLevelOff:"关闭推理",thinkingLevelMinimal:"最少推理",thinkingLevelLow:"低强度推理",thinkingLevelMedium:"中等推理",thinkingLevelHigh:"高强度推理",thinkingLevelMax:"最高强度推理",placeholderSteer:"Steer 立即注入 / Follow-up 在当前运行后排队发送...",placeholderRunning:"Agent 正在运行...",placeholderDefault:"发送消息...",retrying:"重试中 ({attempt}/{maxAttempts})...",retryingWithError:"重试中 ({attempt}/{maxAttempts})... — {error}",steerTitle:"打断当前运行并立即注入消息",steer:"Steer",followUpTitle:"在当前运行结束后排队发送消息",followUp:"Follow-up",send:"发送",attachImage:"附加图片",attachFile:"附加文件(任意位置)",attachFileStaging:"正在准备文件...",attachFileFailed:"附加文件失败",imagesNotSupported:"当前模型不支持图片",toggleThinking:"切换推理强度",toggleToolPreset:"切换工具预设",defaultPreset:"默认",toolPresetNone:"无工具,仅聊天",toolPresetDefault:"4 个内置工具",toolPresetFull:"全部内置工具",stopCompacting:"停止压缩",compactContext:"压缩上下文",compacting:"压缩中...",compact:"压缩",stopAgentTitle:"停止 Agent",stop:"停止",soundOn:"开启完成提示音",soundOff:"关闭完成提示音",slashCommands:"斜杠命令",exportHtml:"导出 HTML",exportHtmlTitle:"将对话下载为 HTML",exportHtmlStreaming:"请等待回复结束后再导出。",exportHtmlFailed:"无法导出对话。"},shareConversation:{title:"分享对话",subtitle:"持有此链接的人可只读查看本对话(需能访问本机 pi-web)。",button:"分享",generating:"正在生成链接…",copyLink:"复制链接",copied:"已复制",hint:"将链接发到聊天或邮件即可。对方需能访问运行中的 pi-web。",createFailed:"无法创建分享链接。",copyFailed:"无法复制链接。",loadFailed:"分享链接无效或已失效。",readOnly:"只读"},extensionsSettings:{title:"已安装扩展",description:"当前工作区 pi 扩展只读列表。在磁盘上修改后请重启 pi-web。",empty:"此工作区未发现扩展。",enabled:"已启用",disabled:"已禁用",commands:"命令",restartHint:"修改扩展后请重启 pi-web。参见",docsLink:"pi 扩展文档"},webFetchSettings:{title:"Web 抓取",description:"让 LLM 以结构化 JSON-LD 或纯净 Markdown 抓取 URL。Tier 0(JSON-LD)和 Tier 1(Readability)始终可用;Tier 2(浏览器)需要 agent-browser 或 Pi.app(macOS)。",installed:"已安装",notInstalled:"未安装",install:"安装",installing:"安装中…",installHint:"下载 agent-browser + Chrome(约 200 MB,一次性)",available:"可用",notInPiApp:"需 Pi.app 在 macOS",webkitHint:"比 agent-browser 快;复用 Pi.app 的 WebView。",t2Backend:"Tier 2 后端",t2Auto:"自动——macOS Pi.app 优先 WebKit,回退到 agent-browser",t2Webkit:"WebKit——仅 macOS Pi.app(最快)",t2Agent:"agent-browser——跨平台",cacheTtl:"缓存有效期",toolHint:"LLM 在拿到 URL 时会自动调用 web_fetch 工具,无需手动触发。"},scenePack:{title:"场景包",description:"导出或导入场景 override JSON,便于换机或团队搬运。",export:"导出包",exporting:"导出中…",import:"导入包",importing:"读取中…",previewTitle:"导入预览",confirmImport:"确认导入",exportSuccess:"场景包已下载。",importApplied:"已应用 {count} 个场景 override。",action:{create:"新增",update:"更新",unchanged:"无变化"}},messageView:{copyMessage:"复制消息",editFromHereTitle:"从这里编辑 —— 在当前会话内创建分支",editFromHere:"从这里编辑",forkFromHereTitle:"从这里另开一版 —— 新建独立会话文件",creatingSession:"处理中...",forkFromHere:"从这里另开一版",compactionSummaryLabel:"已整理",branchSummaryLabel:"分支摘要",summaryExpand:"展开全文",summaryCollapse:"收起",estimatedTokens:"预估 token 数(流式中)",thinking:"思考",noOutput:"(无输出)",usageIn:"输入 {count}",usageOut:"输出 {count}",usageCache:"缓存 {count}",codeCopy:"复制",codeCopied:"已复制"},branchNavigator:{assistantFallback:"[assistant]",noActiveSession:"当前没有活动会话",noBranches:"此会话没有分支",mainBranch:"main",branches:"分支",summarizeBeforeSwitch:"切换前先总结",summarizeBeforeSwitchHint:"离开当前分支前,先总结该分支内容",switching:"正在切换分支…",errorNoModel:"请先选择模型,再开启「切换前先总结」",errorCancelled:"已取消分支切换",errorGeneric:"无法切换分支"},toolPanel:{presetOff:"关闭",presetOffDescription:"不启用工具",presetLow:"低",presetLowDescription:"read \xb7 bash \xb7 edit \xb7 write",presetHigh:"高",presetHighDescription:"read \xb7 bash \xb7 edit \xb7 write \xb7 grep \xb7 find \xb7 ls",noToolsEnabled:"未启用工具",noToolsDetail:"agent 将不会使用任何工具",appliesNextTurn:"将在下一轮生效"},workbenchHome:{enterpriseWorkbench:"企业工作台",title:"Pi 工作台",description:"在工作区开始新对话,或从下方最近记录继续。",newChat:"新建对话",startingChat:"正在打开…",myWork:"我的工作",recentWorkDescription:"最近对话",recentWorkError:"无法加载最近工作:{error}",noRecentWork:"还没有最近工作。",viewAllHistory:"查看全部",showLessHistory:"收起",startChatError:"无法开始对话:{error}"},workbenchHistory:{workbench:"工作台",myWork:"我的工作",loadingHistory:"历史加载中...",noWorkFound:"未找到工作记录。",showDetails:"查看详情",details:"详情"},workbenchHistoryDetail:{active:"进行中",completed:"已完成",draft:"草稿",historyDetails:"历史详情",messagesCountOne:"{count} 条消息",messagesCountOther:"{count} 条消息",closeDetails:"关闭详情",latestResultSummary:"最新结果摘要",noSummary:"该会话暂未记录摘要。",firstMessage:"第一条消息",started:"开始时间",lastUpdated:"最后更新",workingDirectory:"工作目录",sessionFile:"会话文件",close:"关闭",openChat:"打开聊天"},workbenchSettings:{about:"关于",aboutDescription:"当前 pi-web 安装所包含的版本信息。",piWebVersion:"pi-web",piCodingAgentVersion:"pi-coding-agent",platform:"平台",settings:"设置",language:"语言",languageDescription:"选择产品 UI 的显示语言。",english:"English",simplifiedChinese:"简体中文",models:"模型",modelsDescription:"连接服务、默认模型、提供商与 models.json。",skills:"技能",skillsDescription:"为当前工作区选择的运行时工具与已安装能力。"},remoteAccess:{sectionLabel:"远程",title:"远程访问",description:"让手机或其他设备查看本机对话。默认关闭。",wizardPurposeTitle:"远程访问能做什么",wizardPurposeBody:"配对手机或平板,在本机运行 pi-web 时远程查看(可选:发送)消息。仅在您信任的网络中使用。",wizardRiskTitle:"开启前请注意",wizardRiskBody:"持有配对链接的人在您撤销前可连接。手机端建议只读。勿在未受控的公网直接暴露 pi-web。",wizardNext:"继续",wizardEnable:"开启并配对",viewOnPhone:"手机查看",adminPasswordTitle:"管理密码(仅显示一次)",adminPasswordHint:"请立即复制。仅显示一次。轮换密码会断开所有已配对设备。",rotateAdminPassword:"轮换管理密码",developerSection:"开发者选项",loading:"远程设置加载中...",enabled:"远程访问已开启",disabled:"远程访问已关闭",enable:"设置远程访问",enabling:"开启中...",disable:"关闭",disabling:"关闭中...",allowedHostnames:"允许的主机名",allowedHostnamesHint:"可选 Host 头白名单(每行一个)。留空表示认证通过后接受任意主机名。",allowedHostnamesPlaceholder:"100.x.y.z\nmybox.tailnet.ts.net",readOnly:"仅查看 — 配对设备不能发送消息",saveSettings:"保存设置",generatePairing:"生成配对链接",generatingPairing:"生成中...",rotateToken:"轮换管理密码",rotatingToken:"轮换中...",masterTokenTitle:"管理密码(仅显示一次)",masterTokenHint:"请立即复制。仅显示一次。轮换后会断开所有已配对设备。",pairedDevices:"已配对设备",revoke:"撤销",pairingTitle:"配对设备",pairingRowHint:"扫描二维码或复制链接,将手机连接到此主机",pairingModalHint:"用手机 pi-web 扫描此二维码,或复制下方链接。",pairingHint:"在有效期内用手机扫描二维码或打开配对链接。",qrAlt:"配对二维码",copyPairingLink:"复制配对链接",pairingExpires:"过期时间 {time}",noPairingGenerated:"生成配对链接以连接其他设备。",pairingInProgress:"正在配对设备...",pairingSuccess:"设备配对成功。",authRequired:"需要远程认证。请在主机上的设置中配对此设备。",readOnlyBanner:"此设备上的远程访问为只读模式。可查看与流式输出,写操作会被拒绝。",tunnelTitle:"公网隧道(无需开端口)",tunnelDescription:"通过 HTTPS 暴露 pi-web,无需端口转发。请保持远程鉴权开启,并在分享 URL 前先完成设备配对。",tunnelTailscale:"Tailscale Funnel",tunnelCloudflared:"Cloudflare 快速隧道",pushTitle:"推送通知",pushDescription:"当 Agent 在后台完成时收到通知。",pushEnable:"开启通知",pushEnabling:"开启中...",pushDisable:"关闭通知",pushUnsupported:"此浏览器不支持推送通知。",pushServerCount:"服务器订阅数:{count}",revokeAll:"撤销全部设备",deviceLabel:"标签",deviceLabelPlaceholder:"手机、iPad…",saveLabel:"保存",auditTitle:"审计日志",auditDescription:"最近的远程认证与管理事件(仅本机可查看)。",auditEmpty:"暂无审计事件。",auditLoadError:"加载审计日志失败",advancedTitle:"高级设置",relayE2eeTitle:"E2EE 中继隧道(Phase 3)",relayE2eeDescription:"通过 dumb HTTP 中继建立端到端加密隧道。中继无法解密流量;连接后仍需单独配对 pi-web。",relayGenerateOffer:"生成 E2EE 连接 offer",relayGeneratingOffer:"生成中...",relayOfferTitle:"连接 offer",relayOfferHint:"在远程机器上打开此 URL,然后运行下方 client 代理命令。",relayServerCmd:"1. 启动中继(任意机器)",relayHostCmd:"2. Host 桥接(本机)",relayClientCmd:"3. Client 代理(远程机器)"},fileViewer:{noChanges:"无变更",unchangedLines:"... {count} 行未变更 ...",image:"图片",audio:"音频",liveSyncActive:"实时同步已开启",notWatching:"未监听",live:"实时",static:"静态",failedToLoadImage:"图片加载失败",failedToLoadAudio:"音频加载失败",failedToLoadPdf:"PDF 加载失败",pdf:"PDF",officeBinaryHint:"此文件类型无法在浏览器内预览,请用系统默认应用打开。",systemOpenedExternally:"已尝试用系统默认应用打开。若未弹出窗口,请点右上角或下方按钮。",officeExcelHint:"表格暂不支持应用内预览。请用 Excel/Numbers 打开,或让 Agent 读取并总结内容。",officeWordHint:"Word 文档暂不支持应用内预览。请点右上角「用默认应用打开」,或让 Agent 读取文件。",officePptHint:"演示文稿暂不支持应用内预览。请用 Keynote/PowerPoint 打开,或让 Agent 总结幻灯片。",openExternally:"用默认应用打开",loading:"加载中...",source:"源码",diff:"Diff",disableWordWrap:"关闭自动换行",enableWordWrap:"开启自动换行",wrap:"换行",code:"代码",preview:"预览",raw:"原始",htmlPreview:"HTML 预览",copyAsImage:"复制图片",saveAsImage:"保存图片",copyPreviewImage:"复制预览为图片",savePreviewImage:"保存预览为图片",exportingImage:"导出中...",copiedImage:"已复制",savedImage:"已保存",savedInstead:"已改为保存",imageExportFailed:"图片导出失败"},fileExplorer:{insertPathIntoChat:"将路径插入聊天",mention:"mention",empty:"空",loadingFiles:"文件加载中...",noFilesFound:"未找到文件"},modelsConfig:{hideApiKey:"隐藏 API key",showApiKey:"显示 API key",inheritNone:"— 继承 / 无 —",provider:"Provider",delete:"删除",providerName:"Provider 名称",baseUrl:"Base URL",apiKey:"API Key",api:"API",apiKeyPlaceholder:"ENV_VAR_NAME、!shell-command 或直接填 key",apiKeyHint:"使用 ! 前缀可执行 shell 命令,也可以填写环境变量名",default:"默认",disabled:"禁用",custom:"自定义",testingModelConnection:"正在测试模型连接...",connected:"已连接",failed:"失败",model:"模型",testModelConnection:"测试模型连接",testing:"测试中...",ok:"OK",test:"测试",chatTestNotSupported:"连接测试使用 chat completions 接口,不适用于图片/视频生成模型。",chatTestNotSupportedShort:"不支持 chat 测试",modelIdCaseHint:"模型 ID 通常为小写。若测试失败,可尝试:{suggestedId}",reasoningNotSupportedHint:"该模型不支持 reasoning。已关闭 Reasoning 选项,请保存后重新测试。",remove:"移除",idRequired:"ID *",name:"名称",apiOverride:"API 覆盖",reasoningThinking:"推理 / thinking",imageInput:"图片输入",deepSeekThinkingCompat:"DeepSeek thinking 兼容",thinkingLevelMap:"Thinking level 映射",clearAll:"全部清空",contextWindowTokens:"上下文窗口(tokens)",maxOutputTokens:"最大输出 tokens",costPerMillionTokens:"成本(每百万 tokens)",input:"input",output:"output",cacheRead:"cacheRead",cacheWrite:"cacheWrite",connectionLost:"连接已断开",verifying:"校验中...",networkError:"网络错误",serverError:"服务器错误 {status}",continuing:"继续中...",subscription:"订阅",connectedState:"已连接",notConnectedState:"未连接",connectAccount:"连接你的 {provider} 账号。",alreadyConnected:"已连接。你可以重新登录或断开连接。",openingBrowser:"正在打开浏览器...",browserCompleteHint:"请在浏览器中完成登录,然后把地址栏中的重定向 URL 复制并粘贴到这里。",openLoginPageHint:"如果浏览器没有自动打开,请点击这里打开登录页面",callbackPlaceholder:"http://localhost:1455/auth/callback?code=...",enterValuePlaceholder:"输入值...",submit:"提交",verificationPageHint:"打开验证页面并输入这段代码:",expiresInMinutes:"将在 {count} 分钟后过期。",connectedSuccessfully:"连接成功。",reLogin:"重新登录",login:"登录",disconnect:"断开连接",configured:"已配置",apiKeyStored:"API key 已存储。你可以在下方输入新 key 进行替换,或断开连接以移除。",enterApiKey:"输入你的 {provider} API key 以启用 {count} 个模型。",enterNewKeyPlaceholder:"输入新 key 以替换...",apiKeyMaskedPlaceholder:"sk-...",saved:"已保存",saving:"保存中...",removing:"移除中...",searchProviders:"搜索 providers...",noProvidersMatch:"没有匹配的 provider",customGroup:"自定义",openAiCompatible:"OpenAI / Anthropic 兼容",customEndpointFormat:"自定义 endpoint 格式",subscriptions:"订阅",oauth:"OAuth",apiKeyShort:"API Key",modelsCount:"{count} 个模型",models:"模型",modelsPath:"~/.pi/agent/models.json",defaultModel:"默认模型",defaultModelDescription:"新建对话时使用。可在输入框下方随时切换模型。",perSessionModelHint:"每条对话都可在输入框下方的模型选择器中单独指定模型。",selectDefaultModel:"选择模型",manageAllConnections:"管理全部模型与连接…",newModel:"新模型",addModel:"+ 模型",addProvider:"+ 添加 provider",selectProviderOrModel:"选择一个 provider 或模型"},skillsConfig:{sourceGlobal:"全局",sourceProject:"项目",sourcePath:"路径",visibleInPrompt:"在模型 prompt 中可见 —— 点击可禁用",hiddenFromPrompt:"在模型 prompt 中隐藏 —— 点击可启用",name:"名称",description:"描述",noSkillsFound:"未找到技能",addSkill:"添加技能",searchPlaceholder:"例如 react、testing、deploy",searching:"搜索中...",search:"搜索",installed:"已安装",installing:"安装中...",install:"安装",discoverAndInstall:"为你的 agent 发现并安装技能。",skills:"技能",loading:"加载中...",project:"项目",global:"全局",path:"路径",close:"关闭",selectSkill:"选择一个技能"},tabBar:{close:"关闭"},accounts:{platform:"Pi",title:"AI 服务",description:"连接你使用的 AI 服务。凭据保存在本机,并与 Pi CLI 共用。",connectedServices:"已连接",noConnectedServices:"尚未连接任何服务。",addService:"添加服务",connected:"已连接",notConnected:"未连接",connect:"连接",connecting:"连接中…",disconnect:"断开",defaultModel:"默认模型",defaultModelDescription:"新建对话时使用。可在输入框下方随时切换模型。",perSessionModelHint:"每条对话都可在输入框下方的模型选择器中单独指定模型。",selectDefaultModel:"选择模型",configureModels:"配置模型",oauthTimeout:"登录超时",oauthFailed:"登录失败",needAccountTitle:"请先配置模型",needAccountDescription:"发送消息前,需要至少连接一个服务并配置可用模型。"},settings:{exporting:"导出中…",sessionUsageTitle:"会话用量",sessionUsageDescription:"以下为指定会话的 token 用量与预估费用(非全部对话汇总)。",sessionUsageSubject:"会话",sessionUsageOpen:"打开此对话",sessionUsageId:"ID {id}",inputTokens:"输入 tokens",outputTokens:"输出 tokens",estimatedCost:"预估费用",activityTitle:"近期活动",activityDescription:"近 7 日按 UTC 日统计的会话开始与完成数。",activityStarted:"新建",activityCompleted:"已完成",activityActive:"进行中",activityLoading:"活动数据加载中…",activityEmpty:"该时段无会话记录。"},tools:{capability:{readFiles:"可读文件",editFiles:"可修改文件",searchFiles:"可搜索文件"},simpleMode:"简洁",standardMode:"标准",advancedMode:"高级"}}};function g(a,b){let c=b.split("."),d=f[a];for(let a of c){var e;if("object"!=typeof(e=d)||null===e||!(a in d))return null;d=d[a]}return"string"==typeof d?d:null}function h(a,b){return b?a.replace(/\{(\w+)\}/g,(a,c)=>{let d=b[c];return null==d?`{${c}}`:String(d)}):a}let i=(0,e.createContext)(null);function j({children:a}){let[b,c]=(0,e.useState)("en"),f=(0,e.useCallback)(a=>{c(a)},[]),k=(0,e.useCallback)((a,c)=>(function(a,b,c){let d=g(a,b);if(d)return h(d,c);let e=g("en",b);return e?h(e,c):b})(b,a,c),[b]),l=(0,e.useMemo)(()=>({locale:b,setLocale:f,t:k}),[b,f,k]);return(0,d.jsx)(i.Provider,{value:l,children:a})}function k(){let a=(0,e.useContext)(i);if(!a)throw Error("useI18n must be used within LocaleProvider");return a}},69298:(a,b,c)=>{"use strict";c.d(b,{AppProviders:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call AppProviders() from the server but AppProviders is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-app/pi-app/app/providers.tsx","AppProviders")},75748:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23))},78335:()=>{},82704:()=>{},83712:(a,b,c)=>{"use strict";c.d(b,{AppProviders:()=>f});var d=c(48249),e=c(65863);function f({children:a}){return(0,d.jsx)(e.Y,{children:a})}},96487:()=>{},99716:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23))}};