{"_id":"@async23/pi-sessions-studio","name":"@async23/pi-sessions-studio","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@async23/pi-sessions-studio","version":"1.0.0","description":"Pi 的本地会话可观测与复盘工作台，提供 /studio Extension 与浏览器分析界面","type":"module","license":"MIT","keywords":["pi-package","pi-coding-agent","sessions","observability"],"repository":{"type":"git","url":"git+https://github.com/Async23/pi-packages.git","directory":"packages/pi-sessions-studio"},"homepage":"https://github.com/Async23/pi-packages/tree/main/packages/pi-sessions-studio#readme","bugs":{"url":"https://github.com/Async23/pi-packages/issues"},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"pi":{"extensions":["./extensions/index.js"]},"workspaces":["server","web"],"scripts":{"dev":"concurrently -n server,web -c blue,magenta \"npm --prefix server run dev\" \"npm --prefix web run dev\"","build":"npm --prefix web run build","test:json-wheel":"node scripts/check-json-wheel.mjs","test:session-controls":"node scripts/check-session-controls.mjs","test:special-entries":"node scripts/check-special-entries.mjs","test:visual-layout":"node scripts/check-visual-layout.mjs","test:pi-package":"node scripts/check-pi-package.mjs","start":"node server/src/index.js","prepack":"npm run build"},"dependencies":{"compression":"^1.7.5","express":"^4.21.2"},"devDependencies":{"concurrently":"^9.1.2"},"allowScripts":{"esbuild@0.21.5":true},"_id":"@async23/pi-sessions-studio@1.0.0","gitHead":"7294dbdce6267d0a6a2c7876933ffe942911ca78","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-qVs1/ueXFxxqiw3VEUEskxvrLfog82lwg8YSN+qc67wp9zz1JyPjZDcCahuRTcYKT5iqb4Es91XNOo1QtgWyFA==","shasum":"160e2971cbaf004d2a51fe8bcbaeba974c76fae0","tarball":"https://registry.npmjs.org/@async23/pi-sessions-studio/-/pi-sessions-studio-1.0.0.tgz","fileCount":18,"unpackedSize":1604322,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDjPBx9YMTVPgyZTv8O386zciUr42p9v6i8iP25GzNCOgIhALaOTDuUTDRbvWRLTyJfcAqHoSSTrV/qG2RjVfxVXsol"}]},"_npmUser":{"name":"async23","email":"gearrr005@gmail.com"},"directories":{},"maintainers":[{"name":"async23","email":"gearrr005@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-sessions-studio_1.0.0_1787041449914_0.9028310606634735"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T08:24:09.667Z","1.0.0":"2026-08-18T08:24:10.104Z","modified":"2026-08-18T08:24:10.300Z"},"maintainers":[{"name":"async23","email":"gearrr005@gmail.com"}],"description":"Pi 的本地会话可观测与复盘工作台，提供 /studio Extension 与浏览器分析界面","homepage":"https://github.com/Async23/pi-packages/tree/main/packages/pi-sessions-studio#readme","keywords":["pi-package","pi-coding-agent","sessions","observability"],"repository":{"type":"git","url":"git+https://github.com/Async23/pi-packages.git","directory":"packages/pi-sessions-studio"},"bugs":{"url":"https://github.com/Async23/pi-packages/issues"},"license":"MIT","readme":"# @async23/pi-sessions-studio\n\nPi 的本地会话可观测与复盘工作台。它通过 `/studio` 从 Pi 当前会话进入浏览器，将 `~/.pi/agent/sessions` 中的分支、工具调用、上下文、Token 与成本还原成可检索、可解释、可导出的工作记录。\n\n```text\nPi TUI ── /studio ──► Pi Package Extension\n                           │ 懒启动 / 复用本地服务\n                           ▼\n                    browser ui (React + Vite + ECharts)\n                           │  /api/*\n                           ▼\n                    backend (Node.js + Express)\n                           │  只读扫描 / 增量解析\n                           ▼\n                    ~/.pi/agent/sessions/**/*.jsonl\n```\n\n## 功能\n\n- **总览**：会话/消息/工具调用/Token/成本 KPI，近 30 天活动趋势，工具 Top 10，项目排行，最近会话\n- **会话浏览器**：按项目/关键词过滤，按活动时间/成本/Token/时长等排序，无限加载\n- **会话详情**：\n  - 完整对话流：用户 / 助手 / 思考过程（折叠）/ 工具调用与结果自动配对 / 手动 bash / 系统事件\n  - **分支可视化**：识别重试/回溯产生的树形分支，标出分支点，可切换任意分支路径\n  - 上下文规模趋势图（观察 compaction 锯齿）、用户消息大纲导航、逐条原始 JSON\n  - 导出 Markdown、fork 父会话跳转、搜索结果锚点定位\n- **全局搜索**：跨会话全文检索（对话/思考/工具参数与输出/压缩摘要），类型与项目过滤，高亮命中\n- **统计洞察**：每日 Token/成本、模型成本分布、周×小时活跃热力图、项目成本、模型缓存命中率、模型明细表\n- **数据格式**：内置 JSONL 格式说明文档，便于学习理解\n\n## 作为 Pi Package 使用（推荐）\n\n```bash\npi install npm:@async23/pi-sessions-studio\n```\n\n安装后重启 Pi 或执行 `/reload`，然后使用：\n\n| 命令 | 说明 |\n| --- | --- |\n| `/studio` | 懒启动本地服务，并直接打开当前持久化会话与当前分支位置 |\n| `/studio home` | 打开 Studio 总览 |\n| `/studio status` | 查看当前 Session 数据目录对应的服务状态 |\n| `/studio stop` | 停止本地服务 |\n\nExtension 只在用户执行 `/studio` 时启动服务；同一 Session 数据目录会复用同一个后台进程。服务绑定 `127.0.0.1`，运行状态和日志保存在 `PI_CODING_AGENT_DIR`（默认 `~/.pi/agent`）下的 `pi-sessions-studio/`。\n\n开发时也可从 monorepo 源码安装：\n\n```bash\ncd packages/pi-sessions-studio\nnpm install\nnpm run build\npi install \"$(pwd)\"\n```\n\n## 独立运行与开发\n\n```bash\nnpm install\n\n# 生产模式（单端口）\nnpm run build\nnpm start            # → http://127.0.0.1:5177\n\n# 开发模式（前端热更新）\nnpm run dev          # 后端 :5177 + 前端 :5173（代理 /api）\n```\n\n## 配置\n\n| 环境变量 | 默认值 | 说明 |\n| --- | --- | --- |\n| `PI_SESSIONS_DIR` | `~/.pi/agent/sessions` | 独立运行时的会话数据目录 |\n| `PI_CODING_AGENT_SESSION_DIR` | `<PI_CODING_AGENT_DIR>/sessions` | 自定义 Pi Session 数据目录；未设置时 Extension 从当前项目目录定位全局 `sessions` 根目录 |\n| `PI_CODING_AGENT_DIR` | `~/.pi/agent` | Pi 配置目录，同时作为 Studio 后台进程状态目录的上级目录 |\n| `PI_STUDIO_HOST` | `127.0.0.1` | 后端监听地址 |\n| `PORT` | `5177` | 独立运行端口；Extension 启动时使用系统分配的空闲端口 |\n\n## API\n\n| 路径 | 说明 |\n| --- | --- |\n| `GET /api/health` | 服务身份、PID、监听地址与 Session 数据目录 |\n| `GET /api/overview` | 全局总览（KPI、近 30 天、Top 工具/项目、最近会话） |\n| `GET /api/projects` | 项目列表及聚合统计 |\n| `GET /api/sessions?project=&q=&sort=&order=&limit=&offset=` | 会话列表 |\n| `GET /api/sessions/:id` | 会话详情（全部原始条目 + 摘要） |\n| `GET /api/sessions/:id/export.md` | 导出主路径为 Markdown |\n| `GET /api/search?q=&kind=&project=&limit=` | 全文搜索 |\n| `GET /api/stats?project=` | 统计（每日/热力图/模型/工具/项目） |\n\n数据只读，不会修改任何会话文件；文件按 mtime 增量重解析，TUI 里新产生的消息刷新页面即可看到。\n","readmeFilename":"README.md","_rev":"1-e4007822b4939d7eb962969caf504fb6"}