# Pi capabilities on DSH, area by area Every upstream-shaped rule the bridge currently tracks, what it maps onto in DeepSeek Harness, and where the mapping differs. Nested objects such as `sessionManager` may expose several methods behind one row; this is a runtime rule catalog, not yet a callable-by-callable proof. These tables are generated from the rules the bridge itself consults at runtime (`src/compatibility.ts`, also reported by `pi2dsh matrix --json`), so they cannot drift from the implementation. **111 upstream-shaped Pi rule rows total** — 25 same semantics · 83 mapped, difference stated · 3 not available — plus **217 imported symbols** from the three Pi runtime packages (`pi-coding-agent`, `pi-tui`, `pi-ai`), which the bridge serves from vendored or headless shims so a package's own Pi pins never load — listed in [Imported Pi runtime symbols](imports.md). The rule set additionally documents **1 bridge-only compatibility extension** (`unregisterTool`), which is deliberately outside the upstream Pi ABI total. Each area page carries two things per surface: what it does on DSH, and **how it is built** — the DSH seam, service or waterfall behind it. | Area | Surfaces | Status | |---|---|---| | [Tools](tools.md) | 11 | 2 same semantics · 9 mapped, difference stated | | [Commands, flags and editor input](commands.md) | 13 | 13 mapped, difference stated | | [Messages, context and the agent loop](conversation.md) | 20 | 9 same semantics · 11 mapped, difference stated | | [Sessions, branching and side conversations](sessions.md) | 24 | 6 same semantics · 18 mapped, difference stated | | [Models, providers and credentials](models.md) | 15 | 1 same semantics · 12 mapped, difference stated · 2 not available | | [Asking the user, and rendering](interaction.md) | 24 | 5 same semantics · 19 mapped, difference stated | | [Project environment, skills and resources](environment.md) | 4 | 2 same semantics · 1 mapped, difference stated · 1 not available | ## What the statuses mean | Status | Meaning | |---|---| | **Same semantics** | The DSH behaviour matches Pi's, including edge cases | | **Mapped, difference stated** | The capability works; the row says exactly where the behaviour differs from Pi (representation, timing, or scope). Most surfaces sit here because the bridge documents differences rather than glossing over them | | **Not available** | No safe mapping. The surface is accepted so packages keep running, and the gap is reported once through the capability ledger rather than throwing mid-turn | | **Fails loud** | Calling it raises a structured, catchable error instead of returning a fabricated result | A package that hits a "not available" surface during startup is marked unusable with a removal hint, instead of half-working silently.