@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
|
@@ -1,216 +1,99 @@
|
|
|
1
|
-
# 04 Lingzhu Connector Guide:
|
|
1
|
+
# 04 Lingzhu Connector Guide: Bind Rokid Glasses to DeepScientist
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lingzhu now uses a minimal one-step binding flow.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
DeepScientist serves the Lingzhu-compatible routes directly on its own daemon / web port:
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
+
References:
|
|
15
13
|
|
|
16
|
-
- Rokid forum
|
|
17
|
-
-
|
|
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.
|
|
17
|
+
## 1. Prerequisites
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
Make sure:
|
|
23
20
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
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
|
-
|
|
25
|
+
## 2. What the UI keeps now
|
|
32
26
|
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
+
You no longer need to manually edit host, port, agent, OpenClaw snippets, or extra probe steps in the main flow.
|
|
40
36
|
|
|
41
|
-
|
|
37
|
+
## 3. What is auto-generated
|
|
42
38
|
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
- Lingzhu devices need a public address
|
|
51
|
+
Important details:
|
|
52
52
|
|
|
53
|
-
|
|
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
|
-
|
|
57
|
+

|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
## 4. What the user does
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
On the Rokid platform:
|
|
60
62
|
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
69
|
+
After Save, the Lingzhu binding is complete.
|
|
68
70
|
|
|
69
|
-
##
|
|
71
|
+
## 5. How it is used afterward
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
The glasses or platform only need to call:
|
|
72
74
|
|
|
73
|
-
|
|
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
|
-
|
|
77
|
+
with:
|
|
82
78
|
|
|
83
|
-
- `
|
|
79
|
+
- `Authorization: Bearer <saved-AK>`
|
|
84
80
|
|
|
85
|
-
|
|
81
|
+
Usage rules:
|
|
86
82
|
|
|
87
|
-
|
|
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
|
-
|
|
90
|
-
| --- | --- |
|
|
91
|
-
| `Auth AK` | click `Generate AK` |
|
|
92
|
-
| `Agent ID` | `main` |
|
|
93
|
-
| `Lingzhu system prompt` | optional |
|
|
87
|
+
## 6. Common questions
|
|
94
88
|
|
|
95
|
-
|
|
89
|
+
### Why can’t I use `127.0.0.1`?
|
|
96
90
|
|
|
97
|
-
|
|
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
|
-
|
|
93
|
+
### Why is `AK` generated automatically?
|
|
101
94
|
|
|
102
|
-
|
|
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
|
-
|
|
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
|
|
111
|
-
|
|
112
|
-

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

|
|
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.
|
package/docs/en/09_DOCTOR.md
CHANGED
|
@@ -10,21 +10,35 @@ Use `ds doctor` when DeepScientist does not start cleanly after installation.
|
|
|
10
10
|
npm install -g @researai/deepscientist
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
2.
|
|
13
|
+
2. Make sure Codex is installed and authenticated:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
codex --login
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If `codex` is missing, repair it explicitly with:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g @openai/codex
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
If your Codex CLI version does not expose `--login`, run `codex` and finish the interactive setup there.
|
|
26
|
+
|
|
27
|
+
3. Try to start DeepScientist:
|
|
14
28
|
|
|
15
29
|
```bash
|
|
16
30
|
ds
|
|
17
31
|
```
|
|
18
32
|
|
|
19
|
-
|
|
33
|
+
4. If startup fails or looks unhealthy, run:
|
|
20
34
|
|
|
21
35
|
```bash
|
|
22
36
|
ds doctor
|
|
23
37
|
```
|
|
24
38
|
|
|
25
|
-
|
|
39
|
+
5. Read the checks from top to bottom and fix the failed items first.
|
|
26
40
|
|
|
27
|
-
|
|
41
|
+
6. Run `ds doctor` again until all checks are healthy, then run `ds`.
|
|
28
42
|
|
|
29
43
|
## What `ds doctor` checks
|
|
30
44
|
|
|
@@ -49,16 +63,38 @@ Run the package install again so the bundled Codex dependency is present:
|
|
|
49
63
|
npm install -g @researai/deepscientist
|
|
50
64
|
```
|
|
51
65
|
|
|
66
|
+
If `codex` is still unavailable afterward, install it explicitly:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npm install -g @openai/codex
|
|
70
|
+
```
|
|
71
|
+
|
|
52
72
|
### Codex is installed but not logged in
|
|
53
73
|
|
|
54
74
|
Run:
|
|
55
75
|
|
|
56
76
|
```bash
|
|
57
|
-
codex
|
|
77
|
+
codex --login
|
|
58
78
|
```
|
|
59
79
|
|
|
80
|
+
If your Codex CLI version does not expose `--login`, run `codex` and finish the interactive setup there.
|
|
81
|
+
|
|
60
82
|
Finish login once, then rerun `ds doctor`.
|
|
61
83
|
|
|
84
|
+
### The configured Codex model is unavailable
|
|
85
|
+
|
|
86
|
+
DeepScientist blocks startup until Codex passes a real startup hello probe. In the current release, that probe first uses the runner model configured in:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
~/DeepScientist/config/runners.yaml
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
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:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
ds doctor
|
|
96
|
+
```
|
|
97
|
+
|
|
62
98
|
### `uv` is missing
|
|
63
99
|
|
|
64
100
|
Normally `ds` will bootstrap a local `uv` automatically. If that bootstrap fails, install it manually:
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# 10 Weixin Connector Guide: Bind Personal WeChat To DeepScientist
|
|
2
|
+
|
|
3
|
+
This guide explains the built-in DeepScientist Weixin connector.
|
|
4
|
+
|
|
5
|
+
DeepScientist already includes the Weixin iLink runtime. You do not need to install OpenClaw, run `npx`, or configure a separate local bridge. The only required binding action is:
|
|
6
|
+
|
|
7
|
+
1. open `Settings > Connectors > WeChat`
|
|
8
|
+
2. click `Bind WeChat`
|
|
9
|
+
3. scan the QR code with WeChat
|
|
10
|
+
4. confirm the login inside WeChat
|
|
11
|
+
|
|
12
|
+
After confirmation, DeepScientist saves the Weixin connector automatically and starts long polling.
|
|
13
|
+
|
|
14
|
+
## 1. What this connector does
|
|
15
|
+
|
|
16
|
+
After binding succeeds, DeepScientist can:
|
|
17
|
+
|
|
18
|
+
- receive WeChat text messages
|
|
19
|
+
- receive WeChat image, video, and file attachments
|
|
20
|
+
- copy inbound attachments into the active quest under `userfiles/weixin/...`
|
|
21
|
+
- send text replies back to the same WeChat context
|
|
22
|
+
- send native WeChat images, videos, and files when the agent attaches a real local file
|
|
23
|
+
|
|
24
|
+
Inbound media is materialized into the quest, not kept only in an ephemeral connector cache. The current path shape is:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
~/DeepScientist/quests/<quest_id>/userfiles/weixin/<message_batch>/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
That makes Weixin media behave much closer to the QQ path: the quest receives durable local files that the agent can read.
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
## 2. Before you bind
|
|
35
|
+
|
|
36
|
+
Check these items first:
|
|
37
|
+
|
|
38
|
+
- DeepScientist daemon and web UI are already running
|
|
39
|
+
- you can open `Settings > Connectors > WeChat`
|
|
40
|
+
- you have a real personal WeChat account on the phone that will scan the QR code
|
|
41
|
+
|
|
42
|
+
This reference screenshot is only there to remind you to use the phone that already holds the target WeChat account. The actual binding still happens from the DeepScientist QR modal, not from a separate `npx` tool.
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
## 3. Bind from the Settings page
|
|
47
|
+
|
|
48
|
+
Open:
|
|
49
|
+
|
|
50
|
+
- [Settings > Connectors > WeChat](/settings/connectors#connector-weixin)
|
|
51
|
+
|
|
52
|
+
Then:
|
|
53
|
+
|
|
54
|
+
1. click `Bind WeChat`
|
|
55
|
+
2. wait for DeepScientist to generate the QR code
|
|
56
|
+
3. scan it with WeChat
|
|
57
|
+
4. confirm the login on the phone
|
|
58
|
+
|
|
59
|
+
Important points:
|
|
60
|
+
|
|
61
|
+
- the modal only shows the QR code because DeepScientist already knows the full iLink login flow
|
|
62
|
+
- there is no manual `bot_token` form during binding
|
|
63
|
+
- there is no extra Save button inside the QR modal
|
|
64
|
+
- when the platform returns `bot_token` and account ids, DeepScientist persists them automatically
|
|
65
|
+
|
|
66
|
+
After success, the WeChat card shows:
|
|
67
|
+
|
|
68
|
+
- `Bot account`
|
|
69
|
+
- `Owner account`
|
|
70
|
+
|
|
71
|
+
That is the saved connector binding.
|
|
72
|
+
|
|
73
|
+

|
|
74
|
+
|
|
75
|
+
## 4. Verify with one text or media message
|
|
76
|
+
|
|
77
|
+
After the QR login succeeds:
|
|
78
|
+
|
|
79
|
+
1. bind a quest to the Weixin connector from `Start Research` or the project surface
|
|
80
|
+
2. send one text, image, video, or file message from WeChat
|
|
81
|
+
3. let DeepScientist ingest it into the quest
|
|
82
|
+
4. confirm the reply arrives in the same WeChat thread
|
|
83
|
+
|
|
84
|
+
Current behavior:
|
|
85
|
+
|
|
86
|
+
- inbound text enters the quest as the user message
|
|
87
|
+
- inbound image, video, and file attachments are downloaded and copied into quest-local `userfiles/weixin/...`
|
|
88
|
+
- media-only inbound messages are no longer dropped
|
|
89
|
+
- outbound text replies use the runtime-managed `context_token`
|
|
90
|
+
- outbound image, video, and file delivery works when the agent sends a real local file path
|
|
91
|
+
|
|
92
|
+

|
|
93
|
+
|
|
94
|
+
## 5. What the agent should do with Weixin media
|
|
95
|
+
|
|
96
|
+
For ordinary user guidance, the important rule is simple:
|
|
97
|
+
|
|
98
|
+
- if the agent only needs to answer with text, normal message replies are enough
|
|
99
|
+
- if the agent needs to send a native WeChat image, video, or file, it must send a real local file from the quest
|
|
100
|
+
|
|
101
|
+
In practice, that means the agent should prefer quest-local files such as:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
artifacts/...
|
|
105
|
+
experiments/...
|
|
106
|
+
paper/...
|
|
107
|
+
userfiles/...
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
instead of depending on an arbitrary external URL.
|
|
111
|
+
|
|
112
|
+
## 6. Troubleshooting
|
|
113
|
+
|
|
114
|
+
### QR code keeps waiting
|
|
115
|
+
|
|
116
|
+
Check:
|
|
117
|
+
|
|
118
|
+
- the phone is scanning with the same WeChat account you want to bind
|
|
119
|
+
- the phone finished the confirmation step inside WeChat
|
|
120
|
+
- DeepScientist is still running while you wait
|
|
121
|
+
|
|
122
|
+
If the QR expires, DeepScientist refreshes it automatically.
|
|
123
|
+
|
|
124
|
+
### I only see text, but not inbound media
|
|
125
|
+
|
|
126
|
+
Re-test with a real image, video, or file. After a successful inbound media message, confirm that the quest now contains:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
userfiles/weixin/<message_batch>/manifest.json
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
and the copied media file next to it.
|
|
133
|
+
|
|
134
|
+
## 7. References
|
|
135
|
+
|
|
136
|
+
- Runoob personal WeChat guide: https://www.runoob.com/ai-agent/openclaw-weixin.html
|
|
137
|
+
- Upstream Weixin protocol reference: https://github.com/hao-ji-xing/openclaw-weixin/blob/main/weixin-bot-api.md
|