一个基于 Tauri 2.0 + React + TypeScript 的桌面测试项目,已接入 pi,前端采用 Codex 风格布局(侧边栏 + 聊天区 + 底部输入区)。
- 前端输入 prompt
- 通过 Tauri
invoke调用 Rust command:stream_pi_prompt - Rust 以 RPC 模式启动
pi:pi --mode rpc --session <temp-session-file>
- 前端通过 Tauri 事件
pi://stream实时接收text_delta - 支持“停止生成”(优先发送 RPC
abort指令) - 支持会话保持(多轮对话上下文)
- 支持区分“用户手动中止”和“模型中断”
- 支持“重试上一条”
- 支持本地历史面板(可点选重放,数据保存在 localStorage)
- 支持“清空会话”按钮
- 支持自定义智能体管理
- 支持为每个智能体生成独立的 markdown 工作区与记忆骨架
- 安装 Rust 与 Tauri 依赖环境
- 安装 Node.js 与 npm
- 安装项目依赖(现在默认把
pi-mono核心包作为项目级 devDependencies 管理) - 准备 pi 运行时资源:
npm install
npm run prepare:pi-runtimeprepare:pi-runtime 会优先从当前项目 node_modules 里取 @mariozechner/pi-coding-agent
及其相关 pi-mono 核心包,并把它们一起打进 src-tauri/resources/pi-runtime/。
如果还想把本地 pi-mono 仓库快照一并打进去,可额外设置:
PI_MONO_REPO_DIR=/path/to/pi-mono npm run prepare:pi-runtime -- macos开发环境下仍然允许回退到系统 pi,但正式打包不再依赖全局安装。
另外需要你本地可用的模型认证(任选其一):
- 设置 API Key 环境变量(如
ANTHROPIC_API_KEY/OPENAI_API_KEY) - 或先在终端执行
pi并完成/login
npm install
npm run tauri devsrc/App.tsx:UI + 监听pi://stream+ 调用invokesrc-tauri/src/lib.rs:stream_pi_prompt(解析 RPC JSON 事件)abort_pi_stream(中止当前生成)clear_pi_session(清理会话文件)
src-tauri/tauri.conf.json:Tauri 2.0 配置src-tauri/src/pi_runtime.rs:统一的pi运行时解析与打包入口src-tauri/src/scheduler/:定时任务 materialization、调度循环、运行记录与 service 安装逻辑
NineClaw 现在包含一套新的 scheduler core:
scheduled_jobs/scheduled_job_runs/scheduler_leases三张表- 应用内嵌 scheduler 线程作为 fallback
- 同一二进制支持后台 daemon 模式:
cargo run --manifest-path src-tauri/Cargo.toml -- --scheduler-daemon如只想跑一轮扫描用于验证:
NINECLAW_SCHEDULER_RUN_ONCE=1 cargo run --manifest-path src-tauri/Cargo.toml -- --scheduler-daemon架构说明见:
docs/SCHEDULER_ARCHITECTURE.md
NineClaw 现在把智能体拆成两层:
- 数据库负责索引、模型、技能、执行模式
~/.nineclaw/workspace/agents/<agent-id>/负责该智能体自己的IDENTITY.md、ROLE.md、MEMORY.md、TOOLS.md、WORKING.md等文件
相关说明:
docs/AGENT_WORKSPACE_ARCHITECTURE.mddocs/AGENT_CREATION_FLOW.md
- 当前实现会优先使用应用包内置的
pi,找不到时再回退到系统 PATH - 当前方案是“每次请求启动一个 RPC 子进程”,但共享同一个 session 文件以保留上下文
- 当前展示流式文本输出(
text_delta),后续可扩展工具调用事件与更细粒度状态
更多说明见 docs/PI_RUNTIME_BUNDLING.md。