@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.
Files changed (119) 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/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
  8. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
  9. package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
  10. package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
  11. package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
  12. package/docs/en/README.md +6 -0
  13. package/docs/zh/00_QUICK_START.md +2 -2
  14. package/docs/zh/01_SETTINGS_REFERENCE.md +20 -4
  15. package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +19 -0
  16. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
  17. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
  18. package/docs/zh/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
  19. package/docs/zh/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
  20. package/docs/zh/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
  21. package/docs/zh/README.md +6 -0
  22. package/install.sh +2 -0
  23. package/package.json +1 -1
  24. package/pyproject.toml +1 -1
  25. package/src/deepscientist/__init__.py +1 -1
  26. package/src/deepscientist/artifact/charts.py +567 -0
  27. package/src/deepscientist/artifact/guidance.py +50 -10
  28. package/src/deepscientist/artifact/metrics.py +228 -5
  29. package/src/deepscientist/artifact/schemas.py +3 -0
  30. package/src/deepscientist/artifact/service.py +3534 -191
  31. package/src/deepscientist/bash_exec/models.py +23 -0
  32. package/src/deepscientist/bash_exec/monitor.py +147 -67
  33. package/src/deepscientist/bash_exec/runtime.py +218 -156
  34. package/src/deepscientist/bash_exec/service.py +79 -64
  35. package/src/deepscientist/bash_exec/shells.py +87 -0
  36. package/src/deepscientist/bridges/connectors.py +51 -2
  37. package/src/deepscientist/config/models.py +6 -3
  38. package/src/deepscientist/config/service.py +7 -2
  39. package/src/deepscientist/connector/weixin_support.py +122 -1
  40. package/src/deepscientist/daemon/api/handlers.py +75 -4
  41. package/src/deepscientist/daemon/api/router.py +1 -0
  42. package/src/deepscientist/daemon/app.py +758 -206
  43. package/src/deepscientist/doctor.py +51 -0
  44. package/src/deepscientist/file_lock.py +48 -0
  45. package/src/deepscientist/gitops/diff.py +167 -1
  46. package/src/deepscientist/mcp/server.py +173 -5
  47. package/src/deepscientist/process_control.py +161 -0
  48. package/src/deepscientist/prompts/builder.py +267 -442
  49. package/src/deepscientist/quest/service.py +2255 -163
  50. package/src/deepscientist/quest/stage_views.py +171 -0
  51. package/src/deepscientist/runners/base.py +2 -0
  52. package/src/deepscientist/runners/codex.py +88 -5
  53. package/src/deepscientist/runners/runtime_overrides.py +17 -1
  54. package/src/prompts/contracts/shared_interaction.md +13 -4
  55. package/src/prompts/system.md +916 -72
  56. package/src/skills/analysis-campaign/SKILL.md +31 -2
  57. package/src/skills/analysis-campaign/references/artifact-orchestration.md +1 -1
  58. package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +65 -0
  59. package/src/skills/baseline/SKILL.md +2 -0
  60. package/src/skills/decision/SKILL.md +19 -2
  61. package/src/skills/experiment/SKILL.md +8 -2
  62. package/src/skills/finalize/SKILL.md +18 -0
  63. package/src/skills/idea/SKILL.md +78 -0
  64. package/src/skills/idea/references/idea-generation-playbook.md +100 -0
  65. package/src/skills/idea/references/outline-seeding-example.md +60 -0
  66. package/src/skills/intake-audit/SKILL.md +1 -1
  67. package/src/skills/optimize/SKILL.md +1644 -0
  68. package/src/skills/rebuttal/SKILL.md +2 -1
  69. package/src/skills/review/SKILL.md +2 -1
  70. package/src/skills/write/SKILL.md +80 -12
  71. package/src/skills/write/references/outline-evidence-contract-example.md +107 -0
  72. package/src/tui/dist/app/AppContainer.js +3 -0
  73. package/src/tui/package.json +1 -1
  74. package/src/ui/dist/assets/{AiManusChatView-DaF9Nge_.js → AiManusChatView-DDjbFnbt.js} +12 -12
  75. package/src/ui/dist/assets/{AnalysisPlugin-BSVx6dXE.js → AnalysisPlugin-Yb5IdmaU.js} +1 -1
  76. package/src/ui/dist/assets/CliPlugin-e64sreyu.js +31037 -0
  77. package/src/ui/dist/assets/{CodeEditorPlugin-DU9G0Tox.js → CodeEditorPlugin-C4D2TIkU.js} +8 -8
  78. package/src/ui/dist/assets/{CodeViewerPlugin-DoX_fI9l.js → CodeViewerPlugin-BVoNZIvC.js} +5 -5
  79. package/src/ui/dist/assets/{DocViewerPlugin-C4FWIXuU.js → DocViewerPlugin-CLChbllo.js} +3 -3
  80. package/src/ui/dist/assets/{GitDiffViewerPlugin-BgfFMgtf.js → GitDiffViewerPlugin-C4xeFyFQ.js} +20 -20
  81. package/src/ui/dist/assets/{ImageViewerPlugin-tcPkfY_x.js → ImageViewerPlugin-OiMUAcLi.js} +5 -5
  82. package/src/ui/dist/assets/{LabCopilotPanel-_dKV60Bf.js → LabCopilotPanel-BjD2ThQF.js} +11 -11
  83. package/src/ui/dist/assets/{LabPlugin-Bje0ayoC.js → LabPlugin-DQPg-NrB.js} +2 -2
  84. package/src/ui/dist/assets/{LatexPlugin-CVsBzAln.js → LatexPlugin-CI05XAV9.js} +7 -7
  85. package/src/ui/dist/assets/{MarkdownViewerPlugin-xjmrqv_8.js → MarkdownViewerPlugin-DpeBLYZf.js} +4 -4
  86. package/src/ui/dist/assets/{MarketplacePlugin-mMM2A8wP.js → MarketplacePlugin-DolE58Q2.js} +3 -3
  87. package/src/ui/dist/assets/{NotebookEditor-3kVDSOBo.js → NotebookEditor-7Qm2rSWD.js} +11 -11
  88. package/src/ui/dist/assets/{NotebookEditor-SoJ8X-MO.js → NotebookEditor-C1kWaxKi.js} +1 -1
  89. package/src/ui/dist/assets/{PdfLoader-DElVuHl9.js → PdfLoader-BfOHw8Zw.js} +1 -1
  90. package/src/ui/dist/assets/{PdfMarkdownPlugin-Bq88XT4G.js → PdfMarkdownPlugin-BulDREv1.js} +2 -2
  91. package/src/ui/dist/assets/{PdfViewerPlugin-CsCXMo9S.js → PdfViewerPlugin-C-daaOaL.js} +10 -10
  92. package/src/ui/dist/assets/{SearchPlugin-oUPvy19k.js → SearchPlugin-CjpaiJ3A.js} +1 -1
  93. package/src/ui/dist/assets/{TextViewerPlugin-CRkT9yNy.js → TextViewerPlugin-BxIyqPQC.js} +5 -5
  94. package/src/ui/dist/assets/{VNCViewer-BgbuvWhR.js → VNCViewer-HAg9mF7M.js} +10 -10
  95. package/src/ui/dist/assets/{bot-v_RASACv.js → bot-0DYntytV.js} +1 -1
  96. package/src/ui/dist/assets/{code-5hC9d0VH.js → code-B20Slj_w.js} +1 -1
  97. package/src/ui/dist/assets/{file-content-D1PxfOrp.js → file-content-DT24KFma.js} +1 -1
  98. package/src/ui/dist/assets/{file-diff-panel-DG1oT_Hj.js → file-diff-panel-DK13YPql.js} +1 -1
  99. package/src/ui/dist/assets/{file-socket-BmdFYQlk.js → file-socket-B4T2o4nR.js} +1 -1
  100. package/src/ui/dist/assets/{image-Dqe2X2tW.js → image-DSeR_sDS.js} +1 -1
  101. package/src/ui/dist/assets/{index-RDlNXXx1.js → index-BrFje2Uk.js} +2 -2
  102. package/src/ui/dist/assets/{index-DVsMKK_y.js → index-BwRJaoTl.js} +1 -1
  103. package/src/ui/dist/assets/{index-Nt9hS4ck.js → index-D_E4281X.js} +5007 -28514
  104. package/src/ui/dist/assets/{index-Duvz8Ip0.js → index-DnYB3xb1.js} +12 -12
  105. package/src/ui/dist/assets/{index-BQG-1s2o.css → index-G7AcWcMu.css} +43 -2
  106. package/src/ui/dist/assets/{monaco-DIXge1CP.js → monaco-LExaAN3Y.js} +1 -1
  107. package/src/ui/dist/assets/{pdf-effect-queue-BBTTQaO-.js → pdf-effect-queue-BJk5okWJ.js} +1 -1
  108. package/src/ui/dist/assets/{popover-BWlolyxo.js → popover-D3Gg_FoV.js} +1 -1
  109. package/src/ui/dist/assets/{project-sync-BM5PkFH4.js → project-sync-C_ygLlVU.js} +1 -1
  110. package/src/ui/dist/assets/{select-D4dAtrA8.js → select-CpAK6uWm.js} +2 -2
  111. package/src/ui/dist/assets/{sigma-CKbE5jJT.js → sigma-DEccaSgk.js} +1 -1
  112. package/src/ui/dist/assets/{square-check-big-CZNGMgiB.js → square-check-big-uUfyVsbD.js} +1 -1
  113. package/src/ui/dist/assets/{trash-DaB37xAz.js → trash-CXvwwSe8.js} +1 -1
  114. package/src/ui/dist/assets/{useCliAccess-C2OmAcWe.js → useCliAccess-Bnop4mgR.js} +1 -1
  115. package/src/ui/dist/assets/{useFileDiffOverlay-Dowd1Ij4.js → useFileDiffOverlay-B8eUAX0I.js} +1 -1
  116. package/src/ui/dist/assets/{wrap-text-BGjAhAUq.js → wrap-text-9vbOBpkW.js} +1 -1
  117. package/src/ui/dist/assets/{zoom-out-dMZQMXzc.js → zoom-out-BgVMmOW4.js} +1 -1
  118. package/src/ui/dist/index.html +2 -2
  119. 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 目前仅支持 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
  | 提示 | 代表什么 | 应该怎么做 |
@@ -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
  ![Quest 本地多媒体流转](../images/weixin/weixin-quest-media-flow.svg)
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