DeepSeek Harness Hub
← 返回列表

dfycaly98931680/dsh-trajectory-governance

DeepSeek 客户端兼容 / 相关生态spec-screened在 GitHub 查看 ↗
未验证

面向 DeepSeek Harness dsh 的智能体轨迹治理与异常诊断。

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/16 · 已提供中文文档

DeepSeek Harness(dsh)的智能体轨迹治理与异常诊断插件:多分支轨迹树、循环死锁 / 无效重试 / 目标漂移检测、成本归因、告警、一键中断与断点分叉、独立 GUI 标签页。零内核修改。

综合分
28.9
GitHub 分
28.9
用户评分
★ Stars
3
周下载量
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/dfycaly98931680/dsh-trajectory-governance.git
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-trajectory-governance

Awesome DSH Plugin

面向 DeepSeek Harness (dsh) 的智能体轨迹治理与异常诊断。

将扁平的 session/event 日志重建为结构化、多分支的轨迹树,保留观测层快照,并运行三种时序异常策略(循环死锁 / 无效重试 / 目标漂移),结果挂载到树节点上,并在独立的 GUI 标签页中呈现。

零内核修改 · 仅消费的事件订阅 · 观测层快照(无控制平面回滚)· 独立 SQLite 存储 · 绝不覆盖官方 Trajectory 视图。

为什么

官方 Trajectory 页面是扁平的原始事件日志。对于长时间运行的智能体任务(数十轮、子智能体、分叉),你无法看到:

- 哪个工具调用属于哪个子任务 / 子智能体 / 分叉分支,
- 智能体从何处开始偏离原始目标,
- 它是否在原地循环、空烧 token(死锁 / 无效重试)。

本插件是一个上层观测与推理层:它消费已提交的事件,并推导出结构、快照和诊断——它从不操控、拦截或回滚智能体。两种视图共存。

| 方面 | 官方 Trajectory | dsh-trajectory-governance |
| --- | --- | --- |
| 视图 | 扁平原始事件日志 | 结构化多分支轨迹树 |
| 谱系 | 无 | 父/子 + 分叉/子智能体分支(隐式推导) |
| 快照 | 无 | 观测层快照(nodeId + 上下文哈希 + branchId) |
| 诊断 | 无 | loop_deadlock / invalid_retry / goal_drift,含置信度 + 建议 |
| 存储 | 宿主存储 | 插件私有 SQLite(~/.dsh-trajectory-governance/) |
| 行为 | — | 仅消费;从不调度、分叉或回退智能体 |

架构

dsh web profile
├─ @deepseek-ai/dsh-base (official core)
└─ dsh-trajectory-governance (this bundle)
│
│  ctx.on('session/event' | 'session/created' | 'session/disposed'
│         | 'subagent/start' | 'subagent/end')   ← emit-mode, post-commit, read-only
▼
┌─ ingest ───────────────┐   ┌─ tree ─────────────────┐
│ normalize (scalars)    │──▶│ cross-session trajectory │
│ sqlite (events/sessions)│   │ tree + branch attach    │
└────────────────────────┘   └─────────────────────────┘
┌─ snapshot ─────────────┐   ┌─ diagnose ──────────────┐
│ index-only snapshots    │   │ 3 strategies (async)    │
│ LRU/TTL prune, branches │   │ results → anomalies DB  │
└────────────────────────┘   └─────────────────────────┘
│
▼
┌─ api (host) ────────────┐   ┌─ client (browser) ─────┐
│ /trajectory-governance/  │◀──│ independent Tab:        │
│ api/* (JSON, same-origin)│   │ conversation.view slot, │
└─────────────────────────┘   │ id 'trajectory-…'       │
└─────────────────────────┘
数据流:session/event(持久化,提交后)→ 规范化 + 持久化 →
树/快照/诊断服务 → JSON API → GUI 标签页。诊断引擎
异步按间隔运行(增量水位线 + 尾部重叠),
绝不阻塞 agent 循环。

安装

需要 dsh >= 0.1.0-rc.6。有两种方式:

打包安装(已发布 / git):

dsh plugin --profile web add github:dfycaly98931680/dsh-trajectory-governance#

git 安装会拉取源码,因此该包附带了一个 prepare 构建;pnpm
要求为其显式配置允许列表(将打印出的键添加到该 profile 的
pnpm-workspace.yaml,然后重新运行):

allowBuilds:
dsh-trajectory-governance: true

或者安装已构建的 tarball(pnpm pack)——无需构建权限。

开发覆盖层(无需 pnpm):

dsh web --patch C:\path\to\dsh-plugin\overlay.dev.yml

然后重启 web 应用。你应该会在日志中看到 [trajectory-governance] loaded;
storage=... sessions=N events=M anomalies=K。

使用

1. 在 GUI 中运行任意 agent 任务(最好是长时间运行的任务)。
2. 打开 轨迹治理 / Trajectory Governance 标签页(一个独立的 conversation.view
条目——官方 Trajectory 标签页不受影响)。
3. 选择一个会话:树会渲染出分支徽标(subagent/fork)、
快照标记(★)以及红色高亮的异常区间(⚠)。
4. 点击某个节点可查看原始事件 + 挂载的诊断报告(类型、置信度、
严重程度、描述、建议)。
5. 使用快照栏在任意节点捕获检查点、列出它们,并跳转
回去;通过 API/CLI 删除过期的分支。

CLI 检查工具(针对插件自有的 SQLite):

node scripts/inspect.mjs   [dbPath]                 # sessions/events overview
node scripts/tree.mjs       [dbPath]     # trajectory tree JSON
node scripts/snapshot.mjs    [...]     # list|create|context|delete|prune

配置

插件行接受 config(全部可选;在默认值之上深度合并):

- insert:
- id: trajectory-governance
name: dsh-trajectory-governance
config:
storage:
path: C:/data/trajectory.db   # default ~/.dsh-trajectory-governance/trajectory.db
diagnosis:
strategyA:
enabled: true
windowSize: 5
similarityThreshold: 0.85
resultSimilarityThreshold: 0.8
strategyB:
enabled: true
minRounds: 3
strategyC:
enabled: true
sampleEveryNRounds: 5
similarityThreshold: 0.5
consecutiveSamples: 2
embedder: lexical        # 'lexical' built-in; 'llm' is the extension seam
analyzer:
enabled: true
intervalMs: 10000
alerts:
enabled: true
minConfidence: 0.8
cooldownMs: 600000
channels:
desktop: true          # browser Notification (client side)yaml
cordisEvent: true      # 生态系统中的 'trajectory/anomaly' 总线事件
webhook:
url: ""              # 飞书/钉钉/Slack 风格的文本 webhook
actions:
onLoopDeadlock: notify   # notify | suggest-stop(一键中断按钮) | auto-stop
onInvalidRetry: notify
onGoalDrift: notify
cost:
enabled: true
tokenPricePerM: 0.28     # 根据你的服务商定价调整
estimateWhenUsageMissing: true

完整 schema:src/diagnose/config.ts 中的 DIAGNOSIS_CONFIG_SCHEMA。

告警与止损(v0.2)

当检测到新的异常时(置信度 ≥ alerts.minConfidence),插件会:

1. 在 Cordis 总线上发出 trajectory/anomaly(生态系统通知插件
可订阅),并在已配置的情况下 POST 一个文本 webhook —— 消息使用
止损语言:类型、置信度,以及该区间已经消耗了多少 token/金钱/时间
(来自官方 assistant/message.usage);
2. GUI 标签页轮询 /api/alerts,显示桌面通知(浏览器
Notification API,工具栏中有权限按钮),并将异常会话
固定在下拉列表顶部,按浪费的 token 排序;
3. 提供一键中断(POST /api/actions/interrupt),它会调用
官方 agent.cancel 能力 —— 绝不使用 monkey-patch。默认层级
为 notify;auto-stop(仅用于循环死锁,置信度 ≥ 0.9)可
为无人值守场景配置。

断点与浪费报告(v0.3)

断点退出 —— 合法的轻量级“回滚”。 本插件不采用
控制平面倒带(已由 dsh-turn-rewind 覆盖),
而是提供诊断驱动的重启:在任意快照 / 异常
起点 / 选定节点处,“在此处分叉新会话” 会将目标解析到
最近的稳定 turn/end 边界,并调用官方
ctx.sessions.fork(source, boundary) —— 在该点播种一个全新的子会话。
它从不触碰工作区文件,保持观察层的立场,
并将“你在这里浪费了钱”转化为一键操作。

浪费归因报告 —— 不是又一个用量统计仪表盘(那个细分领域已经
饱和):它回答的是别人都没做的归因问题,“哪些
会话浪费了 token/金钱,属于哪些异常类型”:
sh
curl http://127.0.0.1:3080/trajectory-governance/api/report/waste          # 所有会话(Markdown + JSON)
curl "http://127.0.0.1:3080/trajectory-governance/api/report/waste?sessionId="  # 单个会话详情

两者也可从标签页访问(“浪费报告” / “本会话报告”按钮)。

快速演示(复现循环死锁与目标漂移)

即时(无需等待真实循环): 将一个合成会话播种到
实时存储中,刷新标签页,选择 demo-session:
sh
node scripts/demo-seed.mjs            # 写入默认实时数据库

你应该会看到一棵树,其中红色高亮的 loop_deadlock(5 个相同的工具
调用)以及一个严重的 goal_drift 范围,外加一个快照标记(★)。

真实 agent:

1. 给 agent 一个冗长、开放式的重构提示(例如“重构这个项目为
TypeScript 并补单元测试,先读代码再动手”)。
2. 让它运行,直到它开始重复相同的工具调用(相同文件、相同
内容)且没有可见进展——策略 A 会在触发节点上标记 loop_deadlock。
3. 在另一个领域提出后续请求(“顺便帮我看看怎么做番茄意面”)——在
采样 N 轮之后,策略 C 会针对原始基线标记 goal_drift(轻度/中度/严重)。

验证:树标签页会以红色高亮显示这些范围;scripts/inspect.mjs 会显示
异常计数;scripts/tree.mjs  会转储已挂载的 anomalyInfo。

截图

TODO — 在首次实际运行后添加:树标签页概览 / 异常卡片 / 快照
列表。(此处预留占位符。)

测试
sh
npm install
npm run build && npm test    # 46 tests: normalize/store/subscriber/tree/snapshot/diagnose/api

边界(重要)

- 零内核修改 —— 不 fork、不 monkey-patch、不访问宿主存储。
- 仅消费事件 —— session/event 等是 emit 模式、提交后、
即发即忘的监听器;payload 永远不会被修改。
- 观测层快照 —— 快照是一个索引(nodeId + 上下文哈希
+ branchId);上下文从事件存储重建。此插件永远不会 fork、
恢复或回滚 agent。
- 独立标签页 —— 使用自己的 slot id 注册;官方 Trajectory
页面(id trajectory)永远不会被覆盖。
- 预览 API —— SESSION_FORMAT_VERSION = 0,不暗示任何兼容性。
事件词汇表集中在 src/core/event-catalog.ts 中;未知类型
遵循信封的 ignorable 标记。

仓库布局

src/
index.ts                  # Cordis plugin entry (name/apply)
core/                     # types + 44-type event catalog
ingest/                   # normalize + session-event subscriber
persistence/              # node:sqlite store (events/sessions/snapshots/anomalies)
tree/                     # trajectory tree builder + queries
snapshot/                 # observation snapshots + branch manager
diagnose/                 # similarity, config, 3 strategies, engine, mount, runtime
api/                      # host JSON API (/trajectory-governance/api/*)
client/                   # independent GUI tab (conversation.view, id 'trajectory-governance')
tests/                      # node:test suites
scripts/                    # inspect / tree / snapshot / smoke
cordis.patch.yml            # official bundle load row
plugin.manifest.yaml        # self-describing metadata (loader uses cordis.patch.yml)

许可证

MIT —— 参见 LICENSE。属于 awesome-dsh-plugin
生态系统的一部分。主题:dsh-plugin。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群