Skip to content
mitohub74-sudoPublic

About

Windows desktop chat client (Electron + React) with OpenAI / AstrBot backends

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Chatwith

Windows 桌面聊天客户端:流式对话、本地保存会话。助理名默认「威斯特」。

  • 阶段 1:backend=openai,直连 DeepSeek(OpenAI 兼容)
  • 阶段 2:backend=astrbot,对接本机 AstrBot 管家(人格 / 记忆 / 知识库)

快速开始

  1. 确认已安装 Node.js(装 LTS 即可)
  2. 安装依赖并启动:
npm install
npm run dev

npm install 会自动触发 postinstall,检查并补装 Electron 二进制。

若 Electron 下载失败(国内网络常见),先设镜像再补装:

set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm run fix-electron

打包成 Windows 应用

npm run dist

产物在 release/(已 gitignore):

文件 说明
Chatwith-*-portable.exe 免安装单文件,推荐
Chatwith-*-x64.exe NSIS 安装包
win-unpacked/Chatwith.exe 解压目录直接运行

首次运行:把项目里的 config.example.json 复制到数据目录并改名为 config.json,填入 API Key。数据目录位置见下方「数据目录」一节。

数据目录(仓库外)

所有用户数据都不在仓库里,统一放在数据目录下:

内容 文件
配置(含 API Key) config.json
会话 sessions/*.json
待办 todos.json

数据目录的位置(src/main/paths.ts 的 getDataRoot()):

  1. 环境变量 CHATWITH_DATA_DIR(最高优先级,便于测试或多套数据切换)
  2. 开发运行:仓库同级的 Data/
  3. 打包运行:可执行文件同级的 Data/

举例:仓库在 D:\code\chatwith,开发运行时数据目录就是 D:\code\Data\。

这样做的意义:仓库目录可以随意提交、打包、分享、备份,永远不会带上会话内容和 API Key;git clean 或切换分支也不会误删你的聊天记录。

手动步骤(可选)

  1. 安装依赖:npm install
  2. 配置 API:复制 config.example.json 到数据目录并改名为 config.json,按下方填写
  3. 启动桌面:npm run dev
  4. 终端对话测试(不开窗口):
    • 交互:npm run chat
    • 单次:npm run chat -- --once "你好"

若 Electron 下载失败:

set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm run fix-electron

配置:DeepSeek(阶段 1)

配置文件统一放在数据目录下的 config.json。示例:

{
  "backend": "openai",
  "apiKey": "<DeepSeek API Key>",
  "model": "deepseek-v4-flash",
  "baseURL": "https://api.deepseek.com",
  "assistantName": "威斯特",
  "astrbotUsername": "chatwith"
}

配置:AstrBot(阶段 2)

管家为 AstrBot 桌面安装版(默认监听 127.0.0.1:6185)。Chatwith 只连 http://127.0.0.1:6185,不要把 AstrBot 安装路径写进 config.json;安装目录默认只读(勿改内嵌源码/数据库)。详见 plans/stage-2.md。

  1. 启动 AstrBot 桌面端,确认可打开 http://127.0.0.1:6185/api/v1/docs
  2. 在 AstrBot 设置中创建 API Key,并勾选 chat scope
  3. 数据目录下的 config.json:
{
  "backend": "astrbot",
  "apiKey": "<AstrBot API Key,abk_ 开头>",
  "baseURL": "http://127.0.0.1:6185",
  "model": "deepseek/deepseek-v4-pro",
  "assistantName": "威斯特",
  "astrbotUsername": "chatwith"
}

说明:

  • AstrBot 用的是自有接口 POST /api/v1/chat,不是 OpenAI /v1/chat/completions
  • baseURL 填 AstrBot 根地址(不要加 /api/v1)
  • 切回 DeepSeek:把 backend 改回 openai,并恢复 DeepSeek 的 apiKey / baseURL / model
  • 先用 npm run chat 冒烟,再开桌面窗口
  • 多轮冒烟(可选):node scripts/verify-astrbot-multiturn.mjs

已实现能力(2026-08-06 更新)

  • Markdown 渲染:表格/代码块/加粗/行内代码;超宽表格自动收起为块,点击弹出可拖动、可关闭的弹窗
  • 消息宽度自适应:随窗口缩放,不再固定 50 字宽
  • 底部状态栏:连接状态(正常/回复中/异常)、模型、本次 token 与费用(优先真实值,来自 AstrBot agent_stats;无数据时估算)、余额占位,点击看详情
  • 待办气泡:桌面透明悬浮窗,显示最近待办与倒计时;可拖动、贴屏幕边缘自动收边、到点系统通知 + 响铃;主窗口侧边栏「📌 待办气泡」添加,数据存 Data/todos.json
  • 链路稳定性(W6):连接失败自动重试 1 次;三级超时(连接 30s / 首包 60s / 流中断 180s)均明确报错;空响应检测;推理内容泄漏过滤(chain_type=null 的「🤔 思考」块)

使用说明

  • 左侧:+ 新对话(若当前已是空对话,不会重复创建)
  • 双击会话名可重命名;右键或 × 删除
  • Enter 发送,Shift+Enter 换行;生成中可停止
  • 会话保存在数据目录的 sessions/ 下(仓库外,天然不进 Git)

安全

  • 用户数据(config.json、sessions/、todos.json)全部在仓库外的 Data/,仓库里没有任何密钥或聊天记录
  • 切勿把 API Key 提交到 Git 或贴进公开文档;.gitignore 仍保留 config.json / data/ 作为兜底
  • 若 Key 曾泄露,请到 DeepSeek / AstrBot 控制台轮换密钥

手机端 H5/PWA(经 ECS 中转)

管家仍在本机 AstrBot;ECS 只做 HTTPS 入口。说明见 plans/mobile-ecs.md 与 deploy/ecs/README.md。

cd mobile
npm install
npm run dev

本机调试:设置里 API Base 填 http://127.0.0.1:6185。公网:按 deploy/ecs 搭隧道后 Base 填 https://你的域名。

规划文档

About

Windows desktop chat client (Electron + React) with OpenAI / AstrBot backends

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages