@researai/deepscientist 1.5.8 → 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/LICENSE +186 -21
- package/README.md +108 -95
- 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 +172 -13
- 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 +3 -3
- package/pyproject.toml +2 -2
- 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/metrics.py +1 -3
- package/src/deepscientist/artifact/service.py +1347 -111
- 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 +295 -5
- package/src/deepscientist/daemon/api/router.py +16 -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 +14 -5
- package/src/deepscientist/prompts/builder.py +29 -1
- package/src/deepscientist/qq_profiles.py +1 -196
- package/src/deepscientist/quest/node_traces.py +152 -2
- package/src/deepscientist/quest/service.py +169 -43
- package/src/deepscientist/quest/stage_views.py +172 -9
- package/src/deepscientist/registries/baseline.py +56 -4
- 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 +9 -0
- package/src/skills/idea/SKILL.md +16 -0
- package/src/skills/idea/references/literature-survey-template.md +24 -0
- package/src/skills/idea/references/related-work-playbook.md +4 -0
- package/src/skills/idea/references/selection-gate.md +9 -0
- package/src/skills/write/SKILL.md +1 -1
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-m2FNtwbn.js → AiManusChatView-D0mTXG4-.js} +156 -48
- package/src/ui/dist/assets/{AnalysisPlugin-BMTF8EGL.js → AnalysisPlugin-Db0cTXxm.js} +1 -1
- package/src/ui/dist/assets/{CliPlugin-BEOWgxCI.js → CliPlugin-DrV8je02.js} +164 -9
- package/src/ui/dist/assets/{CodeEditorPlugin-BCXvjqmb.js → CodeEditorPlugin-QXMSCH71.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-DaJcy3nD.js → CodeViewerPlugin-7hhtWj_E.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-ByfeIq4K.js → DocViewerPlugin-BWMSnRJe.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-Cksf3VZ-.js → GitDiffViewerPlugin-7J9h9Vy_.js} +20 -21
- package/src/ui/dist/assets/{ImageViewerPlugin-CFz-OsTS.js → ImageViewerPlugin-CHJl_0lr.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-CJ1cJzoX.js → LabCopilotPanel-1qSow1es.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-BF3dVJwa.js → LabPlugin-eQpPPCEp.js} +2 -1
- package/src/ui/dist/assets/{LatexPlugin-DDkwZ6Sj.js → LatexPlugin-BwRfi89Z.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-HAuvurcT.js → MarkdownViewerPlugin-836PVQWV.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-BtoTYy2C.js → MarketplacePlugin-C2y_556i.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-CSJYx7b-.js → NotebookEditor-BRzJbGsn.js} +12 -12
- package/src/ui/dist/assets/{NotebookEditor-DQgRezm_.js → NotebookEditor-DIX7Mlzu.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-DPa_-fv6.js → PdfLoader-DzRaTAlq.js} +14 -7
- package/src/ui/dist/assets/{PdfMarkdownPlugin-BZpXOEjm.js → PdfMarkdownPlugin-DZUfIUnp.js} +73 -6
- package/src/ui/dist/assets/{PdfViewerPlugin-BT8a6wGR.js → PdfViewerPlugin-BwtICzue.js} +103 -34
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
- package/src/ui/dist/assets/{SearchPlugin-D_blveZi.js → SearchPlugin-DHeIAMsx.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-Btx0M3hX.js → TextViewerPlugin-C3tCmFox.js} +5 -4
- package/src/ui/dist/assets/{VNCViewer-DImJO4rO.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-BUfXGJSl.js → code-XfbSR8K2.js} +1 -1
- package/src/ui/dist/assets/{file-content-VqamwI3X.js → file-content-BjxNaIfy.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-C_wOoS7a.js → file-diff-panel-D_lLVQk0.js} +1 -1
- package/src/ui/dist/assets/{file-socket-D2bTuMVP.js → file-socket-D9x_5vlY.js} +1 -1
- package/src/ui/dist/assets/{image-BZkGJ4mM.js → image-BhWT33W1.js} +1 -1
- package/src/ui/dist/assets/{index-DdRW6RMJ.js → index--c4iXtuy.js} +12 -12
- package/src/ui/dist/assets/{index-CxkvSeKw.js → index-BDxipwrC.js} +2 -2
- package/src/ui/dist/assets/{index-DjggJovS.js → index-DZTZ8mWP.js} +14934 -9613
- package/src/ui/dist/assets/{index-DXZ1daiJ.css → index-Dqj-Mjb4.css} +2 -13
- package/src/ui/dist/assets/index-PJbSbPTy.js +25 -0
- package/src/ui/dist/assets/{monaco-DHMc7kKM.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-B85oCgCS.js → popover-yFK1J4fL.js} +1 -1
- package/src/ui/dist/assets/{project-sync-DOMCcPac.js → project-sync-PENr2zcz.js} +1 -74
- package/src/ui/dist/assets/select-CAbJDfYv.js +1690 -0
- package/src/ui/dist/assets/{sigma-BO2rQrl3.js → sigma-DEuYJqTl.js} +1 -1
- package/src/ui/dist/assets/{index-D9QIGcmc.js → square-check-big-omoSUmcd.js} +2 -13
- package/src/ui/dist/assets/{trash-BsVEH_dV.js → trash--F119N47.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-b8L6JuZm.js → useCliAccess-D31UR23I.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-BY7uA9hV.js → useFileDiffOverlay-BH6KcMzq.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-BwyVuUIK.js → wrap-text-CZ613PM5.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-RDpLugQP.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-DxPdMUNb.js +0 -8149
- package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
- package/src/ui/dist/assets/Stepper-DH2k75Vo.js +0 -158
- package/src/ui/dist/assets/bibtex-B-Hqu0Sg.js +0 -189
- package/src/ui/dist/assets/file-utils--zJCPN1i.js +0 -109
- package/src/ui/dist/assets/message-square-FUIPIhU2.js +0 -16
- package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
- package/src/ui/dist/assets/tooltip-B1OspAkx.js +0 -108
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# 13 核心架构说明:DeepScientist 是如何拼起来的
|
|
2
|
+
|
|
3
|
+
这是一篇面向用户的核心架构说明。
|
|
4
|
+
|
|
5
|
+
它的目标不是替代维护者文档,而是让你在不通读底层实现的情况下,也能理解 DeepScientist 的主要结构。
|
|
6
|
+
|
|
7
|
+
如果你要维护仓库本身,还应该继续阅读 [90 Architecture](../en/90_ARCHITECTURE.md) 和 [91 Development](../en/91_DEVELOPMENT.md)。
|
|
8
|
+
|
|
9
|
+
## 1. 一句话总结
|
|
10
|
+
|
|
11
|
+
DeepScientist 是一个本地优先的科研操作系统,其中:
|
|
12
|
+
|
|
13
|
+
- 对外安装和启动入口是 `npm` 与 `ds`
|
|
14
|
+
- 真正的权威运行时在 Python
|
|
15
|
+
- 每个 quest 都是独立 Git 仓库
|
|
16
|
+
- 工作流纪律主要来自 prompts 和 skills
|
|
17
|
+
- 持久状态保存在文件、Git、memory、artifacts 和运行日志中
|
|
18
|
+
|
|
19
|
+
## 2. 四个主要入口
|
|
20
|
+
|
|
21
|
+
DeepScientist 实际上有四个常见入口:
|
|
22
|
+
|
|
23
|
+
1. `ds` 命令
|
|
24
|
+
2. Web 工作区
|
|
25
|
+
3. TUI
|
|
26
|
+
4. 外部 connectors
|
|
27
|
+
|
|
28
|
+
### 2.1 `ds`
|
|
29
|
+
|
|
30
|
+
`ds` 是正常用户的启动入口。
|
|
31
|
+
|
|
32
|
+
它负责:
|
|
33
|
+
|
|
34
|
+
- 准备运行时
|
|
35
|
+
- 启动 daemon
|
|
36
|
+
- 暴露 Web 与 TUI 共用的 API 面
|
|
37
|
+
|
|
38
|
+
### 2.2 Web 工作区
|
|
39
|
+
|
|
40
|
+
Web 界面是最主要的可视化工作区。
|
|
41
|
+
|
|
42
|
+
你通常会在这里:
|
|
43
|
+
|
|
44
|
+
- 创建 quest
|
|
45
|
+
- 查看文件
|
|
46
|
+
- 阅读 Canvas
|
|
47
|
+
- 检查 memory
|
|
48
|
+
- 继续一个正在进行的线程
|
|
49
|
+
|
|
50
|
+
### 2.3 TUI
|
|
51
|
+
|
|
52
|
+
TUI 不是另一套独立产品,也不是另一份状态。
|
|
53
|
+
|
|
54
|
+
它和 Web 一样,都是连到同一个 daemon、同一个 quest 状态上。
|
|
55
|
+
|
|
56
|
+
### 2.4 Connectors
|
|
57
|
+
|
|
58
|
+
微信、QQ、灵珠等 connectors,本质上是沟通表面。
|
|
59
|
+
|
|
60
|
+
它们不是核心运行时本身。
|
|
61
|
+
|
|
62
|
+
它们的作用,是让同一个 quest 能在浏览器之外继续收发消息。
|
|
63
|
+
|
|
64
|
+
## 3. 启动链路
|
|
65
|
+
|
|
66
|
+
正常启动链路是:
|
|
67
|
+
|
|
68
|
+
1. `npm install -g @researai/deepscientist`
|
|
69
|
+
2. 运行 `ds`
|
|
70
|
+
3. `bin/ds.js` 准备运行时环境
|
|
71
|
+
4. 启动 Python daemon
|
|
72
|
+
5. daemon 提供 Web 工作区与共用 API
|
|
73
|
+
6. Web、TUI、connectors 都连接到这个 daemon
|
|
74
|
+
|
|
75
|
+
这里的关键设计是:
|
|
76
|
+
|
|
77
|
+
- JavaScript 负责启动
|
|
78
|
+
- Python 负责权威运行时
|
|
79
|
+
|
|
80
|
+
## 4. Runtime home
|
|
81
|
+
|
|
82
|
+
默认情况下,DeepScientist 使用 `~/DeepScientist/` 作为运行时主目录。
|
|
83
|
+
|
|
84
|
+
其中最重要的目录有:
|
|
85
|
+
|
|
86
|
+
- `runtime/`
|
|
87
|
+
- `config/`
|
|
88
|
+
- `memory/`
|
|
89
|
+
- `quests/`
|
|
90
|
+
- `logs/`
|
|
91
|
+
- `cache/`
|
|
92
|
+
|
|
93
|
+
它们分别大致表示:
|
|
94
|
+
|
|
95
|
+
- `runtime/`:受管运行时工具与 Python 环境
|
|
96
|
+
- `config/`:YAML 配置和 baseline registry
|
|
97
|
+
- `memory/`:全局 memory 卡片
|
|
98
|
+
- `quests/`:所有 quest 仓库
|
|
99
|
+
- `logs/`:daemon 与运行日志
|
|
100
|
+
- `cache/`:复用缓存
|
|
101
|
+
|
|
102
|
+
## 5. 一题一仓库
|
|
103
|
+
|
|
104
|
+
这是 DeepScientist 最关键的设计之一。
|
|
105
|
+
|
|
106
|
+
每个 quest 都在自己的目录里:
|
|
107
|
+
|
|
108
|
+
`~/DeepScientist/quests/<quest_id>/`
|
|
109
|
+
|
|
110
|
+
并且它本身就是一个独立 Git 仓库。
|
|
111
|
+
|
|
112
|
+
所以一个 quest 并不只是一次聊天,而是一个真正的本地工作区,里面有:
|
|
113
|
+
|
|
114
|
+
- 分支
|
|
115
|
+
- 文件
|
|
116
|
+
- 计划
|
|
117
|
+
- 总结
|
|
118
|
+
- artifacts
|
|
119
|
+
- memory
|
|
120
|
+
- shell 历史
|
|
121
|
+
|
|
122
|
+
这正是 DeepScientist 能变成 persistent research map,而不是一次性对话的原因。
|
|
123
|
+
|
|
124
|
+
## 6. `Start Research` 真正创建了什么
|
|
125
|
+
|
|
126
|
+
`Start Research` 不只是新建一个目录。
|
|
127
|
+
|
|
128
|
+
它还会创建一份结构化 startup contract。
|
|
129
|
+
|
|
130
|
+
这份合同里会保存:
|
|
131
|
+
|
|
132
|
+
- 研究目标
|
|
133
|
+
- baseline 与 references
|
|
134
|
+
- runtime constraints
|
|
135
|
+
- 项目目标
|
|
136
|
+
- connector 绑定选择
|
|
137
|
+
- 启动与决策策略
|
|
138
|
+
|
|
139
|
+
这就是 quest 的第一份持久研究 brief。
|
|
140
|
+
|
|
141
|
+
也正因为如此,系统的起点不只是一个随意 prompt,而是一份更严谨的项目合同。
|
|
142
|
+
|
|
143
|
+
## 7. 当用户发送一条消息时,会发生什么
|
|
144
|
+
|
|
145
|
+
简化后的生命周期大致是:
|
|
146
|
+
|
|
147
|
+
1. 用户消息从 Web、TUI 或 connector 进入
|
|
148
|
+
2. daemon 把它写入 quest history
|
|
149
|
+
3. 如果 quest 空闲,就调度一个新 turn
|
|
150
|
+
4. prompt builder 组装本轮 prompt
|
|
151
|
+
5. runner 启动
|
|
152
|
+
6. agent 使用 MCP、文件、Git 和 shell
|
|
153
|
+
7. 输出被持久化为 events、artifacts、文件变化和总结
|
|
154
|
+
|
|
155
|
+
最重要的一点是:
|
|
156
|
+
|
|
157
|
+
- 用户消息不会绕开 quest 状态
|
|
158
|
+
- 它们会进入 quest 的持久执行历史
|
|
159
|
+
|
|
160
|
+
## 8. Prompt-led 与 Skill-led 工作流
|
|
161
|
+
|
|
162
|
+
DeepScientist 并不是主要依赖一个巨大的硬编码 stage scheduler。
|
|
163
|
+
|
|
164
|
+
它的工作流纪律更多来自:
|
|
165
|
+
|
|
166
|
+
- `src/prompts/system.md`
|
|
167
|
+
- `src/skills/*/SKILL.md`
|
|
168
|
+
- 当前 quest 的 active anchor
|
|
169
|
+
|
|
170
|
+
也就是说,系统里的分工更像这样:
|
|
171
|
+
|
|
172
|
+
- daemon 负责路由、调度和持久化
|
|
173
|
+
- prompt 负责定义研究纪律
|
|
174
|
+
- skill 负责告诉 agent 在当前阶段该怎样工作
|
|
175
|
+
|
|
176
|
+
这种设计的好处是:
|
|
177
|
+
|
|
178
|
+
- runtime 更薄
|
|
179
|
+
- 行为更容易通过 prompts 和 skills 演化
|
|
180
|
+
|
|
181
|
+
## 9. 内建 MCP 只有三个 namespace
|
|
182
|
+
|
|
183
|
+
DeepScientist 故意把内建 MCP 面控制得很小:
|
|
184
|
+
|
|
185
|
+
- `memory`
|
|
186
|
+
- `artifact`
|
|
187
|
+
- `bash_exec`
|
|
188
|
+
|
|
189
|
+
### 9.1 `memory`
|
|
190
|
+
|
|
191
|
+
用于可复用知识,例如:
|
|
192
|
+
|
|
193
|
+
- 论文笔记
|
|
194
|
+
- 失败经验
|
|
195
|
+
- 稳定 caveat
|
|
196
|
+
- 被选中 idea 的理由
|
|
197
|
+
|
|
198
|
+
### 9.2 `artifact`
|
|
199
|
+
|
|
200
|
+
用于 quest 状态和结构化研究进展,例如:
|
|
201
|
+
|
|
202
|
+
- 实验记录
|
|
203
|
+
- 分支决策
|
|
204
|
+
- 里程碑推送
|
|
205
|
+
- 交互投递
|
|
206
|
+
- Git 驱动的 quest 操作
|
|
207
|
+
|
|
208
|
+
### 9.3 `bash_exec`
|
|
209
|
+
|
|
210
|
+
用于可持久跟踪的 shell 工作,例如:
|
|
211
|
+
|
|
212
|
+
- 训练
|
|
213
|
+
- 评测
|
|
214
|
+
- 长脚本
|
|
215
|
+
- 后续还要查看的命令
|
|
216
|
+
|
|
217
|
+
## 10. 为什么 `artifact.interact(...)` 这么重要
|
|
218
|
+
|
|
219
|
+
`artifact.interact(...)` 是运行时里的核心工具之一,因为它能同时帮助系统完成多件事:
|
|
220
|
+
|
|
221
|
+
- 持久化交互状态
|
|
222
|
+
- 必要时 checkpoint
|
|
223
|
+
- 按路由策略向外推送进展
|
|
224
|
+
- 消费排队中的用户消息
|
|
225
|
+
- 让长时间运行期间的交互线程保持连续
|
|
226
|
+
|
|
227
|
+
这也是 DeepScientist 能在长任务里不断线协作的原因之一。
|
|
228
|
+
|
|
229
|
+
## 11. Web 工作区是如何从持久状态重建的
|
|
230
|
+
|
|
231
|
+
工作区不是拿一段临时回答糊出来的前端。
|
|
232
|
+
|
|
233
|
+
不同页面会从不同的持久状态重建:
|
|
234
|
+
|
|
235
|
+
- `Explorer`:quest 文件与文件树派生状态
|
|
236
|
+
- `Canvas`:Git、artifacts 与原始 quest events
|
|
237
|
+
- `Details`:quest summary 与状态快照
|
|
238
|
+
- `Memory`:quest 与 global memory cards
|
|
239
|
+
- `Copilot / Studio`:实时 daemon 会话 + 持久历史
|
|
240
|
+
|
|
241
|
+
所以即使刷新页面,quest 的研究结构也不会消失。
|
|
242
|
+
|
|
243
|
+
## 12. Canvas 到底是什么
|
|
244
|
+
|
|
245
|
+
Canvas 不是一份单独维护的中心化图数据库。
|
|
246
|
+
|
|
247
|
+
它主要从以下内容重建:
|
|
248
|
+
|
|
249
|
+
- Git 分支结构
|
|
250
|
+
- artifact 记录
|
|
251
|
+
- quest 事件
|
|
252
|
+
|
|
253
|
+
这意味着:你在 Canvas 里看到的节点和分支,原则上都应该能对应到真实的持久 quest 状态,而不只是临时前端对象。
|
|
254
|
+
|
|
255
|
+
## 13. Connectors 在系统里处于什么位置
|
|
256
|
+
|
|
257
|
+
Connectors 是 quest 外围的适配层,不是 quest 本身。
|
|
258
|
+
|
|
259
|
+
它们的职责是:
|
|
260
|
+
|
|
261
|
+
- 接收外部 surface 的入站消息
|
|
262
|
+
- 把这些消息绑定到正确 quest
|
|
263
|
+
- 在允许的路由策略下把出站进展发回去
|
|
264
|
+
|
|
265
|
+
它们并不拥有核心项目状态。
|
|
266
|
+
|
|
267
|
+
真正的 source of truth 仍然是 quest 仓库和 daemon。
|
|
268
|
+
|
|
269
|
+
## 14. 为什么系统能持续生长
|
|
270
|
+
|
|
271
|
+
DeepScientist 能跨轮次累积进展,是因为它把状态保存在持久形式里:
|
|
272
|
+
|
|
273
|
+
- quest 文件
|
|
274
|
+
- Git 分支与 commit
|
|
275
|
+
- memory cards
|
|
276
|
+
- artifact 记录
|
|
277
|
+
- event logs
|
|
278
|
+
- bash session history
|
|
279
|
+
|
|
280
|
+
所以后续轮次能够恢复:
|
|
281
|
+
|
|
282
|
+
- 做过什么
|
|
283
|
+
- 哪些失败了
|
|
284
|
+
- 选中了什么
|
|
285
|
+
- 产出了哪些证据
|
|
286
|
+
|
|
287
|
+
这也是它更像一个科研工作坊,而不是一次性运行的原因。
|
|
288
|
+
|
|
289
|
+
## 15. 下一步建议阅读
|
|
290
|
+
|
|
291
|
+
- 第一次按流程用产品:[12 引导式工作流教程](./12_GUIDED_WORKFLOW_TOUR.md)
|
|
292
|
+
- 理解每轮 prompt、skills 与工具结构:[14 Prompt、Skills 与 MCP 指南](./14_PROMPT_SKILLS_AND_MCP_GUIDE.md)
|
|
293
|
+
- 精确理解启动合同:[02 Start Research 参考](./02_START_RESEARCH_GUIDE.md)
|
|
294
|
+
- 深入理解 runtime 与 Canvas:[06 Runtime 与 Canvas](./06_RUNTIME_AND_CANVAS.md)
|
|
295
|
+
- 深入理解 memory 与 MCP:[07 Memory 与 MCP](./07_MEMORY_AND_MCP.md)
|
|
296
|
+
- 维护者架构参考:[90 Architecture](../en/90_ARCHITECTURE.md)
|