@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
@@ -16,6 +16,92 @@
16
16
  3. 绑定一个可选的可复用 baseline
17
17
  4. 持久化 `startup_contract`,供后续 prompt builder 持续读取
18
18
 
19
+ ## 实战示例:整理后的 quest 025 启动输入
20
+
21
+ 理解这个弹窗最快的方法,不是先背字段定义,而是先看一个真实例子。
22
+
23
+ 下面这个例子来自 quest `025` 的真实启动输入,但我做了必要的整理,让它更适合公开文档和第一次填写时参考。这个任务的目标是:
24
+
25
+ - 复现官方的 Mandela-Effect baseline
26
+ - 保持原论文任务与评测协议
27
+ - 研究在混合正确 / 错误社会信号下,如何实现更强的 truth-preserving collaboration
28
+ - 使用两个本地 OpenAI-compatible 端点提高吞吐量
29
+
30
+ ### 当前前端里先填的短字段
31
+
32
+ | 弹窗字段 | 示例值 | 为什么这样填 |
33
+ |---|---|---|
34
+ | `Project title` | `Mandela-Effect Reproduction and Truth-Preserving Collaboration` | 标题清楚,后面在卡片、工作区和搜索里都好认 |
35
+ | `Project ID` | 留空,或者填 `025` | 想自动编号就留空;只有你明确要固定编号时才手动填写 |
36
+ | `Connector delivery` | 第一次建议 `Local only`,如果 QQ 已配置也可以选一个目标 | 当前前端对每个 quest 最多只允许绑定一个外部 connector 目标 |
37
+ | `Reusable baseline` | 第一次可留空;如果官方 baseline 已经导入 registry,就直接选它 | 一旦选中,自动推导的 `baseline_mode` 会变成 `existing` |
38
+ | `Research paper` | `On` | 让项目保持分析和论文式产出在范围内 |
39
+ | `Research intensity` | `Balanced` | 先把 baseline 立稳,再探索一个合理方向 |
40
+ | `Decision mode` | `Autonomous` | 普通路线选择默认自己推进,不把常规决策丢回给用户 |
41
+ | `Launch mode` | `Standard` | 按默认科研主线启动 |
42
+ | `Language` | `English` | 默认用英文组织 kickoff prompt 和用户侧产物 |
43
+
44
+ ### 同一个例子里的长文本字段
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
+ ### 这个例子在前端里会自动推导出什么
92
+
93
+ 如果 `Reusable baseline` 留空,且 `Research intensity` 选择 `Balanced`,当前前端会自动推导:
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
+ 如果你已经选中了一个可复用 baseline,那么只会有一项不同:
102
+
103
+ - `baseline_mode = existing`
104
+
19
105
  ## 当前前端数据模型
20
106
 
21
107
  ### `StartResearchTemplate`
