flyingtimes/dsh-trajectory-reader
轨迹解读 · Trajectory Reader — DeepSeek Harness (DSH) 网页客户端插件:新增“轨迹解读”标签页,按用户回合解释助手行为(基于规则 + 可选的 LLM 叙述),用户消息保持不变。
项目介绍Project Overview
轨迹解读是 DSH Web GUI 插件,在对话页新增标签,按用户轮次切分会话,用规则引擎提炼用户需求、助手行动、错误与回复摘要,并可按需调用 LLM 生成需求、思路、执行、结果四段过程叙述。适合复盘长会话、理解工具调用链。AI 叙述依赖宿主 llm 服务,服务器改动需重启 GUI。
Trajectory Reader is a DSH Web GUI plugin that adds a “轨迹解读” tab. It splits sessions by user round and uses a rules engine to summarize user needs, assistant actions, errors, and replies; an optional LLM call generates a need–thinking–execution–result narrative. Use it to review long sessions or understand tool-call chains. The AI narrative requires the host llm service, and server changes need a GUI restart.
请帮我了解并安装插件:【dsh-trajectory-reader】【https://github.com/flyingtimes/dsh-trajectory-reader】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add @clarkchan/trajectory-reader
把 flyingtimes/dsh-trajectory-reader 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
English | 简体中文
📖 Trajectory Reader · 轨迹解读 (DSH Web Client Plugin)
Adds a new 「轨迹解读」 (Trajectory Reader) tab to the DSH Web GUI conversation view ring (beside 对话 / 轨迹). It segments the session by user round and, for each round, highlights what the user wanted and how the assistant fulfilled it — plus an optional ✨ AI process narrative generated by an LLM for the full think-and-execute story of that round.
UI Preview
The screenshot shows the 轨迹解读 tab open in the DSH Web GUI: the conversation header carries the third view tab (对话 / 轨迹 / 轨迹解读), and the body lists one card per user round. Each round card shows the condensed 🎯 user need, the 🛠 action summary of how the assistant fulfilled it (plan / research / implement / verify / delegate), ⚠ errors and notes, and the 💬 reply digest — while the original user message stays verbatim and expandable, with the full per-tool-call ledger folded away. The ✨ button on a round requests the LLM process narrative (需求 / 思路 / 执行 / 结果) for that round.
Install (one command, auto-activated)
# Option 1: from npm (recommended)
dsh plugin --profile web add @clarkchan/trajectory-reader
# Option 2: straight from GitHub
dsh plugin --profile web add "github:flyingtimes/dsh-trajectory-reader#v0.2.3"
The package declares
dsh.bundle.patch, sodsh plugin addautomatically appends it todsh.profile.bundles— no manualcordis.patch.ymlediting. After that, restartdsh weband the conversation tab bar shows 对话 / 轨迹 / 轨迹解读.
Links
- npm package: https://www.npmjs.com/package/@clarkchan/trajectory-reader
- GitHub repository: https://github.com/flyingtimes/dsh-trajectory-reader
- Listed on: https://github.com/0xsline/awesome-deepseek-harness
Per-round presentation
Round N · X tool calls · Y files · Z errors [✨ AI interpret this round]
├── 🧠 AI process narrative (optional, LLM-generated)
│ ### User need / ### Assistant thinking / ### Execution / ### Result
├── 🎯 User need one or two sentences distilled by the rules engine (expandable original)
├── 🛠 How the assistant did it plan/research/implement/verify/delegate action summary
├── ⚠ Errors / notes failed tool calls, compaction, truncation, retries
├── 💬 Assistant reply (digest) opening of the reply (expandable full text)
└── ▸ Action details collapsed per-tool-call ledger
- Round segmentation: each user message opens a new round; all assistant activity after it belongs to that round. Steering messages mid-execution form their own marked round; orphan activity at session start goes to "session start".
- The rules-based summary is instant and dependency-free; the AI narrative is generated on demand and cached (unchanged material is not re-requested).
✨ AI process narrative (LLM summary)
Architecture
browser client.js ──POST /plugin-api/trajectory-reader/summarize──▶ server index.js
│ │
│ { rounds: [{ key, material }] } │ ctx.llm.stream()
│ system = SYSTEM_PROMPT
◀── { ok, route, results: [{ key, ok, text }] } ─────────────────────┘
- Server half (
index.js): activated as a cordis plugin by the web profile Loader row (inject: ["llm", "webServer"]), registers an exclusive route:GETsame path → availability probe (client shows/hides the AI button based on it);POST→ calls the hostllmservice per round (model route defaults to the current agent default modelagentDefaultModel.currentSelection(), overridable via requestprovider/model), 120s timeout per round,maxTokens 1200, at most 12 rounds per request.- Each round's material is JSON-framed (same injection defense as session-title: user text cannot break the structural delimiters), and every string is recursively length-capped.
- Client half (
client.js): per-round "✨ AI interpret this round" button plus a top-level "✨ AI interpret all rounds"; results cached by material hash; AI cards render the###section headings; a hint tells the user to restart the GUI when unavailable.
Summarizer prompt (SYSTEM_PROMPT in index.js)
You are a "session trajectory interpreter" for DeepSeek Harness (a coding-assistant framework). You receive one round's raw material: the user's original messages, the assistant's replies and thinking excerpts, the ordered tool-call records (names and argument digests), errors and system notes. Your job: write a coherent Chinese interpretation of this round — what the user wanted, how the assistant thought and executed step by step, and the final result — so someone who never saw the session can understand what the assistant did and why.
Rules:
- Interpret only from the supplied material; never invent files, commands, conclusions or causes absent from it; if material is truncated ("…"), do not guess the truncated content.
- Output the following Markdown structure (keep the three-# heading lines, in order):
### 用户需求(one or two sentences…) /### 助手思路(…why something was done before something else, how plans adjusted…) /### 执行过程(numbered list in actual order…) /### 结果(…what was finished, what remains unfinished or failed).- Emphasize the causal chain of the process (e.g., "read A to confirm B, then modify C to finish D"); do not just list tool names.
- Keep it under 400 characters; wrap file names, commands and error messages in backticks.
- Output only the interpretation — no preamble, no closing remarks, no verbatim re-quoting of the material.
Design notes: the four fixed sections mirror the requested need–thinking–execution–result; no fabrication + no guessing truncated content keep the interpretation faithful to the trajectory; causal emphasis prevents it degrading into a tool list; the length cap and direct-output format keep the card readable.
After enabling (one GUI restart)
After restarting dsh web, the 轨迹解读 tab appears; the AI button becomes available once the GET /plugin-api/trajectory-reader/summarize probe passes. Client bundle changes apply on page refresh; server index.js changes require a GUI restart.
Development & tests
node --check client.js && node --check index.js
node test/smoke.mjs # 61 assertions: round splitting / rule classification / material framing / prompt points / route & streaming assembly
Uninstall
cd "$DSH_HOME/profiles/web" && pnpm remove @clarkchan/trajectory-reader
dsh plugin automatically removes the package from dsh.profile.bundles on uninstall — no manual cleanup needed.
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS