WeKnora
Tencent
Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:PerryLink/dsh-fund-research
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-fund-research (counts toward the deepseek1024.com install ranking).
Deterministic research reports for Chinese public mutual funds, on DeepSeek Harness.
Every key number in every report traces back to a hashed source snapshot — gaps declared, never invented. Research only; not investment advice.
📖 Ecosystem knowledge base — measured data, not marketing: plugin development guide · plugin-selection data · maintenance criteria.
这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.
| Component | Version |
|---|---|
| DeepSeek Harness | dsh-v0.2.1-alpha.1 (peer range admits the alpha.2 line: >=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). On this line Session.append's third parameter is a SurfaceIntent for surface-eligible types only, so the fund-research/* audit events stay unappended (the tool results and sealed snapshot/report remain the audit trail). Verified 2026-09-24 (dual typecheck rulers + 176 tests). |
| Node.js | ^22.19.0 \|\| >=24.0.0 |
| Package manager | pnpm@11.7.0 |
| Platform | Windows / macOS / Linux (host-only plugin) |
| Data sources | Tiantian Fund / Eastmoney public endpoints (no key, no login) |
fund_research tool — one fund code in, a versioned Markdown research report out: overview, performance decomposition, holdings penetration, simplified style attribution, manager profile, risk & gap declarations, disclaimer, and a number-traceability appendix mapping every key figure to its snapshot JSON path and verification verdict. Sealed to fund-reports/{code}/{YYYYMMDD-HHmmss}/ as report.md + manifest.json + snapshot.json. background: true runs it as a fund-report background job.fund_snapshot tool — a light snapshot card (latest NAV, published stage returns, scale, manager, top-3 holdings) sealed into the fund's day directory.snapshot.json through the optional dsh-data-quality service when it is installed, or through the built-in isomorphic fallback checker (builtin-fallback) otherwise. The appendix table records value ↔ path ↔ verdict.offline: true (config or tool argument) serves everything from the storage-domain snapshot layer or the newest on-disk version snapshot, with zero outbound requests. Ideal for tests and reproduction.asOfDate (ISO YYYY-MM-DD) truncates the NAV series to data on or before that date and stamps the snapshot + report with the cutoff; invalid or future dates fail loudly.<reportRoot>/.run-state.json records each pipeline stage (snapshot/report) with timestamps and an input fingerprint; resume: true continues from the first incomplete stage, reusing sealed artifacts, and rejects a fingerprint mismatch.sources-discovery.json (endpoint roster, primary/fallback resolution, per-source coverage and gaps, degradation reasons) and folds it into the report appendix as 数据源与缺口声明.codes accepts an array of fund codes; each fund runs the pipeline independently with per-fund failure isolation (failures become summary gaps), and the result is a summary card (code / asOf / seal hash / verdicts / failure reason).<reportRoot>/.tracking.jsonl; includeComparison: true renders a deterministic 与上次对比 section (NAV range / scale / top holdings) with a gap declaration when no prior record exists.fund-review job reviews the sealed artifacts (gap-declaration completeness, traceability-table consistency, disclaimer) and writes review-note.md; it skips gracefully (recorded in run-state) when no jobs service is present.requested/succeeded/fieldsPresent/parseWarnings/degraded), rendered in the appendix and surfaced in tool values so downstream can downweight (never hard-filter) a low-quality source.includeWalkForward: true adds a 样本外稳定性摘要 section: deterministic rolling-window return/Sharpe sign persistence and mean/std, explicitly labelled as statistical description only, not a prediction.fund-research/snapshot and fund-research/report log-only events carry the code, version directory, manifest hash, and gap list (model-visible ⟺ logged) when the host admits out-of-repo event types; on 0.1.2-alpha.1–0.1.5-alpha.1 hosts the known-type catalog is build-generated in-repo, so the gate appends nothing and the tool results plus sealed artifacts are the audit trail.fund-research skill teaches the model the metric口径 (definitions), gap handling, and compliance wording. Computation stays in code.> 用 fund_research 出一份 161725 的研究报告
The agent calls fund_research({ code: "161725" }); a minute later the workspace holds:
fund-reports/161725/20260819-153012/
├── snapshot.json # raw extracted data + computed metrics + per-source sha256
├── sources-discovery.json # code-generated endpoint roster + coverage + gaps
├── report.md # the research report with the traceability appendix
└── manifest.json # snapshot/report hashes, parameters, verify engine, gaps
.run-state.json sits at the report root and records the pipeline stages for resume: true. Every number in report.md's appendix carries a verified / mismatch / not-found / unverifiable verdict against snapshot.json — recompute any of them from raw.* with the documented口径 to audit the plugin itself.
dsh plugin --profile web add dsh-fund-research # install (npm or tarball)
dsh plugin --profile web remove dsh-fund-research # uninstall
Restart the profile after installing (bundle activation is restart-based). The shipped profiles compose the storage stack through dsh-base (dsh-storage + dsh-storage-json + dsh-storage-domain); the bundle patch mounts only the plugin row.
All keys are optional (defaults shown); invalid values fail loudly at load.
| Key | Default | Description |
|---|---|---|
enabled |
true |
Master switch; false mounts nothing at all. |
eastmoneyBaseUrl |
https://fund.eastmoney.com |
Tiantian Fund pingzhongdata host. |
f10BaseUrl |
https://fundf10.eastmoney.com |
Tiantian Fund F10 host (holdings + manager pages). |
quoteBaseUrl |
https://push2.eastmoney.com |
Eastmoney quote host for per-stock valuation snapshots. |
quoteFallbackBaseUrl |
https://push2delay.eastmoney.com |
Fallback quote host tried per stock when the primary fails (Eastmoney's own delayed-quote host); '' disables it. |
requestIntervalMs |
1000 |
Minimum gap between outbound requests (polite collection). |
timeoutMs |
15000 |
Per-request timeout. |
retries |
2 |
Retries per request with exponential backoff. |
cacheTtlHours |
12 |
Storage-domain snapshot reuse window. |
riskFreeRate |
0.02 |
Annual risk-free rate for the Sharpe ratio. |
offline |
false |
Never send requests; read the snapshot layer only. |
reportRoot |
fund-reports |
Workspace-relative (or absolute) report tree root. |
styleQuotes |
true |
Fetch per-stock valuation quotes for style attribution. |
fund_research| Argument | Type | Description |
|---|---|---|
code |
string | Six-digit fund code, e.g. "161725" (single fund). Mutually exclusive with codes. |
codes |
string[] | Multiple six-digit fund codes: a fan-out with per-fund failure isolation (returns a summary). Mutually exclusive with code. |
sections |
string[] | Section ids to render (overview/performance/holdings/style/manager/benchmark/risk/disclaimer). Default: all. |
offline |
boolean | Read the snapshot layer only (no network). Default: plugin config. |
asOfDate |
string | ISO 8601 date (YYYY-MM-DD) cutoff: only data on or before it is used (NAV series truncated). Empty = no cutoff; future dates fail loudly. |
resume |
boolean | Resume the recorded .run-state.json run from the first incomplete stage (reuses sealed artifacts); rejects a fingerprint mismatch. Default: false. |
includeComparison |
boolean | Render a deterministic 与上次对比 section against the previous .tracking.jsonl record; missing evidence is declared as a gap. Default: false. |
includeWalkForward |
boolean | Render a deterministic 样本外稳定性摘要 (walk-forward) section: rolling-window return/Sharpe sign persistence and mean/std. Statistical description only, not a prediction. Default: false. |
background |
boolean | Run as a fund-report background job; returns { kind: "background", jobId }. Default: false. |
fund_snapshot| Argument | Type | Description |
|---|---|---|
code (required) |
string | Six-digit fund code. |
offline |
boolean | Read the snapshot layer only. Default: plugin config. |
asOfDate |
string | ISO 8601 date (YYYY-MM-DD) cutoff: only data on or before it is used. Empty = no cutoff; future dates fail loudly. |
概览 overview · 业绩拆解 performance decomposition · 持仓穿透 holdings penetration · 风格归因 style attribution (simplified) · 经理画像 manager profile · 同类/指数基准对比 benchmark & peer comparison · 风险与缺口声明 risk & gaps · 免责声明 disclaimer · 附录:数字回溯表 traceability appendix.
fund.eastmoney.com/pingzhongdata/*.js, fundf10.eastmoney.com F10 pages, push2.eastmoney.com quotes) with a browser User-Agent and configurable polite pacing. No key, no login, no paid API, no anti-crawler circumvention.dsh_fund_research storage domain (latest snapshot per fund).src/events.ts: they append only when the host admits an out-of-repo type — its known-type set covers the vocabulary, or its Session.append takes an ignorable envelope. From 0.1.2-alpha.1 on (including 0.1.5-alpha.1) neither holds: KNOWN_SESSION_EVENT_TYPES is a build-generated in-repo catalog that excludes out-of-repo events by construction, and Session.append has no ignorable option, so the gate appends nothing — the tool results and sealed artifacts remain the reconstructable audit trail, and a failed append never changes a tool outcome.Session.append still cannot stamp an ignorable envelope, so audit-gate behavior is unchanged.dsh-data-quality service degrades to the built-in checker, and the engine used is recorded in the manifest and the appendix.var Data_* shape or an F10 table layout, the affected source throws a SourceParseError naming the field, and the section degrades to a declared gap (the core pingzhongdata block failing aborts the run loudly). This is deliberate — a silent misparse is worse than a declared gap.fundgz.1234567.com.cn realtime endpoint is dead and deliberately unused).pnpm install
pnpm run typecheck && pnpm run typecheck:ci && pnpm run typecheck:checkout # types, incl. CI-strict
pnpm test # 176 tests over real harness seams
pnpm run test:e2e # opt-in LIVE-network E2E (LIVE_E2E=1)
pnpm run build && pnpm run verify:artifacts # tsdown + tsc declarations
pnpm run verify:self-contained # no out-of-repo dependency specs
node scripts/check-readme-sync.mjs # five-language README gate
node scripts/check-endpoints.mjs # M3 endpoint-liveness probe (4 eastmoney hosts)
pnpm pack # tarball
Tests run the REAL Context/SessionStore/ToolRuntime/LocalJobRegistry/storage seam from the 0.1.7-rc.2 peers; the network is replaced only at the fetch boundary by saved real-response fixtures (fixtures/, fund 161725). Refresh fixtures with the collector scripts in .tmp/.
dsh · dsh-plugin · deepseek-harness · cordis · fund-research · mutual-fund · investment-research · finance · research-report
No external contributors yet — 0 community PRs/issues merged. Open an issue via the forms in .github/ISSUE_TEMPLATE/ or a pull request against main to be listed here.
This project is one of the 44 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family |
| dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-plugin-certification | Community certification registry with repro-checkable grades and badges |
| dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins |
| dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-team-rooms | Cross-session team rooms: shared message bus, task board and timeline |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: fund-research、investment-research、research-report、workflow-automation。