@researai/deepscientist 1.5.11 → 1.5.13

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 (107) hide show
  1. package/README.md +8 -8
  2. package/bin/ds.js +375 -61
  3. package/docs/en/00_QUICK_START.md +55 -4
  4. package/docs/en/01_SETTINGS_REFERENCE.md +15 -0
  5. package/docs/en/02_START_RESEARCH_GUIDE.md +68 -4
  6. package/docs/en/09_DOCTOR.md +48 -4
  7. package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +21 -2
  8. package/docs/en/15_CODEX_PROVIDER_SETUP.md +382 -0
  9. package/docs/en/README.md +4 -0
  10. package/docs/zh/00_QUICK_START.md +54 -3
  11. package/docs/zh/01_SETTINGS_REFERENCE.md +15 -0
  12. package/docs/zh/02_START_RESEARCH_GUIDE.md +69 -3
  13. package/docs/zh/09_DOCTOR.md +48 -2
  14. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +21 -2
  15. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +383 -0
  16. package/docs/zh/README.md +4 -1
  17. package/package.json +2 -1
  18. package/pyproject.toml +1 -1
  19. package/src/deepscientist/__init__.py +1 -1
  20. package/src/deepscientist/bash_exec/monitor.py +7 -5
  21. package/src/deepscientist/bash_exec/service.py +84 -21
  22. package/src/deepscientist/channels/local.py +3 -3
  23. package/src/deepscientist/channels/qq.py +7 -7
  24. package/src/deepscientist/channels/relay.py +7 -7
  25. package/src/deepscientist/channels/weixin_ilink.py +90 -19
  26. package/src/deepscientist/cli.py +3 -0
  27. package/src/deepscientist/codex_cli_compat.py +117 -0
  28. package/src/deepscientist/config/models.py +1 -0
  29. package/src/deepscientist/config/service.py +173 -25
  30. package/src/deepscientist/daemon/app.py +314 -6
  31. package/src/deepscientist/doctor.py +1 -5
  32. package/src/deepscientist/mcp/server.py +124 -3
  33. package/src/deepscientist/prompts/builder.py +113 -11
  34. package/src/deepscientist/quest/service.py +247 -31
  35. package/src/deepscientist/runners/codex.py +132 -24
  36. package/src/deepscientist/runners/runtime_overrides.py +9 -0
  37. package/src/deepscientist/shared.py +33 -14
  38. package/src/prompts/connectors/qq.md +2 -1
  39. package/src/prompts/connectors/weixin.md +2 -1
  40. package/src/prompts/contracts/shared_interaction.md +4 -1
  41. package/src/prompts/system.md +59 -9
  42. package/src/skills/analysis-campaign/SKILL.md +46 -6
  43. package/src/skills/analysis-campaign/references/campaign-plan-template.md +21 -8
  44. package/src/skills/baseline/SKILL.md +1 -1
  45. package/src/skills/baseline/references/artifact-payload-examples.md +39 -0
  46. package/src/skills/decision/SKILL.md +1 -1
  47. package/src/skills/experiment/SKILL.md +1 -1
  48. package/src/skills/finalize/SKILL.md +1 -1
  49. package/src/skills/idea/SKILL.md +1 -1
  50. package/src/skills/intake-audit/SKILL.md +1 -1
  51. package/src/skills/rebuttal/SKILL.md +74 -1
  52. package/src/skills/rebuttal/references/response-letter-template.md +55 -11
  53. package/src/skills/review/SKILL.md +118 -1
  54. package/src/skills/review/references/experiment-todo-template.md +23 -0
  55. package/src/skills/review/references/review-report-template.md +16 -0
  56. package/src/skills/review/references/revision-log-template.md +4 -0
  57. package/src/skills/scout/SKILL.md +1 -1
  58. package/src/skills/write/SKILL.md +168 -7
  59. package/src/skills/write/references/paper-experiment-matrix-template.md +131 -0
  60. package/src/tui/dist/lib/connectorConfig.js +90 -0
  61. package/src/tui/dist/lib/qr.js +21 -0
  62. package/src/tui/package.json +2 -1
  63. package/src/ui/dist/assets/{AiManusChatView-D0mTXG4-.js → AiManusChatView-CnJcXynW.js} +12 -12
  64. package/src/ui/dist/assets/{AnalysisPlugin-Db0cTXxm.js → AnalysisPlugin-DeyzPEhV.js} +1 -1
  65. package/src/ui/dist/assets/{CliPlugin-DrV8je02.js → CliPlugin-CB1YODQn.js} +9 -9
  66. package/src/ui/dist/assets/{CodeEditorPlugin-QXMSCH71.js → CodeEditorPlugin-B-xicq1e.js} +8 -8
  67. package/src/ui/dist/assets/{CodeViewerPlugin-7hhtWj_E.js → CodeViewerPlugin-DT54ysXa.js} +5 -5
  68. package/src/ui/dist/assets/{DocViewerPlugin-BWMSnRJe.js → DocViewerPlugin-DQtKT-VD.js} +3 -3
  69. package/src/ui/dist/assets/{GitDiffViewerPlugin-7J9h9Vy_.js → GitDiffViewerPlugin-hqHbCfnv.js} +20 -20
  70. package/src/ui/dist/assets/{ImageViewerPlugin-CHJl_0lr.js → ImageViewerPlugin-OcVo33jV.js} +5 -5
  71. package/src/ui/dist/assets/{LabCopilotPanel-1qSow1es.js → LabCopilotPanel-DdGwhEUV.js} +11 -11
  72. package/src/ui/dist/assets/{LabPlugin-eQpPPCEp.js → LabPlugin-Ciz1gDaX.js} +2 -2
  73. package/src/ui/dist/assets/{LatexPlugin-BwRfi89Z.js → LatexPlugin-BhmjNQRC.js} +37 -11
  74. package/src/ui/dist/assets/{MarkdownViewerPlugin-836PVQWV.js → MarkdownViewerPlugin-BzdVH9Bx.js} +4 -4
  75. package/src/ui/dist/assets/{MarketplacePlugin-C2y_556i.js → MarketplacePlugin-DmyHspXt.js} +3 -3
  76. package/src/ui/dist/assets/{NotebookEditor-DIX7Mlzu.js → NotebookEditor-BMXKrDRk.js} +1 -1
  77. package/src/ui/dist/assets/{NotebookEditor-BRzJbGsn.js → NotebookEditor-BTVYRGkm.js} +11 -11
  78. package/src/ui/dist/assets/{PdfLoader-DzRaTAlq.js → PdfLoader-CvcjJHXv.js} +1 -1
  79. package/src/ui/dist/assets/{PdfMarkdownPlugin-DZUfIUnp.js → PdfMarkdownPlugin-DW2ej8Vk.js} +2 -2
  80. package/src/ui/dist/assets/{PdfViewerPlugin-BwtICzue.js → PdfViewerPlugin-CmlDxbhU.js} +10 -10
  81. package/src/ui/dist/assets/{SearchPlugin-DHeIAMsx.js → SearchPlugin-DAjQZPSv.js} +1 -1
  82. package/src/ui/dist/assets/{TextViewerPlugin-C3tCmFox.js → TextViewerPlugin-C-nVAZb_.js} +5 -5
  83. package/src/ui/dist/assets/{VNCViewer-CQsKVm3t.js → VNCViewer-D7-dIYon.js} +10 -10
  84. package/src/ui/dist/assets/{bot-BEA2vWuK.js → bot-C_G4WtNI.js} +1 -1
  85. package/src/ui/dist/assets/{code-XfbSR8K2.js → code-Cd7WfiWq.js} +1 -1
  86. package/src/ui/dist/assets/{file-content-BjxNaIfy.js → file-content-B57zsL9y.js} +1 -1
  87. package/src/ui/dist/assets/{file-diff-panel-D_lLVQk0.js → file-diff-panel-DVoheLFq.js} +1 -1
  88. package/src/ui/dist/assets/{file-socket-D9x_5vlY.js → file-socket-B5kXFxZP.js} +1 -1
  89. package/src/ui/dist/assets/{image-BhWT33W1.js → image-LLOjkMHF.js} +1 -1
  90. package/src/ui/dist/assets/{index-Dqj-Mjb4.css → index-BQG-1s2o.css} +40 -2
  91. package/src/ui/dist/assets/{index--c4iXtuy.js → index-C3r2iGrp.js} +12 -12
  92. package/src/ui/dist/assets/{index-DZTZ8mWP.js → index-CLQauncb.js} +911 -120
  93. package/src/ui/dist/assets/{index-PJbSbPTy.js → index-Dxa2eYMY.js} +1 -1
  94. package/src/ui/dist/assets/{index-BDxipwrC.js → index-hOUOWbW2.js} +2 -2
  95. package/src/ui/dist/assets/{monaco-K8izTGgo.js → monaco-BGGAEii3.js} +1 -1
  96. package/src/ui/dist/assets/{pdf-effect-queue-DfBors6y.js → pdf-effect-queue-DlEr1_y5.js} +1 -1
  97. package/src/ui/dist/assets/{popover-yFK1J4fL.js → popover-CWJbJuYY.js} +1 -1
  98. package/src/ui/dist/assets/{project-sync-PENr2zcz.js → project-sync-CRJiucYO.js} +18 -4
  99. package/src/ui/dist/assets/{select-CAbJDfYv.js → select-CoHB7pvH.js} +2 -2
  100. package/src/ui/dist/assets/{sigma-DEuYJqTl.js → sigma-D5aJWR8J.js} +1 -1
  101. package/src/ui/dist/assets/{square-check-big-omoSUmcd.js → square-check-big-DUK_mnkS.js} +1 -1
  102. package/src/ui/dist/assets/{trash--F119N47.js → trash-ChU3SEE3.js} +1 -1
  103. package/src/ui/dist/assets/{useCliAccess-D31UR23I.js → useCliAccess-BrJBV3tY.js} +1 -1
  104. package/src/ui/dist/assets/{useFileDiffOverlay-BH6KcMzq.js → useFileDiffOverlay-C2OQaVWc.js} +1 -1
  105. package/src/ui/dist/assets/{wrap-text-CZ613PM5.js → wrap-text-C7Qqh-om.js} +1 -1
  106. package/src/ui/dist/assets/{zoom-out-BgDLAv3z.js → zoom-out-rtX0FKya.js} +1 -1
  107. package/src/ui/dist/index.html +2 -2
@@ -36,7 +36,9 @@ See the full notice here:
36
36
  Prepare these first:
37
37
 
38
38
  - Node.js `>=18.18` and npm `>=9`; install them from the official download page: https://nodejs.org/en/download
39
- - a working Codex CLI setup; before the first `ds`, run `codex --login` (or `codex`) and finish authentication
39
+ - one working Codex path:
40
+ - default OpenAI login path: `codex --login` (or `codex`)
41
+ - provider-backed path: one working Codex profile such as `minimax`, `glm`, `ark`, or `bailian`
40
42
  - a model or API credential if your project needs external inference
41
43
  - GPU or server access if your experiments are compute-heavy
42
44
  - if you plan to run DeepScientist for real work, prepare Docker or another isolated environment and a dedicated non-root user
@@ -52,6 +54,10 @@ If you are still choosing a coding plan or subscription, these are practical sta
52
54
  - Alibaba Cloud Bailian Coding Plan: https://help.aliyun.com/zh/model-studio/coding-plan
53
55
  - Volcengine Ark Coding Plan: https://www.volcengine.com/docs/82379/1925115?lang=zh
54
56
 
57
+ If you plan to use a provider-backed Codex profile instead of the default OpenAI login flow, read this next:
58
+
59
+ - [15 Codex Provider Setup](./15_CODEX_PROVIDER_SETUP.md)
60
+
55
61
  ## 1. Install Node.js and DeepScientist
