@researai/deepscientist 1.5.9 → 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.
Files changed (165) hide show
  1. package/README.md +112 -99
  2. package/assets/branding/connector-qq.png +0 -0
  3. package/assets/branding/connector-rokid.png +0 -0
  4. package/assets/branding/connector-weixin.png +0 -0
  5. package/assets/branding/projects.png +0 -0
  6. package/bin/ds.js +519 -63
  7. package/docs/assets/branding/projects.png +0 -0
  8. package/docs/en/00_QUICK_START.md +338 -68
  9. package/docs/en/01_SETTINGS_REFERENCE.md +14 -0
  10. package/docs/en/02_START_RESEARCH_GUIDE.md +180 -4
  11. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
  12. package/docs/en/09_DOCTOR.md +66 -5
  13. package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
  14. package/docs/en/11_LICENSE_AND_RISK.md +256 -0
  15. package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +446 -0
  16. package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
  17. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  18. package/docs/en/15_CODEX_PROVIDER_SETUP.md +284 -0
  19. package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
  20. package/docs/en/README.md +83 -0
  21. package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
  22. package/docs/images/weixin/weixin-plugin-entry.png +0 -0
  23. package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
  24. package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
  25. package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
  26. package/docs/images/weixin/weixin-settings-bind.svg +57 -0
  27. package/docs/zh/00_QUICK_START.md +345 -72
  28. package/docs/zh/01_SETTINGS_REFERENCE.md +14 -0
  29. package/docs/zh/02_START_RESEARCH_GUIDE.md +181 -3
  30. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
  31. package/docs/zh/09_DOCTOR.md +68 -5
  32. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
  33. package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
  34. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +442 -0
  35. package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
  36. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  37. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +285 -0
  38. package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
  39. package/docs/zh/README.md +129 -0
  40. package/install.sh +0 -34
  41. package/package.json +2 -2
  42. package/pyproject.toml +1 -1
  43. package/src/deepscientist/__init__.py +1 -1
  44. package/src/deepscientist/annotations.py +343 -0
  45. package/src/deepscientist/artifact/arxiv.py +484 -37
  46. package/src/deepscientist/artifact/service.py +574 -108
  47. package/src/deepscientist/arxiv_library.py +275 -0
  48. package/src/deepscientist/bash_exec/monitor.py +7 -5
  49. package/src/deepscientist/bash_exec/service.py +93 -21
  50. package/src/deepscientist/bridges/builtins.py +2 -0
  51. package/src/deepscientist/bridges/connectors.py +447 -0
  52. package/src/deepscientist/channels/__init__.py +2 -0
  53. package/src/deepscientist/channels/builtins.py +3 -1
  54. package/src/deepscientist/channels/local.py +3 -3
  55. package/src/deepscientist/channels/qq.py +8 -8
  56. package/src/deepscientist/channels/qq_gateway.py +1 -1
  57. package/src/deepscientist/channels/relay.py +14 -8
  58. package/src/deepscientist/channels/weixin.py +59 -0
  59. package/src/deepscientist/channels/weixin_ilink.py +388 -0
  60. package/src/deepscientist/config/models.py +23 -2
  61. package/src/deepscientist/config/service.py +539 -67
  62. package/src/deepscientist/connector/__init__.py +4 -0
  63. package/src/deepscientist/connector/connector_profiles.py +481 -0
  64. package/src/deepscientist/connector/lingzhu_support.py +668 -0
  65. package/src/deepscientist/connector/qq_profiles.py +206 -0
  66. package/src/deepscientist/connector/weixin_support.py +663 -0
  67. package/src/deepscientist/connector_profiles.py +1 -374
  68. package/src/deepscientist/connector_runtime.py +2 -0
  69. package/src/deepscientist/daemon/api/handlers.py +165 -5
  70. package/src/deepscientist/daemon/api/router.py +13 -1
  71. package/src/deepscientist/daemon/app.py +1444 -67
  72. package/src/deepscientist/doctor.py +4 -5
  73. package/src/deepscientist/gitops/diff.py +120 -29
  74. package/src/deepscientist/lingzhu_support.py +1 -182
  75. package/src/deepscientist/mcp/server.py +135 -7
  76. package/src/deepscientist/prompts/builder.py +128 -11
  77. package/src/deepscientist/qq_profiles.py +1 -196
  78. package/src/deepscientist/quest/node_traces.py +23 -0
  79. package/src/deepscientist/quest/service.py +359 -74
  80. package/src/deepscientist/quest/stage_views.py +71 -5
  81. package/src/deepscientist/runners/codex.py +170 -19
  82. package/src/deepscientist/runners/runtime_overrides.py +6 -0
  83. package/src/deepscientist/shared.py +33 -14
  84. package/src/deepscientist/weixin_support.py +1 -0
  85. package/src/prompts/connectors/lingzhu.md +3 -1
  86. package/src/prompts/connectors/qq.md +2 -1
  87. package/src/prompts/connectors/weixin.md +231 -0
  88. package/src/prompts/contracts/shared_interaction.md +4 -1
  89. package/src/prompts/system.md +61 -9
  90. package/src/skills/analysis-campaign/SKILL.md +46 -6
  91. package/src/skills/analysis-campaign/references/campaign-plan-template.md +21 -8
  92. package/src/skills/baseline/SKILL.md +1 -1
  93. package/src/skills/decision/SKILL.md +1 -1
  94. package/src/skills/experiment/SKILL.md +1 -1
  95. package/src/skills/finalize/SKILL.md +1 -1
  96. package/src/skills/idea/SKILL.md +1 -1
  97. package/src/skills/intake-audit/SKILL.md +1 -1
  98. package/src/skills/rebuttal/SKILL.md +74 -1
  99. package/src/skills/rebuttal/references/response-letter-template.md +55 -11
  100. package/src/skills/review/SKILL.md +118 -1
  101. package/src/skills/review/references/experiment-todo-template.md +23 -0
  102. package/src/skills/review/references/review-report-template.md +16 -0
  103. package/src/skills/review/references/revision-log-template.md +4 -0
  104. package/src/skills/scout/SKILL.md +1 -1
  105. package/src/skills/write/SKILL.md +168 -7
  106. package/src/skills/write/references/paper-experiment-matrix-template.md +131 -0
  107. package/src/tui/package.json +1 -1
  108. package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-CnJcXynW.js} +156 -48
  109. package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-DeyzPEhV.js} +1 -1
  110. package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-CB1YODQn.js} +164 -9
  111. package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-B-xicq1e.js} +8 -8
  112. package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-DT54ysXa.js} +5 -5
  113. package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-DQtKT-VD.js} +3 -3
  114. package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-hqHbCfnv.js} +20 -21
  115. package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-OcVo33jV.js} +5 -5
  116. package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-DdGwhEUV.js} +11 -11
  117. package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-Ciz1gDaX.js} +2 -1
  118. package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BhmjNQRC.js} +37 -11
  119. package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-BzdVH9Bx.js} +4 -4
  120. package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-DmyHspXt.js} +3 -3
  121. package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-BMXKrDRk.js} +1 -1
  122. package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BTVYRGkm.js} +12 -12
  123. package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-CvcjJHXv.js} +14 -7
  124. package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DW2ej8Vk.js} +73 -6
  125. package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-CmlDxbhU.js} +103 -34
  126. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
  127. package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DAjQZPSv.js} +1 -1
  128. package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C-nVAZb_.js} +5 -4
  129. package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-D7-dIYon.js} +10 -10
  130. package/src/ui/dist/assets/bot-C_G4WtNI.js +21 -0
  131. package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
  132. package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
  133. package/src/ui/dist/assets/{code-BWAY76JP.js → code-Cd7WfiWq.js} +1 -1
  134. package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-B57zsL9y.js} +1 -1
  135. package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-DVoheLFq.js} +1 -1
  136. package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-B5kXFxZP.js} +1 -1
  137. package/src/ui/dist/assets/{image-D-NZM-6P.js → image-LLOjkMHF.js} +1 -1
  138. package/src/ui/dist/assets/{index-DGIYDuTv.css → index-BQG-1s2o.css} +40 -13
  139. package/src/ui/dist/assets/{index-DHZJ_0TI.js → index-C3r2iGrp.js} +12 -12
  140. package/src/ui/dist/assets/{index-7Chr1g9c.js → index-CLQauncb.js} +15050 -9561
  141. package/src/ui/dist/assets/index-Dxa2eYMY.js +25 -0
  142. package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-hOUOWbW2.js} +2 -2
  143. package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-BGGAEii3.js} +1 -1
  144. package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DlEr1_y5.js} +16 -1
  145. package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
  146. package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-CWJbJuYY.js} +1 -1
  147. package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-CRJiucYO.js} +18 -77
  148. package/src/ui/dist/assets/select-CoHB7pvH.js +1690 -0
  149. package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-D5aJWR8J.js} +1 -1
  150. package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-DUK_mnkS.js} +2 -13
  151. package/src/ui/dist/assets/{trash-BvTgE5__.js → trash-ChU3SEE3.js} +1 -1
  152. package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-BrJBV3tY.js} +1 -1
  153. package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-C2OQaVWc.js} +1 -1
  154. package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-C7Qqh-om.js} +1 -1
  155. package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-rtX0FKya.js} +1 -1
  156. package/src/ui/dist/index.html +2 -2
  157. package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
  158. package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
  159. package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
  160. package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
  161. package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
  162. package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
  163. package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
  164. package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
  165. package/src/ui/dist/assets/tooltip-C_mA6R0w.js +0 -108
