@researai/deepscientist 1.5.0 → 1.5.1

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 (163) hide show
  1. package/AGENTS.md +26 -0
  2. package/README.md +19 -179
  3. package/assets/connectors/lingzhu/openclaw-bridge/README.md +124 -0
  4. package/assets/connectors/lingzhu/openclaw-bridge/index.ts +162 -0
  5. package/assets/connectors/lingzhu/openclaw-bridge/openclaw.plugin.json +145 -0
  6. package/assets/connectors/lingzhu/openclaw-bridge/package.json +35 -0
  7. package/assets/connectors/lingzhu/openclaw-bridge/src/cli.ts +180 -0
  8. package/assets/connectors/lingzhu/openclaw-bridge/src/config.ts +196 -0
  9. package/assets/connectors/lingzhu/openclaw-bridge/src/debug-log.ts +111 -0
  10. package/assets/connectors/lingzhu/openclaw-bridge/src/events.ts +4 -0
  11. package/assets/connectors/lingzhu/openclaw-bridge/src/http-handler.ts +1133 -0
  12. package/assets/connectors/lingzhu/openclaw-bridge/src/image-cache.ts +75 -0
  13. package/assets/connectors/lingzhu/openclaw-bridge/src/lingzhu-tools.ts +246 -0
  14. package/assets/connectors/lingzhu/openclaw-bridge/src/transform.ts +541 -0
  15. package/assets/connectors/lingzhu/openclaw-bridge/src/types.ts +131 -0
  16. package/assets/connectors/lingzhu/openclaw-bridge/tsconfig.json +14 -0
  17. package/assets/connectors/lingzhu/openclaw.lingzhu.config.template.json +39 -0
  18. package/bin/ds.js +233 -53
  19. package/docs/en/00_QUICK_START.md +134 -0
  20. package/docs/en/01_SETTINGS_REFERENCE.md +1104 -0
  21. package/docs/en/02_START_RESEARCH_GUIDE.md +404 -0
  22. package/docs/en/03_QQ_CONNECTOR_GUIDE.md +325 -0
  23. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +216 -0
  24. package/docs/en/05_TUI_GUIDE.md +141 -0
  25. package/docs/en/06_RUNTIME_AND_CANVAS.md +679 -0
  26. package/docs/en/07_MEMORY_AND_MCP.md +253 -0
  27. package/docs/en/08_FIGURE_STYLE_GUIDE.md +97 -0
  28. package/docs/en/09_DOCTOR.md +108 -0
  29. package/docs/en/90_ARCHITECTURE.md +245 -0
  30. package/docs/en/91_DEVELOPMENT.md +195 -0
  31. package/docs/en/99_ACKNOWLEDGEMENTS.md +29 -0
  32. package/docs/zh/00_QUICK_START.md +134 -0
  33. package/docs/zh/01_SETTINGS_REFERENCE.md +1137 -0
  34. package/docs/zh/02_START_RESEARCH_GUIDE.md +414 -0
  35. package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +324 -0
  36. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +230 -0
  37. package/docs/zh/05_TUI_GUIDE.md +128 -0
  38. package/docs/zh/06_RUNTIME_AND_CANVAS.md +271 -0
  39. package/docs/zh/07_MEMORY_AND_MCP.md +235 -0
  40. package/docs/zh/08_FIGURE_STYLE_GUIDE.md +97 -0
  41. package/docs/zh/09_DOCTOR.md +112 -0
  42. package/docs/zh/99_ACKNOWLEDGEMENTS.md +29 -0
  43. package/install.sh +32 -8
  44. package/package.json +4 -2
  45. package/pyproject.toml +1 -1
  46. package/src/deepscientist/artifact/guidance.py +9 -2
  47. package/src/deepscientist/artifact/service.py +482 -22
  48. package/src/deepscientist/bash_exec/monitor.py +27 -5
  49. package/src/deepscientist/bash_exec/runtime.py +639 -0
  50. package/src/deepscientist/bash_exec/service.py +99 -16
  51. package/src/deepscientist/bridges/base.py +3 -0
  52. package/src/deepscientist/bridges/connectors.py +292 -13
  53. package/src/deepscientist/channels/qq.py +19 -2
  54. package/src/deepscientist/channels/relay.py +1 -0
  55. package/src/deepscientist/cli.py +32 -25
  56. package/src/deepscientist/config/models.py +28 -2
  57. package/src/deepscientist/config/service.py +201 -6
  58. package/src/deepscientist/connector_runtime.py +2 -0
  59. package/src/deepscientist/daemon/api/handlers.py +50 -5
  60. package/src/deepscientist/daemon/api/router.py +1 -0
  61. package/src/deepscientist/daemon/app.py +442 -15
  62. package/src/deepscientist/doctor.py +444 -0
  63. package/src/deepscientist/home.py +1 -0
  64. package/src/deepscientist/latex_runtime.py +17 -4
  65. package/src/deepscientist/lingzhu_support.py +182 -0
  66. package/src/deepscientist/mcp/server.py +49 -2
  67. package/src/deepscientist/prompts/builder.py +181 -58
  68. package/src/deepscientist/quest/layout.py +1 -0
  69. package/src/deepscientist/quest/service.py +63 -2
  70. package/src/deepscientist/quest/stage_views.py +19 -1
  71. package/src/deepscientist/runtime_tools/__init__.py +16 -0
  72. package/src/deepscientist/runtime_tools/builtins.py +19 -0
  73. package/src/deepscientist/runtime_tools/models.py +29 -0
  74. package/src/deepscientist/runtime_tools/registry.py +40 -0
  75. package/src/deepscientist/runtime_tools/service.py +59 -0
  76. package/src/deepscientist/runtime_tools/tinytex.py +25 -0
  77. package/src/deepscientist/tinytex.py +276 -0
  78. package/src/prompts/connectors/lingzhu.md +12 -0
  79. package/src/prompts/connectors/qq.md +121 -0
  80. package/src/prompts/system.md +177 -33
  81. package/src/skills/analysis-campaign/SKILL.md +22 -6
  82. package/src/skills/baseline/SKILL.md +5 -4
  83. package/src/skills/decision/SKILL.md +4 -3
  84. package/src/skills/experiment/SKILL.md +5 -4
  85. package/src/skills/finalize/SKILL.md +5 -4
  86. package/src/skills/idea/SKILL.md +5 -4
  87. package/src/skills/intake-audit/SKILL.md +277 -0
  88. package/src/skills/intake-audit/references/state-audit-template.md +41 -0
  89. package/src/skills/rebuttal/SKILL.md +407 -0
  90. package/src/skills/rebuttal/references/action-plan-template.md +63 -0
  91. package/src/skills/rebuttal/references/evidence-update-template.md +30 -0
  92. package/src/skills/rebuttal/references/response-letter-template.md +113 -0
  93. package/src/skills/rebuttal/references/review-matrix-template.md +55 -0
  94. package/src/skills/review/SKILL.md +293 -0
  95. package/src/skills/review/references/experiment-todo-template.md +29 -0
  96. package/src/skills/review/references/review-report-template.md +83 -0
  97. package/src/skills/review/references/revision-log-template.md +40 -0
  98. package/src/skills/scout/SKILL.md +5 -4
  99. package/src/skills/write/SKILL.md +7 -3
  100. package/src/tui/dist/components/WelcomePanel.js +17 -43
  101. package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -2
  102. package/src/tui/package.json +1 -1
  103. package/src/ui/dist/assets/{AiManusChatView-7v-dHngU.js → AiManusChatView-w5lF2Ttt.js} +109 -575
  104. package/src/ui/dist/assets/{AnalysisPlugin-B_Xmz-KE.js → AnalysisPlugin-DJOED79I.js} +1 -1
  105. package/src/ui/dist/assets/{AutoFigurePlugin-Cko-0tm1.js → AutoFigurePlugin-DaG61Y0M.js} +63 -8
  106. package/src/ui/dist/assets/{CliPlugin-BsU0ht7q.js → CliPlugin-CV4LqUB_.js} +43 -609
  107. package/src/ui/dist/assets/{CodeEditorPlugin-DcMMP0Rt.js → CodeEditorPlugin-DylfAea4.js} +8 -8
  108. package/src/ui/dist/assets/{CodeViewerPlugin-BqoQ5QyY.js → CodeViewerPlugin-F7saY0LM.js} +5 -5
  109. package/src/ui/dist/assets/{DocViewerPlugin-D7eHNhU6.js → DocViewerPlugin-COP0c7jf.js} +3 -3
  110. package/src/ui/dist/assets/{GitDiffViewerPlugin-DLJN42T5.js → GitDiffViewerPlugin-CAS05pT9.js} +1 -1
  111. package/src/ui/dist/assets/{ImageViewerPlugin-gJMV7MOu.js → ImageViewerPlugin-Bco1CN_w.js} +5 -6
  112. package/src/ui/dist/assets/{LabCopilotPanel-B857sfxP.js → LabCopilotPanel-CvMlCD99.js} +12 -15
  113. package/src/ui/dist/assets/LabPlugin-BYankkE4.js +2676 -0
  114. package/src/ui/dist/assets/LabPlugin-D9jVIo0A.css +2698 -0
  115. package/src/ui/dist/assets/{LatexPlugin-DWKEo-Wj.js → LatexPlugin-LDSMR-t-.js} +16 -16
  116. package/src/ui/dist/assets/{MarkdownViewerPlugin-DBzoEmhv.js → MarkdownViewerPlugin-B7o80jgm.js} +4 -4
  117. package/src/ui/dist/assets/{MarketplacePlugin-DoHc-8vo.js → MarketplacePlugin-CM6ZOcpC.js} +3 -3
  118. package/src/ui/dist/assets/{NotebookEditor-CKjKH-yS.js → NotebookEditor-Dc61cXmK.js} +3 -3
  119. package/src/ui/dist/assets/{PdfLoader-zFoL0VPo.js → PdfLoader-DWowuQwx.js} +1 -1
  120. package/src/ui/dist/assets/{PdfMarkdownPlugin-DXPaL9Nt.js → PdfMarkdownPlugin-BsJM1q_a.js} +3 -3
  121. package/src/ui/dist/assets/{PdfViewerPlugin-DhK8qCFp.js → PdfViewerPlugin-DB2eEEFQ.js} +10 -10
  122. package/src/ui/dist/assets/{SearchPlugin-CdSi6krf.js → SearchPlugin-CraThSvt.js} +1 -1
  123. package/src/ui/dist/assets/{Stepper-V-WiDQJl.js → Stepper-CgocRTPq.js} +1 -1
  124. package/src/ui/dist/assets/{TextViewerPlugin-hIs1Efiu.js → TextViewerPlugin-B1JGhKtd.js} +4 -4
  125. package/src/ui/dist/assets/{VNCViewer-DG8b0q2X.js → VNCViewer-CclFC7FM.js} +9 -10
  126. package/src/ui/dist/assets/{bibtex-HDac6fVW.js → bibtex-D3IKsMl7.js} +1 -1
  127. package/src/ui/dist/assets/{code-BnBeNxBc.js → code-BP37Xx0p.js} +1 -1
  128. package/src/ui/dist/assets/{file-content-IRQ3jHb8.js → file-content-BAJSu-9r.js} +1 -1
  129. package/src/ui/dist/assets/{file-diff-panel-DZoQ9I6r.js → file-diff-panel-DUGeCTuy.js} +1 -1
  130. package/src/ui/dist/assets/{file-socket-BMCdLc-P.js → file-socket-CXc1Ojf7.js} +1 -1
  131. package/src/ui/dist/assets/{file-utils-CltILB3w.js → file-utils-2J21jt7M.js} +1 -1
  132. package/src/ui/dist/assets/{image-Boe6ffhu.js → image-CMMmgvcn.js} +1 -1
  133. package/src/ui/dist/assets/{index-BlplpvE1.js → index-BaVumsQT.js} +2 -2
  134. package/src/ui/dist/assets/{index-DZqJ-qAM.js → index-CWgMgpow.js} +60 -2154
  135. package/src/ui/dist/assets/{index-DO43pFZP.js → index-DmwmJmbW.js} +6372 -8434
  136. package/src/ui/dist/assets/{index-Bq2bvfkl.css → index-KGt-z-dD.css} +225 -2920
  137. package/src/ui/dist/assets/{index-2Zf65FZt.js → index-s7aHnNQ4.js} +1 -1
  138. package/src/ui/dist/assets/{message-square-mUHn_Ssb.js → message-square-CQRfX0Am.js} +1 -1
  139. package/src/ui/dist/assets/{monaco-fe0arNEU.js → monaco-B4TbdsrF.js} +1 -1
  140. package/src/ui/dist/assets/{popover-D_7i19qU.js → popover-B8Rokodk.js} +1 -1
  141. package/src/ui/dist/assets/{project-sync-DyVGrU7H.js → project-sync-D_i96KH4.js} +2 -8
  142. package/src/ui/dist/assets/{sigma-BzazRyxQ.js → sigma-D12PnzCN.js} +1 -1
  143. package/src/ui/dist/assets/{tooltip-DN_yjHFH.js → tooltip-B6YrI4aJ.js} +1 -1
  144. package/src/ui/dist/assets/trash-Bc8jGp0V.js +32 -0
  145. package/src/ui/dist/assets/{useCliAccess-DV2L2Qxy.js → useCliAccess-mXVCYSZ-.js} +12 -42
  146. package/src/ui/dist/assets/{useFileDiffOverlay-DyTj-p_V.js → useFileDiffOverlay-Bg6b9H9K.js} +1 -1
  147. package/src/ui/dist/assets/{wrap-text-ozYHtUwq.js → wrap-text-Drh5GEnL.js} +1 -1
  148. package/src/ui/dist/assets/{zoom-out-BN9MUyCQ.js → zoom-out-CJj9DZLn.js} +1 -1
  149. package/src/ui/dist/index.html +2 -2
  150. package/assets/fonts/Inter-Variable.ttf +0 -0
  151. package/assets/fonts/NotoSerifSC-Regular-C94HN_ZN.ttf +0 -0
  152. package/assets/fonts/NunitoSans-Variable.ttf +0 -0
  153. package/assets/fonts/Satoshi-Medium-ByP-Zb-9.woff2 +0 -0
  154. package/assets/fonts/SourceSans3-Variable.ttf +0 -0
  155. package/assets/fonts/ds-fonts.css +0 -83
  156. package/src/ui/dist/assets/Inter-Variable-VF2RPR_K.ttf +0 -0
  157. package/src/ui/dist/assets/LabPlugin-bL7rpic8.js +0 -43
  158. package/src/ui/dist/assets/NotoSerifSC-Regular-C94HN_ZN-C94HN_ZN.ttf +0 -0
  159. package/src/ui/dist/assets/NunitoSans-Variable-B_ZymHAd.ttf +0 -0
  160. package/src/ui/dist/assets/Satoshi-Medium-ByP-Zb-9-GkA34YXu.woff2 +0 -0
  161. package/src/ui/dist/assets/SourceSans3-Variable-CD-WOsSK.ttf +0 -0
  162. package/src/ui/dist/assets/info-CcsK_htA.js +0 -18
  163. package/src/ui/dist/assets/user-plus-BusDx-hF.js +0 -79
