dsh-a2a-trust
Trust-indexed A2A reputation plugin for DeepSeek Harness agent teams: live session/event ingestion, four-dimension EWMA trust ledger (cross-session, fingerprint-keyed), append-only audit log, and a Settings dashboard. | DeepSeek Harness Agent 团队信任指数插件:实时事件流摄取、四维 EWMA 信任账本(跨会话、指纹键控)、append-only 审计日志、设置页看板。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:pacoyi/dsh-a2a-trust说明文档
阅读完整 README ↗dsh-a2a-trust
Trust-indexed A2A reputation for DeepSeek Harness agent teams — live trust scoring for spawned teammates: a four-dimension EWMA ledger keyed by agent-type fingerprint (cross-session), an append-only audit log, historical backfill, and a Settings dashboard. Read-only by design — trust is a signal, not a constraint.
English | 中文
Why
When a Lead agent spawns teammates, each worker is a fresh session: a teammate that fumbled every tool call last run is indistinguishable from one that shipped cleanly. Nothing remembers how this kind of agent performed.
dsh-a2a-trust gives agent teams a reputation memory:
- Cross-session identity is the agent type, not the instance —
sha256(name ␟ description ␟ provider ␟ context)from the durableteam/membersnapshot fields. A re-spawned worker inherits its type's history; a renamed prompt starts fresh. - Trust is earned slowly and lost fast — per-dimension asymmetric EWMA: good evidence moves 10%, bad evidence moves 30%. One botched tool call takes three clean calls to repair.
- Information-injecting governance only — the plugin observes the
session/eventstream and never blocks, rewrites, or filters agent-to-agent traffic. Nothing about it can break a team run.
How it works
Four dimensions, each a value in [0,1] starting at 0.5, updated from live events:
| Dimension | Evidence (quality) |
|---|---|
| competence | task completed (1.0), tool success (0.8), tool error (0.0) |
| reliability | task completed (1.0) |
| communication | message sent (0.7), response latency: <60s (1.0), <10min (0.5), slower (0.0) |
- Dimensions with fewer than 5 samples are flagged low-confidence and excluded from the total score.
- Every change is appended to
audit.jsonlbefore the ledger snapshot updates — crash between the two leaves a stale snapshot, never a lost change; rebuild closes the gap. - On startup, a backfill replays every
session.jsonl.zstdunder~/.dsh/sessionsin global event-time order (per-session mtime cannot express causality — a Lead log's roster events precede every teammate event while its mtime is the latest). Backfill is idempotent per session: restarts append nothing. - V2/V3 envelope-tolerant parsing: log-only
team/*shapes are stable across generations; tool-error flags read both spellings (data.errorandmessage.content[0].isError).
Install
Requires the dsh CLI. Install into a profile (e.g. web) from GitHub:
dsh plugin --profile web add github:pacoyi/dsh-a2a-trust
Or from a local checkout:
git clone https://github.com/pacoyi/dsh-a2a-trust.git
dsh plugin --profile web add file:./dsh-a2a-trust
Restart the service, then open Settings → 信任指数. The first start backfills trust from your existing session history.
Data layout
Everything lives in ~/.dsh/dsh-a2a-trust/ (override with A2A_TRUST_HOME):
audit.jsonl— append-only, first-class record of every trust changeledger.json— rebuildable snapshot (atomic tmp→rename writes, one.bakgeneration), guarded by a cross-process PID-aware lock
Delete the directory to reset all trust. Zero dependencies — dependencies, devDependencies, and peerDependencies are all empty: persistence and ingestion are pure Node built-ins, and the host half reaches Cordis services through runtime injection (ctx.inject?.([...])), so nothing is ever imported. The previous peerDependencies on @deepseek-ai/* prereleases was removed deliberately: a caret range over a prerelease tuple (e.g. ^0.0.1-rc.1) only ever matches that one tuple line, so npm installs from GitHub silently pulled the stale dsh-tools@0.0.1-rc.1 instead of constraining the modern 0.1.x line.
Testing
77 tests across five layers: pure-function unit tests (EWMA math, fingerprinting, confidence gates), an event-extractor suite against fixtures distilled from real session logs, storage contract tests (crash injection, lock takeover, replay equivalence), backfill integration over real zstd-compressed logs (idempotency, cross-session accumulation, reverse-mtime causality), and plugin-level integration driving the real apply() through a mocked Cordis context.
npm test
License
MIT