@researai/deepscientist 1.5.9 → 1.5.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +107 -94
  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 +168 -9
  7. package/docs/assets/branding/projects.png +0 -0
  8. package/docs/en/00_QUICK_START.md +308 -70
  9. package/docs/en/01_SETTINGS_REFERENCE.md +3 -0
  10. package/docs/en/02_START_RESEARCH_GUIDE.md +112 -0
  11. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
  12. package/docs/en/09_DOCTOR.md +41 -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 +427 -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/99_ACKNOWLEDGEMENTS.md +4 -1
  19. package/docs/en/README.md +79 -0
  20. package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
  21. package/docs/images/weixin/weixin-plugin-entry.png +0 -0
  22. package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
  23. package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
  24. package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
  25. package/docs/images/weixin/weixin-settings-bind.svg +57 -0
  26. package/docs/zh/00_QUICK_START.md +315 -74
  27. package/docs/zh/01_SETTINGS_REFERENCE.md +3 -0
  28. package/docs/zh/02_START_RESEARCH_GUIDE.md +112 -0
  29. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
  30. package/docs/zh/09_DOCTOR.md +41 -5
  31. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
  32. package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
  33. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +423 -0
  34. package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
  35. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  36. package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
  37. package/docs/zh/README.md +126 -0
  38. package/install.sh +0 -34
  39. package/package.json +2 -2
  40. package/pyproject.toml +1 -1
  41. package/src/deepscientist/__init__.py +1 -1
  42. package/src/deepscientist/annotations.py +343 -0
  43. package/src/deepscientist/artifact/arxiv.py +484 -37
  44. package/src/deepscientist/artifact/service.py +574 -108
  45. package/src/deepscientist/arxiv_library.py +275 -0
  46. package/src/deepscientist/bash_exec/service.py +9 -0
  47. package/src/deepscientist/bridges/builtins.py +2 -0
  48. package/src/deepscientist/bridges/connectors.py +447 -0
  49. package/src/deepscientist/channels/__init__.py +2 -0
  50. package/src/deepscientist/channels/builtins.py +3 -1
  51. package/src/deepscientist/channels/qq.py +1 -1
  52. package/src/deepscientist/channels/qq_gateway.py +1 -1
  53. package/src/deepscientist/channels/relay.py +7 -1
  54. package/src/deepscientist/channels/weixin.py +59 -0
  55. package/src/deepscientist/channels/weixin_ilink.py +317 -0
  56. package/src/deepscientist/config/models.py +22 -2
  57. package/src/deepscientist/config/service.py +431 -60
  58. package/src/deepscientist/connector/__init__.py +4 -0
  59. package/src/deepscientist/connector/connector_profiles.py +481 -0
  60. package/src/deepscientist/connector/lingzhu_support.py +668 -0
  61. package/src/deepscientist/connector/qq_profiles.py +206 -0
  62. package/src/deepscientist/connector/weixin_support.py +663 -0
  63. package/src/deepscientist/connector_profiles.py +1 -374
  64. package/src/deepscientist/connector_runtime.py +2 -0
  65. package/src/deepscientist/daemon/api/handlers.py +165 -5
  66. package/src/deepscientist/daemon/api/router.py +13 -1
  67. package/src/deepscientist/daemon/app.py +1130 -61
  68. package/src/deepscientist/doctor.py +5 -2
  69. package/src/deepscientist/gitops/diff.py +120 -29
  70. package/src/deepscientist/lingzhu_support.py +1 -182
  71. package/src/deepscientist/mcp/server.py +11 -4
  72. package/src/deepscientist/prompts/builder.py +15 -0
  73. package/src/deepscientist/qq_profiles.py +1 -196
  74. package/src/deepscientist/quest/node_traces.py +23 -0
  75. package/src/deepscientist/quest/service.py +112 -43
  76. package/src/deepscientist/quest/stage_views.py +71 -5
  77. package/src/deepscientist/runners/codex.py +55 -3
  78. package/src/deepscientist/weixin_support.py +1 -0
  79. package/src/prompts/connectors/lingzhu.md +3 -1
  80. package/src/prompts/connectors/weixin.md +230 -0
  81. package/src/prompts/system.md +2 -0
  82. package/src/tui/package.json +1 -1
  83. package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-D0mTXG4-.js} +156 -48
  84. package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-Db0cTXxm.js} +1 -1
  85. package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-DrV8je02.js} +164 -9
  86. package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-QXMSCH71.js} +8 -8
  87. package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-7hhtWj_E.js} +5 -5
  88. package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-BWMSnRJe.js} +3 -3
  89. package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-7J9h9Vy_.js} +20 -21
  90. package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-CHJl_0lr.js} +5 -5
  91. package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-1qSow1es.js} +11 -11
  92. package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-eQpPPCEp.js} +2 -1
  93. package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BwRfi89Z.js} +7 -7
  94. package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-836PVQWV.js} +4 -4
  95. package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-C2y_556i.js} +3 -3
  96. package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BRzJbGsn.js} +12 -12
  97. package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-DIX7Mlzu.js} +1 -1
  98. package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-DzRaTAlq.js} +14 -7
  99. package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DZUfIUnp.js} +73 -6
  100. package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-BwtICzue.js} +103 -34
  101. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
  102. package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DHeIAMsx.js} +1 -1
  103. package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C3tCmFox.js} +5 -4
  104. package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-CQsKVm3t.js} +10 -10
  105. package/src/ui/dist/assets/bot-BEA2vWuK.js +21 -0
  106. package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
  107. package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
  108. package/src/ui/dist/assets/{code-BWAY76JP.js → code-XfbSR8K2.js} +1 -1
  109. package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-BjxNaIfy.js} +1 -1
  110. package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-D_lLVQk0.js} +1 -1
  111. package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-D9x_5vlY.js} +1 -1
  112. package/src/ui/dist/assets/{image-D-NZM-6P.js → image-BhWT33W1.js} +1 -1
  113. package/src/ui/dist/assets/{index-DHZJ_0TI.js → index--c4iXtuy.js} +12 -12
  114. package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-BDxipwrC.js} +2 -2
  115. package/src/ui/dist/assets/{index-7Chr1g9c.js → index-DZTZ8mWP.js} +14221 -9523
  116. package/src/ui/dist/assets/{index-DGIYDuTv.css → index-Dqj-Mjb4.css} +2 -13
  117. package/src/ui/dist/assets/index-PJbSbPTy.js +25 -0
  118. package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-K8izTGgo.js} +1 -1
  119. package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DfBors6y.js} +16 -1
  120. package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
  121. package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-yFK1J4fL.js} +1 -1
  122. package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-PENr2zcz.js} +1 -74
  123. package/src/ui/dist/assets/select-CAbJDfYv.js +1690 -0
  124. package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-DEuYJqTl.js} +1 -1
  125. package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-omoSUmcd.js} +2 -13
  126. package/src/ui/dist/assets/{trash-BvTgE5__.js → trash--F119N47.js} +1 -1
  127. package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-D31UR23I.js} +1 -1
  128. package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-BH6KcMzq.js} +1 -1
  129. package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-CZ613PM5.js} +1 -1
  130. package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-BgDLAv3z.js} +1 -1
  131. package/src/ui/dist/index.html +2 -2
  132. package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
  133. package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
  134. package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
  135. package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
  136. package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
  137. package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
  138. package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
  139. package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
  140. package/src/ui/dist/assets/tooltip-C_mA6R0w.js +0 -108
