@researai/deepscientist 1.5.9 → 1.5.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -94
- package/assets/branding/connector-qq.png +0 -0
- package/assets/branding/connector-rokid.png +0 -0
- package/assets/branding/connector-weixin.png +0 -0
- package/assets/branding/projects.png +0 -0
- package/bin/ds.js +168 -9
- package/docs/assets/branding/projects.png +0 -0
- package/docs/en/00_QUICK_START.md +308 -70
- package/docs/en/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/en/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
- package/docs/en/09_DOCTOR.md +41 -5
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
- package/docs/en/11_LICENSE_AND_RISK.md +256 -0
- package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +427 -0
- package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/en/README.md +79 -0
- package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
- package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
- package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
- package/docs/images/weixin/weixin-settings-bind.svg +57 -0
- package/docs/zh/00_QUICK_START.md +315 -74
- package/docs/zh/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/zh/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
- package/docs/zh/09_DOCTOR.md +41 -5
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
- package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
- package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +423 -0
- package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/zh/README.md +126 -0
- package/install.sh +0 -34
- package/package.json +2 -2
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/annotations.py +343 -0
- package/src/deepscientist/artifact/arxiv.py +484 -37
- package/src/deepscientist/artifact/service.py +574 -108
- package/src/deepscientist/arxiv_library.py +275 -0
- package/src/deepscientist/bash_exec/service.py +9 -0
- package/src/deepscientist/bridges/builtins.py +2 -0
- package/src/deepscientist/bridges/connectors.py +447 -0
- package/src/deepscientist/channels/__init__.py +2 -0
- package/src/deepscientist/channels/builtins.py +3 -1
- package/src/deepscientist/channels/qq.py +1 -1
- package/src/deepscientist/channels/qq_gateway.py +1 -1
- package/src/deepscientist/channels/relay.py +7 -1
- package/src/deepscientist/channels/weixin.py +59 -0
- package/src/deepscientist/channels/weixin_ilink.py +317 -0
- package/src/deepscientist/config/models.py +22 -2
- package/src/deepscientist/config/service.py +431 -60
- package/src/deepscientist/connector/__init__.py +4 -0
- package/src/deepscientist/connector/connector_profiles.py +481 -0
- package/src/deepscientist/connector/lingzhu_support.py +668 -0
- package/src/deepscientist/connector/qq_profiles.py +206 -0
- package/src/deepscientist/connector/weixin_support.py +663 -0
- package/src/deepscientist/connector_profiles.py +1 -374
- package/src/deepscientist/connector_runtime.py +2 -0
- package/src/deepscientist/daemon/api/handlers.py +165 -5
- package/src/deepscientist/daemon/api/router.py +13 -1
- package/src/deepscientist/daemon/app.py +1130 -61
- package/src/deepscientist/doctor.py +5 -2
- package/src/deepscientist/gitops/diff.py +120 -29
- package/src/deepscientist/lingzhu_support.py +1 -182
- package/src/deepscientist/mcp/server.py +11 -4
- package/src/deepscientist/prompts/builder.py +15 -0
- package/src/deepscientist/qq_profiles.py +1 -196
- package/src/deepscientist/quest/node_traces.py +23 -0
- package/src/deepscientist/quest/service.py +112 -43
- package/src/deepscientist/quest/stage_views.py +71 -5
- package/src/deepscientist/runners/codex.py +55 -3
- package/src/deepscientist/weixin_support.py +1 -0
- package/src/prompts/connectors/lingzhu.md +3 -1
- package/src/prompts/connectors/weixin.md +230 -0
- package/src/prompts/system.md +2 -0
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-D0mTXG4-.js} +156 -48
- package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-Db0cTXxm.js} +1 -1
- package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-DrV8je02.js} +164 -9
- package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-QXMSCH71.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-7hhtWj_E.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-BWMSnRJe.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-7J9h9Vy_.js} +20 -21
- package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-CHJl_0lr.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-1qSow1es.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-eQpPPCEp.js} +2 -1
- package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BwRfi89Z.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-836PVQWV.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-C2y_556i.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BRzJbGsn.js} +12 -12
- package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-DIX7Mlzu.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-DzRaTAlq.js} +14 -7
- package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DZUfIUnp.js} +73 -6
- package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-BwtICzue.js} +103 -34
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
- package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DHeIAMsx.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C3tCmFox.js} +5 -4
- package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-CQsKVm3t.js} +10 -10
- package/src/ui/dist/assets/bot-BEA2vWuK.js +21 -0
- package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
- package/src/ui/dist/assets/{code-BWAY76JP.js → code-XfbSR8K2.js} +1 -1
- package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-BjxNaIfy.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-D_lLVQk0.js} +1 -1
- package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-D9x_5vlY.js} +1 -1
- package/src/ui/dist/assets/{image-D-NZM-6P.js → image-BhWT33W1.js} +1 -1
- package/src/ui/dist/assets/{index-DHZJ_0TI.js → index--c4iXtuy.js} +12 -12
- package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-BDxipwrC.js} +2 -2
- package/src/ui/dist/assets/{index-7Chr1g9c.js → index-DZTZ8mWP.js} +14221 -9523
- package/src/ui/dist/assets/{index-DGIYDuTv.css → index-Dqj-Mjb4.css} +2 -13
- package/src/ui/dist/assets/index-PJbSbPTy.js +25 -0
- package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-K8izTGgo.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DfBors6y.js} +16 -1
- package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-yFK1J4fL.js} +1 -1
- package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-PENr2zcz.js} +1 -74
- package/src/ui/dist/assets/select-CAbJDfYv.js +1690 -0
- package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-DEuYJqTl.js} +1 -1
- package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-omoSUmcd.js} +2 -13
- package/src/ui/dist/assets/{trash-BvTgE5__.js → trash--F119N47.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-D31UR23I.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-BH6KcMzq.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-CZ613PM5.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-BgDLAv3z.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
- package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
- package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
- package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
- package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
- package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
- package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
- package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
- package/src/ui/dist/assets/tooltip-C_mA6R0w.js +0 -108
package/README.md
CHANGED
|
@@ -5,129 +5,113 @@
|
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
|
|
9
|
-
one quest per Git repository, and shared web plus TUI surfaces.
|
|
8
|
+
<strong>DeepScientist is not just a long-running autonomous scientific discovery system. It is also a persistent research map that lives on your own machine.</strong>
|
|
10
9
|
</p>
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install -g @researai/deepscientist
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
For the best experience, we recommend using GPT-5.4 in `xhigh` mode (for example, via the $20 GPT Plus plan or the $200 GPT Pro plan); if you are in China, we recommend the MiniMax-M2.7 Token Plan (Max plan): https://platform.minimaxi.com/subscribe/token-plan
|
|
21
|
-
|
|
22
|
-
## Start
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
ds
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
DeepScientist starts the local web workspace at `http://127.0.0.1:20999` by default.
|
|
29
|
-
|
|
30
|
-
By default, DeepScientist keeps Codex on the standard profile: `approval_policy=on-request` and `sandbox_mode=workspace-write`. Use `--yolo` only when you want explicit full-access execution.
|
|
31
|
-
|
|
32
|
-
Recommended command when you want the current directory as the home and Codex full-access execution:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
ds --yolo --port 20999 --here
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Parameter meanings:
|
|
39
|
-
|
|
40
|
-
- `--yolo`: run Codex in YOLO mode, which sets `approval_policy=never` and `sandbox_mode=danger-full-access`
|
|
41
|
-
- `--port 20999`: bind the local web workspace to port `20999`
|
|
42
|
-
- `--here`: create or use `./DeepScientist` under the current working directory as the DeepScientist home
|
|
43
|
-
|
|
44
|
-
On first start, `ds` will:
|
|
45
|
-
|
|
46
|
-
- bootstrap a local `uv` runtime manager automatically if your machine does not already have one
|
|
47
|
-
- use the bundled Codex CLI that ships with the npm package
|
|
48
|
-
- still require you to complete Codex login once if your account is not ready yet
|
|
49
|
-
|
|
50
|
-
If you want another port:
|
|
11
|
+
<p align="center">
|
|
12
|
+
Local-first. Open-source. Git-backed. Built for verifiable computational research.
|
|
13
|
+
</p>
|
|
51
14
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="docs/en/README.md">English</a> | <a href="docs/zh/README.md">中文</a>
|
|
17
|
+
</p>
|
|
55
18
|
|
|
56
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://openreview.net/forum?id=cZFgsLq8Gs"><img alt="ICLR 2026" src="https://img.shields.io/badge/ICLR-2026-blue?style=for-the-badge&logo=openreview"></a>
|
|
21
|
+
<a href="LICENSE"><img alt="License Apache-2.0" src="https://img.shields.io/badge/License-Apache%202.0-yellow.svg?style=for-the-badge"></a>
|
|
22
|
+
<a href="https://www.python.org/"><img alt="Python 3.11+" src="https://img.shields.io/badge/Python-3.11%2B-blue?style=for-the-badge&logo=python&logoColor=white"></a>
|
|
23
|
+
<a href="https://www.npmjs.com/package/@researai/deepscientist"><img alt="npm @researai/deepscientist" src="https://img.shields.io/badge/npm-%40researai%2Fdeepscientist-CB3837?style=for-the-badge&logo=npm&logoColor=white"></a>
|
|
24
|
+
<a href="https://deepscientist.cc/"><img alt="Website deepscientist.cc" src="https://img.shields.io/badge/Website-deepscientist.cc-brightgreen?style=for-the-badge&logo=googlechrome&logoColor=white"></a>
|
|
25
|
+
</p>
|
|
57
26
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
<p align="center">
|
|
28
|
+
<a href="docs/en/00_QUICK_START.md">Quick Start</a> •
|
|
29
|
+
<a href="docs/en/02_START_RESEARCH_GUIDE.md">Start Research Guide</a> •
|
|
30
|
+
<a href="docs/en/10_WEIXIN_CONNECTOR_GUIDE.md"><img src="assets/branding/connector-weixin.png" alt="Weixin" width="14" height="14" /> Weixin</a> •
|
|
31
|
+
<a href="docs/en/03_QQ_CONNECTOR_GUIDE.md"><img src="assets/branding/connector-qq.png" alt="QQ" width="14" height="14" /> QQ</a> •
|
|
32
|
+
<a href="docs/en/04_LINGZHU_CONNECTOR_GUIDE.md"><img src="assets/branding/connector-rokid.png" alt="Rokid" width="14" height="14" /> Rokid</a> •
|
|
33
|
+
<a href="https://openreview.net/forum?id=cZFgsLq8Gs">Paper</a>
|
|
34
|
+
</p>
|
|
61
35
|
|
|
62
|
-
|
|
36
|
+
## About
|
|
63
37
|
|
|
64
|
-
|
|
65
|
-
ds --host 0.0.0.0 --port 21000
|
|
66
|
-
```
|
|
38
|
+
DeepScientist is not just a long-running autonomous scientific discovery system. It is also a persistent research map that lives on your own machine.
|
|
67
39
|
|
|
68
|
-
|
|
40
|
+
- See every branch.
|
|
41
|
+
- Recover every lesson.
|
|
42
|
+
- Compound every round.
|
|
69
43
|
|
|
70
|
-
The
|
|
44
|
+
**A research workspace you can actually inspect.** The frontend rebuilds a live [Canvas](docs/en/06_RUNTIME_AND_CANVAS.md) from Git branches, artifacts, connector traffic, and raw quest events, so progress stays visible as a navigable map instead of collapsing into one long chat log.
|
|
71
45
|
|
|
72
|
-
-
|
|
73
|
-
- Windows: `%USERPROFILE%\\DeepScientist`
|
|
46
|
+
**Memory that survives failure.** Built-in [memory](docs/en/07_MEMORY_AND_MCP.md) turns paper notes, dead ends, route decisions, and recovered lessons into searchable project state that later rounds can pull back deliberately.
|
|
74
47
|
|
|
75
|
-
|
|
48
|
+
**A self-evolving loop with real state.** Failed branches, reusable baselines, promoted lessons, and new evidence all feed the next round, so DeepScientist compounds research progress instead of restarting from zero.
|
|
76
49
|
|
|
77
|
-
|
|
50
|
+
**A studio, not a sealed autopilot.** DeepScientist can drive a task end to end, but you can step in at any moment to redirect the plan, edit code, inspect files, or run the terminal yourself inside the same quest.
|
|
78
51
|
|
|
79
|
-
|
|
80
|
-
ds --here
|
|
81
|
-
```
|
|
52
|
+
DeepScientist is strong at:
|
|
82
53
|
|
|
83
|
-
|
|
54
|
+
- reproducing baselines and keeping them reusable
|
|
55
|
+
- reading papers, extracting concrete limitations, and generating hypotheses
|
|
56
|
+
- running experiment branches, analysis campaigns, figures, and paper drafts
|
|
57
|
+
- preserving both successful and failed results so the next round can start stronger
|
|
84
58
|
|
|
85
|
-
|
|
59
|
+
DeepScientist is flexible and easy to use with:
|
|
86
60
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
61
|
+
- local-first, open-source, one-command install
|
|
62
|
+
- Git-backed quest repositories, shared web workspace, Studio / Canvas, and TUI
|
|
63
|
+
- workshop-style collaboration: let DeepScientist drive, or pause anytime to inspect, edit, and run commands yourself
|
|
64
|
+
- Codex with `gpt-5.4` by default, plus external OpenAI-compatible inference endpoints
|
|
65
|
+
- use DeepScientist anywhere: server via TUI, browser via Web, phone via Weixin or QQ, and even glasses via Rokid Glasses
|
|
66
|
+
- one bound external connector per quest: [Weixin](docs/en/10_WEIXIN_CONNECTOR_GUIDE.md), [QQ](docs/en/03_QQ_CONNECTOR_GUIDE.md), Telegram, Discord, Slack, Feishu, WhatsApp, and [Lingzhu / Rokid](docs/en/04_LINGZHU_CONNECTOR_GUIDE.md)
|
|
67
|
+
- conference-to-journal extension workflows, and rebuttal workflows from paper, code, and reviewer comments
|
|
68
|
+
- one quest, one Git repository
|
|
69
|
+
- branches and worktrees as native research structure
|
|
70
|
+
- live Studio and Canvas from durable quest state
|
|
71
|
+
- reusable baselines, not one-off benchmark runs
|
|
72
|
+
- durable `bash_exec` sessions, not disposable terminal output
|
|
92
73
|
|
|
93
|
-
|
|
74
|
+
DeepScientist works best when the task is computational, verifiable, and worth tracking across multiple rounds.
|
|
94
75
|
|
|
95
|
-
|
|
96
|
-
bash install.sh --dir /data/DeepScientist
|
|
97
|
-
```
|
|
76
|
+
## News
|
|
98
77
|
|
|
99
|
-
|
|
78
|
+
- `2026/03/24`: DeepScientist officially releases `v1.5`.
|
|
79
|
+
- `2026/02/01`: the DeepScientist paper is available on [OpenReview](https://openreview.net/forum?id=cZFgsLq8Gs) for `ICLR 2026`.
|
|
100
80
|
|
|
101
|
-
|
|
102
|
-
ds migrate /data/DeepScientist
|
|
103
|
-
```
|
|
81
|
+
## Getting Started
|
|
104
82
|
|
|
105
|
-
|
|
83
|
+
- [Docs Index (English)](docs/en/README.md)
|
|
84
|
+
- [Quick Start (English)](docs/en/00_QUICK_START.md)
|
|
85
|
+
- [Guided Workflow Tour (English)](docs/en/12_GUIDED_WORKFLOW_TOUR.md)
|
|
86
|
+
- [Start Research Guide (English)](docs/en/02_START_RESEARCH_GUIDE.md)
|
|
87
|
+
- [Core Architecture Guide (English)](docs/en/13_CORE_ARCHITECTURE_GUIDE.md)
|
|
106
88
|
|
|
107
|
-
##
|
|
89
|
+
## Install
|
|
108
90
|
|
|
109
91
|
```bash
|
|
110
|
-
|
|
92
|
+
npm install -g @researai/deepscientist
|
|
93
|
+
codex --login
|
|
94
|
+
ds --yolo --here
|
|
111
95
|
```
|
|
112
96
|
|
|
113
|
-
`
|
|
97
|
+
If `codex --login` is unavailable, run `codex` once and finish authentication there. After startup, open `http://127.0.0.1:20999`.
|
|
114
98
|
|
|
115
|
-
|
|
99
|
+
For detailed install, troubleshooting, PDF compile, and other launch modes, use:
|
|
116
100
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
This installs a lightweight TinyTeX `pdflatex` runtime for local paper compilation.
|
|
101
|
+
- [Quick Start](docs/en/00_QUICK_START.md)
|
|
102
|
+
- [Doctor](docs/en/09_DOCTOR.md)
|
|
122
103
|
|
|
123
|
-
##
|
|
104
|
+
## Documentation
|
|
124
105
|
|
|
125
|
-
- [
|
|
126
|
-
- [
|
|
106
|
+
- [Docs Index (English)](docs/en/README.md)
|
|
107
|
+
- [Guided Workflow Tour (English)](docs/en/12_GUIDED_WORKFLOW_TOUR.md)
|
|
108
|
+
- [Core Architecture Guide (English)](docs/en/13_CORE_ARCHITECTURE_GUIDE.md)
|
|
109
|
+
- [Prompt, Skills, and MCP Guide (English)](docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md)
|
|
110
|
+
- [Weixin Connector Guide (English)](docs/en/10_WEIXIN_CONNECTOR_GUIDE.md)
|
|
127
111
|
- [QQ Connector Guide (English)](docs/en/03_QQ_CONNECTOR_GUIDE.md)
|
|
128
|
-
- [
|
|
112
|
+
- [Lingzhu / Rokid Guide (English)](docs/en/04_LINGZHU_CONNECTOR_GUIDE.md)
|
|
129
113
|
- [Memory and MCP Guide (English)](docs/en/07_MEMORY_AND_MCP.md)
|
|
130
|
-
- [
|
|
114
|
+
- [Settings Reference (English)](docs/en/01_SETTINGS_REFERENCE.md)
|
|
131
115
|
|
|
132
116
|
## Maintainers
|
|
133
117
|
|
|
@@ -136,9 +120,7 @@ This installs a lightweight TinyTeX `pdflatex` runtime for local paper compilati
|
|
|
136
120
|
|
|
137
121
|
## Citation
|
|
138
122
|
|
|
139
|
-
This project is currently contributed by Yixuan Weng, Shichen Li, Weixu Zhao, Minjun Zhu. If you find our work valuable, please cite:
|
|
140
|
-
|
|
141
|
-
本项目当前由 Yixuan Weng、Shichen Li、Weixu Zhao、Minjun Zhu 共同贡献。如果你觉得我们的工作有价值,请引用:
|
|
123
|
+
This project is currently contributed by Yixuan Weng, Shichen Li, Weixu Zhao, Qiyao Sun, Zhen Lin, Minjun Zhu. If you find our work valuable, please cite:
|
|
142
124
|
|
|
143
125
|
```bibtex
|
|
144
126
|
@inproceedings{
|
|
@@ -151,6 +133,37 @@ url={https://openreview.net/forum?id=cZFgsLq8Gs}
|
|
|
151
133
|
}
|
|
152
134
|
```
|
|
153
135
|
|
|
136
|
+
## End-to-End Autonomous Research Systems
|
|
137
|
+
|
|
138
|
+
| System | System Type | E2E | Research Map | Workshop | Keeps Growing | Channels | Figure & Rebuttal & Review |
|
|
139
|
+
|---|---|---|---|---|---|---|---|
|
|
140
|
+
| [autoresearch](https://github.com/karpathy/autoresearch) | Open-source | | | ✓ | | | |
|
|
141
|
+
| [RD-Agent](https://github.com/microsoft/RD-Agent) | Open-source | | | | ✓ | | |
|
|
142
|
+
| [Agent Laboratory](https://github.com/SamuelSchmidgall/AgentLaboratory) | Open-source | ✓ | | ✓ | ✓ | | |
|
|
143
|
+
| [AI-Scientist](https://github.com/SakanaAI/AI-Scientist) | Open-source | ✓ | | | | | |
|
|
144
|
+
| [AI-Scientist-v2](https://github.com/SakanaAI/AI-Scientist-v2) | Open-source | ✓ | | | | | |
|
|
145
|
+
| [AutoResearchClaw](https://github.com/aiming-lab/AutoResearchClaw) | Open-source | ✓ | | | ✓ | ✓ | |
|
|
146
|
+
| [ClawPhD](https://github.com/ZhihaoAIRobotic/ClawPhD) | Open-source | | | ✓ | | ✓ | |
|
|
147
|
+
| [Dr. Claw](https://github.com/OpenLAIR/dr-claw) | Open-source | ✓ | | ✓ | | ✓ | |
|
|
148
|
+
| [FARS](https://analemma.ai/fars/) | Closed-source | ✓ | | | | | |
|
|
149
|
+
| [EvoScientist](https://github.com/EvoScientist/EvoScientist) | Open-source | ✓ | | ✓ | ✓ | ✓ | |
|
|
150
|
+
| [PaperClaw](https://github.com/meowscles69/PaperClaw) | Open-source | | | | | | ✓ |
|
|
151
|
+
| [ScienceClaw](https://github.com/beita6969/ScienceClaw) | Open-source | | | | ✓ | ✓ | |
|
|
152
|
+
| [claude-scholar](https://github.com/Galaxy-Dawn/claude-scholar) | Open-source | ✓ | | ✓ | ✓ | | |
|
|
153
|
+
| [Research-Claw](https://github.com/wentorai/Research-Claw) | Open-source | ✓ | | ✓ | ✓ | ✓ | |
|
|
154
|
+
| [DeepScientist](https://github.com/ResearAI/DeepScientist) | Open-source | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
155
|
+
|
|
156
|
+
## More From ResearAI
|
|
157
|
+
|
|
158
|
+
DeepReviewer and AutoFigure projects worth exploring alongside DeepScientist:
|
|
159
|
+
|
|
160
|
+
| Project | What it does |
|
|
161
|
+
|---|---|
|
|
162
|
+
| [AutoFigure](https://github.com/ResearAI/AutoFigure) | generate paper-ready figures |
|
|
163
|
+
| [AutoFigure-Edit](https://github.com/ResearAI/AutoFigure-Edit) | editable vector paper figures |
|
|
164
|
+
| [DeepReviewer-v2](https://github.com/ResearAI/DeepReviewer-v2) | review papers and drafts |
|
|
165
|
+
| [Awesome-AI-Scientist](https://github.com/ResearAI/Awesome-AI-Scientist) | curated AI scientist landscape |
|
|
166
|
+
|
|
154
167
|
## License
|
|
155
168
|
|
|
156
169
|
[Apache License 2.0](LICENSE)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/bin/ds.js
CHANGED
|
@@ -564,6 +564,12 @@ function colorize(code, text) {
|
|
|
564
564
|
return `${code}${text}\u001B[0m`;
|
|
565
565
|
}
|
|
566
566
|
|
|
567
|
+
const OFFICIAL_REPOSITORY_URL = 'https://github.com/ResearAI/DeepScientist';
|
|
568
|
+
|
|
569
|
+
function officialRepositoryLine() {
|
|
570
|
+
return `Official open-source repository: ${hyperlink(OFFICIAL_REPOSITORY_URL, OFFICIAL_REPOSITORY_URL)}`;
|
|
571
|
+
}
|
|
572
|
+
|
|
567
573
|
function renderBrandArtwork() {
|
|
568
574
|
const brandPath = path.join(repoRoot, 'assets', 'branding', 'deepscientist-mark.png');
|
|
569
575
|
const chafa = resolveExecutableOnPath('chafa');
|
|
@@ -668,7 +674,10 @@ function printLaunchCard({
|
|
|
668
674
|
const width = Math.max(72, Math.min(process.stdout.columns || 100, 108));
|
|
669
675
|
const divider = colorize('\u001B[38;5;245m', '─'.repeat(Math.max(36, width - 6)));
|
|
670
676
|
const title = colorize('\u001B[1;38;5;39m', 'ResearAI');
|
|
671
|
-
const
|
|
677
|
+
const subtitleLines = [
|
|
678
|
+
colorize('\u001B[38;5;110m', 'DeepScientist is not just a fully open-source autonomous scientific discovery system.'),
|
|
679
|
+
colorize('\u001B[38;5;110m', 'It is also a research map that keeps growing from every round.'),
|
|
680
|
+
];
|
|
672
681
|
const versionLine = colorize('\u001B[38;5;245m', `Version ${packageJson.version}`);
|
|
673
682
|
const urlLabel = colorize('\u001B[1;38;5;45m', hyperlink(url, url));
|
|
674
683
|
const workspaceMode =
|
|
@@ -711,7 +720,9 @@ function printLaunchCard({
|
|
|
711
720
|
for (const line of wordmark) {
|
|
712
721
|
console.log(centerText(colorize('\u001B[1;38;5;39m', line), width));
|
|
713
722
|
}
|
|
714
|
-
|
|
723
|
+
for (const line of subtitleLines) {
|
|
724
|
+
console.log(centerText(line, width));
|
|
725
|
+
}
|
|
715
726
|
console.log('');
|
|
716
727
|
console.log(centerText(divider, width));
|
|
717
728
|
console.log(centerText(colorize('\u001B[1m', workspaceMode), width));
|
|
@@ -721,6 +732,7 @@ function printLaunchCard({
|
|
|
721
732
|
console.log(centerText(nextStep, width));
|
|
722
733
|
console.log(centerText('Run ds --stop to stop the managed daemon.', width));
|
|
723
734
|
console.log(centerText('Need to move this installation later? Use ds migrate /new/path.', width));
|
|
735
|
+
console.log(centerText(officialRepositoryLine(), width));
|
|
724
736
|
console.log('');
|
|
725
737
|
renderLaunchHints({ home, url, bindUrl, pythonSelection, yolo });
|
|
726
738
|
}
|
|
@@ -802,8 +814,8 @@ function writeCodexPreflightReport(home, probe) {
|
|
|
802
814
|
<main class="page">
|
|
803
815
|
<section class="panel">
|
|
804
816
|
<h1>DeepScientist could not start Codex</h1>
|
|
805
|
-
<p class="meta">DeepScientist blocked startup because the Codex hello probe did not pass.
|
|
806
|
-
<p class="meta">DeepScientist 启动前进行了 Codex 可用性检查,但 hello
|
|
817
|
+
<p class="meta">DeepScientist blocked startup because the Codex hello probe did not pass. In most installs, <code>npm install -g @researai/deepscientist</code> also installs the bundled Codex dependency. If <code>codex</code> is still missing, repair it with <code>npm install -g @openai/codex</code>. Then run <code>codex --login</code> (or <code>codex</code>), finish authentication, run <code>ds doctor</code>, and launch <code>ds</code> again.</p>
|
|
818
|
+
<p class="meta">DeepScientist 启动前进行了 Codex 可用性检查,但 hello 探测没有通过。正常情况下,<code>npm install -g @researai/deepscientist</code> 也会一并安装 bundled Codex 依赖;如果此后 <code>codex</code> 仍不可用,请再执行 <code>npm install -g @openai/codex</code> 修复。然后运行 <code>codex --login</code>(或 <code>codex</code>)完成认证,再执行 <code>ds doctor</code>,最后重新启动 <code>ds</code>。</p>
|
|
807
819
|
|
|
808
820
|
<h2>Summary</h2>
|
|
809
821
|
<p>${escapeHtml(probe?.summary || 'Codex startup probe failed.')}</p>
|
|
@@ -1002,6 +1014,8 @@ Flags:
|
|
|
1002
1014
|
--force-check Ignore the cached version probe
|
|
1003
1015
|
--remind-later Defer prompts for the current published version
|
|
1004
1016
|
--skip-version Skip reminders for the current published version
|
|
1017
|
+
|
|
1018
|
+
Without \`--yes\`, \`ds update\` will ask for a \`Y/N\` confirmation on interactive terminals.
|
|
1005
1019
|
`);
|
|
1006
1020
|
}
|
|
1007
1021
|
|
|
@@ -2769,6 +2783,33 @@ function printUpdateStatus(status, { compact = false } = {}) {
|
|
|
2769
2783
|
}
|
|
2770
2784
|
}
|
|
2771
2785
|
|
|
2786
|
+
function parseYesNoAnswer(answer, defaultValue = false) {
|
|
2787
|
+
const normalized = String(answer || '').trim().toLowerCase();
|
|
2788
|
+
if (!normalized) {
|
|
2789
|
+
return defaultValue;
|
|
2790
|
+
}
|
|
2791
|
+
if (normalized === 'y' || normalized === 'yes') {
|
|
2792
|
+
return true;
|
|
2793
|
+
}
|
|
2794
|
+
if (normalized === 'n' || normalized === 'no') {
|
|
2795
|
+
return false;
|
|
2796
|
+
}
|
|
2797
|
+
return defaultValue;
|
|
2798
|
+
}
|
|
2799
|
+
|
|
2800
|
+
async function promptYesNo(question, { defaultValue = false } = {}) {
|
|
2801
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
2802
|
+
return defaultValue;
|
|
2803
|
+
}
|
|
2804
|
+
return new Promise((resolve) => {
|
|
2805
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
2806
|
+
rl.question(question, (answer) => {
|
|
2807
|
+
rl.close();
|
|
2808
|
+
resolve(parseYesNoAnswer(answer, defaultValue));
|
|
2809
|
+
});
|
|
2810
|
+
});
|
|
2811
|
+
}
|
|
2812
|
+
|
|
2772
2813
|
function spawnDetachedNode(args, options = {}) {
|
|
2773
2814
|
const out = options.logPath ? fs.openSync(options.logPath, 'a') : 'ignore';
|
|
2774
2815
|
const child = spawn(process.execPath, args, {
|
|
@@ -2965,6 +3006,50 @@ async function performSelfUpdate(home, options = {}) {
|
|
|
2965
3006
|
};
|
|
2966
3007
|
}
|
|
2967
3008
|
|
|
3009
|
+
function normalizeLauncherRelaunchArgs(rawArgs, home) {
|
|
3010
|
+
const normalized = [];
|
|
3011
|
+
for (let index = 0; index < rawArgs.length; index += 1) {
|
|
3012
|
+
const arg = rawArgs[index];
|
|
3013
|
+
if (arg === '--home') {
|
|
3014
|
+
index += 1;
|
|
3015
|
+
continue;
|
|
3016
|
+
}
|
|
3017
|
+
if (arg === '--here' || arg === '--skip-update-check') {
|
|
3018
|
+
continue;
|
|
3019
|
+
}
|
|
3020
|
+
normalized.push(arg);
|
|
3021
|
+
}
|
|
3022
|
+
return ['--home', home, ...normalized, '--skip-update-check'];
|
|
3023
|
+
}
|
|
3024
|
+
|
|
3025
|
+
function relaunchLauncherAfterUpdate(rawArgs, home) {
|
|
3026
|
+
const launcherPath = resolveLauncherPath();
|
|
3027
|
+
if (!launcherPath) {
|
|
3028
|
+
return {
|
|
3029
|
+
ok: false,
|
|
3030
|
+
exitCode: 1,
|
|
3031
|
+
message: 'DeepScientist was updated, but the new launcher path could not be resolved for relaunch.',
|
|
3032
|
+
};
|
|
3033
|
+
}
|
|
3034
|
+
const result = spawnSync(process.execPath, [launcherPath, ...normalizeLauncherRelaunchArgs(rawArgs, home)], {
|
|
3035
|
+
cwd: repoRoot,
|
|
3036
|
+
stdio: 'inherit',
|
|
3037
|
+
env: process.env,
|
|
3038
|
+
});
|
|
3039
|
+
if (result.error) {
|
|
3040
|
+
return {
|
|
3041
|
+
ok: false,
|
|
3042
|
+
exitCode: 1,
|
|
3043
|
+
message: result.error.message,
|
|
3044
|
+
};
|
|
3045
|
+
}
|
|
3046
|
+
return {
|
|
3047
|
+
ok: true,
|
|
3048
|
+
exitCode: result.status ?? 0,
|
|
3049
|
+
message: null,
|
|
3050
|
+
};
|
|
3051
|
+
}
|
|
3052
|
+
|
|
2968
3053
|
async function maybeHandleStartupUpdate(home, rawArgs, options = {}) {
|
|
2969
3054
|
if (options.skipUpdateCheck || process.env.DS_SKIP_UPDATE_PROMPT === '1') {
|
|
2970
3055
|
return false;
|
|
@@ -2978,8 +3063,43 @@ async function maybeHandleStartupUpdate(home, rawArgs, options = {}) {
|
|
|
2978
3063
|
}
|
|
2979
3064
|
|
|
2980
3065
|
printUpdateStatus(status, { compact: true });
|
|
2981
|
-
|
|
2982
|
-
|
|
3066
|
+
if (!status.can_self_update || !process.stdin.isTTY || !process.stdout.isTTY) {
|
|
3067
|
+
markUpdateDeferred(home, status.latest_version);
|
|
3068
|
+
return false;
|
|
3069
|
+
}
|
|
3070
|
+
|
|
3071
|
+
const confirmed = await promptYesNo(`Install DeepScientist ${status.latest_version} now? [y/N]: `, {
|
|
3072
|
+
defaultValue: false,
|
|
3073
|
+
});
|
|
3074
|
+
if (!confirmed) {
|
|
3075
|
+
markUpdateDeferred(home, status.latest_version);
|
|
3076
|
+
console.log(`DeepScientist will remind you later about ${status.latest_version || 'the next release'}.`);
|
|
3077
|
+
return false;
|
|
3078
|
+
}
|
|
3079
|
+
|
|
3080
|
+
console.log('Updating DeepScientist now...');
|
|
3081
|
+
const payload = await performSelfUpdate(home, {
|
|
3082
|
+
host: options.host,
|
|
3083
|
+
port: options.port,
|
|
3084
|
+
restartDaemon: false,
|
|
3085
|
+
});
|
|
3086
|
+
console.log(payload.message);
|
|
3087
|
+
if (payload.log_path) {
|
|
3088
|
+
console.log(`Update log: ${payload.log_path}`);
|
|
3089
|
+
}
|
|
3090
|
+
if (!payload.ok) {
|
|
3091
|
+
console.log('DeepScientist will continue launching with the current session.');
|
|
3092
|
+
return false;
|
|
3093
|
+
}
|
|
3094
|
+
|
|
3095
|
+
console.log('Relaunching DeepScientist...');
|
|
3096
|
+
const relaunch = relaunchLauncherAfterUpdate(rawArgs, home);
|
|
3097
|
+
if (!relaunch.ok) {
|
|
3098
|
+
console.error(relaunch.message);
|
|
3099
|
+
process.exit(relaunch.exitCode || 1);
|
|
3100
|
+
}
|
|
3101
|
+
process.exit(relaunch.exitCode || 0);
|
|
3102
|
+
return true;
|
|
2983
3103
|
}
|
|
2984
3104
|
|
|
2985
3105
|
async function startBackgroundUpdateWorker(home, options = {}) {
|
|
@@ -3244,14 +3364,27 @@ function handleCodexPreflightFailure(error) {
|
|
|
3244
3364
|
if (!error || error.code !== 'DS_CODEX_PREFLIGHT') {
|
|
3245
3365
|
return false;
|
|
3246
3366
|
}
|
|
3367
|
+
const errorLabel = colorize('\u001B[1;38;5;196m', 'ERROR');
|
|
3368
|
+
const warningLabel = colorize('\u001B[1;38;5;214m', 'WARNING');
|
|
3247
3369
|
console.error('');
|
|
3248
|
-
console.error(
|
|
3370
|
+
console.error(`${errorLabel} DeepScientist could not start because Codex is not ready yet.`);
|
|
3249
3371
|
console.error(`Report: ${error.reportPath}`);
|
|
3250
3372
|
if (Array.isArray(error.probe?.errors)) {
|
|
3251
3373
|
for (const item of error.probe.errors) {
|
|
3252
|
-
console.error(
|
|
3374
|
+
console.error(`${errorLabel} ${item}`);
|
|
3375
|
+
}
|
|
3376
|
+
}
|
|
3377
|
+
if (Array.isArray(error.probe?.warnings)) {
|
|
3378
|
+
for (const item of error.probe.warnings) {
|
|
3379
|
+
console.error(`${warningLabel} ${item}`);
|
|
3253
3380
|
}
|
|
3254
3381
|
}
|
|
3382
|
+
console.error(`${warningLabel} Recommended fix:`);
|
|
3383
|
+
console.error(`${warningLabel} 1. In most installs, \`npm install -g @researai/deepscientist\` also installs the bundled Codex dependency.`);
|
|
3384
|
+
console.error(`${warningLabel} 2. If \`codex\` is still missing, run \`npm install -g @openai/codex\`.`);
|
|
3385
|
+
console.error(`${warningLabel} 3. Run \`codex --login\` (or \`codex\`) and finish authentication.`);
|
|
3386
|
+
console.error(`${warningLabel} 4. Run \`ds doctor\` and confirm the Codex check passes.`);
|
|
3387
|
+
console.error(`${warningLabel} 5. Run \`ds\` again.`);
|
|
3255
3388
|
openBrowser(error.reportUrl);
|
|
3256
3389
|
process.exit(1);
|
|
3257
3390
|
return true;
|
|
@@ -3375,7 +3508,29 @@ async function updateMain(rawArgs) {
|
|
|
3375
3508
|
process.exit(0);
|
|
3376
3509
|
}
|
|
3377
3510
|
printUpdateStatus(status, { compact: true });
|
|
3378
|
-
|
|
3511
|
+
if (!status.can_self_update) {
|
|
3512
|
+
process.exit(0);
|
|
3513
|
+
}
|
|
3514
|
+
|
|
3515
|
+
const confirmed = await promptYesNo(`Install DeepScientist ${status.latest_version} now? [y/N]: `, {
|
|
3516
|
+
defaultValue: false,
|
|
3517
|
+
});
|
|
3518
|
+
if (!confirmed) {
|
|
3519
|
+
const payload = markUpdateDeferred(home, status.latest_version);
|
|
3520
|
+
console.log(`DeepScientist will remind you later about ${payload.latest_version || 'the next release'}.`);
|
|
3521
|
+
process.exit(0);
|
|
3522
|
+
}
|
|
3523
|
+
|
|
3524
|
+
const payload = await performSelfUpdate(home, {
|
|
3525
|
+
host: options.host,
|
|
3526
|
+
port: options.port,
|
|
3527
|
+
restartDaemon: options.restartDaemon,
|
|
3528
|
+
});
|
|
3529
|
+
console.log(payload.message);
|
|
3530
|
+
if (payload.log_path) {
|
|
3531
|
+
console.log(`Update log: ${payload.log_path}`);
|
|
3532
|
+
}
|
|
3533
|
+
process.exit(payload.ok ? 0 : 1);
|
|
3379
3534
|
}
|
|
3380
3535
|
|
|
3381
3536
|
async function migrateMain(rawArgs) {
|
|
@@ -3680,6 +3835,10 @@ module.exports = {
|
|
|
3680
3835
|
detectInstallMode,
|
|
3681
3836
|
updateManualCommand,
|
|
3682
3837
|
buildUpdateStatus,
|
|
3838
|
+
parseYesNoAnswer,
|
|
3839
|
+
normalizeLauncherRelaunchArgs,
|
|
3840
|
+
officialRepositoryLine,
|
|
3841
|
+
stripAnsi,
|
|
3683
3842
|
},
|
|
3684
3843
|
};
|
|
3685
3844
|
|
|
Binary file
|