@researai/deepscientist 1.5.11 → 1.5.12
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 +8 -8
- package/bin/ds.js +358 -61
- package/docs/en/00_QUICK_START.md +35 -3
- package/docs/en/01_SETTINGS_REFERENCE.md +11 -0
- package/docs/en/02_START_RESEARCH_GUIDE.md +68 -4
- package/docs/en/09_DOCTOR.md +28 -3
- package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +21 -2
- package/docs/en/15_CODEX_PROVIDER_SETUP.md +284 -0
- package/docs/en/README.md +4 -0
- package/docs/zh/00_QUICK_START.md +34 -2
- package/docs/zh/01_SETTINGS_REFERENCE.md +11 -0
- package/docs/zh/02_START_RESEARCH_GUIDE.md +69 -3
- package/docs/zh/09_DOCTOR.md +28 -1
- package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +21 -2
- package/docs/zh/15_CODEX_PROVIDER_SETUP.md +285 -0
- package/docs/zh/README.md +4 -1
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/bash_exec/monitor.py +7 -5
- package/src/deepscientist/bash_exec/service.py +84 -21
- package/src/deepscientist/channels/local.py +3 -3
- package/src/deepscientist/channels/qq.py +7 -7
- package/src/deepscientist/channels/relay.py +7 -7
- package/src/deepscientist/channels/weixin_ilink.py +90 -19
- package/src/deepscientist/config/models.py +1 -0
- package/src/deepscientist/config/service.py +121 -20
- package/src/deepscientist/daemon/app.py +314 -6
- package/src/deepscientist/doctor.py +1 -5
- package/src/deepscientist/mcp/server.py +124 -3
- package/src/deepscientist/prompts/builder.py +113 -11
- package/src/deepscientist/quest/service.py +247 -31
- package/src/deepscientist/runners/codex.py +121 -22
- package/src/deepscientist/runners/runtime_overrides.py +6 -0
- package/src/deepscientist/shared.py +33 -14
- package/src/prompts/connectors/qq.md +2 -1
- package/src/prompts/connectors/weixin.md +2 -1
- package/src/prompts/contracts/shared_interaction.md +4 -1
- package/src/prompts/system.md +59 -9
- package/src/skills/analysis-campaign/SKILL.md +46 -6
- package/src/skills/analysis-campaign/references/campaign-plan-template.md +21 -8
- package/src/skills/baseline/SKILL.md +1 -1
- package/src/skills/decision/SKILL.md +1 -1
- package/src/skills/experiment/SKILL.md +1 -1
- package/src/skills/finalize/SKILL.md +1 -1
- package/src/skills/idea/SKILL.md +1 -1
- package/src/skills/intake-audit/SKILL.md +1 -1
- package/src/skills/rebuttal/SKILL.md +74 -1
- package/src/skills/rebuttal/references/response-letter-template.md +55 -11
- package/src/skills/review/SKILL.md +118 -1
- package/src/skills/review/references/experiment-todo-template.md +23 -0
- package/src/skills/review/references/review-report-template.md +16 -0
- package/src/skills/review/references/revision-log-template.md +4 -0
- package/src/skills/scout/SKILL.md +1 -1
- package/src/skills/write/SKILL.md +168 -7
- package/src/skills/write/references/paper-experiment-matrix-template.md +131 -0
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-D0mTXG4-.js → AiManusChatView-CnJcXynW.js} +12 -12
- package/src/ui/dist/assets/{AnalysisPlugin-Db0cTXxm.js → AnalysisPlugin-DeyzPEhV.js} +1 -1
- package/src/ui/dist/assets/{CliPlugin-DrV8je02.js → CliPlugin-CB1YODQn.js} +9 -9
- package/src/ui/dist/assets/{CodeEditorPlugin-QXMSCH71.js → CodeEditorPlugin-B-xicq1e.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-7hhtWj_E.js → CodeViewerPlugin-DT54ysXa.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-BWMSnRJe.js → DocViewerPlugin-DQtKT-VD.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-7J9h9Vy_.js → GitDiffViewerPlugin-hqHbCfnv.js} +20 -20
- package/src/ui/dist/assets/{ImageViewerPlugin-CHJl_0lr.js → ImageViewerPlugin-OcVo33jV.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-1qSow1es.js → LabCopilotPanel-DdGwhEUV.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-eQpPPCEp.js → LabPlugin-Ciz1gDaX.js} +2 -2
- package/src/ui/dist/assets/{LatexPlugin-BwRfi89Z.js → LatexPlugin-BhmjNQRC.js} +37 -11
- package/src/ui/dist/assets/{MarkdownViewerPlugin-836PVQWV.js → MarkdownViewerPlugin-BzdVH9Bx.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-C2y_556i.js → MarketplacePlugin-DmyHspXt.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-DIX7Mlzu.js → NotebookEditor-BMXKrDRk.js} +1 -1
- package/src/ui/dist/assets/{NotebookEditor-BRzJbGsn.js → NotebookEditor-BTVYRGkm.js} +11 -11
- package/src/ui/dist/assets/{PdfLoader-DzRaTAlq.js → PdfLoader-CvcjJHXv.js} +1 -1
- package/src/ui/dist/assets/{PdfMarkdownPlugin-DZUfIUnp.js → PdfMarkdownPlugin-DW2ej8Vk.js} +2 -2
- package/src/ui/dist/assets/{PdfViewerPlugin-BwtICzue.js → PdfViewerPlugin-CmlDxbhU.js} +10 -10
- package/src/ui/dist/assets/{SearchPlugin-DHeIAMsx.js → SearchPlugin-DAjQZPSv.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-C3tCmFox.js → TextViewerPlugin-C-nVAZb_.js} +5 -5
- package/src/ui/dist/assets/{VNCViewer-CQsKVm3t.js → VNCViewer-D7-dIYon.js} +10 -10
- package/src/ui/dist/assets/{bot-BEA2vWuK.js → bot-C_G4WtNI.js} +1 -1
- package/src/ui/dist/assets/{code-XfbSR8K2.js → code-Cd7WfiWq.js} +1 -1
- package/src/ui/dist/assets/{file-content-BjxNaIfy.js → file-content-B57zsL9y.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-D_lLVQk0.js → file-diff-panel-DVoheLFq.js} +1 -1
- package/src/ui/dist/assets/{file-socket-D9x_5vlY.js → file-socket-B5kXFxZP.js} +1 -1
- package/src/ui/dist/assets/{image-BhWT33W1.js → image-LLOjkMHF.js} +1 -1
- package/src/ui/dist/assets/{index-Dqj-Mjb4.css → index-BQG-1s2o.css} +40 -2
- package/src/ui/dist/assets/{index--c4iXtuy.js → index-C3r2iGrp.js} +12 -12
- package/src/ui/dist/assets/{index-DZTZ8mWP.js → index-CLQauncb.js} +911 -120
- package/src/ui/dist/assets/{index-PJbSbPTy.js → index-Dxa2eYMY.js} +1 -1
- package/src/ui/dist/assets/{index-BDxipwrC.js → index-hOUOWbW2.js} +2 -2
- package/src/ui/dist/assets/{monaco-K8izTGgo.js → monaco-BGGAEii3.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-DfBors6y.js → pdf-effect-queue-DlEr1_y5.js} +1 -1
- package/src/ui/dist/assets/{popover-yFK1J4fL.js → popover-CWJbJuYY.js} +1 -1
- package/src/ui/dist/assets/{project-sync-PENr2zcz.js → project-sync-CRJiucYO.js} +18 -4
- package/src/ui/dist/assets/{select-CAbJDfYv.js → select-CoHB7pvH.js} +2 -2
- package/src/ui/dist/assets/{sigma-DEuYJqTl.js → sigma-D5aJWR8J.js} +1 -1
- package/src/ui/dist/assets/{square-check-big-omoSUmcd.js → square-check-big-DUK_mnkS.js} +1 -1
- package/src/ui/dist/assets/{trash--F119N47.js → trash-ChU3SEE3.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-D31UR23I.js → useCliAccess-BrJBV3tY.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-BH6KcMzq.js → useFileDiffOverlay-C2OQaVWc.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-CZ613PM5.js → wrap-text-C7Qqh-om.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-BgDLAv3z.js → zoom-out-rtX0FKya.js} +1 -1
- package/src/ui/dist/index.html +2 -2
|
@@ -115,13 +115,21 @@ type StartResearchTemplate = {
|
|
|
115
115
|
baseline_variant_id: string
|
|
116
116
|
baseline_urls: string
|
|
117
117
|
paper_urls: string
|
|
118
|
+
review_materials: string
|
|
118
119
|
runtime_constraints: string
|
|
119
120
|
objectives: string
|
|
120
121
|
need_research_paper: boolean
|
|
121
122
|
research_intensity: 'light' | 'balanced' | 'sprint'
|
|
122
123
|
decision_policy: 'autonomous' | 'user_gated'
|
|
123
124
|
launch_mode: 'standard' | 'custom'
|
|
124
|
-
custom_profile: 'continue_existing_state' | 'revision_rebuttal' | 'freeform'
|
|
125
|
+
custom_profile: 'continue_existing_state' | 'review_audit' | 'revision_rebuttal' | 'freeform'
|
|
126
|
+
review_followup_policy: 'audit_only' | 'auto_execute_followups' | 'user_gated_followups'
|
|
127
|
+
baseline_execution_policy:
|
|
128
|
+
| 'auto'
|
|
129
|
+
| 'must_reproduce_or_verify'
|
|
130
|
+
| 'reuse_existing_only'
|
|
131
|
+
| 'skip_unless_blocking'
|
|
132
|
+
manuscript_edit_mode: 'none' | 'copy_ready_text' | 'latex_required'
|
|
125
133
|
entry_state_summary: string
|
|
126
134
|
review_summary: string
|
|
127
135
|
custom_brief: string
|
|
@@ -187,6 +195,9 @@ type StartResearchContractFields = {
|
|
|
187
195
|
decision_policy,
|
|
188
196
|
launch_mode,
|
|
189
197
|
custom_profile,
|
|
198
|
+
review_followup_policy,
|
|
199
|
+
baseline_execution_policy,
|
|
200
|
+
manuscript_edit_mode,
|
|
190
201
|
scope,
|
|
191
202
|
baseline_mode,
|
|
192
203
|
resource_policy,
|
|
@@ -196,6 +207,7 @@ type StartResearchContractFields = {
|
|
|
196
207
|
objectives: string[],
|
|
197
208
|
baseline_urls: string[],
|
|
198
209
|
paper_urls: string[],
|
|
210
|
+
review_materials: string[],
|
|
199
211
|
entry_state_summary,
|
|
200
212
|
review_summary,
|
|
201
213
|
custom_brief,
|
|
@@ -265,11 +277,19 @@ type StartResearchContractFields = {
|
|
|
265
277
|
**`baseline_urls`**
|
|
266
278
|
|
|
267
279
|
- 当没有 registry baseline 时,作为恢复 baseline 的候选来源。
|
|
280
|
+
- 可以填写网络链接,也可以直接填写绝对本地文件 / 文件夹路径。
|
|
268
281
|
- 提交时转成 `string[]`。
|
|
269
282
|
|
|
270
283
|
**`paper_urls`**
|
|
271
284
|
|
|
272
|
-
- 论文、代码仓库、benchmark、leaderboard
|
|
285
|
+
- 论文、代码仓库、benchmark、leaderboard、manuscript 路径等参考资料。
|
|
286
|
+
- 可以填写网络链接,也可以直接填写绝对本地文件 / 文件夹路径。
|
|
287
|
+
- 提交时转成 `string[]`。
|
|
288
|
+
|
|
289
|
+
**`review_materials`**
|
|
290
|
+
|
|
291
|
+
- 主要用于 `review_audit` 或 `revision_rebuttal`。
|
|
292
|
+
- 每行填写一个 URL,或一个绝对本地文件 / 文件夹路径,用于 reviewer comments、decision letter、meta-review 或 revision packet。
|
|
273
293
|
- 提交时转成 `string[]`。
|
|
274
294
|
|
|
275
295
|
### 约束与目标
|
|
@@ -325,12 +345,49 @@ type StartResearchContractFields = {
|
|
|
325
345
|
- `continue_existing_state`
|
|
326
346
|
- 先审计已有 baseline、结果、草稿或混合资产
|
|
327
347
|
- prompt builder 会显式引导 agent 优先打开 `intake-audit`
|
|
348
|
+
- `review_audit`
|
|
349
|
+
- 这是一个对现有 draft / paper package 做独立 skeptical 审计的任务
|
|
350
|
+
- prompt builder 会显式引导 agent 优先打开 `review`
|
|
328
351
|
- `revision_rebuttal`
|
|
329
352
|
- 这是一个审稿回复、revision、rebuttal 类型任务
|
|
330
353
|
- prompt builder 会显式引导 agent 优先打开 `rebuttal`
|
|
331
354
|
- `freeform`
|
|
355
|
+
- 这是“其它”入口
|
|
332
356
|
- 以自定义 brief 为主,尽量少做额外假设
|
|
333
357
|
|
|
358
|
+
**`baseline_execution_policy`**
|
|
359
|
+
|
|
360
|
+
- 仅在 `launch_mode = custom` 时有意义。
|
|
361
|
+
- `auto`
|
|
362
|
+
- 让启动合同和当前证据自己决定
|
|
363
|
+
- `must_reproduce_or_verify`
|
|
364
|
+
- 在 reviewer-linked 的后续工作之前,先验证或恢复 rebuttal 关键依赖的 baseline / comparator
|
|
365
|
+
- `reuse_existing_only`
|
|
366
|
+
- 默认信任当前 baseline / 结果,除非它们明显不一致或不可用
|
|
367
|
+
- `skip_unless_blocking`
|
|
368
|
+
- 默认跳过 baseline 重跑,只有当某个 review / rebuttal 条目明确依赖缺失 comparator 时才补跑
|
|
369
|
+
|
|
370
|
+
**`review_followup_policy`**
|
|
371
|
+
|
|
372
|
+
- 主要用于 `review_audit`。
|
|
373
|
+
- `audit_only`
|
|
374
|
+
- 只完成审计产物和路由建议
|
|
375
|
+
- `auto_execute_followups`
|
|
376
|
+
- 审计后自动继续进入合理的实验和论文修改
|
|
377
|
+
- `user_gated_followups`
|
|
378
|
+
- 先完成审计,再在昂贵后续动作前等待你的批准
|
|
379
|
+
|
|
380
|
+
**`manuscript_edit_mode`**
|
|
381
|
+
|
|
382
|
+
- 主要用于 `review_audit` 和 `revision_rebuttal`。
|
|
383
|
+
- `none`
|
|
384
|
+
- 只输出规划产物
|
|
385
|
+
- `copy_ready_text`
|
|
386
|
+
- 输出 section-level 的可直接粘贴修改文本
|
|
387
|
+
- `latex_required`
|
|
388
|
+
- 优先把提供的 LaTeX 树当作写作表面,并输出 LaTeX-ready 的替换文本
|
|
389
|
+
- 如果选择这个模式,最好同时通过本地路径 / 文件夹输入提供 LaTeX 源目录
|
|
390
|
+
|
|
334
391
|
**`entry_state_summary`**
|
|
335
392
|
|
|
336
393
|
- 用自然语言概括当前已经存在什么。
|
|
@@ -387,6 +444,9 @@ type StartResearchContractFields = {
|
|
|
387
444
|
- `custom + continue_existing_state`
|
|
388
445
|
- 告诉 agent 先整理和信任排序已有资产
|
|
389
446
|
- 明确优先 `intake-audit`
|
|
447
|
+
- `custom + review_audit`
|
|
448
|
+
- 告诉 agent 当前 draft / paper 状态就是主动合同
|
|
449
|
+
- 明确优先 `review`
|
|
390
450
|
- `custom + revision_rebuttal`
|
|
391
451
|
- 告诉 agent 先理解 reviewer comments 和当前论文状态
|
|
392
452
|
- 明确优先 `rebuttal`
|
|
@@ -486,6 +546,9 @@ type StartResearchContractFields = {
|
|
|
486
546
|
"decision_policy": "user_gated",
|
|
487
547
|
"launch_mode": "custom",
|
|
488
548
|
"custom_profile": "revision_rebuttal",
|
|
549
|
+
"review_followup_policy": "audit_only",
|
|
550
|
+
"baseline_execution_policy": "skip_unless_blocking",
|
|
551
|
+
"manuscript_edit_mode": "latex_required",
|
|
489
552
|
"scope": "baseline_plus_direction",
|
|
490
553
|
"baseline_mode": "restore_from_url",
|
|
491
554
|
"resource_policy": "balanced",
|
|
@@ -499,6 +562,9 @@ type StartResearchContractFields = {
|
|
|
499
562
|
],
|
|
500
563
|
"baseline_urls": [],
|
|
501
564
|
"paper_urls": [],
|
|
565
|
+
"review_materials": [
|
|
566
|
+
"/absolute/path/to/review-comments.md"
|
|
567
|
+
],
|
|
502
568
|
"entry_state_summary": "A draft and previous experiment outputs already exist.",
|
|
503
569
|
"review_summary": "Reviewers asked for one stronger ablation, one extra baseline, and a clearer limitation paragraph.",
|
|
504
570
|
"custom_brief": "Treat the current manuscript and review packet as the active contract."
|
|
@@ -509,7 +575,7 @@ type StartResearchContractFields = {
|
|
|
509
575
|
## 运行时意义
|
|
510
576
|
|
|
511
577
|
- `startup_contract` 是项目的持久状态,不只是 UI 临时字段。
|
|
512
|
-
- 后续 prompt builder 还会继续读取 `launch_mode`、`custom_profile`、`entry_state_summary`、`review_summary`、`custom_brief`。
|
|
578
|
+
- 后续 prompt builder 还会继续读取 `launch_mode`、`custom_profile`、`review_followup_policy`、`baseline_execution_policy`、`manuscript_edit_mode`、`entry_state_summary`、`review_summary`、`review_materials`、`custom_brief`。
|
|
513
579
|
- 所以 `Start Research` 不只影响第一轮,还会影响后续路由判断。
|
|
514
580
|
|
|
515
581
|
## 修改检查清单
|
package/docs/zh/09_DOCTOR.md
CHANGED
|
@@ -10,12 +10,20 @@
|
|
|
10
10
|
npm install -g @researai/deepscientist
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
2. 先确保 Codex
|
|
13
|
+
2. 先确保 Codex 自己已经可用:
|
|
14
|
+
|
|
15
|
+
默认 OpenAI 路径:
|
|
14
16
|
|
|
15
17
|
```bash
|
|
16
18
|
codex --login
|
|
17
19
|
```
|
|
18
20
|
|
|
21
|
+
provider-backed profile 路径:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
codex --profile minimax
|
|
25
|
+
```
|
|
26
|
+
|
|
19
27
|
如果 `codex` 缺失,请显式修复:
|
|
20
28
|
|
|
21
29
|
```bash
|
|
@@ -81,6 +89,23 @@ codex --login
|
|
|
81
89
|
|
|
82
90
|
先完成一次登录,再重新执行 `ds doctor`。
|
|
83
91
|
|
|
92
|
+
### Codex profile 在终端里可用,但 DeepScientist 还是失败
|
|
93
|
+
|
|
94
|
+
请显式让 DeepScientist 使用同一个 profile:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
ds doctor --codex-profile minimax
|
|
98
|
+
ds --codex-profile minimax
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
把这里的 `minimax` 换成你的真实 profile 名,例如 `m27`、`glm`、`ark`、`bailian`。
|
|
102
|
+
|
|
103
|
+
同时检查:
|
|
104
|
+
|
|
105
|
+
- 启动 DeepScientist 的这个 shell 中,provider API key 仍然可见
|
|
106
|
+
- 该 profile 指向的是 provider 的 Coding Plan endpoint,而不是普通通用 API endpoint
|
|
107
|
+
- 如果模型应该由 profile 自己决定,请在 `~/DeepScientist/config/runners.yaml` 中使用 `model: inherit`
|
|
108
|
+
|
|
84
109
|
### 当前配置的 Codex 模型不可用
|
|
85
110
|
|
|
86
111
|
DeepScientist 会在启动前强制做一次真实的 Codex hello 探测。当前版本里,这个探测会先使用:
|
|
@@ -95,6 +120,8 @@ DeepScientist 会在启动前强制做一次真实的 Codex hello 探测。当
|
|
|
95
120
|
ds doctor
|
|
96
121
|
```
|
|
97
122
|
|
|
123
|
+
对于 provider-backed 的 Codex profile,通常建议直接使用 `model: inherit`。
|
|
124
|
+
|
|
98
125
|
### 没有安装 `uv`
|
|
99
126
|
|
|
100
127
|
正常情况下,第一次运行 `ds` 会自动在本地安装 `uv`。如果自动安装失败,再手动执行:
|
|
@@ -118,12 +118,12 @@ DeepScientist 常见有两种使用方式:
|
|
|
118
118
|
|
|
119
119
|
这两栏的目的,是在第一轮开始前尽量减少歧义。
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
把仓库或绝对本地文件 / 文件夹路径放进 `Baseline links`,适合这些情况:
|
|
122
122
|
|
|
123
123
|
- baseline 必须来自某个特定官方仓库
|
|
124
124
|
- quest 需要先恢复指定实现
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
把论文、manuscript 路径或关键材料放进 `Paper / reference sources`,适合这些情况:
|
|
127
127
|
|
|
128
128
|
- 任务由某篇论文定义
|
|
129
129
|
- 评测协议来自某个明确来源
|
|
@@ -131,6 +131,9 @@ DeepScientist 常见有两种使用方式:
|
|
|
131
131
|
|
|
132
132
|
如果你已经知道 baseline 和论文,不要把它们藏在主请求正文里,应该放进专门字段。
|
|
133
133
|
|
|
134
|
+
这两个参考字段不是只能填网络链接。
|
|
135
|
+
你也可以直接填写绝对本地文件路径,或者绝对本地文件夹路径。
|
|
136
|
+
|
|
134
137
|
### 4.5 Reusable baseline
|
|
135
138
|
|
|
136
139
|
只有当你已经把某个可信 baseline 导入了 registry,才需要选择它。
|
|
@@ -177,6 +180,22 @@ DeepScientist 常见有两种使用方式:
|
|
|
177
180
|
- `Standard` 让 quest 按普通研究主线启动
|
|
178
181
|
- `Research paper = On` 可以把分析与写作保持在范围内
|
|
179
182
|
|
|
183
|
+
如果你把 `Launch mode` 切到 `Custom`,要进一步明确自定义任务类型:
|
|
184
|
+
|
|
185
|
+
- `Continue existing state`
|
|
186
|
+
- 适合已有资产很多、希望先复用再决策的任务
|
|
187
|
+
- `Review`
|
|
188
|
+
- 适合已有较完整 draft / paper package,想先做一次独立 skeptical 审计
|
|
189
|
+
- `Rebuttal / revision`
|
|
190
|
+
- 适合 reviewer comments 驱动,需要把评论映射成补实验、改文和 response letter 的任务
|
|
191
|
+
- `Other / freeform`
|
|
192
|
+
- 适合其他不完全属于标准 custom 类型的任务
|
|
193
|
+
|
|
194
|
+
如果你选择的是 `Review`,还要继续决定:
|
|
195
|
+
|
|
196
|
+
- 审计后是直接停止,还是自动继续补实验和改稿
|
|
197
|
+
- 论文修改输出是普通可直接替换文本,还是 LaTeX-ready 文本
|
|
198
|
+
|
|
180
199
|
### 4.8 Runtime constraints
|
|
181
200
|
|
|
182
201
|
这一栏应该写“硬规则”,而不是写愿望。
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# 15 Codex Provider 配置
|
|
2
|
+
|
|
3
|
+
DeepScientist 不会为 MiniMax、GLM、火山方舟、阿里百炼单独实现一套 provider 适配器。
|
|
4
|
+
|
|
5
|
+
它复用的是你本机已经能正常工作的 Codex CLI 配置。
|
|
6
|
+
|
|
7
|
+
推荐顺序始终是:
|
|
8
|
+
|
|
9
|
+
1. 先让 Codex 自己能工作
|
|
10
|
+
2. 确认 `codex` 或 `codex --profile <name>` 在终端里可用
|
|
11
|
+
3. 运行 `ds doctor`
|
|
12
|
+
4. 再运行 `ds` 或 `ds --codex-profile <name>`
|
|
13
|
+
|
|
14
|
+
## 三种推荐使用方式
|
|
15
|
+
|
|
16
|
+
### 1. 默认 OpenAI 登录路径
|
|
17
|
+
|
|
18
|
+
如果你的 Codex CLI 走的是标准 OpenAI 登录流,就用这一条。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
codex --login
|
|
22
|
+
ds doctor
|
|
23
|
+
ds
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. 临时使用 provider profile
|
|
27
|
+
|
|
28
|
+
如果你已经有一个可用的 Codex profile,例如 `minimax`、`glm`、`ark`、`bailian`,最简单的方式就是直接在启动 `ds` 时透传它。
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
codex --profile minimax
|
|
32
|
+
ds doctor --codex-profile minimax
|
|
33
|
+
ds --codex-profile minimax
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
这是最简单的路径。只是临时试用某个 provider 时,不需要先改 `runners.yaml`。
|
|
37
|
+
|
|
38
|
+
### 3. 持久化 provider profile
|
|
39
|
+
|
|
40
|
+
如果你希望 DeepScientist 之后默认就走这个 profile,可以写进 `runners.yaml`:
|
|
41
|
+
|
|
42
|
+
```yaml
|
|
43
|
+
codex:
|
|
44
|
+
enabled: true
|
|
45
|
+
binary: codex
|
|
46
|
+
config_dir: ~/.codex
|
|
47
|
+
profile: minimax
|
|
48
|
+
model: inherit
|
|
49
|
+
model_reasoning_effort: xhigh
|
|
50
|
+
approval_policy: on-request
|
|
51
|
+
sandbox_mode: workspace-write
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
注意:
|
|
55
|
+
|
|
56
|
+
- 对 provider-backed 的 Codex profile,建议优先使用 `model: inherit`
|
|
57
|
+
- 除非你非常确定该 provider 接受你要显式传入的模型名,否则不要再额外硬写一个模型
|
|
58
|
+
- DeepScientist 会复用你终端里同一个 `~/.codex/config.toml` 与环境变量
|
|
59
|
+
|
|
60
|
+
## Provider 一览
|
|
61
|
+
|
|
62
|
+
| Provider | 官方文档 | 是否需要 Codex 登录 | DeepScientist 应该怎么用 |
|
|
63
|
+
|---|---|---|---|
|
|
64
|
+
| OpenAI | 正常 Codex 配置即可 | 是 | 不需要 profile,直接 `ds` |
|
|
65
|
+
| MiniMax | [MiniMax Codex CLI](https://platform.minimaxi.com/docs/coding-plan/codex-cli) | 否 | 使用你自己的 Codex profile,例如 `ds --codex-profile minimax` |
|
|
66
|
+
| GLM | [GLM Coding Plan:其他工具](https://docs.bigmodel.cn/cn/coding-plan/tool/others) | 否 | 使用一个指向 GLM coding endpoint 的 Codex profile |
|
|
67
|
+
| 火山方舟 | [Ark Coding Plan 总览](https://www.volcengine.com/docs/82379/1925114?lang=zh) | 否 | 使用一个指向 Ark coding endpoint 的 Codex profile |
|
|
68
|
+
| 阿里百炼 | [百炼 Coding Plan:其他工具](https://help.aliyun.com/zh/model-studio/other-tools-coding-plan) | 否 | 使用一个指向 Bailian coding endpoint 的 Codex profile |
|
|
69
|
+
|
|
70
|
+
## OpenAI
|
|
71
|
+
|
|
72
|
+
### 需要准备什么
|
|
73
|
+
|
|
74
|
+
- 正常安装的 Codex CLI
|
|
75
|
+
- 已成功执行过一次 `codex --login`,或者在 `codex` 交互界面里完成首次认证
|
|
76
|
+
|
|
77
|
+
### DeepScientist 命令
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
ds doctor
|
|
81
|
+
ds
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 持久化 runner 配置
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
codex:
|
|
88
|
+
enabled: true
|
|
89
|
+
binary: codex
|
|
90
|
+
config_dir: ~/.codex
|
|
91
|
+
profile: ""
|
|
92
|
+
model: gpt-5.4
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## MiniMax
|
|
96
|
+
|
|
97
|
+
MiniMax 是最典型的 profile 模式。它的官方 Codex CLI 文档直接给了自定义 provider 的配置方式,并明确写了 `requires_openai_auth = false`。
|
|
98
|
+
|
|
99
|
+
官方文档:
|
|
100
|
+
|
|
101
|
+
- <https://platform.minimaxi.com/docs/coding-plan/codex-cli>
|
|
102
|
+
|
|
103
|
+
### 需要准备什么
|
|
104
|
+
|
|
105
|
+
- 已安装 Codex CLI
|
|
106
|
+
- 在启动 Codex 和 DeepScientist 的 shell 中可见的 `MINIMAX_API_KEY`
|
|
107
|
+
- `~/.codex/config.toml` 中已经配置好的 Codex profile
|
|
108
|
+
|
|
109
|
+
### Codex 侧配置
|
|
110
|
+
|
|
111
|
+
MiniMax 官方页面给了真实的 Codex custom provider 示例。profile 名称由你自己决定。下面用 `minimax` 作为示例;如果你已经配置成 `m27`,就继续使用 `m27`。
|
|
112
|
+
|
|
113
|
+
```toml
|
|
114
|
+
[model_providers.minimax]
|
|
115
|
+
name = "MiniMax Chat Completions API"
|
|
116
|
+
base_url = "https://api.minimaxi.com/v1"
|
|
117
|
+
env_key = "MINIMAX_API_KEY"
|
|
118
|
+
wire_api = "chat"
|
|
119
|
+
requires_openai_auth = false
|
|
120
|
+
request_max_retries = 4
|
|
121
|
+
stream_max_retries = 10
|
|
122
|
+
stream_idle_timeout_ms = 300000
|
|
123
|
+
|
|
124
|
+
[profiles.minimax]
|
|
125
|
+
model = "codex-MiniMax-M2.5"
|
|
126
|
+
model_provider = "minimax"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
然后执行:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
export MINIMAX_API_KEY="..."
|
|
133
|
+
codex --profile minimax
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### DeepScientist 命令
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
ds doctor --codex-profile minimax
|
|
140
|
+
ds --codex-profile minimax
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 持久化 runner 配置
|
|
144
|
+
|
|
145
|
+
```yaml
|
|
146
|
+
codex:
|
|
147
|
+
enabled: true
|
|
148
|
+
binary: codex
|
|
149
|
+
config_dir: ~/.codex
|
|
150
|
+
profile: minimax
|
|
151
|
+
model: inherit
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## GLM
|
|
155
|
+
|
|
156
|
+
GLM 的官方文档把 Coding Plan 描述成 OpenAI-compatible 的 coding endpoint,而不是单独的 Codex 登录流程。
|
|
157
|
+
|
|
158
|
+
官方文档:
|
|
159
|
+
|
|
160
|
+
- <https://docs.bigmodel.cn/cn/coding-plan/tool/others>
|
|
161
|
+
- <https://docs.bigmodel.cn/cn/coding-plan/faq>
|
|
162
|
+
|
|
163
|
+
### 官方给出的 provider 关键值
|
|
164
|
+
|
|
165
|
+
- Base URL:`https://open.bigmodel.cn/api/coding/paas/v4`
|
|
166
|
+
- API Key:你的 GLM Coding Plan key
|
|
167
|
+
- Model:文档中明确写了 `GLM-4.7`,部分场景也支持 `GLM-5`
|
|
168
|
+
|
|
169
|
+
### 推荐做法
|
|
170
|
+
|
|
171
|
+
GLM 当前没有像 MiniMax 那样单独给出一篇 Codex CLI 专页。对 DeepScientist 来说,最稳的做法是:
|
|
172
|
+
|
|
173
|
+
1. 在 `~/.codex/config.toml` 中创建一个指向上面 GLM coding endpoint 的 Codex profile
|
|
174
|
+
2. 先确保 `codex --profile glm` 在终端里能工作
|
|
175
|
+
3. 再让 DeepScientist 复用同一个 profile
|
|
176
|
+
|
|
177
|
+
### DeepScientist 命令
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
ds doctor --codex-profile glm
|
|
181
|
+
ds --codex-profile glm
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 持久化 runner 配置
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
codex:
|
|
188
|
+
enabled: true
|
|
189
|
+
binary: codex
|
|
190
|
+
config_dir: ~/.codex
|
|
191
|
+
profile: glm
|
|
192
|
+
model: inherit
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 火山方舟
|
|
196
|
+
|
|
197
|
+
火山方舟的 Coding Plan 官方文档明确列出了 Codex CLI。
|
|
198
|
+
|
|
199
|
+
官方文档:
|
|
200
|
+
|
|
201
|
+
- <https://www.volcengine.com/docs/82379/1925114?lang=zh>
|
|
202
|
+
|
|
203
|
+
### 官方给出的 provider 关键值
|
|
204
|
+
|
|
205
|
+
- OpenAI-compatible Base URL:`https://ark.cn-beijing.volces.com/api/coding/v3`
|
|
206
|
+
- 支持的 coding 模型:`doubao-seed-code-preview-latest`、`ark-code-latest`
|
|
207
|
+
- 必须使用 Coding Plan 的 key 和对应的 Coding Plan endpoint
|
|
208
|
+
|
|
209
|
+
### 推荐做法
|
|
210
|
+
|
|
211
|
+
先创建一个指向 Ark coding endpoint 的 Codex profile,并先验证:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
codex --profile ark
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
然后再启动 DeepScientist:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
ds doctor --codex-profile ark
|
|
221
|
+
ds --codex-profile ark
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 持久化 runner 配置
|
|
225
|
+
|
|
226
|
+
```yaml
|
|
227
|
+
codex:
|
|
228
|
+
enabled: true
|
|
229
|
+
binary: codex
|
|
230
|
+
config_dir: ~/.codex
|
|
231
|
+
profile: ark
|
|
232
|
+
model: inherit
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## 阿里百炼
|
|
236
|
+
|
|
237
|
+
阿里百炼的 Coding Plan 官方文档也是 OpenAI-compatible endpoint 路径。它特别强调:必须使用 Coding Plan 专属 key 和 endpoint,而不是普通平台 endpoint。
|
|
238
|
+
|
|
239
|
+
官方文档:
|
|
240
|
+
|
|
241
|
+
- <https://help.aliyun.com/zh/model-studio/other-tools-coding-plan>
|
|
242
|
+
- <https://help.aliyun.com/zh/model-studio/coding-plan-faq>
|
|
243
|
+
|
|
244
|
+
### 官方给出的 provider 关键值
|
|
245
|
+
|
|
246
|
+
- OpenAI-compatible Base URL:`https://coding.dashscope.aliyuncs.com/v1`
|
|
247
|
+
- API Key:Coding Plan 专属 key,通常形如 `sk-sp-...`
|
|
248
|
+
- Model:请以当前百炼 Coding Plan 概览页支持的模型为准
|
|
249
|
+
|
|
250
|
+
### 推荐做法
|
|
251
|
+
|
|
252
|
+
先创建一个指向 Bailian Coding Plan endpoint 的 Codex profile,并先验证:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
codex --profile bailian
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
然后再启动 DeepScientist:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
ds doctor --codex-profile bailian
|
|
262
|
+
ds --codex-profile bailian
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 持久化 runner 配置
|
|
266
|
+
|
|
267
|
+
```yaml
|
|
268
|
+
codex:
|
|
269
|
+
enabled: true
|
|
270
|
+
binary: codex
|
|
271
|
+
config_dir: ~/.codex
|
|
272
|
+
profile: bailian
|
|
273
|
+
model: inherit
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## 一份统一的排障清单
|
|
277
|
+
|
|
278
|
+
如果 provider-backed profile 在 DeepScientist 里还是失败:
|
|
279
|
+
|
|
280
|
+
1. 先手动运行 `codex --profile <name>`
|
|
281
|
+
2. 确认 provider API key 在同一个 shell 中可见
|
|
282
|
+
3. 确认 Base URL 使用的是 Coding Plan endpoint,而不是普通通用 API endpoint
|
|
283
|
+
4. DeepScientist 里优先保持 `model: inherit`
|
|
284
|
+
5. 运行 `ds doctor --codex-profile <name>`
|
|
285
|
+
6. 最后再运行 `ds --codex-profile <name>`
|
package/docs/zh/README.md
CHANGED
|
@@ -39,7 +39,6 @@ DeepScientist 灵活且易于使用,支持:
|
|
|
39
39
|
| [Dr. Claw](https://github.com/OpenLAIR/dr-claw) | Open-source | ✓ | | ✓ | | ✓ | |
|
|
40
40
|
| [FARS](https://analemma.ai/fars/) | Closed-source | ✓ | | | | | |
|
|
41
41
|
| [EvoScientist](https://github.com/EvoScientist/EvoScientist) | Open-source | ✓ | | ✓ | ✓ | ✓ | |
|
|
42
|
-
| [PaperClaw](https://github.com/meowscles69/PaperClaw) | Open-source | | | | | | ✓ |
|
|
43
42
|
| [ScienceClaw](https://github.com/beita6969/ScienceClaw) | Open-source | | | | ✓ | ✓ | |
|
|
44
43
|
| [claude-scholar](https://github.com/Galaxy-Dawn/claude-scholar) | Open-source | ✓ | | ✓ | ✓ | | |
|
|
45
44
|
| [Research-Claw](https://github.com/wentorai/Research-Claw) | Open-source | ✓ | | ✓ | ✓ | ✓ | |
|
|
@@ -77,6 +76,8 @@ DeepScientist 灵活且易于使用,支持:
|
|
|
77
76
|
|
|
78
77
|
- [00 快速开始](./00_QUICK_START.md)
|
|
79
78
|
从安装、启动,到创建第一个项目,先看这一篇。
|
|
79
|
+
- [15 Codex Provider 配置](./15_CODEX_PROVIDER_SETUP.md)
|
|
80
|
+
如果你准备通过 MiniMax、GLM、火山方舟、阿里百炼或其他 Codex profile 来运行 DeepScientist,先看这一篇。
|
|
80
81
|
- [12 引导式工作流教程](./12_GUIDED_WORKFLOW_TOUR.md)
|
|
81
82
|
按真实产品流程,逐步理解从首页到工作区应该怎么使用。
|
|
82
83
|
- [02 Start Research 参考](./02_START_RESEARCH_GUIDE.md)
|
|
@@ -115,6 +116,8 @@ DeepScientist 灵活且易于使用,支持:
|
|
|
115
116
|
|
|
116
117
|
- [09 启动诊断](./09_DOCTOR.md)
|
|
117
118
|
启动诊断、排查常见运行问题,先看这篇。
|
|
119
|
+
- [15 Codex Provider 配置](./15_CODEX_PROVIDER_SETUP.md)
|
|
120
|
+
如果问题更像出在 Codex profile、provider endpoint、API key 或模型配置上,优先看这篇。
|
|
118
121
|
- [01 设置参考](./01_SETTINGS_REFERENCE.md)
|
|
119
122
|
如果问题可能和配置、凭据或 connector 有关,再查这篇。
|
|
120
123
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@researai/deepscientist",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.12",
|
|
4
4
|
"description": "DeepScientist is not just a fully open-source autonomous scientific discovery system. It is also a research map that keeps growing from every round.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"files": [
|
package/pyproject.toml
CHANGED
|
@@ -22,7 +22,7 @@ from .service import (
|
|
|
22
22
|
_coerce_session_status,
|
|
23
23
|
_parse_progress_marker,
|
|
24
24
|
)
|
|
25
|
-
from ..shared import append_jsonl, ensure_dir, read_json, read_jsonl, utc_now
|
|
25
|
+
from ..shared import append_jsonl, ensure_dir, iter_jsonl, read_json, read_jsonl, utc_now
|
|
26
26
|
|
|
27
27
|
DEFAULT_STOP_GRACE_SECONDS = 5
|
|
28
28
|
TERMINAL_IO_POLL_SECONDS = 0.02
|
|
@@ -298,7 +298,7 @@ def run_monitor(session_dir: Path) -> int:
|
|
|
298
298
|
log_path.touch(exist_ok=True)
|
|
299
299
|
input_path.touch(exist_ok=True)
|
|
300
300
|
if not input_cursor_path.exists():
|
|
301
|
-
_atomic_write_json(input_cursor_path, {"offset":
|
|
301
|
+
_atomic_write_json(input_cursor_path, {"offset": sum(1 for _ in iter_jsonl(input_path)), "updated_at": utc_now()})
|
|
302
302
|
|
|
303
303
|
tool_env = os.environ.pop("DS_BASH_EXEC_TOOL_ENV", "")
|
|
304
304
|
env_payload = os.environ.copy()
|
|
@@ -451,9 +451,11 @@ def run_monitor(session_dir: Path) -> int:
|
|
|
451
451
|
if output_fd is not None and process.poll() is None:
|
|
452
452
|
cursor_payload = read_json(input_cursor_path, {}) or {}
|
|
453
453
|
offset = int(cursor_payload.get("offset") or 0)
|
|
454
|
-
|
|
455
|
-
if offset <
|
|
456
|
-
for entry in
|
|
454
|
+
total_input_entries = sum(1 for _ in iter_jsonl(input_path))
|
|
455
|
+
if offset < total_input_entries:
|
|
456
|
+
for index, entry in enumerate(iter_jsonl(input_path)):
|
|
457
|
+
if index < offset:
|
|
458
|
+
continue
|
|
457
459
|
raw_data = str(entry.get("data") or "")
|
|
458
460
|
if raw_data:
|
|
459
461
|
try:
|