@researai/deepscientist 1.5.0 → 1.5.2
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/AGENTS.md +26 -0
- package/README.md +47 -161
- package/assets/connectors/lingzhu/openclaw-bridge/README.md +124 -0
- package/assets/connectors/lingzhu/openclaw-bridge/index.ts +162 -0
- package/assets/connectors/lingzhu/openclaw-bridge/openclaw.plugin.json +145 -0
- package/assets/connectors/lingzhu/openclaw-bridge/package.json +35 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/cli.ts +180 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/config.ts +196 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/debug-log.ts +111 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/events.ts +4 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/http-handler.ts +1133 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/image-cache.ts +75 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/lingzhu-tools.ts +246 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/transform.ts +541 -0
- package/assets/connectors/lingzhu/openclaw-bridge/src/types.ts +131 -0
- package/assets/connectors/lingzhu/openclaw-bridge/tsconfig.json +14 -0
- package/assets/connectors/lingzhu/openclaw.lingzhu.config.template.json +39 -0
- package/bin/ds.js +2048 -166
- package/docs/en/00_QUICK_START.md +152 -0
- package/docs/en/01_SETTINGS_REFERENCE.md +1104 -0
- package/docs/en/02_START_RESEARCH_GUIDE.md +404 -0
- package/docs/en/03_QQ_CONNECTOR_GUIDE.md +325 -0
- package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +216 -0
- package/docs/en/05_TUI_GUIDE.md +141 -0
- package/docs/en/06_RUNTIME_AND_CANVAS.md +679 -0
- package/docs/en/07_MEMORY_AND_MCP.md +253 -0
- package/docs/en/08_FIGURE_STYLE_GUIDE.md +97 -0
- package/docs/en/09_DOCTOR.md +152 -0
- package/docs/en/90_ARCHITECTURE.md +247 -0
- package/docs/en/91_DEVELOPMENT.md +195 -0
- package/docs/en/99_ACKNOWLEDGEMENTS.md +29 -0
- package/docs/zh/00_QUICK_START.md +152 -0
- package/docs/zh/01_SETTINGS_REFERENCE.md +1137 -0
- package/docs/zh/02_START_RESEARCH_GUIDE.md +414 -0
- package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +324 -0
- package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +230 -0
- package/docs/zh/05_TUI_GUIDE.md +128 -0
- package/docs/zh/06_RUNTIME_AND_CANVAS.md +271 -0
- package/docs/zh/07_MEMORY_AND_MCP.md +235 -0
- package/docs/zh/08_FIGURE_STYLE_GUIDE.md +97 -0
- package/docs/zh/09_DOCTOR.md +154 -0
- package/docs/zh/99_ACKNOWLEDGEMENTS.md +29 -0
- package/install.sh +41 -16
- package/package.json +5 -2
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +6 -1
- package/src/deepscientist/artifact/guidance.py +9 -2
- package/src/deepscientist/artifact/service.py +1026 -39
- package/src/deepscientist/bash_exec/monitor.py +27 -5
- package/src/deepscientist/bash_exec/runtime.py +639 -0
- package/src/deepscientist/bash_exec/service.py +99 -16
- package/src/deepscientist/bridges/base.py +3 -0
- package/src/deepscientist/bridges/connectors.py +292 -13
- package/src/deepscientist/channels/qq.py +19 -2
- package/src/deepscientist/channels/relay.py +1 -0
- package/src/deepscientist/cli.py +32 -25
- package/src/deepscientist/config/models.py +28 -2
- package/src/deepscientist/config/service.py +202 -7
- package/src/deepscientist/connector_runtime.py +2 -0
- package/src/deepscientist/daemon/api/handlers.py +68 -6
- package/src/deepscientist/daemon/api/router.py +3 -0
- package/src/deepscientist/daemon/app.py +531 -15
- package/src/deepscientist/doctor.py +511 -0
- package/src/deepscientist/gitops/diff.py +3 -0
- package/src/deepscientist/home.py +26 -2
- package/src/deepscientist/latex_runtime.py +17 -4
- package/src/deepscientist/lingzhu_support.py +182 -0
- package/src/deepscientist/mcp/context.py +3 -1
- package/src/deepscientist/mcp/server.py +55 -2
- package/src/deepscientist/prompts/builder.py +222 -58
- package/src/deepscientist/quest/layout.py +2 -0
- package/src/deepscientist/quest/service.py +133 -14
- package/src/deepscientist/quest/stage_views.py +65 -1
- package/src/deepscientist/runners/codex.py +2 -0
- package/src/deepscientist/runtime_tools/__init__.py +16 -0
- package/src/deepscientist/runtime_tools/builtins.py +19 -0
- package/src/deepscientist/runtime_tools/models.py +29 -0
- package/src/deepscientist/runtime_tools/registry.py +40 -0
- package/src/deepscientist/runtime_tools/service.py +59 -0
- package/src/deepscientist/runtime_tools/tinytex.py +25 -0
- package/src/deepscientist/shared.py +44 -17
- package/src/deepscientist/tinytex.py +276 -0
- package/src/prompts/connectors/lingzhu.md +15 -0
- package/src/prompts/connectors/qq.md +121 -0
- package/src/prompts/system.md +214 -37
- package/src/skills/analysis-campaign/SKILL.md +46 -7
- package/src/skills/baseline/SKILL.md +12 -5
- package/src/skills/decision/SKILL.md +7 -5
- package/src/skills/experiment/SKILL.md +22 -5
- package/src/skills/finalize/SKILL.md +9 -5
- package/src/skills/idea/SKILL.md +6 -5
- package/src/skills/intake-audit/SKILL.md +277 -0
- package/src/skills/intake-audit/references/state-audit-template.md +41 -0
- package/src/skills/rebuttal/SKILL.md +409 -0
- package/src/skills/rebuttal/references/action-plan-template.md +63 -0
- package/src/skills/rebuttal/references/evidence-update-template.md +30 -0
- package/src/skills/rebuttal/references/response-letter-template.md +113 -0
- package/src/skills/rebuttal/references/review-matrix-template.md +55 -0
- package/src/skills/review/SKILL.md +295 -0
- package/src/skills/review/references/experiment-todo-template.md +29 -0
- package/src/skills/review/references/review-report-template.md +83 -0
- package/src/skills/review/references/revision-log-template.md +40 -0
- package/src/skills/scout/SKILL.md +6 -5
- package/src/skills/write/SKILL.md +8 -4
- package/src/tui/dist/components/WelcomePanel.js +17 -43
- package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -2
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-7v-dHngU.js → AiManusChatView-CZpg376x.js} +127 -597
- package/src/ui/dist/assets/{AnalysisPlugin-B_Xmz-KE.js → AnalysisPlugin-CtHA22g3.js} +1 -1
- package/src/ui/dist/assets/{AutoFigurePlugin-Cko-0tm1.js → AutoFigurePlugin-BSWmLMmF.js} +63 -8
- package/src/ui/dist/assets/{CliPlugin-BsU0ht7q.js → CliPlugin-CJ7jdm_s.js} +43 -609
- package/src/ui/dist/assets/{CodeEditorPlugin-DcMMP0Rt.js → CodeEditorPlugin-DhInVGFf.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-BqoQ5QyY.js → CodeViewerPlugin-D1n8S9r5.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-D7eHNhU6.js → DocViewerPlugin-C4XM_kqk.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-DLJN42T5.js → GitDiffViewerPlugin-W6kS9r6v.js} +1 -1
- package/src/ui/dist/assets/{ImageViewerPlugin-gJMV7MOu.js → ImageViewerPlugin-DPeUx_Oz.js} +5 -6
- package/src/ui/dist/assets/{LabCopilotPanel-B857sfxP.js → LabCopilotPanel-eAelUaub.js} +12 -15
- package/src/ui/dist/assets/LabPlugin-BbOrBxKY.js +2676 -0
- package/src/ui/dist/assets/{LatexPlugin-DWKEo-Wj.js → LatexPlugin-C-HhkVXY.js} +16 -16
- package/src/ui/dist/assets/{MarkdownViewerPlugin-DBzoEmhv.js → MarkdownViewerPlugin-BDIzIBfh.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-DoHc-8vo.js → MarketplacePlugin-DAOJphwr.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-CKjKH-yS.js → NotebookEditor-BsoMvDoU.js} +3 -3
- package/src/ui/dist/assets/{PdfLoader-zFoL0VPo.js → PdfLoader-fiC7RtHf.js} +1 -1
- package/src/ui/dist/assets/{PdfMarkdownPlugin-DXPaL9Nt.js → PdfMarkdownPlugin-C5OxZBFK.js} +3 -3
- package/src/ui/dist/assets/{PdfViewerPlugin-DhK8qCFp.js → PdfViewerPlugin-CAbxQebk.js} +10 -10
- package/src/ui/dist/assets/{SearchPlugin-CdSi6krf.js → SearchPlugin-SE33Lb9B.js} +1 -1
- package/src/ui/dist/assets/{Stepper-V-WiDQJl.js → Stepper-0Av7GfV7.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-hIs1Efiu.js → TextViewerPlugin-Daf2gJDI.js} +4 -4
- package/src/ui/dist/assets/{VNCViewer-DG8b0q2X.js → VNCViewer-BKrMUIOX.js} +9 -10
- package/src/ui/dist/assets/{bibtex-HDac6fVW.js → bibtex-JBdOEe45.js} +1 -1
- package/src/ui/dist/assets/{code-BnBeNxBc.js → code-B0TDFCZz.js} +1 -1
- package/src/ui/dist/assets/{file-content-IRQ3jHb8.js → file-content-3YtrSacz.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-DZoQ9I6r.js → file-diff-panel-CJEg5OG1.js} +1 -1
- package/src/ui/dist/assets/{file-socket-BMCdLc-P.js → file-socket-CYQYdmB1.js} +1 -1
- package/src/ui/dist/assets/{file-utils-CltILB3w.js → file-utils-Cd1C9Ppl.js} +1 -1
- package/src/ui/dist/assets/{image-Boe6ffhu.js → image-B33ctrvC.js} +1 -1
- package/src/ui/dist/assets/{index-2Zf65FZt.js → index-9CLPVeZh.js} +1 -1
- package/src/ui/dist/assets/{index-DZqJ-qAM.js → index-BNQWqmJ2.js} +60 -2154
- package/src/ui/dist/assets/{index-DO43pFZP.js → index-BVXsmS7V.js} +84086 -84365
- package/src/ui/dist/assets/{index-BlplpvE1.js → index-Buw_N1VQ.js} +2 -2
- package/src/ui/dist/assets/{index-Bq2bvfkl.css → index-SwmFAld3.css} +2622 -2619
- package/src/ui/dist/assets/{message-square-mUHn_Ssb.js → message-square-D0cUJ9yU.js} +1 -1
- package/src/ui/dist/assets/{monaco-fe0arNEU.js → monaco-UZLYkp2n.js} +1 -1
- package/src/ui/dist/assets/{popover-D_7i19qU.js → popover-CTeiY-dK.js} +1 -1
- package/src/ui/dist/assets/{project-sync-DyVGrU7H.js → project-sync-Dbs01Xky.js} +2 -8
- package/src/ui/dist/assets/{sigma-BzazRyxQ.js → sigma-CM08S-xT.js} +1 -1
- package/src/ui/dist/assets/{tooltip-DN_yjHFH.js → tooltip-pDtzvU9p.js} +1 -1
- package/src/ui/dist/assets/trash-YvPCP-da.js +32 -0
- package/src/ui/dist/assets/{useCliAccess-DV2L2Qxy.js → useCliAccess-Bavi74Ac.js} +12 -42
- package/src/ui/dist/assets/{useFileDiffOverlay-DyTj-p_V.js → useFileDiffOverlay-CVXY6oeg.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-ozYHtUwq.js → wrap-text-Cf4flRW7.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-BN9MUyCQ.js → zoom-out-Hb0Z1YpT.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/uv.lock +1155 -0
- package/assets/fonts/Inter-Variable.ttf +0 -0
- package/assets/fonts/NotoSerifSC-Regular-C94HN_ZN.ttf +0 -0
- package/assets/fonts/NunitoSans-Variable.ttf +0 -0
- package/assets/fonts/Satoshi-Medium-ByP-Zb-9.woff2 +0 -0
- package/assets/fonts/SourceSans3-Variable.ttf +0 -0
- package/assets/fonts/ds-fonts.css +0 -83
- package/src/ui/dist/assets/Inter-Variable-VF2RPR_K.ttf +0 -0
- package/src/ui/dist/assets/LabPlugin-bL7rpic8.js +0 -43
- package/src/ui/dist/assets/NotoSerifSC-Regular-C94HN_ZN-C94HN_ZN.ttf +0 -0
- package/src/ui/dist/assets/NunitoSans-Variable-B_ZymHAd.ttf +0 -0
- package/src/ui/dist/assets/Satoshi-Medium-ByP-Zb-9-GkA34YXu.woff2 +0 -0
- package/src/ui/dist/assets/SourceSans3-Variable-CD-WOsSK.ttf +0 -0
- package/src/ui/dist/assets/info-CcsK_htA.js +0 -18
- package/src/ui/dist/assets/user-plus-BusDx-hF.js +0 -79
|
@@ -0,0 +1,1104 @@
|
|
|
1
|
+
# 01 Settings Reference: Configure DeepScientist
|
|
2
|
+
|
|
3
|
+
This manual documents the current DeepScientist `Settings` surface and the YAML files it actually edits. The structure intentionally follows a PyTorch-style reference pattern: short summary, schema, parameters, defaults, allowed values, runtime effect, and practical notes.
|
|
4
|
+
|
|
5
|
+
Implementation sources:
|
|
6
|
+
|
|
7
|
+
- `src/ui/src/components/settings/settingsFormCatalog.ts`
|
|
8
|
+
- `src/ui/src/components/settings/connectorCatalog.ts`
|
|
9
|
+
- `src/ui/src/components/settings/RegistrySettingsForm.tsx`
|
|
10
|
+
- `src/deepscientist/config/models.py`
|
|
11
|
+
- `src/deepscientist/config/service.py`
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
The `Settings` page writes directly to the following files:
|
|
16
|
+
|
|
17
|
+
| File | UI category | Purpose |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `~/DeepScientist/config/config.yaml` | Runtime | Main runtime config: home path, daemon, UI, logging, Git, skill sync, cloud, ACP |
|
|
20
|
+
| `~/DeepScientist/config/runners.yaml` | Models | Runner config: `codex` / `claude` binary path, model defaults, approval policy, sandbox, retries |
|
|
21
|
+
| `~/DeepScientist/config/connectors.yaml` | Connectors | QQ, Telegram, Discord, Slack, Feishu, WhatsApp, Lingzhu connector config |
|
|
22
|
+
| `~/DeepScientist/config/plugins.yaml` | Extensions | Plugin discovery, enable/disable overrides, trust policy |
|
|
23
|
+
| `~/DeepScientist/config/mcp_servers.yaml` | MCP | External MCP servers only; not built-in `memory`, `artifact`, or `bash_exec` |
|
|
24
|
+
|
|
25
|
+
Button semantics:
|
|
26
|
+
|
|
27
|
+
- `Save`: write the current structured form back to YAML.
|
|
28
|
+
- `Check` / `Validate`: local schema validation only.
|
|
29
|
+
- `Test`: run a lightweight readiness probe. The exact behavior depends on the file type and is described later in this document.
|
|
30
|
+
|
|
31
|
+
Connector-specific setup guides:
|
|
32
|
+
|
|
33
|
+
- `docs/en/03_QQ_CONNECTOR_GUIDE.md`
|
|
34
|
+
- `docs/en/04_LINGZHU_CONNECTOR_GUIDE.md`
|
|
35
|
+
|
|
36
|
+
## `config.yaml`
|
|
37
|
+
|
|
38
|
+
### Summary
|
|
39
|
+
|
|
40
|
+
`config.yaml` is the main runtime configuration file. It controls the DeepScientist home directory, default locale, daemon policy, Web/TUI binding, logging, Git behavior, skill mirroring, and optional cloud / ACP compatibility settings.
|
|
41
|
+
|
|
42
|
+
### Schema
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
home: ~/DeepScientist
|
|
46
|
+
default_runner: codex
|
|
47
|
+
default_locale: zh-CN
|
|
48
|
+
daemon:
|
|
49
|
+
session_restore_on_start: true
|
|
50
|
+
max_concurrent_quests: 1
|
|
51
|
+
ack_timeout_ms: 1000
|
|
52
|
+
ui:
|
|
53
|
+
host: 0.0.0.0
|
|
54
|
+
port: 20999
|
|
55
|
+
auto_open_browser: true
|
|
56
|
+
default_mode: both
|
|
57
|
+
logging:
|
|
58
|
+
level: info
|
|
59
|
+
console: true
|
|
60
|
+
keep_days: 30
|
|
61
|
+
git:
|
|
62
|
+
auto_checkpoint: true
|
|
63
|
+
auto_push: false
|
|
64
|
+
default_remote: origin
|
|
65
|
+
graph_formats: [svg, png, json]
|
|
66
|
+
skills:
|
|
67
|
+
sync_global_on_init: true
|
|
68
|
+
sync_quest_on_create: true
|
|
69
|
+
sync_quest_on_open: true
|
|
70
|
+
connectors:
|
|
71
|
+
auto_ack: true
|
|
72
|
+
milestone_push: true
|
|
73
|
+
direct_chat_enabled: true
|
|
74
|
+
cloud:
|
|
75
|
+
enabled: false
|
|
76
|
+
base_url: https://deepscientist.cc
|
|
77
|
+
token: null
|
|
78
|
+
token_env: DEEPSCIENTIST_TOKEN
|
|
79
|
+
verify_token_on_start: false
|
|
80
|
+
sync_mode: disabled
|
|
81
|
+
acp:
|
|
82
|
+
compatibility_profile: deepscientist-acp-compat/v1
|
|
83
|
+
events_transport: rest-poll
|
|
84
|
+
sdk_bridge_enabled: false
|
|
85
|
+
sdk_module: acp
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Core identity
|
|
89
|
+
|
|
90
|
+
**`home`**
|
|
91
|
+
|
|
92
|
+
- Type: `string`
|
|
93
|
+
- Default: the installed DeepScientist home, usually `~/DeepScientist`
|
|
94
|
+
- UI label: `Home path`
|
|
95
|
+
- Meaning: root directory for config, projects, memory, plugins, logs, and cache.
|
|
96
|
+
- When to change: only when you intentionally installed DeepScientist somewhere else.
|
|
97
|
+
- Notes: this is not a single project path; it is the runtime root.
|
|
98
|
+
|
|
99
|
+
**`default_runner`**
|
|
100
|
+
|
|
101
|
+
- Type: `string`
|
|
102
|
+
- Default: `codex`
|
|
103
|
+
- Allowed values: currently `codex`, `claude`
|
|
104
|
+
- UI label: `Default runner`
|
|
105
|
+
- Meaning: runner used when a project does not override it.
|
|
106
|
+
- Notes: in the current branch, `codex` is the primary path and `claude` remains a reserved slot.
|
|
107
|
+
|
|
108
|
+
**`default_locale`**
|
|
109
|
+
|
|
110
|
+
- Type: `string`
|
|
111
|
+
- Default: `zh-CN`
|
|
112
|
+
- Allowed values: `zh-CN`, `en-US`
|
|
113
|
+
- UI label: `Default locale`
|
|
114
|
+
- Meaning: default prompt and UI language preference.
|
|
115
|
+
|
|
116
|
+
### Daemon policy
|
|
117
|
+
|
|
118
|
+
**`daemon.session_restore_on_start`**
|
|
119
|
+
|
|
120
|
+
- Type: `boolean`
|
|
121
|
+
- Default: `true`
|
|
122
|
+
- UI label: `Restore sessions on start`
|
|
123
|
+
- Meaning: restore previous project sessions when the daemon starts.
|
|
124
|
+
|
|
125
|
+
**`daemon.max_concurrent_quests`**
|
|
126
|
+
|
|
127
|
+
- Type: `number`
|
|
128
|
+
- Default: `1`
|
|
129
|
+
- UI label: `Max concurrent projects`
|
|
130
|
+
- Meaning: upper bound on how many projects may run at the same time.
|
|
131
|
+
- Recommendation: keep `1` unless you intentionally want parallel project execution.
|
|
132
|
+
|
|
133
|
+
**`daemon.ack_timeout_ms`**
|
|
134
|
+
|
|
135
|
+
- Type: `number`
|
|
136
|
+
- Default: `1000`
|
|
137
|
+
- UI label: `Ack timeout (ms)`
|
|
138
|
+
- Meaning: timeout budget for short acknowledgments and lightweight connector feedback.
|
|
139
|
+
|
|
140
|
+
### Web / TUI runtime
|
|
141
|
+
|
|
142
|
+
**`ui.host`**
|
|
143
|
+
|
|
144
|
+
- Type: `string`
|
|
145
|
+
- Default: `0.0.0.0`
|
|
146
|
+
- UI label: `UI host`
|
|
147
|
+
- Meaning: bind address for the local web UI server.
|
|
148
|
+
- Common values:
|
|
149
|
+
- `0.0.0.0`: LAN, container, reverse-proxy friendly
|
|
150
|
+
- `127.0.0.1`: local-only
|
|
151
|
+
|
|
152
|
+
**`ui.port`**
|
|
153
|
+
|
|
154
|
+
- Type: `number`
|
|
155
|
+
- Default: `20999`
|
|
156
|
+
- UI label: `UI port`
|
|
157
|
+
- Meaning: listening port for the local UI server.
|
|
158
|
+
|
|
159
|
+
**`ui.auto_open_browser`**
|
|
160
|
+
|
|
161
|
+
- Type: `boolean`
|
|
162
|
+
- Default: `true`
|
|
163
|
+
- UI label: `Auto-open browser`
|
|
164
|
+
- Meaning: open the browser automatically when the UI starts.
|
|
165
|
+
|
|
166
|
+
**`ui.default_mode`**
|
|
167
|
+
|
|
168
|
+
- Type: `string`
|
|
169
|
+
- Default: `both`
|
|
170
|
+
- Allowed values: `both`, `web`, `tui`
|
|
171
|
+
- UI label: `Default start mode`
|
|
172
|
+
- Meaning: preferred startup surface when launching DeepScientist.
|
|
173
|
+
|
|
174
|
+
### Logging
|
|
175
|
+
|
|
176
|
+
**`logging.level`**
|
|
177
|
+
|
|
178
|
+
- Type: `string`
|
|
179
|
+
- Default: `info`
|
|
180
|
+
- Allowed values: `debug`, `info`, `warning`, `error`
|
|
181
|
+
- UI label: `Log level`
|
|
182
|
+
- Meaning: daemon and runner log verbosity.
|
|
183
|
+
|
|
184
|
+
**`logging.console`**
|
|
185
|
+
|
|
186
|
+
- Type: `boolean`
|
|
187
|
+
- Default: `true`
|
|
188
|
+
- UI label: `Log to console`
|
|
189
|
+
- Meaning: mirror logs to the active terminal in addition to file logs.
|
|
190
|
+
|
|
191
|
+
**`logging.keep_days`**
|
|
192
|
+
|
|
193
|
+
- Type: `number`
|
|
194
|
+
- Default: `30`
|
|
195
|
+
- UI label: `Retention days`
|
|
196
|
+
- Meaning: log retention window before cleanup.
|
|
197
|
+
|
|
198
|
+
### Git behavior
|
|
199
|
+
|
|
200
|
+
**`git.auto_checkpoint`**
|
|
201
|
+
|
|
202
|
+
- Type: `boolean`
|
|
203
|
+
- Default: `true`
|
|
204
|
+
- UI label: `Auto-checkpoint`
|
|
205
|
+
- Meaning: create Git checkpoints automatically during project progress.
|
|
206
|
+
|
|
207
|
+
**`git.auto_push`**
|
|
208
|
+
|
|
209
|
+
- Type: `boolean`
|
|
210
|
+
- Default: `false`
|
|
211
|
+
- UI label: `Auto-push`
|
|
212
|
+
- Meaning: push checkpoint commits to the default remote automatically.
|
|
213
|
+
- Risk: once enabled, intermediate research artifacts may leave the machine earlier.
|
|
214
|
+
|
|
215
|
+
**`git.default_remote`**
|
|
216
|
+
|
|
217
|
+
- Type: `string`
|
|
218
|
+
- Default: `origin`
|
|
219
|
+
- UI label: `Default remote`
|
|
220
|
+
- Meaning: remote name used for auto-push and export.
|
|
221
|
+
|
|
222
|
+
**`git.graph_formats`**
|
|
223
|
+
|
|
224
|
+
- Type: `list[string]`
|
|
225
|
+
- Default: `["svg", "png", "json"]`
|
|
226
|
+
- UI label: `Graph export formats`
|
|
227
|
+
- Meaning: formats generated for graph export.
|
|
228
|
+
|
|
229
|
+
### Reports & visuals
|
|
230
|
+
|
|
231
|
+
Palette selection is no longer exposed in `Settings` or `config.yaml`.
|
|
232
|
+
|
|
233
|
+
- Chart and figure color discipline now lives in:
|
|
234
|
+
- `src/prompts/system.md`
|
|
235
|
+
- `src/skills/experiment/SKILL.md`
|
|
236
|
+
- `src/skills/analysis-campaign/SKILL.md`
|
|
237
|
+
- `src/skills/write/SKILL.md`
|
|
238
|
+
- DeepScientist uses a fixed Morandi palette guide instead of per-install color settings.
|
|
239
|
+
- The durable reference page is `docs/en/08_FIGURE_STYLE_GUIDE.md`.
|
|
240
|
+
- Edit the prompt / skill contract if you need to change the default visual language.
|
|
241
|
+
|
|
242
|
+
### Skill synchronization
|
|
243
|
+
|
|
244
|
+
**`skills.sync_global_on_init`**
|
|
245
|
+
|
|
246
|
+
- Type: `boolean`
|
|
247
|
+
- Default: `true`
|
|
248
|
+
- UI label: `Sync global skills on init`
|
|
249
|
+
- Meaning: install project-provided skills into the global runner home during initialization.
|
|
250
|
+
|
|
251
|
+
**`skills.sync_quest_on_create`**
|
|
252
|
+
|
|
253
|
+
- Type: `boolean`
|
|
254
|
+
- Default: `true`
|
|
255
|
+
- UI label: `Sync project skills on create`
|
|
256
|
+
- Meaning: mirror skills into project-local runner homes when a project is created.
|
|
257
|
+
|
|
258
|
+
**`skills.sync_quest_on_open`**
|
|
259
|
+
|
|
260
|
+
- Type: `boolean`
|
|
261
|
+
- Default: `true`
|
|
262
|
+
- UI label: `Sync project skills on open`
|
|
263
|
+
- Meaning: refresh project-local skill mirrors when an existing project is opened.
|
|
264
|
+
|
|
265
|
+
### Connector policy
|
|
266
|
+
|
|
267
|
+
These fields are global connector behaviors, not per-platform credentials.
|
|
268
|
+
|
|
269
|
+
**`connectors.auto_ack`**
|
|
270
|
+
|
|
271
|
+
- Type: `boolean`
|
|
272
|
+
- Default: `true`
|
|
273
|
+
- UI label: `Auto-ack incoming messages`
|
|
274
|
+
- Meaning: send a short acknowledgment before the full project response completes.
|
|
275
|
+
|
|
276
|
+
**`connectors.milestone_push`**
|
|
277
|
+
|
|
278
|
+
- Type: `boolean`
|
|
279
|
+
- Default: `true`
|
|
280
|
+
- UI label: `Push milestones`
|
|
281
|
+
- Meaning: allow milestone and decision updates to fan out through enabled connectors.
|
|
282
|
+
|
|
283
|
+
**`connectors.direct_chat_enabled`**
|
|
284
|
+
|
|
285
|
+
- Type: `boolean`
|
|
286
|
+
- Default: `true`
|
|
287
|
+
- UI label: `Enable direct chat`
|
|
288
|
+
- Meaning: allow connectors to continue projects from direct messages.
|
|
289
|
+
|
|
290
|
+
### Cloud link
|
|
291
|
+
|
|
292
|
+
This block is optional and not part of the local-first core path.
|
|
293
|
+
|
|
294
|
+
**`cloud.enabled`**
|
|
295
|
+
|
|
296
|
+
- Type: `boolean`
|
|
297
|
+
- Default: `false`
|
|
298
|
+
- UI label: `Enable cloud link`
|
|
299
|
+
- Meaning: turn on the optional cloud-link path.
|
|
300
|
+
|
|
301
|
+
**`cloud.base_url`**
|
|
302
|
+
|
|
303
|
+
- Type: `string`
|
|
304
|
+
- Default: `https://deepscientist.cc`
|
|
305
|
+
- UI label: `Cloud base URL`
|
|
306
|
+
- Meaning: base URL of the cloud endpoint.
|
|
307
|
+
|
|
308
|
+
**`cloud.token`**
|
|
309
|
+
|
|
310
|
+
- Type: `string | null`
|
|
311
|
+
- Default: `null`
|
|
312
|
+
- UI label: `Cloud token`
|
|
313
|
+
- Meaning: direct token value for cloud authentication.
|
|
314
|
+
|
|
315
|
+
**`cloud.token_env`**
|
|
316
|
+
|
|
317
|
+
- Type: `string`
|
|
318
|
+
- Default: `DEEPSCIENTIST_TOKEN`
|
|
319
|
+
- UI label: `Cloud token env var`
|
|
320
|
+
- Meaning: environment variable name used to source the token.
|
|
321
|
+
|
|
322
|
+
**`cloud.verify_token_on_start`**
|
|
323
|
+
|
|
324
|
+
- Type: `boolean`
|
|
325
|
+
- Default: `false`
|
|
326
|
+
- UI label: `Verify token on start`
|
|
327
|
+
- Meaning: fail fast if the configured cloud token is invalid.
|
|
328
|
+
|
|
329
|
+
**`cloud.sync_mode`**
|
|
330
|
+
|
|
331
|
+
- Type: `string`
|
|
332
|
+
- Default: `disabled`
|
|
333
|
+
- Allowed values: `disabled`, `pull`, `push`, `bidirectional`
|
|
334
|
+
- UI label: `Cloud sync mode`
|
|
335
|
+
- Meaning: overall cloud synchronization direction.
|
|
336
|
+
|
|
337
|
+
### ACP bridge
|
|
338
|
+
|
|
339
|
+
These settings are compatibility knobs for ACP-style external consumers.
|
|
340
|
+
|
|
341
|
+
**`acp.compatibility_profile`**
|
|
342
|
+
|
|
343
|
+
- Type: `string`
|
|
344
|
+
- Default: `deepscientist-acp-compat/v1`
|
|
345
|
+
- UI label: `Compatibility profile`
|
|
346
|
+
- Meaning: named ACP compatibility profile exposed to external consumers.
|
|
347
|
+
|
|
348
|
+
**`acp.events_transport`**
|
|
349
|
+
|
|
350
|
+
- Type: `string`
|
|
351
|
+
- Default: `rest-poll`
|
|
352
|
+
- Allowed values: `rest-poll`, `sse`
|
|
353
|
+
- UI label: `Events transport`
|
|
354
|
+
- Meaning: transport used for ACP-style event delivery.
|
|
355
|
+
|
|
356
|
+
**`acp.sdk_bridge_enabled`**
|
|
357
|
+
|
|
358
|
+
- Type: `boolean`
|
|
359
|
+
- Default: `false`
|
|
360
|
+
- UI label: `Enable SDK bridge`
|
|
361
|
+
- Meaning: allow the runtime to bridge through an ACP SDK module.
|
|
362
|
+
|
|
363
|
+
**`acp.sdk_module`**
|
|
364
|
+
|
|
365
|
+
- Type: `string`
|
|
366
|
+
- Default: `acp`
|
|
367
|
+
- UI label: `SDK module`
|
|
368
|
+
- Meaning: Python module name imported when ACP SDK bridging is enabled.
|
|
369
|
+
|
|
370
|
+
## `runners.yaml`
|
|
371
|
+
|
|
372
|
+
### Summary
|
|
373
|
+
|
|
374
|
+
`runners.yaml` defines which runner executes projects and what its default model, approval policy, sandbox, and retry behavior should be. In the current open-source release:
|
|
375
|
+
|
|
376
|
+
- `codex`: primary path, enabled by default
|
|
377
|
+
- `claude`: TODO / reserved slot, disabled by default, not runnable yet
|
|
378
|
+
|
|
379
|
+
### Schema
|
|
380
|
+
|
|
381
|
+
```yaml
|
|
382
|
+
codex:
|
|
383
|
+
enabled: true
|
|
384
|
+
binary: codex
|
|
385
|
+
config_dir: ~/.codex
|
|
386
|
+
model: gpt-5.4
|
|
387
|
+
model_reasoning_effort: xhigh
|
|
388
|
+
approval_policy: on-request
|
|
389
|
+
sandbox_mode: workspace-write
|
|
390
|
+
retry_on_failure: true
|
|
391
|
+
retry_max_attempts: 5
|
|
392
|
+
retry_initial_backoff_sec: 1.0
|
|
393
|
+
retry_backoff_multiplier: 2.0
|
|
394
|
+
retry_max_backoff_sec: 8.0
|
|
395
|
+
mcp_tool_timeout_sec: 180000
|
|
396
|
+
env: {}
|
|
397
|
+
claude:
|
|
398
|
+
enabled: false
|
|
399
|
+
binary: claude
|
|
400
|
+
config_dir: ~/.claude
|
|
401
|
+
model: inherit
|
|
402
|
+
model_reasoning_effort: ""
|
|
403
|
+
env: {}
|
|
404
|
+
status: reserved_todo
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Editable fields
|
|
408
|
+
|
|
409
|
+
**`enabled`**
|
|
410
|
+
|
|
411
|
+
- Type: `boolean`
|
|
412
|
+
- Default: `codex=true`, `claude=false`
|
|
413
|
+
- UI label: `Enabled`
|
|
414
|
+
- Meaning: whether this runner can be selected and used.
|
|
415
|
+
|
|
416
|
+
**`binary`**
|
|
417
|
+
|
|
418
|
+
- Type: `string`
|
|
419
|
+
- Default: `codex` or `claude`
|
|
420
|
+
- UI label: `Binary`
|
|
421
|
+
- Meaning: command name or absolute path used to launch the runner.
|
|
422
|
+
- `Test` behavior: checks whether the binary is on `PATH`.
|
|
423
|
+
|
|
424
|
+
**`config_dir`**
|
|
425
|
+
|
|
426
|
+
- Type: `string`
|
|
427
|
+
- Default: `~/.codex` or `~/.claude`
|
|
428
|
+
- UI label: `Config directory`
|
|
429
|
+
- Meaning: global runner home for auth and global config.
|
|
430
|
+
|
|
431
|
+
**`model`**
|
|
432
|
+
|
|
433
|
+
- Type: `string`
|
|
434
|
+
- Default: `codex=gpt-5.4`, `claude=inherit`
|
|
435
|
+
- UI label: `Default model`
|
|
436
|
+
- Meaning: default model used when a project does not override it.
|
|
437
|
+
|
|
438
|
+
**`model_reasoning_effort`**
|
|
439
|
+
|
|
440
|
+
- Type: `string`
|
|
441
|
+
- Default: `codex=xhigh`
|
|
442
|
+
- UI label: `Reasoning effort`
|
|
443
|
+
- Allowed values: `""`, `minimal`, `low`, `medium`, `high`, `xhigh`
|
|
444
|
+
- Meaning: default reasoning intensity.
|
|
445
|
+
|
|
446
|
+
**`approval_policy`**
|
|
447
|
+
|
|
448
|
+
- Type: `string`
|
|
449
|
+
- Default: `on-request`
|
|
450
|
+
- UI label: `Approval policy`
|
|
451
|
+
- Allowed values: `never`, `on-failure`, `on-request`, `untrusted`
|
|
452
|
+
- Meaning: how the runner should ask for permission on privileged actions.
|
|
453
|
+
|
|
454
|
+
**`sandbox_mode`**
|
|
455
|
+
|
|
456
|
+
- Type: `string`
|
|
457
|
+
- Default: `workspace-write`
|
|
458
|
+
- UI label: `Sandbox mode`
|
|
459
|
+
- Allowed values: `read-only`, `workspace-write`, `danger-full-access`
|
|
460
|
+
- Meaning: filesystem / process access mode for the runner.
|
|
461
|
+
|
|
462
|
+
**`retry_on_failure`**
|
|
463
|
+
|
|
464
|
+
- Type: `boolean`
|
|
465
|
+
- Default: `true`
|
|
466
|
+
- UI label: `Retry on failure`
|
|
467
|
+
- Meaning: retry a failed turn automatically.
|
|
468
|
+
|
|
469
|
+
**`retry_max_attempts`**
|
|
470
|
+
|
|
471
|
+
- Type: `number`
|
|
472
|
+
- Default: `5`
|
|
473
|
+
- UI label: `Max attempts`
|
|
474
|
+
- Meaning: total allowed attempts for one turn.
|
|
475
|
+
- Notes: runtime hard-caps this at `5`.
|
|
476
|
+
|
|
477
|
+
**`retry_initial_backoff_sec`**
|
|
478
|
+
|
|
479
|
+
- Type: `number`
|
|
480
|
+
- Default: `1.0`
|
|
481
|
+
- UI label: `Initial backoff (s)`
|
|
482
|
+
- Meaning: delay before the first retry.
|
|
483
|
+
|
|
484
|
+
**`retry_backoff_multiplier`**
|
|
485
|
+
|
|
486
|
+
- Type: `number`
|
|
487
|
+
- Default: `2.0`
|
|
488
|
+
- UI label: `Backoff multiplier`
|
|
489
|
+
- Meaning: exponential backoff multiplier.
|
|
490
|
+
|
|
491
|
+
**`retry_max_backoff_sec`**
|
|
492
|
+
|
|
493
|
+
- Type: `number`
|
|
494
|
+
- Default: `8.0`
|
|
495
|
+
- UI label: `Max backoff (s)`
|
|
496
|
+
- Meaning: upper bound on retry delay after exponential growth.
|
|
497
|
+
|
|
498
|
+
**`status`**
|
|
499
|
+
|
|
500
|
+
- Type: `string`
|
|
501
|
+
- Default: `claude=reserved_todo`
|
|
502
|
+
- UI label: `Status note`
|
|
503
|
+
- Meaning: operator-facing note such as `reserved_todo` or `experimental`.
|
|
504
|
+
|
|
505
|
+
### File-level companion fields
|
|
506
|
+
|
|
507
|
+
**`mcp_tool_timeout_sec`**
|
|
508
|
+
|
|
509
|
+
- Type: `number`
|
|
510
|
+
- Default: `180000`
|
|
511
|
+
- Meaning: allow long-running MCP tool calls, especially durable `bash_exec` flows.
|
|
512
|
+
|
|
513
|
+
**`env`**
|
|
514
|
+
|
|
515
|
+
- Type: `mapping[string, string]`
|
|
516
|
+
- Default: `{}`
|
|
517
|
+
- UI location: environment editor at the bottom of each runner card
|
|
518
|
+
- Meaning: per-runner environment overrides.
|
|
519
|
+
|
|
520
|
+
### Practical guidance
|
|
521
|
+
|
|
522
|
+
- For most installs, keep `codex.enabled: true` and `claude.enabled: false`.
|
|
523
|
+
- Do not switch `default_runner` away from `codex` in the current release.
|
|
524
|
+
- Do not lower `mcp_tool_timeout_sec` casually if your workflow uses long-running tools.
|
|
525
|
+
- Keep retry timing close to `1s / 2x / 8s max` unless you have a specific reason to slow recovery down.
|
|
526
|
+
|
|
527
|
+
## `connectors.yaml`
|
|
528
|
+
|
|
529
|
+
### Summary
|
|
530
|
+
|
|
531
|
+
`connectors.yaml` manages connector enablement, transport, credentials, access control, and top-level routing policy for QQ, Telegram, Discord, Slack, Feishu / Lark, and WhatsApp.
|
|
532
|
+
|
|
533
|
+
Current design rules:
|
|
534
|
+
|
|
535
|
+
- prefer no-public-callback transports
|
|
536
|
+
- keep webhook / relay fields only as legacy or fallback paths
|
|
537
|
+
- treat connectors as alternate project control surfaces, not disconnected notification bots
|
|
538
|
+
|
|
539
|
+
### Top-level routing
|
|
540
|
+
|
|
541
|
+
**`_routing.primary_connector`**
|
|
542
|
+
|
|
543
|
+
- Type: `string | null`
|
|
544
|
+
- Default: `null`
|
|
545
|
+
- Meaning: preferred connector used by primary-only delivery policies.
|
|
546
|
+
|
|
547
|
+
**`_routing.artifact_delivery_policy`**
|
|
548
|
+
|
|
549
|
+
- Type: `string`
|
|
550
|
+
- Default: `fanout_all`
|
|
551
|
+
- Allowed values: `fanout_all`, `primary_only`, `primary_plus_local`
|
|
552
|
+
- Meaning: how `artifact` interaction messages are distributed across connectors.
|
|
553
|
+
|
|
554
|
+
### Common access-control fields
|
|
555
|
+
|
|
556
|
+
These fields appear across multiple connectors:
|
|
557
|
+
|
|
558
|
+
**`dm_policy`**
|
|
559
|
+
|
|
560
|
+
- Type: `string`
|
|
561
|
+
- Typical values: `pairing`, `allowlist`, `open`, `disabled`
|
|
562
|
+
- Meaning: whether direct messages auto-pair, require allowlists, or stay disabled.
|
|
563
|
+
|
|
564
|
+
**`allow_from`**
|
|
565
|
+
|
|
566
|
+
- Type: `list[string]`
|
|
567
|
+
- Meaning: direct-message sender allowlist.
|
|
568
|
+
|
|
569
|
+
**`group_policy`**
|
|
570
|
+
|
|
571
|
+
- Type: `string`
|
|
572
|
+
- Typical values: `allowlist`, `open`, `disabled`
|
|
573
|
+
- Meaning: group / channel access policy.
|
|
574
|
+
|
|
575
|
+
**`group_allow_from`**
|
|
576
|
+
|
|
577
|
+
- Type: `list[string]`
|
|
578
|
+
- Meaning: sender allowlist within groups.
|
|
579
|
+
|
|
580
|
+
**`groups`**
|
|
581
|
+
|
|
582
|
+
- Type: `list[string]`
|
|
583
|
+
- Meaning: allowlisted target group or channel ids.
|
|
584
|
+
|
|
585
|
+
**`auto_bind_dm_to_active_quest`**
|
|
586
|
+
|
|
587
|
+
- Type: `boolean`
|
|
588
|
+
- Default: usually `true`
|
|
589
|
+
- Meaning: direct messages automatically follow the current active project.
|
|
590
|
+
|
|
591
|
+
### `telegram`
|
|
592
|
+
|
|
593
|
+
Summary: best for direct bot chat; prefer `polling` over public webhooks.
|
|
594
|
+
|
|
595
|
+
Recommended path:
|
|
596
|
+
|
|
597
|
+
- `enabled: true`
|
|
598
|
+
- `transport: polling`
|
|
599
|
+
- provide `bot_token`
|
|
600
|
+
|
|
601
|
+
Primary fields:
|
|
602
|
+
|
|
603
|
+
**`transport`**
|
|
604
|
+
|
|
605
|
+
- Type: `string`
|
|
606
|
+
- Default: `polling`
|
|
607
|
+
- Allowed values: `polling`, `legacy_webhook`, `relay`
|
|
608
|
+
|
|
609
|
+
**`bot_name`**
|
|
610
|
+
|
|
611
|
+
- Type: `string`
|
|
612
|
+
- Default: `DeepScientist`
|
|
613
|
+
|
|
614
|
+
**`bot_token`**
|
|
615
|
+
|
|
616
|
+
- Type: `string | null`
|
|
617
|
+
- Meaning: Telegram Bot API token.
|
|
618
|
+
- How to get it: BotFather.
|
|
619
|
+
- File-only companion: `bot_token_env`.
|
|
620
|
+
|
|
621
|
+
**`command_prefix`**
|
|
622
|
+
|
|
623
|
+
- Type: `string`
|
|
624
|
+
- Default: `/`
|
|
625
|
+
|
|
626
|
+
**`require_mention_in_groups`**
|
|
627
|
+
|
|
628
|
+
- Type: `boolean`
|
|
629
|
+
- Default: `true`
|
|
630
|
+
|
|
631
|
+
Legacy / relay fields:
|
|
632
|
+
|
|
633
|
+
- `webhook_secret`
|
|
634
|
+
- `public_callback_url`
|
|
635
|
+
- `relay_url`
|
|
636
|
+
- `relay_auth_token`
|
|
637
|
+
|
|
638
|
+
### `discord`
|
|
639
|
+
|
|
640
|
+
Summary: prefer `gateway`; public interaction callbacks are not the primary path.
|
|
641
|
+
|
|
642
|
+
Primary fields:
|
|
643
|
+
|
|
644
|
+
**`transport`**
|
|
645
|
+
|
|
646
|
+
- Type: `string`
|
|
647
|
+
- Default: `gateway`
|
|
648
|
+
- Allowed values: `gateway`, `legacy_interactions`, `relay`
|
|
649
|
+
|
|
650
|
+
**`bot_token`**
|
|
651
|
+
|
|
652
|
+
- Type: `string | null`
|
|
653
|
+
- File-only companion: `bot_token_env`
|
|
654
|
+
|
|
655
|
+
**`application_id`**
|
|
656
|
+
|
|
657
|
+
- Type: `string | null`
|
|
658
|
+
- Meaning: application id used for richer routing and future slash-command support.
|
|
659
|
+
|
|
660
|
+
**`guild_allowlist`**
|
|
661
|
+
|
|
662
|
+
- Type: `list[string]`
|
|
663
|
+
- Meaning: allowlisted guild ids.
|
|
664
|
+
|
|
665
|
+
**`require_mention_in_groups`**
|
|
666
|
+
|
|
667
|
+
- Type: `boolean`
|
|
668
|
+
- Default: `true`
|
|
669
|
+
|
|
670
|
+
Legacy fields:
|
|
671
|
+
|
|
672
|
+
- `public_key`
|
|
673
|
+
- `public_interactions_url`
|
|
674
|
+
- `relay_url`
|
|
675
|
+
- `relay_auth_token`
|
|
676
|
+
|
|
677
|
+
### `slack`
|
|
678
|
+
|
|
679
|
+
Summary: prefer `socket_mode`; this is the main no-callback route.
|
|
680
|
+
|
|
681
|
+
Primary fields:
|
|
682
|
+
|
|
683
|
+
**`transport`**
|
|
684
|
+
|
|
685
|
+
- Type: `string`
|
|
686
|
+
- Default: `socket_mode`
|
|
687
|
+
- Allowed values: `socket_mode`, `legacy_events_api`, `relay`
|
|
688
|
+
|
|
689
|
+
**`bot_token`**
|
|
690
|
+
|
|
691
|
+
- Type: `string | null`
|
|
692
|
+
- Meaning: Bot User OAuth Token.
|
|
693
|
+
- File-only companion: `bot_token_env`
|
|
694
|
+
|
|
695
|
+
**`app_token`**
|
|
696
|
+
|
|
697
|
+
- Type: `string | null`
|
|
698
|
+
- Meaning: App-Level token required by Socket Mode.
|
|
699
|
+
- File-only companion: `app_token_env`
|
|
700
|
+
|
|
701
|
+
**`bot_user_id`**
|
|
702
|
+
|
|
703
|
+
- Type: `string | null`
|
|
704
|
+
- Meaning: optional bot user id used for mention filtering or routing.
|
|
705
|
+
|
|
706
|
+
**`command_prefix`**
|
|
707
|
+
|
|
708
|
+
- Type: `string`
|
|
709
|
+
- Default: `/`
|
|
710
|
+
|
|
711
|
+
**`require_mention_in_groups`**
|
|
712
|
+
|
|
713
|
+
- Type: `boolean`
|
|
714
|
+
- Default: `true`
|
|
715
|
+
|
|
716
|
+
Legacy fields:
|
|
717
|
+
|
|
718
|
+
- `signing_secret`
|
|
719
|
+
- `public_callback_url`
|
|
720
|
+
- `relay_url`
|
|
721
|
+
- `relay_auth_token`
|
|
722
|
+
|
|
723
|
+
### `feishu`
|
|
724
|
+
|
|
725
|
+
Summary: prefer `long_connection`; avoid public event callbacks when possible.
|
|
726
|
+
|
|
727
|
+
Primary fields:
|
|
728
|
+
|
|
729
|
+
**`transport`**
|
|
730
|
+
|
|
731
|
+
- Type: `string`
|
|
732
|
+
- Default: `long_connection`
|
|
733
|
+
- Allowed values: `long_connection`, `legacy_webhook`, `relay`
|
|
734
|
+
|
|
735
|
+
**`app_id`**
|
|
736
|
+
|
|
737
|
+
- Type: `string | null`
|
|
738
|
+
|
|
739
|
+
**`app_secret`**
|
|
740
|
+
|
|
741
|
+
- Type: `string | null`
|
|
742
|
+
- File-only companion: `app_secret_env`
|
|
743
|
+
|
|
744
|
+
**`api_base_url`**
|
|
745
|
+
|
|
746
|
+
- Type: `string`
|
|
747
|
+
- Default: `https://open.feishu.cn`
|
|
748
|
+
|
|
749
|
+
**`require_mention_in_groups`**
|
|
750
|
+
|
|
751
|
+
- Type: `boolean`
|
|
752
|
+
- Default: `true`
|
|
753
|
+
|
|
754
|
+
Legacy fields:
|
|
755
|
+
|
|
756
|
+
- `verification_token`
|
|
757
|
+
- `encrypt_key`
|
|
758
|
+
- `public_callback_url`
|
|
759
|
+
- `relay_url`
|
|
760
|
+
- `relay_auth_token`
|
|
761
|
+
|
|
762
|
+
### `whatsapp`
|
|
763
|
+
|
|
764
|
+
Summary: the design target is `local_session`, not Meta Cloud webhook-first operation.
|
|
765
|
+
|
|
766
|
+
Primary fields:
|
|
767
|
+
|
|
768
|
+
**`transport`**
|
|
769
|
+
|
|
770
|
+
- Type: `string`
|
|
771
|
+
- Default: `local_session`
|
|
772
|
+
- Allowed values: `local_session`, `legacy_meta_cloud`, `relay`
|
|
773
|
+
|
|
774
|
+
**`auth_method`**
|
|
775
|
+
|
|
776
|
+
- Type: `string`
|
|
777
|
+
- Default: `qr_browser`
|
|
778
|
+
- Allowed values: `qr_browser`, `pairing_code`, `qr_terminal`
|
|
779
|
+
|
|
780
|
+
**`session_dir`**
|
|
781
|
+
|
|
782
|
+
- Type: `string`
|
|
783
|
+
- Default: `~/.deepscientist/connectors/whatsapp`
|
|
784
|
+
|
|
785
|
+
**`command_prefix`**
|
|
786
|
+
|
|
787
|
+
- Type: `string`
|
|
788
|
+
- Default: `/`
|
|
789
|
+
|
|
790
|
+
Legacy Meta Cloud fields:
|
|
791
|
+
|
|
792
|
+
- `provider`
|
|
793
|
+
- `access_token`
|
|
794
|
+
- `phone_number_id`
|
|
795
|
+
- `business_account_id`
|
|
796
|
+
- `verify_token`
|
|
797
|
+
- `api_base_url`
|
|
798
|
+
- `api_version`
|
|
799
|
+
- `public_callback_url`
|
|
800
|
+
- `relay_url`
|
|
801
|
+
- `relay_auth_token`
|
|
802
|
+
|
|
803
|
+
File-level companions:
|
|
804
|
+
|
|
805
|
+
- `access_token_env`
|
|
806
|
+
- `verify_token_env`
|
|
807
|
+
|
|
808
|
+
### `qq`
|
|
809
|
+
|
|
810
|
+
Summary: QQ is first-class in DeepScientist. The primary path is fixed `gateway_direct`, with no public callback URL required.
|
|
811
|
+
|
|
812
|
+
Quick start: see [QQ Connector Guide](./03_QQ_CONNECTOR_GUIDE.md).
|
|
813
|
+
|
|
814
|
+
Recommended path:
|
|
815
|
+
|
|
816
|
+
- `enabled: true`
|
|
817
|
+
- `transport: gateway_direct`
|
|
818
|
+
- fill `app_id` and `app_secret`
|
|
819
|
+
- save first
|
|
820
|
+
- ask the user to send one private QQ message to the bot
|
|
821
|
+
- let the runtime auto-detect and persist `main_chat_id`
|
|
822
|
+
|
|
823
|
+
Primary fields:
|
|
824
|
+
|
|
825
|
+
**`transport`**
|
|
826
|
+
|
|
827
|
+
- Type: `string`
|
|
828
|
+
- Default: `gateway_direct`
|
|
829
|
+
- UI state: read-only
|
|
830
|
+
- Meaning: fixed built-in QQ gateway direct mode.
|
|
831
|
+
|
|
832
|
+
**`bot_name`**
|
|
833
|
+
|
|
834
|
+
- Type: `string`
|
|
835
|
+
- Default: `DeepScientist`
|
|
836
|
+
|
|
837
|
+
**`app_id`**
|
|
838
|
+
|
|
839
|
+
- Type: `string | null`
|
|
840
|
+
- Meaning: Tencent QQ bot app id.
|
|
841
|
+
|
|
842
|
+
**`app_secret`**
|
|
843
|
+
|
|
844
|
+
- Type: `string | null`
|
|
845
|
+
- Meaning: used for QQ access-token exchange and direct API delivery.
|
|
846
|
+
- File-only companion: `app_secret_env`
|
|
847
|
+
|
|
848
|
+
**`main_chat_id`**
|
|
849
|
+
|
|
850
|
+
- Type: `string | null`
|
|
851
|
+
- UI label: `Detected OpenID`
|
|
852
|
+
- UI state: read-only
|
|
853
|
+
- Meaning: auto-filled `openid` or `group_openid` discovered from the first inbound QQ message.
|
|
854
|
+
- Important: this is runtime-discovered data, not a field you should normally type manually.
|
|
855
|
+
|
|
856
|
+
**`require_at_in_groups`**
|
|
857
|
+
|
|
858
|
+
- Type: `boolean`
|
|
859
|
+
- Default: `true`
|
|
860
|
+
|
|
861
|
+
**`gateway_restart_on_config_change`**
|
|
862
|
+
|
|
863
|
+
- Type: `boolean`
|
|
864
|
+
- Default: `true`
|
|
865
|
+
|
|
866
|
+
**`command_prefix`**
|
|
867
|
+
|
|
868
|
+
- Type: `string`
|
|
869
|
+
- Default: `/`
|
|
870
|
+
|
|
871
|
+
**`auto_bind_dm_to_active_quest`**
|
|
872
|
+
|
|
873
|
+
- Type: `boolean`
|
|
874
|
+
- Default: `true`
|
|
875
|
+
|
|
876
|
+
### QQ milestone media policy
|
|
877
|
+
|
|
878
|
+
The current recommended QQ policy is text-first.
|
|
879
|
+
Auto-media should stay rare and milestone-bound:
|
|
880
|
+
|
|
881
|
+
- main experiment summary PNG: usually `on`
|
|
882
|
+
- aggregated analysis summary PNG: usually `on`
|
|
883
|
+
- per-slice PNG: usually `off`
|
|
884
|
+
- final paper PDF: usually `on`
|
|
885
|
+
- experimental file upload path: usually `off`
|
|
886
|
+
|
|
887
|
+
These settings exist to keep QQ readable and non-spammy.
|
|
888
|
+
Do not treat QQ as a file browser by default.
|
|
889
|
+
|
|
890
|
+
**`auto_send_main_experiment_png`**
|
|
891
|
+
|
|
892
|
+
- Type: `boolean`
|
|
893
|
+
- Default: `true`
|
|
894
|
+
- Meaning: allow one milestone summary PNG after a real main experiment finishes.
|
|
895
|
+
|
|
896
|
+
**`auto_send_analysis_summary_png`**
|
|
897
|
+
|
|
898
|
+
- Type: `boolean`
|
|
899
|
+
- Default: `true`
|
|
900
|
+
- Meaning: allow one aggregated analysis-campaign summary PNG at a meaningful campaign milestone.
|
|
901
|
+
|
|
902
|
+
**`auto_send_slice_png`**
|
|
903
|
+
|
|
904
|
+
- Type: `boolean`
|
|
905
|
+
- Default: `false`
|
|
906
|
+
- Meaning: allow per-slice analysis images to auto-send.
|
|
907
|
+
- Recommendation: keep this off unless you explicitly want slice-level pushes.
|
|
908
|
+
|
|
909
|
+
**`auto_send_paper_pdf`**
|
|
910
|
+
|
|
911
|
+
- Type: `boolean`
|
|
912
|
+
- Default: `true`
|
|
913
|
+
- Meaning: allow the final paper PDF to be sent once when the bundle is durably ready.
|
|
914
|
+
|
|
915
|
+
**`enable_file_upload_experimental`**
|
|
916
|
+
|
|
917
|
+
- Type: `boolean`
|
|
918
|
+
- Default: `false`
|
|
919
|
+
- Meaning: enable the experimental QQ media/file upload path.
|
|
920
|
+
- Recommendation: keep this off unless you are explicitly testing QQ upload support.
|
|
921
|
+
|
|
922
|
+
## `plugins.yaml`
|
|
923
|
+
|
|
924
|
+
### Summary
|
|
925
|
+
|
|
926
|
+
`plugins.yaml` controls plugin discovery and trust policy. It does not store plugin runtime state.
|
|
927
|
+
|
|
928
|
+
### Schema
|
|
929
|
+
|
|
930
|
+
```yaml
|
|
931
|
+
load_paths:
|
|
932
|
+
- ~/DeepScientist/plugins
|
|
933
|
+
enabled: []
|
|
934
|
+
disabled: []
|
|
935
|
+
allow_unsigned: false
|
|
936
|
+
```
|
|
937
|
+
|
|
938
|
+
### Parameters
|
|
939
|
+
|
|
940
|
+
**`load_paths`**
|
|
941
|
+
|
|
942
|
+
- Type: `list[string]`
|
|
943
|
+
- Default: `[~/DeepScientist/plugins]`
|
|
944
|
+
- UI label: `Load paths`
|
|
945
|
+
- Meaning: directories scanned for plugin bundles.
|
|
946
|
+
|
|
947
|
+
**`enabled`**
|
|
948
|
+
|
|
949
|
+
- Type: `list[string]`
|
|
950
|
+
- Default: `[]`
|
|
951
|
+
- UI label: `Force-enable plugin ids`
|
|
952
|
+
- Meaning: explicit plugin ids to enable.
|
|
953
|
+
|
|
954
|
+
**`disabled`**
|
|
955
|
+
|
|
956
|
+
- Type: `list[string]`
|
|
957
|
+
- Default: `[]`
|
|
958
|
+
- UI label: `Force-disable plugin ids`
|
|
959
|
+
- Meaning: plugin ids that should stay disabled even if discovered.
|
|
960
|
+
|
|
961
|
+
**`allow_unsigned`**
|
|
962
|
+
|
|
963
|
+
- Type: `boolean`
|
|
964
|
+
- Default: `false`
|
|
965
|
+
- UI label: `Allow unsigned plugins`
|
|
966
|
+
- Meaning: allow plugins that do not pass trust / signature checks.
|
|
967
|
+
|
|
968
|
+
## `mcp_servers.yaml`
|
|
969
|
+
|
|
970
|
+
### Summary
|
|
971
|
+
|
|
972
|
+
This file configures external MCP servers. It does not configure built-in `memory`, `artifact`, or `bash_exec`, and it does not store project-local MCP state.
|
|
973
|
+
|
|
974
|
+
### Schema
|
|
975
|
+
|
|
976
|
+
```yaml
|
|
977
|
+
servers:
|
|
978
|
+
browser:
|
|
979
|
+
enabled: true
|
|
980
|
+
transport: stdio
|
|
981
|
+
command:
|
|
982
|
+
- npx
|
|
983
|
+
- "@example/browser-mcp"
|
|
984
|
+
url: ""
|
|
985
|
+
cwd: ""
|
|
986
|
+
env: {}
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
### Parameters per server entry
|
|
990
|
+
|
|
991
|
+
**`servers.<server_id>.enabled`**
|
|
992
|
+
|
|
993
|
+
- Type: `boolean`
|
|
994
|
+
- Default: new cards start as `false`
|
|
995
|
+
- Meaning: only enabled external MCP servers are exposed to projects or runners.
|
|
996
|
+
|
|
997
|
+
**`servers.<server_id>.transport`**
|
|
998
|
+
|
|
999
|
+
- Type: `string`
|
|
1000
|
+
- Default: `stdio`
|
|
1001
|
+
- Allowed values: `stdio`, `streamable_http`, `http`, `sse`
|
|
1002
|
+
- Meaning: choose local subprocess mode or remote HTTP/SSE mode.
|
|
1003
|
+
|
|
1004
|
+
**`servers.<server_id>.command`**
|
|
1005
|
+
|
|
1006
|
+
- Type: `list[string]`
|
|
1007
|
+
- Default: `[]`
|
|
1008
|
+
- Meaning: process command used by `stdio`.
|
|
1009
|
+
|
|
1010
|
+
**`servers.<server_id>.url`**
|
|
1011
|
+
|
|
1012
|
+
- Type: `string`
|
|
1013
|
+
- Default: `""`
|
|
1014
|
+
- Meaning: URL used by HTTP / SSE transports.
|
|
1015
|
+
|
|
1016
|
+
**`servers.<server_id>.cwd`**
|
|
1017
|
+
|
|
1018
|
+
- Type: `string`
|
|
1019
|
+
- Default: `""`
|
|
1020
|
+
- Meaning: optional working directory when starting a local `stdio` process.
|
|
1021
|
+
|
|
1022
|
+
**`servers.<server_id>.env`**
|
|
1023
|
+
|
|
1024
|
+
- Type: `mapping[string, string]`
|
|
1025
|
+
- Default: `{}`
|
|
1026
|
+
- Meaning: per-server environment overrides.
|
|
1027
|
+
|
|
1028
|
+
## Validation And Test Behavior
|
|
1029
|
+
|
|
1030
|
+
### `config.yaml`
|
|
1031
|
+
|
|
1032
|
+
`Test` checks:
|
|
1033
|
+
|
|
1034
|
+
- whether `git` is installed
|
|
1035
|
+
- whether `git config user.name` exists
|
|
1036
|
+
- whether `git config user.email` exists
|
|
1037
|
+
- whether the configured `home` path exists
|
|
1038
|
+
|
|
1039
|
+
### `runners.yaml`
|
|
1040
|
+
|
|
1041
|
+
`Test` checks:
|
|
1042
|
+
|
|
1043
|
+
- whether enabled runner binaries are on `PATH`
|
|
1044
|
+
- disabled runners are skipped with an explicit note
|
|
1045
|
+
|
|
1046
|
+
### `connectors.yaml`
|
|
1047
|
+
|
|
1048
|
+
`Validate` checks:
|
|
1049
|
+
|
|
1050
|
+
- required credentials
|
|
1051
|
+
- transport / field consistency
|
|
1052
|
+
- `relay_url` presence in relay mode
|
|
1053
|
+
- platform-specific required and recommended fields
|
|
1054
|
+
|
|
1055
|
+
`Test` performs lightweight readiness probes such as:
|
|
1056
|
+
|
|
1057
|
+
- Telegram: `getMe`
|
|
1058
|
+
- Slack: `auth.test`
|
|
1059
|
+
- Feishu: tenant-token exchange
|
|
1060
|
+
- QQ: `access_token` exchange plus `/gateway` probe
|
|
1061
|
+
|
|
1062
|
+
### `plugins.yaml`
|
|
1063
|
+
|
|
1064
|
+
- No complex runtime test; mostly structural validation.
|
|
1065
|
+
|
|
1066
|
+
### `mcp_servers.yaml`
|
|
1067
|
+
|
|
1068
|
+
- Currently mostly structural validation. Real connectivity depends on whether the target process or endpoint is actually available.
|
|
1069
|
+
|
|
1070
|
+
## Recommended Starter Profile
|
|
1071
|
+
|
|
1072
|
+
### Local single-machine research
|
|
1073
|
+
|
|
1074
|
+
```yaml
|
|
1075
|
+
# config.yaml
|
|
1076
|
+
default_runner: codex
|
|
1077
|
+
default_locale: zh-CN
|
|
1078
|
+
ui:
|
|
1079
|
+
host: 0.0.0.0
|
|
1080
|
+
port: 20999
|
|
1081
|
+
default_mode: both
|
|
1082
|
+
git:
|
|
1083
|
+
auto_checkpoint: true
|
|
1084
|
+
auto_push: false
|
|
1085
|
+
connectors:
|
|
1086
|
+
auto_ack: true
|
|
1087
|
+
milestone_push: true
|
|
1088
|
+
direct_chat_enabled: true
|
|
1089
|
+
```
|
|
1090
|
+
|
|
1091
|
+
### No-public-callback connector strategy
|
|
1092
|
+
|
|
1093
|
+
- Telegram: `transport: polling`
|
|
1094
|
+
- Discord: `transport: gateway`
|
|
1095
|
+
- Slack: `transport: socket_mode`
|
|
1096
|
+
- Feishu: `transport: long_connection`
|
|
1097
|
+
- WhatsApp: `transport: local_session`
|
|
1098
|
+
- QQ: fixed `gateway_direct`
|
|
1099
|
+
|
|
1100
|
+
## Related Docs
|
|
1101
|
+
|
|
1102
|
+
- [02 Start Research Guide: Fill the Start Research Contract](./02_START_RESEARCH_GUIDE.md)
|
|
1103
|
+
- [05 TUI Guide: Use the Terminal Interface](./05_TUI_GUIDE.md)
|
|
1104
|
+
- [06 Runtime and Canvas: Understand Runtime Flow and Canvas](./06_RUNTIME_AND_CANVAS.md)
|