pi-web-ui 0.79.0 → 0.80.0
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/CHANGELOG.md +17 -0
- package/README.md +68 -0
- package/package.json +12 -6
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,22 @@
|
|
|
8
8
|
每个版本的内容按"实际合入该版本发布的提交"归档(以 `package.json` 的 version 变更提交为准),
|
|
9
9
|
而不是按提交日期聚类——连续快速发布的 patch 版本以此为准最准确。
|
|
10
10
|
|
|
11
|
+
## [Unreleased]
|
|
12
|
+
|
|
13
|
+
暂无未发布内容。
|
|
14
|
+
|
|
15
|
+
## [0.80.0] — 2026-09-12
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **桌面版(Electron 外壳)**:同一套服务端 + 前端装进一个原生窗口——主进程用随机空闲口起 `dist/server/index.js`(`ELECTRON_RUN_AS_NODE` 当纯 Node 用,不再额外捆一个 Node),`/api/health` 就绪后 `BrowserWindow` 直接加载该地址,因此前端 `appUrl("/ws")`、`server/protocol.ts` 全部零改动。可与网页版并存:不抢 `8787`(`PI_WEB_PORT` 被占用时自动退到随机空闲口)、独立数据目录(`<userData>/data`)、独立单实例锁;外链丢给系统浏览器,renderer 走 `contextIsolation + sandbox` 且无 Node。Windows 安装包(NSIS,可选安装目录)随每个 Release 由 CI 出包并附在 Release 页面(macOS dmg / Linux AppImage 已配好,CI 暂只出 Windows);开发用 `npm run desktop:dev`,本地打包用 `npm run desktop:dist`。
|
|
20
|
+
- 当前**未签名**:首次运行 Windows 会提示「未知发布者」(进展见仓库 README 的 Code signing policy 一节)。
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- 桌面版图标复用网页版 PWA 图标(`web/public/icons/icon-1024.png`),网页版与桌面版换图标只改一处。
|
|
25
|
+
- 仓库自检现在覆盖桌面壳:`npm run typecheck` / `format:check` / `lint` 都把 `desktop/` 纳入范围。
|
|
26
|
+
|
|
11
27
|
## [0.79.0] — 2026-09-11
|
|
12
28
|
|
|
13
29
|
### Added
|
|
@@ -466,6 +482,7 @@
|
|
|
466
482
|
- 0.29.0(2026-08-23):全局搜索弹窗(Ctrl+K)+ 消息列表惰性窗口化。
|
|
467
483
|
|
|
468
484
|
[Unreleased]: https://github.com/xing-shuyin/pi-web-ui/compare/v0.79.0...main
|
|
485
|
+
[0.80.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.80.0
|
|
469
486
|
[0.79.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.79.0
|
|
470
487
|
[0.78.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.78.0
|
|
471
488
|
[0.77.0]: https://github.com/xing-shuyin/pi-web-ui/releases/tag/v0.77.0
|
package/README.md
CHANGED
|
@@ -51,6 +51,8 @@ theme switching, and a full settings panel — tuned for daily development.
|
|
|
51
51
|
- 🧩 [Plugins](#plugins)
|
|
52
52
|
- 🎨 [Themes](#themes)
|
|
53
53
|
- 🔒 [Security](#security)
|
|
54
|
+
- 🪪 [Code signing policy](#code-signing-policy)
|
|
55
|
+
- 🔐 [Privacy](#privacy)
|
|
54
56
|
- 🌐 [Reverse proxy (nginx)](#reverse-proxy-nginx)
|
|
55
57
|
- 🤝 [Contribute](#contribute)
|
|
56
58
|
- 📄 [License](#license)
|
|
@@ -174,6 +176,24 @@ silences the warning):
|
|
|
174
176
|
npm i -g --allow-scripts=node-pty,@google/genai,protobufjs pi-web-ui@latest
|
|
175
177
|
```
|
|
176
178
|
|
|
179
|
+
### 🖥️ Desktop app (Windows installer)
|
|
180
|
+
|
|
181
|
+
Prefer a window over a browser tab? Every release ships a Windows installer built
|
|
182
|
+
from this repository by GitHub Actions:
|
|
183
|
+
|
|
184
|
+
**[⬇ Download the latest installer](https://github.com/xing-shuyin/pi-web-ui/releases/latest)**
|
|
185
|
+
— `pi-web-ui-desktop Setup <version>.exe`
|
|
186
|
+
|
|
187
|
+
The desktop shell reuses this very server: it spawns `dist/server/index.js` on a
|
|
188
|
+
random free loopback port and opens a window pointed at it (see
|
|
189
|
+
[`desktop/README.md`](desktop/README.md)). The web version is untouched — no
|
|
190
|
+
fight over port `8787`, separate data directory, both can run side by side.
|
|
191
|
+
|
|
192
|
+
Currently Windows-only and **not code signed yet** — Windows SmartScreen will
|
|
193
|
+
show an “unknown publisher” prompt the first time you run it (see the
|
|
194
|
+
[code signing policy](#code-signing-policy)). Build it yourself with
|
|
195
|
+
`npm run desktop:dist`.
|
|
196
|
+
|
|
177
197
|
### Termux (Android)
|
|
178
198
|
|
|
179
199
|
pi-web-ui runs fine on Android via [Termux](https://termux.dev), but `node-pty`
|
|
@@ -471,6 +491,54 @@ Rules for merged themes: the file must be a single CSS file, set the `--term-*`
|
|
|
471
491
|
management UI edits everything else and the server preserves the headers.
|
|
472
492
|
|
|
473
493
|
|
|
494
|
+
## 🪪 Code signing policy
|
|
495
|
+
|
|
496
|
+
Free code signing provided by [SignPath.io](https://signpath.io), certificate by
|
|
497
|
+
[SignPath Foundation](https://signpath.org).
|
|
498
|
+
|
|
499
|
+
Release binaries — the Windows installer `pi-web-ui-desktop Setup <version>.exe`
|
|
500
|
+
attached to every [release](https://github.com/xing-shuyin/pi-web-ui/releases) —
|
|
501
|
+
are built from the tagged commit by
|
|
502
|
+
[`.github/workflows/desktop-release.yml`](.github/workflows/desktop-release.yml)
|
|
503
|
+
and signed in that CI run, so a valid signature means the file is an automated
|
|
504
|
+
build of the source code at that tag.
|
|
505
|
+
|
|
506
|
+
### Team roles
|
|
507
|
+
|
|
508
|
+
| Role | Who |
|
|
509
|
+
| --- | --- |
|
|
510
|
+
| **Authors / committers** (may push to `main`) | [@xing-shuyin](https://github.com/xing-shuyin) |
|
|
511
|
+
| **Reviewers** (every non-committer change arrives as a PR and is reviewed before merge) | [@xing-shuyin](https://github.com/xing-shuyin) — community contributions are credited in the [contributors graph](https://github.com/xing-shuyin/pi-web-ui/graphs/contributors) |
|
|
512
|
+
| **Approvers** (must approve each signing request) | [@xing-shuyin](https://github.com/xing-shuyin) |
|
|
513
|
+
|
|
514
|
+
All team members use multi-factor authentication for both GitHub and SignPath.
|
|
515
|
+
Our release artifacts contain no binaries we did not build ourselves, except
|
|
516
|
+
upstream open-source components bundled by npm and electron-builder (see
|
|
517
|
+
[License](#license)).
|
|
518
|
+
|
|
519
|
+
**Privacy policy:** see [Privacy](#privacy) below.
|
|
520
|
+
|
|
521
|
+
## 🔐 Privacy
|
|
522
|
+
|
|
523
|
+
pi-web-ui runs entirely on your own machine and has **no telemetry, no analytics
|
|
524
|
+
and no accounts of its own**. Conversations, attachments, settings and terminal
|
|
525
|
+
history stay in your local data directory (`~/.pi-web/` by default, or
|
|
526
|
+
`%APPDATA%\pi-web-ui\data` for the desktop app), and the HTTP server binds
|
|
527
|
+
loopback unless you explicitly expose it.
|
|
528
|
+
|
|
529
|
+
Network requests happen only in these cases:
|
|
530
|
+
|
|
531
|
+
| When | To | What leaves your machine |
|
|
532
|
+
| --- | --- | --- |
|
|
533
|
+
| You send a message, or the agent calls a model | the model providers **you** configure (e.g. `api.openai.com`, `api.opencode.ai`, a local endpoint) | your prompt, the attached file contents and the conversation context |
|
|
534
|
+
| Model catalog refresh (startup, then every 4 h) | `pi.dev` | nothing but the request itself |
|
|
535
|
+
| You install or update a plugin, theme or language pack | `github.com` / `raw.githubusercontent.com` | nothing but the request itself |
|
|
536
|
+
| You check for or install an update | `registry.npmjs.org` | nothing but the request itself |
|
|
537
|
+
| Terminals on Windows, when neither Git Bash nor a `bash` on `PATH` exists | `frippery.org` | one download of `busybox64u.exe` into `<data dir>/bin/bash.exe`, reused offline afterwards |
|
|
538
|
+
|
|
539
|
+
Reverse-proxy setups, the optional `PI_WEB_TOKEN` password and Docker port
|
|
540
|
+
mappings are under your control — see [Security](#security).
|
|
541
|
+
|
|
474
542
|
## Reverse proxy (nginx)
|
|
475
543
|
|
|
476
544
|
Serve pi-web-ui behind nginx on the same host (it binds loopback only, so a
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-web-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.0",
|
|
4
4
|
"description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"bin/",
|
|
17
17
|
"dist/",
|
|
18
|
+
"!dist/desktop",
|
|
18
19
|
"web/dist/",
|
|
19
20
|
"web/public/",
|
|
20
21
|
"themes/",
|
|
@@ -59,7 +60,7 @@
|
|
|
59
60
|
"build:dsh-runtime": "node scripts/copy-dsh-runtime.mjs",
|
|
60
61
|
"build:mermaid-vendor": "node scripts/build-mermaid-vendor.mjs",
|
|
61
62
|
"build:runtrace-vendor": "node scripts/build-runtrace-vendor.mjs",
|
|
62
|
-
"typecheck": "tsc -p tsconfig.server.json --noEmit && tsc -p web/tsconfig.json --noEmit && tsc -p tsconfig.tests.json --noEmit",
|
|
63
|
+
"typecheck": "tsc -p tsconfig.server.json --noEmit && tsc -p web/tsconfig.json --noEmit && tsc -p tsconfig.tests.json --noEmit && tsc -p desktop/tsconfig.json --noEmit",
|
|
63
64
|
"test": "vitest run",
|
|
64
65
|
"test:unit": "vitest run",
|
|
65
66
|
"test:smoke": "node tests/run-smoke.mjs",
|
|
@@ -69,10 +70,13 @@
|
|
|
69
70
|
"changelog:i18n": "node scripts/release-notes.mjs --unreleased",
|
|
70
71
|
"test:freeze": "node tests/freeze-test.mjs",
|
|
71
72
|
"start": "node dist/server/index.js",
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
73
|
+
"build:desktop": "tsc -p desktop/tsconfig.json",
|
|
74
|
+
"desktop:dev": "npm run build:desktop && electron dist/desktop/main.js",
|
|
75
|
+
"desktop:dist": "npm run build && npm run build:desktop && electron-builder -c desktop/electron-builder.yml",
|
|
76
|
+
"format": "prettier --write server/ web/src/ extensions/ scripts/ bin/ desktop/ tests/*.mjs tests/unit/ *.mjs",
|
|
77
|
+
"format:check": "prettier --check server/ web/src/ extensions/ scripts/ bin/ desktop/ tests/*.mjs tests/unit/ *.mjs",
|
|
78
|
+
"lint": "oxlint server/ web/src/ extensions/ scripts/ desktop/",
|
|
79
|
+
"lint:fix": "oxlint --fix server/ web/src/ extensions/ scripts/ desktop/"
|
|
76
80
|
},
|
|
77
81
|
"dependencies": {
|
|
78
82
|
"@deepseek-ai/dsh-sdk-jsonrpc-server": "^0.1.1-rc.2",
|
|
@@ -109,6 +113,8 @@
|
|
|
109
113
|
"concurrently": "^9.1.0",
|
|
110
114
|
"cross-env": "^10.1.0",
|
|
111
115
|
"esbuild": "^0.25.12",
|
|
116
|
+
"electron": "^44.0.0",
|
|
117
|
+
"electron-builder": "^26.0.0",
|
|
112
118
|
"jsdom": "^26.1.0",
|
|
113
119
|
"mermaid": "^11.17.2",
|
|
114
120
|
"oxlint": "^1.81.0",
|