last30days-skill-cn
Jesseovo
last30days-cn 是一个 AI Agent 技能(Skill),能够自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分析后生成有据可查的研究报告。
PerryLink/dsh-research-report
Verifiable research-report engine for DeepSeek Harness: content-addressed evidence ledger (claim-snapshot binding, tamper-evident) plus versioned sealed reports with per-claim verification verdicts and a manifest-sealed directory.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:PerryLink/dsh-research-report
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
A verifiable research-report engine for DeepSeek Harness.
Every claim is bound to immutable evidence snapshots, verified byte-for-byte, and sealed into a versioned report whose manifest hash anyone can recompute.
0.1.0-rc.6 (peers pinned to 0.1.0-rc.6).^22.19.0 || >=24.0.0, ESM only ("type": "module").@deepseek-ai/cordis ^4.0.1, @deepseek-ai/schemastery ^3.18.0, and @deepseek-ai/dsh-session, @deepseek-ai/dsh-tools, @deepseek-ai/dsh-system-prompt, @deepseek-ai/dsh-web, @deepseek-ai/dsh-jobs at 0.1.0-rc.6.ctx.web providers for URL capture/gather, ctx.jobs for background assembly, ctx.dataQuality (dsh-data-quality) for dataset citation cross-checks.<ledgerRoot>/objects/<sha256> + JSONL journals). The same content is stored exactly once; snapshots are immutable; every read recomputes the hash, so tampering or deletion is detected instead of trusted.unverified; a label whose snapshot value differs (the claimed value absent) marks it contradicted. No semantics, no embeddings — auditable byte checks.dsh-data-quality is mounted, citations are cross-checked with tolerances through its frozen verifyCitations contract.<reportRoot>/<slug(topic)>/<YYYYMMDD-HHmmss>/report.md + manifest.json; the seal hash is the SHA-256 of the manifest, which itself carries the report hash and every evidence hash.[未核实] / [与证据矛盾] marker in the report body and are listed in Appendix A. Nothing is silently passed.ctx.web for search/fetch, ctx.jobs for long runs. Planning and synthesis stay with the model (or an upstream plugin).# From a scratch profile (pins the commit; runs the self-contained `prepare` build)
dsh plugin --profile demo add "github:YOUR_ORG/dsh-research-report#<sha>"
# The profile's pnpm-workspace.yaml gains an allowBuilds entry for dsh-research-report on first add.
dsh plugin --profile demo add dsh-research-report
Both channels install the bundle row (see cordis.patch.yml) into the profile's dsh.profile.bundles stack and take effect on restart.
Then, in a session:
evidence_add({ origin: "docs/market.md", title: "Market snapshot" }) # → ev-1a2b3c4d5e6f
research_report({ topic: "示例行业概览", sections: [...], claims: [...], evidenceRefs: ["ev-1a2b…"] })
ledger_query({ claimId: "c1" }) # bindings + verdict
dsh plugin --profile demo add dsh-research-report # install
dsh plugin --profile demo remove dsh-research-report # uninstall
Verify the row mounts: dsh --profile demo --dump-config | grep dsh-research-report.
All tunables are Schemastery Config fields; invalid values fail the profile load loudly. Relative roots resolve against the harness working directory (the workspace).
| Key | Default | Description |
|---|---|---|
enabled |
true |
Master switch; false mounts nothing. |
ledgerRoot |
.research-ledger |
Evidence-ledger directory (objects + JSONL journals). |
reportRoot |
research-reports |
Sealed-report root (versioned per topic and timestamp). |
maxEvidenceBytes |
2097152 |
Hard cap on one evidence snapshot's UTF-8 bytes. |
maxEvidencePerReport |
200 |
Hard cap on evidence items bound into one report. |
fetchTimeoutMs |
20000 |
Deadline (ms) for one ctx.web fetch during capture. |
evidence_add({ origin, content?, title? }) — register one evidence snapshot. With content the text is stored verbatim; without it a URL origin is fetched through ctx.web and a workspace-relative path is read from disk (reads never escape the workspace). Returns the evidence id and SHA-256 hash.research_report({ topic, title?, sections, claims, evidenceRefs, gather?, depth?, background? }) — assemble and seal a report: validate (unregistered claim references are rejected loudly), verify every claim, render report.md with visible markers, write manifest.json, and return the seal hash. gather: true runs ONE search round over ctx.web and returns captured candidate evidence plus an explicit gap list — it never auto-assembles. background: true returns { kind: 'background', jobId } over ctx.jobs.ledger_query({ claimId? | evidenceId? }) — read-only binding/verdict queries; evidence is re-hashed on read so a tampered or missing snapshot is reported explicitly. With no id, returns a ledger summary.ctx.researchReport.assemble(request) — the frozen service surface for sibling plugins (see src/service.ts; gated byte-for-byte by scripts/verify-frozen-contract.mjs).dsh-research-report consumes only public seams: ctx.tools, ctx.systemPrompt, and optionally ctx.web / ctx.jobs / ctx.dataQuality (looked up at call time, never injected). It writes only inside the configured ledger and report roots (both default to workspace-local directories), reads workspace files only inside the workspace, and reaches the network exclusively through the harness web seam — never a direct fetch. Evidence snapshots are immutable and content-addressed; claim registrations are immutable; verdicts are append-only.
contradicted and ledger_query reports integrity: tampered/missing.path.resolved before comparison).ctx.web (provider selection, error taxonomy, and any SSRF policy stay with the deployment's web providers).ctx.effect() / register(), so uninstall and hot reload are clean.unverified, and a true claim whose number is absent while its label appears with a different value reads contradicted. This is a deliberate v1 choice (auditable beats clever).research-report/evidence, research-report/verify, and research-report/seal session events, but rc.6's Session.append has no ignorable marker and no plugin event-registration surface, so appends activate only when the host build knows the types (otherwise the persistence layer would refuse the log on restore). The ledger journals are always the durable source of truth.dsh-base mounts search only, so URL capture fails loud (WEB_UNAVAILABLE/WEB_PROVIDER_UNAVAILABLE) until a fetch provider is configured; search-based gather lists uncaptured sources in the gap list.pnpm install
pnpm run typecheck && pnpm run typecheck:ci
pnpm test
pnpm run build
pnpm run verify:self-contained && pnpm run verify:artifacts
node scripts/check-readme-sync.mjs
node scripts/verify-frozen-contract.mjs
pnpm pack
typecheck resolves @deepseek-ai/* through the installed 0.1.0-rc.6 peers; typecheck:ci clears skipLibCheck and enables verbatimModuleSyntax against the published types. Both must stay green.Context/Session/ToolRuntime/LocalJobRegistry/WebRuntime from the 0.1.0-rc.6 peers; only network backends are scripted providers registered through the real ctx.web registries.node scripts/release.mjs <x.y.z> (bumps, stamps CHANGELOG, re-runs the gate, commits + tags; never pushes).dsh, dsh-plugin, deepseek-harness, cordis, research, evidence-ledger, verifiable-report, audit, citation-verification
dsh-research-report contributors.
This project is one of the DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
Apache-2.0 — see LICENSE.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: audit、research。