@researai/deepscientist 1.5.13 → 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.
Files changed (142) hide show
  1. package/README.md +8 -0
  2. package/assets/branding/logo-raster.png +0 -0
  3. package/bin/ds.js +134 -49
  4. package/docs/en/00_QUICK_START.md +2 -2
  5. package/docs/en/01_SETTINGS_REFERENCE.md +20 -4
  6. package/docs/en/03_QQ_CONNECTOR_GUIDE.md +19 -0
  7. package/docs/en/05_TUI_GUIDE.md +466 -96
  8. package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
  9. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
  10. package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
  11. package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
  12. package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
  13. package/docs/en/README.md +8 -0
  14. package/docs/zh/00_QUICK_START.md +2 -2
  15. package/docs/zh/01_SETTINGS_REFERENCE.md +20 -4
  16. package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +19 -0
  17. package/docs/zh/05_TUI_GUIDE.md +465 -82
  18. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
  19. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
  20. package/docs/zh/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
  21. package/docs/zh/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
  22. package/docs/zh/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
  23. package/docs/zh/README.md +8 -0
  24. package/install.sh +2 -0
  25. package/package.json +1 -1
  26. package/pyproject.toml +1 -1
  27. package/src/deepscientist/__init__.py +1 -1
  28. package/src/deepscientist/artifact/charts.py +567 -0
  29. package/src/deepscientist/artifact/guidance.py +50 -10
  30. package/src/deepscientist/artifact/metrics.py +228 -5
  31. package/src/deepscientist/artifact/schemas.py +3 -0
  32. package/src/deepscientist/artifact/service.py +4004 -538
  33. package/src/deepscientist/bash_exec/models.py +23 -0
  34. package/src/deepscientist/bash_exec/monitor.py +147 -67
  35. package/src/deepscientist/bash_exec/runtime.py +218 -156
  36. package/src/deepscientist/bash_exec/service.py +79 -64
  37. package/src/deepscientist/bash_exec/shells.py +87 -0
  38. package/src/deepscientist/bridges/connectors.py +51 -2
  39. package/src/deepscientist/config/models.py +6 -3
  40. package/src/deepscientist/config/service.py +7 -2
  41. package/src/deepscientist/connector/lingzhu_support.py +23 -4
  42. package/src/deepscientist/connector/weixin_support.py +122 -1
  43. package/src/deepscientist/daemon/api/handlers.py +75 -4
  44. package/src/deepscientist/daemon/api/router.py +1 -0
  45. package/src/deepscientist/daemon/app.py +869 -236
  46. package/src/deepscientist/doctor.py +51 -0
  47. package/src/deepscientist/file_lock.py +48 -0
  48. package/src/deepscientist/gitops/diff.py +167 -1
  49. package/src/deepscientist/mcp/server.py +331 -21
  50. package/src/deepscientist/process_control.py +161 -0
  51. package/src/deepscientist/prompts/builder.py +275 -491
  52. package/src/deepscientist/quest/service.py +2336 -145
  53. package/src/deepscientist/quest/stage_views.py +305 -29
  54. package/src/deepscientist/runners/base.py +2 -0
  55. package/src/deepscientist/runners/codex.py +88 -5
  56. package/src/deepscientist/runners/runtime_overrides.py +17 -1
  57. package/src/deepscientist/shared.py +6 -1
  58. package/src/prompts/contracts/shared_interaction.md +13 -4
  59. package/src/prompts/system.md +984 -1985
  60. package/src/skills/analysis-campaign/SKILL.md +31 -2
  61. package/src/skills/analysis-campaign/references/artifact-orchestration.md +1 -1
  62. package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +65 -0
  63. package/src/skills/baseline/SKILL.md +267 -994
  64. package/src/skills/baseline/references/baseline-checklist-template.md +21 -32
  65. package/src/skills/baseline/references/baseline-plan-template.md +41 -57
  66. package/src/skills/decision/SKILL.md +19 -2
  67. package/src/skills/experiment/SKILL.md +8 -2
  68. package/src/skills/finalize/SKILL.md +18 -0
  69. package/src/skills/idea/SKILL.md +78 -0
  70. package/src/skills/idea/references/idea-generation-playbook.md +100 -0
  71. package/src/skills/idea/references/outline-seeding-example.md +60 -0
  72. package/src/skills/intake-audit/SKILL.md +1 -1
  73. package/src/skills/optimize/SKILL.md +1644 -0
  74. package/src/skills/rebuttal/SKILL.md +2 -1
  75. package/src/skills/review/SKILL.md +2 -1
  76. package/src/skills/write/SKILL.md +80 -12
  77. package/src/skills/write/references/outline-evidence-contract-example.md +107 -0
  78. package/src/tui/dist/app/AppContainer.js +1445 -52
  79. package/src/tui/dist/components/Composer.js +1 -1
  80. package/src/tui/dist/components/ConfigScreen.js +190 -36
  81. package/src/tui/dist/components/GradientStatusText.js +1 -20
  82. package/src/tui/dist/components/InputPrompt.js +41 -32
  83. package/src/tui/dist/components/LoadingIndicator.js +1 -1
  84. package/src/tui/dist/components/Logo.js +61 -38
  85. package/src/tui/dist/components/MainContent.js +10 -3
  86. package/src/tui/dist/components/WelcomePanel.js +4 -12
  87. package/src/tui/dist/components/messages/AssistantMessage.js +1 -1
  88. package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -3
  89. package/src/tui/dist/components/messages/OperationMessage.js +1 -1
  90. package/src/tui/dist/index.js +28 -1
  91. package/src/tui/dist/layouts/DefaultAppLayout.js +3 -3
  92. package/src/tui/dist/lib/api.js +17 -0
  93. package/src/tui/dist/lib/connectors.js +261 -0
  94. package/src/tui/dist/semantic-colors.js +29 -19
  95. package/src/tui/package.json +1 -1
  96. package/src/ui/dist/assets/{AiManusChatView-CnJcXynW.js → AiManusChatView-DDjbFnbt.js} +12 -12
  97. package/src/ui/dist/assets/{AnalysisPlugin-DeyzPEhV.js → AnalysisPlugin-Yb5IdmaU.js} +1 -1
  98. package/src/ui/dist/assets/CliPlugin-e64sreyu.js +31037 -0
  99. package/src/ui/dist/assets/{CodeEditorPlugin-B-xicq1e.js → CodeEditorPlugin-C4D2TIkU.js} +8 -8
  100. package/src/ui/dist/assets/{CodeViewerPlugin-DT54ysXa.js → CodeViewerPlugin-BVoNZIvC.js} +5 -5
  101. package/src/ui/dist/assets/{DocViewerPlugin-DQtKT-VD.js → DocViewerPlugin-CLChbllo.js} +3 -3
  102. package/src/ui/dist/assets/{GitDiffViewerPlugin-hqHbCfnv.js → GitDiffViewerPlugin-C4xeFyFQ.js} +20 -20
  103. package/src/ui/dist/assets/{ImageViewerPlugin-OcVo33jV.js → ImageViewerPlugin-OiMUAcLi.js} +5 -5
  104. package/src/ui/dist/assets/{LabCopilotPanel-DdGwhEUV.js → LabCopilotPanel-BjD2ThQF.js} +11 -11
  105. package/src/ui/dist/assets/{LabPlugin-Ciz1gDaX.js → LabPlugin-DQPg-NrB.js} +2 -2
  106. package/src/ui/dist/assets/{LatexPlugin-BhmjNQRC.js → LatexPlugin-CI05XAV9.js} +7 -7
  107. package/src/ui/dist/assets/{MarkdownViewerPlugin-BzdVH9Bx.js → MarkdownViewerPlugin-DpeBLYZf.js} +4 -4
  108. package/src/ui/dist/assets/{MarketplacePlugin-DmyHspXt.js → MarketplacePlugin-DolE58Q2.js} +3 -3
  109. package/src/ui/dist/assets/{NotebookEditor-BTVYRGkm.js → NotebookEditor-7Qm2rSWD.js} +11 -11
  110. package/src/ui/dist/assets/{NotebookEditor-BMXKrDRk.js → NotebookEditor-C1kWaxKi.js} +1 -1
  111. package/src/ui/dist/assets/{PdfLoader-CvcjJHXv.js → PdfLoader-BfOHw8Zw.js} +1 -1
  112. package/src/ui/dist/assets/{PdfMarkdownPlugin-DW2ej8Vk.js → PdfMarkdownPlugin-BulDREv1.js} +2 -2
  113. package/src/ui/dist/assets/{PdfViewerPlugin-CmlDxbhU.js → PdfViewerPlugin-C-daaOaL.js} +10 -10
  114. package/src/ui/dist/assets/{SearchPlugin-DAjQZPSv.js → SearchPlugin-CjpaiJ3A.js} +1 -1
  115. package/src/ui/dist/assets/{TextViewerPlugin-C-nVAZb_.js → TextViewerPlugin-BxIyqPQC.js} +5 -5
  116. package/src/ui/dist/assets/{VNCViewer-D7-dIYon.js → VNCViewer-HAg9mF7M.js} +10 -10
  117. package/src/ui/dist/assets/{bot-C_G4WtNI.js → bot-0DYntytV.js} +1 -1
  118. package/src/ui/dist/assets/{code-Cd7WfiWq.js → code-B20Slj_w.js} +1 -1
  119. package/src/ui/dist/assets/{file-content-B57zsL9y.js → file-content-DT24KFma.js} +1 -1
  120. package/src/ui/dist/assets/{file-diff-panel-DVoheLFq.js → file-diff-panel-DK13YPql.js} +1 -1
  121. package/src/ui/dist/assets/{file-socket-B5kXFxZP.js → file-socket-B4T2o4nR.js} +1 -1
  122. package/src/ui/dist/assets/{image-LLOjkMHF.js → image-DSeR_sDS.js} +1 -1
  123. package/src/ui/dist/assets/{index-hOUOWbW2.js → index-BrFje2Uk.js} +2 -2
  124. package/src/ui/dist/assets/{index-Dxa2eYMY.js → index-BwRJaoTl.js} +1 -1
  125. package/src/ui/dist/assets/{index-CLQauncb.js → index-D_E4281X.js} +5418 -28620
  126. package/src/ui/dist/assets/{index-C3r2iGrp.js → index-DnYB3xb1.js} +12 -12
  127. package/src/ui/dist/assets/{index-BQG-1s2o.css → index-G7AcWcMu.css} +43 -2
  128. package/src/ui/dist/assets/{monaco-BGGAEii3.js → monaco-LExaAN3Y.js} +1 -1
  129. package/src/ui/dist/assets/{pdf-effect-queue-DlEr1_y5.js → pdf-effect-queue-BJk5okWJ.js} +1 -1
  130. package/src/ui/dist/assets/{popover-CWJbJuYY.js → popover-D3Gg_FoV.js} +1 -1
  131. package/src/ui/dist/assets/{project-sync-CRJiucYO.js → project-sync-C_ygLlVU.js} +1 -1
  132. package/src/ui/dist/assets/{select-CoHB7pvH.js → select-CpAK6uWm.js} +2 -2
  133. package/src/ui/dist/assets/{sigma-D5aJWR8J.js → sigma-DEccaSgk.js} +1 -1
  134. package/src/ui/dist/assets/{square-check-big-DUK_mnkS.js → square-check-big-uUfyVsbD.js} +1 -1
  135. package/src/ui/dist/assets/{trash-ChU3SEE3.js → trash-CXvwwSe8.js} +1 -1
  136. package/src/ui/dist/assets/{useCliAccess-BrJBV3tY.js → useCliAccess-Bnop4mgR.js} +1 -1
  137. package/src/ui/dist/assets/{useFileDiffOverlay-C2OQaVWc.js → useFileDiffOverlay-B8eUAX0I.js} +1 -1
  138. package/src/ui/dist/assets/{wrap-text-C7Qqh-om.js → wrap-text-9vbOBpkW.js} +1 -1
  139. package/src/ui/dist/assets/{zoom-out-rtX0FKya.js → zoom-out-BgVMmOW4.js} +1 -1
  140. package/src/ui/dist/index.html +2 -2
  141. package/uv.lock +1 -1
  142. package/src/ui/dist/assets/CliPlugin-CB1YODQn.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
