@researai/deepscientist 1.5.0 → 1.5.1

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.
Files changed (163) hide show
  1. package/AGENTS.md +26 -0
  2. package/README.md +19 -179
  3. package/assets/connectors/lingzhu/openclaw-bridge/README.md +124 -0
  4. package/assets/connectors/lingzhu/openclaw-bridge/index.ts +162 -0
  5. package/assets/connectors/lingzhu/openclaw-bridge/openclaw.plugin.json +145 -0
  6. package/assets/connectors/lingzhu/openclaw-bridge/package.json +35 -0
  7. package/assets/connectors/lingzhu/openclaw-bridge/src/cli.ts +180 -0
  8. package/assets/connectors/lingzhu/openclaw-bridge/src/config.ts +196 -0
  9. package/assets/connectors/lingzhu/openclaw-bridge/src/debug-log.ts +111 -0
  10. package/assets/connectors/lingzhu/openclaw-bridge/src/events.ts +4 -0
  11. package/assets/connectors/lingzhu/openclaw-bridge/src/http-handler.ts +1133 -0
  12. package/assets/connectors/lingzhu/openclaw-bridge/src/image-cache.ts +75 -0
  13. package/assets/connectors/lingzhu/openclaw-bridge/src/lingzhu-tools.ts +246 -0
  14. package/assets/connectors/lingzhu/openclaw-bridge/src/transform.ts +541 -0
  15. package/assets/connectors/lingzhu/openclaw-bridge/src/types.ts +131 -0
  16. package/assets/connectors/lingzhu/openclaw-bridge/tsconfig.json +14 -0
  17. package/assets/connectors/lingzhu/openclaw.lingzhu.config.template.json +39 -0
  18. package/bin/ds.js +233 -53
  19. package/docs/en/00_QUICK_START.md +134 -0
  20. package/docs/en/01_SETTINGS_REFERENCE.md +1104 -0
  21. package/docs/en/02_START_RESEARCH_GUIDE.md +404 -0
  22. package/docs/en/03_QQ_CONNECTOR_GUIDE.md +325 -0
  23. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +216 -0
  24. package/docs/en/05_TUI_GUIDE.md +141 -0
  25. package/docs/en/06_RUNTIME_AND_CANVAS.md +679 -0
  26. package/docs/en/07_MEMORY_AND_MCP.md +253 -0
  27. package/docs/en/08_FIGURE_STYLE_GUIDE.md +97 -0
  28. package/docs/en/09_DOCTOR.md +108 -0
  29. package/docs/en/90_ARCHITECTURE.md +245 -0
  30. package/docs/en/91_DEVELOPMENT.md +195 -0
  31. package/docs/en/99_ACKNOWLEDGEMENTS.md +29 -0
  32. package/docs/zh/00_QUICK_START.md +134 -0
  33. package/docs/zh/01_SETTINGS_REFERENCE.md +1137 -0
  34. package/docs/zh/02_START_RESEARCH_GUIDE.md +414 -0
  35. package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +324 -0
  36. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +230 -0
  37. package/docs/zh/05_TUI_GUIDE.md +128 -0
  38. package/docs/zh/06_RUNTIME_AND_CANVAS.md +271 -0
  39. package/docs/zh/07_MEMORY_AND_MCP.md +235 -0
  40. package/docs/zh/08_FIGURE_STYLE_GUIDE.md +97 -0
  41. package/docs/zh/09_DOCTOR.md +112 -0
  42. package/docs/zh/99_ACKNOWLEDGEMENTS.md +29 -0
  43. package/install.sh +32 -8
  44. package/package.json +4 -2
  45. package/pyproject.toml +1 -1
  46. package/src/deepscientist/artifact/guidance.py +9 -2
  47. package/src/deepscientist/artifact/service.py +482 -22
  48. package/src/deepscientist/bash_exec/monitor.py +27 -5
  49. package/src/deepscientist/bash_exec/runtime.py +639 -0
  50. package/src/deepscientist/bash_exec/service.py +99 -16
  51. package/src/deepscientist/bridges/base.py +3 -0
  52. package/src/deepscientist/bridges/connectors.py +292 -13
  53. package/src/deepscientist/channels/qq.py +19 -2
  54. package/src/deepscientist/channels/relay.py +1 -0
  55. package/src/deepscientist/cli.py +32 -25
  56. package/src/deepscientist/config/models.py +28 -2
  57. package/src/deepscientist/config/service.py +201 -6
  58. package/src/deepscientist/connector_runtime.py +2 -0
  59. package/src/deepscientist/daemon/api/handlers.py +50 -5
  60. package/src/deepscientist/daemon/api/router.py +1 -0
  61. package/src/deepscientist/daemon/app.py +442 -15
  62. package/src/deepscientist/doctor.py +444 -0
  63. package/src/deepscientist/home.py +1 -0
  64. package/src/deepscientist/latex_runtime.py +17 -4
  65. package/src/deepscientist/lingzhu_support.py +182 -0
  66. package/src/deepscientist/mcp/server.py +49 -2
  67. package/src/deepscientist/prompts/builder.py +181 -58
  68. package/src/deepscientist/quest/layout.py +1 -0
  69. package/src/deepscientist/quest/service.py +63 -2
  70. package/src/deepscientist/quest/stage_views.py +19 -1
  71. package/src/deepscientist/runtime_tools/__init__.py +16 -0
  72. package/src/deepscientist/runtime_tools/builtins.py +19 -0
  73. package/src/deepscientist/runtime_tools/models.py +29 -0
  74. package/src/deepscientist/runtime_tools/registry.py +40 -0
  75. package/src/deepscientist/runtime_tools/service.py +59 -0
  76. package/src/deepscientist/runtime_tools/tinytex.py +25 -0
  77. package/src/deepscientist/tinytex.py +276 -0
  78. package/src/prompts/connectors/lingzhu.md +12 -0
  79. package/src/prompts/connectors/qq.md +121 -0
  80. package/src/prompts/system.md +177 -33
  81. package/src/skills/analysis-campaign/SKILL.md +22 -6
  82. package/src/skills/baseline/SKILL.md +5 -4
  83. package/src/skills/decision/SKILL.md +4 -3
  84. package/src/skills/experiment/SKILL.md +5 -4
  85. package/src/skills/finalize/SKILL.md +5 -4
  86. package/src/skills/idea/SKILL.md +5 -4
  87. package/src/skills/intake-audit/SKILL.md +277 -0
  88. package/src/skills/intake-audit/references/state-audit-template.md +41 -0
  89. package/src/skills/rebuttal/SKILL.md +407 -0
  90. package/src/skills/rebuttal/references/action-plan-template.md +63 -0
  91. package/src/skills/rebuttal/references/evidence-update-template.md +30 -0
  92. package/src/skills/rebuttal/references/response-letter-template.md +113 -0
  93. package/src/skills/rebuttal/references/review-matrix-template.md +55 -0
  94. package/src/skills/review/SKILL.md +293 -0
  95. package/src/skills/review/references/experiment-todo-template.md +29 -0
  96. package/src/skills/review/references/review-report-template.md +83 -0
  97. package/src/skills/review/references/revision-log-template.md +40 -0
  98. package/src/skills/scout/SKILL.md +5 -4
  99. package/src/skills/write/SKILL.md +7 -3
  100. package/src/tui/dist/components/WelcomePanel.js +17 -43
  101. package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -2
  102. package/src/tui/package.json +1 -1
  103. package/src/ui/dist/assets/{AiManusChatView-7v-dHngU.js → AiManusChatView-w5lF2Ttt.js} +109 -575
  104. package/src/ui/dist/assets/{AnalysisPlugin-B_Xmz-KE.js → AnalysisPlugin-DJOED79I.js} +1 -1
  105. package/src/ui/dist/assets/{AutoFigurePlugin-Cko-0tm1.js → AutoFigurePlugin-DaG61Y0M.js} +63 -8
  106. package/src/ui/dist/assets/{CliPlugin-BsU0ht7q.js → CliPlugin-CV4LqUB_.js} +43 -609
  107. package/src/ui/dist/assets/{CodeEditorPlugin-DcMMP0Rt.js → CodeEditorPlugin-DylfAea4.js} +8 -8
  108. package/src/ui/dist/assets/{CodeViewerPlugin-BqoQ5QyY.js → CodeViewerPlugin-F7saY0LM.js} +5 -5
  109. package/src/ui/dist/assets/{DocViewerPlugin-D7eHNhU6.js → DocViewerPlugin-COP0c7jf.js} +3 -3
  110. package/src/ui/dist/assets/{GitDiffViewerPlugin-DLJN42T5.js → GitDiffViewerPlugin-CAS05pT9.js} +1 -1
  111. package/src/ui/dist/assets/{ImageViewerPlugin-gJMV7MOu.js → ImageViewerPlugin-Bco1CN_w.js} +5 -6
  112. package/src/ui/dist/assets/{LabCopilotPanel-B857sfxP.js → LabCopilotPanel-CvMlCD99.js} +12 -15
  113. package/src/ui/dist/assets/LabPlugin-BYankkE4.js +2676 -0
  114. package/src/ui/dist/assets/LabPlugin-D9jVIo0A.css +2698 -0
  115. package/src/ui/dist/assets/{LatexPlugin-DWKEo-Wj.js → LatexPlugin-LDSMR-t-.js} +16 -16
  116. package/src/ui/dist/assets/{MarkdownViewerPlugin-DBzoEmhv.js → MarkdownViewerPlugin-B7o80jgm.js} +4 -4
  117. package/src/ui/dist/assets/{MarketplacePlugin-DoHc-8vo.js → MarketplacePlugin-CM6ZOcpC.js} +3 -3
  118. package/src/ui/dist/assets/{NotebookEditor-CKjKH-yS.js → NotebookEditor-Dc61cXmK.js} +3 -3
  119. package/src/ui/dist/assets/{PdfLoader-zFoL0VPo.js → PdfLoader-DWowuQwx.js} +1 -1
  120. package/src/ui/dist/assets/{PdfMarkdownPlugin-DXPaL9Nt.js → PdfMarkdownPlugin-BsJM1q_a.js} +3 -3
  121. package/src/ui/dist/assets/{PdfViewerPlugin-DhK8qCFp.js → PdfViewerPlugin-DB2eEEFQ.js} +10 -10
  122. package/src/ui/dist/assets/{SearchPlugin-CdSi6krf.js → SearchPlugin-CraThSvt.js} +1 -1
  123. package/src/ui/dist/assets/{Stepper-V-WiDQJl.js → Stepper-CgocRTPq.js} +1 -1
  124. package/src/ui/dist/assets/{TextViewerPlugin-hIs1Efiu.js → TextViewerPlugin-B1JGhKtd.js} +4 -4
  125. package/src/ui/dist/assets/{VNCViewer-DG8b0q2X.js → VNCViewer-CclFC7FM.js} +9 -10
  126. package/src/ui/dist/assets/{bibtex-HDac6fVW.js → bibtex-D3IKsMl7.js} +1 -1
  127. package/src/ui/dist/assets/{code-BnBeNxBc.js → code-BP37Xx0p.js} +1 -1
  128. package/src/ui/dist/assets/{file-content-IRQ3jHb8.js → file-content-BAJSu-9r.js} +1 -1
  129. package/src/ui/dist/assets/{file-diff-panel-DZoQ9I6r.js → file-diff-panel-DUGeCTuy.js} +1 -1
  130. package/src/ui/dist/assets/{file-socket-BMCdLc-P.js → file-socket-CXc1Ojf7.js} +1 -1
  131. package/src/ui/dist/assets/{file-utils-CltILB3w.js → file-utils-2J21jt7M.js} +1 -1
  132. package/src/ui/dist/assets/{image-Boe6ffhu.js → image-CMMmgvcn.js} +1 -1
  133. package/src/ui/dist/assets/{index-BlplpvE1.js → index-BaVumsQT.js} +2 -2
  134. package/src/ui/dist/assets/{index-DZqJ-qAM.js → index-CWgMgpow.js} +60 -2154
  135. package/src/ui/dist/assets/{index-DO43pFZP.js → index-DmwmJmbW.js} +6372 -8434
  136. package/src/ui/dist/assets/{index-Bq2bvfkl.css → index-KGt-z-dD.css} +225 -2920
  137. package/src/ui/dist/assets/{index-2Zf65FZt.js → index-s7aHnNQ4.js} +1 -1
  138. package/src/ui/dist/assets/{message-square-mUHn_Ssb.js → message-square-CQRfX0Am.js} +1 -1
  139. package/src/ui/dist/assets/{monaco-fe0arNEU.js → monaco-B4TbdsrF.js} +1 -1
  140. package/src/ui/dist/assets/{popover-D_7i19qU.js → popover-B8Rokodk.js} +1 -1
  141. package/src/ui/dist/assets/{project-sync-DyVGrU7H.js → project-sync-D_i96KH4.js} +2 -8
  142. package/src/ui/dist/assets/{sigma-BzazRyxQ.js → sigma-D12PnzCN.js} +1 -1
  143. package/src/ui/dist/assets/{tooltip-DN_yjHFH.js → tooltip-B6YrI4aJ.js} +1 -1
  144. package/src/ui/dist/assets/trash-Bc8jGp0V.js +32 -0
  145. package/src/ui/dist/assets/{useCliAccess-DV2L2Qxy.js → useCliAccess-mXVCYSZ-.js} +12 -42
  146. package/src/ui/dist/assets/{useFileDiffOverlay-DyTj-p_V.js → useFileDiffOverlay-Bg6b9H9K.js} +1 -1
  147. package/src/ui/dist/assets/{wrap-text-ozYHtUwq.js → wrap-text-Drh5GEnL.js} +1 -1
  148. package/src/ui/dist/assets/{zoom-out-BN9MUyCQ.js → zoom-out-CJj9DZLn.js} +1 -1
  149. package/src/ui/dist/index.html +2 -2
  150. package/assets/fonts/Inter-Variable.ttf +0 -0
  151. package/assets/fonts/NotoSerifSC-Regular-C94HN_ZN.ttf +0 -0
  152. package/assets/fonts/NunitoSans-Variable.ttf +0 -0
  153. package/assets/fonts/Satoshi-Medium-ByP-Zb-9.woff2 +0 -0
  154. package/assets/fonts/SourceSans3-Variable.ttf +0 -0
  155. package/assets/fonts/ds-fonts.css +0 -83
  156. package/src/ui/dist/assets/Inter-Variable-VF2RPR_K.ttf +0 -0
  157. package/src/ui/dist/assets/LabPlugin-bL7rpic8.js +0 -43
  158. package/src/ui/dist/assets/NotoSerifSC-Regular-C94HN_ZN-C94HN_ZN.ttf +0 -0
  159. package/src/ui/dist/assets/NunitoSans-Variable-B_ZymHAd.ttf +0 -0
  160. package/src/ui/dist/assets/Satoshi-Medium-ByP-Zb-9-GkA34YXu.woff2 +0 -0
  161. package/src/ui/dist/assets/SourceSans3-Variable-CD-WOsSK.ttf +0 -0
  162. package/src/ui/dist/assets/info-CcsK_htA.js +0 -18
  163. package/src/ui/dist/assets/user-plus-BusDx-hF.js +0 -79