@@ -16,6 +16,92 @@ Implementation sources:
16
16
  3. binds an optional reusable baseline
17
17
  4. persists a structured `startup_contract` for later prompt building
18
18
 
19
+ ## Worked example: a cleaned-up version of quest 025
20
+
21
+ The quickest way to understand the dialog is to walk through a real example.
22
+
23
+ This example is adapted from a real project input in quest `025`, but normalized into a cleaner public form. The task is:
24
+
25
+ - reproduce the official Mandela-Effect baseline
26
+ - keep the original task and evaluation protocol
27
+ - study stronger truth-preserving collaboration under mixed correct and incorrect social signals
28
+ - use two local OpenAI-compatible endpoints to keep throughput high
29
+
30
+ ### Short fields in the current frontend
31
+
32
+ | Field in the dialog | Example value | Why |
33
+ |---|---|---|
34
+ | `Project title` | `Mandela-Effect Reproduction and Truth-Preserving Collaboration` | Clear project title for cards, workspace headers, and later search |
35
+ | `Project ID` | leave blank, or set `025` | Leave blank for automatic sequential ids; only pin it manually if you need a fixed id |
36
+ | `Connector delivery` | `Local only` for the first run, or one QQ target if already configured | The current frontend allows at most one external connector target per quest |
37
+ | `Reusable baseline` | empty for the first run, or the imported official baseline if already available | If selected, derived `baseline_mode` becomes `existing` |
38
+ | `Research paper` | `On` | Keep paper-oriented analysis and writing in scope |
39
+ | `Research intensity` | `Balanced` | Secure the baseline, then probe one justified direction |
40
+ | `Decision mode` | `Autonomous` | Keep moving unless a real blocking decision depends on the user |
41
+ | `Launch mode` | `Standard` | Start from the ordinary research graph |
42
+ | `Language` | `English` | Use English for the kickoff prompt and user-facing artifacts |
43
+
44
+ ### Multi-line fields for the same example
45
+
46
+ `Primary research request`
47
+
48
+ ```text
49
+ Please reproduce the official Mandela-Effect repository and paper, then study how to improve truth-preserving collaboration under mixed correct and incorrect social signals.
50
+
51
+ The core research question is: how can a multi-agent system remain factually robust under social influence while still learning from correct peers?
52
+
53
+ Keep the task definition and evaluation protocol aligned with the original work. Focus on prompt-based or system-level methods that improve truth preservation without simply refusing all social information.
54
+ ```
55
+
56
+ `Baseline links`
57
+
58
+ ```text
59
+ https://github.com/bluedream02/Mandela-Effect
60
+ ```
61
+
62
+ `Reference papers / repos`
63
+
64
+ ```text
65
+ https://arxiv.org/abs/2602.00428
66
+ ```
67
+
68
+ `Runtime constraints`
69
+
70
+ ```text
71
+ - Keep the task definition and evaluation protocol aligned with the official baseline unless a change is explicitly justified.
72
+ - Use two OpenAI-compatible local inference endpoints for throughput:
73
+ - `http://127.0.0.1:8004/v1`
74
+ - `http://127.0.0.1:8008/v1`
75
+ - Use API key `1234` and model `/model/gpt-oss-120b` on both endpoints.
76
+ - Keep generation settings close to the baseline unless a justified adjustment is required.
77
+ - Implement asynchronous execution, automatic retry on request failure, and resumable scripts.
78
+ - Split requests across both endpoints so throughput stays high without overloading the service.
79
+ - Record failed, degraded, or inconclusive runs honestly instead of hiding them.
80
+ ```
81
+
82
+ `Goals`
83
+
84
+ ```text
85
+ 1. Restore and verify the official Mandela-Effect baseline as a trustworthy starting point.
86
+ 2. Measure key metrics and failure modes on the designated `gpt-oss-120b` setup.
87
+ 3. Propose at least one literature-grounded direction for stronger truth-preserving collaboration.
88
+ 4. Produce experiment and analysis artifacts that are strong enough to support paper writing.
89
+ ```
90
+
91
+ ### What the frontend derives from this example
92
+
93
+ If you leave `Reusable baseline` empty and choose `Balanced`, the current frontend derives:
94
+
95
+ - `scope = baseline_plus_direction`
96
+ - `baseline_mode = restore_from_url`
97
+ - `resource_policy = balanced`
98
+ - `time_budget_hours = 24`
99
+ - `git_strategy = semantic_head_plus_controlled_integration`
100
+
101
+ If you select a reusable baseline entry, only one derived field changes:
102
+
103
+ - `baseline_mode = existing`
104
+
19
105
  ## Current frontend model
20
106
 
21
107
  ### `StartResearchTemplate`
@@ -29,13 +115,21 @@ type StartResearchTemplate = {
29
115
  baseline_variant_id: string
30
116
  baseline_urls: string
31
117
  paper_urls: string
118
+ review_materials: string
32
119
  runtime_constraints: string
33
120
  objectives: string
34
121
  need_research_paper: boolean
35
122
  research_intensity: 'light' | 'balanced' | 'sprint'
36
123
  decision_policy: 'autonomous' | 'user_gated'
37
124
  launch_mode: 'standard' | 'custom'
38
- 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'
39
133
  entry_state_summary: string
40
134
  review_summary: string
41
135
  custom_brief: string
@@ -75,6 +169,12 @@ The dialog submits:
75
169
  title,
76
170
  goal: compiled_prompt,
77
171
  quest_id,
172
+ requested_connector_bindings: [
173
+ {
174
+ connector,
175
+ conversation_id
176
+ }
177
+ ],
78
178
  requested_baseline_ref: {
79
179
  baseline_id,
80
180
  variant_id
@@ -87,6 +187,9 @@ The dialog submits:
87
187
  decision_policy,
88
188
  launch_mode,
89
189
  custom_profile,
190
+ review_followup_policy,
191
+ baseline_execution_policy,
192
+ manuscript_edit_mode,
90
193
  scope,
91
194
  baseline_mode,
92
195
  resource_policy,
@@ -96,6 +199,7 @@ The dialog submits:
96
199
  objectives: string[],
97
200
  baseline_urls: string[],
98
201
  paper_urls: string[],
202
+ review_materials: string[],
99
203
  entry_state_summary,
100
204
  review_summary,
101
205
  custom_brief,
@@ -130,6 +234,26 @@ The dialog submits:
130
234
 
131
235
  - Declares the preferred user-facing language for kickoff and later interaction.
132
236
 
237
+ ### Connector delivery
238
+
239
+ **`requested_connector_bindings`**
240
+
241
+ - Submitted alongside the project create payload, not inside `startup_contract`.
242
+ - The current frontend allows at most one external connector target per quest.
243
+ - Typical shape:
244
+
245
+ ```ts
246
+ [
247
+ {
248
+ connector: 'qq',
249
+ conversation_id: 'qq:private:openid-123'
250
+ }
251
+ ]
252
+ ```
253
+
254
+ - If you keep the project local-only, this array is empty.
255
+ - If the selected target is already bound to another quest, rebinding this project will replace the old binding.
256
+
133
257
  ### Baseline and references
134
258
 
135
259
  **`baseline_id`**
@@ -144,12 +268,18 @@ The dialog submits:
144
268
 
145
269
  **`baseline_urls`**
146
270
 
147
- - 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.
148
272
  - Submitted as `string[]`.
149
273
 
150
274
  **`paper_urls`**
151
275
 
152
- - 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.
153
283
  - Submitted as `string[]`.
154
284
 
155
285
  ### Constraints and objectives
@@ -205,12 +335,49 @@ Only meaningful when `launch_mode = custom`.
205
335
  - `continue_existing_state`
206
336
  - start by auditing existing baselines, results, drafts, or mixed project assets
207
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`
208
341
  - `revision_rebuttal`
