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.
- package/README.en.md +224 -0
- package/README.md +78 -78
- package/bin/pisper.mjs +48 -0
- package/lib/install.mjs +392 -0
- package/lib/npm-platform.mjs +41 -0
- package/lib/npm-update.mjs +165 -0
- package/lib/platform.mjs +43 -0
- package/lib/postinstall.mjs +3 -0
- package/package.json +36 -14
- package/updater.pubkey +1 -0
- package/web/.vite/manifest.json +2326 -0
- package/web/assets/AnimatedContent-BiVNqD3m.js +1 -0
- package/web/assets/AnimatedList-D6P3Wwa6.js +1 -0
- package/web/assets/AppOverlays-B3MsrwJU.js +1 -0
- package/web/assets/AppSelect--1KIt1sL.js +1 -0
- package/web/assets/AssetsPage-BQuisV8m.js +1 -0
- package/web/assets/ChannelsPage-ch7Qx8In.js +1 -0
- package/web/assets/ChatHistoryPage-D1Vo9glz.js +1 -0
- package/web/assets/ChatPage-BH9BIId-.js +8 -0
- package/web/assets/ClickSpark-BxLJ1PyT.js +1 -0
- package/web/assets/ConfigPage-DioyBKgQ.js +1 -0
- package/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/assets/MarkdownMessage-BfgYFCmq.js +1 -0
- package/web/assets/MemoryPage-DfY7Zv4q.js +1 -0
- package/web/assets/PageHeader-DOuDNCQ2.js +1 -0
- package/web/assets/PluginsPage-DjRBo7WF.js +1 -0
- package/web/assets/PreviewPages-DiOw1MH7.js +1 -0
- package/web/assets/SchedulesPage-Df0PZLFi.js +1 -0
- package/web/assets/ShinyText-K2BPzduJ.js +1 -0
- package/web/assets/SkillsPage-B5EVXpQ_.js +1 -0
- package/web/assets/StarOrbit-BlI6MhVr.js +1 -0
- package/web/assets/TerminalPanel-BrP-ENHg.css +1 -0
- package/web/assets/TerminalPanel-C7SEm2I_.js +18 -0
- package/web/assets/Threads-CS40baGh.js +1 -0
- package/web/assets/WelcomeEffects-CJuFsgxP.js +1 -0
- package/web/assets/WorkflowsPage-BXfJfjSj.js +1 -0
- package/web/assets/alert-B7D8joCd.js +1 -0
- package/web/assets/andromeeda-vGVdxbeo.js +1 -0
- package/web/assets/angular-html-17rlCfBS.js +1 -0
- package/web/assets/angular-ts-it3MaXWH.js +1 -0
- package/web/assets/app-primitives-C-B082Z7.js +1 -0
- package/web/assets/astro-BEVDzCov.js +1 -0
- package/web/assets/aurora-x-CDeNXAV0.js +1 -0
- package/web/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/web/assets/ayu-light-C3h-C4tm.js +1 -0
- package/web/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/web/assets/badge-BNonIEif.js +1 -0
- package/web/assets/blade-B3yUZIOx.js +1 -0
- package/web/assets/brand-CFOXmGdd.js +1 -0
- package/web/assets/c-aGSZMVdM.js +1 -0
- package/web/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
- package/web/assets/catppuccin-latte-CtsyrtPq.js +1 -0
- package/web/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
- package/web/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
- package/web/assets/chevron-down-DybEa6xm.js +1 -0
- package/web/assets/circle-dot-BdcN0YM6.js +1 -0
- package/web/assets/code-block-U_4-_YZY.js +1 -0
- package/web/assets/coffee-ouOQ86EC.js +1 -0
- package/web/assets/copy-O4BLU533.js +1 -0
- package/web/assets/cpp-Bm3vm43L.js +1 -0
- package/web/assets/createLucideIcon-BEEvpXLl.js +1 -0
- package/web/assets/css-CWcS1xXm.js +1 -0
- package/web/assets/csv-Dx-8-gkx.js +1 -0
- package/web/assets/dark-plus-Cs2F2srj.js +1 -0
- package/web/assets/dist-BKKRgL0M.js +1 -0
- package/web/assets/dist-BPctzC7e.js +1 -0
- package/web/assets/dist-BmM8XOsV.js +1 -0
- package/web/assets/dist-D7NVw93i.js +1 -0
- package/web/assets/dracula-BHWKrbxM.js +1 -0
- package/web/assets/dracula-soft-5eyTD99u.js +1 -0
- package/web/assets/es2015-DSXvIagS.js +41 -0
- package/web/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/web/assets/everforest-light-Df2xbC6M.js +1 -0
- package/web/assets/eye-BMzzoABY.js +1 -0
- package/web/assets/file-CvhJitS9.js +1 -0
- package/web/assets/file-code-corner-lCJOIDbw.js +1 -0
- package/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/web/assets/github-dark-C-LZuMrd.js +1 -0
- package/web/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/web/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/web/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/web/assets/github-light-EUqPIrTm.js +1 -0
- package/web/assets/github-light-default-BXViO-2h.js +1 -0
- package/web/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/web/assets/glsl-TOBAB6bO.js +1 -0
- package/web/assets/graphql-BEmIBNve.js +1 -0
- package/web/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/web/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/web/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/web/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/web/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/web/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/web/assets/haml-CDWtFtU9.js +1 -0
- package/web/assets/handlebars-BNtjo3pL.js +1 -0
- package/web/assets/horizon-CE9ld1lL.js +1 -0
- package/web/assets/horizon-bright-DSNQnXHK.js +1 -0
- package/web/assets/houston-CsvMBhTu.js +1 -0
- package/web/assets/html-BVyvp26C.js +1 -0
- package/web/assets/html-derivative-BseLpURQ.js +1 -0
- package/web/assets/http-CkCfSMV9.js +1 -0
- package/web/assets/hurl-syYMt6Rn.js +1 -0
- package/web/assets/image-M6XRBbhu.js +1 -0
- package/web/assets/imba-DsUTQ-LC.js +1 -0
- package/web/assets/index-CsancOLh.js +6 -0
- package/web/assets/index-DpxwLREi.css +2 -0
- package/web/assets/java-duG_UTKe.js +1 -0
- package/web/assets/javascript-DWVbOe4X.js +1 -0
- package/web/assets/jinja-Boj4niAz.js +1 -0
- package/web/assets/jison-CHwnC1Pv.js +1 -0
- package/web/assets/json-qhed-kSA.js +1 -0
- package/web/assets/json5-BR5RXkoi.js +1 -0
- package/web/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/assets/jsonl-CmCQp5Yx.js +1 -0
- package/web/assets/jsx-fcCEM_-L.js +1 -0
- package/web/assets/julia-VoF7UKfw.js +1 -0
- package/web/assets/kanagawa-dragon-Bozd7klA.js +1 -0
- package/web/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
- package/web/assets/kanagawa-wave-BML5mF2J.js +1 -0
- package/web/assets/laserwave-C_8bwKvT.js +1 -0
- package/web/assets/less-DVTAwKKz.js +1 -0
- package/web/assets/light-plus-DVQuIRkW.js +1 -0
- package/web/assets/link-2-Dd2E7M_B.js +1 -0
- package/web/assets/markdown-BYOwaDjH.js +1 -0
- package/web/assets/marko-Cupn1xhw.js +1 -0
- package/web/assets/material-theme-Bm3Qr25_.js +1 -0
- package/web/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/web/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/web/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/web/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/web/assets/mdc-4FfK5iWR.js +1 -0
- package/web/assets/mdx-DQZ5AkYe.js +1 -0
- package/web/assets/message-circle-Bi-lz-6t.js +1 -0
- package/web/assets/min-dark-BSWPekZh.js +1 -0
- package/web/assets/min-light-DDpmG2fV.js +1 -0
- package/web/assets/monokai-B_bV9PQ9.js +1 -0
- package/web/assets/network-UhG-ym-z.js +1 -0
- package/web/assets/night-owl-DhmEMT88.js +1 -0
- package/web/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/web/assets/nord-Cb4Vim4T.js +1 -0
- package/web/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/web/assets/one-light-D7Lr4KcI.js +1 -0
- package/web/assets/panel-top-BnVDkV60.js +1 -0
- package/web/assets/paperclip-D7mny7G8.js +1 -0
- package/web/assets/pencil-DpO4AUNy.js +1 -0
- package/web/assets/php-CUREQQ7f.js +1 -0
- package/web/assets/pick-system-directory-DGlbZa_s.js +1 -0
- package/web/assets/plastic-DQwYfKfQ.js +1 -0
- package/web/assets/play-3QiwbcM7.js +1 -0
- package/web/assets/plus-CI2ql0x4.js +1 -0
- package/web/assets/poimandres-DRFjx7u4.js +1 -0
- package/web/assets/postcss-BXeXVLqQ.js +1 -0
- package/web/assets/progress-Cq8AiS7g.js +6 -0
- package/web/assets/pug-CQyGKZpv.js +1 -0
- package/web/assets/python-gzcpVVnB.js +1 -0
- package/web/assets/r-C5FwQflr.js +1 -0
- package/web/assets/react-bits-BFnYwuxx.css +1 -0
- package/web/assets/red-DX1BQOs8.js +1 -0
- package/web/assets/regexp--aR2_iz7.js +1 -0
- package/web/assets/rolldown-runtime-B0Z9INg1.js +1 -0
- package/web/assets/rose-pine-aMsaMD1D.js +1 -0
- package/web/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
- package/web/assets/rose-pine-moon-DO-qXg-I.js +1 -0
- package/web/assets/sass-DXrisJhu.js +1 -0
- package/web/assets/save-D--1z1bw.js +1 -0
- package/web/assets/scss-Davl4E3T.js +1 -0
- package/web/assets/search-CVBbTPAG.js +1 -0
- package/web/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/assets/shield-check-mwXhKsZm.js +1 -0
- package/web/assets/slack-dark-DnToyrRv.js +1 -0
- package/web/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/web/assets/smithy-Dgaz7aur.js +1 -0
- package/web/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/web/assets/solarized-dark-UdsmMDCL.js +1 -0
- package/web/assets/solarized-light-C1IUL_tW.js +1 -0
- package/web/assets/sql-b92rrcVl.js +1 -0
- package/web/assets/square-C7qN58NE.js +1 -0
- package/web/assets/square-terminal-C9TjK-fA.js +1 -0
- package/web/assets/storage-BbqIMx9Y.js +1 -0
- package/web/assets/stylus-B6D30XZt.js +1 -0
- package/web/assets/svelte-BfstjgUc.js +1 -0
- package/web/assets/switch-yuukHc6k.js +1 -0
- package/web/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/web/assets/tabs-Db9JGL3O.js +1 -0
- package/web/assets/terminal-ClxNGVIF.js +1 -0
- package/web/assets/terminal-DOxWTw7v.js +2 -0
- package/web/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/web/assets/trash-2-CATziWCd.js +1 -0
- package/web/assets/ts-tags-Cckpt1jI.js +1 -0
- package/web/assets/tsx-JMDX3aQ7.js +1 -0
- package/web/assets/typescript-BAz-bF8J.js +1 -0
- package/web/assets/use-i18n-D2G2DZz-.js +1 -0
- package/web/assets/usePagePrimaryAction-Bw0OFTDZ.js +1 -0
- package/web/assets/utils-C8uzG5AZ.js +1 -0
- package/web/assets/vendor-dockview-D5adAaCg.css +1 -0
- package/web/assets/vendor-dockview-yY5mBM3U.js +1 -0
- package/web/assets/vendor-markdown-lQaMEIxc.js +130 -0
- package/web/assets/vendor-markdown-plugins-ERG5SnGL.js +263 -0
- package/web/assets/vendor-motion-XxgxfZSY.js +9 -0
- package/web/assets/vendor-react-CHuvPdJE.js +9 -0
- package/web/assets/vendor-router-Bw2aAdMs.js +4 -0
- package/web/assets/vendor-shiki-runtime-DFSfH2tH.js +153 -0
- package/web/assets/vendor-state-DE1O_s6m.js +1 -0
- package/web/assets/vendor-ui-DvrYggeS.js +1 -0
- package/web/assets/vendor-xyflow-CnjXtcyK.js +7 -0
- package/web/assets/vendor-xyflow-DLioOiRN.css +1 -0
- package/web/assets/vesper-DdrHHSXu.js +1 -0
- package/web/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/web/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/web/assets/vitesse-light-VbXTXTou.js +1 -0
- package/web/assets/vue-3H7P6ncC.js +1 -0
- package/web/assets/vue-html-DZGW9MGR.js +1 -0
- package/web/assets/vue-vine-BECt67gq.js +1 -0
- package/web/assets/wasm-BnjxR4X6.js +1 -0
- package/web/assets/wasm-ByWQv1Qj.js +1 -0
- package/web/assets/wgsl-BsKzXJz4.js +1 -0
- package/web/assets/wit-DdvCle-K.js +1 -0
- package/web/assets/wrench-BaMct6KV.js +1 -0
- package/web/assets/xml-CNfvW5JP.js +1 -0
- package/web/assets/yaml-rwi0_p6S.js +1 -0
- package/web/assets/zap-Ch1TQ5QU.js +1 -0
- package/web/favicon.svg +25 -0
- package/web/icons.svg +24 -0
- package/web/index.html +57 -0
- package/web/memory-galaxy-background.webp +0 -0
- package/web/notification-sw.js +13 -0
- package/web/release-notes.json +5 -0
- package/web/tauri-pet.css +117 -0
- package/web/tauri-pet.html +16 -0
- package/web/tauri-pet.js +117 -0
- package/components/runtime/Pisper_Runtime_Node_0.5.4_linux_x86_64.tar.gz +0 -0
- package/components/runtime/Pisper_Runtime_Node_0.5.4_linux_x86_64.tar.gz.sig +0 -1
- package/components/tui/Pisper_TUI_Component_0.5.2_linux_x86_64.tar.gz +0 -0
- 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"
|
|
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
|
|
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>
|
|
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
|
|
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
|
-
## ❤️
|
|
29
|
+
## ❤️ 赞助
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
感谢以下合作伙伴对 Pisper 社区的支持。如果你也希望出现在这里,欢迎通过 [Issue](https://github.com/ling-kong-ran/pisper/issues) 联系我们。
|
|
32
32
|
|
|
33
33
|
<details open>
|
|
34
|
-
<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
|
-
|
|
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
|
-
>
|
|
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"
|
|
53
|
-
<a href="https://ling-kong-ran.github.io/pisper/"
|
|
54
|
-
<a href="#features"
|
|
55
|
-
<a href="#data-safety"
|
|
56
|
-
<a href="#desktop-pet"
|
|
57
|
-
<a href="#install"
|
|
58
|
-
<a href="#tui"
|
|
59
|
-
<a href="#development"
|
|
60
|
-
<a href="#sponsors"
|
|
61
|
-
<a href="#license"
|
|
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
|
-
##
|
|
68
|
+
## 简介
|
|
69
69
|
|
|
70
|
-
Pisper
|
|
70
|
+
Pisper 是基于 [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent) 的桌面与终端客户端,支持多会话、工具、Skills、MCP、自动化和会话级权限。
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
产品介绍与界面预览:[Pisper 项目主页](https://ling-kong-ran.github.io/pisper/)。
|
|
73
73
|
|
|
74
|
-
###
|
|
74
|
+
### 三步上手
|
|
75
75
|
|
|
76
|
-
1. [
|
|
77
|
-
2.
|
|
78
|
-
3.
|
|
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
|
-
##
|
|
82
|
+
## 功能
|
|
83
83
|
|
|
84
|
-
-
|
|
85
|
-
- **Tools
|
|
86
|
-
- **
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
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
|
-
##
|
|
94
|
+
## 数据安全与隐私
|
|
95
95
|
|
|
96
|
-
Pisper
|
|
96
|
+
Pisper 是本地优先应用,不提供托管或中转会话的云服务。会话和配置默认保存在本机 `~/.pisper/agent`,也可通过 `PISPER_AGENT_DIR` 更改位置。
|
|
97
97
|
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
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
|
-
##
|
|
104
|
+
## 桌面宠物
|
|
105
105
|
|
|
106
|
-
Pisper
|
|
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
|
-
##
|
|
110
|
+
## 安装
|
|
111
111
|
|
|
112
|
-
###
|
|
112
|
+
### 桌面版(推荐)
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
前往 [GitHub Releases](https://github.com/ling-kong-ran/pisper/releases/latest) 下载 Windows、macOS 或 Linux 安装包,开箱即用,无需额外安装 Node.js。
|
|
115
115
|
|
|
116
|
-
####
|
|
116
|
+
#### macOS 无法打开
|
|
117
117
|
|
|
118
|
-
Pisper
|
|
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
|
-
|
|
124
|
+
请仅对从官方 Releases 下载并放入 `/Applications` 的应用使用此命令。
|
|
125
125
|
|
|
126
|
-
####
|
|
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
|
-
|
|
133
|
+
缺少 FUSE 时安装 `libfuse2` 或 `libfuse2t64`,也可改用 `.deb`:
|
|
134
134
|
|
|
135
135
|
```bash
|
|
136
136
|
sudo apt install ./Pisper-*-linux-amd64.deb
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
###
|
|
139
|
+
### 分块更新
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
桌面端的 **设置 → 更新** 是统一更新入口。点击一次 **检查更新** 会同时检查 Desktop、TUI 客户端和 Runtime;只有发现新版本的组件才会显示安装操作,因此小范围更新不必重新下载完整桌面安装包。三个组件使用独立的签名 Release 通道,Runtime 更新在重启应用后生效;独立组件不可用或启动失败时,Pisper 会继续使用桌面安装包内置的版本。
|
|
142
142
|
|
|
143
143
|
<a id="tui"></a>
|
|
144
144
|
|
|
145
|
-
###
|
|
145
|
+
### 终端客户端(TUI)
|
|
146
146
|
|
|
147
|
-
|
|
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 #
|
|
153
|
-
pisper update #
|
|
152
|
+
pisper update --check # 从 npm registry 检查完整发行版
|
|
153
|
+
pisper update # 通过 npm 更新 launcher、Web、TUI 与 Runtime
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
|
|
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
|
-
|
|
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
|
-
|
|
164
|
+
安装桌面版后,也可以在 **设置 → 应用更新** 中安装 `pisper` 命令。首次安装由你主动确认;之后桌面应用更新并重启时,Pisper 会自动刷新这份已托管的终端客户端:
|
|
165
165
|
|
|
166
166
|
```bash
|
|
167
|
-
pisper #
|
|
168
|
-
pisper resume #
|
|
169
|
-
pisper doctor #
|
|
170
|
-
pisper web #
|
|
171
|
-
pisper --help #
|
|
167
|
+
pisper # 新建会话
|
|
168
|
+
pisper resume # 从所有工作目录的交互列表中恢复会话
|
|
169
|
+
pisper doctor # 诊断运行环境
|
|
170
|
+
pisper web # 打开 Web 配置页
|
|
171
|
+
pisper --help # 查看完整上手和命令说明
|
|
172
172
|
```
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
npm 安装版只有一个整体 `pisper update`,它使用当前配置的 npm registry 更新 launcher、Web、TUI 与 Runtime;`pisper update --check` 只查询而不安装,不接受组件名称。独立 TUI 不提供组件更新命令;桌面发行版统一由 **设置 → 应用更新** 管理。安装、命令、快捷键、附件、执行模式和审批说明见 **[Pisper TUI 使用指南](./src-tui/README.md)**。
|
|
175
175
|
|
|
176
|
-
###
|
|
176
|
+
### 从源码运行
|
|
177
177
|
|
|
178
|
-
|
|
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
|
-
|
|
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
|
-
|
|
194
|
+
数据默认保存在 `~/.pisper/agent`,可通过 `PISPER_AGENT_DIR` 修改。
|
|
195
195
|
|
|
196
196
|
<a id="development"></a>
|
|
197
197
|
|
|
198
|
-
##
|
|
198
|
+
## 开发
|
|
199
199
|
|
|
200
|
-
|
|
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
|
-
[
|
|
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
|
-
##
|
|
212
|
+
## 许可
|
|
213
213
|
|
|
214
|
-
Pisper
|
|
214
|
+
Pisper 采用 [MIT License](./LICENSE)。第三方依赖和社区资源遵循各自许可证。
|
|
215
215
|
|
|
216
|
-
##
|
|
216
|
+
## 致谢
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
感谢 [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent)、[Petdex](https://petdex.dev) 及本项目使用的开源软件。
|
|
219
219
|
|
|
220
|
-
|
|
220
|
+
贡献者:
|
|
221
221
|
|
|
222
|
-
- [@mik-myp](https://github.com/mik-myp) —
|
|
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"
|
|
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
|
+
}
|