@@ -0,0 +1,44 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720" fill="none">
2
+ <rect width="1280" height="720" rx="32" fill="#FFFDF8"/>
3
+ <rect x="40" y="40" width="1200" height="640" rx="28" fill="#FFFFFF" stroke="#EBDCC1" stroke-width="2"/>
4
+ <circle cx="108" cy="108" r="34" fill="#F59E0B"/>
5
+ <path d="M108 90V126" stroke="#fff" stroke-width="8" stroke-linecap="round"/>
6
+ <path d="M90 108H126" stroke="#fff" stroke-width="8" stroke-linecap="round"/>
7
+ <text x="164" y="98" fill="#0F172A" font-family="Arial, sans-serif" font-size="34" font-weight="700">Quest-Local Weixin Media Flow</text>
8
+ <text x="164" y="138" fill="#475569" font-family="Arial, sans-serif" font-size="20">Inbound media is copied into the quest. Outbound media should come from a real local file.</text>
9
+
10
+ <rect x="76" y="196" width="308" height="424" rx="28" fill="#F8FAFC" stroke="#DCE3EA" stroke-width="2"/>
11
+ <text x="112" y="250" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">WeChat user</text>
12
+ <rect x="112" y="300" width="236" height="70" rx="20" fill="#DCFCE7"/>
13
+ <text x="148" y="342" fill="#166534" font-family="Arial, sans-serif" font-size="18" font-weight="700">Send text / image / video / file</text>
14
+ <rect x="112" y="396" width="236" height="164" rx="20" fill="#fff" stroke="#DDE6EE"/>
15
+ <text x="138" y="432" fill="#334155" font-family="Arial, sans-serif" font-size="17">Image message</text>
16
+ <text x="138" y="464" fill="#334155" font-family="Arial, sans-serif" font-size="17">Video message</text>
17
+ <text x="138" y="496" fill="#334155" font-family="Arial, sans-serif" font-size="17">File message</text>
18
+ <text x="138" y="536" fill="#475569" font-family="Arial, sans-serif" font-size="16">Media-only inbound events are kept.</text>
19
+
20
+ <rect x="486" y="154" width="308" height="508" rx="28" fill="#F9FBFF" stroke="#D8E2F4" stroke-width="2"/>
21
+ <text x="516" y="214" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">DeepScientist runtime</text>
22
+ <rect x="516" y="262" width="248" height="76" rx="20" fill="#E0E7FF"/>
23
+ <text x="548" y="308" fill="#3730A3" font-family="Arial, sans-serif" font-size="19" font-weight="700">Download / decrypt / normalize</text>
24
+ <rect x="516" y="362" width="248" height="92" rx="20" fill="#fff" stroke="#E0E7F3"/>
25
+ <text x="548" y="398" fill="#334155" font-family="Arial, sans-serif" font-size="17">Copy into quest userfiles</text>
26
+ <text x="548" y="428" fill="#334155" font-family="Arial, sans-serif" font-size="17">Write manifest.json</text>
27
+ <rect x="516" y="480" width="248" height="122" rx="20" fill="#EEF2FF"/>
28
+ <text x="548" y="518" fill="#3730A3" font-family="Arial, sans-serif" font-size="17">Reply path</text>
29
+ <text x="548" y="548" fill="#334155" font-family="Arial, sans-serif" font-size="16">Text uses context_token</text>
30
+ <text x="548" y="576" fill="#334155" font-family="Arial, sans-serif" font-size="16">Media uploads use a real local file path</text>
31
+
32
+ <rect x="896" y="196" width="308" height="424" rx="28" fill="#FFFBEB" stroke="#F4DEAB" stroke-width="2"/>
33
+ <text x="928" y="250" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">Quest files</text>
34
+ <rect x="928" y="300" width="244" height="220" rx="20" fill="#fff" stroke="#F0E1B8"/>
35
+ <text x="952" y="338" fill="#92400E" font-family="Arial, sans-serif" font-size="17" font-weight="700">userfiles/weixin/&lt;batch&gt;/</text>
36
+ <text x="952" y="376" fill="#334155" font-family="Arial, sans-serif" font-size="16">manifest.json</text>
37
+ <text x="952" y="408" fill="#334155" font-family="Arial, sans-serif" font-size="16">001-image.png</text>
38
+ <text x="952" y="440" fill="#334155" font-family="Arial, sans-serif" font-size="16">002-video.mp4</text>
39
+ <text x="952" y="472" fill="#334155" font-family="Arial, sans-serif" font-size="16">003-report.pdf</text>
40
+ <text x="952" y="512" fill="#475569" font-family="Arial, sans-serif" font-size="16">Durable files the quest can read later</text>
41
+
42
+ <path d="M396 408H470" stroke="#94A3B8" stroke-width="8" stroke-linecap="round"/>
43
+ <path d="M808 408H882" stroke="#94A3B8" stroke-width="8" stroke-linecap="round"/>
44
+ </svg>
@@ -0,0 +1,57 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720" fill="none">
2
+ <rect width="1280" height="720" rx="32" fill="#F7FBF8"/>
3
+ <rect x="40" y="40" width="1200" height="640" rx="28" fill="#FFFFFF" stroke="#D7E9DC" stroke-width="2"/>
4
+ <circle cx="108" cy="108" r="34" fill="#22C55E"/>
5
+ <path d="M92 108C92 99.16 99.16 92 108 92C116.84 92 124 99.16 124 108C124 116.84 116.84 124 108 124C99.16 124 92 116.84 92 108Z" fill="#fff" fill-opacity=".18"/>
6
+ <path d="M100 116L108 101L116 116H100Z" fill="#fff"/>
7
+ <text x="164" y="98" fill="#0F172A" font-family="Arial, sans-serif" font-size="34" font-weight="700">DeepScientist Weixin Bind Flow</text>
8
+ <text x="164" y="138" fill="#475569" font-family="Arial, sans-serif" font-size="20">Settings -&gt; Connectors -&gt; WeChat -&gt; Bind -&gt; QR login -&gt; auto-saved connector</text>
9
+
10
+ <rect x="72" y="196" width="368" height="430" rx="28" fill="#F7FBF8" stroke="#CFE5D5" stroke-width="2"/>
11
+ <rect x="102" y="228" width="104" height="36" rx="18" fill="#DCFCE7"/>
12
+ <text x="129" y="251" fill="#166534" font-family="Arial, sans-serif" font-size="18" font-weight="700">Step 1</text>
13
+ <text x="102" y="304" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">Open WeChat card</text>
14
+ <rect x="102" y="338" width="308" height="188" rx="22" fill="#fff" stroke="#DDEBE1"/>
15
+ <text x="126" y="370" fill="#0F172A" font-family="Arial, sans-serif" font-size="19" font-weight="700">DeepScientist</text>
16
+ <text x="126" y="402" fill="#334155" font-family="Arial, sans-serif" font-size="17">Settings</text>
17
+ <text x="126" y="434" fill="#334155" font-family="Arial, sans-serif" font-size="17">Connectors</text>
18
+ <text x="126" y="466" fill="#334155" font-family="Arial, sans-serif" font-size="17">WeChat</text>
19
+ <rect x="126" y="488" width="160" height="28" rx="14" fill="#111827"/>
20
+ <text x="157" y="507" fill="#fff" font-family="Arial, sans-serif" font-size="15" font-weight="700">Bind WeChat</text>
21
+ <text x="102" y="572" fill="#475569" font-family="Arial, sans-serif" font-size="17">DeepScientist generates the QR itself.</text>
22
+ <text x="102" y="598" fill="#475569" font-family="Arial, sans-serif" font-size="17">No manual token form is required.</text>
23
+
24
+ <rect x="456" y="196" width="368" height="430" rx="28" fill="#FBFCFF" stroke="#D7E3F5" stroke-width="2"/>
25
+ <rect x="486" y="228" width="104" height="36" rx="18" fill="#E0E7FF"/>
26
+ <text x="513" y="251" fill="#4338CA" font-family="Arial, sans-serif" font-size="18" font-weight="700">Step 2</text>
27
+ <text x="486" y="304" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">Scan and confirm</text>
28
+ <rect x="498" y="344" width="140" height="140" rx="18" fill="#fff" stroke="#CBD5E1" stroke-width="2"/>
29
+ <rect x="520" y="366" width="96" height="96" fill="#111827"/>
30
+ <rect x="534" y="380" width="22" height="22" fill="#fff"/>
31
+ <rect x="580" y="380" width="22" height="22" fill="#fff"/>
32
+ <rect x="534" y="426" width="22" height="22" fill="#fff"/>
33
+ <rect x="566" y="412" width="14" height="14" fill="#fff"/>
34
+ <rect x="594" y="426" width="8" height="8" fill="#fff"/>
35
+ <rect x="666" y="344" width="124" height="220" rx="28" fill="#ECFDF5" stroke="#BBF7D0"/>
36
+ <rect x="684" y="370" width="88" height="140" rx="18" fill="#FFFFFF" stroke="#D1E7D6"/>
37
+ <text x="699" y="402" fill="#0F172A" font-family="Arial, sans-serif" font-size="17" font-weight="700">WeChat</text>
38
+ <text x="699" y="438" fill="#334155" font-family="Arial, sans-serif" font-size="14">Scan QR</text>
39
+ <text x="699" y="462" fill="#334155" font-family="Arial, sans-serif" font-size="14">Confirm login</text>
40
+ <text x="699" y="486" fill="#334155" font-family="Arial, sans-serif" font-size="14">Wait for save</text>
41
+ <text x="486" y="596" fill="#475569" font-family="Arial, sans-serif" font-size="17">The phone completes the confirmation.</text>
42
+
43
+ <rect x="840" y="196" width="368" height="430" rx="28" fill="#F8FCFF" stroke="#CDE5EC" stroke-width="2"/>
44
+ <rect x="870" y="228" width="104" height="36" rx="18" fill="#CCFBF1"/>
45
+ <text x="897" y="251" fill="#0F766E" font-family="Arial, sans-serif" font-size="18" font-weight="700">Step 3</text>
46
+ <text x="870" y="304" fill="#0F172A" font-family="Arial, sans-serif" font-size="28" font-weight="700">Connector saved</text>
47
+ <rect x="870" y="340" width="308" height="200" rx="22" fill="#fff" stroke="#D8EAEE"/>
48
+ <text x="896" y="376" fill="#0F172A" font-family="Arial, sans-serif" font-size="19" font-weight="700">Saved binding</text>
49
+ <text x="896" y="416" fill="#334155" font-family="Arial, sans-serif" font-size="17">enabled: true</text>
50
+ <text x="896" y="448" fill="#334155" font-family="Arial, sans-serif" font-size="17">transport: ilink_long_poll</text>
51
+ <text x="896" y="480" fill="#334155" font-family="Arial, sans-serif" font-size="17">bot_token: persisted</text>
52
+ <text x="896" y="512" fill="#334155" font-family="Arial, sans-serif" font-size="17">account_id + login_user_id</text>
53
+ <text x="870" y="586" fill="#475569" font-family="Arial, sans-serif" font-size="17">DeepScientist starts long polling automatically.</text>
54
+
55
+ <path d="M444 410H452" stroke="#94A3B8" stroke-width="8" stroke-linecap="round"/>
56
+ <path d="M828 410H836" stroke="#94A3B8" stroke-width="8" stroke-linecap="round"/>
57
+ </svg>
@@ -1,152 +1,350 @@
1
1
  # 00 快速开始:启动 DeepScientist 并运行第一个项目
2
2
 
3
- 这份文档面向第一次使用 DeepScientist 的用户,目标是让你从安装直接走到“成功启动并跑起来一个项目”。
3
+ 可以把 DeepScientist 理解成一个长期运行在本地的科研工作区:你定义任务,准备资源,它持续往前推进,并把文件、分支、笔记和结果都留在你的机器上。
4
+
5
+ 这份文档面向第一次使用 DeepScientist 的用户,写法尽量偏“照着做”:一步做什么、为什么这么做,都讲清楚。
4
6
 
5
7
  你只需要完成四步:
6
8
 
7
9
  1. 安装 DeepScientist
8
10
  2. 启动本地运行时
9
- 3. 在首页创建一个新项目
10
- 4. 从项目列表重新打开已有任务
11
+ 3. 打开首页
12
+ 4. 用一个真实示例创建第一个项目
11
13
 
12
14
  本文中的截图直接使用当前在线页面 `deepscientist.cc:20999` 作为示例。你本地运行后的页面 `127.0.0.1:20999` 通常会与它保持一致或非常接近。
13
15
 
14
- ## 1. 安装
16
+ 当前平台支持:DeepScientist 目前仅支持 Linux 和 macOS,当前版本暂不支持 Windows。
17
+
18
+ ## 安全建议:先隔离,再启动
19
+
20
+ 在你第一次启动 DeepScientist 前,强烈建议先接受下面这条原则:
21
+
22
+ - 如果环境允许,优先在 Docker 容器、虚拟机或同等级隔离环境中运行
23
+ - 一律使用非 root 账号启动,不要直接用 root 运行
24
+ - 不要优先拿生产机、重要服务器或带敏感数据的宿主机做首次试跑
25
+ - 不要轻易把 `0.0.0.0` 端口、反向代理地址或网页入口公开分享给别人
26
+ - 如果后面会绑定微信、QQ、Lingzhu 等 connector,更不要把这个站点当成可随意共享的网页
27
+
28
+ 原因很直接:DeepScientist 具备自动执行命令、改文件、安装依赖、发送外部消息和读写项目数据的能力。一旦权限给大了,或者站点被错误暴露,后果可能包括服务器损坏、数据丢失、密钥泄露、connector 被盗用,甚至研究结果被错误伪造却未被及时发现。
29
+
30
+ 完整说明见:
31
+
32
+ - [11 协议与风险说明](./11_LICENSE_AND_RISK.md)
33
+
34
+ ## 0. 开始前先准备什么
35
+
36
+ 建议你先准备好这些:
37
+
38
+ - 安装好 Node.js `>=18.18` 和 npm `>=9`;请优先参考官方页面安装:https://nodejs.org/en/download
39
+ - 一个已经完成认证的 Codex CLI;第一次运行 `ds` 前,请先执行 `codex --login`(或 `codex`)并完成认证
40
+ - 模型或 API 凭证
41
+ - 如果任务比较重,准备好 GPU 或远程服务器
42
+ - 如果你要长期运行,优先准备 Docker 或其他隔离环境,并准备一个非 root 账号专门启动 DeepScientist
43
+ - 如果要从已有工作开始,准备好代码仓库、数据或 baseline 链接
44
+ - 如果你希望在网页之外接收进展,也可以先配置一个 connector,例如 QQ
45
+
46
+ 如果你还在选择合适的 Coding Plan / 订阅方案,可以先看这些官方页面:
47
+
48
+ - ChatGPT 定价:https://openai.com/chatgpt/pricing/
49
+ - ChatGPT Plus 帮助页:https://help.openai.com/en/articles/6950777-what-is-chatgpt-plus%3F.eps
50
+ - MiniMax Coding Plan:https://platform.minimaxi.com/docs/guides/pricing-codingplan
51
+ - GLM Coding Plan:https://docs.bigmodel.cn/cn/coding-plan/overview
52
+ - 阿里百炼 Coding Plan:https://help.aliyun.com/zh/model-studio/coding-plan
53
+ - 火山引擎 Ark Coding Plan:https://www.volcengine.com/docs/82379/1925115?lang=zh
54
+
55
+ ## 1. 先安装 Node.js,再安装 DeepScientist
56
+
57
+ DeepScientist 目前仅支持 Linux 和 macOS。
58
+
59
+ 在安装 DeepScientist 本身之前,请先从 Node.js 官方页面安装 Node.js:
60
+
61
+ https://nodejs.org/en/download
15
62
 
16
- 全局安装 DeepScientist:
63
+ 请确保你的环境满足:
64
+
65
+ - Node.js `>=18.18`
66
+ - npm `>=9`
67
+
68
+ 运行:
17
69
 
18
70
  ```bash
19
71
  npm install -g @researai/deepscientist
20
72
  ```
21
73
 
22
- 如果你后续还要在本地编译论文 PDF,也可以顺手安装轻量级 LaTeX 运行时:
74
+ 这一步会把 `ds` 命令安装到你的机器上。
75
+
76
+ DeepScientist 依赖一个可用的 Codex CLI。npm 包会尽量把随包的 Codex 依赖一起装好,但如果安装完成后 `codex` 仍然不可用,请显式修复:
23
77
 
24
78
  ```bash
25
- ds latex install-runtime
79
+ npm install -g @openai/codex
26
80
  ```
27
81
 
28
- ## 2. 启动 DeepScientist
29
-
30
- 启动本地 daemon 与 Web 工作区:
82
+ 如果你后面还要在本地编译论文 PDF,可以再运行:
31
83
 
32
84
  ```bash
33
- ds
85
+ ds latex install-runtime
34
86
  ```
35
87
 
36
- DeepScientist 现在使用 `uv` 管理锁定的本地 Python 运行时。如果你已经激活了 conda 环境,且其中的 Python 满足 `>=3.11`,`ds` 会优先使用它;否则 `uv` 会自动在 DeepScientist home 下准备受管 Python。
88
+ 这一步会安装一个轻量级 TinyTeX 运行时。
89
+
90
+ ## 2. 第一次运行 `ds` 前,先完成 Codex 配置
37
91
 
38
- 如果你的机器上还没有 `uv`,第一次运行 `ds` 时会自动在本地安装一份。npm 包本身也已经带上了 Codex CLI 依赖,因此不需要再单独执行 `npm install -g @openai/codex`;但你后续仍然可能需要手动运行一次 `codex` 完成登录。
92
+ 运行:
39
93
 
40
- 默认情况下,DeepScientist home 在 macOS / Linux 上是 `~/DeepScientist`,在 Windows 上是 `%USERPROFILE%\\DeepScientist`。如果你希望放到别的路径,可以直接使用 `ds --home <path>`。
94
+ ```bash
95
+ codex --login
96
+ ```
41
97
 
42
- 如果你希望把 DeepScientist home 放到当前工作目录下的 `./DeepScientist` 中,可以运行:
98
+ 如果你的 Codex CLI 版本没有 `--login`,就运行:
43
99
 
44
100
  ```bash
45
- ds --here
101
+ codex
46
102
  ```
47
103
 
48
- 它等价于 `ds --home "$PWD/DeepScientist"`。
104
+ 然后在交互式界面里完成认证。
49
105
 
50
- 如果你是从源码仓库安装,并希望把默认的 CLI 安装基路径改到别的位置,可以使用:
106
+ 接着先做一次环境确认:
51
107
 
52
108
  ```bash
53
- bash install.sh --dir /data/DeepScientist
109
+ ds doctor
54
110
  ```
55
111
 
56
- 如果你已经有一个正在使用的 DeepScientist home,之后又想安全迁移到别的路径,可以使用:
112
+ DeepScientist 会在启动前强制做一次真实的 Codex hello 探测。当前版本里,这个探测会先尝试 `~/DeepScientist/config/runners.yaml` 中配置的 runner 模型,默认是 `gpt-5.4`。如果你的 Codex 账号或本地 CLI 配置不能访问它,DeepScientist 会自动回退到当前 Codex 默认模型,并把后续运行持久化为 `model: inherit`。
113
+
114
+ ## 3. 启动本地运行时
115
+
116
+ 运行:
57
117
 
58
118
  ```bash
59
- ds migrate /data/DeepScientist
119
+ ds
60
120
  ```
61
121
 
62
- `ds migrate` 会先显示当前绝对路径和目标绝对路径,停止托管 daemon,要求二次确认,校验复制结果,并在确认迁移成功后才删除旧路径。
122
+ 这会启动本地 daemon 和网页工作区。
63
123
 
64
- 默认情况下,网页会运行在:
124
+ 再次强调:
65
125
 
66
- ```text
67
- http://127.0.0.1:20999
126
+ - 推荐优先在 Docker 或其他隔离环境里运行
127
+ - 推荐始终使用非 root 用户启动
128
+ - 如果只是第一次试跑,不要先把服务暴露到公网
129
+
130
+ DeepScientist 现在使用 `uv` 管理锁定的本地 Python 运行时。如果你已经激活了 conda 环境,且其中的 Python 满足 `>=3.11`,`ds` 会优先使用它;否则会自动在 DeepScientist home 下准备一份受管 Python。
131
+
132
+ 默认情况下,DeepScientist home 是:
133
+
134
+ - macOS / Linux:`~/DeepScientist`
135
+
136
+ 如果你希望把 DeepScientist home 放到当前目录下,可以运行:
137
+
138
+ ```bash
139
+ ds --here
68
140
  ```
69
141
 
70
- 如果浏览器没有自动打开,就手动访问这个地址。
142
+ 它等价于 `ds --home "$PWD/DeepScientist"`。
71
143
 
72
- 如果你想改端口,可以直接运行:
144
+ 如果你想换一个端口,可以运行:
73
145
 
74
146
  ```bash
75
147
  ds --port 21000
76
148
  ```
77
149
 
78
- 如果你希望绑定到所有网卡地址:
150
+ 这会把网页界面放到 `21000` 端口。
79
151
 
80
- ```bash
81
- ds --host 0.0.0.0 --port 21000
152
+ 默认情况下,本地网页地址是:
153
+
154
+ ```text
155
+ http://127.0.0.1:20999
82
156
  ```
83
157
 
84
- ## 3. 认识首页
158
+ 如果浏览器没有自动打开,就手动访问这个地址。
159
+
160
+ ## 4. 打开首页
85
161
 
86
162
  启动完成后,先打开 `/` 首页。
87
163
 
88
164
  ![DeepScientist 首页](../images/quickstart/00-home.png)
89
165
 
90
- 首页故意做得很简单,核心只有两个按钮:
166
+ 运行 12 小时之后,你的项目首页更可能像下面这样:
167
+
168
+ ![DeepScientist 项目首页](../assets/branding/projects.png)
169
+
170
+ 你最先会看到两个入口:
171
+
172
+ - `Start Research`:创建一个新项目,并立刻开始新的研究任务
173
+ - `Open Project`:重新打开已有项目
174
+
175
+ 第一次使用时,先点击 `Start Research`。
91
176
 
92
- - `Start Research`:创建一个新的项目,并立刻启动新的研究任务
93
- - `打开项目`:打开已有项目列表,重新进入已经存在的任务
177
+ ## 5. 用一个真实示例创建第一个项目
94
178
 
95
- 如果你是第一次使用,建议先从 `Start Research` 开始。
179
+ 这里使用一个经过整理的真实示例,它来自 quest `025` 的启动输入,但我把它改得更正式、更适合公开文档。
96
180
 
97
- ## 4. 使用 Start Research 创建新项目
181
+ 这个示例项目的目标是:
98
182
 
99
- 点击 `Start Research`,会弹出启动表单。
183
+ - 复现官方的 Mandela-Effect baseline
184
+ - 保持原论文的任务定义与评测协议
185
+ - 研究在混合正确 / 错误社会信号下,如何实现更强的 truth-preserving collaboration
186
+ - 使用两个本地推理端点提高吞吐量
187
+
188
+ 点击 `Start Research`,打开启动弹窗。
100
189
 
101
190
  ![Start Research 弹窗](../images/quickstart/01-start-research.png)
102
191
 
103
- 这个弹窗不只是“新建任务”,它还会为 agent 写入本次研究的启动合同。
192
+ ### 5.1 先填简短字段
193
+
194
+ 先用这些值:
195
+
196
+ | 界面字段 | 示例值 | 为什么这样填 |
197
+ |---|---|---|
198
+ | `Project title` | `Mandela-Effect Reproduction and Truth-Preserving Collaboration` | 标题简短、明确,后面在项目列表里也好认 |
199
+ | `Project ID` | 留空,或填 `025` | 想自动编号就留空;只有你明确想固定项目编号时才手动填写 |
200
+ | `Connector delivery` | 第一次建议用 `Local only` | 先把本地工作流跑通;如果你已经配好了 QQ 等 connector,也可以在这里直接绑定一个目标 |
201
+
202
+ ### 5.2 填写主研究请求
203
+
204
+ 把下面这段内容粘贴到 `Primary research request`:
205
+
206
+ ```text
207
+ Please reproduce the official Mandela-Effect repository and paper, then study how to improve truth-preserving collaboration under mixed correct and incorrect social signals.
208
+
209
+ The core research question is: how can a multi-agent system remain factually robust under social influence while still learning from correct peers?
104
210
 
105
- 最重要的字段是:
211
+ 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.
212
+ ```
213
+
214
+ 这段写法是比较好的,因为它同时做了四件事:
215
+
216
+ - 明确告诉系统要复现什么 baseline
217
+ - 把核心研究问题单独说清楚
218
+ - 说明边界:不要换任务,不要乱改评测协议
219
+ - 给出研究方向提示,但没有把实现路线写死
220
+
221
+ ### 5.3 填写 baseline 和参考资料
222
+
223
+ 如果这是你第一次跑这个任务,`Reusable baseline` 先留空。
224
+
225
+ 如果你已经把官方 baseline 导入过 registry,那么这里就直接选择它。这样 DeepScientist 会优先 attach 这个可信 baseline,而不是重新从零恢复。
226
+
227
+ 把下面内容粘贴到 `Baseline links`:
228
+
229
+ ```text
230
+ https://github.com/bluedream02/Mandela-Effect
231
+ ```
232
+
233
+ 把下面内容粘贴到 `Reference papers / repos`:
234
+
235
+ ```text
236
+ https://arxiv.org/abs/2602.00428
237
+ ```
238
+
239
+ 这两项的作用很直接:
240
+
241
+ - `Baseline links` 告诉系统 baseline 从哪里恢复
242
+ - `Reference papers / repos` 告诉系统哪篇论文和哪套方法定义了这个任务
243
+
244
+ ### 5.4 填写运行约束
245
+
246
+ 把下面内容粘贴到 `Runtime constraints`:
247
+
248
+ ```text
249
+ - Keep the task definition and evaluation protocol aligned with the official baseline unless a change is explicitly justified.
250
+ - Use two OpenAI-compatible local inference endpoints for throughput:
251
+ - `http://127.0.0.1:8004/v1`
252
+ - `http://127.0.0.1:8008/v1`
253
+ - Use API key `1234` and model `/model/gpt-oss-120b` on both endpoints.
254
+ - Keep generation settings close to the baseline unless a justified adjustment is required.
255
+ - Implement asynchronous execution, automatic retry on request failure, and resumable scripts.
256
+ - Split requests across both endpoints so throughput stays high without overloading the service.
257
+ - Record failed, degraded, or inconclusive runs honestly instead of hiding them.
258
+ ```
259
+
260
+ 这个字段非常重要。很多用户会把运行细节散落在聊天里,但真正稳妥的做法,是把它们写成项目的硬约束。
261
+
262
+ ### 5.5 填写研究目标
263
+
264
+ 把下面内容粘贴到 `Goals`:
265
+
266
+ ```text
267
+ 1. Restore and verify the official Mandela-Effect baseline as a trustworthy starting point.
268
+ 2. Measure key metrics and failure modes on the designated `gpt-oss-120b` setup.
269
+ 3. Propose at least one literature-grounded direction for stronger truth-preserving collaboration.
270
+ 4. Produce experiment and analysis artifacts that are strong enough to support paper writing.
271
+ ```
272
+
273
+ 这里不要写成“做出一个很厉害的方法”这种空话。更好的写法是把“第一轮真正要交付什么”拆成几条明确结果。
274
+
275
+ ### 5.6 选择策略字段
276
+
277
+ 这个例子里,建议你使用下面这些选项:
278
+
279
+ | 界面字段 | 示例值 | 实际含义 |
280
+ |---|---|---|
281
+ | `Research paper` | `On` | 这个项目默认继续推进到分析和论文式产出 |
282
+ | `Research intensity` | `Balanced` | 先把 baseline 立稳,再测试一个合理方向 |
283
+ | `Decision mode` | `Autonomous` | 普通路线选择默认自己推进,除非真的需要用户决定 |
284
+ | `Launch mode` | `Standard` | 按默认科研主线启动 |
285
+ | `Language` | `English` | 默认用英文组织 kickoff prompt 和用户侧产物 |
286
+
287
+ 你在前端里选完这些以后,系统还会自动推导出一组真正提交的合同字段:
106
288
 
107
- - `项目 ID`:通常会自动按顺序生成,例如 `00`、`01`、`02`
108
- - `Primary request` / 研究目标:你真正希望 agent 完成的科研任务
109
- - `Reuse Baseline`:可选;如果你要复用已有 baseline,就在这里选择
110
- - `Research intensity`:本次研究的投入强度
111
- - `Decision mode`:`Autonomous` 表示除非真的需要审批,否则 agent 默认持续自主推进
112
- - `Research paper`:是否要求本次任务同时产出论文式结果
113
- - `Language`:本次运行希望使用的用户侧语言
289
+ - `scope = baseline_plus_direction`
290
+ - 如果没有选 `Reusable baseline`,则 `baseline_mode = restore_from_url`
291
+ - 如果选了 `Reusable baseline`,则 `baseline_mode = existing`
292
+ - `resource_policy = balanced`
293
+ - `time_budget_hours = 24`
294
+ - `git_strategy = semantic_head_plus_controlled_integration`
114
295
 
115
- 第一次测试时,建议你这样填写:
296
+ 这就是为什么 `Start Research` 不只是“新建项目表单”。它还会写入一份结构化的 `startup_contract`,后续 prompt builder 会持续读取它。
116
297
 
117
- - 写一个清晰、单一的研究问题
118
- - 如果还没有 baseline,就先留空
119
- - 强度选择 `Balanced` 或 `Sprint`
120
- - 决策模式保持 `Autonomous`
298
+ ### 5.7 检查预览,然后创建项目
121
299
 
122
- 最后点击弹窗底部的 `Start Research` 即可正式启动。
300
+ 点击创建之前,先检查右侧的 prompt 预览。
123
301
 
124
- ## 5. 使用“打开项目”重新进入已有任务
302
+ 至少确认这几件事都在里面:
125
303
 
126
- 点击首页上的 `打开项目`,会打开项目列表。
304
+ - 研究请求是否清楚
305
+ - baseline 链接是否对
306
+ - 参考论文是否对
307
+ - 运行约束是否完整
308
+ - 目标是否写成了可执行结果
309
+ - 决策模式和交付模式是否符合预期
310
+
311
+ 确认没问题之后,点击 `Create project`。
312
+
313
+ 这时前端实际会提交:
314
+
315
+ - 一段编译好的 kickoff prompt
316
+ - 一个可选的 `requested_baseline_ref`
317
+ - 一个可选的 `requested_connector_bindings`
318
+ - 一份结构化的 `startup_contract`
319
+
320
+ 如果你想进一步理解这些字段的真实提交结构,请继续看 [02 Start Research 参考](./02_START_RESEARCH_GUIDE.md)。
321
+
322
+ ## 6. 重新打开已有项目
323
+
324
+ 点击首页上的 `Open Project`,会打开项目列表。
127
325
 
128
326
  ![打开项目 弹窗](../images/quickstart/02-list-quest.png)
129
327
 
130
- 这个列表适合以下场景:
328
+ 你可以用它来:
131
329
 
132
- - 重新进入一个已经在运行中的项目
133
- - 打开一个以前已经完成或已经创建过的项目
134
- - 按项目标题或项目 ID 搜索目标任务
330
+ - 重新进入一个正在运行中的项目
331
+ - 重新打开以前完成过的项目
332
+ - 按项目标题或项目 ID 搜索目标项目
135
333
 
136
- 列表中的每一行都对应一个项目仓库。点击对应卡片即可进入该项目的工作区。
334
+ 列表中的每一行都对应一个项目仓库。点击卡片即可进入。
137
335
 
138
- ## 6. 打开项目之后会发生什么
336
+ ## 7. 打开项目之后会发生什么
139
337
 
140
- 创建或打开项目后,DeepScientist 会进入这个项目的工作区页面。
338
+ 创建或打开项目后,DeepScientist 会进入这个项目的工作区。
141
339
 
142
- 通常你会在里面做这些事情:
340
+ 通常第一轮你会做这些事情:
143
341
 
144
- 1. 在 Copilot / Studio 中观察 agent 的实时进展
145
- 2. 查看文件、笔记和生成出来的 artifact
146
- 3. 在 Canvas 中理解当前项目的图结构与阶段进展
147
- 4. 只有在你明确想中断时,才主动停止任务
342
+ 1. 在 Copilot / Studio 里看进展
343
+ 2. 检查文件、笔记和 artifact
344
+ 3. 在 Canvas 中理解项目图结构与阶段进展
345
+ 4. 除非你明确想打断,否则先让任务继续推进
148
346
 
149
- ## 7. 常用运行命令
347
+ ## 8. 常用运行命令
150
348
 
151
349
  查看当前状态:
152
350
 
@@ -154,21 +352,64 @@ ds --host 0.0.0.0 --port 21000
154
352
  ds --status
155
353
  ```
156
354
 
157
- 停止当前本地 daemon:
355
+ 这会告诉你本地运行时是否正常在线。
356
+
357
+ 停止 daemon:
158
358
 
159
359
  ```bash
160
360
  ds --stop
161
361
  ```
162
362
 
163
- 如果启动异常或环境有问题,运行诊断:
363
+ 这会停止当前本地 DeepScientist daemon。
364
+
365
+ 运行诊断:
164
366
 
165
367
  ```bash
166
368
  ds doctor
167
369
  ```
168
370
 
169
- ## 8. 下一步该看什么
371
+ 当你怀疑是启动、配置、runner connector 出问题时,用这个命令排查。
372
+
373
+ ## 9. 下一步该看什么
374
+
375
+ - [文档总览](./README.md)
376
+ - [12 引导式工作流教程](./12_GUIDED_WORKFLOW_TOUR.md)
377
+ - [02 Start Research 参考](./02_START_RESEARCH_GUIDE.md)
378
+ - [13 核心架构说明](./13_CORE_ARCHITECTURE_GUIDE.md)
379
+ - [01 设置参考](./01_SETTINGS_REFERENCE.md)
380
+ - [03 QQ 连接器指南](./03_QQ_CONNECTOR_GUIDE.md)
381
+ - [05 TUI 使用指南](./05_TUI_GUIDE.md)
382
+
383
+ ## 10. 简短 FAQ
384
+
385
+ ### 如果我是从源码仓库安装,想装到另一个目录里,怎么做?
386
+
387
+ 运行:
388
+
389
+ ```bash
390
+ bash install.sh --dir /data/DeepScientist
391
+ ```
392
+
393
+ 这个命令适合你在源码 checkout 里工作,但希望把 DeepScientist 安装到另一个独立运行目录时使用。
394
+
395
+ ### 如果我已经有一个 DeepScientist home,想安全迁移到新路径,怎么做?
396
+
397
+ 运行:
398
+
399
+ ```bash
400
+ ds migrate /data/DeepScientist
401
+ ```
402
+
403
+ 这是迁移现有 DeepScientist home 的正式方式。
404
+
405
+ ### 如果我确实需要监听所有网卡,怎么启动?
406
+
407
+ 运行:
408
+
409
+ ```bash
410
+ ds --host 0.0.0.0 --port 21000
411
+ ```
412
+
413
+ 只有在你确实需要外部访问时才这样做,而且建议先看风险说明:
170
414
 
171
- - [01 设置参考:如何配置 DeepScientist](./01_SETTINGS_REFERENCE.md)
172
- - [02 Start Research 参考:如何填写科研启动合同](./02_START_RESEARCH_GUIDE.md)
173
- - [03 QQ 连接器指南:如何用 QQ 与 DeepScientist 沟通](./03_QQ_CONNECTOR_GUIDE.md)
174
- - [05 TUI 使用指南:如何使用终端界面](./05_TUI_GUIDE.md)
415
+ - [11 协议与风险说明](./11_LICENSE_AND_RISK.md)
@@ -443,6 +443,8 @@ claude:
443
443
  - 页面标签:`Binary`
444
444
  - 作用:启动 runner 时使用的命令名或绝对路径。
445
445
  - `Test` 行为:检查该二进制是否在 `PATH` 上。
446
+ - 首次使用说明:DeepScientist 不会替你完成 Codex 认证。第一次运行 `ds` 前,必须先确保 `codex --login`(或 `codex`)已经成功完成。
447
+ - 修复说明:如果执行 `npm install -g @researai/deepscientist` 之后 bundled Codex 依赖仍然缺失,请显式安装 `npm install -g @openai/codex`。
446
448
 
447
449
  **`config_dir`**
448
450
 
@@ -457,6 +459,7 @@ claude:
457
459
  - 默认值:`codex=gpt-5.4`,`claude=inherit`
458
460
  - 页面标签:`Default model`
459
461
  - 作用:项目和单次请求没有覆盖时的默认模型。
462
+ - 启动说明:DeepScientist 的 Codex 就绪探测会优先使用这里配置的模型。如果你的 Codex 账号无法访问它,DeepScientist 会自动回退到当前 Codex 默认模型,并持久化为 `model: inherit`。
460
463
 
461
464
  **`model_reasoning_effort`**
462
465