56
62
 
57
63
  DeepScientist currently supports Linux and macOS only.
@@ -73,7 +79,7 @@ npm install -g @researai/deepscientist
73
79
 
74
80
  This installs the `ds` command globally.
75
81
 
76
- DeepScientist depends on a working Codex CLI. The npm package tries to bring the bundled Codex dependency with it, but if `codex` is still missing afterward, repair it explicitly:
82
+ DeepScientist depends on a working Codex CLI. It prefers the `codex` already available on your machine and only falls back to the bundled npm dependency when no local Codex path is available. If `codex` is still missing afterward, repair it explicitly:
77
83
 
78
84
  ```bash
79
85
  npm install -g @openai/codex
@@ -89,6 +95,10 @@ This installs a lightweight TinyTeX runtime for local paper compilation.
89
95
 
90
96
  ## 2. Finish Codex Setup Before The First `ds`
91
97
 
98
+ Choose one of these two paths.
99
+
100
+ ### 2.1 Default OpenAI login path
101
+
92
102
  Run:
93
103
 
94
104
  ```bash
@@ -103,13 +113,54 @@ codex
103
113
 
104
114
  and finish the interactive authentication there.
105
115
 
106
- Then verify the environment before startup:
116
+ Then verify:
107
117
 
108
118
  ```bash
109
119
  ds doctor
110
120
  ```
111
121
 
112
- DeepScientist blocks startup until Codex can pass a real hello probe. In the current release, that probe first tries the runner model configured in `~/DeepScientist/config/runners.yaml`, which defaults to `gpt-5.4`. If that model is unavailable to your Codex setup, DeepScientist falls back to the current Codex default model and persists `model: inherit` for future runs.
122
+ ### 2.2 Provider-backed Codex profile path
123
+
124
+ If you already use a named Codex profile for MiniMax, GLM, Volcengine Ark, Alibaba Bailian, or another provider-backed path, verify that profile first in a terminal:
125
+
126
+ ```bash
127
+ codex --profile m27
128
+ ```
129
+
130
+ Then run DeepScientist through the same profile:
131
+
132
+ ```bash
133
+ ds doctor --codex-profile m27
134
+ ```
135
+
136
+ and later:
137
+
138
+ ```bash
139
+ ds --codex-profile m27
140
+ ```
141
+
142
+ If you need one specific Codex binary for this run, add `--codex` too:
143
+
144
+ ```bash
145
+ ds doctor --codex /absolute/path/to/codex --codex-profile m27
146
+ ds --codex /absolute/path/to/codex --codex-profile m27
147
+ ```
148
+
149
+ `m27` is the MiniMax profile name used consistently in this repo. MiniMax's own page currently uses `m21`, but the profile name is only a local alias; if you created a different name, use that same name in all commands.
150
+
151
+ DeepScientist blocks startup until Codex can pass a real hello probe. By default, the runner model in `~/DeepScientist/config/runners.yaml` is `gpt-5.4`. If your profile expects the model to come from the profile itself, use `model: inherit` in `runners.yaml`, or simply launch with `--codex-profile <name>` and let that session inherit the profile-defined model.
152
+
153
+ MiniMax note:
154
+
155
+ - if the current `@openai/codex` latest does not work with MiniMax, install `npm install -g @openai/codex@0.57.0`
156
+ - create a MiniMax `Coding Plan Key` first
157
+ - clear `OPENAI_API_KEY` and `OPENAI_BASE_URL` in the current shell before exporting `MINIMAX_API_KEY`
158
+ - use `https://api.minimaxi.com/v1`
159
+ - the `codex-MiniMax-*` model names shown on MiniMax's current Codex CLI page did not pass reliably through Codex CLI in local testing with the provided key
160
+ - the locally verified working model name is `MiniMax-M2.7`
161
+ - DeepScientist can auto-adapt MiniMax's profile-only `model_provider` / `model` config shape during probe and runtime
162
+ - if you also want plain terminal `codex --profile <name>` to work directly, add `model_provider = "minimax"` and `model = "MiniMax-M2.7"` at the top level of `~/.codex/config.toml`
163
+ - DeepScientist automatically downgrades `xhigh` to `high` when it detects an older Codex CLI that does not support `xhigh`
113
164
 
114
165
  ## 3. Start the Local Runtime
115
166
 
@@ -392,6 +392,7 @@ codex:
392
392
  enabled: true
393
393
  binary: codex
394
394
  config_dir: ~/.codex
395
+ profile: ""
395
396
  model: gpt-5.4
396
397
  model_reasoning_effort: xhigh
397
398
  approval_policy: on-request
@@ -429,6 +430,8 @@ claude:
429
430
  - UI label: `Binary`
430
431
  - Meaning: command name or absolute path used to launch the runner.
431
432
  - `Test` behavior: checks whether the binary is on `PATH`.
433
+ - Resolution order for `codex`: env override, explicit path, local `PATH`, then bundled fallback.
434
+ - One-off note: you can temporarily override this with `ds --codex /absolute/path/to/codex`.
432
435
  - First-run note: DeepScientist does not finish Codex authentication for you. Before the first `ds`, make sure `codex --login` (or `codex`) has completed successfully.
433
436
  - Repair note: if the bundled dependency is missing after `npm install -g @researai/deepscientist`, install Codex explicitly with `npm install -g @openai/codex`.
434
437
 
@@ -439,6 +442,16 @@ claude:
439
442
  - UI label: `Config directory`
440
443
  - Meaning: global runner home for auth and global config.
441
444
 
445
+ **`profile`**
446
+
447
+ - Type: `string`
448
+ - Default: `""`
449
+ - UI label: `Codex profile`
450
+ - Meaning: optional Codex profile name passed through as `codex --profile <name>`.
451
+ - Use this when your Codex CLI is already configured for a provider-backed setup such as MiniMax, GLM, Volcengine Ark, or Alibaba Bailian.
452
+ - One-off note: you can also leave this field empty and launch with `ds --codex-profile <name>`.
453
+ - Combined note: one-off profile and binary overrides can be combined as `ds --codex /absolute/path/to/codex --codex-profile <name>`.
454
+
442
455
  **`model`**
443
456
 
444
457
  - Type: `string`
@@ -446,6 +459,7 @@ claude:
446
459
  - UI label: `Default model`
447
460
  - Meaning: default model used when a project does not override it.
448
461
  - Startup note: DeepScientist's Codex readiness probe uses this configured model first. If your Codex account cannot access it, DeepScientist falls back to the current Codex default model and persists `model: inherit`.
462
+ - Provider-profile note: when `profile` is set, `model: inherit` is usually the right choice so the Codex profile itself controls the provider model.
449
463
 
450
464
  **`model_reasoning_effort`**
451
465
 
@@ -454,6 +468,7 @@ claude:
454
468
  - UI label: `Reasoning effort`
455
469
  - Allowed values: `""`, `minimal`, `low`, `medium`, `high`, `xhigh`
456
470
  - Meaning: default reasoning intensity.
471
+ - Compatibility note: when DeepScientist detects a Codex CLI older than `0.63.0`, it automatically downgrades `xhigh` to `high` for the startup probe and runner command. This covers MiniMax's currently recommended `@openai/codex@0.57.0` path.
457
472
 
458
473
  **`approval_policy`**
459
474
 
@@ -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
@@ -179,6 +187,9 @@ The dialog submits:
179
187
  decision_policy,
180
188
  launch_mode,
181
189
  custom_profile,
190
+ review_followup_policy,
191
+ baseline_execution_policy,
192
+ manuscript_edit_mode,
182
193
  scope,
183
194
  baseline_mode,
184
195
  resource_policy,
@@ -188,6 +199,7 @@ The dialog submits:
188
199
  objectives: string[],
189
200
  baseline_urls: string[],
190
201
  paper_urls: string[],
202
+ review_materials: string[],
191
203
  entry_state_summary,
192
204
  review_summary,
193
205
  custom_brief,
@@ -256,12 +268,18 @@ The dialog submits:
256
268
 
257
269
  **`baseline_urls`**
258
270
 
259
- - Fallback source links when there is no registered reusable baseline.
271
+ - Fallback source links or absolute local file/folder paths when there is no registered reusable baseline.
260
272
  - Submitted as `string[]`.
261
273
 
262
274
  **`paper_urls`**
263
275
 
264
- - Papers, repos, benchmarks, or leaderboards that shape early scouting.
276
+ - Papers, repos, manuscripts, benchmarks, leaderboards, or absolute local file/folder paths that shape early scouting or writing work.
277
+ - Submitted as `string[]`.
278
+
279
+ **`review_materials`**
280
+
281
+ - Only meaningful for `review_audit` or `revision_rebuttal`.
282
+ - Use one URL or one absolute local file/folder path per line for reviewer comments, decision letters, meta-review notes, or revision packets.
265
283
  - Submitted as `string[]`.
266
284
 
267
285
  ### Constraints and objectives
@@ -317,12 +335,49 @@ Only meaningful when `launch_mode = custom`.
317
335
  - `continue_existing_state`
318
336
  - start by auditing existing baselines, results, drafts, or mixed project assets
319
337
  - prompt builder should steer the agent toward `intake-audit`
338
+ - `review_audit`
339
+ - start from a substantial draft or paper package that needs an independent skeptical audit
340
+ - prompt builder should steer the agent toward `review`
320
341
  - `revision_rebuttal`
321
342
  - start from reviewer comments, revision packets, or a rebuttal task
322
343
  - prompt builder should steer the agent toward `rebuttal`
323
344
  - `freeform`
345
+ - use this as the “Other” path
324
346
  - follow a custom brief with minimal forced workflow assumptions
325
347
 
348
+ **`baseline_execution_policy`**
349
+
350
+ - Only meaningful when `launch_mode = custom`.
351
+ - `auto`
352
+ - let the startup contract and current evidence decide
353
+ - `must_reproduce_or_verify`
354
+ - verify or recover the rebuttal-critical baseline/comparator before reviewer-linked follow-up work
355
+ - `reuse_existing_only`
356
+ - trust the current baseline/results unless they are inconsistent or unusable
357
+ - `skip_unless_blocking`
358
+ - skip baseline reruns unless a named review/rebuttal item truly depends on a missing comparator
359
+
360
+ **`review_followup_policy`**
361
+
362
+ - Mainly meaningful for `review_audit`.
363
+ - `audit_only`
364
+ - stop after the audit artifacts and route recommendation
365
+ - `auto_execute_followups`
366
+ - continue automatically into the justified experiments and manuscript deltas after the audit
367
+ - `user_gated_followups`
368
+ - finish the audit first, then ask for approval before expensive follow-up work
369
+
370
+ **`manuscript_edit_mode`**
371
+
372
+ - Mainly meaningful for `review_audit` and `revision_rebuttal`.
373
+ - `none`
374
+ - planning artifacts only
375
+ - `copy_ready_text`
376
+ - produce section-level revision text that is ready to paste into the manuscript
377
+ - `latex_required`
378
+ - prefer the provided LaTeX tree as the writing surface and produce LaTeX-ready replacement text
379
+ - if you choose this mode, it is best to provide the LaTeX source tree via local path / folder input
380
+
326
381
  **`entry_state_summary`**
327
382
 
328
383
  - Plain-language summary of what already exists.
@@ -378,6 +433,9 @@ Custom launch behavior is explicit:
378
433
  - `custom + continue_existing_state`
379
434
  - tells the agent to audit and normalize existing assets first
380
435
  - explicitly prefers `intake-audit`
436
+ - `custom + review_audit`
437
+ - tells the agent that the current draft/paper state is the active contract
438
+ - explicitly prefers `review`
381
439
  - `custom + revision_rebuttal`
382
440
  - tells the agent to interpret reviewer comments and current paper state first
383
441
  - explicitly prefers `rebuttal`
@@ -477,6 +535,9 @@ Custom launch behavior is explicit:
477
535
  "decision_policy": "user_gated",
478
536
  "launch_mode": "custom",
479
537
  "custom_profile": "revision_rebuttal",
538
+ "review_followup_policy": "audit_only",
539
+ "baseline_execution_policy": "skip_unless_blocking",
540
+ "manuscript_edit_mode": "latex_required",
480
541
  "scope": "baseline_plus_direction",
481
542
  "baseline_mode": "restore_from_url",
482
543
  "resource_policy": "balanced",
@@ -490,6 +551,9 @@ Custom launch behavior is explicit:
490
551
  ],
491
552
  "baseline_urls": [],
492
553
  "paper_urls": [],
554
+ "review_materials": [
555
+ "/absolute/path/to/review-comments.md"
556
+ ],
493
557
  "entry_state_summary": "A draft and previous experiment outputs already exist.",
494
558
  "review_summary": "Reviewers asked for one stronger ablation, one extra baseline, and a clearer limitation paragraph.",
495
559
  "custom_brief": "Treat the current manuscript and review packet as the active contract."
@@ -500,7 +564,7 @@ Custom launch behavior is explicit:
500
564
  ## Operational implications
501
565
 
502
566
  - The startup contract is durable project state, not only UI state.
503
- - Prompt building later reads `launch_mode`, `custom_profile`, and related summaries again.
567
+ - Prompt building later reads `launch_mode`, `custom_profile`, `review_followup_policy`, `baseline_execution_policy`, `manuscript_edit_mode`, `entry_state_summary`, `review_summary`, `review_materials`, and `custom_brief` again.
504
568
  - This means `Start Research` shapes not just the first turn, but later routing decisions too.
505
569
 
506
570
  ## Validation checklist
@@ -10,20 +10,26 @@ Use `ds doctor` when DeepScientist does not start cleanly after installation.
10
10
  npm install -g @researai/deepscientist
11
11
  ```
12
12
 
13
- 2. Make sure Codex is installed and authenticated:
13
+ 2. Make sure Codex itself is working first:
14
+
15
+ Default OpenAI path:
14
16
 
15
17
  ```bash
16
18
  codex --login
17
19
  ```
18
20
 
21
+ Provider-backed profile path:
22
+
23
+ ```bash
24
+ codex --profile m27
25
+ ```
26
+
19
27
  If `codex` is missing, repair it explicitly with:
20
28
 
21
29
  ```bash
22
30
  npm install -g @openai/codex
23
31
  ```
24
32
 
25
- If your Codex CLI version does not expose `--login`, run `codex` and finish the interactive setup there.
26
-
27
33
  3. Try to start DeepScientist:
28
34
 
29
35
  ```bash
@@ -57,7 +63,7 @@ Use `ds doctor` when DeepScientist does not start cleanly after installation.
57
63
 
58
64
  ### Codex is missing
59
65
 
60
- Run the package install again so the bundled Codex dependency is present:
66
+ DeepScientist prefers the `codex` already available on your machine and only uses the bundled dependency as fallback. If neither is present, run the package install again so the bundled Codex dependency is present:
61
67
 
62
68
  ```bash
63
69
  npm install -g @researai/deepscientist
@@ -81,6 +87,42 @@ If your Codex CLI version does not expose `--login`, run `codex` and finish the
81
87
 
82
88
  Finish login once, then rerun `ds doctor`.
83
89
 
90
+ ### Codex profile works in the terminal, but DeepScientist still fails
91
+
92
+ Run DeepScientist with the same profile explicitly:
93
+
94
+ ```bash
95
+ ds doctor --codex-profile m27
96
+ ds --codex-profile m27
97
+ ```
98
+
99
+ If your working Codex CLI is not the one on `PATH`, point DeepScientist at it explicitly:
100
+
101
+ ```bash
102
+ ds doctor --codex /absolute/path/to/codex --codex-profile m27
103
+ ds --codex /absolute/path/to/codex --codex-profile m27
104
+ ```
105
+
106
+ `m27` is the MiniMax profile name used consistently in this repo. MiniMax's own page currently uses `m21`, but the profile name is only a local alias; if you created a different name, use that same name in both commands.
107
+
108
+ Also check:
109
+
110
+ - the same shell still exports the provider API key
111
+ - the profile points at the provider's Coding Plan endpoint, not the generic API endpoint
112
+ - `~/DeepScientist/config/runners.yaml` uses `model: inherit` if the provider expects the model to come from the profile itself
113
+
114
+ MiniMax-specific note:
115
+
116
+ - if MiniMax fails on the current `@openai/codex` latest, install `npm install -g @openai/codex@0.57.0`
117
+ - create a MiniMax `Coding Plan Key` first
118
+ - clear `OPENAI_API_KEY` and `OPENAI_BASE_URL` in the current shell before exporting `MINIMAX_API_KEY`
119
+ - use `https://api.minimaxi.com/v1`
120
+ - the `codex-MiniMax-*` model names shown on MiniMax's current Codex CLI page did not pass reliably through Codex CLI in local testing with the provided key
121
+ - the locally verified working model name is `MiniMax-M2.7`
122
+ - DeepScientist can auto-adapt MiniMax's profile-only `model_provider` / `model` config shape during probe and runtime
123
+ - if you also want plain terminal `codex --profile <name>` to work directly, put `model_provider = "minimax"` and `model = "MiniMax-M2.7"` at the top level of `~/.codex/config.toml`
124
+ - DeepScientist automatically downgrades `xhigh` to `high` when it detects a Codex CLI older than `0.63.0`
125
+
84
126
  ### The configured Codex model is unavailable
85
127
 
86
128
  DeepScientist blocks startup until Codex passes a real startup hello probe. In the current release, that probe first uses the runner model configured in:
@@ -95,6 +137,8 @@ The default is `gpt-5.4`. If your Codex account or CLI config cannot access that
95
137
  ds doctor
96
138
  ```
97
139
 
140
+ For provider-backed Codex profiles, `model: inherit` is usually the right default.
141
+
98
142
  ### `uv` is missing
99
143
 
100
144
  Normally `ds` will bootstrap a local `uv` automatically. If that bootstrap fails, install it manually:
@@ -118,12 +118,12 @@ Good pattern:
118
118
 
119
119
  Use these fields to reduce ambiguity before the first round starts.
120
120
 
121
- Put repositories in `Baseline links` when:
121
+ Put repositories or absolute local file/folder paths in `Baseline links` when:
122
122
 
123
123
  - the quest should restore a known repo
124
124
  - the baseline must come from a specific official implementation
125
125
 
126
- Put papers or important external references in `Reference papers / repos` when:
126
+ Put papers, manuscript paths, or important external references in `Paper / reference sources` when:
127
127
 
128
128
  - the task is defined by a paper
129
129
  - the expected protocol comes from prior work
@@ -131,6 +131,9 @@ Put papers or important external references in `Reference papers / repos` when:
131
131
 
132
132
  If you already know the baseline and paper, do not hide them in the main request. Put them in the dedicated fields.
133
133
 
134
+ These reference fields are not web-only.
135
+ You can use network links, absolute local file paths, or absolute local folder paths.
136
+
134
137
  ### 4.5 Reusable baseline
135
138
 
136
139
  Use this only when you already imported a trusted reusable baseline into the registry.
@@ -177,6 +180,22 @@ Why these defaults are usually correct:
177
180
  - `Standard` keeps the workflow on the ordinary path
178
181
  - `Research paper = On` keeps analysis and writing in scope
179
182
 
183
+ If you switch `Launch mode` to `Custom`, choose the custom task type explicitly:
184
+
185
+ - `Continue existing state`
186
+ - for reuse-first work on an existing quest state
187
+ - `Review`
188
+ - for an independent skeptical audit of a substantial draft or paper package
189
+ - `Rebuttal / revision`
190
+ - for reviewer-driven work where comments must be mapped into experiments, manuscript deltas, and a response letter
191
+ - `Other / freeform`
192
+ - for everything else that does not fit the standard custom types
193
+
194
+ If you choose `Review`, also decide:
195
+
196
+ - whether the system should stop after the audit or continue automatically into follow-up experiments and manuscript updates
197
+ - whether manuscript-facing output should be ordinary copy-ready text or LaTeX-ready text
198
+
180
199
  ### 4.8 Runtime constraints
181
200
 
182
201
  Use this field for hard rules, not wishes.