dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
A Claude Science–style research workbench for DeepSeek Harness — for genomics / pathogens / human health / bioinformatics projects.
One-liner: dsh-science — Claude Science-style research workbench for DSH: ReAct research-loop engine (research* tools), versioned artifacts with provenance (artifact* tools), and 10 science skills for genomics / pathogens / bioinformatics.
research_init / research_state / research_hypothesis / research_experiment / research_findings / research_phase / research_review / research_report, persisted in a research-manifest.json state machine (Question → Hypothesis → Experiment → Observe → Analyze → Conclude → Next Question).artifact_save / artifact_list / artifact_show / artifact_diff / artifact_verify / artifact_deprecate / artifact_reproduce: every result saved as artifacts/<name>/v<N>/ with per-file SHA-256, artifact.json provenance (command / inputs / environment / envFile) and an append-only provenance.md.Both engine plugins are zero-dependency (Node built-ins only, sharing engines/core.mjs) and register plain cordis tools. Installable either as a profile bundle (dsh plugin add) or as an agent preset (科学模式).
research-manifest.json / artifacts.json.ERR_NOT_INIT / ERR_NOT_FOUND / ERR_VALIDATION / ERR_PATH / ERR_QUOTA / ERR_LOCK_TIMEOUT / ERR_IO) instead of opaque strings.research_state merges the artifact index; artifact_save writes back to the manifest.artifact_diff / artifact_verify / artifact_deprecate, envFile + input hashes in provenance.research_report, artifact_diff, artifact_verify) and an audit log at <root>/.science.log.dsh plugin --profile web add dsh-science # after npm publish
# or straight from GitHub:
dsh plugin --profile web add "github:biociao/dsh-science"
Restart the profile (or refresh the Web GUI). The bundle inserts the two engines
into the profile layer stack; the research_* / artifact_* tools become
available to every agent on that profile.
git clone https://github.com/biociao/dsh-science ~/.dsh/.agent-presets/science
# or from a local checkout:
bash scripts/install.sh # copy (or: bash scripts/install.sh link)
Then create a session in the DSH Web GUI and pick the 科学模式 preset — the preset carries the research persona + engines with per-agent scoping.
The 10 skills are discovered automatically from a project's .dsh/skills/
(drop this repo's skills/ into your project), or install them machine-wide:
bash scripts/install-skills.sh # -> ~/.dsh/skills (respects $DSH_HOME)
research_init — create research-manifest.json + the project skeleton
(experiments/ literature/ artifacts/ analyses/ figures/ manuscript/ reviews/ data/ envs/).research_state at the start of every session; the loop state persists
across sessions.research_hypothesis (H1/H2/…) → research_experiment (E01/…,
creates experiments/<id>/{design.md,log.md,code/,results/}) → run code →
research_findings (appends to log.md, updates hypothesis status, advances
the loop) → artifact_save for anything worth citing or reproducing.scientific-reviewer skill), archive with
research_review (writes reviews/R0n/report.md).dsh-science/
├── package.json # dsh.bundle.patch -> ./cordis.patch.yml (+ exports)
├── cordis.patch.yml # bundle patch: inserts the two engines by subpath export
├── engines/ # canonical engine sources (bundle form)
│ ├── core.mjs # shared core: locks, atomic writes, error codes, streaming sha256, structured tools, audit
│ ├── research-loop.mjs
│ └── artifact-registry.mjs
├── preset/ # agent-preset form (mirrors engines/ via sync-engines.sh)
│ ├── agent.cordis.yml # references ./engines/*.mjs (relative, preset mount)
│ ├── preset.yml
│ └── engines/ # mirror — keep in sync: bash scripts/sync-engines.sh
├── skills/ # 10 SKILL.md skills
├── scripts/
│ ├── install.sh # install preset -> ~/.dsh/.agent-presets/science
│ ├── install-skills.sh # install skills -> ~/.dsh/skills
│ ├── sync-engines.sh # mirror engines/ -> preset/engines/
│ ├── init-project.sh # project skeleton without a science session
│ ├── smoke-test.mjs # 62 checks against a temp workspace (node >= 18)
│ └── stability-test.mjs# 25 concurrency/atomicity/stress checks (locks, lost-update, soak, migration)
└── test/verify-bundle.sh # isolated end-to-end bundle install + boot check
node scripts/smoke-test.mjs # engine logic + end-to-end loop + error codes + migration
node scripts/stability-test.mjs # concurrency / atomicity / lock / stress stability checks
bash test/verify-bundle.sh # pnpm pack -> isolated profile -> install -> boot check
All are part of the release checklist and are safe to run in CI (both test scripts
write only to a temp workspace; the bundle test uses an isolated $DSH_HOME).
Why subpath exports and not relative paths in the bundle?
dsh plugin add installs the package into the profile and its cordis.patch.yml
rows join the profile composition. The profile loader resolves a row name
relative to the profile directory (not the package), so ./engines/x.mjs
fails with ERR_MODULE_NOT_FOUND. Referencing dsh-science/engines/x.mjs
(subpath export, exports in package.json) resolves from the profile's
node_modules and works — verified experimentally on dsh 0.1.0-rc.6.
The agent-preset mount, by contrast, resolves relative names from the preset
directory, which is why preset/agent.cordis.yml can use ./engines/*.mjs.
Bundle or preset — which should I use?
cordis.patch.yml is commented out because a profile-wide
persona would apply to all agents — uncomment it before publishing if that is
what you want.Where do the skills come from?
A project's .dsh/skills/ is auto-discovered; scripts/install-skills.sh puts
them machine-wide in ~/.dsh/skills (respecting $DSH_HOME).
Branching model & release workflow (main = release, dev = integration, feat/* = features,
tag-triggered npm publish + GitHub Release via Actions): see
docs/branching.md.
bash scripts/sync-engines.sh # after editing engines/*.mjs — keeps preset/engines in sync
node scripts/smoke-test.mjs # logic + static package checks
node scripts/stability-test.mjs # concurrency / atomicity / lock stability checks
bash test/verify-bundle.sh # end-to-end bundle install + boot
MIT — see LICENSE.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。