@@ -0,0 +1,414 @@
1
+ # 02 Start Research 参考:如何填写科研启动合同
2
+
3
+ 这份文档说明当前 `Start Research` 弹窗的真实结构,以及它到底会向后端提交什么。
4
+
5
+ 实现来源:
6
+
7
+ - `src/ui/src/lib/startResearch.ts`
8
+ - `src/ui/src/components/projects/CreateProjectDialog.tsx`
9
+
10
+ ## 这个弹窗实际做什么
11
+
12
+ `Start Research` 不只是“新建 quest 表单”,它同时完成四件事:
13
+
14
+ 1. 收集结构化启动上下文
15
+ 2. 把这些上下文编译成 quest 的第一条 kickoff prompt
16
+ 3. 绑定一个可选的可复用 baseline
17
+ 4. 持久化 `startup_contract`,供后续 prompt builder 持续读取
18
+
19
+ ## 当前前端数据模型
20
+
21
+ ### `StartResearchTemplate`
22
+
23
+ ```ts
24
+ type StartResearchTemplate = {
25
+ title: string
26
+ quest_id: string
27
+ goal: string
28
+ baseline_id: string
29
+ baseline_variant_id: string
30
+ baseline_urls: string
31
+ paper_urls: string
32
+ runtime_constraints: string
33
+ objectives: string
34
+ need_research_paper: boolean
35
+ research_intensity: 'light' | 'balanced' | 'sprint'
36
+ decision_policy: 'autonomous' | 'user_gated'
37
+ launch_mode: 'standard' | 'custom'
38
+ custom_profile: 'continue_existing_state' | 'revision_rebuttal' | 'freeform'
39
+ entry_state_summary: string
40
+ review_summary: string
41
+ custom_brief: string
42
+ user_language: 'en' | 'zh'
43
+ }
44
+ ```
45
+
46
+ 关键变化:
47
+
48
+ - `scope`
49
+ - `baseline_mode`
50
+ - `resource_policy`
51
+ - `time_budget_hours`
52
+ - `git_strategy`
53
+
54
+ 这几项已经不再由用户逐个填写,而是由 `research_intensity` 和是否选中 `baseline_id` 自动推导。
55
+
56
+ ### 自动推导字段
57
+
58
+ ```ts
59
+ type StartResearchContractFields = {
60
+ scope: 'baseline_only' | 'baseline_plus_direction' | 'full_research'
61
+ baseline_mode:
62
+ | 'existing'
63
+ | 'restore_from_url'
64
+ | 'allow_degraded_minimal_reproduction'
65
+ | 'stop_if_insufficient'
66
+ resource_policy: 'conservative' | 'balanced' | 'aggressive'
67
+ time_budget_hours: string
68
+ git_strategy:
69
+ | 'branch_per_analysis_then_paper'
70
+ | 'semantic_head_plus_controlled_integration'
71
+ | 'manual_integration_only'
72
+ }
73
+ ```
74
+
75
+ 推导逻辑在 `resolveStartResearchContractFields(...)`。
76
+
77
+ ## 后端提交结构
78
+
79
+ 前端最终会提交:
80
+
81
+ ```ts
82
+ {
83
+ title,
84
+ goal: compiled_prompt,
85
+ quest_id,
86
+ requested_baseline_ref: {
87
+ baseline_id,
88
+ variant_id
89
+ } | null,
90
+ startup_contract: {
91
+ schema_version: 3,
92
+ user_language,
93
+ need_research_paper,
94
+ research_intensity,
95
+ decision_policy,
96
+ launch_mode,
97
+ custom_profile,
98
+ scope,
99
+ baseline_mode,
100
+ resource_policy,
101
+ time_budget_hours,
102
+ git_strategy,
103
+ runtime_constraints,
104
+ objectives: string[],
105
+ baseline_urls: string[],
106
+ paper_urls: string[],
107
+ entry_state_summary,
108
+ review_summary,
109
+ custom_brief,
110
+ }
111
+ }
112
+ ```
113
+
114
+ ## 字段说明
115
+
116
+ ### Quest 基本身份
117
+
118
+ **`title`**
119
+
120
+ - Quest 的人类可读标题。
121
+ - 用于卡片和工作区标题。
122
+ - 不要求与 `quest_id` 一致。
123
+
124
+ **`quest_id`**
125
+
126
+ - Quest 的稳定标识,也是目录名。
127
+ - 默认由 runtime 提供下一个顺序编号。
128
+ - 允许用户手动覆盖。
129
+
130
+ **`goal`**
131
+
132
+ - 核心研究请求。
133
+ - 会成为 kickoff prompt 的主体。
134
+ - 好的写法:科学问题、目标、成功标准、研究边界。
135
+ - 不好的写法:直接写一堆过细的实现步骤。
136
+
137
+ **`user_language`**
138
+
139
+ - 声明后续 kickoff 和交流默认偏好的语言。
140
+
141
+ ### Baseline 与参考资料
142
+
143
+ **`baseline_id`**
144
+
145
+ - 从 registry 中选择一个可复用 baseline。
146
+ - 一旦存在,推导出的 `baseline_mode` 会变成 `existing`。
147
+ - 运行时应优先 attach 并 verify 它,而不是从零开始。
148
+
149
+ **`baseline_variant_id`**
150
+
151
+ - baseline 条目中某个具体 variant 的选择器。
152
+
153
+ **`baseline_urls`**
154
+
155
+ - 当没有 registry baseline 时,作为恢复 baseline 的候选来源。
156
+ - 提交时转成 `string[]`。
157
+
158
+ **`paper_urls`**
159
+
160
+ - 论文、代码仓库、benchmark、leaderboard 等参考资料。
161
+ - 提交时转成 `string[]`。
162
+
163
+ ### 约束与目标
164
+
165
+ **`runtime_constraints`**
166
+
167
+ - 硬约束,例如预算、硬件、隐私、存储、截止时间等。
168
+
169
+ **`objectives`**
170
+
171
+ - 每行一个目标。
172
+ - 提交时转成 `string[]`。
173
+ - 应该写“下一轮需要产出什么”,而不是写空泛口号。
174
+
175
+ **`need_research_paper`**
176
+
177
+ - `true`:默认继续推进到分析和写作准备
178
+ - `false`:默认追求最强且有依据的算法结果,不自动进入论文写作
179
+
180
+ ### 高层控制项
181
+
182
+ **`research_intensity`**
183
+
184
+ - `light`
185
+ - 推导结果:仅 baseline、保守、8 小时、手动集成
186
+ - `balanced`
187
+ - 推导结果:baseline + 方向、平衡、24 小时、受控集成
188
+ - `sprint`
189
+ - 推导结果:完整研究、激进、48 小时、analysis 分支优先
190
+
191
+ 这是当前公开给用户的主要“轮次深度”控制杆。
192
+
193
+ **`decision_policy`**
194
+
195
+ - `autonomous`
196
+ - 普通路线由 agent 自行决定
197
+ - `user_gated`
198
+ - 只有真正依赖用户偏好时,才允许阻塞式决策请求
199
+
200
+ ### 启动模式
201
+
202
+ **`launch_mode`**
203
+
204
+ - `standard`
205
+ - 按默认科研主线启动
206
+ - `custom`
207
+ - 不假设这是一个“从零开始”的普通科研任务
208
+
209
+ **`custom_profile`**
210
+
211
+ 仅在 `launch_mode = custom` 时有效。
212
+
213
+ - `continue_existing_state`
214
+ - 先审计已有 baseline、结果、草稿或混合资产
215
+ - prompt builder 会显式引导 agent 优先打开 `intake-audit`
216
+ - `revision_rebuttal`
217
+ - 这是一个审稿回复、revision、rebuttal 类型任务
218
+ - prompt builder 会显式引导 agent 优先打开 `rebuttal`
219
+ - `freeform`
220
+ - 以自定义 brief 为主,尽量少做额外假设
221
+
222
+ **`entry_state_summary`**
223
+
224
+ - 用自然语言概括当前已经存在什么。
225
+ - 典型内容:
226
+ - 已有可信 baseline
227
+ - 主实验已经跑完
228
+ - 部分论文草稿已经存在
229
+ - 部分补充图表已经存在
230
+
231
+ **`review_summary`**
232
+
233
+ - 主要用于 review / revision 场景。
234
+ - 用来概括 reviewer comments、修改要求、meta-review 约束。
235
+
236
+ **`custom_brief`**
237
+
238
+ - 一个额外的启动级说明。
239
+ - 用来覆盖或收窄默认的 blank-slate full-research 行为。
240
+
241
+ ## 自动推导合同映射
242
+
243
+ 当前 preset 映射如下:
244
+
245
+ | `research_intensity` | `scope` | `baseline_mode` | `resource_policy` | `time_budget_hours` | `git_strategy` |
246
+ |---|---|---|---|---:|---|
247
+ | `light` | `baseline_only` | `stop_if_insufficient` | `conservative` | `8` | `manual_integration_only` |
248
+ | `balanced` | `baseline_plus_direction` | `restore_from_url` | `balanced` | `24` | `semantic_head_plus_controlled_integration` |
249
+ | `sprint` | `full_research` | `allow_degraded_minimal_reproduction` | `aggressive` | `48` | `branch_per_analysis_then_paper` |
250
+
251
+ 额外规则:
252
+
253
+ - 如果选中了 `baseline_id`,推导得到的 `baseline_mode` 会强制变成 `existing`
254
+
255
+ ## Prompt 编译行为
256
+
257
+ `compileStartResearchPrompt(...)` 会生成一段可读 kickoff prompt,包含:
258
+
259
+ - quest bootstrap
260
+ - primary research request
261
+ - research goals
262
+ - baseline context
263
+ - reference papers / repositories
264
+ - operational constraints
265
+ - research delivery mode
266
+ - decision handling mode
267
+ - launch mode
268
+ - research contract
269
+ - mandatory working rules
270
+
271
+ 其中自定义启动会被明确写出来:
272
+
273
+ - `standard`
274
+ - 告诉 agent 使用默认科研图谱
275
+ - `custom + continue_existing_state`
276
+ - 告诉 agent 先整理和信任排序已有资产
277
+ - 明确优先 `intake-audit`
278
+ - `custom + revision_rebuttal`
279
+ - 告诉 agent 先理解 reviewer comments 和当前论文状态
280
+ - 明确优先 `rebuttal`
281
+ - `custom + freeform`
282
+ - 告诉 agent 以 custom brief 为主,只打开真正需要的 skills
283
+
284
+ ## 示例 payload
285
+
286
+ ### 标准启动
287
+
288
+ ```json
289
+ {
290
+ "title": "Sparse adapter robustness",
291
+ "goal": "Investigate whether sparse routing improves robustness without hurting compute efficiency.",
292
+ "quest_id": "012",
293
+ "requested_baseline_ref": {
294
+ "baseline_id": "adapter-baseline",
295
+ "variant_id": "default"
296
+ },
297
+ "startup_contract": {
298
+ "schema_version": 3,
299
+ "user_language": "en",
300
+ "need_research_paper": true,
301
+ "research_intensity": "balanced",
302
+ "decision_policy": "autonomous",
303
+ "launch_mode": "standard",
304
+ "custom_profile": "freeform",
305
+ "scope": "baseline_plus_direction",
306
+ "baseline_mode": "existing",
307
+ "resource_policy": "balanced",
308
+ "time_budget_hours": 24,
309
+ "git_strategy": "semantic_head_plus_controlled_integration",
310
+ "runtime_constraints": "One 24 GB GPU. Keep data local.",
311
+ "objectives": [
312
+ "verify the reusable baseline",
313
+ "test one justified sparse-routing direction"
314
+ ],
315
+ "baseline_urls": [],
316
+ "paper_urls": [
317
+ "https://arxiv.org/abs/2401.00001"
318
+ ],
319
+ "entry_state_summary": "",
320
+ "review_summary": "",
321
+ "custom_brief": ""
322
+ }
323
+ }
324
+ ```
325
+
326
+ ### 自定义启动:继续已有状态
327
+
328
+ ```json
329
+ {
330
+ "title": "Continue retrieval quest",
331
+ "goal": "Continue the existing retrieval quest and decide whether a fresh main run is still needed.",
332
+ "quest_id": "013",
333
+ "requested_baseline_ref": null,
334
+ "startup_contract": {
335
+ "schema_version": 3,
336
+ "user_language": "en",
337
+ "need_research_paper": true,
338
+ "research_intensity": "light",
339
+ "decision_policy": "autonomous",
340
+ "launch_mode": "custom",
341
+ "custom_profile": "continue_existing_state",
342
+ "scope": "baseline_only",
343
+ "baseline_mode": "stop_if_insufficient",
344
+ "resource_policy": "conservative",
345
+ "time_budget_hours": 8,
346
+ "git_strategy": "manual_integration_only",
347
+ "runtime_constraints": "Do not rerun expensive full-corpus indexing unless evidence says the old run is unusable.",
348
+ "objectives": [
349
+ "normalize current evidence",
350
+ "decide whether a new run is actually required"
351
+ ],
352
+ "baseline_urls": [],
353
+ "paper_urls": [],
354
+ "entry_state_summary": "Trusted baseline exists. One main run finished. Draft intro and method already exist.",
355
+ "review_summary": "",
356
+ "custom_brief": "Audit first. Only rerun if current metrics or artifacts are inconsistent."
357
+ }
358
+ }
359
+ ```
360
+
361
+ ### 自定义启动:审稿 / rebuttal
362
+
363
+ ```json
364
+ {
365
+ "title": "Camera-ready revision",
366
+ "goal": "Address reviewer requests, add only the missing evidence, and revise the manuscript cleanly.",
367
+ "quest_id": "014",
368
+ "requested_baseline_ref": null,
369
+ "startup_contract": {
370
+ "schema_version": 3,
371
+ "user_language": "en",
372
+ "need_research_paper": true,
373
+ "research_intensity": "balanced",
374
+ "decision_policy": "user_gated",
375
+ "launch_mode": "custom",
376
+ "custom_profile": "revision_rebuttal",
377
+ "scope": "baseline_plus_direction",
378
+ "baseline_mode": "restore_from_url",
379
+ "resource_policy": "balanced",
380
+ "time_budget_hours": 24,
381
+ "git_strategy": "semantic_head_plus_controlled_integration",
382
+ "runtime_constraints": "Only add experiments that directly answer reviewer concerns.",
383
+ "objectives": [
384
+ "map reviewer comments to concrete actions",
385
+ "run only the necessary supplementary evidence",
386
+ "update the draft and response letter"
387
+ ],
388
+ "baseline_urls": [],
389
+ "paper_urls": [],
390
+ "entry_state_summary": "A draft and previous experiment outputs already exist.",
391
+ "review_summary": "Reviewers asked for one stronger ablation, one extra baseline, and a clearer limitation paragraph.",
392
+ "custom_brief": "Treat the current manuscript and review packet as the active contract."
393
+ }
394
+ }
395
+ ```
396
+
397
+ ## 运行时意义
398
+
399
+ - `startup_contract` 是 quest 的持久状态,不只是 UI 临时字段。
400
+ - 后续 prompt builder 还会继续读取 `launch_mode`、`custom_profile`、`entry_state_summary`、`review_summary`、`custom_brief`。
401
+ - 所以 `Start Research` 不只影响第一轮,还会影响后续路由判断。
402
+
403
+ ## 修改检查清单
404
+
405
+ 如果修改 `Start Research`,要同步检查:
406
+
407
+ - `src/ui/src/lib/startResearch.ts`
408
+ - `src/ui/src/components/projects/CreateProjectDialog.tsx`
409
+ - `src/prompts/system.md`(如果运行时解释变了)
410
+ - `src/deepscientist/prompts/builder.py`(如果 prompt 路由变了)
411
+ - 本文档
412
+ - `docs/en/02_START_RESEARCH_GUIDE.md`
413
+ - `tests/test_prompt_builder.py`
414
+ - `tests/test_stage_skills.py`