@@ -83,6 +169,12 @@ type StartResearchContractFields = {
83
169
  title,
84
170
  goal: compiled_prompt,
85
171
  quest_id,
172
+ requested_connector_bindings: [
173
+ {
174
+ connector,
175
+ conversation_id
176
+ }
177
+ ],
86
178
  requested_baseline_ref: {
87
179
  baseline_id,
88
180
  variant_id
@@ -138,6 +230,26 @@ type StartResearchContractFields = {
138
230
 
139
231
  - 声明后续 kickoff 和交流默认偏好的语言。
140
232
 
233
+ ### Connector 投递
234
+
235
+ **`requested_connector_bindings`**
236
+
237
+ - 这是创建项目时随请求一起提交的字段,但不在 `startup_contract` 里面。
238
+ - 当前前端对每个 quest 最多只允许一个外部 connector 目标。
239
+ - 典型结构如下:
240
+
241
+ ```ts
242
+ [
243
+ {
244
+ connector: 'qq',
245
+ conversation_id: 'qq:private:openid-123'
246
+ }
247
+ ]
248
+ ```
249
+
250
+ - 如果你保持项目仅本地运行,这个数组就是空的。
251
+ - 如果你选中的那个目标已经绑定在别的 quest 上,当前项目创建时会把旧绑定替换掉。
252
+
141
253
  ### Baseline 与参考资料
142
254
 
143
255
  **`baseline_id`**
@@ -1,230 +1,99 @@
1
- # 04 Lingzhu 连接器指南:如何配置 Lingzhu
1
+ # 04 Lingzhu 连接器指南:把 Rokid Glasses 绑定到 DeepScientist
2
2
 
3
- 本文说明如何在 `Settings > Connectors > Lingzhu` 中完成 Lingzhu 伴生端点配置。
3
+ Lingzhu 现在是一个极简的一步式绑定流程。
4
4
 
5
- 适用范围:
5
+ DeepScientist 会直接在自己的 daemon / Web 端口上提供 Lingzhu 兼容路由:
6
6
 
7
- - 仅包含配置教程
8
- - 面向 OpenClaw 兼容的 Lingzhu bridge 参数
9
- - 本地健康检查与 SSE 冒烟测试
10
- - 说明需要把哪些值填回 Lingzhu 平台
7
+ - `GET /metis/agent/api/health`
8
+ - `POST /metis/agent/api/sse`
11
9
 
12
- 本文不展开讨论云部署架构。你只需要:
10
+ 真实设备要想接入,Rokid 平台里填写的地址必须就是外部可以访问到的 DeepScientist 公网地址,不能是 `127.0.0.1`、`localhost` 或私网地址。
13
11
 
14
- - 一个已经跑起来的 OpenClaw gateway
15
- - 一个眼镜端可访问的公网 IP 或公网域名
12
+ 参考:
16
13
 
17
- 参考来源:
14
+ - Rokid 开发者论坛:https://forum.rokid.com/post/detail/2831
15
+ - Rokid 智能体平台:https://agent-develop.rokid.com/space
18
16
 
19
- - Rokid 论坛配置页面:https://forum.rokid.com/post/detail/2831
20
- - 仓库内置 bridge 目录:`assets/connectors/lingzhu/openclaw-bridge`
21
- - 仓库内置 OpenClaw 配置模板:`assets/connectors/lingzhu/openclaw.lingzhu.config.template.json`
17
+ ## 1. 绑定前提
22
18
 
23
- ## 1. DeepScientist 现在会自动提供什么
19
+ 先确认:
24
20
 
25
- Lingzhu 设置卡会自动生成并校验:
21
+ - DeepScientist 已正常启动
22
+ - 你当前打开的 DeepScientist 网页地址就是最终对外可访问的公网地址
23
+ - 如果当前网页地址是本地地址或私网地址,Lingzhu 不应直接保存
26
24
 
27
- - 本地 health URL
28
- - 本地 SSE URL
29
- - 公网 SSE URL
30
- - `auth_ak`
31
- - OpenClaw 配置片段
32
- - 本地探测 `curl`
25
+ ## 2. 页面里现在保留什么
33
26
 
34
- 当前随包 bridge 还额外做了三件事:
27
+ `Settings > Connectors > Lingzhu` 现在只保留必要内容:
35
28
 
36
- - 在模型真正开始生成前,先自动发送一条可见的“已收到”回执
37
- - 保留 SSE 注释心跳
38
- - 在上游长时间静默时补发轻量可见进度心跳
29
+ - 一个 `Add Lingzhu (Rokid Glasses)` 入口
30
+ - Rokid 平台创建表单截图
31
+ - 自动生成的可复制字段
32
+ - 中文绑定指引
33
+ - 保存按钮
39
34
 
40
- 需要明确的是:
35
+ 不再要求你先手动改 host、port、agent、OpenClaw 配置片段或额外调试步骤。
41
36
 
42
- - Lingzhu 在 DeepScientist 里被视为 companion endpoint
43
- - 它不是像 QQ 那样的完整双向聊天 connector
37
+ ## 3. 点击后会自动生成什么
44
38
 
45
- ## 2. 开始前请先确认
39
+ 点击 `Add Lingzhu (Rokid Glasses)` 后,弹窗会自动显示这些值,并且每一项都可以直接复制:
46
40
 
47
- 建议先确认下面几项:
41
+ - 自定义智能体ID
42
+ - 自定义智能体url
43
+ - 自定义智能体AK
44
+ - 智能体名称
45
+ - 类别
46
+ - 功能介绍
47
+ - 开场白
48
+ - 入参类型
49
+ - 图标 PNG 地址
48
50
 
49
- - DeepScientist 已成功安装并运行
50
- - 本地 OpenClaw gateway 已启动
51
- - 你知道 OpenClaw HTTP gateway 的端口,通常是 `18789`
52
- - 你已经有公网 IP 或公网域名
51
+ 其中:
53
52
 
54
- 重要提醒:
53
+ - `Custom agent URL` 会自动生成成 `https://<你的公网地址>/metis/agent/api/sse`
54
+ - `AK` 会自动随机生成,并在保存后长期复用,不会每次都变
55
+ - logo 使用 DeepScientist 的 PNG 资源,方便直接上传到 Rokid
55
56
 
56
- - `127.0.0.1` 只能用于本地健康检查
57
- - Lingzhu 设备侧必须访问公网地址
57
+ ![Rokid 平台创建三方智能体](../images/lingzhu/rokid-agent-platform-create.png)
58
58
 
59
- ## 3. 打开设置页
59
+ ## 4. 用户怎么做
60
60
 
61
- 打开:
61
+ 在 Rokid 平台:
62
62
 
63
- - `Settings > Connectors > Lingzhu`
63
+ 1. 打开 `项目开发 -> 三方智能体 -> 创建`
64
+ 2. 选择“自定义智能体”
65
+ 3. 把弹窗里自动生成的字段逐项复制过去
66
+ 4. 图标上传 DeepScientist PNG logo
67
+ 5. Rokid 表单填写完成后,回到 DeepScientist 点击保存
64
68
 
65
- 页面会分成几块:
69
+ 保存完成后,Lingzhu 绑定就算完成。
66
70
 
67
- - 网关端点
68
- - 鉴权与身份
69
- - 自动生成值
70
- - 探测与校验
71
- - 高级调试
71
+ ## 5. 后续怎么用
72
72
 
73
- ![Lingzhu 设置概览](../images/lingzhu/lingzhu-settings-overview.svg)
73
+ 眼镜侧后续只需要请求:
74
74
 
75
- ## 4. 先填写端点
75
+ - `POST /metis/agent/api/sse`
76
76
 
77
- 推荐值如下:
77
+ 并带上:
78
78
 
79
- | 字段 | 推荐值 | 说明 |
80
- | --- | --- | --- |
81
- | `Enabled` | `true` | 开启 companion 配置 |
82
- | `Transport` | `openclaw_sse` | 固定值,不要改 |
83
- | `Local host` | `127.0.0.1` | 只用于本地探测 |
84
- | `Gateway port` | `18789` | 与 OpenClaw gateway 保持一致 |
85
- | `Public base URL` | `http://<公网IP>:18789` | 必须是眼镜端真正能访问到的地址 |
79
+ - `Authorization: Bearer <保存后的AK>`
86
80
 
87
- 如果你不确定本地端点应该怎么填,可以直接点击:
81
+ 使用规则:
88
82
 
89
- - `Use local defaults`
83
+ - 新任务必须以 `我现在的任务是 ...` 开头
84
+ - 只有这个前缀后面的正文才会被当成新的 DeepScientist 任务
85
+ - 如果只是想继续拿中间进展,不要重复这个前缀,直接说 `找DeepScientist` 或 `继续`
90
86
 
91
- ## 5. 生成 AK 和身份值
87
+ ## 6. 常见问题
92
88
 
93
- 建议如下:
89
+ ### 为什么不能用 `127.0.0.1`
94
90
 
95
- | 字段 | 推荐值 |
96
- | --- | --- |
97
- | `Auth AK` | 点击 `Generate AK` 自动生成 |
98
- | `Agent ID` | `main` |
99
- | `Lingzhu system prompt` | 可选 |
91
+ 因为 Rokid 平台和外部设备访问不到你的本地回环地址。Lingzhu 只应该注册公网地址。
100
92
 
101
- 需要保证下面两处完全一致:
93
+ ### 为什么要自动生成 `AK`
102
94
 
103
- - OpenClaw Lingzhu 插件配置
104
- - Lingzhu 平台配置
95
+ 因为 `AK` 本质上就是这个外部接入口的 Bearer 密钥。系统生成并持久化,比手填更稳定,也更不容易出错。
105
96
 
106
- 也就是:
97
+ ### 保存后还需要再手动配很多参数吗
107
98
 
108
- - `auth_ak`
109
- - `agent_id`
110
-
111
- ## 6. 使用自动生成值
112
-
113
- DeepScientist 会直接展示你需要复制的内容:
114
-
115
- - 本地 health URL
116
- - 本地 SSE URL
117
- - 公网 SSE URL
118
- - OpenClaw 配置片段
119
- - 探测 curl
120
-
121
- 其中真正要填回 Lingzhu 平台的是:
122
-
123
- - 公网 SSE URL
124
- - AK
125
-
126
- ![Lingzhu 平台填写值](../images/lingzhu/lingzhu-platform-values.svg)
127
-
128
- ## 7. 更新 OpenClaw
129
-
130
- 你可以直接使用:
131
-
132
- - 设置页里自动生成的配置片段
133
- - 或仓库内置模板 `assets/connectors/lingzhu/openclaw.lingzhu.config.template.json`
134
-
135
- 内置 bridge 的安装命令为:
136
-
137
- ```bash
138
- openclaw plugins install ./assets/connectors/lingzhu/openclaw-bridge
139
- ```
140
-
141
- 至少应确保 OpenClaw 开启:
142
-
143
- ```json
144
- {
145
- "gateway": {
146
- "port": 18789,
147
- "http": {
148
- "endpoints": {
149
- "chatCompletions": {
150
- "enabled": true
151
- }
152
- }
153
- }
154
- }
155
- }
156
- ```
157
-
158
- DeepScientist 也会自动把完整的 Lingzhu 插件配置片段生成出来:
159
-
160
- ![OpenClaw 配置片段](../images/lingzhu/lingzhu-openclaw-config.svg)
161
-
162
- ## 8. 执行本地探测
163
-
164
- 保存参数后,点击:
165
-
166
- - `Run Lingzhu probe`
167
-
168
- DeepScientist 会依次执行:
169
-
170
- 1. `GET /metis/agent/api/health`
171
- 2. `POST /metis/agent/api/sse`
172
-
173
- 理想结果:
174
-
175
- - `Connection = reachable`
176
- - `Auth = ready`
177
- - 探测结果没有报错
178
-
179
- ## 9. 需要填回 Lingzhu 平台的值
180
-
181
- 只需要填:
182
-
183
- - `Public SSE URL`
184
- - `Auth AK`
185
-
186
- 不要填:
187
-
188
- - `127.0.0.1`
189
- - 任意本地机器名
190
-
191
- ## 10. 常见失败原因
192
-
193
- ### Health 显示 offline
194
-
195
- 通常说明:
196
-
197
- - OpenClaw 没启动
198
- - `gateway_port` 填错
199
- - `local_host` 填错
200
-
201
- ### SSE probe 失败
202
-
203
- 通常说明:
204
-
205
- - `auth_ak` 不一致
206
- - Lingzhu SSE 路径没有暴露出来
207
- - OpenClaw 的 `chatCompletions.enabled` 还没打开
208
-
209
- ### 本地探测通过,但设备仍无法接入
210
-
211
- 通常说明:
212
-
213
- - `Public base URL` 不是公网可达地址
214
- - 防火墙或反向代理还没有放行端口
215
-
216
- ## 11. 说明
217
-
218
- 这块配置保持 registry-first:
219
-
220
- - Lingzhu 仍然落在 `connectors.yaml`
221
- - 自动生成值来自同一份 structured config
222
- - 校验、测试、前端渲染都消费同一条 connector 记录
223
-
224
- 对于长任务,更稳妥的实际策略是:
225
-
226
- - 先由 bridge 自动回执
227
- - 在上游静默阶段由 bridge 补发可见进度心跳
228
- - 通过 `per_user` 会话连续保持多轮上下文
229
-
230
- 这会明显改善兼容性,但仍不能消除 Lingzhu 平台单次请求超时的硬限制。
99
+ 不需要。Lingzhu 现在的目标就是让用户只看到必要字段,复制过去,然后保存完成。
@@ -10,21 +10,35 @@
10
10
  npm install -g @researai/deepscientist
11
11
  ```
12
12
 
13
- 2. 先直接尝试启动:
13
+ 2. 先确保 Codex 已安装并完成认证:
14
+
15
+ ```bash
16
+ codex --login
17
+ ```
18
+
19
+ 如果 `codex` 缺失,请显式修复:
20
+
21
+ ```bash
22
+ npm install -g @openai/codex
23
+ ```
24
+
25
+ 如果你的 Codex CLI 版本没有 `--login`,就运行 `codex` 并在交互式界面里完成认证。
26
+
27
+ 3. 先直接尝试启动:
14
28
 
15
29
  ```bash
16
30
  ds
17
31
  ```
18
32
 
19
- 3. 如果启动失败,或者看起来不正常,再运行:
33
+ 4. 如果启动失败,或者看起来不正常,再运行:
20
34
 
21
35
  ```bash
22
36
  ds doctor
23
37
  ```
24
38
 
25
- 4. 从上到下阅读诊断结果,优先修复失败项。
39
+ 5. 从上到下阅读诊断结果,优先修复失败项。
26
40
 
27
- 5. 修完后重新运行 `ds doctor`,直到检查通过,再运行 `ds`。
41
+ 6. 修完后重新运行 `ds doctor`,直到检查通过,再运行 `ds`。
28
42
 
29
43
  ## `ds doctor` 会检查什么
30
44
 
@@ -49,16 +63,38 @@
49
63
  npm install -g @researai/deepscientist
50
64
  ```
51
65
 
66
+ 如果装完以后 `codex` 仍然不可用,请显式安装:
67
+
68
+ ```bash
69
+ npm install -g @openai/codex
70
+ ```
71
+
52
72
  ### 已安装 Codex,但还没有登录
53
73
 
54
74
  运行:
55
75
 
56
76
  ```bash
57
- codex
77
+ codex --login
58
78
  ```
59
79
 
80
+ 如果你的 Codex CLI 版本没有 `--login`,就运行 `codex` 并在交互式界面里完成认证。
81
+
60
82
  先完成一次登录,再重新执行 `ds doctor`。
61
83
 
84
+ ### 当前配置的 Codex 模型不可用
85
+
86
+ DeepScientist 会在启动前强制做一次真实的 Codex hello 探测。当前版本里,这个探测会先使用:
87
+
88
+ ```text
89
+ ~/DeepScientist/config/runners.yaml
90
+ ```
91
+
92
+ 里配置的 runner 模型,默认值是 `gpt-5.4`。如果你的 Codex 账号或本地 CLI 配置不能访问这个模型,DeepScientist 现在会自动重试当前 Codex 默认模型,并把后续运行持久化为 `model: inherit`。如果你仍然想指定某个具体模型,再手动改配置并重新执行:
93
+
94
+ ```bash
95
+ ds doctor
96
+ ```
97
+
62
98
  ### 没有安装 `uv`
63
99
 
64
100
  正常情况下,第一次运行 `ds` 会自动在本地安装 `uv`。如果自动安装失败,再手动执行:
@@ -0,0 +1,144 @@
1
+ # 10 微信连接器指南:把个人微信绑定到 DeepScientist
2
+
3
+ 这篇文档只讲 DeepScientist 内置的微信连接器,不讲 OpenClaw 安装。
4
+
5
+ DeepScientist 已经内置了微信 iLink 运行时,因此你不需要再额外执行:
6
+
7
+ - `npx`
8
+ - 单独安装 OpenClaw
9
+ - 再起一个本地桥接程序
10
+ - 配置公网 webhook
11
+
12
+ 真正需要的绑定动作只有这四步:
13
+
14
+ 1. 打开 `Settings > Connectors > WeChat`
15
+ 2. 点击 `绑定微信`
16
+ 3. 用微信扫码
17
+ 4. 在手机微信里确认登录
18
+
19
+ 确认完成后,DeepScientist 会自动保存微信 connector,并开始长轮询。
20
+
21
+ ## 1. 这个连接器现在能做什么
22
+
23
+ 绑定成功后,DeepScientist 现在可以:
24
+
25
+ - 接收微信文本消息
26
+ - 接收微信图片、视频、文件附件
27
+ - 把入站附件复制到当前 quest 的 `userfiles/weixin/...`
28
+ - 把文本回复发回同一个微信上下文
29
+ - 在 agent 提供真实本地文件时,发送微信原生图片、视频、文件
30
+
31
+ 入站媒体不会只留在临时缓存里,而是会被复制进 quest。本地落盘路径形态如下:
32
+
33
+ ```text
34
+ ~/DeepScientist/quests/<quest_id>/userfiles/weixin/<message_batch>/
35
+ ```
36
+
37
+ 这意味着微信附件现在已经比较接近 QQ 的处理方式了:quest 能拿到真实、持久化的本地文件。
38
+
39
+ ![DeepScientist 微信绑定总览](../images/weixin/weixin-settings-bind.svg)
40
+
41
+ ## 2. 绑定前先确认
42
+
43
+ 开始前请先确认:
44
+
45
+ - DeepScientist 的 daemon 和网页已经正常启动
46
+ - 你可以打开 `Settings > Connectors > WeChat`
47
+ - 手机上已经登录了一个真实的个人微信账号,准备用它扫码
48
+
49
+ 这张参考图只用于帮助你确认扫码时应使用已经登录目标微信账号的手机。真正的绑定动作仍然是在 DeepScientist 页面里弹出二维码后扫码完成,而不是去跑额外的 `npx` 工具。
50
+
51
+ ![微信客户端参考图](../images/weixin/weixin-plugin-entry.png)
52
+
53
+ ## 3. 从 Settings 页面直接绑定
54
+
55
+ 打开:
56
+
57
+ - [Settings > Connectors > WeChat](/settings/connectors#connector-weixin)
58
+
59
+ 然后按顺序做:
60
+
61
+ 1. 点击 `绑定微信`
62
+ 2. 等待 DeepScientist 生成二维码
63
+ 3. 用微信扫码
64
+ 4. 在手机上确认登录
65
+
66
+ 这里有几个关键点:
67
+
68
+ - 弹窗里只保留二维码这一张图,因为 DeepScientist 已经内置了完整的 iLink 登录流程
69
+ - 绑定过程中不需要手填 `bot_token`
70
+ - 二维码弹窗里不需要额外再点一次保存
71
+ - 平台一旦返回 `bot_token` 和账号信息,DeepScientist 会自动持久化
72
+
73
+ 成功后,微信卡片里会显示:
74
+
75
+ - `机器人账号`
76
+ - `扫码账号`
77
+
78
+ 这两项就是当前保存下来的微信绑定信息。
79
+
80
+ ![二维码扫码确认流程](../images/weixin/weixin-qr-confirm.svg)
81
+
82
+ ## 4. 绑定后怎么验证文本和多媒体
83
+
84
+ 二维码登录成功后,建议按这个最短路径验证:
85
+
86
+ 1. 在 `Start Research` 或项目界面把 quest 绑定到微信 connector
87
+ 2. 从微信发一条文本、图片、视频或文件
88
+ 3. 等待 DeepScientist 把它接入到 quest
89
+ 4. 确认回复回到了同一条微信会话里
90
+
91
+ 当前行为是:
92
+
93
+ - 入站文本会直接进入 quest,作为用户消息
94
+ - 入站图片、视频、文件会被下载并复制进 quest 本地 `userfiles/weixin/...`
95
+ - 纯媒体消息不会再被直接丢弃
96
+ - 出站文本会沿用运行时维护的 `context_token`
97
+ - 出站图片、视频、文件在 agent 提供真实本地文件路径时可以正常发送
98
+
99
+ ![Quest 本地多媒体流转](../images/weixin/weixin-quest-media-flow.svg)
100
+
101
+ ## 5. agent 发送微信多媒体时应怎么做
102
+
103
+ 对用户来说,规则其实很简单:
104
+
105
+ - 只回文本时,正常回复即可
106
+ - 要发微信原生图片、视频、文件时,agent 必须给出一个真实的 quest 本地文件
107
+
108
+ 所以 agent 最好优先使用这些目录中的真实文件:
109
+
110
+ ```text
111
+ artifacts/...
112
+ experiments/...
113
+ paper/...
114
+ userfiles/...
115
+ ```
116
+
117
+ 而不是默认依赖一个任意的外链。
118
+
119
+ ## 6. 常见问题
120
+
121
+ ### 二维码一直在等待
122
+
123
+ 优先检查:
124
+
125
+ - 是否用的是你真正想绑定的那个微信账号扫码
126
+ - 手机里是否已经完成“确认登录”
127
+ - 等待期间 DeepScientist 是否持续在线
128
+
129
+ 如果二维码过期,DeepScientist 会自动刷新。
130
+
131
+ ### 为什么我只看到文本,没有看到入站多媒体
132
+
133
+ 请用真实图片、视频或文件重测一次。成功后,quest 目录里应该能看到:
134
+
135
+ ```text
136
+ userfiles/weixin/<message_batch>/manifest.json
137
+ ```
138
+
139
+ 以及旁边被复制下来的实际媒体文件。
140
+
141
+ ## 7. 参考
142
+
143
+ - 菜鸟教程个人微信接入说明:https://www.runoob.com/ai-agent/openclaw-weixin.html
144
+ - 上游微信协议文档:https://github.com/hao-ji-xing/openclaw-weixin/blob/main/weixin-bot-api.md