Bundle
@dsh-external/dsh-trajectory-replay
轨迹重放:轨迹栏每个回合左侧三角播放按钮 → 从该 checkpoint fork 出重放会话并重新执行 agent;新分栏对比视图(上方对话 + 原轨迹/重放轨迹并列)
- Source
- apoexia
- stars
- 1 stars
- License
- BSD-3-Clause
- Updated
- Updated yesterday
Readme
# @dsh-external/dsh-trajectory-replay
轨迹重现插件:把轨迹重放粒度细化到**具体某条 assistant 消息 / 工具调用**(记录级),提供原轨迹 vs 新执行对比、step 级单步门控与执行台账。纯插件实现,**不修改 harness**。

## 架构
**host 半部**(`src/index.ts`,进程内 `ReplayRegistry`)
- `POST /api/replay/start` —— 按 `kind: turn|message|tool` 计算切点 → 构造 seed(记录级以合成 `turn/end {interrupted}` 收口 + plugin-source context 载体续跑)→ 创建 `origin:'subagent'` 子会话
- `POST /api/replay/checkpoints` —— 从完整会话日志派生**全量**可重放点(turn 级 + 记录级,不受浏览器分页限制)
- `POST /api/replay/control` / `discard` / `promote` —— 单步继续/撤销/停止、清理、导出为工作区会话
- `agent/request` 瀑布监听 —— step 模式门控
**client 半部**(`src/client/`)
- `replay-state.ts` —— `ReplayController` 状态机 + 会话快照源(后台 open 子会话窗口)
- `ReplayView.tsx` —— 按 turn 折叠的 checkpoint 选择器、运行控制、执行台账、两侧对比面板
- `TrajectoryTable.tsx` / `TrajectoryView.tsx` —— 轨迹表格内 turn 级与记录级重放按钮(一行最多一个 ▶)
- `replay-checkpoints.ts` —— host 全量 checkpoint 拉取
## 安装
一键安装
```bash
bash scripts/install.sh # 或 bash scripts/install.sh <profile名>
```
脚本执行:① `tsc` 构建 host;② `tsdown` 构建 client;③ 在目标 profile 建立 `node_modules` junction、写入 `package.json` 的 `link:` 依赖与 `bundles` 条目、禁用官方 `ui-trajectory` 条目(全部幂等)。
- 重启 dsh 生效;运行中的 harness 免重启:`dev_inject_plugin <本目录>`。
- 装配后**刷新浏览器页面**使用。
## 构建
```bash
npm install
bash scripts/build.sh # host(需 DSH_CHECKOUT)
npm run build:client # client(tsdown)
```
Install
dsh plugin --profile web add github:apoexia/dsh-trajectory-replay
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-external-dsh-trajectory-replay from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.