@@ -0,0 +1,29 @@
1
+ # 99 致谢:项目来源与感谢
2
+
3
+ DeepScientist 的构思、架构设计与实现过程中,受到了许多优秀研究系统、开源项目与研究者工作的启发与帮助。在此表示诚挚感谢。
4
+
5
+ ## 项目致谢
6
+
7
+ 特别感谢以下项目为 DeepScientist 提供的重要启发、参考与研究背景:
8
+
9
+ - The AI Scientist
10
+ - The AI Scientist v2
11
+ - AlphaEvolve
12
+ - OpenEvolve
13
+ - EvoScientist
14
+
15
+ 这些项目在自动化科研、开放式探索、进化式搜索、实验组织与智能研究代理等方向上的探索,为 DeepScientist 的设计提供了重要参照。
16
+
17
+ ## 个人致谢
18
+
19
+ 同时,特别感谢以下老师和同学的支持、讨论、启发与贡献:
20
+
21
+ - Shichen Li
22
+ - Guangsheng Bao
23
+ - Fuchen Shen
24
+ - Wenyang Gao
25
+ - Luodan Zhang
26
+ - Junshu Pan
27
+ - Panzhong Lu
28
+
29
+ 谨向以上项目与个人致以感谢。
package/install.sh CHANGED
@@ -6,9 +6,11 @@ SOURCE_ROOT="$SCRIPT_DIR"
6
6
  DEFAULT_BASE_DIR="${DEEPSCIENTIST_BASE_DIR:-${DEEPSCIENTIST_HOME:-$HOME/DeepScientist}}"
7
7
  ENV_INSTALL_DIR="${DEEPSCIENTIST_INSTALL_DIR:-}"
8
8
  ENV_BIN_DIR="${DEEPSCIENTIST_BIN_DIR:-}"
9
+ ENV_WITH_TINYTEX="${DEEPSCIENTIST_WITH_TINYTEX:-}"
9
10
  BASE_DIR="$DEFAULT_BASE_DIR"
10
11
  INSTALL_DIR=""
11
12
  BIN_DIR="${ENV_BIN_DIR:-$HOME/.local/bin}"
13
+ WITH_TINYTEX=0
12
14
  DIR_SET=0
13
15
  INSTALL_DIR_SET=0
14
16
  BIN_DIR_SET=0
@@ -18,12 +20,13 @@ usage() {
18
20
  DeepScientist installer
19
21
 
20
22
  Usage:
21
- bash install.sh [--dir BASE_DIR] [--install-dir INSTALL_DIR] [--bin-dir BIN_DIR]
23
+ bash install.sh [--dir BASE_DIR] [--install-dir INSTALL_DIR] [--bin-dir BIN_DIR] [--with-tinytex]
22
24
 
23
25
  Options:
24
26
  --dir PATH Base install directory. Code is installed into PATH/cli.
25
27
  --install-dir PATH Exact install directory for the bundled CLI tree.
26
28
  --bin-dir PATH Directory for launcher wrappers.
29
+ --with-tinytex Also install a lightweight TinyTeX pdflatex runtime after DeepScientist is installed.
27
30
  -h, --help Show this help message.
28
31
 
29
32
  Defaults:
@@ -34,7 +37,8 @@ Defaults:
34
37
  Notes:
35
38
  - This installer deploys the current working tree into a separate install directory.
36
39
  - Runtime data lives under ~/DeepScientist by default.
37
- - `DEEPSCIENTIST_BASE_DIR`, `DEEPSCIENTIST_INSTALL_DIR`, and `DEEPSCIENTIST_BIN_DIR`
40
+ - `DEEPSCIENTIST_BASE_DIR`, `DEEPSCIENTIST_INSTALL_DIR`, `DEEPSCIENTIST_BIN_DIR`,
41
+ and `DEEPSCIENTIST_WITH_TINYTEX`
38
42
  can be used from `npm run install:local` as well.
39
43
  EOF
40
44
  }