@@ -30,6 +30,8 @@ This page is the shortest path to the right document.
30
30
 
31
31
  - [00 Quick Start](./00_QUICK_START.md)
32
32
  Start here if you want to install DeepScientist, launch it locally, and create your first project.
33
+ - [05 TUI Guide](./05_TUI_GUIDE.md)
34
+ Read this if your main surface is the terminal and you want one end-to-end path through `ds --tui`, quests, connectors, and cross-surface work.
33
35
  - [15 Codex Provider Setup](./15_CODEX_PROVIDER_SETUP.md)
34
36
  Read this when you want to run DeepScientist through MiniMax, GLM, Volcengine Ark, Alibaba Bailian, or another Codex profile.
35
37
  - [12 Guided Workflow Tour](./12_GUIDED_WORKFLOW_TOUR.md)
@@ -48,6 +50,12 @@ This page is the shortest path to the right document.
48
50
 
49
51
  ## If you want to collaborate through external surfaces
50
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.
51
59
  - [10 Weixin Connector Guide](./10_WEIXIN_CONNECTOR_GUIDE.md)
52
60
  Bind personal WeChat through DeepScientist's built-in QR login and iLink runtime.
53
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 目前仅支持 Linux 和 macOS,当前版本暂不支持 Windows。
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 目前仅支持 Linux 和 macOS。
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: on-request
413
- sandbox_mode: workspace-write
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
- - 默认值:`on-request`
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
- - 默认值:`workspace-write`
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
  | 提示 | 代表什么 | 应该怎么做 |