@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.
- package/README.md +107 -94
- package/assets/branding/connector-qq.png +0 -0
- package/assets/branding/connector-rokid.png +0 -0
- package/assets/branding/connector-weixin.png +0 -0
- package/assets/branding/projects.png +0 -0
- package/bin/ds.js +168 -9
- package/docs/assets/branding/projects.png +0 -0
- package/docs/en/00_QUICK_START.md +308 -70
- package/docs/en/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/en/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
- package/docs/en/09_DOCTOR.md +41 -5
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
- package/docs/en/11_LICENSE_AND_RISK.md +256 -0
- package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +427 -0
- package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/en/README.md +79 -0
- package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.png +0 -0
- package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
- package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
- package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
- package/docs/images/weixin/weixin-settings-bind.svg +57 -0
- package/docs/zh/00_QUICK_START.md +315 -74
- package/docs/zh/01_SETTINGS_REFERENCE.md +3 -0
- package/docs/zh/02_START_RESEARCH_GUIDE.md +112 -0
- package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
- package/docs/zh/09_DOCTOR.md +41 -5
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
- package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
- package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +423 -0
- package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
- package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
- package/docs/zh/README.md +126 -0
- package/install.sh +0 -34
- package/package.json +2 -2
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/annotations.py +343 -0
- package/src/deepscientist/artifact/arxiv.py +484 -37
- package/src/deepscientist/artifact/service.py +574 -108
- package/src/deepscientist/arxiv_library.py +275 -0
- package/src/deepscientist/bash_exec/service.py +9 -0
- package/src/deepscientist/bridges/builtins.py +2 -0
- package/src/deepscientist/bridges/connectors.py +447 -0
- package/src/deepscientist/channels/__init__.py +2 -0
- package/src/deepscientist/channels/builtins.py +3 -1
- package/src/deepscientist/channels/qq.py +1 -1
- package/src/deepscientist/channels/qq_gateway.py +1 -1
- package/src/deepscientist/channels/relay.py +7 -1
- package/src/deepscientist/channels/weixin.py +59 -0
- package/src/deepscientist/channels/weixin_ilink.py +317 -0
- package/src/deepscientist/config/models.py +22 -2
- package/src/deepscientist/config/service.py +431 -60
- package/src/deepscientist/connector/__init__.py +4 -0
- package/src/deepscientist/connector/connector_profiles.py +481 -0
- package/src/deepscientist/connector/lingzhu_support.py +668 -0
- package/src/deepscientist/connector/qq_profiles.py +206 -0
- package/src/deepscientist/connector/weixin_support.py +663 -0
- package/src/deepscientist/connector_profiles.py +1 -374
- package/src/deepscientist/connector_runtime.py +2 -0
- package/src/deepscientist/daemon/api/handlers.py +165 -5
- package/src/deepscientist/daemon/api/router.py +13 -1
- package/src/deepscientist/daemon/app.py +1130 -61
- package/src/deepscientist/doctor.py +5 -2
- package/src/deepscientist/gitops/diff.py +120 -29
- package/src/deepscientist/lingzhu_support.py +1 -182
- package/src/deepscientist/mcp/server.py +11 -4
- package/src/deepscientist/prompts/builder.py +15 -0
- package/src/deepscientist/qq_profiles.py +1 -196
- package/src/deepscientist/quest/node_traces.py +23 -0
- package/src/deepscientist/quest/service.py +112 -43
- package/src/deepscientist/quest/stage_views.py +71 -5
- package/src/deepscientist/runners/codex.py +55 -3
- package/src/deepscientist/weixin_support.py +1 -0
- package/src/prompts/connectors/lingzhu.md +3 -1
- package/src/prompts/connectors/weixin.md +230 -0
- package/src/prompts/system.md +2 -0
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-D0mTXG4-.js} +156 -48
- package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-Db0cTXxm.js} +1 -1
- package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-DrV8je02.js} +164 -9
- package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-QXMSCH71.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-7hhtWj_E.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-BWMSnRJe.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-7J9h9Vy_.js} +20 -21
- package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-CHJl_0lr.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-1qSow1es.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-eQpPPCEp.js} +2 -1
- package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BwRfi89Z.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-836PVQWV.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-C2y_556i.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BRzJbGsn.js} +12 -12
- package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-DIX7Mlzu.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-DzRaTAlq.js} +14 -7
- package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DZUfIUnp.js} +73 -6
- package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-BwtICzue.js} +103 -34
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
- package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DHeIAMsx.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C3tCmFox.js} +5 -4
- package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-CQsKVm3t.js} +10 -10
- package/src/ui/dist/assets/bot-BEA2vWuK.js +21 -0
- package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
- package/src/ui/dist/assets/{code-BWAY76JP.js → code-XfbSR8K2.js} +1 -1
- package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-BjxNaIfy.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-D_lLVQk0.js} +1 -1
- package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-D9x_5vlY.js} +1 -1
- package/src/ui/dist/assets/{image-D-NZM-6P.js → image-BhWT33W1.js} +1 -1
- package/src/ui/dist/assets/{index-DHZJ_0TI.js → index--c4iXtuy.js} +12 -12
- package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-BDxipwrC.js} +2 -2
- package/src/ui/dist/assets/{index-7Chr1g9c.js → index-DZTZ8mWP.js} +14221 -9523
- package/src/ui/dist/assets/{index-DGIYDuTv.css → index-Dqj-Mjb4.css} +2 -13
- package/src/ui/dist/assets/index-PJbSbPTy.js +25 -0
- package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-K8izTGgo.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DfBors6y.js} +16 -1
- package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-yFK1J4fL.js} +1 -1
- package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-PENr2zcz.js} +1 -74
- package/src/ui/dist/assets/select-CAbJDfYv.js +1690 -0
- package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-DEuYJqTl.js} +1 -1
- package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-omoSUmcd.js} +2 -13
- package/src/ui/dist/assets/{trash-BvTgE5__.js → trash--F119N47.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-D31UR23I.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-BH6KcMzq.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-CZ613PM5.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-BgDLAv3z.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
- package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
- package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
- package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
- package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
- package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
- package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
- package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
- 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
|
|
1
|
+
# 04 Lingzhu 连接器指南:把 Rokid Glasses 绑定到 DeepScientist
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lingzhu 现在是一个极简的一步式绑定流程。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
DeepScientist 会直接在自己的 daemon / Web 端口上提供 Lingzhu 兼容路由:
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
20
|
-
- 仓库内置 bridge 目录:`assets/connectors/lingzhu/openclaw-bridge`
|
|
21
|
-
- 仓库内置 OpenClaw 配置模板:`assets/connectors/lingzhu/openclaw.lingzhu.config.template.json`
|
|
17
|
+
## 1. 绑定前提
|
|
22
18
|
|
|
23
|
-
|
|
19
|
+
先确认:
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
- DeepScientist 已正常启动
|
|
22
|
+
- 你当前打开的 DeepScientist 网页地址就是最终对外可访问的公网地址
|
|
23
|
+
- 如果当前网页地址是本地地址或私网地址,Lingzhu 不应直接保存
|
|
26
24
|
|
|
27
|
-
|
|
28
|
-
- 本地 SSE URL
|
|
29
|
-
- 公网 SSE URL
|
|
30
|
-
- `auth_ak`
|
|
31
|
-
- OpenClaw 配置片段
|
|
32
|
-
- 本地探测 `curl`
|
|
25
|
+
## 2. 页面里现在保留什么
|
|
33
26
|
|
|
34
|
-
|
|
27
|
+
`Settings > Connectors > Lingzhu` 现在只保留必要内容:
|
|
35
28
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
29
|
+
- 一个 `Add Lingzhu (Rokid Glasses)` 入口
|
|
30
|
+
- Rokid 平台创建表单截图
|
|
31
|
+
- 自动生成的可复制字段
|
|
32
|
+
- 中文绑定指引
|
|
33
|
+
- 保存按钮
|
|
39
34
|
|
|
40
|
-
|
|
35
|
+
不再要求你先手动改 host、port、agent、OpenClaw 配置片段或额外调试步骤。
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
- 它不是像 QQ 那样的完整双向聊天 connector
|
|
37
|
+
## 3. 点击后会自动生成什么
|
|
44
38
|
|
|
45
|
-
|
|
39
|
+
点击 `Add Lingzhu (Rokid Glasses)` 后,弹窗会自动显示这些值,并且每一项都可以直接复制:
|
|
46
40
|
|
|
47
|
-
|
|
41
|
+
- 自定义智能体ID
|
|
42
|
+
- 自定义智能体url
|
|
43
|
+
- 自定义智能体AK
|
|
44
|
+
- 智能体名称
|
|
45
|
+
- 类别
|
|
46
|
+
- 功能介绍
|
|
47
|
+
- 开场白
|
|
48
|
+
- 入参类型
|
|
49
|
+
- 图标 PNG 地址
|
|
48
50
|
|
|
49
|
-
|
|
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
|
-
-
|
|
57
|
-
- Lingzhu 设备侧必须访问公网地址
|
|
57
|
+

|
|
58
58
|
|
|
59
|
-
##
|
|
59
|
+
## 4. 用户怎么做
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
在 Rokid 平台:
|
|
62
62
|
|
|
63
|
-
|
|
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
|
-
|
|
73
|
+
眼镜侧后续只需要请求:
|
|
74
74
|
|
|
75
|
-
|
|
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
|
-
-
|
|
83
|
+
- 新任务必须以 `我现在的任务是 ...` 开头
|
|
84
|
+
- 只有这个前缀后面的正文才会被当成新的 DeepScientist 任务
|
|
85
|
+
- 如果只是想继续拿中间进展,不要重复这个前缀,直接说 `找DeepScientist` 或 `继续`
|
|
90
86
|
|
|
91
|
-
##
|
|
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
|
-
|
|
104
|
-
- Lingzhu 平台配置
|
|
95
|
+
因为 `AK` 本质上就是这个外部接入口的 Bearer 密钥。系统生成并持久化,比手填更稳定,也更不容易出错。
|
|
105
96
|
|
|
106
|
-
|
|
97
|
+
### 保存后还需要再手动配很多参数吗
|
|
107
98
|
|
|
108
|
-
|
|
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
|
-

|
|
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
|
-

|
|
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 现在的目标就是让用户只看到必要字段,复制过去,然后保存完成。
|
package/docs/zh/09_DOCTOR.md
CHANGED
|
@@ -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
|
-
|
|
33
|
+
4. 如果启动失败,或者看起来不正常,再运行:
|
|
20
34
|
|
|
21
35
|
```bash
|
|
22
36
|
ds doctor
|
|
23
37
|
```
|
|
24
38
|
|
|
25
|
-
|
|
39
|
+
5. 从上到下阅读诊断结果,优先修复失败项。
|
|
26
40
|
|
|
27
|
-
|
|
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
|
+

|
|
40
|
+
|
|
41
|
+
## 2. 绑定前先确认
|
|
42
|
+
|
|
43
|
+
开始前请先确认:
|
|
44
|
+
|
|
45
|
+
- DeepScientist 的 daemon 和网页已经正常启动
|
|
46
|
+
- 你可以打开 `Settings > Connectors > WeChat`
|
|
47
|
+
- 手机上已经登录了一个真实的个人微信账号,准备用它扫码
|
|
48
|
+
|
|
49
|
+
这张参考图只用于帮助你确认扫码时应使用已经登录目标微信账号的手机。真正的绑定动作仍然是在 DeepScientist 页面里弹出二维码后扫码完成,而不是去跑额外的 `npx` 工具。
|
|
50
|
+
|
|
51
|
+

|
|
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
|
+

|
|
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
|
+

|
|
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
|