@@ -68,6 +72,10 @@ while [ $# -gt 0 ]; do
68
72
  BIN_DIR_SET=1
69
73
  shift 2
70
74
  ;;
75
+ --with-tinytex)
76
+ WITH_TINYTEX=1
77
+ shift
78
+ ;;
71
79
  -h|--help)
72
80
  usage
73
81
  exit 0
@@ -80,6 +88,14 @@ while [ $# -gt 0 ]; do
80
88
  esac
81
89
  done
82
90
 
91
+ if [ "$WITH_TINYTEX" -eq 0 ]; then
92
+ case "$(printf '%s' "$ENV_WITH_TINYTEX" | tr '[:upper:]' '[:lower:]')" in
93
+ 1|true|yes|on)
94
+ WITH_TINYTEX=1
95
+ ;;
96
+ esac
97
+ fi
98
+
83
99
  if [ "$DIR_SET" -eq 1 ] && [ "$INSTALL_DIR_SET" -eq 1 ]; then
84
100
  echo "--dir and --install-dir cannot be used together" >&2
85
101
  exit 1
@@ -132,24 +148,28 @@ print_optional_latex_notice() {
132
148
  printf 'Optional LaTeX runtime: not detected.\n'
133
149
  printf 'DeepScientist still installs and runs normally.\n'
134
150
  printf 'You only need LaTeX if you want to compile paper PDFs locally from the web workspace.\n'
151
+ printf 'Recommended lightweight option:\n'
152
+ printf ' %s latex install-runtime\n' "$BIN_DIR/ds"
153
+ printf '\n'
154
+ printf 'System package alternatives:\n'
135
155
 
136
156
  if command -v apt-get >/dev/null 2>&1; then
137
- printf 'Install on Debian/Ubuntu:\n'
157
+ printf ' Debian/Ubuntu:\n'
138
158
  printf ' sudo apt-get update && sudo apt-get install -y texlive-latex-base texlive-latex-recommended texlive-fonts-recommended texlive-bibtex-extra\n'
139
159
  elif command -v dnf >/dev/null 2>&1; then
140
- printf 'Install on Fedora/RHEL:\n'
160
+ printf ' Fedora/RHEL:\n'
141
161
  printf ' sudo dnf install -y texlive-scheme-basic texlive-collection-latex texlive-bibtex\n'
142
162
  elif command -v yum >/dev/null 2>&1; then
143
- printf 'Install on CentOS/RHEL:\n'
163
+ printf ' CentOS/RHEL:\n'
144
164
  printf ' sudo yum install -y texlive-scheme-basic texlive-collection-latex texlive-bibtex\n'
145
165
  elif command -v pacman >/dev/null 2>&1; then
146
- printf 'Install on Arch Linux:\n'
166
+ printf ' Arch Linux:\n'
147
167
  printf ' sudo pacman -S --needed texlive-basic texlive-latex\n'
148
168
  elif command -v brew >/dev/null 2>&1; then
149
- printf 'Install on macOS with Homebrew:\n'
169
+ printf ' macOS with Homebrew:\n'
150
170
  printf ' brew install --cask mactex-no-gui\n'
151
171
  else
152
- printf 'Install a TeX distribution that provides `pdflatex` and `bibtex`.\n'
172
+ printf ' Install a TeX distribution that provides `pdflatex` and `bibtex`.\n'
153
173
  fi
154
174
  }
155
175
 
@@ -336,6 +356,10 @@ printf 'Run: %s\n' "$BIN_DIR/ds"
336
356
  printf 'Start web workspace: %s\n' "$BIN_DIR/ds --web"
337
357
  printf 'Default start: %s\n' "$BIN_DIR/ds"
338
358
  printf 'When `ds` starts, it prints the local Web URL and opens it automatically when supported.\n'
359
+ if [ "$WITH_TINYTEX" -eq 1 ]; then
360
+ print_step "Installing TinyTeX pdflatex runtime"
361
+ "$INSTALL_DIR/bin/ds" latex install-runtime
362
+ fi
339
363
  print_optional_latex_notice
340
364
  if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then
341
365
  printf 'Add to PATH if needed: export PATH="%s:$PATH"\n' "$BIN_DIR"
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "@researai/deepscientist",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "Local-first research operating system with a Python runtime and npm launcher",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "AGENTS.md",
8
8
  "README.md",
9
+ "docs/en/",
10
+ "docs/zh/",
9
11
  "install.sh",
10
12
  "assets/branding/",
11
- "assets/fonts/",
13
+ "assets/connectors/",
12
14
  "bin/",
13
15
  "pyproject.toml",
14
16
  "src/deepscientist/**/*.py",
package/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "deepscientist"
7
- version = "1.5.0"
7
+ version = "1.5.1"
8
8
  description = "DeepScientist Core skeleton"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -252,7 +252,10 @@ def build_guidance_for_record(record: dict[str, Any]) -> dict[str, Any]:
252
252
  _route("branch", "Branch another idea", "The current line no longer has the highest value.", "Expands search space, but delays explanation of the current line."),
253
253
  ],
254
254
  suggested_artifact_calls=[
255
- _artifact_call("artifact.create_analysis_campaign(...)", "Spawn structured analysis branches and worktrees."),
255
+ _artifact_call(
256
+ "artifact.create_analysis_campaign(...)",
257
+ "Spawn one or more structured child analysis branches/worktrees from the current result node.",
258
+ ),
256
259
  _artifact_call("artifact.record(kind='report', ...)", "Summarize the campaign before the next route decision."),
257
260
  ],
258
261
  source_artifact_kind=kind,
@@ -488,6 +491,10 @@ def build_guidance_for_record(record: dict[str, Any]) -> dict[str, Any]:
488
491
  suggested_artifact_calls=[
489
492
  _artifact_call("artifact.record(kind='report', ...)", "Summarize the main run and metric deltas."),
490
493
  _artifact_call("artifact.record(kind='decision', ...)", "Choose the next route based on the result."),
494
+ _artifact_call(
495
+ "artifact.create_analysis_campaign(...)",
496
+ "When extra experiments are needed, create them as one-slice or multi-slice child branches from the current result node.",
497
+ ),
491
498
  ],
492
499
  source_artifact_kind=kind,
493
500
  source_artifact_id=artifact_id,
@@ -750,7 +757,7 @@ def build_guidance_for_snapshot(snapshot: dict[str, Any]) -> dict[str, Any]:
750
757
  "A report synthesizes what the campaign changed.",
751
758
  ],
752
759
  suggested_artifact_calls=[
753
- _artifact_call("artifact.record(kind='run', ...)", "Persist each analysis run."),
760
+ _artifact_call("artifact.record_analysis_slice(...)", "Persist each completed analysis slice and advance the campaign."),
754
761
  _artifact_call("artifact.record(kind='report', ...)", "Write the campaign synthesis."),
755
762
  ],
756
763
  )