209
342
  - start from reviewer comments, revision packets, or a rebuttal task
210
343
  - prompt builder should steer the agent toward `rebuttal`
211
344
  - `freeform`
345
+ - use this as the “Other” path
212
346
  - follow a custom brief with minimal forced workflow assumptions
213
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
+
214
381
  **`entry_state_summary`**
215
382
 
216
383
  - Plain-language summary of what already exists.
@@ -266,6 +433,9 @@ Custom launch behavior is explicit:
266
433
  - `custom + continue_existing_state`
267
434
  - tells the agent to audit and normalize existing assets first
268
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`
269
439
  - `custom + revision_rebuttal`
270
440
  - tells the agent to interpret reviewer comments and current paper state first
271
441
  - explicitly prefers `rebuttal`
@@ -365,6 +535,9 @@ Custom launch behavior is explicit:
365
535
  "decision_policy": "user_gated",
366
536
  "launch_mode": "custom",
367
537
  "custom_profile": "revision_rebuttal",
538
+ "review_followup_policy": "audit_only",
539
+ "baseline_execution_policy": "skip_unless_blocking",
540
+ "manuscript_edit_mode": "latex_required",
368
541
  "scope": "baseline_plus_direction",
369
542
  "baseline_mode": "restore_from_url",
370
543
  "resource_policy": "balanced",
@@ -378,6 +551,9 @@ Custom launch behavior is explicit:
378
551
  ],
379
552
  "baseline_urls": [],
380
553
  "paper_urls": [],
554
+ "review_materials": [
555
+ "/absolute/path/to/review-comments.md"
556
+ ],
381
557
  "entry_state_summary": "A draft and previous experiment outputs already exist.",
382
558
  "review_summary": "Reviewers asked for one stronger ablation, one extra baseline, and a clearer limitation paragraph.",
383
559
  "custom_brief": "Treat the current manuscript and review packet as the active contract."
@@ -388,7 +564,7 @@ Custom launch behavior is explicit:
388
564
  ## Operational implications
389
565
 
390
566
  - The startup contract is durable project state, not only UI state.
391
- - 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.
392
568
  - This means `Start Research` shapes not just the first turn, but later routing decisions too.
393
569
 
394
570
  ## Validation checklist
@@ -1,216 +1,99 @@
1
- # 04 Lingzhu Connector Guide: Configure Lingzhu for DeepScientist
1
+ # 04 Lingzhu Connector Guide: Bind Rokid Glasses to DeepScientist
2
2
 
3
- This guide explains how to configure the Lingzhu companion endpoint from `Settings > Connectors > Lingzhu`.
3
+ Lingzhu now uses a minimal one-step binding flow.
4
4
 
5
- Scope:
5
+ DeepScientist serves the Lingzhu-compatible routes directly on its own daemon / web port:
6
6
 
7
- - configuration only
8
- - OpenClaw-compatible Lingzhu bridge values
9
- - local probe and SSE smoke test
10
- - what to paste into the Lingzhu platform
7
+ - `GET /metis/agent/api/health`
8
+ - `POST /metis/agent/api/sse`
11
9
 
12
- This guide does not cover cloud deployment architecture. You only need one working OpenClaw gateway and one public IP or public domain that the glasses can reach.
10
+ For a real device binding, the address registered on Rokid must be the public DeepScientist address that external devices can reach. It cannot be `127.0.0.1`, `localhost`, or a private-network address.
13
11
 
14
- Reference sources:
12
+ References:
15
13
 
16
- - Rokid forum setup page: https://forum.rokid.com/post/detail/2831
17
- - packaged bridge root: `assets/connectors/lingzhu/openclaw-bridge`
18
- - packaged OpenClaw config template: `assets/connectors/lingzhu/openclaw.lingzhu.config.template.json`
14
+ - Rokid developer forum: https://forum.rokid.com/post/detail/2831
15
+ - Rokid agent platform: https://agent-develop.rokid.com/space
19
16
 
20
- ## 1. What DeepScientist now provides
17
+ ## 1. Prerequisites
21
18
 
22
- The Lingzhu settings card now generates and validates:
19
+ Make sure:
23
20
 
24
- - local health URL
25
- - local SSE URL
26
- - public SSE URL
27
- - `auth_ak`
28
- - OpenClaw config snippet
29
- - local probe `curl`
21
+ - DeepScientist is already running
22
+ - the DeepScientist page you opened is the final public address that external devices should use
23
+ - if the current page is local-only or private-network-only, Lingzhu should not be saved yet
30
24
 
31
- The packaged bridge is configured to:
25
+ ## 2. What the UI keeps now
32
26
 
33
- - emit one immediate visible receipt acknowledgement before the model starts
34
- - keep comment heartbeats alive
35
- - emit lightweight visible progress heartbeats during long silent upstream phases
27
+ `Settings > Connectors > Lingzhu` now keeps only the necessary pieces:
36
28
 
37
- DeepScientist treats Lingzhu as a companion endpoint, not as a full bidirectional chat connector like QQ.
29
+ - one `Add Lingzhu (Rokid Glasses)` entry point
30
+ - the Rokid platform screenshot
31
+ - the auto-generated copyable fields
32
+ - concise binding instructions
33
+ - one save action
38
34
 
39
- ## 2. Before you start
35
+ You no longer need to manually edit host, port, agent, OpenClaw snippets, or extra probe steps in the main flow.
40
36
 
41
- Make sure these are already true:
37
+ ## 3. What is auto-generated
42
38
 
43
- - DeepScientist is installed and running
44
- - your OpenClaw gateway is already running locally
45
- - the OpenClaw HTTP gateway port is known, usually `18789`
46
- - you have a public IP or public domain
39
+ After you click `Add Lingzhu (Rokid Glasses)`, the popup shows these copyable values:
47
40
 
48
- Important:
41
+ - Custom agent ID
42
+ - Custom agent URL
43
+ - Custom agent AK
44
+ - Agent name
45
+ - Category
46
+ - Capability summary
47
+ - Opening message
48
+ - Input type
49
+ - Icon PNG URL
49
50
 
50
- - `127.0.0.1` only works for local health checks
51
- - Lingzhu devices need a public address
51
+ Important details:
52
52
 
53
- ## 3. Open the settings page
53
+ - `Custom agent URL` is generated as `https://<your-public-address>/metis/agent/api/sse`
54
+ - `AK` is generated automatically and reused after saving
55
+ - the logo uses a PNG DeepScientist asset so it can be uploaded directly to Rokid
54
56
 
