# ЁЯУК dsh-fund-research - **1024 рд╕реНрдЯреЛрд░ рдЪреИрдирд▓**: рдПрдХ рдмрд╛рд░ `npm i -g dsh1024`, рдлрд┐рд░ `dsh1024 plugin --profile web add dsh-fund-research` ([deepseek1024.com](https://deepseek1024.com) рдЗрдВрд╕реНрдЯреЙрд▓ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред **DeepSeek Harness рдкрд░ рдЪреАрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореНрдпреВрдЪреБрдЕрд▓ рдлрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд┐рд╡рд╛рджреА рд╢реЛрдз рд░рд┐рдкреЛрд░реНрдЯред** *рд╣рд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╣рд░ рдкреНрд░рдореБрдЦ рдЖрдБрдХрдбрд╝рд╛ рд╣реИрд╢ рдХрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рд╕реНрдиреИрдкрд╢реЙрдЯ рддрдХ рдЬрд╛рддрд╛ рд╣реИ тАФ рдЕрдВрддрд░рд╛рд▓ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХрднреА рдЧрдврд╝реЗ рдирд╣реАрдВ рдЬрд╛рддреЗред рдХреЗрд╡рд▓ рд╢реЛрдз; рдирд┐рд╡реЗрд╢ рд╕рд▓рд╛рд╣ рдирд╣реАрдВред* [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-fund-research) [![DSH plugin](https://img.shields.io/badge/dsh--plugin-ЁЯзй-green)](https://github.com/topics/dsh-plugin) [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-fund-research.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-х╛╜чла) [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#) [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-fund-research/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-fund-research/actions) [![npm version](https://img.shields.io/npm/v/dsh-fund-research)](https://www.npmjs.com/package/dsh-fund-research) [![npm downloads](https://img.shields.io/npm/dm/dsh-fund-research)](https://www.npmjs.com/package/dsh-fund-research) [English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README-zh.md) ┬╖ [Espa├▒ol](README-es.md) ┬╖ [Portugu├кs](README-pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README-hi.md)
--- ## Compatibility | рдШрдЯрдХ | рд╕рдВрд╕реНрдХрд░рдг | |---|---| | DeepSeek Harness | `dsh-v0.1.6-alpha.2` (peer рд░реЗрдВрдЬ alpha.2 рд▓рд╛рдЗрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ: `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0`)ред рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ `Session.append` рдХрд╛ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рд╕рд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП `SurfaceIntent` рд╣реИ, рдЗрд╕рд▓рд┐рдП `fund-research/*` рдСрдбрд┐рдЯ рдЗрд╡реЗрдВрдЯ рдЕрдм рднреА рджрд░реНрдЬ рдирд╣реАрдВ рд╣реЛрддреЗ (рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рддрдерд╛ рд╕реАрд▓ рдХрд┐рдпрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ/рд░рд┐рдкреЛрд░реНрдЯ рд╣реА рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ рд╣реИрдВ)ред 2026-09-18 рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд (рджреЛрд╣рд░рд╛ typecheck + 176 рдЯреЗрд╕реНрдЯ)ред | | Node.js | `^22.19.0 \|\| >=24.0.0` | | рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ | `pnpm@11.7.0` | | рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо | Windows / macOS / Linux (рдХреЗрд╡рд▓ рд╣реЛрд╕реНрдЯ рдкреНрд▓рдЧрдЗрди) | | рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд | Tiantian Fund / Eastmoney рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ (рдмрд┐рдирд╛ key, рдмрд┐рдирд╛ login) | ## What you get - **`fund_research` рдЯреВрд▓** тАФ рдПрдХ рдлрдВрдб рдХреЛрдб рдЕрдВрджрд░, рдПрдХ рд╕рдВрд╕реНрдХрд░рдгрд┐рдд Markdown рд╢реЛрдз рд░рд┐рдкреЛрд░реНрдЯ рдмрд╛рд╣рд░: рдЕрд╡рд▓реЛрдХрди, рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдШрдЯрди, рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ рдкреНрд░рд╡реЗрд╢, рд╕рд░рд▓реАрдХреГрдд рд╢реИрд▓реА рдЖрд░реЛрдкрдг, рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓, рдЬреЛрдЦрд┐рдо рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдШреЛрд╖рдгрд╛рдПрдБ, рдЕрд╕реНрд╡реАрдХрд░рдг, рдФрд░ рдПрдХ **рд╕рдВрдЦреНрдпрд╛-рдЕрдиреБрд░реЗрдЦрдг рдкрд░рд┐рд╢рд┐рд╖реНрдЯ** рдЬреЛ рд╣рд░ рдкреНрд░рдореБрдЦ рдЖрдБрдХрдбрд╝реЗ рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ JSON рдкрде рдФрд░ рд╕рддреНрдпрд╛рдкрди рдлреИрд╕рд▓реЗ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред `fund-reports/{code}/{YYYYMMDD-HHmmss}/` рдореЗрдВ `report.md` + `manifest.json` + `snapshot.json` рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред `background: true` рдЗрд╕реЗ `fund-report` рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред - **`fund_snapshot` рдЯреВрд▓** тАФ рдПрдХ рд╣рд▓реНрдХрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛рд░реНрдб (рдирд╡реАрдирддрдо NAV, рдкреНрд░рдХрд╛рд╢рд┐рдд рдЪрд░рдг рд░рд┐рдЯрд░реНрди, рд╕реНрдХреЗрд▓, рдкреНрд░рдмрдВрдзрдХ, рдЯреЙрдк-3 рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕) рдлрдВрдб рдХреЗ рджрд┐рди-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реАрд▓ рд╣реЛрддрд╛ рд╣реИред - **рдирд┐рдпрддрд┐рд╡рд╛рджреА рдореЗрдЯреНрд░рд┐рдХреНрд╕, рд╢реВрдиреНрдп рдореЙрдбрд▓ рдЕрдВрдХрдЧрдгрд┐рдд** тАФ рдЕрд╡рдзрд┐/рд╡рд╛рд░реНрд╖рд┐рдХреАрдХреГрдд рд░рд┐рдЯрд░реНрди, рдЕрд╕реНрдерд┐рд░рддрд╛, рдЕрдзрд┐рдХрддрдо рдбреНрд░реЙрдбрд╛рдЙрди, Sharpe; рдЯреЙрдк-N рд╕рд╛рдВрджреНрд░рддрд╛, HHI, рдЙрджреНрдпреЛрдЧ рд╡рд┐рддрд░рдг, рддреНрд░реИрдорд╛рд╕рд┐рдХ рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ рддреБрд▓рдирд╛; рдЖрдХрд╛рд░-рдореВрд▓реНрдп рд╢реИрд▓реА рдмреИрдВрдб; рдкреНрд░рдмрдВрдзрдХ рдХрд╛рд░реНрдпрдХрд╛рд▓ рдФрд░ рд╕рд╛рдерд┐рдпреЛрдВ рд╕реЗ рддреБрд▓рдирд╛ред рд╕рдм рдХреБрдЫ рд╕реАрд▓ рдХрд┐рдП рдЧрдП рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рдиред - **рдЕрдиреБрд░реЗрдЦрдг рдПрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рд╕реБрд╡рд┐рдзрд╛** тАФ рд╕реАрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рд░ рдкреНрд░рдореБрдЦ рдЖрдБрдХрдбрд╝реЗ рдХреА рд╕реАрд▓ рдХрд┐рдП рдЧрдП `snapshot.json` рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЬрд╛рдБрдЪ рд╣реЛрддреА рд╣реИ тАФ рд╡реИрдХрд▓реНрдкрд┐рдХ [`dsh-data-quality`](https://github.com/topics/dsh-plugin) рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдм рд╡рд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реВрдкреА рдлрд╝реЙрд▓рдмреИрдХ рдЬрд╛рдБрдЪрдХрд░реНрддрд╛ (`builtin-fallback`) рд╕реЗред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рддрд╛рд▓рд┐рдХрд╛ рдореВрд▓реНрдп тЖФ рдкрде тЖФ рдлреИрд╕рд▓рд╛ рджрд░реНрдЬ рдХрд░рддреА рд╣реИред - **рдИрдорд╛рдирджрд╛рд░ рдЕрдВрддрд░рд╛рд▓** тАФ рдПрдХ рдЕрд╕рдлрд▓ рдпрд╛ рдЕрд╡рдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдбреЗрдЯрд╛ рдЕрдВрддрд░рд╛рд▓ рдШреЛрд╖рдгрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рдХрднреА рднреА рдХрд┐рд╕реА рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдЧрдврд╝реЗ рд╣реБрдП рдЖрдБрдХрдбрд╝реЗ рд╕реЗ рдирд╣реАрдВ рднрд░рддрд╛ред - **рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб** тАФ `offline: true` (config рдпрд╛ рдЯреВрд▓ рддрд░реНрдХ) рд╕рдм рдХреБрдЫ рд╕реНрдЯреЛрд░реЗрдЬ-рдбреЛрдореЗрди рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░рдд рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рдкрд░реЛрд╕рддрд╛ рд╣реИ, рд╢реВрдиреНрдп рдмрд╛рд╣рд░реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рдеред рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ред - **asOf рдХрдЯрдСрдлрд╝** тАФ `asOfDate` (ISO `YYYY-MM-DD`) NAV рд╢реГрдВрдЦрд▓рд╛ рдХреЛ рдЙрд╕ рддрд┐рдерд┐ рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдбреЗрдЯрд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╡ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдХрдЯрдСрдлрд╝ рдЕрдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдЕрдорд╛рдиреНрдп рдпрд╛ рднрд╡рд┐рд╖реНрдп рдХреА рддрд┐рдерд┐рдпрд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИрдВред - **рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд░рд┐рдЬрд╝реНрдпреВрдо** тАФ `/.run-state.json` рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЪрд░рдг рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдФрд░ рдЗрдирдкреБрдЯ рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ; `resume: true` рдкрд╣рд▓реЗ рдЕрдзреВрд░реЗ рдЪрд░рдг рд╕реЗ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рд╕реАрд▓ рдХрд┐рдП рд╣реБрдП рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмреЗрдореЗрд▓ рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред - **рд╕реНрд░реЛрдд рдЦреЛрдЬ рд░рд┐рдХреЙрд░реНрдб** тАФ рд╣рд░ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдПрдХ рдХреЛрдб-рдЬрдирд┐рдд `sources-discovery.json` (рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реВрдЪреА, рдкреНрд░рд╛рдердорд┐рдХ/рдлрд╝реЙрд▓рдмреИрдХ рд╕рдорд╛рдзрд╛рди, рдкреНрд░рддрд┐-рд╕реНрд░реЛрдд рдХрд╡рд░реЗрдЬ рдФрд░ рдЕрдВрддрд░рд╛рд▓, рдЕрд╡рдХреНрд░рдордг рдХрд╛рд░рдг) рд╕реАрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ цХ░цНоц║Рф╕Оч╝║хПгхг░цШО рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред - **рдмрд╣реБ-рдлрдВрдб рдлрд╝реИрди-рдЖрдЙрдЯ** тАФ `codes` рдХреЛрдб рдХрд╛ рд╕рд░рдгреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ; рдкреНрд░рддреНрдпреЗрдХ рдлрдВрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╡рд┐рдлрд▓рддрд╛ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕рд╛рде (рд╡рд┐рдлрд▓рддрд╛рдПрдБ рд╕рд╛рд░рд╛рдВрд╢ рдЕрдВрддрд░рд╛рд▓ рдмрди рдЬрд╛рддреА рд╣реИрдВ), рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рдХрд╛рд░реНрдб рд╣реЛрддрд╛ рд╣реИ (code / asOf / рд╕реАрд▓ рд╣реИрд╢ / рдирд┐рд░реНрдгрдп / рд╡рд┐рдлрд▓рддрд╛ рдХрд╛рд░рдг)ред - **рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрд╣реАрдЦрд╛рддрд╛** тАФ рд╣рд░ рд╕рдлрд▓ рд╕реАрд▓ `/.tracking.jsonl` рдореЗрдВ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ; `includeComparison: true` рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ ф╕Оф╕Кцмбхп╣цпФ рдЕрдиреБрднрд╛рдЧ (NAV рд░реЗрдВрдЬ / рд╕реНрдХреЗрд▓ / рд╢реАрд░реНрд╖ рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕) рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ, рдкреВрд░реНрд╡ рд░рд┐рдХреЙрд░реНрдб рди рд╣реЛрдиреЗ рдкрд░ рдЕрдВрддрд░рд╛рд▓ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рдеред - **рдХреЗрд╡рд▓-рдкрдарди рд╕рдореАрдХреНрд╖рд╛** тАФ рд╕реАрд▓ рдХреЗ рдмрд╛рдж, рдПрдХ `fund-review` рдЬреЙрдм рд╕реАрд▓ рдХрд┐рдП рд╣реБрдП рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ (рдЕрдВрддрд░рд╛рд▓-рдШреЛрд╖рдгрд╛ рдкреВрд░реНрдгрддрд╛, рдЯреНрд░реЗрд╕реЗрдмрд┐рд▓рд┐рдЯреА рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рдВрдЧрддрд┐, рдЕрд╕реНрд╡реАрдХрд░рдг) рдФрд░ `review-note.md` рд▓рд┐рдЦрддрд╛ рд╣реИ; jobs рд╕реЗрд╡рд╛ рди рд╣реЛрдиреЗ рдкрд░ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (run-state рдореЗрдВ рджрд░реНрдЬ)ред - **рдкреНрд░рддрд┐-рд╕реНрд░реЛрдд рдЧреБрдгрд╡рддреНрддрд╛ рд╕рдВрдХреЗрдд** тАФ рд╣рд░ рд╕реНрд░реЛрдд рдирд┐рдпрддрд╛рддреНрдордХ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (`requested`/`succeeded`/`fieldsPresent`/`parseWarnings`/`degraded`) рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдЯреВрд▓ рдорд╛рдиреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдирд┐рдореНрди-рдЧреБрдгрд╡рддреНрддрд╛ рд╕реНрд░реЛрдд рдХрд╛ рднрд╛рд░ рдШрдЯрд╛ рд╕рдХреЗ (рдХрднреА рдХрдареЛрд░ рд░реВрдк рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рди рдХрд░реЗ)ред - **рд╡реЙрдХ-рдлрд╝реЙрд░рд╡рд░реНрдб рд╕реНрдерд┐рд░рддрд╛ рд╕рд╛рд░рд╛рдВрд╢** тАФ `includeWalkForward: true` рдПрдХ ца╖цЬмхдЦчи│хоЪцАзцСШшжБ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИ: рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ-рд╡рд┐рдВрдбреЛ рд░рд┐рдЯрд░реНрди/Sharpe рд╕рдВрдХреЗрдд рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдФрд░ рдорд╛рдзреНрдп/рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдирд╣реАрдВред - **рд╕рддреНрд░ рдСрдбрд┐рдЯ рдЗрд╡реЗрдВрдЯ (host рдкрд░ рдирд┐рд░реНрднрд░)** тАФ рдЬрдм host рд░реЗрдкреЛ-рдмрд╛рд╣рд░реА рдЗрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддрдм `fund-research/snapshot` рдФрд░ `fund-research/report` рдХреЗрд╡рд▓-рд▓реЙрдЧ рдЗрд╡реЗрдВрдЯ рдХреЛрдб, рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рд╣реИрд╢ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рд╕реВрдЪреА рд░рдЦрддреЗ рд╣реИрдВ (рдореЙрдбрд▓-рджреГрд╢реНрдп тЯ║ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛); `0.1.2-alpha.1`тАУ`0.1.5-alpha.1` hosts рдкрд░ рдЬреНрдЮрд╛рдд-рдкреНрд░рдХрд╛рд░ рдХреИрдЯрд▓реЙрдЧ рдмрд┐рд▓реНрдб-рдЬрдирд┐рдд рдЗрди-рд░реЗрдкреЛ рд╕реВрдЪреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреНрд╡рд╛рд░ рдХреБрдЫ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рдФрд░ рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рддрдерд╛ рд╕реАрд▓рдмрдВрдж рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рд╣реА рдСрдбрд┐рдЯ рдкрде рд╣реИрдВред - **рдкрджреНрдзрддрд┐ рд╕реНрдХрд┐рд▓** тАФ рдПрдХ рдмрдВрдбрд▓рд┐рдд `fund-research` рд╕реНрдХрд┐рд▓ рдореЙрдбрд▓ рдХреЛ рдореЗрдЯреНрд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ (хПгх╛Д), рдЕрдВрддрд░рд╛рд▓-рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдЕрдиреБрдкрд╛рд▓рди рд╢рдмреНрджрд╛рд╡рд▓реА рд╕рд┐рдЦрд╛рддрд╛ рд╣реИред рдЧрдгрдирд╛ рдХреЛрдб рдореЗрдВ рд╣реА рд░рд╣рддреА рд╣реИред ## Quick start ```text > чФи fund_research хЗ║ф╕Аф╗╜ 161725 чЪДчаФчй╢цКехСК ``` рдПрдЬреЗрдВрдЯ `fund_research({ code: "161725" })` рдХрд╣рддрд╛ рд╣реИ; рдХреБрдЫ рдкрд▓ рдмрд╛рдж workspace рдореЗрдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ: ```text fund-reports/161725/20260819-153012/ тФЬтФАтФА snapshot.json # рдХрдЪреНрдЪреЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдбреЗрдЯрд╛ + рдЧрдгрдирд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ + рдкреНрд░рддрд┐-рд╕реНрд░реЛрдд sha256 тФЬтФАтФА report.md # рдЕрдиреБрд░реЗрдЦрдг рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рд╢реЛрдз рд░рд┐рдкреЛрд░реНрдЯ тФФтФАтФА manifest.json # рд╕реНрдиреИрдкрд╢реЙрдЯ/рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрд╢, рдкреИрд░рд╛рдореАрдЯрд░, рд╕рддреНрдпрд╛рдкрди рдЗрдВрдЬрди, рдЕрдВрддрд░рд╛рд▓ ``` `report.md` рдХреЗ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рд╣рд░ рдЖрдБрдХрдбрд╝рд╛ `snapshot.json` рдХреЗ рд╡рд┐рд░реБрджреНрдз `verified` / `mismatch` / `not-found` / `unverifiable` рдлреИрд╕рд▓рд╛ рд░рдЦрддрд╛ рд╣реИ тАФ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рддхПгх╛Д рдХреЗ рд╕рд╛рде `raw.*` рд╕реЗ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреА рд╣реА рдСрдбрд┐рдЯ рдХрд░реЗрдВред ## Install & uninstall ```sh dsh plugin --profile web add dsh-fund-research # рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (npm рдпрд╛ tarball) dsh plugin --profile web remove dsh-fund-research # рд╣рдЯрд╛рдПрдБ ``` рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ (рдмрдВрдбрд▓ рд╕рдХреНрд░рд┐рдпрдг restart-рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рд╢рд┐рдк рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ `dsh-base` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдЯреИрдХ (`dsh-storage` + `dsh-storage-json` + `dsh-storage-domain`) рдмрдирд╛рддреЗ рд╣реИрдВ; рдмрдВрдбрд▓ рдкреИрдЪ рдХреЗрд╡рд▓ рдкреНрд▓рдЧрдЗрди рдкрдВрдХреНрддрд┐ рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реИред ## Configuration рд╕рднреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджрд┐рдЦрд╛рдП рдЧрдП); рдЕрдорд╛рдиреНрдп рдорд╛рди рд▓реЛрдб рд╣реЛрддреЗ рд╕рдордп рдЬрд╝реЛрд░ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред | Key | Default | Description | |---|---|---| | `enabled` | `true` | рдореБрдЦреНрдп рд╕реНрд╡рд┐рдЪ; `false` рдХреБрдЫ рднреА рдорд╛рдЙрдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ред | | `eastmoneyBaseUrl` | `https://fund.eastmoney.com` | Tiantian Fund pingzhongdata рд╣реЛрд╕реНрдЯред | | `f10BaseUrl` | `https://fundf10.eastmoney.com` | Tiantian Fund F10 рд╣реЛрд╕реНрдЯ (рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ + рдкреНрд░рдмрдВрдзрдХ рдкреГрд╖реНрда)ред | | `quoteBaseUrl` | `https://push2.eastmoney.com` | рдкреНрд░рддрд┐-рд╕реНрдЯреЙрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣реЗрддреБ Eastmoney рдХреЛрдЯ рд╣реЛрд╕реНрдЯред | | `quoteFallbackBaseUrl` | `https://push2delay.eastmoney.com` | рдкреНрд░рд╛рдердорд┐рдХ рд╣реЛрд╕реНрдЯ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐-рд╕реНрдЯреЙрдХ рдЖрдЬрд╝рдорд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЛрдЯ рд╣реЛрд╕реНрдЯ (Eastmoney рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд▓рдВрдмрд┐рдд-рдХреЛрдЯ рд╣реЛрд╕реНрдЯ); `''` рдЗрд╕реЗ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред | | `requestIntervalMs` | `1000` | рдмрд╛рд╣рд░реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмреАрдЪ рдиреНрдпреВрдирддрдо рдЕрдВрддрд░ (рд╡рд┐рдирдореНрд░ рд╕рдВрдЧреНрд░рд╣)ред | | `timeoutMs` | `15000` | рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рд╕рдордп-рд╕реАрдорд╛ред | | `retries` | `2` | рдПрдХреНрд╕рдкреЛрдиреЗрдВрд╢рд┐рдпрд▓ рдмреИрдХрдСрдлрд╝ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ред | | `cacheTtlHours` | `12` | рд╕реНрдЯреЛрд░реЗрдЬ-рдбреЛрдореЗрди рд╕реНрдиреИрдкрд╢реЙрдЯ рдкреБрдирдГрдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛред | | `riskFreeRate` | `0.02` | Sharpe рдЕрдиреБрдкрд╛рдд рд╣реЗрддреБ рд╡рд╛рд░реНрд╖рд┐рдХ рдЬреЛрдЦрд┐рдо-рдореБрдХреНрдд рджрд░ред | | `offline` | `false` | рдХрднреА рдЕрдиреБрд░реЛрдз рди рднреЗрдЬреЗрдВ; рдХреЗрд╡рд▓ рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░рдд рдкрдврд╝реЗрдВред | | `reportRoot` | `fund-reports` | рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░-рд╕рд╛рдкреЗрдХреНрд╖ (рдпрд╛ рдирд┐рд░рдкреЗрдХреНрд╖) рд░рд┐рдкреЛрд░реНрдЯ рдЯреНрд░реА рд░реВрдЯред | | `styleQuotes` | `true` | рд╢реИрд▓реА рдЖрд░реЛрдкрдг рд╣реЗрддреБ рдкреНрд░рддрд┐-рд╕реНрдЯреЙрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред | ## Tools & surfaces ### `fund_research` | рддрд░реНрдХ | рдкреНрд░рдХрд╛рд░ | рд╡рд┐рд╡рд░рдг | |---|---|---| | `code` | string | рдЫрд╣-рдЕрдВрдХреАрдп рдлрдВрдб рдХреЛрдб, рдЙрджрд╛. `"161725"` (рдПрдХрд▓ рдлрдВрдб)ред `codes` рдХреЗ рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдпред | | `codes` | string[] | рдХрдИ рдЫрд╣-рдЕрдВрдХреАрдп рдХреЛрдб: рдкреНрд░рддрд┐-рдлрдВрдб рд╡рд┐рдлрд▓рддрд╛ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕рд╛рде рдлрд╝реИрди-рдЖрдЙрдЯ (рд╕рд╛рд░рд╛рдВрд╢ рд▓реМрдЯрд╛рддрд╛ рд╣реИ)ред `code` рдХреЗ рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдпред | | `sections` | string[] | рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрднрд╛рдЧ (`overview`/`performance`/`holdings`/`style`/`manager`/`risk`/`disclaimer`)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рд╕рднреАред | | `offline` | boolean | рдХреЗрд╡рд▓ рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░рдд рдкрдврд╝реЗрдВ (рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ рдирд╣реАрдВ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдкреНрд▓рдЧрдЗрди configред | | `asOfDate` | string | ISO 8601 рдХрдЯрдСрдлрд╝ (`YYYY-MM-DD`): рдХреЗрд╡рд▓ рдЙрд╕ рддрд┐рдерд┐ рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдбреЗрдЯрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ (NAV рд╢реГрдВрдЦрд▓рд╛ рдЫреЛрдЯреА рдХреА рдЧрдИ)ред рдЦрд╛рд▓реА = рдХреЛрдИ рдХрдЯрдСрдлрд╝ рдирд╣реАрдВ; рднрд╡рд┐рд╖реНрдп рдХреА рддрд┐рдерд┐рдпрд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИрдВред | | `resume` | boolean | `.run-state.json` рдореЗрдВ рджрд░реНрдЬ рд░рди рдХреЛ рдкрд╣рд▓реЗ рдЕрдзреВрд░реЗ рдЪрд░рдг рд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВ (рд╕реАрд▓ рдХрд┐рдП рд╣реБрдП рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ); рдмреЗрдореЗрд▓ рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: `false`ред | | `includeComparison` | boolean | рдкрд┐рдЫрд▓реЗ `.tracking.jsonl` рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ ф╕Оф╕Кцмбхп╣цпФ рдЕрдиреБрднрд╛рдЧ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ; рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╕рд╛рдХреНрд╖реНрдп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рддред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: `false`ред | | `includeWalkForward` | boolean | рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ ца╖цЬмхдЦчи│хоЪцАзцСШшжБ рдЕрдиреБрднрд╛рдЧ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ: рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ-рд╡рд┐рдВрдбреЛ рд░рд┐рдЯрд░реНрди/Sharpe рд╕рдВрдХреЗрдд рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдФрд░ рдорд╛рдзреНрдп/рдорд╛рдирдХ рд╡рд┐рдЪрд▓рдиред рдХреЗрд╡рд▓ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рд╡рд░рдг, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдирд╣реАрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: `false`ред | | `background` | boolean | `fund-report` рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ; `{ kind: "background", jobId }` рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: `false`ред | ### `fund_snapshot` | рддрд░реНрдХ | рдкреНрд░рдХрд╛рд░ | рд╡рд┐рд╡рд░рдг | |---|---|---| | `code` (рдЖрд╡рд╢реНрдпрдХ) | string | рдЫрд╣-рдЕрдВрдХреАрдп рдлрдВрдб рдХреЛрдбред | | `offline` | boolean | рдХреЗрд╡рд▓ рд╕реНрдиреИрдкрд╢реЙрдЯ рдкрд░рдд рдкрдврд╝реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдкреНрд▓рдЧрдЗрди configред | | `asOfDate` | string | ISO 8601 рдХрдЯрдСрдлрд╝ (`YYYY-MM-DD`): рдХреЗрд╡рд▓ рдЙрд╕ рддрд┐рдерд┐ рдпрд╛ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдбреЗрдЯрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рдЦрд╛рд▓реА = рдХреЛрдИ рдХрдЯрдСрдлрд╝ рдирд╣реАрдВ; рднрд╡рд┐рд╖реНрдп рдХреА рддрд┐рдерд┐рдпрд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИрдВред | ### рд░рд┐рдкреЛрд░реНрдЯ рдЕрдиреБрднрд╛рдЧ цжВшзИ рдЕрд╡рд▓реЛрдХрди ┬╖ ф╕Ъч╗йцЛЖшзг рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдШрдЯрди ┬╖ цМБф╗Учй┐щАП рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ рдкреНрд░рд╡реЗрд╢ ┬╖ щгОца╝х╜ТхЫа рд╢реИрд▓реА рдЖрд░реЛрдкрдг (рд╕рд░рд▓реАрдХреГрдд) ┬╖ ч╗ПчРЖчФ╗хГП рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ ┬╖ щгОщЩйф╕Оч╝║хПгхг░цШО рдЬреЛрдЦрд┐рдо рдФрд░ рдЕрдВрддрд░рд╛рд▓ ┬╖ хЕНш┤гхг░цШО рдЕрд╕реНрд╡реАрдХрд░рдг ┬╖ щЩДх╜Хя╝ЪцХ░хнЧхЫЮц║пшби рдЕрдиреБрд░реЗрдЦрдг рдкрд░рд┐рд╢рд┐рд╖реНрдЯред ## Permissions & data - **рдкрдврд╝рддрд╛ рд╣реИ** Tiantian Fund / Eastmoney рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ (`fund.eastmoney.com/pingzhongdata/*.js`, `fundf10.eastmoney.com` F10 рдкреГрд╖реНрда, `push2.eastmoney.com` рдХреЛрдЯ) рдмреНрд░рд╛рдЙрдЬрд╝рд░ User-Agent рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рдирдореНрд░ рдЧрддрд┐ рдХреЗ рд╕рд╛рдеред рдмрд┐рдирд╛ key, рдмрд┐рдирд╛ login, рдмрд┐рдирд╛ рднреБрдЧрддрд╛рди API, рдмрд┐рдирд╛ рдПрдВрдЯреА-рдХреНрд░реЙрд▓рд░ рдмрд╛рдИрдкрд╛рд╕ред - **рд▓рд┐рдЦрддрд╛ рд╣реИ** рдХреЗрд╡рд▓ рд╕рддреНрд░ workspace рдХреЗ рдЕрдВрджрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд░рд┐рдкреЛрд░реНрдЯ рд░реВрдЯ рдХреЗ рдЕрдВрддрд░реНрдЧрдд, рд╕рд╛рде рд╣реА `dsh_fund_research` рд╕реНрдЯреЛрд░реЗрдЬ рдбреЛрдореЗрди (рдкреНрд░рддрд┐ рдлрдВрдб рдирд╡реАрдирддрдо рд╕реНрдиреИрдкрд╢реЙрдЯ)ред - **рдХрднреА рдирд╣реАрдВ** рджреВрд░рд╕реНрде JavaScript рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ (pingzhongdata рдмреНрд▓реЙрдХ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ), рдХрднреА credentials рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛, рдХрднреА рдЯреНрд░реЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ред - рд╕рддреНрд░ рдЗрд╡реЗрдВрдЯ рдХреЗрд╡рд▓-рд▓реЙрдЧ рдСрдбрд┐рдЯ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ рдЬреЛ `src/events.ts` рдХреЗ рдЕрдиреБрдХреВрд▓реА рджреНрд╡рд╛рд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ: рд╡реЗ рддрднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрдм host рд░реЗрдкреЛ-рдмрд╛рд╣рд░реА рдкреНрд░рдХрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ тАФ рдЙрд╕рдХрд╛ рдЬреНрдЮрд╛рдд-рдкреНрд░рдХрд╛рд░ рд╕рдореБрдЪреНрдЪрдп рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЙрд╕рдХрд╛ `Session.append` рдПрдХ `ignorable` рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рд▓реЗрддрд╛ рд╣реИред `0.1.2-alpha.1` рд╕реЗ рдЖрдЧреЗ (рдЬрд┐рд╕рдореЗрдВ `0.1.5-alpha.1` рднреА рд╣реИ) рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛: `KNOWN_SESSION_EVENT_TYPES` рдмрд┐рд▓реНрдб-рдЬрдирд┐рдд рдЗрди-рд░реЗрдкреЛ рдХреИрдЯрд▓реЙрдЧ рд╣реИ рдЬреЛ рд░рдЪрдирд╛ рд╕реЗ рд╣реА рд░реЗрдкреЛ-рдмрд╛рд╣рд░реА рдЗрд╡реЗрдВрдЯ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ `Session.append` рдореЗрдВ `ignorable` рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреНрд╡рд╛рд░ рдХреБрдЫ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ тАФ рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕реАрд▓рдмрдВрдж рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рд╣реА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг-рдпреЛрдЧреНрдп рдСрдбрд┐рдЯ рдкрде рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рдлрд▓ append рдХрднреА рдЯреВрд▓ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдмрджрд▓рддрд╛ред 0.1.5-alpha.1 (2026-09-09 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рдирдИ рдмреЗрд╕рд▓рд╛рдЗрди рдкрд░ рджреНрд╡рд╛рд░ рдкреБрдирдГ рд╕рддреНрдпрд╛рдкрд┐рдд тАФ рдХреИрдЯрд▓реЙрдЧ рдЕрднреА рднреА рд░реЗрдкреЛ-рдмрд╛рд╣рд░реА рдЗрд╡реЗрдВрдЯ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ `Session.append` рдЕрднреА рднреА `ignorable` рд▓рд┐рдлрд╝рд╛рдлрд╝рд╛ рд╕реНрдЯреИрдореНрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рджреНрд╡рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИред 0.1.5-rc.1 (2026-09-10 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рдирд┐рд░реНрднрд░рддрд╛ рдкрд┐рди рдкреНрд░рдХрд╛рд╢рд┐рдд 0.1.5-rc.1 рд▓рд╛рдЗрди рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ; рдХреЛрдИ seam рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ plugin рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред 0.1.5-rc.2 (2026-09-11 рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд): рдирд┐рд░реНрднрд░рддрд╛ рдкрд┐рди рдкреНрд░рдХрд╛рд╢рд┐рдд 0.1.5-rc.2 рд▓рд╛рдЗрди рдкрд░ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ; рдХреЛрдИ seam рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ plugin рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред ## Security boundaries - рдлрдВрдб рдХреЛрдб рдХрд┐рд╕реА рдкрде рдпрд╛ URL рдХреЛ рдЫреВрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдареАрдХ рдЫрд╣ рдЕрдВрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рд░рд┐рдкреЛрд░реНрдЯ рд░реВрдЯ рд╕рддреНрд░ workspace рдХреЗ рдЕрдВрджрд░ рд╣рд▓ рд╣реЛрддрд╛ рд╣реИред - рд╕реНрд░реЛрдд рдкреЗрд▓реЛрдб рдЕрдзрд┐рдЧреНрд░рд╣рдг рдкрд░ рд╣реИрд╢ (SHA-256) рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рд╕реАрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдореМрди рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдВрдкрд╛рджрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред - рд╕рддреНрдпрд╛рдкрди рдХрднреА рд╕реАрд▓рд┐рдВрдЧ рдХреЛ рд░реЛрдХрддрд╛ рдирд╣реАрдВ: рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ `dsh-data-quality` рд╕реЗрд╡рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рдБрдЪрдХрд░реНрддрд╛ рдореЗрдВ рдЕрд╡рдХреНрд░рдорд┐рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдВрдЬрди рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдФрд░ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рджрд░реНрдЬ рд╣реЛрддрд╛ рд╣реИред - рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ [SECURITY.md](SECURITY.md)ред ## Known limitations - **рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕рдВрд░рдЪрдирд╛ рдмрд╣рд╛рд╡ред** рдкрд╛рд░реНрд╕рд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реЗ рд╕рдЦреНрдд рд╣реИрдВ: рдпрджрд┐ Tiantian Fund `var Data_*` рдЖрдХрд╛рд░ рдпрд╛ F10 рддрд╛рд▓рд┐рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╕реНрд░реЛрдд рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реБрдП `SourceParseError` рдлреЗрдВрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрднрд╛рдЧ рдШреЛрд╖рд┐рдд рдЕрдВрддрд░рд╛рд▓ рддрдХ рдЕрд╡рдХреНрд░рдорд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдореБрдЦреНрдп pingzhongdata рдмреНрд▓реЙрдХ рдХреА рд╡рд┐рдлрд▓рддрд╛ рд░рди рдХреЛ рдЬрд╝реЛрд░ рд╕реЗ рд░реЛрдХрддреА рд╣реИ)ред рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ тАФ рдореМрди рдЧрд▓рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдШреЛрд╖рд┐рдд рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдмрджрддрд░ рд╣реИред - **рд╢реИрд▓реА рдЖрд░реЛрдкрдг ф╝░чоЧхПгх╛Д рд╣реИ (рдЕрдиреБрдорд╛рдирд┐рдд)ред** рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдмреИрдВрдб (тЙе1000ф║┐ / 300тАУ1000ф║┐ / <300ф║┐) рдФрд░ PE рдмреИрдВрдб, рд╕рд╛рде рд╣реА рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ рдХреЗ рднреАрддрд░ рдкрдВрдЪрдХ тАФ рдХреЛрдИ рдкреВрд░реНрдг-рдмрд╛рдЬрд╝рд╛рд░ рд╡рд┐рддрд░рдг рдкрд░рд╛рдорд░реНрд╢ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ред рд░рд┐рдкреЛрд░реНрдЯ рдЗрд╕реЗ рд▓реЗрдмрд▓ рдХрд░рддреА рд╣реИред - **рд╣реЛрд▓реНрдбрд┐рдВрдЧреНрд╕ рддреНрд░реИрдорд╛рд╕рд┐рдХ рдкреНрд░рдХрдЯреАрдХрд░рдг рдбреЗрдЯрд╛ рд╣реИрдВ** (рдкреНрд░рдХрд╛рд╢рди рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде); F10 рдкреГрд╖реНрда рдирд╡реАрдирддрдо рджреЛ рддрд┐рдорд╛рд╣рд┐рдпреЛрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИред - **рдкреНрд░рддрд┐ рдХреЙрд▓ рдПрдХ рдлрдВрдб; рдХреЛрдИ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ, рдХреЛрдИ PDF рд╡рд╛рд░реНрд╖рд┐рдХ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ, рдХреЛрдИ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдХреЛрдЯ рдирд╣реАрдВ** (`fundgz.1234567.com.cn` рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореГрдд рд╣реИ рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛)ред - Web UI рдХреА "deliverables" рдкрдВрдХреНрддрд┐ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди-рдЯреВрд▓ рдХреЙрд▓ рдХрд╛рд░реНрдб рд╕реЗ рдЦрд┐рд▓рд╛рдИ рдЬрд╛рддреА рд╣реИ; рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рдЙрддреНрдкрд╛рджрд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреЙрд▓ рдХрд╛рд░реНрдб рдХреЗ рдЕрдиреБрд╕рд░рдг-рд╕реНрдерд╛рди (рдлрдВрдб рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрддреА рд╣реИрдВ, рдкреНрд░рддрд┐-рдлрд╝рд╛рдЗрд▓ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред ## Development ```sh pnpm install pnpm run typecheck && pnpm run typecheck:ci # рдкреНрд░рдХрд╛рд░, рд╕рд╣рд┐рддред CI-рд╕рдЦреНрдд pnpm test # рд╡рд╛рд╕реНрддрд╡рд┐рдХ seams рдкрд░ 176 рдкрд░реАрдХреНрд╖рдг pnpm run test:e2e # рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рдиреЗрдЯрд╡рд░реНрдХ E2E (LIVE_E2E=1) pnpm run build && pnpm run verify:artifacts # tsdown + tsc рдШреЛрд╖рдгрд╛рдПрдБ pnpm run verify:self-contained # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдкреЗрдХ рдирд╣реАрдВ node scripts/check-readme-sync.mjs # рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ README рдЧреЗрдЯ node scripts/check-endpoints.mjs # M3 рдПрдВрдбрдкреЙрдЗрдВрдЯ-рд▓рд╛рдЗрд╡рдиреЗрд╕ рдкреНрд░реЛрдм (4 eastmoney рд╣реЛрд╕реНрдЯ) pnpm pack # tarball ``` рдкрд░реАрдХреНрд╖рдг 0.1.5-rc.2 peers рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ `Context`/`SessionStore`/`ToolRuntime`/`LocalJobRegistry`/рд╕реНрдЯреЛрд░реЗрдЬ seam рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; рдиреЗрдЯрд╡рд░реНрдХ рдХреЗрд╡рд▓ fetch рд╕реАрдорд╛ рдкрд░ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд┐рдХреНрд╕реНрдЪрд░ (`fixtures/`, рдлрдВрдб 161725) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред `.tmp/` рдХреЗ рдХрд▓реЗрдХреНрдЯрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдлрд┐рдХреНрд╕реНрдЪрд░ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВред ## Topics `dsh` ┬╖ `dsh-plugin` ┬╖ `deepseek-harness` ┬╖ `cordis` ┬╖ `fund-research` ┬╖ `mutual-fund` ┬╖ `investment-research` ┬╖ `finance` ┬╖ `research-report` ## Contributors - **PerryLink** тАФ рдЕрдиреБрд░рдХреНрд╖рдХ: рд╕рдВрдЧреНрд░рд╣/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рд░рд┐рдкреЛрд░реНрдЯ-рд╕реАрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди, endpoint-рдЬреАрд╡рдВрддрддрд╛ рдЬрд╛рдБрдЪ, CI рд╡ рд░рд┐рд▓реАрдЬрд╝, рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред - **dsh-fund-research contributors** тАФ рдЖрдзрд╛рд░рднреВрдд рдирд┐рд░реНрдорд╛рдг рдХреА рд╕рд╛рдореВрд╣рд┐рдХ рд▓реЗрдЦрдХ рдкрд╣рдЪрд╛рди (рдкреНрд▓рдЧрдЗрди рдЕрдиреБрдмрдВрдз, рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╕реНрдХреАрдорд╛, рдЯреВрд▓реНрд╕, рдЯреЗрд╕реНрдЯ, рдкреИрдХреЗрдЬрд┐рдВрдЧ)ред рдЕрднреА рдХреЛрдИ рдмрд╛рд╣рд░реА рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдирд╣реАрдВ тАФ 0 рд╕рд╛рдореБрджрд╛рдпрд┐рдХ PRs/issues рдорд░реНрдЬ рдХрд┐рдП рдЧрдПред рдпрд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП `.github/ISSUE_TEMPLATE/` рдХреЗ рдлрд╝реЙрд░реНрдо рд╕реЗ issue рдЦреЛрд▓реЗрдВ рдпрд╛ `main` рдкрд░ pull request рджреЗрдВред ## PerryLink DSH Plugin Family рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░рдХреНрд╖рд┐рдд [40 DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ](https://github.com/PerryLink) рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рднреА рдХрд░реЗрдВрдЧреЗ: | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | | | Plugin | One-liner | |---|---| | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | | | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | | | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | | | **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | | | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | | | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Unified session + workspace + config checkpoints with one-shot `/rewind` | | | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code, Codex, OpenCode and Hermes sessions, memories and skills into DSH | | | **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness тАФ Windows first. | | | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | | | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Deterministic dataset profiling, cleaning and citation verification | | | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | | | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | | | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | | | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics: load, spill, compaction and cache hit rate | | | **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issue/CI integration with every write approval-gated | | | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry and company research pack: chain map, policy timeline, company cards | | | **[dsh-kit](https://github.com/PerryLink/dsh-kit)** | One-command starter pack that installs the core family | | | **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base with hybrid search and citation-aware injection | | | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local Ollama model discovery and task-based routing with cloud fallback | | | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions, symbols and rename | | | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking at the model boundary with a host-side restore table | | | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | MCP management console: `/mcp` command, Settings tab and trial calls | | | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory protocol (`ctx.memory` + SQLite) | | | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse telemetry export from the session event stream | | | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Runtime-switchable model output styles | | | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Declarative allow/deny/ask rules plus a process-level network policy | | | **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | | | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | | | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-dev knowledge base, agent skill and the `dsh-plugin-dev` CLI toolchain | | | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | | | **[dsh-plugin-portal](https://github.com/PerryLink/dsh-plugin-portal)** | Zero-dependency static portal rendering the whole plugin family as one page | | | **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` тЖТ `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | | | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat, Telegram, Feishu + a session console | | | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research reports: evidence ledger, manifest seal, per-claim verdicts | | | **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional plugin quality scoring with an evidence-backed leaderboard | | | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions and workspaces in the Web sidebar with per-pin colors | | | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Git-backed cross-device session synchronization with keep-both merges | | | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack plus the `plugin_vet` supply-chain gate | | | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop: speech-to-text input and text-to-speech replies | | | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | | | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives with a pass/fail matrix | | | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel plus eleven agent tools | | | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair | | | **[dsh-wechat](https://github.com/pan17/dsh-wechat)** | WeChat тЖФ DSH bridge (Tencent iLink bot) developed with [pan17](https://github.com/pan17/dsh-wechat), who hosts the repo | | | **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Personal directive injector with a top-bar toggle (fork of liucai2026/dsh-personal-directive) | |