Files
wehub-resource-sync a18c1e4bad
CI / docs (push) Has been cancelled
CI / scripts (push) Has been cancelled
CI / Go Test (ubuntu-latest) (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / frontend-node-25 (push) Has been cancelled
CI / integration (push) Has been cancelled
CI / e2e (push) Has been cancelled
Docker / build-and-push (push) Has been cancelled
CI / Go Test (windows-latest) (push) Has been cancelled
CI / Desktop Unit Tests (Windows) (push) Has been cancelled
CI / coverage (push) Has been cancelled
docs: make Chinese README the default
2026-07-13 10:57:44 +00:00

493 lines
35 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- WEHUB_ZH_README -->
> [!NOTE]
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
> [English](./README.en.md) · [原始项目](https://github.com/kenn-io/agentsview) · [上游 README](https://github.com/kenn-io/agentsview/blob/HEAD/README.md)
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
# agentsview
浏览、搜索并追踪所有 AI 编程智能体(agent)的费用。单个二进制文件,无需账号,一切本地运行。
<p align="center">
<img src="https://agentsview.io/assets/generated/screenshots/dashboard.png" alt="Analytics dashboard" width="720">
</p>
## Install
```bash
# macOS / Linux
curl -fsSL https://agentsview.io/install.sh | bash
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://agentsview.io/install.ps1 | iex"
```
或从 [GitHub Releases](https://github.com/kenn-io/agentsview/releases)) 下载**桌面应用**macOS / Windows),或通过 homebrew`brew install --cask agentsview`
或运行已发布的 Docker 镜像:
```bash
docker run --rm -p 127.0.0.1:8080:8080 \
-v agentsview-data:/data \
-v "$HOME/.claude/projects:/agents/claude:ro" \
-v "$HOME/.forge:/agents/forge:ro" \
-e CLAUDE_PROJECTS_DIR=/agents/claude \
-e FORGE_DIR=/agents/forge \
ghcr.io/kenn-io/agentsview:latest
```
## Quick Start
```bash
agentsview serve # start the server in the foreground
agentsview daemon start # start the writable SQLite daemon
agentsview daemon status # show daemon status
agentsview daemon restart # restart from current configuration
agentsview daemon stop # stop the writable daemon
agentsview session list # read from the daemon if warm, otherwise SQLite
agentsview usage daily # print daily cost summary
```
首次运行时,agentsview 会从你机器上每个受支持的 agent 中发现会话,将其同步到本地 SQLite 数据库,并在 `http://127.0.0.1:8080` 提供 Web UI。
对于 Devin CLI,将 `DEVIN_DIR``devin_dirs` 指向包含 `cli/` 的本地根目录——例如在 macOS 上为 `~/Library/Application Support/devin`,在 Linux 上为 `~/.local/share/devin`,或类似 `.../Application Support/devin` 的脱敏路径。AgentsView 读取 `<root>/cli/...` 下的会话数据,并有意忽略复制的配置或 OAuth 路径。请勿在 bug 报告中粘贴 token、OAuth 文件或其他机密信息。
Claude 和 Codex 数据源也可配置为 `s3://` 根目录,这样中央 AgentsView 实例即可读取其他机器推送到 S3 兼容对象存储的会话。将这些根目录添加到 `claude_project_dirs``codex_sessions_dirs`AgentsView 会列出对象元数据,并仅在同步期间下载已变更的会话。S3 变更检测使用大小、修改时间以及可用的对象指纹,例如 ETag、version ID 或校验和。
桌面应用与对数据新鲜度敏感的 CLI 命令共享一个分离的本地守护进程。只读 CLI 命令在守护进程已运行时会连接它,否则会回退到冷归档上的直接只读 SQLite,以保持一次性脚本的速度。需要最新数据或需要写入的命令(例如 `sync``usage``token-use``pg push``duckdb push`)会在需要时自动启动守护进程。
当你希望显式启动可写 SQLite 守护进程时,使用 `agentsview daemon start`。它会从 `config.toml` 以及受支持的环境变量加载正常的有效配置;`daemon start``daemon restart` 不接受任何 serve 专用标志。后台守护进程在空闲一段时间后会自行退出,除非有客户端请求或守护进程拥有的任务处于活动状态。
现有的 `agentsview serve --background``agentsview serve status``agentsview serve stop` 命令仍然可用。当一次性守护进程需要仅用于 serve 的标志时(例如 `--no-sync` 或未认证的 non-loopback `--host` 覆盖),使用 `serve --background`
## Remote / forwarded access
agentsview 绑定到 loopback,并校验请求的 `Host` 标头,以防范 DNS 重绑定攻击。当你通过 SSH 端口转发、反向代理或远程开发环境(exe.dev、Codespaces、Coder、WSL2)访问时,浏览器会发送服务器无法识别的 `Host`,因此诸如 `/api/v1/settings` 的 API 请求会被以 `403 Forbidden` 拒绝。
要解决此问题,请重启服务器,并将 `--public-url` 设置为你在浏览器中打开的精确 origin:
```bash
# Browser opens http://127.0.0.1:18080 via `ssh -L 18080:127.0.0.1:8080 host`
agentsview serve --public-url http://127.0.0.1:18080
# Browser opens a forwarded hostname
agentsview serve --public-url https://your-workspace.exe.dev
```
使用 `--public-origin`(可重复或逗号分隔)来信任额外的浏览器 origin。如果你将 UI 暴露到 loopback 之外,还应启用 `--require-auth`
## Docker
容器镜像默认使用本地 `agentsview serve`。设置 `PG_SERVE=1` 可将启动命令切换为 `agentsview pg serve`
`docker-compose.prod.yaml` 作为生产示例包含在内:
```bash
docker compose -f docker-compose.prod.yaml up -d
```
附带的 compose 文件会将 agentsview 数据目录持久化到命名卷,并以只读方式挂载 Claude、Codex、Forge 和 OpenCode 的会话根目录。容器以 root 运行,因此对于 `/data`,优先使用命名卷而非主机 bind mount;如果确实要 bind mount,请预先创建具有所需所有权的目录,以避免主目录中出现 root 拥有的文件。
示例仅在 loopback 上发布 UI`127.0.0.1`)。如果你需要暴露到 localhost 之外,请启用 `--require-auth` 并有意识地发布端口。
重要提示:容器化的 agentsview 实例只能发现你显式挂载到容器中的 agent 会话目录。如果你没有挂载某个 agent 的会话目录并将对应的环境变量指向它,该 agent 将不会出现在 UI 中。
PostgreSQL 后端启动示例:
```bash
docker run --rm -p 127.0.0.1:8080:8080 \
-e PG_SERVE=1 \
-e AGENTSVIEW_PG_URL='postgres://user:password@postgres.example.com:5432/agentsview?sslmode=require' \
ghcr.io/kenn-io/agentsview:latest
```
DuckDB 镜像启动示例:
```bash
# Populate /data/sessions.duckdb from the mounted SQLite archive.
docker run --rm \
-v agentsview-data:/data \
-v "$HOME/.claude/projects:/agents/claude:ro" \
-e CLAUDE_PROJECTS_DIR=/agents/claude \
ghcr.io/kenn-io/agentsview:latest duckdb push --full
# Serve the populated mirror read-only.
docker run --rm -p 127.0.0.1:8080:8080 \
-v agentsview-data:/data \
ghcr.io/kenn-io/agentsview:latest duckdb serve
```
Quack 启动示例:
```bash
# Expose the local DuckDB mirror over Quack from the host/container.
QUACK_TOKEN="$(openssl rand -base64 32)"
docker run --rm -p 127.0.0.1:9494:9494 \
-v agentsview-data:/data \
ghcr.io/kenn-io/agentsview:latest \
duckdb quack serve \
--bind quack:0.0.0.0:9494 \
--token "$QUACK_TOKEN" \
--allow-insecure
# Serve the web UI from a remote Quack endpoint.
docker run --rm -p 127.0.0.1:8080:8080 \
-e AGENTSVIEW_DUCKDB_URL='quack:https://duckdb.example.com' \
-e AGENTSVIEW_DUCKDB_TOKEN="$QUACK_TOKEN" \
ghcr.io/kenn-io/agentsview:latest duckdb serve
```
请将 Quack 保持在 loopback 上或置于 TLS 之后。在非 loopback 绑定上使用纯 HTTP 的 Quack 需要 `--allow-insecure`,且应仅在受信任的隧道或反向代理之后使用。
## Token Usage and Cost Tracking
`agentsview usage` 是 ccusage 及类似工具的快速本地替代方案。它追踪**所有**编程 agent 的 token 消耗与计算成本——不仅限于 Claude Code。由于会话数据已索引在 SQLite 中,查询速度比每次运行都重新解析原始会话文件的工具快 100 倍以上。
```bash
# Daily cost summary (default: last 30 days)
agentsview usage daily
# Per-model breakdown
agentsview usage daily --breakdown
# Filter by agent and date range
agentsview usage daily --agent claude --since 2026-04-01
# One-line summary for shell prompts / status bars
agentsview usage daily --all --json
agentsview usage statusline
```
功能:
- 通过 LiteLLM 费率自动定价(含离线回退)
- 支持 prompt caching 的成本计算(cache creation / read tokens
- 按模型细分,支持 `--breakdown`
- 日期过滤(`--since``--until``--all`)、agent 过滤(`--agent`
- JSON 输出(`--json`),便于脚本化
- 时区感知的日期分桶(`--timezone`
- 可独立运行——无需服务器,直接执行命令即可
## 按会话详情
`agentsview session usage <id>` 会打印单个会话的按会话 token 统计以及成本估算。输出会报告该会话的总输出 token 数与峰值上下文 token 数,并在会话所用模型(`has_cost`)提供定价信息时给出以 USD`cost_usd`)计的成本估算。成本在内部根据输入/输出与缓存 token 计算,但对外仅与成本一并报告输出 token 与峰值上下文总量。
```bash
# Print token usage and cost for a specific session
agentsview session usage <id>
# JSON output for scripting
agentsview session usage <id> --format json
```
相同的按会话用量数据也可通过 REST API 获取:
```bash
GET /api/v1/sessions/{id}/usage
```
响应包含 CLI JSON schema 中的 `session_id``agent``project``total_output_tokens``peak_context_tokens``has_token_data``cost_usd``has_cost``models``unpriced_models` 字段。HTTP 响应还会包含 `server_running: true`。已存在的会话即使缺少 token 或成本数据也会返回 `200`;不存在的会话则返回 `404`
已弃用的别名 `agentsview token-use <id>` 仍保留以兼容旧用法,且现在也会报告成本估算。
## 会话统计
`agentsview stats` 会输出针对已记录会话的窗口范围分析:总量、原型(automation 与 quick/standard/deep/marathon)、会话时长、用户消息数、峰值上下文、每轮工具数等分布,以及缓存经济性、工具/模型/智能体组合和按小时的时间分布。`--format json` 输出遵循适合下游消费者的版本化 v1 schema(`schema_version: 1`)。
默认情况下,`stats` 仅读取本地 SQLite 归档。基于 Git 的结果指标为可选,因为在大型或缺失的仓库上可能较慢或不稳定:使用 `--include-git-outcomes` 获取提交数/代码行数/变更文件数,使用 `--include-github-outcomes` 通过 `gh` 获取 GitHub PR 数量(这也会启用 git 结果指标)。
```bash
# Human-readable summary over the last 28 days
agentsview stats
# Machine-readable JSON over a fixed date range
agentsview stats --format json --since 2026-04-01 --until 2026-04-15
# Restrict to one agent and inspect the schema
agentsview stats --format json --agent claude | jq '.schema_version'
# Include expensive local git outcome metrics explicitly
agentsview stats --include-git-outcomes
```
## 会话浏览器
| 仪表盘 | 会话查看器 |
| ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
| ![Dashboard](https://agentsview.io/assets/generated/screenshots/dashboard.png) | ![Session viewer](https://agentsview.io/assets/generated/screenshots/message-viewer.png) |
| 搜索 | 活动热力图 |
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| ![Search](https://agentsview.io/assets/generated/screenshots/search-results.png) | ![Heatmap](https://agentsview.io/assets/generated/screenshots/heatmap.png) |
- **全文搜索** — 覆盖所有消息内容(FTS5)
- **语义搜索**(可选)— 使用任意 OpenAI 兼容的 embeddings 端点索引会话内容,并通过 `agentsview session search --semantic``--hybrid` 按语义搜索;每次内容搜索匹配都会引用其来源的对话单元([文档](https://agentsview.io/semantic-search/))
- **Token 用量与成本仪表盘** — 按会话、按模型的成本明细,以及每日支出图表,均在 Web UI 中展示
- **分析仪表盘** — 活动热力图、工具使用情况、速度指标、项目分解
- **最近编辑动态** — 各会话中智能体最近修改的文件,按项目与路径分组,并链接到触发该变更的消息
- 活跃会话收到新消息时,通过 SSE **实时更新**
- **键盘优先**导航(`j`/`k`/`[`/`]``Cmd+K` 搜索、按 `?` 查看全部快捷键)
- 将会话**导出**为 HTML 或发布到 GitHub Gist
## 支持的智能体
agentsview 可发现来自以下所有来源的会话。Aider 为可选,因为它没有统一的会话目录;设置 `AIDER_DIR``aider_dirs` 以启用。Amp 支持已弃用,因为当前 Amp 版本可能将线程存储在服务端,本地仅保留存根;agentsview 仍可解析历史本地 Amp 线程 JSON 文件。
| 智能体 | 会话目录 |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Aider | `<repo>/.aider.chat.history.md`(按仓库;通过 `AIDER_DIR``aider_dirs` 可选启用) |
| Amp(已弃用) | `~/.local/share/amp/threads/`(仅历史本地线程 JSON) |
| Antigravity | `~/.gemini/antigravity/` |
| Antigravity CLI | `~/.gemini/antigravity-cli/`(见下文说明) |
| Claude Code | `~/.claude/projects/` |
| OpenClaude | `~/.openclaude/projects/` |
| Claude Cowork | `~/Library/Application Support/Claude/local-agent-mode-sessions/`macOS |
| Codex | `~/.codex/sessions/` |
| Copilot CLI | `~/.copilot/` |
| Devin CLI | `~/.local/share/devin/`Linux)、`~/Library/Application Support/devin/`macOS);将 `DEVIN_DIR` / `devin_dirs` 指向包含 `cli/` 的根目录 |
| Cortex Code | `~/.snowflake/cortex/conversations/` |
| Cursor | `~/.cursor/projects/` |
| DeepSeek TUI | `~/.codewhale/sessions/``~/.deepseek/sessions/` |
| Forge | `~/.forge/` |
| Gemini CLI | `~/.gemini/` |
| gptme | `~/.local/share/gptme/logs/` |
| Grok | `~/.grok/sessions/` |
| Hermes Agent | `~/.hermes/sessions/` |
| iFlow | `~/.iflow/projects/` |
| Kilo | `~/.local/share/kilo/` |
| Kimi | `~/.kimi/sessions/` |
| Kiro CLI | `~/.kiro/sessions/cli/``~/.local/share/kiro-cli/` |
| Kiro IDE | `~/Library/Application Support/Kiro/`macOS |
| MiMoCode | `~/.local/share/mimocode/` |
| Mistral Vibe | `~/.vibe/logs/session/` |
| OpenClaw | `~/.openclaw/agents/` |
| OpenCode | `~/.local/share/opencode/` |
| OpenHands CLI | `~/.openhands/conversations/` |
| OhMyPi | `~/.omp/agent/sessions/` |
| Pi | `~/.pi/agent/sessions/` |
| Piebald | `~/.local/share/piebald/` |
| Posit Assistant | `~/.posit/assistant/workspaces/` |
| Positron Assistant | `~/Library/Application Support/Positron/User/`macOS |
| QClaw | `~/.qclaw/agents/` |
| Qoder | `~/.qoder/projects/``~/.qoderwork/projects/` |
| Qwen Code | `~/.qwen/projects/` |
| QwenPaw | `~/.copaw/workspaces/``~/.qwenpaw/workspaces/` |
| Reasonix | `~/.reasonix/``%APPDATA%\\reasonix\\`Windows |
| VSCode Copilot | `~/Library/Application Support/Code/User/`macOS |
| Visual Studio Copilot | `%LOCALAPPDATA%\\Temp\\VSGitHubCopilotLogs\\traces\\`Windows)、`~/Library/Caches/VSGitHubCopilotLogs/traces/`macOS)、`~/.cache/VSGitHubCopilotLogs/traces/`Linux |
| Windsurf | `~/Library/Application Support/Windsurf/User/`macOS)、`~/.config/Windsurf/User/`Linux)、`%APPDATA%\\Windsurf\\User\\`Windows |
| Warp | `~/.warp/`(因平台而异) |
| WorkBuddy | `~/.workbuddy/projects/` |
| ZCode | `~/.zcode/cli/db/``~/.zcode/cli/` |
| Zed | `~/Library/Application Support/Zed/`macOS |
| Zencoder | `~/.zencoder/sessions/` |
Grok 会话从 `summary.json`(标题、时间戳、项目)读取,可选的 `signals.json`token 计数器),以及存在时的 `chat_history.jsonl` 用于完整转录(用户轮次、助手回复、思考过程和工具调用)。若缺少 `chat_history.jsonl`AgentsView 会回退到仅摘要模式。设置 `GROK_DIR``grok_dirs` 可覆盖默认目录。
每个目录均可通过环境变量覆盖。详见[配置文档](https://agentsview.io/configuration/))。Cursor 归因统计默认从 `~/.cursor/ai-tracking/ai-code-tracking.db` 进行实时的、本机本地读取,并可通过 `AGENTSVIEW_CURSOR_ATTRIBUTION_DB` 重定向;它们不会通过 PostgreSQL 同步或聚合。
### Aider:按仓库的 Markdown 日志
Aider 没有中央会话存储;它为每个仓库写入一个 `.aider.chat.history.md` Markdown 日志,单个日志会累积多次运行(每次 `aider` 启动对应一次,以 `# aider chat started at ...` 标头分隔)。agentsview 将**每次运行索引为独立会话**。
AgentsView 默认不会扫描 Aider 日志。早期版本曾尝试对主目录进行始终开启的有界扫描,但并不可靠:桌面启动和后台使用刷新仍可能触发 macOS 对受保护文件夹的隐私提示。要启用 Aider,请将 `AIDER_DIR`(或 `aider_dirs` 配置键)指向你明确希望扫描的代码根目录。扫描在每个已配置根目录下最多向下深入四层,按名称跳过 vendor/build/VCS 目录(`node_modules``target``.git``Library``go``.cargo` 及类似目录),并在两秒墙钟时间预算后停止。在 macOS 上,宽泛的主目录根仍会跳过受保护的顶层文件夹,除非直接配置了其中某个文件夹。实时文件监视器仅浅层监视已配置的 Aider 根目录;新仓库由定期同步拾取,该同步每 15 分钟运行一次。
由于格式源自 Markdown,角色从行前缀重建,且没有逐条消息的时间戳;运行的开始时间来自其 `# aider chat started at ...` 标头(以本地时间写入,假定为 UTC)。
### JetBrains Copilot(通过导出器)
JetBrains IDE 将 Copilot 聊天存储在 Nitrite 数据库中,agentsview 不会直接读取。当前支持的路径是先用 [copilot-jetbrains-exporter](https://github.com/MCBoarder289/copilot-jetbrains-exporter), 将这些会话导出为 Copilot JSONL,然后将 agentsview 指向该输出目录。
```bash
# Export JetBrains Copilot sessions to JSONL
copilot-jetbrains-exporter --output ~/.copilot/jetbrains-sessions
# Tell agentsview to index the exported sessions
export COPILOT_DIR=~/.copilot/jetbrains-sessions
```
或在 `~/.agentsview/config.toml` 中:
```toml
copilot_dirs = ["~/.copilot/jetbrains-sessions"]
```
若希望 agentsview 从该来源拾取新对话,请在新的 JetBrains Copilot 会话后重新运行导出器。
### Antigravity CLI:高分辨率转录
Antigravity CLI 会话以两种磁盘格式出现:较新版本将对话轨迹存储为 SQLite `.db` 文件,较旧版本使用 AES-GCM 加密的 `.pb` 文件。无论哪种格式,完整转录——结构化的工具调用、结果、推理和 diff——均来自 `<uuid>.trajectory.json` 侧车文件。若无覆盖的侧车文件,agentsview 会回退到**摘要模式**:对原始 `.db` 步骤进行启发式解码(仅提示词和工具调用名称),或对 `.pb` 会话,显示来自 `history.jsonl` 的提示词以及 `brain/` 下的任何纯文本产物(计划、演练、检查点)。摘要模式会话在详情页眉显示链接到本文的「Summary mode」徽章。
要为 `.db``.pb` 会话 alike 解锁完整转录,请在 agentsview 旁运行 [agy-reader](https://github.com/mjacobs/agy-reader)。agy-reader 与本地 Antigravity 守护进程通信,解密每次对话,并在源文件旁写入 `<uuid>.trajectory.json` 侧车文件。agentsview 的文件监视器会自动检测侧车文件并就地解析,替代摘要模式——无需重启 agentsview。
```bash
go install github.com/mjacobs/agy-reader@latest
# Generate sidecars for existing sessions...
agy-reader --sync
# ...or keep them fresh as you work.
agy-reader --watch
```
agy-reader 通过解析 `~/.gemini/antigravity-cli/cli.log` 自动发现 Antigravity 守护进程 URL。若发现失败(例如日志已轮转),命令会打印特定于平台的说明,用于定位端口并手动导出 `ANTIGRAVITY_DAEMON_URL`
侧车文件保留在你的机器上。agentsview 不会发起出站请求来生成或读取它们,并将侧车文件视为不受信任的结构化输入——信任模型见 [SECURITY.md](SECURITY.md)。
## PostgreSQL 同步
将会话数据推送到共享 PostgreSQL 实例,供团队仪表板使用:
```bash
agentsview pg push # push local data to the default PG target
agentsview pg push archive # push to one named PG target
agentsview pg push --all # push every configured PG target sequentially
agentsview pg status # show status for the default PG target
agentsview pg status archive # show status for one named PG target
agentsview pg status --all # show status for every configured PG target
agentsview pg serve # serve web UI from the default PG target (read-only)
```
单目标配置仍使用旧版 `[pg]` 块。要管理多个 PostgreSQL 目标,请定义命名的 `[pg.NAME]` 块,并在存在多个目标时设置 `default_pg`
```toml
default_pg = "work"
[pg.work]
url = "postgres://user:pass@work-db/agentsview"
machine_name = "laptop"
[pg.archive]
url = "postgres://user:pass@archive-db/agentsview"
machine_name = "laptop-archive"
exclude_projects = ["scratch"]
```
命名目标名称不区分大小写进行规范化。`all``local` 以及旧版 `[pg]` 字段名 `url``schema``machine_name``allow_insecure``projects``exclude_projects` 不能用于 `[pg.NAME]`
`AGENTSVIEW_PG_URL``AGENTSVIEW_PG_SCHEMA``AGENTSVIEW_PG_MACHINE` 仍然可用,但在命名目标模式下它们仅应用于有效默认目标。它们不会重写每个命名的 `[pg.NAME]` 条目。
### 自动推送(后台服务)
要在无需手动运行 `pg push` 的情况下保持共享 PostgreSQL 数据库为最新,请运行自动推送守护进程。它会监视你的会话目录,并在记录新会话后不久推送,并以定期下限作为安全网:
```bash
agentsview pg push --watch # foreground, Ctrl-C to stop
agentsview pg push archive --watch # watch one named PG target
agentsview pg push --watch --debounce 1m # custom coalesce window
agentsview pg push --watch --interval 5m # custom floor interval
```
除非你传入一个目标名称,否则 `--watch` 遵循默认 PG 目标。`--all --watch` 会被拒绝;多目标后台监视目前仍不在范围内。
守护进程读取与 `pg push` 相同的 `[pg]` 配置,因此必须在配置文件中(或其展开的环境变量中)设置 PostgreSQL DSN。请保护配置文件,因为它包含凭据:
```bash
chmod 600 ~/.agentsview/config.toml
```
要以 OS 服务方式无人值守运行(macOS 上使用 launchdLinux 上使用 `systemd --user`):
```bash
agentsview pg service install # generate the unit, enable + start it
agentsview pg service status # show manager status
agentsview pg service logs -f # follow the service log
agentsview pg service uninstall # stop and remove
```
`pg serve``pg service` 始终使用有效默认 PG 目标。在命名目标模式下,设置 `default_pg` 以选择这些长期运行命令使用的目标。
**Linux 无头机器:** 除非为你的用户启用了 lingering,否则 systemd `--user` 服务会在注销时停止,且不会在启动时自动启动。`install` 会检测此情况并打印命令;你也可以自行运行:
```bash
loginctl enable-linger "$USER"
```
请参阅 [PostgreSQL 文档](https://agentsview.io/postgresql/) 了解安装与配置。
## DuckDB 镜像与 Quack
DuckDB 支持是一种镜像后端,不能替代本地 SQLite 归档。`agentsview serve` 仍负责向 SQLite 执行主摄取。当你需要可移植的分析文件、从镜像进行只读本地服务,或通过 DuckDB 的 Quack 协议进行远程只读访问时,可使用 DuckDB。
```bash
agentsview duckdb push # mirror SQLite into DuckDB
agentsview duckdb status # show mirror sync status
agentsview duckdb serve # serve web UI from DuckDB (read-only)
agentsview duckdb quack serve # expose the local DuckDB file over Quack
```
`agentsview duckdb serve` 会读取 `[duckdb].path``AGENTSVIEW_DUCKDB_PATH`。要从远程 Quack 端点提供服务,请改为设置 `AGENTSVIEW_DUCKDB_URL``AGENTSVIEW_DUCKDB_TOKEN`。Quack 仍是较新的 DuckDB 协议,因此 agentsview 采用保守默认值:本地 Quack 服务绑定到 loopback、要求 token,并拒绝非 loopback 的纯 HTTP,除非明确设置 `--allow-insecure`。远程使用时,优先使用 TLS URL,或将 Quack 置于经身份验证的隧道/代理之后。
后端模式:
- SQLite:主要本地归档,支持文件同步、FTS5 搜索和可写 UI。
- PostgreSQL:可选的共享团队后端;从 SQLite 推送,只读提供服务。
- DuckDB:可选的镜像文件或 Quack 端点;从 SQLite 推送,只读提供服务。
故障排查:
- 如果 `duckdb push` 无法打开镜像,请确认二进制文件已针对你的平台使用 DuckDB Go 驱动构建,且 `AGENTSVIEW_DUCKDB_PATH` 指向可写的文件位置。
- 如果 Quack 命令因扩展错误失败,请更新 agentsview 二进制,使内嵌的 DuckDB 运行时包含 Quack 扩展。
- 如果远程 attach 失败,请检查 token、`quack:` URL、TLS/代理终止,以及服务器是否有意使用 `--allow-insecure` 以进行纯非 loopback 绑定。
- DuckDB 搜索目前使用子字符串/正则表达式回退行为。SQLite FTS5 仍是主要本地服务的索引搜索路径。
## 隐私
agentsview 在服务器启动时以及运行期间每 24 小时,会向 PostHog 发送一次有限的匿名 `daemon_active` 遥测 ping,并使用稳定的随机安装 ID 作为事件 `DistinctId`。事件包含 `application=agentsview`、应用版本、commit、操作系统和 CPU 架构,以及 `$process_person_profile=false``$geoip_disable=true`。不包含会话、项目、提示词、文件路径、账户或机器身份信息。可使用 `AGENTSVIEW_TELEMETRY_ENABLED=0``TELEMETRY_ENABLED=0` 禁用遥测。无论在何种环境下,Go 测试二进制中也会硬性禁用遥测。
所有会话数据均保留在你的本机。服务器默认绑定到 `127.0.0.1`。更新检查为可选项,可使用 `--no-update-check` 禁用。
## 文档
完整文档见 **[agentsview.io](https://agentsview.io)**:
[快速入门](https://agentsview.io/quickstart/) --
[使用指南](https://agentsview.io/usage/) --
[CLI 参考](https://agentsview.io/commands/) --
[配置](https://agentsview.io/configuration/) --
[架构](https://agentsview.io/architecture/)
______________________________________________________________________
## 开发
需要 Go 1.26+CGO)、Node.js 22+。
```bash
make dev # Go server (dev mode)
make frontend-dev # Vite+ dev server (run alongside make dev)
make build # build binary with embedded frontend
make install # install to ~/.local/bin
```
```bash
make test # Go tests (CGO_ENABLED=1 -tags "fts5")
make bench-backends # compare SQLite, DuckDB, and PostgreSQL store reads
make lint # golangci-lint + NilAway
make nilaway # NilAway through custom golangci-lint
make e2e # Playwright E2E tests
```
`make bench-backends` 需要 Docker。它会通过 testcontainers 启动 PostgreSQL 容器,将相同的 SQLite fixture 镜像到 DuckDB 和 PostgreSQL,并对共享的 `db.Store` 读取查询进行基准测试以作相对比较。默认 fixture 为 1,000 个会话和 64,000 条消息;可使用 `BENCH_BACKENDS_SESSIONS``BENCH_BACKENDS_MESSAGES_PER_SESSION` 进行扩展。当 Docker CLI 使用非默认套接字时,在运行基准测试前请为相应套接字导出 `DOCKER_HOST`
通过 [prek](https://github.com/j178/prek): 在克隆后运行 `make lint-tools``make install-hooks`(需要 `prek``uv`)。
### 项目结构
```
cmd/agentsview/ CLI entrypoint
internal/ Go packages (config, db, parser, server, sync, postgres)
frontend/ Svelte 5 SPA (Vite+, TypeScript)
desktop/ Tauri desktop wrapper
```
## 致谢
灵感来自 Andy Fischer 的
[claude-history-tool](https://github.com/andyfischer/ai-coding-tools/tree/main/claude-history-tool)
以及 Simon Willison 的
[claude-code-transcripts](https://github.com/simonw/claude-code-transcripts)。
## 许可证
MIT