55
- Open:
57
+ ![Rokid third-party agent creation form](../images/lingzhu/rokid-agent-platform-create.png)
56
58
 
57
- - `Settings > Connectors > Lingzhu`
59
+ ## 4. What the user does
58
60
 
59
- The card is organized into:
61
+ On the Rokid platform:
60
62
 
61
- - gateway endpoint
62
- - auth and identity
63
- - generated values
64
- - probe and verify
65
- - advanced debug
63
+ 1. Open `Project Development -> Third-party Agent -> Create`
64
+ 2. Choose `Custom Agent`
65
+ 3. Copy each generated field from the popup into the matching Rokid field
66
+ 4. Upload the DeepScientist PNG logo
67
+ 5. Return to DeepScientist and click Save
66
68
 
67
- ![Lingzhu settings overview](../images/lingzhu/lingzhu-settings-overview.svg)
69
+ After Save, the Lingzhu binding is complete.
68
70
 
69
- ## 4. Fill the endpoint fields
71
+ ## 5. How it is used afterward
70
72
 
71
- Recommended values:
73
+ The glasses or platform only need to call:
72
74
 
73
- | Field | Recommended value | Notes |
74
- | --- | --- | --- |
75
- | `Enabled` | `true` | turn on the companion config |
76
- | `Transport` | `openclaw_sse` | fixed, do not change |
77
- | `Local host` | `127.0.0.1` | used only for local probe |
78
- | `Gateway port` | `18789` | match your OpenClaw gateway |
79
- | `Public base URL` | `http://<public-ip>:18789` | must be reachable from the glasses |
75
+ - `POST /metis/agent/api/sse`
80
76
 
81
- If you do not know what to fill for the local endpoint, click:
77
+ with:
82
78
 
83
- - `Use local defaults`
79
+ - `Authorization: Bearer <saved-AK>`
84
80
 
85
- ## 5. Generate the AK and identity values
81
+ Usage rules:
86
82
 
87
- Fill or keep:
83
+ - a new task must start with `我现在的任务是 ...`
84
+ - only the text after that prefix is treated as a fresh DeepScientist task
85
+ - if you only want buffered progress, do not repeat the prefix; just say `找DeepScientist` or `继续`
88
86
 
89
- | Field | Recommended value |
90
- | --- | --- |
91
- | `Auth AK` | click `Generate AK` |
92
- | `Agent ID` | `main` |
93
- | `Lingzhu system prompt` | optional |
87
+ ## 6. Common questions
94
88
 
95
- Use the same `auth_ak` and `agent_id` in both places:
89
+ ### Why can’t I use `127.0.0.1`?
96
90
 
97
- - OpenClaw Lingzhu plugin config
98
- - Lingzhu platform config
91
+ Because Rokid and external devices cannot reach your local loopback address. Lingzhu must register a public address.
99
92
 
100
- ## 6. Use the generated values
93
+ ### Why is `AK` generated automatically?
101
94
 
102
- DeepScientist shows the exact values you need:
95
+ Because `AK` is the Bearer secret for this external entrypoint. Generating and persisting it is safer and more reliable than asking users to type it manually.
103
96
 
104
- - local health URL
105
- - local SSE URL
106
- - public SSE URL
107
- - OpenClaw config snippet
108
- - probe curl
97
+ ### Do I still need to tune a lot of extra parameters after saving?
109
98
 
110
- The public value is the one you should paste into the Lingzhu platform.
111
-
112
- ![Lingzhu platform values](../images/lingzhu/lingzhu-platform-values.svg)
113
-
114
- ## 7. Update OpenClaw
115
-
116
- Use either:
117
-
118
- - the generated snippet in the settings page
119
- - or the packaged template at `assets/connectors/lingzhu/openclaw.lingzhu.config.template.json`
120
-
121
- Install the packaged bridge with:
122
-
123
- ```bash
124
- openclaw plugins install ./assets/connectors/lingzhu/openclaw-bridge
125
- ```
126
-
127
- At minimum, OpenClaw must expose:
128
-
129
- ```json
130
- {
131
- "gateway": {
132
- "port": 18789,
133
- "http": {
134
- "endpoints": {
135
- "chatCompletions": {
136
- "enabled": true
137
- }
138
- }
139
- }
140
- }
141
- }
142
- ```
143
-
144
- DeepScientist also generates the full Lingzhu plugin block for you:
145
-
146
- ![OpenClaw config snippet](../images/lingzhu/lingzhu-openclaw-config.svg)
147
-
148
- ## 8. Run the local probe
149
-
150
- After saving the values, click:
151
-
152
- - `Run Lingzhu probe`
153
-
154
- DeepScientist performs:
155
-
156
- 1. `GET /metis/agent/api/health`
157
- 2. `POST /metis/agent/api/sse`
158
-
159
- Expected result:
160
-
161
- - `Connection = reachable`
162
- - `Auth = ready`
163
- - probe result returns no errors
164
-
165
- ## 9. What to paste into the Lingzhu platform
166
-
167
- Use:
168
-
169
- - `Public SSE URL`
170
- - `Auth AK`
171
-
172
- Do not paste:
173
-
174
- - `127.0.0.1`
175
- - any local-only host name
176
-
177
- ## 10. Common failure causes
178
-
179
- ### Health is offline
180
-
181
- Usually means:
182
-
183
- - OpenClaw is not running
184
- - wrong `gateway_port`
185
- - wrong `local_host`
186
-
187
- ### SSE probe fails
188
-
189
- Usually means:
190
-
191
- - `auth_ak` mismatch
192
- - Lingzhu endpoint path is not exposed
193
- - OpenClaw `chatCompletions.enabled` is still off
194
-
195
- ### Device still cannot connect
196
-
197
- Usually means:
198
-
199
- - `Public base URL` is not public
200
- - firewall or reverse proxy still blocks the port
201
-
202
- ## 11. Practical note
203
-
204
- This settings surface is intentionally registry-first:
205
-
206
- - Lingzhu stays in `connectors.yaml`
207
- - generated values come from the same structured config
208
- - validation, testing, and frontend rendering consume the same connector record
209
-
210
- For long-running tasks, the most stable practical behavior is:
211
-
212
- - immediate bridge-level receipt acknowledgement
213
- - visible progress heartbeats from the bridge during silent upstream phases
214
- - preserved per-user session continuity across follow-up turns
215
-
216
- This improves Lingzhu compatibility, but it still does not remove the platform-side single-request timeout limit.
99
+ No. The goal of the current Lingzhu flow is to show only the necessary values, let the user copy them, and finish with one save.
@@ -10,21 +10,41 @@ Use `ds doctor` when DeepScientist does not start cleanly after installation.
10
10
  npm install -g @researai/deepscientist
11
11
  ```
12
12
 
13
- 2. Try to start DeepScientist:
13
+ 2. Make sure Codex itself is working first:
14
+
15
+ Default OpenAI path:
16
+
17
+ ```bash
18
+ codex --login
19
+ ```
20
+
21
+ Provider-backed profile path:
22
+
23
+ ```bash
24
+ codex --profile minimax
25
+ ```
26
+
27
+ If `codex` is missing, repair it explicitly with:
28
+
29
+ ```bash
30
+ npm install -g @openai/codex
31
+ ```
32
+
33
+ 3. Try to start DeepScientist:
14
34
 
15
35
  ```bash
16
36
  ds
17
37
  ```
18
38
 
19
- 3. If startup fails or looks unhealthy, run:
39
+ 4. If startup fails or looks unhealthy, run:
20
40
 
21
41
  ```bash
22
42
  ds doctor
23
43
  ```
24
44
 
25
- 4. Read the checks from top to bottom and fix the failed items first.
45
+ 5. Read the checks from top to bottom and fix the failed items first.
26
46
 
27
- 5. Run `ds doctor` again until all checks are healthy, then run `ds`.
47
+ 6. Run `ds doctor` again until all checks are healthy, then run `ds`.
28
48
 
29
49
  ## What `ds doctor` checks
30
50
 
@@ -49,16 +69,57 @@ Run the package install again so the bundled Codex dependency is present:
49
69
  npm install -g @researai/deepscientist
50
70
  ```
