@researai/deepscientist 1.5.14 → 1.5.15
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 +8 -0
- package/assets/branding/logo-raster.png +0 -0
- package/bin/ds.js +134 -49
- package/docs/en/00_QUICK_START.md +2 -2
- package/docs/en/01_SETTINGS_REFERENCE.md +20 -4
- package/docs/en/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
- package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/en/README.md +6 -0
- package/docs/zh/00_QUICK_START.md +2 -2
- package/docs/zh/01_SETTINGS_REFERENCE.md +20 -4
- package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
- package/docs/zh/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/zh/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/zh/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/zh/README.md +6 -0
- package/install.sh +2 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/artifact/charts.py +567 -0
- package/src/deepscientist/artifact/guidance.py +50 -10
- package/src/deepscientist/artifact/metrics.py +228 -5
- package/src/deepscientist/artifact/schemas.py +3 -0
- package/src/deepscientist/artifact/service.py +3534 -191
- package/src/deepscientist/bash_exec/models.py +23 -0
- package/src/deepscientist/bash_exec/monitor.py +147 -67
- package/src/deepscientist/bash_exec/runtime.py +218 -156
- package/src/deepscientist/bash_exec/service.py +79 -64
- package/src/deepscientist/bash_exec/shells.py +87 -0
- package/src/deepscientist/bridges/connectors.py +51 -2
- package/src/deepscientist/config/models.py +6 -3
- package/src/deepscientist/config/service.py +7 -2
- package/src/deepscientist/connector/weixin_support.py +122 -1
- package/src/deepscientist/daemon/api/handlers.py +75 -4
- package/src/deepscientist/daemon/api/router.py +1 -0
- package/src/deepscientist/daemon/app.py +758 -206
- package/src/deepscientist/doctor.py +51 -0
- package/src/deepscientist/file_lock.py +48 -0
- package/src/deepscientist/gitops/diff.py +167 -1
- package/src/deepscientist/mcp/server.py +173 -5
- package/src/deepscientist/process_control.py +161 -0
- package/src/deepscientist/prompts/builder.py +267 -442
- package/src/deepscientist/quest/service.py +2255 -163
- package/src/deepscientist/quest/stage_views.py +171 -0
- package/src/deepscientist/runners/base.py +2 -0
- package/src/deepscientist/runners/codex.py +88 -5
- package/src/deepscientist/runners/runtime_overrides.py +17 -1
- package/src/prompts/contracts/shared_interaction.md +13 -4
- package/src/prompts/system.md +916 -72
- package/src/skills/analysis-campaign/SKILL.md +31 -2
- package/src/skills/analysis-campaign/references/artifact-orchestration.md +1 -1
- package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +65 -0
- package/src/skills/baseline/SKILL.md +2 -0
- package/src/skills/decision/SKILL.md +19 -2
- package/src/skills/experiment/SKILL.md +8 -2
- package/src/skills/finalize/SKILL.md +18 -0
- package/src/skills/idea/SKILL.md +78 -0
- package/src/skills/idea/references/idea-generation-playbook.md +100 -0
- package/src/skills/idea/references/outline-seeding-example.md +60 -0
- package/src/skills/intake-audit/SKILL.md +1 -1
- package/src/skills/optimize/SKILL.md +1644 -0
- package/src/skills/rebuttal/SKILL.md +2 -1
- package/src/skills/review/SKILL.md +2 -1
- package/src/skills/write/SKILL.md +80 -12
- package/src/skills/write/references/outline-evidence-contract-example.md +107 -0
- package/src/tui/dist/app/AppContainer.js +3 -0
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-DaF9Nge_.js → AiManusChatView-DDjbFnbt.js} +12 -12
- package/src/ui/dist/assets/{AnalysisPlugin-BSVx6dXE.js → AnalysisPlugin-Yb5IdmaU.js} +1 -1
- package/src/ui/dist/assets/CliPlugin-e64sreyu.js +31037 -0
- package/src/ui/dist/assets/{CodeEditorPlugin-DU9G0Tox.js → CodeEditorPlugin-C4D2TIkU.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-DoX_fI9l.js → CodeViewerPlugin-BVoNZIvC.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-C4FWIXuU.js → DocViewerPlugin-CLChbllo.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-BgfFMgtf.js → GitDiffViewerPlugin-C4xeFyFQ.js} +20 -20
- package/src/ui/dist/assets/{ImageViewerPlugin-tcPkfY_x.js → ImageViewerPlugin-OiMUAcLi.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-_dKV60Bf.js → LabCopilotPanel-BjD2ThQF.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-Bje0ayoC.js → LabPlugin-DQPg-NrB.js} +2 -2
- package/src/ui/dist/assets/{LatexPlugin-CVsBzAln.js → LatexPlugin-CI05XAV9.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-xjmrqv_8.js → MarkdownViewerPlugin-DpeBLYZf.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-mMM2A8wP.js → MarketplacePlugin-DolE58Q2.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-3kVDSOBo.js → NotebookEditor-7Qm2rSWD.js} +11 -11
- package/src/ui/dist/assets/{NotebookEditor-SoJ8X-MO.js → NotebookEditor-C1kWaxKi.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-DElVuHl9.js → PdfLoader-BfOHw8Zw.js} +1 -1
- package/src/ui/dist/assets/{PdfMarkdownPlugin-Bq88XT4G.js → PdfMarkdownPlugin-BulDREv1.js} +2 -2
- package/src/ui/dist/assets/{PdfViewerPlugin-CsCXMo9S.js → PdfViewerPlugin-C-daaOaL.js} +10 -10
- package/src/ui/dist/assets/{SearchPlugin-oUPvy19k.js → SearchPlugin-CjpaiJ3A.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-CRkT9yNy.js → TextViewerPlugin-BxIyqPQC.js} +5 -5
- package/src/ui/dist/assets/{VNCViewer-BgbuvWhR.js → VNCViewer-HAg9mF7M.js} +10 -10
- package/src/ui/dist/assets/{bot-v_RASACv.js → bot-0DYntytV.js} +1 -1
- package/src/ui/dist/assets/{code-5hC9d0VH.js → code-B20Slj_w.js} +1 -1
- package/src/ui/dist/assets/{file-content-D1PxfOrp.js → file-content-DT24KFma.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-DG1oT_Hj.js → file-diff-panel-DK13YPql.js} +1 -1
- package/src/ui/dist/assets/{file-socket-BmdFYQlk.js → file-socket-B4T2o4nR.js} +1 -1
- package/src/ui/dist/assets/{image-Dqe2X2tW.js → image-DSeR_sDS.js} +1 -1
- package/src/ui/dist/assets/{index-RDlNXXx1.js → index-BrFje2Uk.js} +2 -2
- package/src/ui/dist/assets/{index-DVsMKK_y.js → index-BwRJaoTl.js} +1 -1
- package/src/ui/dist/assets/{index-Nt9hS4ck.js → index-D_E4281X.js} +5007 -28514
- package/src/ui/dist/assets/{index-Duvz8Ip0.js → index-DnYB3xb1.js} +12 -12
- package/src/ui/dist/assets/{index-BQG-1s2o.css → index-G7AcWcMu.css} +43 -2
- package/src/ui/dist/assets/{monaco-DIXge1CP.js → monaco-LExaAN3Y.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-BBTTQaO-.js → pdf-effect-queue-BJk5okWJ.js} +1 -1
- package/src/ui/dist/assets/{popover-BWlolyxo.js → popover-D3Gg_FoV.js} +1 -1
- package/src/ui/dist/assets/{project-sync-BM5PkFH4.js → project-sync-C_ygLlVU.js} +1 -1
- package/src/ui/dist/assets/{select-D4dAtrA8.js → select-CpAK6uWm.js} +2 -2
- package/src/ui/dist/assets/{sigma-CKbE5jJT.js → sigma-DEccaSgk.js} +1 -1
- package/src/ui/dist/assets/{square-check-big-CZNGMgiB.js → square-check-big-uUfyVsbD.js} +1 -1
- package/src/ui/dist/assets/{trash-DaB37xAz.js → trash-CXvwwSe8.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-C2OmAcWe.js → useCliAccess-Bnop4mgR.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-Dowd1Ij4.js → useFileDiffOverlay-B8eUAX0I.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-BGjAhAUq.js → wrap-text-9vbOBpkW.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-dMZQMXzc.js → zoom-out-BgVMmOW4.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/src/ui/dist/assets/CliPlugin-C9gzJX41.js +0 -5905
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 16 Telegram Connector Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when you want DeepScientist to continue a quest through Telegram.
|
|
4
|
+
|
|
5
|
+
Telegram in the current open-source runtime uses the built-in polling path:
|
|
6
|
+
|
|
7
|
+
- no public webhook is required
|
|
8
|
+
- the main credential is the BotFather token
|
|
9
|
+
- direct messages can auto-bind to the latest active quest when enabled
|
|
10
|
+
|
|
11
|
+
## 1. What Telegram support includes
|
|
12
|
+
|
|
13
|
+
DeepScientist currently supports Telegram through:
|
|
14
|
+
|
|
15
|
+
- `TelegramPollingService` for inbound polling
|
|
16
|
+
- `GenericRelayChannel` for bindings, inbox/outbox, targets, and runtime status
|
|
17
|
+
- `TelegramConnectorBridge` for direct outbound sends through the Bot API
|
|
18
|
+
|
|
19
|
+
This means Telegram already fits the same quest-binding model as the other connector surfaces.
|
|
20
|
+
|
|
21
|
+
## 2. Recommended setup path
|
|
22
|
+
|
|
23
|
+
1. Open BotFather.
|
|
24
|
+
2. Run `/newbot`.
|
|
25
|
+
3. Save the generated bot token.
|
|
26
|
+
4. Open `Settings > Connectors > Telegram`.
|
|
27
|
+
5. Enable Telegram.
|
|
28
|
+
6. Keep `transport: polling`.
|
|
29
|
+
7. Fill `bot_token`.
|
|
30
|
+
8. Save the connector.
|
|
31
|
+
9. Send one real private message such as `/start` or `/help` to the bot.
|
|
32
|
+
10. Return to DeepScientist and verify that the runtime has discovered the target conversation.
|
|
33
|
+
|
|
34
|
+
## 3. Important config fields
|
|
35
|
+
|
|
36
|
+
Main fields:
|
|
37
|
+
|
|
38
|
+
- `enabled`
|
|
39
|
+
- `transport`
|
|
40
|
+
- `bot_name`
|
|
41
|
+
- `bot_token`
|
|
42
|
+
- `command_prefix`
|
|
43
|
+
- `require_mention_in_groups`
|
|
44
|
+
- `dm_policy`
|
|
45
|
+
- `allow_from`
|
|
46
|
+
- `group_policy`
|
|
47
|
+
- `group_allow_from`
|
|
48
|
+
- `groups`
|
|
49
|
+
- `auto_bind_dm_to_active_quest`
|
|
50
|
+
|
|
51
|
+
For the full field reference, see [01 Settings Reference](./01_SETTINGS_REFERENCE.md).
|
|
52
|
+
|
|
53
|
+
## 4. Binding model
|
|
54
|
+
|
|
55
|
+
Telegram conversations are normalized into quest-aware connector ids like:
|
|
56
|
+
|
|
57
|
+
- `telegram:direct:<chat_id>`
|
|
58
|
+
- `telegram:group:<chat_id>`
|
|
59
|
+
|
|
60
|
+
DeepScientist binds quests to those normalized conversation ids, not to transient webhook state.
|
|
61
|
+
|
|
62
|
+
Important rules:
|
|
63
|
+
|
|
64
|
+
- one quest keeps local access plus at most one external connector target
|
|
65
|
+
- direct messages can auto-follow the latest active quest when auto-bind is enabled
|
|
66
|
+
- bindings can be changed later from the project settings page
|
|
67
|
+
|
|
68
|
+
## 5. Group chat behavior
|
|
69
|
+
|
|
70
|
+
By default:
|
|
71
|
+
|
|
72
|
+
- Telegram direct messages are allowed
|
|
73
|
+
- group behavior depends on `group_policy`
|
|
74
|
+
- if `require_mention_in_groups` is `true`, the bot only reacts when explicitly mentioned or when a command is used
|
|
75
|
+
|
|
76
|
+
This is the recommended default for larger shared groups.
|
|
77
|
+
|
|
78
|
+
## 6. Outbound delivery
|
|
79
|
+
|
|
80
|
+
Telegram outbound delivery currently focuses on text-first quest updates:
|
|
81
|
+
|
|
82
|
+
- progress
|
|
83
|
+
- milestone summaries
|
|
84
|
+
- binding notices
|
|
85
|
+
- structured quest replies
|
|
86
|
+
|
|
87
|
+
The current bridge uses `sendMessage` through the Bot API.
|
|
88
|
+
|
|
89
|
+
## 7. Troubleshooting
|
|
90
|
+
|
|
91
|
+
### Telegram does not appear in Settings
|
|
92
|
+
|
|
93
|
+
Telegram may be hidden by the system connector gate. Confirm that:
|
|
94
|
+
|
|
95
|
+
- `config.connectors.system_enabled.telegram` is `true`
|
|
96
|
+
|
|
97
|
+
### Validation says credentials are missing
|
|
98
|
+
|
|
99
|
+
Check that:
|
|
100
|
+
|
|
101
|
+
- `bot_token` is filled
|
|
102
|
+
- or `bot_token_env` points at a real environment variable
|
|
103
|
+
|
|
104
|
+
### The bot receives no messages
|
|
105
|
+
|
|
106
|
+
Check that:
|
|
107
|
+
|
|
108
|
+
- the bot token is correct
|
|
109
|
+
- the bot was started from Telegram at least once
|
|
110
|
+
- `transport` is still `polling`
|
|
111
|
+
- no stale public webhook is intercepting updates
|
|
112
|
+
|
|
113
|
+
### Group messages do not trigger the bot
|
|
114
|
+
|
|
115
|
+
Check:
|
|
116
|
+
|
|
117
|
+
- `group_policy`
|
|
118
|
+
- `groups`
|
|
119
|
+
- `group_allow_from`
|
|
120
|
+
- `require_mention_in_groups`
|
|
121
|
+
|
|
122
|
+
### The quest does not continue from Telegram
|
|
123
|
+
|
|
124
|
+
Check that:
|
|
125
|
+
|
|
126
|
+
- the conversation is bound to the intended quest
|
|
127
|
+
- or `auto_bind_dm_to_active_quest` is enabled for direct-message pairing
|
|
128
|
+
|
|
129
|
+
## 8. Related docs
|
|
130
|
+
|
|
131
|
+
- [01 Settings Reference](./01_SETTINGS_REFERENCE.md)
|
|
132
|
+
- [02 Start Research Guide](./02_START_RESEARCH_GUIDE.md)
|
|
133
|
+
- [09 Doctor](./09_DOCTOR.md)
|
|
134
|
+
- [13 Core Architecture Guide](./13_CORE_ARCHITECTURE_GUIDE.md)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# 17 WhatsApp Connector Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when you want DeepScientist to continue a quest through WhatsApp.
|
|
4
|
+
|
|
5
|
+
The current open-source runtime prefers the local-session path for WhatsApp:
|
|
6
|
+
|
|
7
|
+
- no public webhook is required for the recommended path
|
|
8
|
+
- the local auth/session state stays on your machine
|
|
9
|
+
- direct messages can auto-bind to the latest active quest when enabled
|
|
10
|
+
|
|
11
|
+
## 1. What WhatsApp support includes
|
|
12
|
+
|
|
13
|
+
DeepScientist currently supports WhatsApp through:
|
|
14
|
+
|
|
15
|
+
- `WhatsAppLocalSessionService` for local session sync and inbound ingestion
|
|
16
|
+
- `GenericRelayChannel` for bindings, inbox/outbox, targets, and runtime status
|
|
17
|
+
- `WhatsAppConnectorBridge` for outbound delivery
|
|
18
|
+
|
|
19
|
+
For the recommended path, outbound delivery is queued into the local-session outbox and handled by the local sidecar/session runtime.
|
|
20
|
+
|
|
21
|
+
## 2. Recommended setup path
|
|
22
|
+
|
|
23
|
+
1. Open `Settings > Connectors > WhatsApp`.
|
|
24
|
+
2. Enable WhatsApp.
|
|
25
|
+
3. Keep `transport: local_session`.
|
|
26
|
+
4. Keep or choose a writable `session_dir`.
|
|
27
|
+
5. Save the connector.
|
|
28
|
+
6. Complete the local login flow for the WhatsApp session.
|
|
29
|
+
7. Send one real message from WhatsApp.
|
|
30
|
+
8. Return to DeepScientist and verify that the target conversation has been discovered.
|
|
31
|
+
|
|
32
|
+
## 3. Important config fields
|
|
33
|
+
|
|
34
|
+
Main fields:
|
|
35
|
+
|
|
36
|
+
- `enabled`
|
|
37
|
+
- `transport`
|
|
38
|
+
- `bot_name`
|
|
39
|
+
- `auth_method`
|
|
40
|
+
- `session_dir`
|
|
41
|
+
- `command_prefix`
|
|
42
|
+
- `dm_policy`
|
|
43
|
+
- `allow_from`
|
|
44
|
+
- `group_policy`
|
|
45
|
+
- `group_allow_from`
|
|
46
|
+
- `groups`
|
|
47
|
+
- `auto_bind_dm_to_active_quest`
|
|
48
|
+
|
|
49
|
+
For the full field reference, see [01 Settings Reference](./01_SETTINGS_REFERENCE.md).
|
|
50
|
+
|
|
51
|
+
## 4. Binding model
|
|
52
|
+
|
|
53
|
+
WhatsApp conversations are normalized into quest-aware connector ids like:
|
|
54
|
+
|
|
55
|
+
- `whatsapp:direct:<jid>`
|
|
56
|
+
- `whatsapp:group:<jid>`
|
|
57
|
+
|
|
58
|
+
DeepScientist binds quests to those normalized conversation ids instead of transient browser/session state.
|
|
59
|
+
|
|
60
|
+
Important rules:
|
|
61
|
+
|
|
62
|
+
- one quest keeps local access plus at most one external connector target
|
|
63
|
+
- direct messages can auto-follow the latest active quest when auto-bind is enabled
|
|
64
|
+
- bindings can be changed later from the project settings page
|
|
65
|
+
|
|
66
|
+
## 5. Local-session runtime behavior
|
|
67
|
+
|
|
68
|
+
The current open-source path is local-session oriented:
|
|
69
|
+
|
|
70
|
+
- runtime status is mirrored into DeepScientist under connector logs
|
|
71
|
+
- inbound messages are drained from the local session inbox
|
|
72
|
+
- outbound messages are queued into the local session outbox
|
|
73
|
+
|
|
74
|
+
This keeps the recommended WhatsApp path local-first.
|
|
75
|
+
|
|
76
|
+
## 6. Group behavior
|
|
77
|
+
|
|
78
|
+
By default:
|
|
79
|
+
|
|
80
|
+
- direct messages can pair with the active quest
|
|
81
|
+
- group behavior depends on `group_policy`
|
|
82
|
+
- group allowlists can be enforced through `groups` and `group_allow_from`
|
|
83
|
+
|
|
84
|
+
## 7. Troubleshooting
|
|
85
|
+
|
|
86
|
+
### WhatsApp does not appear in Settings
|
|
87
|
+
|
|
88
|
+
WhatsApp may be hidden by the system connector gate. Confirm that:
|
|
89
|
+
|
|
90
|
+
- `config.connectors.system_enabled.whatsapp` is `true`
|
|
91
|
+
|
|
92
|
+
### Validation says the connector is not ready
|
|
93
|
+
|
|
94
|
+
Check that:
|
|
95
|
+
|
|
96
|
+
- `transport` is `local_session`
|
|
97
|
+
- `session_dir` points to a writable path
|
|
98
|
+
|
|
99
|
+
### No discovered targets appear
|
|
100
|
+
|
|
101
|
+
Check that:
|
|
102
|
+
|
|
103
|
+
- the local login/session flow has completed
|
|
104
|
+
- at least one real inbound message has reached the local session inbox
|
|
105
|
+
|
|
106
|
+
### The quest does not continue from WhatsApp
|
|
107
|
+
|
|
108
|
+
Check that:
|
|
109
|
+
|
|
110
|
+
- the conversation is bound to the intended quest
|
|
111
|
+
- or `auto_bind_dm_to_active_quest` is enabled for direct-message pairing
|
|
112
|
+
|
|
113
|
+
### Outbound messages do not arrive
|
|
114
|
+
|
|
115
|
+
Check that:
|
|
116
|
+
|
|
117
|
+
- the local-session sidecar or local session processor is running
|
|
118
|
+
- the local session outbox is being drained
|
|
119
|
+
- the target JID is correct
|
|
120
|
+
|
|
121
|
+
## 8. Related docs
|
|
122
|
+
|
|
123
|
+
- [01 Settings Reference](./01_SETTINGS_REFERENCE.md)
|
|
124
|
+
- [02 Start Research Guide](./02_START_RESEARCH_GUIDE.md)
|
|
125
|
+
- [09 Doctor](./09_DOCTOR.md)
|
|
126
|
+
- [13 Core Architecture Guide](./13_CORE_ARCHITECTURE_GUIDE.md)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# 18 Feishu Connector Guide
|
|
2
|
+
|
|
3
|
+
Use this guide when you want DeepScientist to continue a quest through Feishu / Lark.
|
|
4
|
+
|
|
5
|
+
The current open-source runtime prefers the built-in long-connection path:
|
|
6
|
+
|
|
7
|
+
- no public event callback is required for the recommended setup
|
|
8
|
+
- the main credentials are `app_id` and `app_secret`
|
|
9
|
+
- direct messages can auto-bind to the latest active quest when enabled
|
|
10
|
+
|
|
11
|
+
## 1. What Feishu support includes
|
|
12
|
+
|
|
13
|
+
DeepScientist currently supports Feishu through:
|
|
14
|
+
|
|
15
|
+
- `FeishuLongConnectionService` for inbound long-connection delivery
|
|
16
|
+
- `GenericRelayChannel` for bindings, inbox/outbox, targets, and runtime status
|
|
17
|
+
- `FeishuConnectorBridge` for direct outbound sends
|
|
18
|
+
|
|
19
|
+
This means Feishu already fits the same quest-binding model as the other connector surfaces.
|
|
20
|
+
|
|
21
|
+
## 2. Recommended setup path
|
|
22
|
+
|
|
23
|
+
1. Open the Feishu / Lark developer platform.
|
|
24
|
+
2. Create an app.
|
|
25
|
+
3. Save `app_id` and `app_secret`.
|
|
26
|
+
4. Open `Settings > Connectors > Feishu`.
|
|
27
|
+
5. Enable Feishu.
|
|
28
|
+
6. Keep `transport: long_connection`.
|
|
29
|
+
7. Fill `app_id` and `app_secret`.
|
|
30
|
+
8. Save the connector.
|
|
31
|
+
9. Send one real message to the bot.
|
|
32
|
+
10. Return to DeepScientist and confirm that the target conversation has been discovered.
|
|
33
|
+
|
|
34
|
+
## 3. Important config fields
|
|
35
|
+
|
|
36
|
+
Main fields:
|
|
37
|
+
|
|
38
|
+
- `enabled`
|
|
39
|
+
- `transport`
|
|
40
|
+
- `bot_name`
|
|
41
|
+
- `app_id`
|
|
42
|
+
- `app_secret`
|
|
43
|
+
- `api_base_url`
|
|
44
|
+
- `command_prefix`
|
|
45
|
+
- `dm_policy`
|
|
46
|
+
- `allow_from`
|
|
47
|
+
- `group_policy`
|
|
48
|
+
- `group_allow_from`
|
|
49
|
+
- `groups`
|
|
50
|
+
- `require_mention_in_groups`
|
|
51
|
+
- `auto_bind_dm_to_active_quest`
|
|
52
|
+
|
|
53
|
+
For the full field reference, see [01 Settings Reference](./01_SETTINGS_REFERENCE.md).
|
|
54
|
+
|
|
55
|
+
## 4. Binding model
|
|
56
|
+
|
|
57
|
+
Feishu conversations are normalized into quest-aware connector ids like:
|
|
58
|
+
|
|
59
|
+
- `feishu:direct:<chat_id>`
|
|
60
|
+
- `feishu:group:<chat_id>`
|
|
61
|
+
|
|
62
|
+
DeepScientist binds quests to those normalized conversation ids, not to transient callback payloads.
|
|
63
|
+
|
|
64
|
+
Important rules:
|
|
65
|
+
|
|
66
|
+
- one quest keeps local access plus at most one external connector target
|
|
67
|
+
- direct messages can auto-follow the latest active quest when auto-bind is enabled
|
|
68
|
+
- bindings can be changed later from the project settings page
|
|
69
|
+
|
|
70
|
+
## 5. Group behavior
|
|
71
|
+
|
|
72
|
+
By default:
|
|
73
|
+
|
|
74
|
+
- direct messages are allowed
|
|
75
|
+
- group behavior depends on `group_policy`
|
|
76
|
+
- if `require_mention_in_groups` is `true`, the bot only reacts when explicitly mentioned or when a command is used
|
|
77
|
+
|
|
78
|
+
This is the recommended default for larger shared workspaces.
|
|
79
|
+
|
|
80
|
+
## 6. Outbound delivery
|
|
81
|
+
|
|
82
|
+
Feishu outbound delivery currently focuses on text-first quest updates:
|
|
83
|
+
|
|
84
|
+
- progress
|
|
85
|
+
- milestone summaries
|
|
86
|
+
- binding notices
|
|
87
|
+
- structured quest replies
|
|
88
|
+
|
|
89
|
+
The current bridge delivers through the Feishu Open Platform messaging API.
|
|
90
|
+
|
|
91
|
+
## 7. Troubleshooting
|
|
92
|
+
|
|
93
|
+
### Feishu does not appear in Settings
|
|
94
|
+
|
|
95
|
+
Feishu may be hidden by the system connector gate. Confirm that:
|
|
96
|
+
|
|
97
|
+
- `config.connectors.system_enabled.feishu` is `true`
|
|
98
|
+
|
|
99
|
+
### Validation says credentials are missing
|
|
100
|
+
|
|
101
|
+
Check that:
|
|
102
|
+
|
|
103
|
+
- `app_id` is filled
|
|
104
|
+
- `app_secret` is filled
|
|
105
|
+
- or `app_secret_env` points at a real environment variable
|
|
106
|
+
|
|
107
|
+
### No discovered targets appear
|
|
108
|
+
|
|
109
|
+
Check that:
|
|
110
|
+
|
|
111
|
+
- the app credentials are correct
|
|
112
|
+
- the bot has received at least one real inbound message
|
|
113
|
+
- `transport` is still `long_connection`
|
|
114
|
+
|
|
115
|
+
### Group messages do not trigger the bot
|
|
116
|
+
|
|
117
|
+
Check:
|
|
118
|
+
|
|
119
|
+
- `group_policy`
|
|
120
|
+
- `groups`
|
|
121
|
+
- `group_allow_from`
|
|
122
|
+
- `require_mention_in_groups`
|
|
123
|
+
|
|
124
|
+
### The quest does not continue from Feishu
|
|
125
|
+
|
|
126
|
+
Check that:
|
|
127
|
+
|
|
128
|
+
- the conversation is bound to the intended quest
|
|
129
|
+
- or `auto_bind_dm_to_active_quest` is enabled for direct-message pairing
|
|
130
|
+
|
|
131
|
+
## 8. Related docs
|
|
132
|
+
|
|
133
|
+
- [01 Settings Reference](./01_SETTINGS_REFERENCE.md)
|
|
134
|
+
- [02 Start Research Guide](./02_START_RESEARCH_GUIDE.md)
|
|
135
|
+
- [09 Doctor](./09_DOCTOR.md)
|
|
136
|
+
- [13 Core Architecture Guide](./13_CORE_ARCHITECTURE_GUIDE.md)
|
package/docs/en/README.md
CHANGED
|
@@ -50,6 +50,12 @@ This page is the shortest path to the right document.
|
|
|
50
50
|
|
|
51
51
|
## If you want to collaborate through external surfaces
|
|
52
52
|
|
|
53
|
+
- [16 Telegram Connector Guide](./16_TELEGRAM_CONNECTOR_GUIDE.md)
|
|
54
|
+
Bind Telegram through the built-in polling runtime and continue quests from bot chats.
|
|
55
|
+
- [17 WhatsApp Connector Guide](./17_WHATSAPP_CONNECTOR_GUIDE.md)
|
|
56
|
+
Bind WhatsApp through the local-session runtime and continue quests from local chat sessions.
|
|
57
|
+
- [18 Feishu Connector Guide](./18_FEISHU_CONNECTOR_GUIDE.md)
|
|
58
|
+
Bind Feishu through the built-in long-connection runtime and continue quests from bot chats.
|
|
53
59
|
- [10 Weixin Connector Guide](./10_WEIXIN_CONNECTOR_GUIDE.md)
|
|
54
60
|
Bind personal WeChat through DeepScientist's built-in QR login and iLink runtime.
|
|
55
61
|
- [03 QQ Connector Guide](./03_QQ_CONNECTOR_GUIDE.md)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
本文中的截图直接使用当前在线页面 `deepscientist.cc:20999` 作为示例。你本地运行后的页面 `127.0.0.1:20999` 通常会与它保持一致或非常接近。
|
|
15
15
|
|
|
16
|
-
当前平台支持:DeepScientist
|
|
16
|
+
当前平台支持:DeepScientist 目前完整支持 Linux 和 macOS。原生 Windows 支持目前仍处于实验阶段;如果你希望获得最接近 Linux 的终端行为,仍然建议优先使用 WSL2。
|
|
17
17
|
|
|
18
18
|
## 安全建议:先隔离,再启动
|
|
19
19
|
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
|
|
61
61
|
## 1. 先安装 Node.js,再安装 DeepScientist
|
|
62
62
|
|
|
63
|
-
DeepScientist
|
|
63
|
+
DeepScientist 目前完整支持 Linux 和 macOS。原生 Windows 支持目前仍处于实验阶段;如果你希望获得更接近 Linux 的 shell 行为,仍然建议优先使用 WSL2。
|
|
64
64
|
|
|
65
65
|
在安装 DeepScientist 本身之前,请先从 Node.js 官方页面安装 Node.js:
|
|
66
66
|
|
|
@@ -409,8 +409,8 @@ codex:
|
|
|
409
409
|
profile: ""
|
|
410
410
|
model: gpt-5.4
|
|
411
411
|
model_reasoning_effort: xhigh
|
|
412
|
-
approval_policy:
|
|
413
|
-
sandbox_mode:
|
|
412
|
+
approval_policy: never
|
|
413
|
+
sandbox_mode: danger-full-access
|
|
414
414
|
retry_on_failure: true
|
|
415
415
|
retry_max_attempts: 5
|
|
416
416
|
retry_initial_backoff_sec: 1.0
|
|
@@ -488,19 +488,35 @@ claude:
|
|
|
488
488
|
**`approval_policy`**
|
|
489
489
|
|
|
490
490
|
- 类型:`string`
|
|
491
|
-
- 默认值:`
|
|
491
|
+
- 默认值:`never`
|
|
492
492
|
- 页面标签:`Approval policy`
|
|
493
493
|
- 允许值:`never`、`on-failure`、`on-request`、`untrusted`
|
|
494
494
|
- 作用:控制高权限动作如何申请许可。
|
|
495
|
+
- 运行说明:launcher 现在默认以 YOLO 模式启动 Codex。若要临时关闭,可显式传 `ds --yolo false`,这会恢复到 `approval_policy=on-request` 与 `sandbox_mode=workspace-write`。
|
|
495
496
|
|
|
496
497
|
**`sandbox_mode`**
|
|
497
498
|
|
|
498
499
|
- 类型:`string`
|
|
499
|
-
- 默认值:`
|
|
500
|
+
- 默认值:`danger-full-access`
|
|
500
501
|
- 页面标签:`Sandbox mode`
|
|
501
502
|
- 允许值:`read-only`、`workspace-write`、`danger-full-access`
|
|
502
503
|
- 作用:控制 runner 的文件系统/进程访问权限。
|
|
503
504
|
|
|
505
|
+
**`env`**
|
|
506
|
+
|
|
507
|
+
- 类型:`mapping<string, string>`
|
|
508
|
+
- 默认值:`{}`
|
|
509
|
+
- 页面入口:
|
|
510
|
+
- 全局设置:可在 `runners` 结构化表单中直接编辑 `env`
|
|
511
|
+
- 项目设置:`Project settings -> Codex environment`
|
|
512
|
+
- 项目设置行为:
|
|
513
|
+
- 点击 `Add` 新增一行环境变量
|
|
514
|
+
- 默认会显示 `OPENAI_BASE_URL` 和 `OPENAI_API_KEY`
|
|
515
|
+
- 修改后不会自动保存,需要手动点击 `Save env vars`
|
|
516
|
+
- 空值会被忽略,不会注入到 Codex 进程
|
|
517
|
+
- 作用:DeepScientist 启动 Codex run 时,额外传入给 Codex 的环境变量。
|
|
518
|
+
- 常见用途:需要 API Key 或自定义 Base URL 的 provider-backed Codex 配置。
|
|
519
|
+
|
|
504
520
|
**`retry_on_failure`**
|
|
505
521
|
|
|
506
522
|
- 类型:`boolean`
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
- 在 QQ 中使用 `/new`、`/use latest`、`/status` 等命令
|
|
21
21
|
- 在 `Settings` 页面看到自动检测到的 `openid`
|
|
22
22
|
- 从 `Settings` 页面执行非破坏性的连接测试
|
|
23
|
+
- 当 QQ 绑定到 quest 时,在每次主实验完成后自动收到按指标生成的时间线图片
|
|
23
24
|
|
|
24
25
|
### 部署前检查清单
|
|
25
26
|
|
|
@@ -221,6 +222,24 @@ QQ readiness is healthy, but no OpenID has been learned yet. Save credentials, t
|
|
|
221
222
|
- 再次点击“发送测试消息”时,不再提示 target 为空
|
|
222
223
|
- 如果当前已经有最新项目,普通文本会自动进入该项目;如果还没有项目,则优先返回帮助信息
|
|
223
224
|
|
|
225
|
+
## 5.3 主实验指标图自动推送
|
|
226
|
+
|
|
227
|
+
当 QQ 是当前 quest 的绑定连接器时,DeepScientist 现在会在每次主实验完成后自动发送指标时间线图片。
|
|
228
|
+
|
|
229
|
+
当前行为:
|
|
230
|
+
|
|
231
|
+
- 每个指标生成一张图
|
|
232
|
+
- 如果 baseline 存在该指标,会画一条横向虚线作为 baseline 参考线
|
|
233
|
+
- 系统会自动判断该指标是“越高越好”还是“越低越好”
|
|
234
|
+
- 超过 baseline 的点会额外标星
|
|
235
|
+
- 最新点使用莫兰迪深红色填充
|
|
236
|
+
- 较早的点使用莫兰迪深蓝色填充
|
|
237
|
+
- 如果指标有多个,DeepScientist 会按顺序发送,并在相邻两张图之间间隔约 2 秒
|
|
238
|
+
|
|
239
|
+
这些图来自 quest 本地生成的文件,并会作为 QQ 原生图片自动发送。
|
|
240
|
+
|
|
241
|
+
如果你想关闭这项自动推送,可以在 QQ 连接器配置中关闭 `auto_send_main_experiment_png`。
|
|
242
|
+
|
|
224
243
|
### 5.2 报错提示速查
|
|
225
244
|
|
|
226
245
|
| 提示 | 代表什么 | 应该怎么做 |
|
|
@@ -27,6 +27,7 @@ DeepScientist 已经内置了微信 iLink 运行时,因此你不需要再额
|
|
|
27
27
|
- 把入站附件复制到当前 quest 的 `userfiles/weixin/...`
|
|
28
28
|
- 把文本回复发回同一个微信上下文
|
|
29
29
|
- 在 agent 提供真实本地文件时,发送微信原生图片、视频、文件
|
|
30
|
+
- 当微信绑定到 quest 时,在每次主实验完成后自动发送按指标生成的时间线图片
|
|
30
31
|
|
|
31
32
|
入站媒体不会只留在临时缓存里,而是会被复制进 quest。本地落盘路径形态如下:
|
|
32
33
|
|
|
@@ -94,7 +95,10 @@ DeepScientist 已经内置了微信 iLink 运行时,因此你不需要再额
|
|
|
94
95
|
- 入站图片、视频、文件会被下载并复制进 quest 本地 `userfiles/weixin/...`
|
|
95
96
|
- 纯媒体消息不会再被直接丢弃
|
|
96
97
|
- 出站文本会沿用运行时维护的 `context_token`
|
|
98
|
+
- 如果微信 `context_token` 缺失或过期,低优先级出站更新会先进入排队,而不是直接丢失
|
|
99
|
+
- 下一次新的微信入站刷新会话后,DeepScientist 只会回放最近 `5` 条排队更新,并且每条之间固定间隔 `2` 秒
|
|
97
100
|
- 出站图片、视频、文件在 agent 提供真实本地文件路径时可以正常发送
|
|
101
|
+
- 出站主实验指标图会自动作为微信原生图片发送
|
|
98
102
|
|
|
99
103
|

|
|
100
104
|
|
|
@@ -116,6 +120,22 @@ userfiles/...
|
|
|
116
120
|
|
|
117
121
|
而不是默认依赖一个任意的外链。
|
|
118
122
|
|
|
123
|
+
## 5.1 主实验指标图自动推送
|
|
124
|
+
|
|
125
|
+
当微信是当前 quest 的绑定连接器时,DeepScientist 现在会在每次主实验完成后自动发送指标时间线图片。
|
|
126
|
+
|
|
127
|
+
当前行为:
|
|
128
|
+
|
|
129
|
+
- 每个指标生成一张图
|
|
130
|
+
- 如果 baseline 存在该指标,会画一条横向虚线作为 baseline 参考线
|
|
131
|
+
- 系统会自动判断该指标是“越高越好”还是“越低越好”
|
|
132
|
+
- 超过 baseline 的点会额外标星
|
|
133
|
+
- 最新点使用莫兰迪深红色填充
|
|
134
|
+
- 较早的点使用莫兰迪深蓝色填充
|
|
135
|
+
- 如果指标有多个,DeepScientist 会按顺序发送,并在相邻两张图之间间隔约 2 秒
|
|
136
|
+
|
|
137
|
+
这些图来自 quest 本地生成的文件,并会作为微信原生图片自动发送到当前绑定会话。
|
|
138
|
+
|
|
119
139
|
## 6. 常见问题
|
|
120
140
|
|
|
121
141
|
### 二维码一直在等待
|
|
@@ -100,6 +100,7 @@ DeepScientist 不是靠一份静态大 prompt 工作的。
|
|
|
100
100
|
- 不要过早结束 quest
|
|
101
101
|
- Web、TUI、connector 属于同一个 quest
|
|
102
102
|
- 用户可见的汇报风格
|
|
103
|
+
- baseline 提交与确认的纪律:如果源 baseline 暴露了多指标或多 variant,就要保留完整比较面,而不是只留下一个 headline scalar
|
|
103
104
|
|
|
104
105
|
如果你发现 agent 在所有场景里行为都不对,`system.md` 一定是首要检查点之一。
|
|
105
106
|
|
|
@@ -113,6 +114,7 @@ DeepScientist 不是靠一份静态大 prompt 工作的。
|
|
|
113
114
|
- 排队中的用户消息必须优先确认和处理
|
|
114
115
|
- `blocking` 只该用于真实用户决策
|
|
115
116
|
- 进展汇报应该简洁且可读
|
|
117
|
+
- 真正发给用户的交互消息应保持完整;系统会单独生成短预览,所以 agent 不应该自己把 connector 回复截成 `...` / `…`
|
|
116
118
|
|
|
117
119
|
如果模型经常在长任务里“断线”或者不会接住用户后续消息,这个文件非常关键。
|
|
118
120
|
|