pisper 0.5.4-linux-x64.0 → 0.5.4

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 (295) hide show
  1. package/README.en.md +224 -0
  2. package/README.md +78 -78
  3. package/bin/pisper.mjs +48 -0
  4. package/lib/install.mjs +392 -0
  5. package/lib/npm-platform.mjs +41 -0
  6. package/lib/npm-update.mjs +165 -0
  7. package/lib/platform.mjs +43 -0
  8. package/lib/postinstall.mjs +3 -0
  9. package/package.json +36 -14
  10. package/updater.pubkey +1 -0
  11. package/web/.vite/manifest.json +2326 -0
  12. package/web/assets/AnimatedContent-BiVNqD3m.js +1 -0
  13. package/web/assets/AnimatedList-D6P3Wwa6.js +1 -0
  14. package/web/assets/AppOverlays-B3MsrwJU.js +1 -0
  15. package/web/assets/AppSelect--1KIt1sL.js +1 -0
  16. package/web/assets/AssetsPage-BQuisV8m.js +1 -0
  17. package/web/assets/ChannelsPage-ch7Qx8In.js +1 -0
  18. package/web/assets/ChatHistoryPage-D1Vo9glz.js +1 -0
  19. package/web/assets/ChatPage-BH9BIId-.js +8 -0
  20. package/web/assets/ClickSpark-BxLJ1PyT.js +1 -0
  21. package/web/assets/ConfigPage-DioyBKgQ.js +1 -0
  22. package/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  23. package/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  24. package/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  25. package/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  26. package/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  27. package/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  28. package/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  29. package/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  30. package/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  31. package/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  32. package/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  33. package/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  34. package/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  35. package/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  36. package/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  37. package/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  38. package/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  39. package/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  40. package/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  41. package/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  42. package/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  43. package/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  44. package/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  45. package/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  46. package/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  47. package/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  48. package/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  49. package/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  50. package/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  51. package/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  52. package/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  53. package/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  54. package/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  55. package/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  56. package/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  57. package/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  58. package/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  59. package/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  60. package/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  61. package/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  62. package/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  63. package/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  64. package/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  65. package/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  66. package/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  67. package/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  68. package/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  69. package/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  70. package/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  71. package/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  72. package/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  73. package/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  74. package/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  75. package/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  76. package/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  77. package/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  78. package/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  79. package/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  80. package/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  81. package/web/assets/MarkdownMessage-BfgYFCmq.js +1 -0
  82. package/web/assets/MemoryPage-DfY7Zv4q.js +1 -0
  83. package/web/assets/PageHeader-DOuDNCQ2.js +1 -0
  84. package/web/assets/PluginsPage-DjRBo7WF.js +1 -0
  85. package/web/assets/PreviewPages-DiOw1MH7.js +1 -0
  86. package/web/assets/SchedulesPage-Df0PZLFi.js +1 -0
  87. package/web/assets/ShinyText-K2BPzduJ.js +1 -0
  88. package/web/assets/SkillsPage-B5EVXpQ_.js +1 -0
  89. package/web/assets/StarOrbit-BlI6MhVr.js +1 -0
  90. package/web/assets/TerminalPanel-BrP-ENHg.css +1 -0
  91. package/web/assets/TerminalPanel-C7SEm2I_.js +18 -0
  92. package/web/assets/Threads-CS40baGh.js +1 -0
  93. package/web/assets/WelcomeEffects-CJuFsgxP.js +1 -0
  94. package/web/assets/WorkflowsPage-BXfJfjSj.js +1 -0
  95. package/web/assets/alert-B7D8joCd.js +1 -0
  96. package/web/assets/andromeeda-vGVdxbeo.js +1 -0
  97. package/web/assets/angular-html-17rlCfBS.js +1 -0
  98. package/web/assets/angular-ts-it3MaXWH.js +1 -0
  99. package/web/assets/app-primitives-C-B082Z7.js +1 -0
  100. package/web/assets/astro-BEVDzCov.js +1 -0
  101. package/web/assets/aurora-x-CDeNXAV0.js +1 -0
  102. package/web/assets/ayu-dark-DluEY0Gj.js +1 -0
  103. package/web/assets/ayu-light-C3h-C4tm.js +1 -0
  104. package/web/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  105. package/web/assets/badge-BNonIEif.js +1 -0
  106. package/web/assets/blade-B3yUZIOx.js +1 -0
  107. package/web/assets/brand-CFOXmGdd.js +1 -0
  108. package/web/assets/c-aGSZMVdM.js +1 -0
  109. package/web/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
  110. package/web/assets/catppuccin-latte-CtsyrtPq.js +1 -0
  111. package/web/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
  112. package/web/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
  113. package/web/assets/chevron-down-DybEa6xm.js +1 -0
  114. package/web/assets/circle-dot-BdcN0YM6.js +1 -0
  115. package/web/assets/code-block-U_4-_YZY.js +1 -0
  116. package/web/assets/coffee-ouOQ86EC.js +1 -0
  117. package/web/assets/copy-O4BLU533.js +1 -0
  118. package/web/assets/cpp-Bm3vm43L.js +1 -0
  119. package/web/assets/createLucideIcon-BEEvpXLl.js +1 -0
  120. package/web/assets/css-CWcS1xXm.js +1 -0
  121. package/web/assets/csv-Dx-8-gkx.js +1 -0
  122. package/web/assets/dark-plus-Cs2F2srj.js +1 -0
  123. package/web/assets/dist-BKKRgL0M.js +1 -0
  124. package/web/assets/dist-BPctzC7e.js +1 -0
  125. package/web/assets/dist-BmM8XOsV.js +1 -0
  126. package/web/assets/dist-D7NVw93i.js +1 -0
  127. package/web/assets/dracula-BHWKrbxM.js +1 -0
  128. package/web/assets/dracula-soft-5eyTD99u.js +1 -0
  129. package/web/assets/es2015-DSXvIagS.js +41 -0
  130. package/web/assets/everforest-dark-sB-x3p7T.js +1 -0
  131. package/web/assets/everforest-light-Df2xbC6M.js +1 -0
  132. package/web/assets/eye-BMzzoABY.js +1 -0
  133. package/web/assets/file-CvhJitS9.js +1 -0
  134. package/web/assets/file-code-corner-lCJOIDbw.js +1 -0
  135. package/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  136. package/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  137. package/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  138. package/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  139. package/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  140. package/web/assets/github-dark-C-LZuMrd.js +1 -0
  141. package/web/assets/github-dark-default-DXG-b-1a.js +1 -0
  142. package/web/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  143. package/web/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  144. package/web/assets/github-light-EUqPIrTm.js +1 -0
  145. package/web/assets/github-light-default-BXViO-2h.js +1 -0
  146. package/web/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  147. package/web/assets/glsl-TOBAB6bO.js +1 -0
  148. package/web/assets/graphql-BEmIBNve.js +1 -0
  149. package/web/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  150. package/web/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  151. package/web/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  152. package/web/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  153. package/web/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  154. package/web/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  155. package/web/assets/haml-CDWtFtU9.js +1 -0
  156. package/web/assets/handlebars-BNtjo3pL.js +1 -0
  157. package/web/assets/horizon-CE9ld1lL.js +1 -0
  158. package/web/assets/horizon-bright-DSNQnXHK.js +1 -0
  159. package/web/assets/houston-CsvMBhTu.js +1 -0
  160. package/web/assets/html-BVyvp26C.js +1 -0
  161. package/web/assets/html-derivative-BseLpURQ.js +1 -0
  162. package/web/assets/http-CkCfSMV9.js +1 -0
  163. package/web/assets/hurl-syYMt6Rn.js +1 -0
  164. package/web/assets/image-M6XRBbhu.js +1 -0
  165. package/web/assets/imba-DsUTQ-LC.js +1 -0
  166. package/web/assets/index-CsancOLh.js +6 -0
  167. package/web/assets/index-DpxwLREi.css +2 -0
  168. package/web/assets/java-duG_UTKe.js +1 -0
  169. package/web/assets/javascript-DWVbOe4X.js +1 -0
  170. package/web/assets/jinja-Boj4niAz.js +1 -0
  171. package/web/assets/jison-CHwnC1Pv.js +1 -0
  172. package/web/assets/json-qhed-kSA.js +1 -0
  173. package/web/assets/json5-BR5RXkoi.js +1 -0
  174. package/web/assets/jsonc-CYpm1nAK.js +1 -0
  175. package/web/assets/jsonl-CmCQp5Yx.js +1 -0
  176. package/web/assets/jsx-fcCEM_-L.js +1 -0
  177. package/web/assets/julia-VoF7UKfw.js +1 -0
  178. package/web/assets/kanagawa-dragon-Bozd7klA.js +1 -0
  179. package/web/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
  180. package/web/assets/kanagawa-wave-BML5mF2J.js +1 -0
  181. package/web/assets/laserwave-C_8bwKvT.js +1 -0
  182. package/web/assets/less-DVTAwKKz.js +1 -0
  183. package/web/assets/light-plus-DVQuIRkW.js +1 -0
  184. package/web/assets/link-2-Dd2E7M_B.js +1 -0
  185. package/web/assets/markdown-BYOwaDjH.js +1 -0
  186. package/web/assets/marko-Cupn1xhw.js +1 -0
  187. package/web/assets/material-theme-Bm3Qr25_.js +1 -0
  188. package/web/assets/material-theme-darker-2IIEA8gg.js +1 -0
  189. package/web/assets/material-theme-lighter-uhdI0v04.js +1 -0
  190. package/web/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  191. package/web/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  192. package/web/assets/mdc-4FfK5iWR.js +1 -0
  193. package/web/assets/mdx-DQZ5AkYe.js +1 -0
  194. package/web/assets/message-circle-Bi-lz-6t.js +1 -0
  195. package/web/assets/min-dark-BSWPekZh.js +1 -0
  196. package/web/assets/min-light-DDpmG2fV.js +1 -0
  197. package/web/assets/monokai-B_bV9PQ9.js +1 -0
  198. package/web/assets/network-UhG-ym-z.js +1 -0
  199. package/web/assets/night-owl-DhmEMT88.js +1 -0
  200. package/web/assets/night-owl-light-eJ-hLW7d.js +1 -0
  201. package/web/assets/nord-Cb4Vim4T.js +1 -0
  202. package/web/assets/one-dark-pro-CLwyXe_n.js +1 -0
  203. package/web/assets/one-light-D7Lr4KcI.js +1 -0
  204. package/web/assets/panel-top-BnVDkV60.js +1 -0
  205. package/web/assets/paperclip-D7mny7G8.js +1 -0
  206. package/web/assets/pencil-DpO4AUNy.js +1 -0
  207. package/web/assets/php-CUREQQ7f.js +1 -0
  208. package/web/assets/pick-system-directory-DGlbZa_s.js +1 -0
  209. package/web/assets/plastic-DQwYfKfQ.js +1 -0
  210. package/web/assets/play-3QiwbcM7.js +1 -0
  211. package/web/assets/plus-CI2ql0x4.js +1 -0
  212. package/web/assets/poimandres-DRFjx7u4.js +1 -0
  213. package/web/assets/postcss-BXeXVLqQ.js +1 -0
  214. package/web/assets/progress-Cq8AiS7g.js +6 -0
  215. package/web/assets/pug-CQyGKZpv.js +1 -0
  216. package/web/assets/python-gzcpVVnB.js +1 -0
  217. package/web/assets/r-C5FwQflr.js +1 -0
  218. package/web/assets/react-bits-BFnYwuxx.css +1 -0
  219. package/web/assets/red-DX1BQOs8.js +1 -0
  220. package/web/assets/regexp--aR2_iz7.js +1 -0
  221. package/web/assets/rolldown-runtime-B0Z9INg1.js +1 -0
  222. package/web/assets/rose-pine-aMsaMD1D.js +1 -0
  223. package/web/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
  224. package/web/assets/rose-pine-moon-DO-qXg-I.js +1 -0
  225. package/web/assets/sass-DXrisJhu.js +1 -0
  226. package/web/assets/save-D--1z1bw.js +1 -0
  227. package/web/assets/scss-Davl4E3T.js +1 -0
  228. package/web/assets/search-CVBbTPAG.js +1 -0
  229. package/web/assets/shellscript-CLZ0U2zV.js +1 -0
  230. package/web/assets/shield-check-mwXhKsZm.js +1 -0
  231. package/web/assets/slack-dark-DnToyrRv.js +1 -0
  232. package/web/assets/slack-ochin-B2OO5cIa.js +1 -0
  233. package/web/assets/smithy-Dgaz7aur.js +1 -0
  234. package/web/assets/snazzy-light-4G7pJPwS.js +1 -0
  235. package/web/assets/solarized-dark-UdsmMDCL.js +1 -0
  236. package/web/assets/solarized-light-C1IUL_tW.js +1 -0
  237. package/web/assets/sql-b92rrcVl.js +1 -0
  238. package/web/assets/square-C7qN58NE.js +1 -0
  239. package/web/assets/square-terminal-C9TjK-fA.js +1 -0
  240. package/web/assets/storage-BbqIMx9Y.js +1 -0
  241. package/web/assets/stylus-B6D30XZt.js +1 -0
  242. package/web/assets/svelte-BfstjgUc.js +1 -0
  243. package/web/assets/switch-yuukHc6k.js +1 -0
  244. package/web/assets/synthwave-84-nFMaYfgc.js +1 -0
  245. package/web/assets/tabs-Db9JGL3O.js +1 -0
  246. package/web/assets/terminal-ClxNGVIF.js +1 -0
  247. package/web/assets/terminal-DOxWTw7v.js +2 -0
  248. package/web/assets/tokyo-night-oM2G3aXe.js +1 -0
  249. package/web/assets/trash-2-CATziWCd.js +1 -0
  250. package/web/assets/ts-tags-Cckpt1jI.js +1 -0
  251. package/web/assets/tsx-JMDX3aQ7.js +1 -0
  252. package/web/assets/typescript-BAz-bF8J.js +1 -0
  253. package/web/assets/use-i18n-D2G2DZz-.js +1 -0
  254. package/web/assets/usePagePrimaryAction-Bw0OFTDZ.js +1 -0
  255. package/web/assets/utils-C8uzG5AZ.js +1 -0
  256. package/web/assets/vendor-dockview-D5adAaCg.css +1 -0
  257. package/web/assets/vendor-dockview-yY5mBM3U.js +1 -0
  258. package/web/assets/vendor-markdown-lQaMEIxc.js +130 -0
  259. package/web/assets/vendor-markdown-plugins-ERG5SnGL.js +263 -0
  260. package/web/assets/vendor-motion-XxgxfZSY.js +9 -0
  261. package/web/assets/vendor-react-CHuvPdJE.js +9 -0
  262. package/web/assets/vendor-router-Bw2aAdMs.js +4 -0
  263. package/web/assets/vendor-shiki-runtime-DFSfH2tH.js +153 -0
  264. package/web/assets/vendor-state-DE1O_s6m.js +1 -0
  265. package/web/assets/vendor-ui-DvrYggeS.js +1 -0
  266. package/web/assets/vendor-xyflow-CnjXtcyK.js +7 -0
  267. package/web/assets/vendor-xyflow-DLioOiRN.css +1 -0
  268. package/web/assets/vesper-DdrHHSXu.js +1 -0
  269. package/web/assets/vitesse-black-fwtXNY1n.js +1 -0
  270. package/web/assets/vitesse-dark-BZCL-v6S.js +1 -0
  271. package/web/assets/vitesse-light-VbXTXTou.js +1 -0
  272. package/web/assets/vue-3H7P6ncC.js +1 -0
  273. package/web/assets/vue-html-DZGW9MGR.js +1 -0
  274. package/web/assets/vue-vine-BECt67gq.js +1 -0
  275. package/web/assets/wasm-BnjxR4X6.js +1 -0
  276. package/web/assets/wasm-ByWQv1Qj.js +1 -0
  277. package/web/assets/wgsl-BsKzXJz4.js +1 -0
  278. package/web/assets/wit-DdvCle-K.js +1 -0
  279. package/web/assets/wrench-BaMct6KV.js +1 -0
  280. package/web/assets/xml-CNfvW5JP.js +1 -0
  281. package/web/assets/yaml-rwi0_p6S.js +1 -0
  282. package/web/assets/zap-Ch1TQ5QU.js +1 -0
  283. package/web/favicon.svg +25 -0
  284. package/web/icons.svg +24 -0
  285. package/web/index.html +57 -0
  286. package/web/memory-galaxy-background.webp +0 -0
  287. package/web/notification-sw.js +13 -0
  288. package/web/release-notes.json +5 -0
  289. package/web/tauri-pet.css +117 -0
  290. package/web/tauri-pet.html +16 -0
  291. package/web/tauri-pet.js +117 -0
  292. package/components/runtime/Pisper_Runtime_Node_0.5.4_linux_x86_64.tar.gz +0 -0
  293. package/components/runtime/Pisper_Runtime_Node_0.5.4_linux_x86_64.tar.gz.sig +0 -1
  294. package/components/tui/Pisper_TUI_Component_0.5.2_linux_x86_64.tar.gz +0 -0
  295. package/components/tui/Pisper_TUI_Component_0.5.2_linux_x86_64.tar.gz.sig +0 -1
package/README.en.md ADDED
@@ -0,0 +1,224 @@
1
+ <p align="right"><a href="./README.md">简体中文</a> · <strong>English</strong></p>
2
+
3
+ <a id="top"></a>
4
+
5
+ <p align="center">
6
+ <img src="docs/brand/pisper-logo.svg" width="112" alt="Pisper project logo" />
7
+ </p>
8
+
9
+ <h1 align="center">Pisper</h1>
10
+
11
+ <p align="center"><strong>A local-first Agent application powered by Pi</strong></p>
12
+
13
+ <p align="center">
14
+ <img src="https://img.shields.io/badge/Node.js-17141F?style=flat-square&logo=nodedotjs&logoColor=F59E0B" alt="Node.js" />
15
+ <img src="https://img.shields.io/badge/TypeScript-17141F?style=flat-square&logo=typescript&logoColor=F59E0B" alt="TypeScript" />
16
+ <img src="https://img.shields.io/badge/React-17141F?style=flat-square&logo=react&logoColor=F59E0B" alt="React" />
17
+ <img src="https://img.shields.io/badge/Tauri-17141F?style=flat-square&logo=tauri&logoColor=F59E0B" alt="Tauri" />
18
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-F59E0B?style=flat-square" alt="MIT License" /></a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="https://github.com/ling-kong-ran/pisper/releases/latest">
23
+ <img src="https://img.shields.io/badge/Download%20Desktop-Windows%20%7C%20macOS%20%7C%20Linux-F59E0B?style=for-the-badge&logo=github&logoColor=17141F" alt="Download Pisper desktop" />
24
+ </a>
25
+ </p>
26
+
27
+ <a id="sponsors"></a>
28
+
29
+ ## ❤️ Sponsors
30
+
31
+ Thanks to the following partners for supporting the Pisper community. If you'd like to appear here too, feel free to reach out via [Issues](https://github.com/ling-kong-ran/pisper/issues).
32
+
33
+ <details open>
34
+ <summary>View sponsors</summary>
35
+
36
+ <table>
37
+ <tr>
38
+ <td width="180" align="center">
39
+ <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH"><strong>Matrix</strong></a>
40
+ </td>
41
+ <td>
42
+ Thanks to <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">Matrix</a> for supporting the Pisper community. Registering through <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">this link</a> may generate referral revenue for the project.
43
+ </td>
44
+ </tr>
45
+ </table>
46
+
47
+ > Sponsor links contain a referral parameter. Sponsor content is not targeted using conversations, workspaces, providers, models, or API configuration, and Pisper does not send that data to sponsors. The public configuration for the in-app sponsor placement is maintained in [`docs/sponsors.json`](./docs/sponsors.json).
48
+
49
+ </details>
50
+
51
+ <p align="center">
52
+ <a href="#overview">Overview</a> ·
53
+ <a href="https://ling-kong-ran.github.io/pisper/">Project Site</a> ·
54
+ <a href="#features">Features</a> ·
55
+ <a href="#data-safety">Data Safety</a> ·
56
+ <a href="#desktop-pet">Desktop Pet</a> ·
57
+ <a href="#install">Install</a> ·
58
+ <a href="#tui">Terminal Client</a> ·
59
+ <a href="#development">Development</a> ·
60
+ <a href="#sponsors">Sponsors</a> ·
61
+ <a href="#license">License</a>
62
+ </p>
63
+
64
+ ---
65
+
66
+ <a id="overview"></a>
67
+
68
+ ## Overview
69
+
70
+ Pisper is a desktop and terminal client built on [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent), with multiple sessions, Tools, Skills, MCP, automation, and per-session permissions.
71
+
72
+ See the [Pisper project site](https://ling-kong-ran.github.io/pisper/) for the product overview and interface preview.
73
+
74
+ ### Get Started in Three Steps
75
+
76
+ 1. [Download the desktop app](https://github.com/ling-kong-ran/pisper/releases/latest) (Windows / macOS / Linux, no Node.js required)
77
+ 2. Configure any model provider with an API key
78
+ 3. Create a session and start working in parallel
79
+
80
+ <a id="features"></a>
81
+
82
+ ## Features
83
+
84
+ - **Multiple sessions:** independent models, context, workspaces, and permissions with Dock splits and layout restoration.
85
+ - **Tools, Skills, and MCP:** manage capabilities and call permissions in one place.
86
+ - **Subagents:** run temporary tasks in isolated contexts and return results to the parent session.
87
+ - **Memory and multimodal input:** retrieve project memory and process images, documents, and code.
88
+ - **Automation and channels:** schedules, visual workflows, Feishu, and personal Weixin.
89
+ - **Desktop and terminal:** Tauri desktop app and Ratatui TUI.
90
+ - **Permission controls:** `Read only / Full access` execution modes, one-shot approval, and credential isolation.
91
+
92
+ <a id="data-safety"></a>
93
+
94
+ ## Data Safety & Privacy
95
+
96
+ Pisper is local-first and does not provide a cloud service that hosts or relays conversations. Sessions and settings are stored under `~/.pisper/agent` by default; set `PISPER_AGENT_DIR` to move them.
97
+
98
+ - The Runtime listens on `127.0.0.1` by default, and Pi telemetry is disabled by default.
99
+ - Model calls and enabled remote services such as MCP, Web search, and messaging receive the data required for each request.
100
+ - Common credential formats are redacted at storage and display boundaries, but this is not a replacement for DLP or end-to-end encryption. Protect the local Agent data directory and its backups.
101
+
102
+ <a id="desktop-pet"></a>
103
+
104
+ ## Desktop Pet
105
+
106
+ Pisper supports [Petdex](https://petdex.dev)-compatible pets. Install and manage them under **Settings → Desktop pet**. See [`docs/petdex-integration.md`](./docs/petdex-integration.md).
107
+
108
+ <a id="install"></a>
109
+
110
+ ## Install
111
+
112
+ ### Desktop (Recommended)
113
+
114
+ Download a Windows, macOS, or Linux installer from [GitHub Releases](https://github.com/ling-kong-ran/pisper/releases/latest). It works out of the box — no separate Node.js install is required.
115
+
116
+ #### If macOS Refuses to Open Pisper
117
+
118
+ Pisper is not currently notarized by Apple. Confirm that it came from the official Releases page, then select **Open Anyway** in **System Settings → Privacy & Security**. If that option is unavailable, run:
119
+
120
+ ```bash
121
+ sudo xattr -rd com.apple.quarantine /Applications/Pisper.app
122
+ ```
123
+
124
+ Use this command only for Pisper downloaded from the official Releases page and placed in `/Applications`.
125
+
126
+ #### If the Linux AppImage Does Not Start
127
+
128
+ ```bash
129
+ chmod +x Pisper_*_linux_x86_64.AppImage
130
+ ./Pisper_*_linux_x86_64.AppImage
131
+ ```
132
+
133
+ If FUSE is missing, install `libfuse2` or `libfuse2t64`, or use the `.deb` package:
134
+
135
+ ```bash
136
+ sudo apt install ./Pisper-*-linux-amd64.deb
137
+ ```
138
+
139
+ ### Component Updates
140
+
141
+ **Settings → Updates** in the desktop app is the unified update entry point. A single **Check for updates** action checks the Desktop package, TUI client, and Runtime together. Install controls appear only for components with a newer version, so a small component update does not require downloading the full desktop installer. Each component uses an independent signed Release channel. Runtime updates take effect after restarting the app, and Pisper falls back to the versions bundled with the desktop package if an installed component is unavailable or fails to start.
142
+
143
+ <a id="tui"></a>
144
+
145
+ ### Terminal Client (TUI)
146
+
147
+ With Node.js 20+, you can install the Pisper CLI through npm. npm obtains the lightweight launcher, platform-independent Web frontend, and signed TUI and Runtime packages for the current platform from the configured registry, without downloading from GitHub Releases. Installation verifies and extracts the local component packages so Pisper is ready when the command returns; it does not install the desktop shell:
148
+
149
+ ```bash
150
+ npm install -g pisper --progress=true --foreground-scripts
151
+ pisper
152
+ pisper update --check # check the complete distribution through the npm registry
153
+ pisper update # update the launcher, Web, TUI, and Runtime through npm
154
+ ```
155
+
156
+ Platform packages use the same registry when an npm mirror is configured. `--progress=true` shows npm download progress, while `--foreground-scripts` shows local signature verification and extraction; add `--loglevel=info` only when request and cache details are needed:
157
+
158
+ ```bash
159
+ npm install -g pisper --registry=https://registry.npmmirror.com --progress=true --foreground-scripts
160
+ ```
161
+
162
+ After entering the TUI for the first time, use `/provider` to choose a Provider and edit its protocol, effective Base URL, and masked API key. The official default Base URL is shown when no override exists, and leaving API Key blank preserves the saved secret. `/model` lists only models from configured Providers. For a known Provider, `/provider <id>` skips the picker (`/apikey` remains a compatible alias). For visual configuration, run `pisper web`; Pisper uses the Web frontend bundled in the npm package and opens an authenticated, localhost-only settings page in your default browser. **Save Provider settings** does not change the default model; only **Set as default Provider** changes the default for later sessions.
163
+
164
+ After installing the desktop app, you can also install the `pisper` command from **Settings → App updates**. The first installation remains explicit; after later desktop updates restart Pisper, it automatically refreshes this managed terminal client:
165
+
166
+ ```bash
167
+ pisper # start a new conversation
168
+ pisper resume # resume from a list across all workspaces
169
+ pisper doctor # diagnose the runtime
170
+ pisper web # open Web settings
171
+ pisper --help # show complete onboarding and command help
172
+ ```
173
+
174
+ The npm distribution has one complete `pisper update` command. It uses the configured npm registry to update the launcher, Web, TUI, and Runtime; `pisper update --check` only queries and does not install, and component names are not accepted. The standalone TUI exposes no component-update command; the desktop distribution is managed through **Settings → App updates**. See the **[Pisper TUI user guide](./src-tui/README.en.md)** for installation, commands, keyboard controls, attachments, execution modes, and approvals.
175
+
176
+ ### Run from Source
177
+
178
+ Requires Node.js 20+, npm, and at least one model provider with an API key.
179
+
180
+ ```bash
181
+ git clone https://github.com/ling-kong-ran/pisper.git
182
+ cd pisper
183
+ npm install
184
+ npm run dev
185
+ ```
186
+
187
+ Desktop development and packaging:
188
+
189
+ ```bash
190
+ npm run desktop:webview:dev
191
+ npm run desktop:webview:build
192
+ ```
193
+
194
+ Data is stored under `~/.pisper/agent` by default. Set `PISPER_AGENT_DIR` to use another location.
195
+
196
+ <a id="development"></a>
197
+
198
+ ## Development
199
+
200
+ Main stack: React, TypeScript, Tauri, Rust, Node SEA, and Pi Coding Agent.
201
+
202
+ ```bash
203
+ npm run check
204
+ npm test
205
+ npm run build
206
+ ```
207
+
208
+ [Issues](https://github.com/ling-kong-ran/pisper/issues) and [pull requests](https://github.com/ling-kong-ran/pisper/pulls) are welcome. Do not commit API keys, bot credentials, or personal data from `~/.pisper/agent`.
209
+
210
+ <a id="license"></a>
211
+
212
+ ## License
213
+
214
+ Pisper is released under the [MIT License](./LICENSE). Third-party dependencies and community resources retain their own licenses.
215
+
216
+ ## Acknowledgments
217
+
218
+ Thanks to [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent), [Petdex](https://petdex.dev), and the open-source software used by this project.
219
+
220
+ Contributors:
221
+
222
+ - [@mik-myp](https://github.com/mik-myp) — Frontend TypeScript architecture, shadcn/ui / AI Elements, Zustand, and i18n refactor ([#1](https://github.com/ling-kong-ran/pisper/pull/1))
223
+
224
+ <p align="right"><a href="#top">Back to top ↑</a></p>
package/README.md CHANGED
@@ -1,14 +1,14 @@
1
- <p align="right"><a href="./README.md">简体中文</a> · <strong>English</strong></p>
1
+ <p align="right"><strong>简体中文</strong> · <a href="./README.en.md">English</a></p>
2
2
 
3
3
  <a id="top"></a>
4
4
 
5
5
  <p align="center">
6
- <img src="docs/brand/pisper-logo.svg" width="112" alt="Pisper project logo" />
6
+ <img src="docs/brand/pisper-logo.svg" width="112" alt="Pisper 项目标志" />
7
7
  </p>
8
8
 
9
9
  <h1 align="center">Pisper</h1>
10
10
 
11
- <p align="center"><strong>A local-first Agent application powered by Pi</strong></p>
11
+ <p align="center"><strong>Pi 驱动的本地 Agent 应用</strong></p>
12
12
 
13
13
  <p align="center">
14
14
  <img src="https://img.shields.io/badge/Node.js-17141F?style=flat-square&logo=nodedotjs&logoColor=F59E0B" alt="Node.js" />
@@ -20,18 +20,18 @@
20
20
 
21
21
  <p align="center">
22
22
  <a href="https://github.com/ling-kong-ran/pisper/releases/latest">
23
- <img src="https://img.shields.io/badge/Download%20Desktop-Windows%20%7C%20macOS%20%7C%20Linux-F59E0B?style=for-the-badge&logo=github&logoColor=17141F" alt="Download Pisper desktop" />
23
+ <img src="https://img.shields.io/badge/下载桌面版-Windows%20%7C%20macOS%20%7C%20Linux-F59E0B?style=for-the-badge&logo=github&logoColor=17141F" alt="下载 Pisper 桌面版" />
24
24
  </a>
25
25
  </p>
26
26
 
27
27
  <a id="sponsors"></a>
28
28
 
29
- ## ❤️ Sponsors
29
+ ## ❤️ 赞助
30
30
 
31
- Thanks to the following partners for supporting the Pisper community. If you'd like to appear here too, feel free to reach out via [Issues](https://github.com/ling-kong-ran/pisper/issues).
31
+ 感谢以下合作伙伴对 Pisper 社区的支持。如果你也希望出现在这里,欢迎通过 [Issue](https://github.com/ling-kong-ran/pisper/issues) 联系我们。
32
32
 
33
33
  <details open>
34
- <summary>View sponsors</summary>
34
+ <summary>查看赞助商</summary>
35
35
 
36
36
  <table>
37
37
  <tr>
@@ -39,143 +39,143 @@ Thanks to the following partners for supporting the Pisper community. If you'd l
39
39
  <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH"><strong>Matrix</strong></a>
40
40
  </td>
41
41
  <td>
42
- Thanks to <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">Matrix</a> for supporting the Pisper community. Registering through <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">this link</a> may generate referral revenue for the project.
42
+ 感谢 <a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">Matrix</a> 对 Pisper 社区的支持。通过<a href="https://matrix.000328.xyz/sign-up?aff=ZPeH">此链接</a>注册,可能为 Pisper 项目带来推广收益。
43
43
  </td>
44
44
  </tr>
45
45
  </table>
46
46
 
47
- > Sponsor links contain a referral parameter. Sponsor content is not targeted using conversations, workspaces, providers, models, or API configuration, and Pisper does not send that data to sponsors. The public configuration for the in-app sponsor placement is maintained in [`docs/sponsors.json`](./docs/sponsors.json).
47
+ > 赞助链接包含推广参数。Pisper 的赞助内容不会使用会话、工作区、Provider、模型或 API 配置进行定向,也不会向赞助商发送这些数据。客户端赞助位的公开配置维护在 [`docs/sponsors.json`](./docs/sponsors.json)。
48
48
 
49
49
  </details>
50
50
 
51
51
  <p align="center">
52
- <a href="#overview">Overview</a> ·
53
- <a href="https://ling-kong-ran.github.io/pisper/">Project Site</a> ·
54
- <a href="#features">Features</a> ·
55
- <a href="#data-safety">Data Safety</a> ·
56
- <a href="#desktop-pet">Desktop Pet</a> ·
57
- <a href="#install">Install</a> ·
58
- <a href="#tui">Terminal Client</a> ·
59
- <a href="#development">Development</a> ·
60
- <a href="#sponsors">Sponsors</a> ·
61
- <a href="#license">License</a>
52
+ <a href="#overview">简介</a> ·
53
+ <a href="https://ling-kong-ran.github.io/pisper/">项目主页</a> ·
54
+ <a href="#features">功能</a> ·
55
+ <a href="#data-safety">数据安全</a> ·
56
+ <a href="#desktop-pet">桌面宠物</a> ·
57
+ <a href="#install">安装</a> ·
58
+ <a href="#tui">终端客户端</a> ·
59
+ <a href="#development">开发</a> ·
60
+ <a href="#sponsors">赞助</a> ·
61
+ <a href="#license">许可</a>
62
62
  </p>
63
63
 
64
64
  ---
65
65
 
66
66
  <a id="overview"></a>
67
67
 
68
- ## Overview
68
+ ## 简介
69
69
 
70
- Pisper is a desktop and terminal client built on [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent), with multiple sessions, Tools, Skills, MCP, automation, and per-session permissions.
70
+ Pisper 是基于 [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent) 的桌面与终端客户端,支持多会话、工具、Skills、MCP、自动化和会话级权限。
71
71
 
72
- See the [Pisper project site](https://ling-kong-ran.github.io/pisper/) for the product overview and interface preview.
72
+ 产品介绍与界面预览:[Pisper 项目主页](https://ling-kong-ran.github.io/pisper/)。
73
73
 
74
- ### Get Started in Three Steps
74
+ ### 三步上手
75
75
 
76
- 1. [Download the desktop app](https://github.com/ling-kong-ran/pisper/releases/latest) (Windows / macOS / Linux, no Node.js required)
77
- 2. Configure any model provider with an API key
78
- 3. Create a session and start working in parallel
76
+ 1. [下载桌面版](https://github.com/ling-kong-ran/pisper/releases/latest)(Windows / macOS / Linux)
77
+ 2. 配置任意一个模型 Provider 与 API Key
78
+ 3. 新建会话,开始并行工作
79
79
 
80
80
  <a id="features"></a>
81
81
 
82
- ## Features
82
+ ## 功能
83
83
 
84
- - **Multiple sessions:** independent models, context, workspaces, and permissions with Dock splits and layout restoration.
85
- - **Tools, Skills, and MCP:** manage capabilities and call permissions in one place.
86
- - **Subagents:** run temporary tasks in isolated contexts and return results to the parent session.
87
- - **Memory and multimodal input:** retrieve project memory and process images, documents, and code.
88
- - **Automation and channels:** schedules, visual workflows, Feishu, and personal Weixin.
89
- - **Desktop and terminal:** Tauri desktop app and Ratatui TUI.
90
- - **Permission controls:** `Read only / Full access` execution modes, one-shot approval, and credential isolation.
84
+ - **多会话**:独立模型、上下文、工作目录和权限,支持 Dock 分屏与布局恢复。
85
+ - **Tools、Skills 与 MCP**:统一管理能力和调用权限。
86
+ - **Subagent**:在隔离上下文中执行临时任务,完成后将结果返回父会话。
87
+ - **记忆与多模态**:检索项目记忆,处理图片、文档和代码。
88
+ - **自动化与渠道**:定时任务、可视化工作流、飞书和个人微信。
89
+ - **桌面与终端**:提供 Tauri 桌面端和 Ratatui TUI。
90
+ - **权限控制**:支持 `只读 / 完全访问` 两种执行模式,并提供单次审批和凭据隔离。
91
91
 
92
92
  <a id="data-safety"></a>
93
93
 
94
- ## Data Safety & Privacy
94
+ ## 数据安全与隐私
95
95
 
96
- Pisper is local-first and does not provide a cloud service that hosts or relays conversations. Sessions and settings are stored under `~/.pisper/agent` by default; set `PISPER_AGENT_DIR` to move them.
96
+ Pisper 是本地优先应用,不提供托管或中转会话的云服务。会话和配置默认保存在本机 `~/.pisper/agent`,也可通过 `PISPER_AGENT_DIR` 更改位置。
97
97
 
98
- - The Runtime listens on `127.0.0.1` by default, and Pi telemetry is disabled by default.
99
- - Model calls and enabled remote services such as MCP, Web search, and messaging receive the data required for each request.
100
- - Common credential formats are redacted at storage and display boundaries, but this is not a replacement for DLP or end-to-end encryption. Protect the local Agent data directory and its backups.
98
+ - Runtime 默认只监听 `127.0.0.1`,Pi 遥测默认关闭。
99
+ - 调用模型或启用远程 MCP、Web 搜索和消息渠道时,必要数据会发送给你配置的第三方。
100
+ - 常见凭据格式会在存储和展示边界脱敏,但这不能替代 DLP 或端到端加密。凭据保存在本机 Agent 数据目录,请妥善保护该目录和备份。
101
101
 
102
102
  <a id="desktop-pet"></a>
103
103
 
104
- ## Desktop Pet
104
+ ## 桌面宠物
105
105
 
106
- Pisper supports [Petdex](https://petdex.dev)-compatible pets. Install and manage them under **Settings → Desktop pet**. See [`docs/petdex-integration.md`](./docs/petdex-integration.md).
106
+ Pisper 支持 [Petdex](https://petdex.dev) 兼容宠物,可在 **设置 → 桌面宠物** 中安装和管理。详见 [`docs/petdex-integration.md`](./docs/petdex-integration.md)。
107
107
 
108
108
  <a id="install"></a>
109
109
 
110
- ## Install
110
+ ## 安装
111
111
 
112
- ### Desktop (Recommended)
112
+ ### 桌面版(推荐)
113
113
 
114
- Download a Windows, macOS, or Linux installer from [GitHub Releases](https://github.com/ling-kong-ran/pisper/releases/latest). It works out of the box — no separate Node.js install is required.
114
+ 前往 [GitHub Releases](https://github.com/ling-kong-ran/pisper/releases/latest) 下载 Windows、macOS 或 Linux 安装包,开箱即用,无需额外安装 Node.js。
115
115
 
116
- #### If macOS Refuses to Open Pisper
116
+ #### macOS 无法打开
117
117
 
118
- Pisper is not currently notarized by Apple. Confirm that it came from the official Releases page, then select **Open Anyway** in **System Settings → Privacy & Security**. If that option is unavailable, run:
118
+ Pisper 当前尚未经过 Apple 公证。请确认应用来自官方 Releases,并优先在 **系统设置 → 隐私与安全性** 中选择 **仍要打开**。若没有该选项,可执行:
119
119
 
120
120
  ```bash
121
121
  sudo xattr -rd com.apple.quarantine /Applications/Pisper.app
122
122
  ```
123
123
 
124
- Use this command only for Pisper downloaded from the official Releases page and placed in `/Applications`.
124
+ 请仅对从官方 Releases 下载并放入 `/Applications` 的应用使用此命令。
125
125
 
126
- #### If the Linux AppImage Does Not Start
126
+ #### Linux AppImage 无法启动
127
127
 
128
128
  ```bash
129
129
  chmod +x Pisper_*_linux_x86_64.AppImage
130
130
  ./Pisper_*_linux_x86_64.AppImage
131
131
  ```
132
132
 
133
- If FUSE is missing, install `libfuse2` or `libfuse2t64`, or use the `.deb` package:
133
+ 缺少 FUSE 时安装 `libfuse2` 或 `libfuse2t64`,也可改用 `.deb`:
134
134
 
135
135
  ```bash
136
136
  sudo apt install ./Pisper-*-linux-amd64.deb
137
137
  ```
138
138
 
139
- ### Component Updates
139
+ ### 分块更新
140
140
 
141
- **Settings → Updates** in the desktop app is the unified update entry point. A single **Check for updates** action checks the Desktop package, TUI client, and Runtime together. Install controls appear only for components with a newer version, so a small component update does not require downloading the full desktop installer. Each component uses an independent signed Release channel. Runtime updates take effect after restarting the app, and Pisper falls back to the versions bundled with the desktop package if an installed component is unavailable or fails to start.
141
+ 桌面端的 **设置 → 更新** 是统一更新入口。点击一次 **检查更新** 会同时检查 Desktop、TUI 客户端和 Runtime;只有发现新版本的组件才会显示安装操作,因此小范围更新不必重新下载完整桌面安装包。三个组件使用独立的签名 Release 通道,Runtime 更新在重启应用后生效;独立组件不可用或启动失败时,Pisper 会继续使用桌面安装包内置的版本。
142
142
 
143
143
  <a id="tui"></a>
144
144
 
145
- ### Terminal Client (TUI)
145
+ ### 终端客户端(TUI)
146
146
 
147
- With Node.js 20+, you can install the Pisper CLI through npm. npm obtains the lightweight launcher, platform-independent Web frontend, and signed TUI and Runtime packages for the current platform from the configured registry, without downloading from GitHub Releases. Installation verifies and extracts the local component packages so Pisper is ready when the command returns; it does not install the desktop shell:
147
+ 使用 Node.js 20+ 时,也可通过 npm 安装 Pisper CLI。npm 会从当前配置的 registry 获取轻量启动器、平台无关 Web 前端以及当前平台的签名 TUI 与 Runtime 包,不再从 GitHub Releases 下载;安装过程会在本地完成验签和解压,命令返回后即可运行,不会安装桌面壳:
148
148
 
149
149
  ```bash
150
150
  npm install -g pisper --progress=true --foreground-scripts
151
151
  pisper
152
- pisper update --check # check the complete distribution through the npm registry
153
- pisper update # update the launcher, Web, TUI, and Runtime through npm
152
+ pisper update --check # 从 npm registry 检查完整发行版
153
+ pisper update # 通过 npm 更新 launcher、Web、TUI 与 Runtime
154
154
  ```
155
155
 
156
- Platform packages use the same registry when an npm mirror is configured. `--progress=true` shows npm download progress, while `--foreground-scripts` shows local signature verification and extraction; add `--loglevel=info` only when request and cache details are needed:
156
+ 使用 npm 镜像时,平台包会走同一个 registry。`--progress=true` 显示 npm 下载进度,`--foreground-scripts` 显示本地验签和解压阶段;需要查看请求和缓存明细时再增加 `--loglevel=info`:
157
157
 
158
158
  ```bash
159
159
  npm install -g pisper --registry=https://registry.npmmirror.com --progress=true --foreground-scripts
160
160
  ```
161
161
 
162
- After entering the TUI for the first time, use `/provider` to choose a Provider and edit its protocol, effective Base URL, and masked API key. The official default Base URL is shown when no override exists, and leaving API Key blank preserves the saved secret. `/model` lists only models from configured Providers. For a known Provider, `/provider <id>` skips the picker (`/apikey` remains a compatible alias). For visual configuration, run `pisper web`; Pisper uses the Web frontend bundled in the npm package and opens an authenticated, localhost-only settings page in your default browser. **Save Provider settings** does not change the default model; only **Set as default Provider** changes the default for later sessions.
162
+ 首次进入 TUI 后使用 `/provider` 选择 Provider,并编辑协议类型、当前生效 Base URL 和掩码 API Key;未自定义时会显示官方默认 Base URL,API Key 留空会保留原密钥。`/model` 只列出已配置 Provider 的模型。已知 Provider 可用 `/provider <id>` 直达(`/apikey` 为兼容别名)。需要可视化配置时,运行 `pisper web`,Pisper 会直接使用 npm 包内 Web 前端,并在默认浏览器打开仅监听本机的认证配置页。配置页中的 **保存 Provider 配置** 不会修改默认模型;只有点击 **设为默认 Provider** 才会切换后续会话的默认模型。
163
163
 
164
- After installing the desktop app, you can also install the `pisper` command from **Settings → App updates**. The first installation remains explicit; after later desktop updates restart Pisper, it automatically refreshes this managed terminal client:
164
+ 安装桌面版后,也可以在 **设置 → 应用更新** 中安装 `pisper` 命令。首次安装由你主动确认;之后桌面应用更新并重启时,Pisper 会自动刷新这份已托管的终端客户端:
165
165
 
166
166
  ```bash
167
- pisper # start a new conversation
168
- pisper resume # resume from a list across all workspaces
169
- pisper doctor # diagnose the runtime
170
- pisper web # open Web settings
171
- pisper --help # show complete onboarding and command help
167
+ pisper # 新建会话
168
+ pisper resume # 从所有工作目录的交互列表中恢复会话
169
+ pisper doctor # 诊断运行环境
170
+ pisper web # 打开 Web 配置页
171
+ pisper --help # 查看完整上手和命令说明
172
172
  ```
173
173
 
174
- The npm distribution has one complete `pisper update` command. It uses the configured npm registry to update the launcher, Web, TUI, and Runtime; `pisper update --check` only queries and does not install, and component names are not accepted. The standalone TUI exposes no component-update command; the desktop distribution is managed through **Settings → App updates**. See the **[Pisper TUI user guide](./src-tui/README.en.md)** for installation, commands, keyboard controls, attachments, execution modes, and approvals.
174
+ npm 安装版只有一个整体 `pisper update`,它使用当前配置的 npm registry 更新 launcher、Web、TUI 与 Runtime;`pisper update --check` 只查询而不安装,不接受组件名称。独立 TUI 不提供组件更新命令;桌面发行版统一由 **设置 → 应用更新** 管理。安装、命令、快捷键、附件、执行模式和审批说明见 **[Pisper TUI 使用指南](./src-tui/README.md)**。
175
175
 
176
- ### Run from Source
176
+ ### 从源码运行
177
177
 
178
- Requires Node.js 20+, npm, and at least one model provider with an API key.
178
+ 需要 Node.js 20+、npm,以及至少一个模型 Provider 与 API Key。
179
179
 
180
180
  ```bash
181
181
  git clone https://github.com/ling-kong-ran/pisper.git
@@ -184,20 +184,20 @@ npm install
184
184
  npm run dev
185
185
  ```
186
186
 
187
- Desktop development and packaging:
187
+ 桌面开发与打包:
188
188
 
189
189
  ```bash
190
190
  npm run desktop:webview:dev
191
191
  npm run desktop:webview:build
192
192
  ```
193
193
 
194
- Data is stored under `~/.pisper/agent` by default. Set `PISPER_AGENT_DIR` to use another location.
194
+ 数据默认保存在 `~/.pisper/agent`,可通过 `PISPER_AGENT_DIR` 修改。
195
195
 
196
196
  <a id="development"></a>
197
197
 
198
- ## Development
198
+ ## 开发
199
199
 
200
- Main stack: React, TypeScript, Tauri, Rust, Node SEA, and Pi Coding Agent.
200
+ 主要技术栈:React、TypeScript、Tauri、Rust、Node SEA 与 Pi Coding Agent。
201
201
 
202
202
  ```bash
203
203
  npm run check
@@ -205,20 +205,20 @@ npm test
205
205
  npm run build
206
206
  ```
207
207
 
208
- [Issues](https://github.com/ling-kong-ran/pisper/issues) and [pull requests](https://github.com/ling-kong-ran/pisper/pulls) are welcome. Do not commit API keys, bot credentials, or personal data from `~/.pisper/agent`.
208
+ 欢迎提交 [Issue](https://github.com/ling-kong-ran/pisper/issues) 与 [Pull Request](https://github.com/ling-kong-ran/pisper/pulls)。请勿提交 API Key、机器人凭据,或 `~/.pisper/agent` 中的个人数据。
209
209
 
210
210
  <a id="license"></a>
211
211
 
212
- ## License
212
+ ## 许可
213
213
 
214
- Pisper is released under the [MIT License](./LICENSE). Third-party dependencies and community resources retain their own licenses.
214
+ Pisper 采用 [MIT License](./LICENSE)。第三方依赖和社区资源遵循各自许可证。
215
215
 
216
- ## Acknowledgments
216
+ ## 致谢
217
217
 
218
- Thanks to [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent), [Petdex](https://petdex.dev), and the open-source software used by this project.
218
+ 感谢 [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent)、[Petdex](https://petdex.dev) 及本项目使用的开源软件。
219
219
 
220
- Contributors:
220
+ 贡献者:
221
221
 
222
- - [@mik-myp](https://github.com/mik-myp) — Frontend TypeScript architecture, shadcn/ui / AI Elements, Zustand, and i18n refactor ([#1](https://github.com/ling-kong-ran/pisper/pull/1))
222
+ - [@mik-myp](https://github.com/mik-myp) — 前端 TypeScript 架构、shadcn/ui / AI Elements、Zustand 与 i18n 重构([#1](https://github.com/ling-kong-ran/pisper/pull/1))
223
223
 
224
- <p align="right"><a href="#top">Back to top ↑</a></p>
224
+ <p align="right"><a href="#top">返回顶部 ↑</a></p>
package/bin/pisper.mjs ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawn } from 'node:child_process'
4
+ import process from 'node:process'
5
+ import { fileURLToPath } from 'node:url'
6
+ import { ensurePisperInstallation } from '../lib/install.mjs'
7
+ import { handleNpmHelp, handleNpmUpdate } from '../lib/npm-update.mjs'
8
+
9
+ const frontendRoot = fileURLToPath(new URL('../web', import.meta.url))
10
+
11
+ try {
12
+ const arguments_ = process.argv.slice(2)
13
+ if (!handleNpmHelp(arguments_) && !(await handleNpmUpdate(arguments_))) {
14
+ const installation = await ensurePisperInstallation()
15
+ const child = spawn(installation.executable, arguments_, {
16
+ env: {
17
+ ...process.env,
18
+ PISPER_APP_ROOT: installation.appRoot,
19
+ PISPER_DISTRIBUTION: 'npm',
20
+ PISPER_FRONTEND_ROOT: frontendRoot,
21
+ PISPER_RUNTIME_NODE: process.execPath,
22
+ },
23
+ stdio: 'inherit',
24
+ windowsHide: false,
25
+ })
26
+
27
+ for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
28
+ process.on(signal, () => {
29
+ if (!child.killed) child.kill(signal)
30
+ })
31
+ }
32
+
33
+ child.once('error', (error) => {
34
+ console.error(`pisper: failed to start the terminal client: ${error.message}`)
35
+ process.exitCode = 1
36
+ })
37
+ child.once('exit', (code, signal) => {
38
+ if (signal) {
39
+ process.kill(process.pid, signal)
40
+ return
41
+ }
42
+ process.exitCode = code ?? 1
43
+ })
44
+ }
45
+ } catch (error) {
46
+ console.error(`pisper: ${error instanceof Error ? error.message : String(error)}`)
47
+ process.exitCode = 1
48
+ }