51
71
 
72
+ If `codex` is still unavailable afterward, install it explicitly:
73
+
74
+ ```bash
75
+ npm install -g @openai/codex
76
+ ```
77
+
52
78
  ### Codex is installed but not logged in
53
79
 
54
80
  Run:
55
81
 
56
82
  ```bash
57
- codex
83
+ codex --login
58
84
  ```
59
85
 
86
+ If your Codex CLI version does not expose `--login`, run `codex` and finish the interactive setup there.
87
+
60
88
  Finish login once, then rerun `ds doctor`.
61
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 minimax
96
+ ds --codex-profile minimax
97
+ ```
98
+
99
+ Replace `minimax` with your real profile name such as `m27`, `glm`, `ark`, or `bailian`.
100
+
101
+ Also check:
102
+
103
+ - the same shell still exports the provider API key
104
+ - the profile points at the provider's Coding Plan endpoint, not the generic API endpoint
105
+ - `~/DeepScientist/config/runners.yaml` uses `model: inherit` if the provider expects the model to come from the profile itself
106
+
107
+ ### The configured Codex model is unavailable
108
+
109
+ DeepScientist blocks startup until Codex passes a real startup hello probe. In the current release, that probe first uses the runner model configured in:
110
+
111
+ ```text
112
+ ~/DeepScientist/config/runners.yaml
113
+ ```
114
+
115
+ The default is `gpt-5.4`. If your Codex account or CLI config cannot access that model, DeepScientist now retries with the current Codex default model and persists `model: inherit` for future runs. If you still want a specific model, edit the runner config manually and rerun:
116
+
117
+ ```bash
118
+ ds doctor
119
+ ```
120
+
121
+ For provider-backed Codex profiles, `model: inherit` is usually the right default.
122
+
62
123
  ### `uv` is missing
63
124
 
64
125
  Normally `ds` will bootstrap a local `uv` automatically. If that bootstrap fails, install it manually: