# ЁЯУК dsh-observe
- **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024`, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-observe` ([deepseek1024.com](https://deepseek1024.com) рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
**DeepSeek Harness рдХреЗ рд▓рд┐рдП OpenTelemetry рдФрд░ Langfuse рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ред**
*рд╕реЗрд╢рди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ OTLP traces рдФрд░ Langfuse observations рдореЗрдВ рдмрджрд▓реЗрдВ тАФ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб, рдмрдлрд╝рд░реНрдб, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрджред*
[](LICENSE)
[](https://gitee.com/perrylink/dsh-observe)
[](https://github.com/topics/dsh-plugin)
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла)
[](https://dsh.market/)
[](#)
[](https://github.com/PerryLink/dsh-observe/actions)
[](https://github.com/PerryLink/dsh-observe/releases)
[](https://www.npmjs.com/package/dsh-observe)
[](https://www.npmjs.com/package/dsh-observe)
[](https://dshfind.com/hi/plugins/PerryLink/dsh-observe?ref=badge)
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
```sh
dsh plugin --profile add dsh-observe
```
---
**ЁЯУЦ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдиреЙрд▓реЗрдЬ рдмреЗрд╕** тАФ рдорд╛рдкреЗ рдЧрдП рдЖрдБрдХрдбрд╝реЗ, рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ: [рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЧрд╛рдЗрдб ┬╖ рдЪрдпрди рдбреЗрдЯрд╛ ┬╖ рд░рдЦрд░рдЦрд╛рд╡ рдорд╛рдирджрдВрдб](https://perrylink.github.io/dsh-plugin-guide/)ред
## Install & uninstall
- **git рдЪреИрдирд▓** (рдирд╡реАрдирддрдо `main`): `dsh plugin --profile web add github:PerryLink/dsh-observe` тАФ `prepare` рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдкреНрд░реЛрдбрдХреНрд╢рди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╕реЗ рдмрд┐рд▓реНрдб рдХрд░рддреА рд╣реИред
- **npm рдЪреИрдирд▓** (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝): `dsh plugin --profile web add dsh-observe`ред
- **tarball рдЪреИрдирд▓**: рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ `pnpm pack`, рдлрд┐рд░ `dsh plugin --profile web add ./dsh-observe-.tgz`ред
- **рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓**: `dsh plugin --profile web remove dsh-observe` (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред
> рдпрджрд┐ pnpm рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП `ERR_PNPM_IGNORED_BUILDS` рджрд┐рдЦрд╛рддрд╛ рд╣реИ (esbuild рдХрд╛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдмрд╛рдЗрдирд░реА рд╕рддреНрдпрд╛рдкрди), рддреЛ рдЕрдкрдиреЗ `pnpm-workspace.yaml` рдореЗрдВ `allowBuilds: { esbuild: true }` рдЬреЛрдбрд╝реЗрдВ тАФ `dsh` CLI рд╕рдЯреАрдХ рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
## тнР хжВцЮЬхоГх╕охИ░ф║Жф╜а
рдпрд╣ рдкреНрд▓рдЧрдЗрди [DSH рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░](https://github.com/PerryLink) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (95 рдкреНрд▓рдЧрдЗрди, рд╕рднреА Apache-2.0)ред рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ, рддреЛ **рдПрдХ рд╕реНрдЯрд╛рд░ рджреЗрдВ** тАФ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕реБрд╡рд┐рдзрд╛ рдЕрдирд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддреА, рдкрд░ рдЕрдЧрд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдЦреЛрдЬ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛ рд▓реЗрддрд╛ рд╣реИред
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** тАФ nothing is gated behind it.
## What is dsh-observe?
DeepSeek Harness рдХреЗ рд▓рд┐рдП OpenTelemetry рдФрд░ Langfuse рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ред
рд╕реЗрд╢рди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ OTLP traces рдФрд░ Langfuse observations рдореЗрдВ рдмрджрд▓реЗрдВ тАФ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб, рдмрдлрд╝рд░реНрдб, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрджред

*рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣: рдЗрдВрд╕реНрдЯреЙрд▓ тЖТ рдкреИрдирд▓ рдЦреЛрд▓реЗрдВ тЖТ рдХрд╛рд░реНрдпред рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рд╕рддрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред*
*рд╡рд╣реА рд░рди, рдПрдирд┐рдореЗрдЯреЗрдбред*
## Compatibility
| рд╕рддрд╣ | рд╕реНрдерд┐рддрд┐ |
|---|---|
| Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (2026-10-04 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рд╕рддреНрд░ рдкреНрд░рд╛рд░реВрдк V4 рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рдердо-рд╢реНрд░реЗрдгреА `role: 'tool'` рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдкрд░ `toolCallId` + `content` + рд╡реИрдХрд▓реНрдкрд┐рдХ `isError` рд╣реЛрддрд╛ рд╣реИ тАФ V3 рдХрд╛ `tool-result` рдХрдВрдЯреЗрдВрдЯ рдмреНрд▓реЙрдХ рд╣реЛрд╕реНрдЯ рдХреЗ `ContentBlockMap` рд╕реЗ рд╣рдЯ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ V4 рдЖрдХрд╛рд░ рдкрдврд╝рддрд╛ рд╣реИ (рдЕрдкрдЧреНрд░реЗрдб-рдкреВрд░реНрд╡ V3 рд▓реЙрдЧ рдЕрднреА рднреА рдХреЗрд╡рд▓-рдкрдарди рд╕рдВрдЧрддрддрд╛ рдкрде рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ)ред рд╕рддреНрд░ рдкреНрд░рд╛рд░реВрдк V3 рдХреЗ рд╢реЗрд╖ рд▓рдХреНрд╖рдг рдЬрд╛рд░реА рд╣реИрдВ: рд╕рд╣рд╛рдпрдХ рд╕реНрдЯреНрд░реАрдо `assistant/message` / `assistant/attempt` рдореЗрдВ рдПрдореНрдмреЗрдб рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рд╕рд░рдлрд╝реЗрд╕ рдиреЛрдб 0 (`system/message`) рд╣реИ; рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ рд▓рд╛рдЗрд╡ рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХрднреА рд╕рддреНрд░ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рдкрдврд╝рддрд╛ред peer рд░реЗрдВрдЬ `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0` рд╣рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓рд╛рдЗрди рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓-рдпреЛрдЧреНрдп рд░рдЦрддреА рд╣реИ (рд╕реНрдерд╛рдиреАрдп рдкреВрд░реНрдг рдЧреЗрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛; рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реНрдореЛрдХ compat рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ)ред |
| Node | `^22.19.0 \|\| >=24.0.0` |
| рдмреИрдХрдПрдВрдб | OpenTelemetry OTLP/HTTP (traces + metrics, JSON рдПрдиреНрдХреЛрдбрд┐рдВрдЧ) рдФрд░ Langfuse (LLM рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА) тАФ рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ |
| рдореЙрдбрд▓ | рдореЙрдбрд▓-рд╕реНрд╡рддрдВрддреНрд░: рдпрд╣ `session/event` рд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ; рдХреЛрдИ рдореЙрдбрд▓ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ |
## What you get
`dsh-observe` рд╣рд╛рд░реНрдиреЗрд╕ рдХреА `session/event` рд╕реНрдЯреНрд░реАрдо рдХреЛ рдорд╛рдирдХ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ:
- **Spans** тАФ turn, step, рдЯреВрд▓-рдХреЙрд▓ (рдЕрд╡рдзрд┐, рд╕реНрдерд┐рддрд┐, рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рд╡реНрдпреБрддреНрдкрддреНрддрд┐) рдФрд░ LLM рдЬрдирд░реЗрд╢рди span, рдкреНрд░рддрд┐ turn traces рдореЗрдВ рдЬреБрдбрд╝реЗ, рдирд┐рдпрддрд╛рддреНрдордХ ids рдХреЗ рд╕рд╛рдеред
- **Metrics** тАФ рдкреНрд░рддрд┐ provider/model рдЯреЛрдХрди рдХрд╛рдЙрдВрдЯрд░, USD рд▓рд╛рдЧрдд рдХрд╛рдЙрдВрдЯрд░ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореВрд▓реНрдп рддрд╛рд▓рд┐рдХрд╛) рдФрд░ `ctx.tokenMeter` рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ-рдкреНрд░реЗрд╢рд░ gaugeред
- **рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб рдХреИрдкреНрдЪрд░** тАФ prompt рдФрд░ completion рдмреЙрдбреА рдХрд┐рд╕реА рднреА рдХрддрд╛рд░ рдпрд╛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд┐рдбреИрдХреНрдЯ (рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдХреБрдВрдЬреА рдирд╛рдо + рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреБрдкреНрдд рдкреИрдЯрд░реНрди + рдЖрдкрдХреЗ рдкреИрдЯрд░реНрди) рдФрд░ рдЯреНрд░рдВрдХреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
- **рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛** тАФ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмреИрдЪрд┐рдВрдЧ (рдЖрдХрд╛рд░- рдФрд░ рдЯрд╛рдЗрдорд░-рдЯреНрд░рд┐рдЧрд░), рдПрдХ рд╕реАрдорд┐рдд рдЯрд┐рдХрд╛рдК рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░ (storage-domain) рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдкрд╣рд▓реЗ рд╣рдЯрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ рдПрдХреНрд╕рдкреЛрдиреЗрдВрд╢рд┐рдпрд▓-рдмреИрдХрдСрдл рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕; рди рдкрд╣реБрдБрдЪреЗ рдмреИрдЪ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗ рдмрд╛рдж рднреА рдмрдЪреЗ рд░рд╣рддреЗ рд╣реИрдВред
- **рд░рдирдЯрд╛рдЗрдо рдХрд┐рд▓ рд╕реНрд╡рд┐рдЪ** тАФ рд╡реИрдХрд▓реНрдкрд┐рдХ Typert remote (`observe/status`, `observe/setEnabled`) рдХрд┐рд╕реА рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдХреЛ рдмрд┐рдирд╛ рдЕрдирдорд╛рдЙрдВрдЯ рдХрд┐рдП рдирд┐рд░реНрдпрд╛рдд рд░реЛрдХрдиреЗ/рдлрд┐рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
- **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж** тАФ `enabled: true` рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреИрдХрдПрдВрдб рд╣реА рд╕реНрдкрд╖реНрдЯ рдСрдкреНрдЯ-рдЗрди рд╣реИ; рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рднреА рдХреИрдкреНрдЪрд░ рдпрд╛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реЛрддрд╛ред
```text
session/event рд╕реНрдЯреНрд░реАрдо
тФВ collector (turn/step/tool/llm spans, рдореЗрдЯреНрд░рд┐рдХреНрд╕)
тФВ sanitize (рдХреБрдВрдЬрд┐рдпрд╛рдБ, рд░рд╣рд╕реНрдп, рдмрдЬрдЯ)
тФЬтФАтФАтЦ╢ pipeline "otlp" тФАтФА рдХрддрд╛рд░ тФАтФА flush тФАтФАтЦ╢ OTLP /v1/traces + /v1/metrics
тФВ тФФтФА рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕/рдмреИрдХрдСрдл тФАтФР
тФЬтФАтФАтЦ╢ pipeline "langfuse" тФАтФА рдХрддрд╛рд░ тФАтФА flush тФАтФАтЦ╢ Langfuse ingestion
тФВ тФФтФА рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕/рдмреИрдХрдСрдл тФАтФд
тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА рдЯрд┐рдХрд╛рдК spool (рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░, рд╕реАрдорд┐рдд) тЧАтФШ
```
## Quick start
```sh
dsh plugin --profile web add github:PerryLink/dsh-observe
```
```sh
# 1. рдмрдВрдбрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
dsh plugin --profile web add github:PerryLink/dsh-observe
# рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд┐рд▓реАрдЬрд╝)
dsh plugin --profile web add dsh-observe
# 2. рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ (cordis.yml) рдореЗрдВ рдПрдХ рдмреИрдХрдПрдВрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ
dsh --profile web
```
рдиреНрдпреВрдирддрдо OTLP рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (`cordis.patch.yml` рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХрдореЗрдВрдЯ рдХреА рд╣реБрдИ рдЖрддреА рд╣реИ):
```yaml
- insert:
- id: dsh-observe
name: dsh-observe
config:
enabled: true
otlp:
endpoint: http://localhost:4318
```
рдлрд┐рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрдВрдХреНрддрд┐ рдорд╛рдЙрдВрдЯ рд╣реБрдИ:
```sh
dsh --profile web --dump-config | grep -A2 'id: dsh-observe'
```
### рдЙрджрд╛рд╣рд░рдг
рдпрд╣ рдкреНрд▓рдЧрдЗрди рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджреГрд╢реНрдп рдХрдорд╛рдВрдб рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛; рдпрд╣ рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд░реНрдпрд╛рддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИред
## Configuration
рд╕рднреА рд╕рдорд╛рдпреЛрдЬрди Schemastery `Config` рдлрд╝реАрд▓реНрдб рд╣реИрдВ (cordis.yml рд╕реЗ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред id-рд▓рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ тАФ рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдХреБрдВрдЬреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред `cordis.patch.yml` рд╣рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдирд▓рд╛рдЗрди рд╕рдордЭрд╛рддрд╛ рд╣реИред
| Key | Default | Meaning |
|---|---|---|
| `enabled` | `false` | рдорд╛рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪ; `true` рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреИрдХрдПрдВрдб рд╣реА рд╕реНрдкрд╖реНрдЯ рдСрдкреНрдЯ-рдЗрди рд╣реИ |
| `otlp` | `null` | OTLP рдмреИрдХрдПрдВрдб рдХреЙрдиреНрдлрд╝рд┐рдЧ, рдпрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `null` |
| `otlp.endpoint` | *(рдЖрд╡рд╢реНрдпрдХ)* | OTLP рдЖрдзрд╛рд░ URL; `/v1/traces` рдФрд░ `/v1/metrics` рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ |
| `otlp.serviceName` | `deepseek-harness` | `service.name` рд░рд┐рд╕реЛрд░реНрд╕ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ |
| `otlp.serviceVersion` | *(рдХреЛрдИ рдирд╣реАрдВ)* | `service.version` рд░рд┐рд╕реЛрд░реНрд╕ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ |
| `otlp.headers` | `{}` | рд╣рд░ рдирд┐рд░реНрдпрд╛рдд рдЕрдиреБрд░реЛрдз рдореЗрдВ рдорд░реНрдЬ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ |
| `otlp.timeoutMs` | `10000` | рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ |
| `langfuse` | `null` | Langfuse рдмреИрдХрдПрдВрдб рдХреЙрдиреНрдлрд╝рд┐рдЧ, рдпрд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `null` |
| `langfuse.baseUrl` | `https://cloud.langfuse.com` | Langfuse рдЖрдзрд╛рд░ URL |
| `langfuse.publicKey` | *(рдЖрд╡рд╢реНрдпрдХ)* | рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА |
| `langfuse.secretKey` | *(рдЖрд╡рд╢реНрдпрдХ)* | рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдкреНрдд рдХреБрдВрдЬреА |
| `langfuse.release` | *(рдХреЛрдИ рдирд╣реАрдВ)* | traces рдкрд░ рдореБрд╣рд░ рд▓рдЧрд╛ release рдЯреИрдЧ |
| `langfuse.traceName` | `session {session} turn {turn}` | trace рдирд╛рдо рдЯреЗрдореНрдкрд▓реЗрдЯ; `{session}`/`{turn}` рд╣рд░ trace рдкрд░ рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ |
| `langfuse.tags` | `[]` | рд╣рд░ trace рдкрд░ рдореБрд╣рд░ рд▓рдЧреЗ рд╕реНрдерд┐рд░ рдЯреИрдЧ |
| `langfuse.timeoutMs` | `10000` | рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ |
| `capture.turns` | `true` | turn рдЬреАрд╡рдирдЪрдХреНрд░ spans |
| `capture.steps` | `true` | step рдЬреАрд╡рдирдЪрдХреНрд░ spans |
| `capture.tools` | `true` | рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб рддрд░реНрдХреЛрдВ/рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЯреВрд▓-рдХреЙрд▓ spans |
| `capture.llm` | `true` | LLM рдЬрдирд░реЗрд╢рди spans |
| `llm.prompt` | `true` | рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб рдЕрдиреБрд░реЛрдз prompt рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ (`false` = рдХреЗрд╡рд▓ рдЖрдХрд╛рд░) |
| `llm.completion` | `true` | рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб completion рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ (`false` = рдХреЗрд╡рд▓ рдЖрдХрд╛рд░) |
| `metadata.sessionId` | `true` | рд╕рддреНрд░ id рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ |
| `metadata.cwd` | `false` | рд╕рддреНрд░ рдХрд╛рд░реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╕реНрдерд╛рдиреАрдп рдкрде тАФ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж) |
| `metadata.agentPreset` | `true` | agent preset id рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ |
| `metadata.model` | `true` | provider/model рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ |
| `metrics.tokens` | `true` | рдкреНрд░рддрд┐ provider/model рдЯреЛрдХрди рдХрд╛рдЙрдВрдЯрд░ |
| `metrics.cost` | `true` | USD рд▓рд╛рдЧрдд рдХрд╛рдЙрдВрдЯрд░ (рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП `pricing` рдирд┐рдпрдо рдЪрд╛рд╣рд┐рдП) |
| `metrics.contextTokens` | `true` | рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ-рдкреНрд░реЗрд╢рд░ gauge (`ctx.tokenMeter` рдЪрд╛рд╣рд┐рдП) |
| `pricing` | `[]` | рдореВрд▓реНрдп рддрд╛рд▓рд┐рдХрд╛, рдкрд╣рд▓рд╛ рдорд┐рд▓рд╛рди рдЬреАрддрддрд╛ рд╣реИ: `{ provider?, model, inputPerToken, outputPerToken, cacheReadPerToken?, cacheWritePerToken? }` |
| `sanitize.enabled` | `true` | рд░рд┐рдбреИрдХреНрд╢рди рдорд╛рд╕реНрдЯрд░ рд╕реНрд╡рд┐рдЪ (`false` рдХреЗрд╡рд▓ рд░рд┐рдбреИрдХреНрд╢рди рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рдЯреНрд░рдВрдХреЗрд╢рди рдХрднреА рдирд╣реАрдВ) |
| `sanitize.redactKeys` | `[]` | рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬреА-рдирд╛рдо рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ (key/token/secret/password/authorization/credential/apiKey рд╣рдореЗрд╢рд╛ рд╢рд╛рдорд┐рд▓) |
| `sanitize.redactPatterns` | `[]` | рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдкреНрдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ |
| `sanitize.truncatePromptChars` | `4000` | prompt рд╡рд░реНрдг рдмрдЬрдЯ |
| `sanitize.truncateCompletionChars` | `4000` | completion рд╡рд░реНрдг рдмрдЬрдЯ |
| `sanitize.truncateToolInputChars` | `2000` | рдЯреВрд▓ рддрд░реНрдХ рд╡рд░реНрдг рдмрдЬрдЯ |
| `sanitize.truncateToolOutputChars` | `2000` | рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рд╡рд░реНрдг рдмрдЬрдЯ |
| `sanitize.truncateAttributeChars` | `512` | span рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдЬрдЯ |
| `batch.maxRecords` | `256` | рдХрддрд╛рд░ рдореЗрдВ рдЗрддрдиреЗ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реА flush |
| `batch.flushIntervalMs` | `5000` | рдЯрд╛рдЗрдорд░ flush рдЕрдВрддрд░рд╛рд▓ |
| `batch.maxQueueRecords` | `2000` | рдЗрди-рдореЗрдореЛрд░реА рдХрддрд╛рд░ рд╕реАрдорд╛; рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдлрд╝рд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ |
| `batch.maxBufferRecords` | `10000` | рдЯрд┐рдХрд╛рдК рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░ рд╕реАрдорд╛; рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд░рд┐рдХреЙрд░реНрдб рдкрд╣рд▓реЗ рдЧрд┐рд░рддреЗ рд╣реИрдВ |
| `batch.bufferRetryIntervalMs` | `30000` | рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░ рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рдЕрдВрддрд░рд╛рд▓ |
| `retry.maxAttempts` | `5` | рдкреНрд░рддрд┐ рдмреИрдЪ рдкреНрд░рдпрд╛рд╕, рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рд╕рд╣рд┐рдд |
| `retry.baseDelayMs` | `1000` | рдкрд╣рд▓рд╛ рдмреИрдХрдСрдл рд╡рд┐рд▓рдВрдм |
| `retry.factor` | `2` | рдкреНрд░рддрд┐ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдлрд▓рддрд╛ рдмреИрдХрдСрдл рдЧреБрдгрдХ |
| `retry.maxDelayMs` | `60000` | рдмреИрдХрдСрдл рд╕реАрдорд╛ |
| `remote.enabled` | `false` | `observe` Typert remote рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ (рдХрд┐рд▓ рд╕реНрд╡рд┐рдЪ) |
## Tools & surfaces
рдпрд╣ рдкреНрд▓рдЧрдЗрди **рдХреЛрдИ рдореЙрдбрд▓ рдЯреВрд▓ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рддрд╛** тАФ рдпрд╣ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд░реНрдпрд╛рддрдХ рд╣реИред рдЗрд╕рдХреА рд╕рддрд╣реЗрдВ:
- **рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ** `session/event` (span/metric рд╕рдВрдЧреНрд░рд╣), `session/flush` (рдмреЗрд╕реНрдЯ-рдПрдлрд╝рд░реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдХ тАФ рдЯрд┐рдХрд╛рдКрдкрди рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХрднреА рджреВрд░рд╕реНрде рдмреИрдХрдПрдВрдб рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛) рдФрд░ `session/disposed`ред
- **рд╡реИрдХрд▓реНрдкрд┐рдХ remote рд╕реЗрд╡рд╛** `observe` тАФ `observe/status` рдХрд┐рд▓-рд╕реНрд╡рд┐рдЪ рд╕реНрдерд┐рддрд┐, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдмреИрдХрдПрдВрдб, рдХрддрд╛рд░ рдЧрд╣рд░рд╛рдИ рдФрд░ рдмрдлрд╝рд░ рдЕрдзрд┐рднреЛрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ; `observe/setEnabled` рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрдпрд╛рдд рд░реЛрдХрддрд╛/рдлрд┐рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
## Permissions & data
- **рдЕрдиреБрдорддрд┐рдпрд╛рдБ**: рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХ `network:outbound`, рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП `session:read`, рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП `storage:write`; рдХреЛрдИ рдиреЗрдЯрд┐рд╡ рдХреЛрдб рдирд╣реАрдВ, рдХреЛрдИ рдлрд╝рд╛рдЗрд▓-рд╕рд┐рд╕реНрдЯрдо рдкрд╣реБрдБрдЪ рдирд╣реАрдВред
- **рдбреЗрдЯрд╛**: рднреЗрдЬреА рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝ рд╕рддреНрд░ рд▓реЙрдЧ рд╕реЗ рдирд┐рдХрд▓рддреА рд╣реИ рдФрд░ рдХрддрд╛рд░рдмрджреНрдз, рдмрдлрд╝рд░ рдпрд╛ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рд╣реЛрддреА рд╣реИ (рд░рд┐рдбреИрдХреНрд╢рди + рдЯреНрд░рдВрдХреЗрд╢рди)ред рдСрдлрд╝рд▓рд╛рдЗрди рдмрдлрд╝рд░ рдХреЗрд╡рд▓ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реНрдб рд░рд┐рдХреЙрд░реНрдб рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
- **рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓**: Langfuse рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ/рдЧреБрдкреНрдд рдХреБрдВрдЬрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП Langfuse рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХ рдЬрд╛рддреА рд╣реИрдВ; OTLP рд╣реЗрдбрд░ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП OTLP рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдХред рдкреНрд▓рдЧрдЗрди рд╕реНрд╡рдпрдВ рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдирд╣реАрдВ рд░рдЦрддрд╛ тАФ рдЙрдиреНрд╣реЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг-рдЗрдВрдЬреЗрдХреНрдЯ рдорд╛рдиреЛрдВ рдореЗрдВ рд░рдЦреЗрдВред
## Security boundaries
- **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж** тАФ рд╕реНрдкрд╖реНрдЯ рдСрдкреНрдЯ-рдЗрди рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рднреА рдХреИрдкреНрдЪрд░ рдпрд╛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реЛрддрд╛ред
- **рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝** тАФ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдХреБрдВрдЬреА рд░рд┐рдбреИрдХреНрд╢рди, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреБрдкреНрдд рдкреИрдЯрд░реНрди (API рдХреБрдВрдЬрд┐рдпрд╛рдБ, GitHub рдЯреЛрдХрди, AWS рдХреБрдВрдЬрд┐рдпрд╛рдБ, bearer рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓, рдирд┐рдЬреА рдХреБрдВрдЬрд┐рдпрд╛рдБ), рдЖрдкрдХреЗ рдкреИрдЯрд░реНрди рдФрд░ рд╡рд░реНрдг рдмрдЬрдЯ рд╕рднреА рдХрд┐рд╕реА рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдореЗрдореЛрд░реА рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
- **рдЯрд┐рдХрд╛рдК рд╕реАрдорд╛ рдкрд░ рдкреБрдирдГ рд╕рддреНрдпрд╛рдкрди** тАФ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдкрдврд╝реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рд╕реА sink рдХреЗ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд┐рд░ рдЬрд╛рдБрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред
- **рд╡рд┐рдлрд▓рддрд╛ рдЬрд╝реЛрд░ рд╕реЗ, рд╡рд┐рдлрд▓рддрд╛ рд╕реАрдорд┐рдд** тАФ рдирд┐рд░реНрдпрд╛рдд рд╡рд┐рдлрд▓рддрд╛рдПрдБ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреА рд╣реИрдВ, рдЧрд┐рдирддреА рдХрд░рддреА рд╣реИрдВ, рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ spool рдореЗрдВ рдЬрд╛рддреА рд╣реИрдВ; рд╡рд┐рдлрд▓ рд╕рддреНрд░ рд╣реИрдВрдбрд▓рд░ рдкрдХрдбрд╝рд╛ рдФрд░ рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд┐рд▓рд┐рдЯреА рдХрднреА рд╣рд╛рд░реНрдиреЗрд╕ рдХрд╛ рд╣реЙрдЯ рдкрд╛рде рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддреАред
- **Model-visible тЯ║ logged** тАФ prompt/completion рдирд┐рд░реНрдпрд╛рдд рдХреЗрд╡рд▓ рд╕рддреНрд░ рд╕рд░рдлрд╝реЗрд╕ (рдЬрд┐рд╕рдХрд╛ рдиреЛрдб 0 рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдореНрдкреНрдЯ рд╣реИ) рдФрд░ рд▓реЙрдЧ рдХрд┐рдП рд╣реЗрдбрд░ (рдХреЙрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдФрд░ рдЯреВрд▓реНрд╕) рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ; рдирд┐рд░реНрдпрд╛рддрдХ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рдЧрдврд╝рддрд╛ред
## Known limitations
- **npm 0.1.7-rc.2** тАФ рдкреНрд▓рдЧрдЗрди `@deepseek-ai/dsh@0.1.7-rc.2` рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рд┐рдд рд╣реИ (devDeps рдФрд░ CI рдХреА рдореБрдЦреНрдп рд░реВрд▓рд░); peer рд░реЗрдВрдЬ `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0` рд╣рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓рд╛рдЗрди рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓-рдпреЛрдЧреНрдп рд░рдЦрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рд░реВрд▓рд░ (`typecheck:ci`) рддрдерд╛ compat рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреБрд░рд╛рдиреЗ рдмреЗрд╕рд▓рд╛рдЗрди рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред
- **рдСрдбрд┐рдЯ рдЗрд╡реЗрдВрдЯреНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддреЗ** тАФ рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ `observe/*` рд░рд┐рдХреЙрд░реНрдб рдХреЗрд╡рд▓ рдСрдбрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╣реИрдВ: рд╡рд░реНрддрдорд╛рди рд╣реЛрд╕реНрдЯ рд▓рд╛рдЗрди рдкрд░ рд╕рддреНрд░ append рдЧреЗрдЯ рдХреЗрд╡рд▓ рд╕рд░рдлрд╝реЗрд╕ рдЗрд╡реЗрдВрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ `observe/*` рдЗрд╡реЗрдВрдЯ рд╕рддреНрд░ рд▓реЙрдЧ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛, рдФрд░ рдкреНрд▓рдЧрдЗрди рдмрд┐рдирд╛ рдорд╛рд░реНрдХ рдХреЗ append рд╕реЗ рдЗрд╕реЗ рдирдХрд▓реА рдирд╣реАрдВ рдмрдирд╛рддрд╛ (рдЗрд╕рд╕реЗ рд╕рддреНрд░ рдЕрдкрдардиреАрдп рд╣реЛ рдЬрд╛рддреЗ)ред рдСрдбрд┐рдЯ рд╕рддрд╣ рдХреЗ рд▓рд┐рдП `/observe` рд╕реНрдЯреЗрдЯрд╕ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ OTLP/Langfuse рдмреИрдХрдПрдВрдб рджреЗрдЦреЗрдВред
- **рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕/spool рдкрде рд╕реЗ рдмрдЪрддреА рд╣реИрдВ** тАФ OTLP рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЪрдпреА рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЦреЛрдпрд╛ flush рдЕрдЧрд▓реЗ рдореЗрдВ рд╕реНрд╡рдпрдВ-рд╕реБрдзрд░ рдЬрд╛рддрд╛ рд╣реИ (рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ, рдмрдЧ рдирд╣реАрдВ)ред
- **рдХреЛрдИ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рдирд╣реАрдВ** тАФ рд╣рд░ рд╕рдХреНрд╖рдо span рдкрд░рд┐рд╡рд╛рд░ рдирд┐рд░реНрдпрд╛рдд рд╣реЛрддрд╛ рд╣реИ; рдЙрдЪреНрдЪ-рдорд╛рддреНрд░рд╛ рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП `capture.*` рд╕реНрд╡рд┐рдЪ рдФрд░ `batch.maxBufferRecords` рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
## Development
```sh
pnpm install # node ^22.19 || >=24
pnpm run typecheck # tsc: src + tests 0.1.7-rc.2 devDeps рдХреЗ рд╡рд┐рд░реБрджреНрдз (рдХреЛрдИ tsconfig paths рдирд╣реАрдВ)
pnpm run typecheck:ci # tsc рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓рд╛рдЗрди рдХреЗ рд╡рд┐рд░реБрджреНрдз (рдмрд┐рдирд╛ paths)
pnpm run check:ruler-live # рдХреИрдирд░реА: рдХрдВрдкрд╛рдЗрд▓ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕рд┐рджреНрдз рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд░реВрд▓рд░ рдЬреАрд╡рд┐рдд рд╣реИ
pnpm test # vitest: 126 рдЯреЗрд╕реНрдЯ, 18 рд╕реБрдЗрдЯ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ Context/Session/storage seam)
pnpm run test:coverage # рдХрд╡рд░реЗрдЬ рджреНрд╡рд╛рд░ (90/80/90/90)
pnpm run build # tsdown рдмрдВрдбрд▓ + tsc рдШреЛрд╖рдгрд╛рдПрдБ (lib/)
pnpm run verify:self-contained # рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдкреЗрдХ registry рд╕реЗ рд╣рд▓ рд╣реЛрддреА рд╣реИрдВ
pnpm run verify:artifacts # рдирд┐рд░реНрдорд┐рдд ESM рдлрд╝реЗрд╕ + рдмрдВрдбрд▓ рдкреИрдЪ рдореМрдЬреВрдж
node scripts/check-readme-sync.mjs # рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ README рд╕рдордиреНрд╡рдп рджреНрд╡рд╛рд░
pnpm pack # рдкреНрд░рдХрд╛рд╢рд┐рдд tarball
```
## Topics
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `observability`, `opentelemetry`, `otlp`, `langfuse`, `tracing`
## Contributors
- [@PerryLink](https://github.com/PerryLink) тАФ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдореЗрдВрдЯреЗрдирд░: collector, pipelines, spool, OTLP/Langfuse sinks, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред
## PerryLink DSH Plugin Family
рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рдХреЗ DeepSeek Harness рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдкреВрд░реА рд╕реВрдЪреА рдиреАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рдЦреА рдЧрдИ рд╣реИ рддрд╛рдХрд┐ рд╣рд░ README рдХреА рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдЫреЛрдЯреА рд░рд╣реЗ; рд╣рд░ рдкрдВрдХреНрддрд┐ рдФрд░ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреЛрд▓реЗрдВред
рд╕рднреА рдкреНрд▓рдЧрдЗрди рдЦреЛрд▓реЗрдВ
| рдкреНрд▓рдЧрдЗрди | рд╕реНрдерд┐рддрд┐ |
|---|---|
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | |
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | |
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | |
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | |
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | |
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | |
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | |
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | |
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | |
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | ЁЯзК рдлрд╝реНрд░реЛрдЬрд╝рди тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | ЁЯЪл рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд тАФ рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА README рджреЗрдЦреЗрдВ |
## License
[Apache License 2.0](LICENSE) ┬й 2026 dsh-observe contributors
### DSH Desktop рдорд╛рд░реНрдХреЗрдЯ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
рд╕рднреА PerryLink рдкреНрд▓рдЧрдЗрди DSH Desktop рдХреЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: **Market тЖТ Sources тЖТ add source тЖТ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **тЖТ рдЪреБрдиреЗрдВ**ред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╛рд░реНрдХреЗрдЯ рдХреЗ npm-identity рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЖрдкрдХреА рдкреБрд╖реНрдЯрд┐ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИред