@rexvane/piweb 0.3.24 → 0.3.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -11
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +13 -20
  6. package/.next/required-server-files.js +2 -1
  7. package/.next/required-server-files.json +2 -1
  8. package/.next/routes-manifest.json +6 -8
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  24. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  27. package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
  28. package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
  29. package/.next/server/app/api/agent/new/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  31. package/.next/server/app/api/agent/resources/route.js +1 -0
  32. package/.next/server/app/api/agent/resources/route.js.nft.json +1 -0
  33. package/.next/server/app/api/agent/resources/route_client-reference-manifest.js +1 -0
  34. package/.next/server/app/api/config/route.js +1 -1
  35. package/.next/server/app/api/config/route.js.nft.json +1 -1
  36. package/.next/server/app/api/files/route.js +1 -1
  37. package/.next/server/app/api/files/route.js.nft.json +1 -1
  38. package/.next/server/app/api/fs/route.js +1 -1
  39. package/.next/server/app/api/fs/route.js.nft.json +1 -1
  40. package/.next/server/app/api/git/route.js +4 -4
  41. package/.next/server/app/api/git/route.js.nft.json +1 -1
  42. package/.next/server/app/api/github/route.js +4 -4
  43. package/.next/server/app/api/github/route.js.nft.json +1 -1
  44. package/.next/server/app/api/growth/route.js +1 -1
  45. package/.next/server/app/api/growth/route.js.nft.json +1 -1
  46. package/.next/server/app/api/health/route.js +1 -1
  47. package/.next/server/app/api/models/defaults/route.js +1 -1
  48. package/.next/server/app/api/models/defaults/route.js.nft.json +1 -1
  49. package/.next/server/app/api/models/route.js +1 -1
  50. package/.next/server/app/api/models/route.js.nft.json +1 -1
  51. package/.next/server/app/api/pi-settings/route.js +1 -1
  52. package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
  53. package/.next/server/app/api/plugins/route.js +1 -1
  54. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  55. package/.next/server/app/api/prompts/route.js +1 -1
  56. package/.next/server/app/api/prompts/route.js.nft.json +1 -1
  57. package/.next/server/app/api/remote/route.js +4 -3
  58. package/.next/server/app/api/security/route.js +1 -1
  59. package/.next/server/app/api/security/route.js.nft.json +1 -1
  60. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  61. package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
  62. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  63. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/sessions/import/route.js +2 -2
  65. package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
  66. package/.next/server/app/api/sessions/route.js +1 -1
  67. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  68. package/.next/server/app/api/skills/route.js +2 -2
  69. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  70. package/.next/server/app/api/update/route.js +2 -2
  71. package/.next/server/app/api/update/route.js.nft.json +1 -1
  72. package/.next/server/app/api/version/route.js +1 -1
  73. package/.next/server/app/api/version/route.js.nft.json +1 -1
  74. package/.next/server/app/api/web-auth/route.js +2 -2
  75. package/.next/server/app/api/workspaces/route.js +1 -1
  76. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  77. package/.next/server/app/icon.svg/route.js +1 -1
  78. package/.next/server/app/index.html +1 -1
  79. package/.next/server/app/index.rsc +6 -7
  80. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -7
  81. package/.next/server/app/index.segments/_full.segment.rsc +6 -7
  82. package/.next/server/app/index.segments/_tree.segment.rsc +2 -3
  83. package/.next/server/app/login/page.js +1 -1
  84. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/login.html +1 -1
  86. package/.next/server/app/login.rsc +3 -3
  87. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  88. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  89. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  90. package/.next/server/app/page.js +1 -1
  91. package/.next/server/app/page.js.nft.json +1 -1
  92. package/.next/server/app/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app-paths-manifest.json +11 -11
  94. package/.next/server/chunks/3924.js +3 -3
  95. package/.next/server/chunks/538.js +1 -1
  96. package/.next/server/chunks/620.js +1 -0
  97. package/.next/server/chunks/6229.js +1 -1
  98. package/.next/server/chunks/7496.js +1 -1
  99. package/.next/server/chunks/7662.js +2 -2
  100. package/.next/server/chunks/8686.js +1 -1
  101. package/.next/server/functions-config-manifest.json +1 -2
  102. package/.next/server/instrumentation.js.nft.json +1 -1
  103. package/.next/server/middleware-build-manifest.js +1 -1
  104. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  105. package/.next/server/pages/404.html +1 -1
  106. package/.next/server/pages/500.html +1 -1
  107. package/.next/server/preview-props.json +3 -3
  108. package/.next/server/server-reference-manifest.json +1 -1
  109. package/.next/static/QJCtqgDKzGS2BdKABd9ch/_buildManifest.js +1 -0
  110. package/.next/static/chunks/2577.86c8538fbf05a8b2.js +1 -0
  111. package/.next/static/chunks/2716.fa561519675a3ff1.js +1 -0
  112. package/.next/static/chunks/2906.8a0e09bb47605cf1.js +1 -0
  113. package/.next/static/chunks/4673.ea36e55005c0f82f.js +1 -0
  114. package/.next/static/chunks/4686-4dc565817a160351.js +1 -0
  115. package/.next/static/chunks/4778.0d2c5d75b791d352.js +1 -0
  116. package/.next/static/chunks/{618.949981da99be7182.js → 618.9a22656b863f242b.js} +2 -2
  117. package/.next/static/chunks/app/_global-error/page-f2d93969c0bcf406.js +1 -0
  118. package/.next/static/chunks/app/api/agent/[id]/events/route-f2d93969c0bcf406.js +1 -0
  119. package/.next/static/chunks/app/api/agent/[id]/route-f2d93969c0bcf406.js +1 -0
  120. package/.next/static/chunks/app/api/agent/[id]/tree/route-f2d93969c0bcf406.js +1 -0
  121. package/.next/static/chunks/app/api/agent/new/route-f2d93969c0bcf406.js +1 -0
  122. package/.next/static/chunks/app/api/agent/resources/route-f2d93969c0bcf406.js +1 -0
  123. package/.next/static/chunks/app/api/config/route-f2d93969c0bcf406.js +1 -0
  124. package/.next/static/chunks/app/api/files/route-f2d93969c0bcf406.js +1 -0
  125. package/.next/static/chunks/app/api/fs/route-f2d93969c0bcf406.js +1 -0
  126. package/.next/static/chunks/app/api/git/route-f2d93969c0bcf406.js +1 -0
  127. package/.next/static/chunks/app/api/github/route-f2d93969c0bcf406.js +1 -0
  128. package/.next/static/chunks/app/api/growth/route-f2d93969c0bcf406.js +1 -0
  129. package/.next/static/chunks/app/api/health/route-f2d93969c0bcf406.js +1 -0
  130. package/.next/static/chunks/app/api/models/defaults/route-f2d93969c0bcf406.js +1 -0
  131. package/.next/static/chunks/app/api/models/route-f2d93969c0bcf406.js +1 -0
  132. package/.next/static/chunks/app/api/pi-settings/route-f2d93969c0bcf406.js +1 -0
  133. package/.next/static/chunks/app/api/plugins/route-f2d93969c0bcf406.js +1 -0
  134. package/.next/static/chunks/app/api/prompts/route-f2d93969c0bcf406.js +1 -0
  135. package/.next/static/chunks/app/api/remote/route-f2d93969c0bcf406.js +1 -0
  136. package/.next/static/chunks/app/api/security/route-f2d93969c0bcf406.js +1 -0
  137. package/.next/static/chunks/app/api/sessions/[id]/export/route-f2d93969c0bcf406.js +1 -0
  138. package/.next/static/chunks/app/api/sessions/[id]/route-f2d93969c0bcf406.js +1 -0
  139. package/.next/static/chunks/app/api/sessions/import/route-f2d93969c0bcf406.js +1 -0
  140. package/.next/static/chunks/app/api/sessions/route-f2d93969c0bcf406.js +1 -0
  141. package/.next/static/chunks/app/api/skills/route-f2d93969c0bcf406.js +1 -0
  142. package/.next/static/chunks/app/api/update/route-f2d93969c0bcf406.js +1 -0
  143. package/.next/static/chunks/app/api/version/route-f2d93969c0bcf406.js +1 -0
  144. package/.next/static/chunks/app/api/web-auth/route-f2d93969c0bcf406.js +1 -0
  145. package/.next/static/chunks/app/api/workspaces/route-f2d93969c0bcf406.js +1 -0
  146. package/.next/static/chunks/app/page-71f2d3b3ed864b3d.js +1 -0
  147. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f2d93969c0bcf406.js +1 -0
  148. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f2d93969c0bcf406.js +1 -0
  149. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f2d93969c0bcf406.js +1 -0
  150. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f2d93969c0bcf406.js +1 -0
  151. package/.next/static/chunks/webpack-ffc09b5fcc8aaa6d.js +1 -0
  152. package/.next/static/css/014eb1f21414e615.css +1 -0
  153. package/.next/static/css/56b129a13637fcfd.css +1 -0
  154. package/.next/static/css/7e3caf797e4cb19a.css +1 -0
  155. package/.next/types/app/api/agent/{[id]/side-chat → resources}/route.ts +3 -3
  156. package/.next/types/routes.d.ts +2 -2
  157. package/.next/types/validator.ts +9 -9
  158. package/README.md +1 -1
  159. package/next.config.ts +1 -1
  160. package/package.json +9 -9
  161. package/scripts/apply-global.mjs +87 -0
  162. package/scripts/launcher.mjs +21 -0
  163. package/scripts/testing/prepare-sdk-tools.mjs +19 -0
  164. package/src/app/api/agent/new/route.ts +2 -1
  165. package/src/app/api/agent/resources/route.ts +18 -0
  166. package/src/app/api/models/route.ts +22 -1
  167. package/src/app/api/plugins/route.ts +3 -2
  168. package/src/app/api/prompts/route.ts +3 -2
  169. package/src/app/api/remote/route.ts +22 -4
  170. package/src/app/api/sessions/[id]/export/route.ts +3 -1
  171. package/src/app/api/skills/route.ts +3 -2
  172. package/src/app/globals.css +1002 -1765
  173. package/src/components/AppShell.tsx +128 -93
  174. package/src/components/ChatInput.tsx +177 -98
  175. package/src/components/ChatWindow.tsx +189 -56
  176. package/src/components/ContextMeter.tsx +33 -9
  177. package/src/components/CustomSelect.module.css +142 -0
  178. package/src/components/CustomSelect.tsx +157 -0
  179. package/src/components/DrawerPanel.tsx +1 -1
  180. package/src/components/ExtensionUI.tsx +9 -3
  181. package/src/components/FileViewer.tsx +24 -21
  182. package/src/components/GitPanel.tsx +35 -13
  183. package/src/components/GrowthTree.tsx +6 -2
  184. package/src/components/ImageViewer.tsx +72 -0
  185. package/src/components/MarkdownBlock.tsx +67 -96
  186. package/src/components/ModelSelector.tsx +36 -39
  187. package/src/components/PiMark.tsx +76 -41
  188. package/src/components/PreviewImage.tsx +33 -0
  189. package/src/components/ProjectPanel.tsx +8 -5
  190. package/src/components/PromptPanel.tsx +85 -20
  191. package/src/components/ProviderSetupModal.module.css +12 -11
  192. package/src/components/ProviderSetupModal.tsx +107 -36
  193. package/src/components/RemoteSection.tsx +53 -2
  194. package/src/components/SessionImportSection.tsx +30 -15
  195. package/src/components/SessionSidebar.tsx +72 -62
  196. package/src/components/SettingsPanel.tsx +49 -151
  197. package/src/components/TrajectoryAnalyzer.module.css +26 -11
  198. package/src/components/TrajectoryView.tsx +11 -3
  199. package/src/components/chat/markdown-actions.tsx +23 -0
  200. package/src/components/composer/ComposerFiles.tsx +224 -0
  201. package/src/components/composer/ComposerImages.tsx +59 -127
  202. package/src/hooks/usePiWeb.ts +47 -2
  203. package/src/i18n.tsx +62 -80
  204. package/src/lib/agent-manager.ts +365 -33
  205. package/src/lib/chat/file-path.ts +54 -0
  206. package/src/lib/chat/skill-expansion.ts +51 -0
  207. package/src/lib/extension-ui.ts +25 -1
  208. package/src/lib/font.ts +37 -39
  209. package/src/lib/git-service.ts +4 -2
  210. package/src/lib/growth-turns.ts +3 -1
  211. package/src/lib/model-draft.ts +69 -2
  212. package/src/lib/models-service.ts +53 -3
  213. package/src/lib/pi.ts +2 -2
  214. package/src/lib/remote/assets.json +1 -1
  215. package/src/lib/remote/supervisor.ts +48 -5
  216. package/src/lib/security-service.ts +2 -1
  217. package/src/lib/session-reader.ts +25 -13
  218. package/src/lib/session-retention.ts +11 -8
  219. package/src/lib/skills-service.ts +2 -1
  220. package/src/lib/slash-command-token.ts +14 -0
  221. package/src/lib/trajectory.ts +111 -15
  222. package/src/lib/types.ts +28 -3
  223. package/src/lib/update-service.ts +29 -9
  224. package/src/lib/workspace-store.ts +36 -1
  225. package/.next/server/app/api/agent/[id]/side-chat/route.js +0 -5
  226. package/.next/server/app/api/agent/[id]/side-chat/route.js.nft.json +0 -1
  227. package/.next/server/app/api/agent/[id]/side-chat/route_client-reference-manifest.js +0 -1
  228. package/.next/server/chunks/3421.js +0 -1
  229. package/.next/static/chunks/2716.44fdf1b21454b961.js +0 -1
  230. package/.next/static/chunks/4673.e261707dce391be7.js +0 -1
  231. package/.next/static/chunks/4686-0cd87513f9ea3538.js +0 -1
  232. package/.next/static/chunks/4778.eddd3a5813f85824.js +0 -1
  233. package/.next/static/chunks/7411.5f79671208209b13.js +0 -1
  234. package/.next/static/chunks/8552.25c39ef4c995eba0.js +0 -1
  235. package/.next/static/chunks/app/_global-error/page-cbaaee0d7aacb85a.js +0 -1
  236. package/.next/static/chunks/app/api/agent/[id]/events/route-cbaaee0d7aacb85a.js +0 -1
  237. package/.next/static/chunks/app/api/agent/[id]/route-cbaaee0d7aacb85a.js +0 -1
  238. package/.next/static/chunks/app/api/agent/[id]/side-chat/route-cbaaee0d7aacb85a.js +0 -1
  239. package/.next/static/chunks/app/api/agent/[id]/tree/route-cbaaee0d7aacb85a.js +0 -1
  240. package/.next/static/chunks/app/api/agent/new/route-cbaaee0d7aacb85a.js +0 -1
  241. package/.next/static/chunks/app/api/config/route-cbaaee0d7aacb85a.js +0 -1
  242. package/.next/static/chunks/app/api/files/route-cbaaee0d7aacb85a.js +0 -1
  243. package/.next/static/chunks/app/api/fs/route-cbaaee0d7aacb85a.js +0 -1
  244. package/.next/static/chunks/app/api/git/route-cbaaee0d7aacb85a.js +0 -1
  245. package/.next/static/chunks/app/api/github/route-cbaaee0d7aacb85a.js +0 -1
  246. package/.next/static/chunks/app/api/growth/route-cbaaee0d7aacb85a.js +0 -1
  247. package/.next/static/chunks/app/api/health/route-cbaaee0d7aacb85a.js +0 -1
  248. package/.next/static/chunks/app/api/models/defaults/route-cbaaee0d7aacb85a.js +0 -1
  249. package/.next/static/chunks/app/api/models/route-cbaaee0d7aacb85a.js +0 -1
  250. package/.next/static/chunks/app/api/pi-settings/route-cbaaee0d7aacb85a.js +0 -1
  251. package/.next/static/chunks/app/api/plugins/route-cbaaee0d7aacb85a.js +0 -1
  252. package/.next/static/chunks/app/api/prompts/route-cbaaee0d7aacb85a.js +0 -1
  253. package/.next/static/chunks/app/api/remote/route-cbaaee0d7aacb85a.js +0 -1
  254. package/.next/static/chunks/app/api/security/route-cbaaee0d7aacb85a.js +0 -1
  255. package/.next/static/chunks/app/api/sessions/[id]/export/route-cbaaee0d7aacb85a.js +0 -1
  256. package/.next/static/chunks/app/api/sessions/[id]/route-cbaaee0d7aacb85a.js +0 -1
  257. package/.next/static/chunks/app/api/sessions/import/route-cbaaee0d7aacb85a.js +0 -1
  258. package/.next/static/chunks/app/api/sessions/route-cbaaee0d7aacb85a.js +0 -1
  259. package/.next/static/chunks/app/api/skills/route-cbaaee0d7aacb85a.js +0 -1
  260. package/.next/static/chunks/app/api/update/route-cbaaee0d7aacb85a.js +0 -1
  261. package/.next/static/chunks/app/api/version/route-cbaaee0d7aacb85a.js +0 -1
  262. package/.next/static/chunks/app/api/web-auth/route-cbaaee0d7aacb85a.js +0 -1
  263. package/.next/static/chunks/app/api/workspaces/route-cbaaee0d7aacb85a.js +0 -1
  264. package/.next/static/chunks/app/page-dc3cb41d91c7432e.js +0 -1
  265. package/.next/static/chunks/next/dist/client/components/builtin/app-error-cbaaee0d7aacb85a.js +0 -1
  266. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-cbaaee0d7aacb85a.js +0 -1
  267. package/.next/static/chunks/next/dist/client/components/builtin/not-found-cbaaee0d7aacb85a.js +0 -1
  268. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-cbaaee0d7aacb85a.js +0 -1
  269. package/.next/static/chunks/webpack-2ac3d76b81895f5b.js +0 -1
  270. package/.next/static/css/08815507594e8b8d.css +0 -1
  271. package/.next/static/css/9fc559c2c4ad1d0f.css +0 -1
  272. package/.next/static/css/c6e2227c36ec2fd6.css +0 -1
  273. package/.next/static/css/f15a853af8b5127f.css +0 -1
  274. package/.next/static/lvKCJmjFj8LuqSojRVLRF/_buildManifest.js +0 -1
  275. package/src/app/api/agent/[id]/side-chat/route.ts +0 -77
  276. package/src/components/side-chat/SideChatPanel.module.css +0 -131
  277. package/src/components/side-chat/SideChatPanel.tsx +0 -189
  278. package/src/components/side-chat/icons.tsx +0 -8
  279. package/src/components/side-chat/request-history.ts +0 -29
  280. package/src/components/side-chat/store.ts +0 -248
  281. package/src/lib/chat/stream-settings.ts +0 -192
  282. package/src/lib/side-chat/context.ts +0 -123
  283. package/src/lib/side-chat/service.ts +0 -191
  284. package/src/lib/side-chat/types.ts +0 -61
  285. /package/.next/static/{lvKCJmjFj8LuqSojRVLRF → QJCtqgDKzGS2BdKABd9ch}/_ssgManifest.js +0 -0
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: "上下文窗口",
@@ -49,9 +58,15 @@ const zh = {
49
58
  visionInputImageHint: "勾上表示该模型能收图(写进 models.json 的 input);不勾则按纯文本处理",
50
59
  visionOn: "有视觉",
51
60
  visionOff: "纯文本",
61
+ reasoningLabel: "推理",
62
+ reasoningHint: "该模型是否支持推理(思考档位)。未声明时 pi 按不支持处理,模型选择器里的思考档位会整个消失",
63
+ reasoningUnset: "未声明",
64
+ reasoningOn: "支持推理",
65
+ reasoningOff: "不支持",
52
66
  imagePreview: "点击放大预览",
53
67
  imageViewer: "图片预览",
54
68
  imageClearAll: "清空图片",
69
+ filesClearAll: "清空文件",
55
70
  imagePrev: "上一张",
56
71
  imageNext: "下一张",
57
72
  chipExpandMore: "展开 {n}",
@@ -82,6 +97,8 @@ const zh = {
82
97
  stepSearched: "搜索",
83
98
  stepEdited: "编辑了",
84
99
  stepWrote: "写入了",
100
+ skillStep: "使用技能",
101
+ skillStepTitle: "技能",
85
102
  resultRead: "读取了 {n} 行",
86
103
  resultFound: "找到 {n} 处",
87
104
  resultWrote: "{n} 行",
@@ -207,6 +224,8 @@ const zh = {
207
224
  archiveSession: "归档会话",
208
225
  unarchiveSession: "取消归档",
209
226
  archivedSessions: "已归档",
227
+ archiveRetentionHint: "归档满 30 天自动删除",
228
+ archiveRetentionDetail: "归档的会话从归档那天起保留 30 天,之后自动删除;归档后又用过的,从最后一次使用起算。打开中的会话不会被删。",
210
229
  deleteAllSessions: "删除全部会话",
211
230
  deleteAllConfirm: "删除此工作区的全部会话?不可恢复。",
212
231
  contextInject: "上下文注入",
@@ -320,7 +339,6 @@ const zh = {
320
339
  contextUnknown: "上下文用量未知",
321
340
  contextEstimated: "上下文估算",
322
341
  contextMeasured: "上下文用量",
323
- contextBackground: "Main Conversation",
324
342
  contextApiInput: "最近请求输入(API)",
325
343
  contextChars: "字符",
326
344
  contextSystem: "系统提示词",
@@ -468,24 +486,15 @@ const zh = {
468
486
  drawerPanel: "右侧抽屉",
469
487
  drawerSections: "抽屉入口",
470
488
  drawerPrompts: "提示词",
471
- sideChat: "旁聊",
472
- sideChatModel: "旁聊模型",
473
- sideChatFollowMain: "跟随主会话",
474
- sideChatNew: "新旁聊",
475
- sideChatHistory: "旁聊记录",
476
- sideChatMessages: "旁聊消息",
477
- sideChatQuestion: "旁聊提问",
478
- sideChatPlaceholder: "读到哪里有疑问,就在这里问…",
479
- sideChatEmpty: "边读边问,主会话停在原处",
480
- sideChatHint: "参考主会话,问答独立。记录仅保存在此浏览器。",
481
- sideChatPickSession: "打开一个主会话后,就可以旁聊",
482
- sideChatAnswering: "正在回答…",
483
- sideChatContextTruncated: "背景较长,本次仅参考了部分主会话或旁聊记录。",
484
- sideChatLengthLimited: "已达到本次输出上限,可以继续追问。",
485
- sideChatStorageFailed: "浏览器未能保存旁聊记录,请先保留需要的内容。",
486
489
  setPlugins: "插件",
487
490
  setRemote: "远程连接",
488
491
  remoteBuiltin: "内置插件",
492
+ remotePluginToggle: "启用内置远程连接插件",
493
+ remotePluginOn: "已启用",
494
+ remotePluginOff: "已关闭",
495
+ remotePluginHint: "关闭后不再注入手机排版、也不能开公网入口;局域网入口保留为纯转发,你自己的插件或自建反代指向同一个端口照旧可用。",
496
+ remoteLanPlain: "纯转发(未注入手机排版)",
497
+ remotePublicNeedsPlugin: "需要先启用内置插件",
489
498
  remoteLanTitle: "局域网入口",
490
499
  remoteLanHint: "同一个 WiFi 下的设备直接打开下面地址即可,手机排版已适配。默认开启。链接带登录令牌:点「复制」发到手机,打开就直接登录;令牌即凭据,别发给别人。",
491
500
  remotePublicTitle: "公网入口",
@@ -523,8 +532,6 @@ const zh = {
523
532
  fontChatSizeDesc: "消息正文、用户气泡与输入框",
524
533
  fontUiFamily: "界面字体族",
525
534
  fontUiFamilyDesc: "侧栏、按钮、标签等界面文字使用的字体",
526
- fontMonoFamily: "代码字体族",
527
- fontMonoFamilyDesc: "代码块、diff、行内代码使用的等宽字体",
528
535
  fontCustom: "自定义…",
529
536
  fontCustomPlaceholder: "输入字体栈,如 Fira Code, monospace",
530
537
  language: "界面语言",
@@ -543,6 +550,11 @@ const zh = {
543
550
  modelConfigReopen: "模型配置已保存并立即生效;正在回答的会话在本轮结束后生效。",
544
551
  customModelIdentityNotice: "自定义模型 ID 只是发往该 API 地址的路由名;PiWeb 不会自动下载、接入或识别本机 Ollama 模型。",
545
552
  customApiKeyHint: "可留空改用 auth.json;指向本机/私网的无鉴权服务(Ollama 等)保存时自动填占位值。",
553
+ customHeaders: "自定义请求头",
554
+ customHeadersHint: "需要额外认证头的网关在这里填;探测模型目录与发消息都会带上。值支持 $ENV 或 ${ENV} 读环境变量、!命令 取命令输出,与 models.json 的写法一致。",
555
+ customHeaderName: "名字,如 X-Api-Version",
556
+ customHeaderValue: "值,如 $MY_GATEWAY_TOKEN",
557
+ customHeaderAdd: "添加请求头",
546
558
  modelsTitle: "模型",
547
559
  modelsDesc: "填入各提供方的 API 密钥即可使用其模型。",
548
560
  addProvider: "添加提供方",
@@ -571,8 +583,6 @@ const zh = {
571
583
  displayNameOptional: "显示名称(可选)",
572
584
  modelCatalog: "模型目录",
573
585
  discoverModels: "获取可用模型",
574
- allowPrivateDiscovery: "允许本机/私网",
575
- allowPrivateHint: "模型地址指向本机或私有网络(如 Ollama、LM Studio、one-api 本地网关)时勾选,本次探测放行;发消息不受此限制",
576
586
  discoveringModels: "获取中...",
577
587
  autoDiscovering: "正在自动识别模型…",
578
588
  autoDiscovered: "已自动识别 {n} 个模型(端点报了容量与视觉的已一并填好)",
@@ -646,6 +656,7 @@ const zh = {
646
656
  uninstall: "卸载",
647
657
  confirmUninstallPackage: "确定卸载“{source}”吗?",
648
658
  update: "更新",
659
+ updateNeedsEnable: "已停用的插件要先启用才能更新",
649
660
  pluginConfig: "插件配置",
650
661
  pluginList: "插件列表",
651
662
  pluginPageDesc: "配置和查看本部署已安装的插件。",
@@ -742,26 +753,6 @@ const zh = {
742
753
  viewerOpenFolder: "打开文件夹预览",
743
754
  viewerDirHint: "文件夹:共 {n} 项(已按 .gitignore 过滤)",
744
755
  viewerDirMore: "加载更多",
745
- // 流式输出
746
- streamStyleTitle: "流式输出样式",
747
- streamStyleDesc: "回答逐字出现的方式;改完立刻生效,正在流出的回答也一并换",
748
- streamStyleSmooth: "平滑",
749
- streamStyleSmoothDesc: "匀速长出,不跳字",
750
- streamStyleTypewriter: "打字机",
751
- streamStyleTypewriterDesc: "固定节奏逐字敲出",
752
- streamStyleFade: "渐显",
753
- streamStyleFadeDesc: "整词推进,段落柔和淡入",
754
- streamStyleInstant: "即时",
755
- streamStyleInstantDesc: "立即显示,不做平滑",
756
- streamSpeedTitle: "推进速度",
757
- streamSpeedDesc: "平滑 / 打字机 / 渐显的节奏快慢;即时样式不受影响",
758
- streamSpeed1: "慢",
759
- streamSpeed2: "较慢",
760
- streamSpeed3: "标准",
761
- streamSpeed4: "快",
762
- streamSpeed5: "极快",
763
- streamCaretTitle: "打字光标",
764
- streamCaretDesc: "流式期间在文字末尾显示闪烁光标",
765
756
  } as const;
766
757
 
767
758
  type Dict = { [K in keyof typeof zh]: string };
@@ -793,6 +784,15 @@ const en: Dict = {
793
784
  compacting: "Compacting context…",
794
785
  compactionComplete: "Context compaction complete",
795
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",
796
796
  pickWorkspaceFirst: "Select a workspace first",
797
797
  capacityFields: "Capacities",
798
798
  contextWindowLabel: "Context window",
@@ -808,9 +808,15 @@ const en: Dict = {
808
808
  visionInputImageHint: "Checked means this model accepts images (written into models.json input); unchecked is treated as text-only",
809
809
  visionOn: "Vision",
810
810
  visionOff: "Text only",
811
+ reasoningLabel: "Reasoning",
812
+ reasoningHint: "Whether this model supports reasoning. Left unset, pi treats it as unsupported and the thinking levels disappear from the model picker.",
813
+ reasoningUnset: "Not declared",
814
+ reasoningOn: "Reasoning",
815
+ reasoningOff: "No reasoning",
811
816
  imagePreview: "Click to preview",
812
817
  imageViewer: "Image preview",
813
818
  imageClearAll: "Clear images",
819
+ filesClearAll: "Clear files",
814
820
  imagePrev: "Previous image",
815
821
  imageNext: "Next image",
816
822
  chipExpandMore: "Show {n} more",
@@ -841,6 +847,8 @@ const en: Dict = {
841
847
  stepSearched: "Searched",
842
848
  stepEdited: "Edited",
843
849
  stepWrote: "Wrote",
850
+ skillStep: "Used skill",
851
+ skillStepTitle: "Skill",
844
852
  resultRead: "Read {n} lines",
845
853
  resultFound: "Found {n} matches",
846
854
  resultWrote: "{n} lines",
@@ -966,6 +974,8 @@ const en: Dict = {
966
974
  archiveSession: "Archive session",
967
975
  unarchiveSession: "Unarchive",
968
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.",
969
979
  deleteAllSessions: "Delete all sessions",
970
980
  deleteAllConfirm: "Delete ALL sessions in this workspace? This cannot be undone.",
971
981
  contextInject: "Context",
@@ -1077,7 +1087,6 @@ const en: Dict = {
1077
1087
  contextUnknown: "Context usage unknown",
1078
1088
  contextEstimated: "estimated context usage",
1079
1089
  contextMeasured: "context usage",
1080
- contextBackground: "Main Conversation",
1081
1090
  contextApiInput: "Last request input (API)",
1082
1091
  contextChars: "chars",
1083
1092
  contextSystem: "System prompt",
@@ -1220,24 +1229,15 @@ const en: Dict = {
1220
1229
  drawerPanel: "Drawer",
1221
1230
  drawerSections: "Drawer sections",
1222
1231
  drawerPrompts: "Prompts",
1223
- sideChat: "Side chat",
1224
- sideChatModel: "Side-chat model",
1225
- sideChatFollowMain: "Follow main chat",
1226
- sideChatNew: "New side chat",
1227
- sideChatHistory: "Side-chat history",
1228
- sideChatMessages: "Side-chat messages",
1229
- sideChatQuestion: "Side-chat question",
1230
- sideChatPlaceholder: "Ask about anything you're reading…",
1231
- sideChatEmpty: "Ask as you read. Keep your place.",
1232
- sideChatHint: "Uses the main chat as background. Separate answers, saved only in this browser.",
1233
- sideChatPickSession: "Open a main conversation to start a side chat",
1234
- sideChatAnswering: "Answering…",
1235
- sideChatContextTruncated: "The background is long; this answer uses part of the main or side-chat history.",
1236
- sideChatLengthLimited: "This answer reached its output limit. You can ask it to continue.",
1237
- sideChatStorageFailed: "Your browser could not save the side chat. Keep a copy of anything you need.",
1238
1232
  setPlugins: "Plugins",
1239
1233
  setRemote: "Remote access",
1240
1234
  remoteBuiltin: "Built-in plugin",
1235
+ remotePluginToggle: "Enable the built-in remote access plugin",
1236
+ remotePluginOn: "Enabled",
1237
+ remotePluginOff: "Disabled",
1238
+ remotePluginHint: "When disabled, PiWeb stops injecting the mobile layout and cannot open the public tunnel. The local-network entry stays as a plain forwarder, so your own plugin or reverse proxy can keep pointing at the same port.",
1239
+ remoteLanPlain: "plain forwarding (no mobile layout injected)",
1240
+ remotePublicNeedsPlugin: "Enable the built-in plugin first",
1241
1241
  remoteLanTitle: "Local network",
1242
1242
  remoteLanHint: "Devices on the same Wi-Fi can open the address below; the mobile layout is already applied. On by default. Links carry the login token: copy one to your phone and it signs in directly. The token is a credential — don't share it.",
1243
1243
  remotePublicTitle: "Public access",
@@ -1275,8 +1275,6 @@ const en: Dict = {
1275
1275
  fontChatSizeDesc: "Message body, user bubbles and the composer",
1276
1276
  fontUiFamily: "UI font family",
1277
1277
  fontUiFamilyDesc: "Font used by the sidebar, buttons, labels and other UI text",
1278
- fontMonoFamily: "Code font family",
1279
- fontMonoFamilyDesc: "Monospace font used by code blocks, diffs and inline code",
1280
1278
  fontCustom: "Custom…",
1281
1279
  fontCustomPlaceholder: "Font stack, e.g. Fira Code, monospace",
1282
1280
  language: "Language",
@@ -1295,6 +1293,11 @@ const en: Dict = {
1295
1293
  modelConfigReopen: "Model configuration saved and applied. Sessions that are answering pick it up after the current turn.",
1296
1294
  customModelIdentityNotice: "A custom model ID is only a route name sent to that API endpoint. PiWeb does not automatically download, attach, or identify local Ollama models.",
1297
1295
  customApiKeyHint: "Leave blank to use auth.json. Keyless local/private services (Ollama etc.) get a placeholder key automatically on save.",
1296
+ customHeaders: "Custom headers",
1297
+ customHeadersHint: "For gateways that need extra auth headers. They are sent for both model discovery and chat requests. Values accept $ENV / ${ENV} for environment variables and a leading !command, the same syntax as models.json.",
1298
+ customHeaderName: "Name, e.g. X-Api-Version",
1299
+ customHeaderValue: "Value, e.g. $MY_GATEWAY_TOKEN",
1300
+ customHeaderAdd: "Add header",
1298
1301
  modelsTitle: "Models",
1299
1302
  modelsDesc: "Enter an API key for each provider to use its models.",
1300
1303
  addProvider: "Add provider",
@@ -1323,8 +1326,6 @@ const en: Dict = {
1323
1326
  displayNameOptional: "Display name (optional)",
1324
1327
  modelCatalog: "Model catalog",
1325
1328
  discoverModels: "Fetch available models",
1326
- allowPrivateDiscovery: "Allow local/private",
1327
- allowPrivateHint: "Check this when the model address points to loopback or a private network (Ollama, LM Studio, one-api gateways) to allow this probe; chat requests are not affected",
1328
1329
  discoveringModels: "Fetching...",
1329
1330
  autoDiscovering: "Detecting models…",
1330
1331
  autoDiscovered: "Detected {n} models (capacity and vision filled in where the endpoint reports them)",
@@ -1398,6 +1399,7 @@ const en: Dict = {
1398
1399
  uninstall: "Uninstall",
1399
1400
  confirmUninstallPackage: "Uninstall \"{source}\"?",
1400
1401
  update: "Update",
1402
+ updateNeedsEnable: "Enable this plugin before updating it",
1401
1403
  pluginConfig: "Plugin config",
1402
1404
  pluginList: "Plugin list",
1403
1405
  pluginPageDesc: "Configure and view installed plugins for this deployment.",
@@ -1493,26 +1495,6 @@ const en: Dict = {
1493
1495
  viewerOpenFolder: "Preview folder",
1494
1496
  viewerDirHint: "Folder: {n} items (ignored files hidden)",
1495
1497
  viewerDirMore: "Load more",
1496
- // Streaming text
1497
- streamStyleTitle: "Streaming text",
1498
- streamStyleDesc: "How the answer appears while it arrives; applies to the stream already running",
1499
- streamStyleSmooth: "Smooth",
1500
- streamStyleSmoothDesc: "Even pace, no jumps",
1501
- streamStyleTypewriter: "Typewriter",
1502
- streamStyleTypewriterDesc: "Fixed cadence, character by character",
1503
- streamStyleFade: "Fade in",
1504
- streamStyleFadeDesc: "Whole words, paragraphs fade in",
1505
- streamStyleInstant: "Instant",
1506
- streamStyleInstantDesc: "Show immediately, no smoothing",
1507
- streamSpeedTitle: "Streaming speed",
1508
- streamSpeedDesc: "Cadence for Smooth / Typewriter / Fade in; Instant ignores it",
1509
- streamSpeed1: "Slow",
1510
- streamSpeed2: "Relaxed",
1511
- streamSpeed3: "Standard",
1512
- streamSpeed4: "Fast",
1513
- streamSpeed5: "Fastest",
1514
- streamCaretTitle: "Typing caret",
1515
- streamCaretDesc: "Blinking caret at the end of the text while streaming",
1516
1498
  };
1517
1499
 
1518
1500
  const dicts: Record<string, Dict> = { zh, en };