🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

执行轨迹查看器 npxcnency-ux/pi-trace-extension

DeepSeek Harnessv0.1.16
npxcnency-ux64 天前有提交已提供中文文档扫描:含敏感能力

实验性功能:为 pi-agent 打造的 Langfuse 风格本地追踪查看器

41.1/100
综合分
18
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add npxcnency-ux/pi-trace-extension
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/28·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 64 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包pi-trace-extension @ 0.1.16
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 16:37:30

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 14 处,展示前 14 条)
  • 写入本地文件
    extensions/trace/index.ts:425
    fs.mkdirSync(sessionDir, { recursive: true });
  • 写入本地文件
    extensions/trace/index.ts:427
    writeStream = fs.createWriteStream(traceFile, { flags: "a" });
  • 写入本地文件
    extensions/trace/index.ts:438
    fs.mkdirSync(sessionDir, { recursive: true });
  • 写入本地文件
    extensions/trace/index.ts:440
    writeStream = fs.createWriteStream(traceFile, { flags: "a" });
  • 读取本地文件
    extensions/trace/index.ts:464
    if (!fs.existsSync(PYTHON_SCRIPT)) {
  • 执行外部命令来自配置/变量
    extensions/trace/index.ts:470
    const r = spawnSync(PYTHON_BIN, args, { encoding: "utf-8", timeout: 30000 });
  • 执行外部命令来自配置/变量
    extensions/trace/index.ts:473
    const child = spawn(PYTHON_BIN, args, { stdio: "ignore", detached: true });
  • 读取本地文件
    extensions/trace/index.ts:487
    if (!fs.existsSync(PYTHON_SCRIPT)) {
  • 执行外部命令来自配置/变量
    extensions/trace/index.ts:493
    const r = spawnSync(PYTHON_BIN, args, { encoding: "utf-8", timeout: 30000 });
  • 执行外部命令来自配置/变量
    extensions/trace/index.ts:496
    const child = spawn(PYTHON_BIN, args, { stdio: "ignore", detached: true });
  • 执行外部命令来自配置/变量
    extensions/trace/index.ts:513
    spawn(cmd, [filePath], { stdio: "ignore", detached: true, shell: platform === "win32" }).unref();
  • 读取本地文件
    extensions/trace/index.ts:911
    if (subagentDir && fs.existsSync(subagentDir)) {
  • 读取本地文件
    extensions/trace/index.ts:912
    for (const childId of fs.readdirSync(subagentDir)) {
  • 读取本地文件
    extensions/trace/index.ts:914
    if (!fs.existsSync(childEventsFile)) continue;
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 本地追踪查看
  • 零配置
  • 单文件HTML

面向 pi-agent 的 Langfuse 风格追踪查看器——本地优先、零配置、单文件 HTML

README

由 DeepSeek 最新模型翻译生成
实验性功能:为 pi-agent 打造的 Langfuse 风格本地追踪查看器 pi-trace-extension 把 pi-agent 会话从对话视图重组为执行视图。 pi 自带的 session.jsonl 面向消息——可以回放,但结构扁平。这个扩展订阅 pi 的生命周期事件,把它们重建为一棵树,呈现智能体实际推进的过程——每次 LLM 调用、每次工具执行、每个子代理,连同耗时、token 开销和结果——边发生边写入磁盘。 每个会话产出两个产物: - events.jsonl —— 机器可读、只追加的事件流 - trace.html —— 自包含的单文件 Langfuse 风格查看器(零外部资源,任何浏览器都能打开) 所有数据都留在你的机器上。
展开完整文档(README 剩余 1 节)
实验性功能:为 pi-agent 打造的 Langfuse 风格本地追踪查看器

pi-trace-extension 把 pi-agent 会话从对话视图重组为执行视图。 pi 自带的 session.jsonl 面向消息——可以回放,但结构扁平。这个扩展订阅 pi 的生命周期事件,把它们重建为一棵树,呈现智能体实际推进的过程——每次 LLM 调用、每次工具执行、每个子代理,连同耗时、token 开销和结果——边发生边写入磁盘。

每个会话产出两个产物:

- events.jsonl —— 机器可读、只追加的事件流
- trace.html —— 自包含的单文件 Langfuse 风格查看器(零外部资源,任何浏览器都能打开)

所有数据都留在你的机器上。

Pi Trace Dashboard

| pi 自带的 session.jsonl | pi-trace-extension |
| 对话视图(消息按顺序排列) | 执行视图(步骤 + 工具 + 子代理组成一棵树) |
| 一个产物(session.jsonl) | 两个产物:events.jsonl(给机器)+ trace.html(给人看) |
| 每条消息的元数据 | 每个步骤的延迟、token、开销、停止原因、完整 LLM 载荷 |
| 工具调用内联为消息 | 工具与 llm-generation 平级,同处一个 turn 内(Langfuse 风格) |
| 没有状态语义 | 区分 aborted / error / ok,并用颜色标注 |
| 子代理运行被折叠进工具结果 | 子代理拥有自己的嵌套追踪(turns / steps / tools),父级还有可点击跳转的链接 |

中文文档见 README.zh.md

安装

from npm (recommended)
pi install npm:pi-trace-extension

or from GitHub
pi install git:github.com/npxcnency-ux/pi-trace-extension

or try without installing (current pi run only)
pi -e npm:pi-trace-extension

安装路径不用你选。pi 会把它放到 ~/.pi/agent/npm/pi-trace-extension/,每次启动自动加载。可与任何其他 pi 扩展共存。

用法

照常使用 pi —— 事件会在后台流式写入磁盘。

~/.pi/agent/traces/<session-id>/events.jsonl

随时渲染 HTML 报告:

/trace

输出:

| 文件 | 说明 |
| ~/.pi/agent/traces/<session-id>/trace.html | 单文件查看器,用默认浏览器打开 |
| ~/.pi/agent/traces/<session-id>/events.jsonl | 机器可读的事件流(只追加) |
| ~/.pi/agent/traces/<session-id>/subagents/<child-id>/ | 每个子代理一个嵌套目录,布局同样是 events.jsonl + trace.html,从父级的子代理节点链接过去 |

session_shutdown 时也会自动生成 trace.html(不打开浏览器),所以正常关闭 pi 后,总能留下一份可查看的报告。

手动重新渲染任意历史会话:

python3 ~/.pi/agent/npm/pi-trace-extension/extensions/trace/trace_to_html.py [session-name]
Omit the argument to pick the most recent session

跨会话仪表盘 —— 磁盘上所有会话的顶层索引。

在 pi 会话里运行:

/trace all

或者从 shell 运行:

python3 ~/.pi/agent/npm/pi-trace-extension/extensions/trace/trace_to_html.py --dashboard
Writes ~/.pi/agent/traces/index.html

仪表盘展示:本周 + 全时段 KPI 卡片(会话数 / 成本 / 时长);一张可排序、可搜索的表格(时间、会话 id、首条提示词、项目、规模、token、成本、时长),每行左侧带颜色条(绿色 = 正常,黄色 = 中止,红色 = 有错误);还有项目名标签,方便快速筛选。点击会话 id → 跳到该会话的 trace.html。

流水线

pi runtime
│ emits lifecycle events:
│ session_start / interaction_start / turn_start
│ before_provider_request (full payload: model + messages + tools schema)
│ message_end
│ tool_execution_start / tool_execution_end
▼
extensions/trace/index.ts
│ capture, sanitize (mask secret-like keys), truncate (8 KB/string)
└─ writes JSONL → ~/.pi/agent/traces/<session-id>/events.jsonl
│
/trace command (or session_shutdown) │
────────────────────────────────────────┘
│ spawn python3 extensions/trace/trace_to_html.py
│ reads events.jsonl
│ rebuilds the tree:
│ session → interaction → turn → llm-generation + tool
│ sub-agent results carry a child-trace link;
│ a sub-agent's own events.jsonl is rendered into its own trace.html
│ bundles viewer/assets.json (css + js + html) into one file
└─ writes trace.html → opens in browser

数据模型刻意做得和 Langfuse 相似,这样以后升级到托管后端时,思路可以直接沿用。

trace.html 里能看到什么

一个三栏的 Langfuse 风格查看器。单个 HTML 文件,不用 CDN,不从网络加载字体,没有分析脚本。

| 栏位 | 内容 |
| 顶栏 | 会话 id(点击复制)、计数(交互 / 生成 / 工具调用)、总成本与总时长 |
| 左侧树 | 层级结构:session → interaction → turn → llm-generation + tool(同一 turn 内为兄弟节点)。点击任意节点即可查看。搜索框按名称 / 工具 / 提示词过滤。 |
| 右侧详情 | 针对选中的节点:徽章(延迟 / token 输入→输出 / 成本 / 模型 / 停止原因),然后是各个分区 —— Input(完整 LLM 载荷,可折叠的 JSON 树,带行号)、Output、Tool Calls、Error / Aborted(按颜色区分)、Metadata。 |
| 左下角 DAG 统计 | 按工具统计次数,格式为 ok/total · N ⏹(bash 76/80 · 3 ⏹)。出错时边框变红,中止时变黄。 |

具体功能:

- aborted 与 error 与 ok —— 区分用户取消(⏹ 黄色)和真正的错误(❌ 红色)。429 重试最终成功的,正确归类为 ok。
- 「Only errors」过滤器 —— 树形工具栏里的开关,只保留 error / aborted 节点及其祖先路径,长会话因此收缩到只剩出错的分支。可与文本搜索框组合使用(AND)。无错误的会话中该开关禁用。
- 子代理有自己的 trace —— 智能体派生子代理时(single / parallel / chain),子代理在 subagents/<child-id>/ 下写入自己的 events.jsonl,并生成自己渲染的 trace.html。父级的 sub-agent-result 节点内联显示子代理的 turns / steps / tools(从消息重建),并提供「Open child trace」按钮,跳转到子代理的完整报告。并行子代理在可用时按 sessionId 匹配到磁盘上的 trace。
- 自动重试检测 —— 当某一轮以相同的 turnIndex 重新进入时(例如框架在 429 后重试),第二次出现会标记为 turn N (retry #1),而不是把两次合并成一个节点。
- 完整 LLM 输入载荷 —— model、每个 messages[] 条目(包括 reasoning_content、tool_calls、tool_result)、注册的 tools[] schema,以及请求级参数(max_tokens、temperature 等)。长字符串截断到 8 KB;截断后的长度会显示出来。
- 跨进程韧性 —— 如果你重新加载 pi 或 fork 会话,重复的 stepIndex / turnIndex 值会通过内部 epoch 计数器正确区分。

什么时候用它

适合:

- 常规 pi-agent 用户,想看清 LLM 实际看到了什么、实际做了什么 —— 一步步看
- 调试提示词、工具定义、子代理编排,或长会话的上下文压缩
- trace 数据必须留在本地的环境(个人机器,不允许用 SaaS)
- 想查看每轮 token 用量 / 成本 / 缓存命中率,又不想为托管仪表盘付费

不适合:

- 带告警、多租户聚合或长期留存的生产监控 —— 请选 Langfuse / LangSmith / Phoenix 自托管
- 团队共享仪表盘 —— 这是单用户、单机
- 不在 pi-agent 上运行的流水线追踪 —— 这里只消费 pi 的事件流

它不做什么

分三类 —— 分开讲,因为它们对应不同的应对方式。

设计使然(明确的选择,不是缺陷)
- 没有网络代码。 不做匿名使用统计,不上报崩溃报告,也没有「为改进产品」的遥测。想要这些功能,请自行 fork。
- 不自动清洗提示词。 写入时只做键名脱敏(password、token、secret、api_key、authorization、bearer → REDACTED)。你的原始提示词、工具参数、工具输出、模型响应都按原样存储。
- 没有团队共享界面。 这是单用户、单机工具。如果你觉得不够用,自托管 Langfuse 是自然的下一步——数据模型刻意做得相似。
- 没有内置保留/轮转机制。 events.jsonl 每个会话单调增长。长会话可能达到几十 MB;渲染出的 trace.html 超过 5 MB 后可能变慢。

结构性问题(不是靠更好的代码能解决的)

- /trace 需要 Python 3.8+。 渲染器是 Python 标准库脚本,这是有意为之——不需要 Node 侧重构建,不需要打包器。如果你用不了 Python,这个工具不适合你。
- 绑定 pi 的事件流。 换一个智能体框架,就得自己写采集层。

隐私上限

- 追踪数据默认就是敏感的。 提示词、工具参数、模型输出都可能包含 PII / 密钥,而它们不一定匹配脱敏正则。如果你打算分享 trace.html,先手动审一遍。

与托管方案的对比

这个扩展覆盖的范围比成熟产品小。说实话:

| | pi-trace-extension | Langfuse Cloud | LangSmith | Arize Phoenix |
| 托管方式 | 本地文件 | SaaS 或自托管 | 仅 SaaS | SaaS 或本地 notebook |
| 数据离开你的机器 | 否 | 是 | 是 | 可配置 |
| 需要账号 | 否 | 是 | 是 | 可选(云端) |
| 费用 | 免费,MIT | 免费额度 + 付费 | 付费 | 免费开源 |
| 多用户仪表盘 | 否 | 是 | 是 | 是 |
| 告警 / SLO | 否 | 是(付费) | 是 | 是 |
| 跨会话聚合 | 本地仪表盘(--dashboard) | 是 | 是 | 是 |
| pi-agent 原生 | 是 | 可做适配 | 否 | 可做适配 |
| 出第一张图的时间 | 秒级 | 分钟级(注册) | 分钟级 | 分钟级 |

它们不是竞品——解决的是不同问题。

环境要求

- pi-agent ≥ 0.79.x
- Node ≥ 18(扩展运行时)
- Python ≥ 3.8(渲染器;需要时用 PI_TRACE_PYTHON=/path/to/python3 覆盖)

没有其他依赖。渲染器只用 Python 标准库;查看器不用任何 JS 框架。

文件结构

pi-trace-extension/
├── README.md / README.zh.md / LICENSE / package.json
├── examples/
│ └── dashboard.png
└── extensions/
└── trace/
├── index.ts # pi extension entry (event capture, /trace command)
├── trace_to_html.py # renderer (events.jsonl → trace.html)
└── viewer/
├── assets.json # bundled css + js + html (runtime-loaded, committed)
├── viewer.css # source (single-session viewer)
├── viewer.html
├── viewer.js
├── dashboard.css # source (cross-session dashboard)
├── dashboard.html
├── dashboard.js
└── build.py # rebuild assets.json after editing the sources

常见问题与排查

启动时出现两行 [pi-trace] extension loaded。 说明还有另一个版本的扩展也被加载了(比如你之前把它复制到了 ~/.pi/agent/extensions/trace/)。把旧的那份移出 ~/.pi/agent/extensions/ —— pi 会自动加载该目录下所有 /index.ts。

/trace 报 python3: command not found。 要么装 Python 3.8+,要么把 PI_TRACE_PYTHON 指向你的解释器:bash
export PI_TRACE_PYTHON=/opt/homebrew/bin/python3

浏览器没有自动打开。 通知里会显示路径,手动打开即可。底层依次尝试的命令:open(macOS)、xdg-open(Linux)、start(Windows)。

events.jsonl 太大 / trace.html 很慢。 长字符串每个字段会截断到 8 KB,但跨多天的深度会话仍可能撑大。目前还没有自动轮转 —— 需要的话就开新会话。

想分享 trace,但里面有敏感内容。 除了键名正则之外没有内置的清洗器。打开 trace.html,搜索敏感子串,手动改完再分享。命令行清洗器已列入路线图。

开发

动 UI 代码之前,先读 docs/design-language.md —— 里面记录了视觉语法、信息密度的取舍原则,以及明确「不做」的边界。评审 PR 时可以引用具体的 §N.M 小节。
bash
git clone https://github.com/npxcnency-ux/pi-trace-extension
cd pi-trace-extension
pi -e . # try locally

改查看器的样式与行为:

- extensions/trace/viewer/viewer.css —— 样式
- extensions/trace/viewer/viewer.js —— 查看器逻辑
- extensions/trace/viewer/viewer.html —— HTML 外壳

然后重新构建打包的 JSON(终端用户加载的就是它): bash
python3 extensions/trace/viewer/build.py

改数据管道:extensions/trace/index.ts(事件采集)或 extensions/trace/trace_to_html.py(事件 → 树 → HTML)。两者都方便重载:pi 的 /reload 会重新运行扩展;python3 trace_to_html.py 是一次性执行。

PR 门槛:

- 新事件类型必须在现有渲染器上优雅降级(只做加法)
- 不引入新的运行时依赖(Python 标准库 + Node 内置模块)
- 隐私方面的倒退一律拒绝 —— 任何新的网络调用都必须默认关闭,并且有文档说明

路线图

- [ ] 命令行清洗器:python3 trace_to_html.py <session> --redact-prompts
- [x] 多会话索引页(~/.pi/agent/traces/index.html)—— v0.1.7
- [ ] 可选的 OTLP 导出器(通过环境变量开启),用于转发到自建的 Langfuse / Phoenix
- [ ] events.jsonl 超过 N MB 时自动轮转

许可证

MIT

致谢查看器的三栏布局、配色方案和节点详情结构,大量借鉴了 Langfuse 的 trace explorer。本项目与 Langfuse 没有隶属关系——他们是一款出色的产品,当你觉得本项目不够用时,他们就是顺理成章的下一步。

pi-agent 由 pi.dev 团队打造。
预览分享卡片长什么样 ↓npxcnency-ux/pi-trace-extension
分享 · DeepSeek Harness Hub
npxcnency-ux/pi-trace-extension

实验性功能:为 pi-agent 打造的 Langfuse 风格本地追踪查看器

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部