@bgicli/bgicli 2.4.2 → 2.4.4

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 (3) hide show
  1. package/README.md +54 -41
  2. package/dist/bgi.js +71 -68
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  **BGI CLI** 是面向中国生物学研究者的 AI 终端工具,开箱即用,无需额外配置。
4
4
 
5
- - ✅ **开箱即用** — `npm install -g @bgicli/bgicli` 即可
6
- - ✅ **内置 889 个技能** — 21 个生信工作流 + 868 个 OpenClaw 医学技能,自动安装
5
+ - ✅ **开箱即用** — clone 仓库后一键安装即可
6
+ - ✅ **内置 1001 个技能** — 涵盖生信分析、结构生物学、药物发现、临床等全领域,自动安装
7
7
  - ✅ **智能技能路由** — 描述任务自动激活对应技能,无需手动搜索
8
8
  - ✅ **中国 AI 服务商** — 百炼(DashScope)聚合:Qwen、DeepSeek、Kimi、MiniMax 等 20+ 模型
9
9
  - ✅ **真实工具调用** — 执行 bash、读写文件、运行 R/Python 脚本
@@ -13,26 +13,43 @@
13
13
 
14
14
  ## 安装
15
15
 
16
+ **环境要求:** Node.js 18+
17
+
16
18
  ```bash
17
- # 需要 Node.js 18+
18
- npm install -g @bgicli/bgicli --registry https://registry.npmjs.org
19
+ git clone https://gitlab.genomics.cn/ai/bgi-cli.git
20
+ cd bgi-cli
21
+ npm install
22
+ npm run build
23
+ sudo npm link
19
24
  ```
20
25
 
21
- 首次运行自动初始化工作流和技能库(约 16MB),无需额外操作。
26
+ > **macOS / Linux 无 root 权限时**,`npm link` 可能报 EACCES 权限错误,需先配置 npm 用户目录:
27
+ > ```bash
28
+ > mkdir -p ~/.npm-global
29
+ > npm config set prefix '~/.npm-global'
30
+ > echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc # zsh 用户改为 ~/.zshrc
31
+ > source ~/.bashrc
32
+ > npm link # 再次执行
33
+ > ```
34
+
35
+ 安装完成后直接运行:
22
36
 
23
37
  ```bash
24
38
  bgi
25
39
  ```
26
40
 
41
+ 首次运行自动初始化技能库(约 16MB),无需额外操作。
42
+
27
43
  ---
28
44
 
29
45
  ## 卸载
30
46
 
31
47
  ```bash
32
- # 卸载 npm 包
33
- npm uninstall -g @bgicli/bgicli
48
+ # 卸载命令行工具
49
+ cd bgi-cli
50
+ npm unlink
34
51
 
35
- # 删除本地数据(配置、工作流、技能库)
52
+ # 删除本地数据(配置、技能库)
36
53
  # Linux / macOS
37
54
  rm -rf ~/.bgicli
38
55
 
@@ -48,7 +65,7 @@ Remove-Item -Recurse -Force "$env:USERPROFILE\.bgicli"
48
65
  bgi # 启动
49
66
  /connect # 首次配置 API Key
50
67
  /cat # 浏览技能分类目录
51
- /sk deseq2 # 搜索并激活 DESeq2 工作流
68
+ /sk deseq2 # 搜索并激活 DESeq2 技能
52
69
  /help # 查看全部命令
53
70
  ```
54
71
 
@@ -65,11 +82,16 @@ bgi # 启动
65
82
  | 模型 | 命令 |
66
83
  |------|------|
67
84
  | Qwen3.5-plus(默认) | `/model qwen3.5-plus` |
85
+ | Qwen3.5-397B(旗舰) | `/model qwen3.5-397b-a17b` |
68
86
  | Qwen3-235B | `/model qwen3-235b-a22b` |
69
- | DeepSeek-R1 | `/model deepseek-r1` |
87
+ | Qwen3-Coder-Plus | `/model qwen3-coder-plus` |
88
+ | DeepSeek-R1(推理) | `/model deepseek-r1` |
70
89
  | DeepSeek-V3 | `/model deepseek-v3` |
90
+ | DeepSeek-V3.2 | `/model deepseek-v3.2` |
71
91
  | Kimi-K2.5 | `/model kimi-k2.5` |
92
+ | Kimi-K2-Thinking(推理) | `/model kimi-k2-thinking` |
72
93
  | MiniMax-M2.5 | `/model MiniMax-M2.5` |
94
+ | GLM-5 | `/model glm-5` |
73
95
  | QwQ-Plus(推理) | `/model qwq-plus` |
74
96
 
75
97
  获取 API Key:[bailian.console.aliyun.com](https://bailian.console.aliyun.com/)
@@ -98,13 +120,15 @@ bgi # 启动
98
120
  | `/connect [provider]` | 配置 API Key |
99
121
  | `/status` | 显示当前配置 |
100
122
 
101
- ### 技能与工作流
123
+ ### 技能
102
124
  | 命令 | 说明 |
103
125
  |------|------|
104
126
  | `/cat` | 按领域浏览技能分类目录(11个领域) |
105
- | `/sk` | 列出全部技能(工作流 + OpenClaw Medical) |
127
+ | `/sk` | 列出全部技能 |
106
128
  | `/sk <关键词>` | 搜索并激活技能(如 `/sk deseq2`、`/sk alphafold`) |
107
129
  | `/wf` | 同 `/sk`,别名 |
130
+ | `/install <url\|slug>` | 从 GitHub 或 SkillHub 安装新技能 |
131
+ | `/uninstall <id>` | 卸载已安装的技能 |
108
132
 
109
133
  > **智能路由**:直接描述任务,BGI CLI 自动识别并激活对应技能。
110
134
 
@@ -176,13 +200,13 @@ bgi # 启动
176
200
 
177
201
  ---
178
202
 
179
- ## 内置技能库
203
+ ## 内置技能库(1001个)
180
204
 
181
- ### 生物信息学工作流(21个)
205
+ 使用 `/cat` 浏览分类目录,`/sk <关键词>` 搜索,`/install` 安装更多技能。
182
206
 
183
- #### 转录组学
184
- | ID | 说明 |
185
- |----|------|
207
+ ### 🧬 转录组学
208
+ | 技能 ID | 说明 |
209
+ |---------|------|
186
210
  | `bulk-rnaseq-counts-to-de-deseq2` | DESeq2 差异表达分析 |
187
211
  | `bulk-omics-clustering` | 样本/特征聚类(K-Means / HDBSCAN) |
188
212
  | `scrnaseq-scanpy-core-analysis` | 单细胞 RNA-seq(Scanpy/Python) |
@@ -192,46 +216,35 @@ bgi # 启动
192
216
  | `functional-enrichment-from-degs` | 功能富集(GO / KEGG / GSEA) |
193
217
  | `grn-pyscenic` | 基因调控网络(pySCENIC) |
194
218
 
195
- #### 基因组学
196
- | ID | 说明 |
197
- |----|------|
219
+ ### 🧪 基因组学
220
+ | 技能 ID | 说明 |
221
+ |---------|------|
198
222
  | `genetic-variant-annotation` | VCF 变异注释(VEP / ANNOVAR) |
199
223
  | `gwas-to-function-twas` | GWAS → TWAS 因果基因 |
200
224
  | `mendelian-randomization-twosamplemr` | 孟德尔随机化 |
201
225
  | `polygenic-risk-score-prs-catalog` | 多基因风险评分(PRS) |
202
226
  | `pooled-crispr-screens` | CRISPR 文库筛选(MAGeCK / BAGEL2) |
203
227
 
204
- #### 表观基因组
205
- | ID | 说明 |
206
- |----|------|
228
+ ### 🔗 表观基因组
229
+ | 技能 ID | 说明 |
230
+ |---------|------|
207
231
  | `chip-atlas-peak-enrichment` | ChIP-seq 峰值富集 |
208
232
  | `chip-atlas-diff-analysis` | 差异结合分析 |
209
233
  | `chip-atlas-target-genes` | 转录因子靶基因鉴定 |
210
234
 
211
- #### 临床与流行病学
212
- | ID | 说明 |
213
- |----|------|
235
+ ### 🏥 临床与流行病学
236
+ | 技能 ID | 说明 |
237
+ |---------|------|
238
+ | `survival-analysis-clinical` | 临床生存分析(KM 曲线 / Cox 回归 / 竞争风险) |
214
239
  | `clinicaltrials-landscape` | 临床试验格局分析 |
215
240
  | `literature-preclinical` | 临床前文献系统提取 |
216
241
  | `experimental-design-statistics` | 实验设计与统计检验 |
217
242
  | `lasso-biomarker-panel` | LASSO 生物标志物筛选 |
218
243
  | `pcr-primer-design` | PCR/qPCR 引物设计 |
219
244
 
220
- ### OpenClaw Medical Skills(868个)
221
-
222
- 覆盖结构生物学、单细胞、药物发现、抗体设计、文献检索等领域,使用 `/cat` 浏览分类目录。
245
+ ### 📦 更多技能(979个)
223
246
 
224
- ---
225
-
226
- ## 从源码安装
227
-
228
- ```bash
229
- git clone https://github.com/zja2004/BGI-CLI.git
230
- cd BGI-CLI
231
- npm install
232
- npm run build
233
- npm link
234
- ```
247
+ 结构生物学、单细胞、药物发现、抗体设计、文献检索、临床 AI 等,使用 `/cat` 或 `/sk <关键词>` 查找。
235
248
 
236
249
  ---
237
250
 
@@ -248,7 +261,7 @@ bgi
248
261
  ├── src/prompt.ts — 生物信息学系统提示
249
262
  ├── src/providers.ts — 中国 AI 服务商配置
250
263
  ├── src/config.ts — 配置管理(~/.bgicli/config.json)
251
- └── data/ — 内置数据(工作流 + Skills + Python 工具)
264
+ └── data/ — 内置数据(Skills + Python 工具)
252
265
  ```
253
266
 
254
267
  ---
package/dist/bgi.js CHANGED
@@ -13868,7 +13868,7 @@ var TOOL_DEFINITIONS = [
13868
13868
  type: "function",
13869
13869
  function: {
13870
13870
  name: "read_file",
13871
- description: "Read the contents of a file. Use to inspect data files, SKILL.md workflow guides, R/Python scripts, results files, etc.",
13871
+ description: "Read the contents of a file. Use to inspect data files, SKILL.md guides, R/Python scripts, results files, etc.",
13872
13872
  parameters: {
13873
13873
  type: "object",
13874
13874
  properties: {
@@ -13919,7 +13919,7 @@ var TOOL_DEFINITIONS = [
13919
13919
  type: "function",
13920
13920
  function: {
13921
13921
  name: "search_files",
13922
- description: "Search for files matching a pattern using glob syntax. Use to find scripts, data files, or workflow references.",
13922
+ description: "Search for files matching a pattern using glob syntax. Use to find scripts, data files, or skill references.",
13923
13923
  parameters: {
13924
13924
  type: "object",
13925
13925
  properties: {
@@ -14561,7 +14561,7 @@ async function compactMessages(messages, config) {
14561
14561
  messages: [
14562
14562
  {
14563
14563
  role: "system",
14564
- content: "\u4F60\u662F\u4E00\u4E2A\u5BF9\u8BDD\u6458\u8981\u52A9\u624B\u3002\u8BF7\u5C06\u4EE5\u4E0B\u5BF9\u8BDD\u5386\u53F2\u538B\u7F29\u4E3A\u7B80\u6D01\u7684\u4E2D\u6587\u6458\u8981\uFF0C\u4FDD\u7559\u6240\u6709\u5173\u952E\u6280\u672F\u4FE1\u606F\uFF1A\u6587\u4EF6\u8DEF\u5F84\u3001\u547D\u4EE4\u3001\u5206\u6790\u7ED3\u679C\u3001\u7528\u6237\u51B3\u7B56\u3001\u5DF2\u6FC0\u6D3B\u7684\u5DE5\u4F5C\u6D41/\u6280\u80FD\u3002\u6458\u8981\u5E94\u8BA9\u5BF9\u8BDD\u80FD\u591F\u65E0\u7F1D\u7EE7\u7EED\u3002"
14564
+ content: "\u4F60\u662F\u4E00\u4E2A\u5BF9\u8BDD\u6458\u8981\u52A9\u624B\u3002\u8BF7\u5C06\u4EE5\u4E0B\u5BF9\u8BDD\u5386\u53F2\u538B\u7F29\u4E3A\u7B80\u6D01\u7684\u4E2D\u6587\u6458\u8981\uFF0C\u4FDD\u7559\u6240\u6709\u5173\u952E\u6280\u672F\u4FE1\u606F\uFF1A\u6587\u4EF6\u8DEF\u5F84\u3001\u547D\u4EE4\u3001\u5206\u6790\u7ED3\u679C\u3001\u7528\u6237\u51B3\u7B56\u3001\u5DF2\u6FC0\u6D3B\u7684\u6280\u80FD\u3002\u6458\u8981\u5E94\u8BA9\u5BF9\u8BDD\u80FD\u591F\u65E0\u7F1D\u7EE7\u7EED\u3002"
14565
14565
  },
14566
14566
  {
14567
14567
  role: "user",
@@ -14603,7 +14603,7 @@ function buildSystemPrompt(dbSection) {
14603
14603
  ## Core Identity
14604
14604
  - You are purpose-built for bioinformatics, NOT a general coding assistant
14605
14605
  - You default to speaking Chinese unless the user writes in English
14606
- - You always prefer using existing, validated workflow scripts over writing new code from scratch
14606
+ - You always prefer using existing, validated skill scripts over writing new code from scratch
14607
14607
  - You are pragmatic: suggest concrete commands, not theory
14608
14608
 
14609
14609
  ---
@@ -14611,26 +14611,26 @@ function buildSystemPrompt(dbSection) {
14611
14611
  ## Tool Use Policy
14612
14612
  You have access to these tools:
14613
14613
  - **bash**: Execute shell commands (R, Python, bash scripts, bioinformatics tools)
14614
- - **read_file**: Read any file (scripts, data files, SKILL.md workflow guides)
14614
+ - **read_file**: Read any file (scripts, data files, SKILL.md guides)
14615
14615
  - **write_file**: Create or update files
14616
14616
  - **list_dir**: List directory contents
14617
14617
  - **search_files**: Find files by pattern (glob)
14618
14618
  - **fetch_geo**: Query NCBI GEO database by accession (GSE/GDS/GPL/GSM). Returns metadata, sample info, organism, platform, and ready-to-use R/Python download code. **Always call this first when the user mentions a GEO accession number \u2014 never ask them to download manually.**
14619
14619
 
14620
- **MANDATORY WORKFLOW**: When the user gives you a bioinformatics task:
14621
- 1. Check if a matching pre-built workflow exists (see Workflow Library below)
14622
- 2. If yes: read the workflow's SKILL.md first, then follow it strictly
14620
+ **MANDATORY**: When the user gives you a bioinformatics task:
14621
+ 1. Check if a matching pre-built skill exists (see Skill Library below)
14622
+ 2. If yes: read the skill's SKILL.md first, then follow it strictly
14623
14623
  3. If no: plan a principled approach and explain your reasoning
14624
14624
 
14625
14625
  ---
14626
14626
 
14627
- ## Workflow Library (21 Workflows)
14627
+ ## Skill Library (22 Bioinformatics Skills)
14628
14628
 
14629
- All workflows are at: **${WORKFLOWS_DIR}**
14629
+ All skills are at: **${WORKFLOWS_DIR}**
14630
14630
 
14631
- For any workflow, read its guide first:
14631
+ For any skill, read its guide first:
14632
14632
  \`\`\`bash
14633
- cat ${WORKFLOWS_DIR}/<workflow-id>/SKILL.md
14633
+ cat ${WORKFLOWS_DIR}/<skill-id>/SKILL.md
14634
14634
  \`\`\`
14635
14635
 
14636
14636
  ### \u{1F9EC} Transcriptomics
@@ -14677,7 +14677,7 @@ cat ${WORKFLOWS_DIR}/<workflow-id>/SKILL.md
14677
14677
 
14678
14678
  ---
14679
14679
 
14680
- ## Molecular Biology Tools
14680
+ ## Molecular Biology Skills
14681
14681
 
14682
14682
  Python tools are at: **${TOOLS_DIR}**
14683
14683
 
@@ -14710,16 +14710,16 @@ ${dbSection ?? "\uFF08\u6682\u672A\u6CE8\u518C\u4EFB\u4F55\u6570\u636E\u5E93\u30
14710
14710
 
14711
14711
  ---
14712
14712
 
14713
- ## OpenClaw Medical Skills (979\u4E2A\u4E13\u79D1\u6280\u80FD)
14713
+ ## Extended Skills (979\u4E2A)
14714
14714
 
14715
- \u6280\u80FD\u5E93\u4F4D\u4E8E: **${SKILLS_DIR}**
14715
+ \u66F4\u591A\u5185\u7F6E\u6280\u80FD\u4F4D\u4E8E: **${SKILLS_DIR}**
14716
14716
 
14717
14717
  \u6BCF\u4E2A\u6280\u80FD\u76EE\u5F55\u5305\u542B\u4E00\u4E2A \`SKILL.md\` \u6587\u4EF6\uFF0C\u8BFB\u53D6\u65B9\u5F0F:
14718
14718
  \`\`\`bash
14719
14719
  cat ${SKILLS_DIR}/<skill-id>/SKILL.md
14720
14720
  \`\`\`
14721
14721
 
14722
- **\u6280\u80FD\u6DB5\u76D6\u7684\u4E3B\u8981\u9886\u57DF**\uFF08\u7528\u6237\u5DF2\u901A\u8FC7 /sk \u547D\u4EE4\u52A0\u8F7D\u65F6\u81EA\u52A8\u6CE8\u5165\u4E0A\u4E0B\u6587\uFF09:
14722
+ **\u6DB5\u76D6\u9886\u57DF**\uFF08\u7528\u6237\u901A\u8FC7 /sk \u547D\u4EE4\u52A0\u8F7D\u540E\u81EA\u52A8\u6CE8\u5165\u4E0A\u4E0B\u6587\uFF09:
14723
14723
  - \u6587\u732E\u68C0\u7D22: pubmed-search, arxiv-search, bgpt-paper-search
14724
14724
  - \u7ED3\u6784\u751F\u7269\u5B66: alphafold, alphafold-database, bindcraft, binder-design
14725
14725
  - \u5355\u7EC6\u80DE: anndata, cellagent-annotation, scvi-tools
@@ -14728,7 +14728,9 @@ cat ${SKILLS_DIR}/<skill-id>/SKILL.md
14728
14728
  - \u6297\u4F53\u8BBE\u8BA1: antibody-design-agent, armored-cart-design-agent
14729
14729
  - \u4E34\u5E8A: clinical-*, ehr-fhir-integration, autonomous-oncology-agent
14730
14730
 
14731
- \u5F53\u7528\u6237\u63D0\u5230\u67D0\u4E2A\u4E13\u79D1\u4EFB\u52A1\u65F6\uFF0C\u5EFA\u8BAE\u4ED6\u4EEC\u4F7F\u7528 **/sk <\u5173\u952E\u8BCD>** \u641C\u7D22\u5E76\u52A0\u8F7D\u5BF9\u5E94\u6280\u80FD\u6307\u5357\u3002
14731
+ \u7528\u6237\u4E5F\u53EF\u4EE5\u901A\u8FC7 **/install** \u5B89\u88C5\u81EA\u5B9A\u4E49\u6280\u80FD\uFF0C\u5B89\u88C5\u540E\u4E0E\u5185\u7F6E\u6280\u80FD\u5B8C\u5168\u7B49\u4EF7\u3002
14732
+
14733
+ \u5F53\u7528\u6237\u63D0\u5230\u67D0\u4E2A\u4EFB\u52A1\u65F6\uFF0C\u5EFA\u8BAE\u4F7F\u7528 **/sk <\u5173\u952E\u8BCD>** \u641C\u7D22\u5E76\u52A0\u8F7D\u5BF9\u5E94\u6280\u80FD\u3002
14732
14734
 
14733
14735
  ---
14734
14736
 
@@ -14819,9 +14821,9 @@ message(sprintf("\u603B\u57FA\u56E0\u6570: %d | \u663E\u8457 DEG: %d (\u4E0A\u8C
14819
14821
  ## Script Execution Rules
14820
14822
 
14821
14823
  \u{1F6A8} **\u5173\u952E\u89C4\u5219\uFF1A**
14822
- 1. **\u4F18\u5148\u4F7F\u7528\u5DE5\u4F5C\u6D41\u811A\u672C**\uFF0C\u4E0D\u8981\u4ECE\u96F6\u5199\u4EE3\u7801
14824
+ 1. **\u4F18\u5148\u4F7F\u7528\u6280\u80FD\u5185\u7F6E\u811A\u672C**\uFF0C\u4E0D\u8981\u4ECE\u96F6\u5199\u4EE3\u7801
14823
14825
  2. **\u811A\u672C\u5931\u8D25\u5904\u7406\u987A\u5E8F**: \u4FEE\u590D\u5E76\u91CD\u8BD5 \u2192 \u4FEE\u6539\u811A\u672C \u2192 \u9002\u914D\u65B9\u6848 \u2192 \u6700\u540E\u624D\u4ECE\u5934\u5199
14824
- 3. **\u4F7F\u7528\u76F8\u5BF9\u8DEF\u5F84**\uFF1A\u5728\u5DE5\u4F5C\u6D41\u76EE\u5F55\u5185\u7528 \`source("scripts/xxx.R")\` \u800C\u975E\u7EDD\u5BF9\u8DEF\u5F84
14826
+ 3. **\u4F7F\u7528\u76F8\u5BF9\u8DEF\u5F84**\uFF1A\u5728\u6280\u80FD\u76EE\u5F55\u5185\u7528 \`source("scripts/xxx.R")\` \u800C\u975E\u7EDD\u5BF9\u8DEF\u5F84
14825
14827
  4. **\u9A8C\u8BC1\u6D88\u606F**\uFF1A\u6BCF\u6B65\u5B8C\u6210\u5E94\u770B\u5230 "\u2713" \u786E\u8BA4\u6D88\u606F\uFF1B\u770B\u4E0D\u5230\u8BF4\u660E\u6CA1\u7528\u811A\u672C
14826
14828
 
14827
14829
  ---
@@ -14838,25 +14840,25 @@ message(sprintf("\u603B\u57FA\u56E0\u6570: %d | \u663E\u8457 DEG: %d (\u4E0A\u8C
14838
14840
  \u4F7F\u7528 HPC \u5DE5\u5177\u63D0\u4EA4 AlphaFold \u4EFB\u52A1
14839
14841
 
14840
14842
  **\u7528\u6237\u8BF4 "\u627E DEG \u7684\u901A\u8DEF" \u2192**
14841
- \u4F7F\u7528 functional-enrichment-from-degs \u5DE5\u4F5C\u6D41
14843
+ \u4F7F\u7528 functional-enrichment-from-degs \u6280\u80FD
14842
14844
 
14843
14845
  **\u7528\u6237\u8BF4 "\u8BBE\u8BA1 CRISPR guide RNA" \u2192**
14844
14846
  \u4F7F\u7528 molecular_biology.py \u7684 design_crispr_knockout_guides()
14845
14847
 
14846
14848
  **\u7528\u6237\u8BF4 "\u54EA\u4E9B\u57FA\u56E0\u5728\u80BF\u7624\u91CC\u8868\u8FBE\u91CF\u9AD8" / "\u627E\u4E0A\u8C03\u57FA\u56E0" \u2192**
14847
- \u2192 \u5DEE\u5F02\u8868\u8FBE\u5206\u6790\uFF08DESeq2\uFF09\uFF0C\u4F7F\u7528 bulk-rnaseq-counts-to-de-deseq2 \u5DE5\u4F5C\u6D41
14849
+ \u2192 \u5DEE\u5F02\u8868\u8FBE\u5206\u6790\uFF08DESeq2\uFF09\uFF0C\u4F7F\u7528 bulk-rnaseq-counts-to-de-deseq2 \u6280\u80FD
14848
14850
 
14849
14851
  **\u7528\u6237\u8BF4 "\u5148\u505A\u5DEE\u5F02\u8868\u8FBE\uFF0C\u518D\u505A\u5BCC\u96C6\u5206\u6790" \u2192**
14850
14852
  \u2192 \u8BC6\u522B\u4E3A\u591A\u4EFB\u52A1\uFF1A\u4F9D\u6B21\u6267\u884C bulk-rnaseq-counts-to-de-deseq2 + functional-enrichment-from-degs
14851
14853
 
14852
14854
  **\u7528\u6237\u8BF4 "\u8FD9\u4E9B\u57FA\u56E0\u53C2\u4E0E\u4EC0\u4E48\u901A\u8DEF" / "\u57FA\u56E0\u529F\u80FD\u662F\u4EC0\u4E48" \u2192**
14853
- \u2192 \u529F\u80FD\u5BCC\u96C6\u5206\u6790\uFF0C\u4F7F\u7528 functional-enrichment-from-degs \u5DE5\u4F5C\u6D41
14855
+ \u2192 \u529F\u80FD\u5BCC\u96C6\u5206\u6790\uFF0C\u4F7F\u7528 functional-enrichment-from-degs \u6280\u80FD
14854
14856
 
14855
14857
  **\u7528\u6237\u8BF4 "\u5206\u6790\u5355\u7EC6\u80DE\u6570\u636E" / "10X\u6570\u636E\u5206\u6790" \u2192**
14856
14858
  \u5148\u95EE\uFF1APython \u8FD8\u662F R\uFF1F\u2192 Scanpy \u6216 Seurat
14857
14859
 
14858
14860
  **\u7528\u6237\u8BF4 "\u753B\u751F\u5B58\u66F2\u7EBF" / "\u5206\u6790\u60A3\u8005\u9884\u540E" / "OS/PFS \u5206\u6790" \u2192**
14859
- \u2192 \u751F\u5B58\u5206\u6790\uFF0C\u4F7F\u7528 survival-analysis-clinical \u5DE5\u4F5C\u6D41
14861
+ \u2192 \u751F\u5B58\u5206\u6790\uFF0C\u4F7F\u7528 survival-analysis-clinical \u6280\u80FD
14860
14862
 
14861
14863
  **\u7528\u6237\u8BF4 "\u5E2E\u6211\u5206\u6790 GSE12345" / "\u4E0B\u8F7D GEO \u6570\u636E" \u2192**
14862
14864
  \u2192 \u7ACB\u5373\u8C03\u7528 fetch_geo("GSE12345") \u83B7\u53D6\u5143\u6570\u636E\u548C\u4E0B\u8F7D\u4EE3\u7801\uFF0C\u65E0\u9700\u8BA9\u7528\u6237\u624B\u52A8\u4E0B\u8F7D`;
@@ -15149,7 +15151,7 @@ var SKILL_ROUTES = [
15149
15151
  id: "bulk-rnaseq-counts-to-de-deseq2",
15150
15152
  name: "DESeq2 \u5DEE\u5F02\u8868\u8FBE\u5206\u6790",
15151
15153
  category: "\u8F6C\u5F55\u7EC4",
15152
- tag: "workflow",
15154
+ tag: "builtin",
15153
15155
  keywords: [
15154
15156
  // exact tool names
15155
15157
  "deseq2",
@@ -15184,7 +15186,7 @@ var SKILL_ROUTES = [
15184
15186
  id: "bulk-omics-clustering",
15185
15187
  name: "\u6837\u672C / \u7279\u5F81\u805A\u7C7B",
15186
15188
  category: "\u8F6C\u5F55\u7EC4",
15187
- tag: "workflow",
15189
+ tag: "builtin",
15188
15190
  keywords: [
15189
15191
  "wgcna\u805A\u7C7B",
15190
15192
  "\u5C42\u6B21\u805A\u7C7B",
@@ -15209,7 +15211,7 @@ var SKILL_ROUTES = [
15209
15211
  id: "scrnaseq-scanpy-core-analysis",
15210
15212
  name: "scRNA-seq (Scanpy / Python)",
15211
15213
  category: "\u5355\u7EC6\u80DE",
15212
- tag: "workflow",
15214
+ tag: "builtin",
15213
15215
  keywords: [
15214
15216
  "scanpy",
15215
15217
  "scrna-seq",
@@ -15234,7 +15236,7 @@ var SKILL_ROUTES = [
15234
15236
  id: "scrnaseq-seurat-core-analysis",
15235
15237
  name: "scRNA-seq (Seurat / R)",
15236
15238
  category: "\u5355\u7EC6\u80DE",
15237
- tag: "workflow",
15239
+ tag: "builtin",
15238
15240
  keywords: [
15239
15241
  "seurat",
15240
15242
  "r\u8BED\u8A00\u5355\u7EC6\u80DE",
@@ -15252,7 +15254,7 @@ var SKILL_ROUTES = [
15252
15254
  id: "spatial-transcriptomics",
15253
15255
  name: "\u7A7A\u95F4\u8F6C\u5F55\u7EC4",
15254
15256
  category: "\u5355\u7EC6\u80DE",
15255
- tag: "workflow",
15257
+ tag: "builtin",
15256
15258
  keywords: [
15257
15259
  "\u7A7A\u95F4\u8F6C\u5F55\u7EC4",
15258
15260
  "spatial transcriptomics",
@@ -15274,7 +15276,7 @@ var SKILL_ROUTES = [
15274
15276
  id: "coexpression-network",
15275
15277
  name: "WGCNA \u5171\u8868\u8FBE\u7F51\u7EDC",
15276
15278
  category: "\u8F6C\u5F55\u7EC4",
15277
- tag: "workflow",
15279
+ tag: "builtin",
15278
15280
  keywords: [
15279
15281
  "wgcna",
15280
15282
  "\u5171\u8868\u8FBE\u7F51\u7EDC",
@@ -15293,7 +15295,7 @@ var SKILL_ROUTES = [
15293
15295
  id: "functional-enrichment-from-degs",
15294
15296
  name: "GO / KEGG / GSEA \u5BCC\u96C6\u5206\u6790",
15295
15297
  category: "\u8F6C\u5F55\u7EC4",
15296
- tag: "workflow",
15298
+ tag: "builtin",
15297
15299
  keywords: [
15298
15300
  "\u5BCC\u96C6\u5206\u6790",
15299
15301
  "go\u5206\u6790",
@@ -15325,7 +15327,7 @@ var SKILL_ROUTES = [
15325
15327
  id: "grn-pyscenic",
15326
15328
  name: "pySCENIC \u57FA\u56E0\u8C03\u63A7\u7F51\u7EDC",
15327
15329
  category: "\u5355\u7EC6\u80DE",
15328
- tag: "workflow",
15330
+ tag: "builtin",
15329
15331
  keywords: [
15330
15332
  "pyscenic",
15331
15333
  "scenic",
@@ -15346,7 +15348,7 @@ var SKILL_ROUTES = [
15346
15348
  id: "genetic-variant-annotation",
15347
15349
  name: "\u9057\u4F20\u53D8\u5F02\u6CE8\u91CA",
15348
15350
  category: "\u57FA\u56E0\u7EC4",
15349
- tag: "workflow",
15351
+ tag: "builtin",
15350
15352
  keywords: [
15351
15353
  "\u53D8\u5F02\u6CE8\u91CA",
15352
15354
  "variant annotation",
@@ -15371,7 +15373,7 @@ var SKILL_ROUTES = [
15371
15373
  id: "gwas-to-function-twas",
15372
15374
  name: "GWAS \u2192 TWAS \u529F\u80FD\u89E3\u6790",
15373
15375
  category: "\u57FA\u56E0\u7EC4",
15374
- tag: "workflow",
15376
+ tag: "builtin",
15375
15377
  keywords: [
15376
15378
  "gwas\u5206\u6790",
15377
15379
  "twas",
@@ -15394,7 +15396,7 @@ var SKILL_ROUTES = [
15394
15396
  id: "mendelian-randomization-twosamplemr",
15395
15397
  name: "\u5B5F\u5FB7\u5C14\u968F\u673A\u5316 (MR)",
15396
15398
  category: "\u7EDF\u8BA1",
15397
- tag: "workflow",
15399
+ tag: "builtin",
15398
15400
  keywords: [
15399
15401
  "\u5B5F\u5FB7\u5C14\u968F\u673A\u5316",
15400
15402
  "mendelian randomization",
@@ -15415,7 +15417,7 @@ var SKILL_ROUTES = [
15415
15417
  id: "polygenic-risk-score-prs-catalog",
15416
15418
  name: "PRS \u591A\u57FA\u56E0\u98CE\u9669\u8BC4\u5206",
15417
15419
  category: "\u57FA\u56E0\u7EC4",
15418
- tag: "workflow",
15420
+ tag: "builtin",
15419
15421
  keywords: [
15420
15422
  "prs\u8BC4\u5206",
15421
15423
  "polygenic risk score",
@@ -15433,7 +15435,7 @@ var SKILL_ROUTES = [
15433
15435
  id: "pooled-crispr-screens",
15434
15436
  name: "CRISPR \u6587\u5E93\u7B5B\u9009 (MAGeCK/BAGEL2)",
15435
15437
  category: "\u57FA\u56E0\u7EC4",
15436
- tag: "workflow",
15438
+ tag: "builtin",
15437
15439
  keywords: [
15438
15440
  "crispr\u6587\u5E93\u7B5B\u9009",
15439
15441
  "crispr screen",
@@ -15455,7 +15457,7 @@ var SKILL_ROUTES = [
15455
15457
  id: "chip-atlas-peak-enrichment",
15456
15458
  name: "ChIP-seq \u5CF0\u503C\u5BCC\u96C6 (ChIP-Atlas)",
15457
15459
  category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
15458
- tag: "workflow",
15460
+ tag: "builtin",
15459
15461
  keywords: [
15460
15462
  "chip-atlas",
15461
15463
  "chip-seq\u5CF0\u503C\u5BCC\u96C6",
@@ -15474,7 +15476,7 @@ var SKILL_ROUTES = [
15474
15476
  id: "chip-atlas-diff-analysis",
15475
15477
  name: "ChIP-seq \u5DEE\u5F02\u7ED3\u5408\u5206\u6790",
15476
15478
  category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
15477
- tag: "workflow",
15479
+ tag: "builtin",
15478
15480
  keywords: [
15479
15481
  "chip\u5DEE\u5F02\u5206\u6790",
15480
15482
  "differential binding",
@@ -15491,7 +15493,7 @@ var SKILL_ROUTES = [
15491
15493
  id: "chip-atlas-target-genes",
15492
15494
  name: "ChIP-seq \u9776\u57FA\u56E0\u9274\u5B9A",
15493
15495
  category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
15494
- tag: "workflow",
15496
+ tag: "builtin",
15495
15497
  keywords: [
15496
15498
  "chip\u9776\u57FA\u56E0",
15497
15499
  "chip target gene",
@@ -15511,7 +15513,7 @@ var SKILL_ROUTES = [
15511
15513
  id: "clinicaltrials-landscape",
15512
15514
  name: "\u4E34\u5E8A\u8BD5\u9A8C\u683C\u5C40\u5206\u6790",
15513
15515
  category: "\u4E34\u5E8A",
15514
- tag: "workflow",
15516
+ tag: "builtin",
15515
15517
  keywords: [
15516
15518
  "clinicaltrials\u5206\u6790",
15517
15519
  "clinical trial landscape",
@@ -15529,7 +15531,7 @@ var SKILL_ROUTES = [
15529
15531
  id: "literature-preclinical",
15530
15532
  name: "\u4E34\u5E8A\u524D\u6587\u732E\u7CFB\u7EDF\u63D0\u53D6",
15531
15533
  category: "\u6587\u732E",
15532
- tag: "workflow",
15534
+ tag: "builtin",
15533
15535
  keywords: [
15534
15536
  "\u4E34\u5E8A\u524D\u6587\u732E",
15535
15537
  "preclinical literature",
@@ -15547,7 +15549,7 @@ var SKILL_ROUTES = [
15547
15549
  id: "experimental-design-statistics",
15548
15550
  name: "\u5B9E\u9A8C\u8BBE\u8BA1\u4E0E\u7EDF\u8BA1\u68C0\u9A8C",
15549
15551
  category: "\u7EDF\u8BA1",
15550
- tag: "workflow",
15552
+ tag: "builtin",
15551
15553
  keywords: [
15552
15554
  "\u6837\u672C\u91CF\u8BA1\u7B97",
15553
15555
  "\u7EDF\u8BA1\u68C0\u9A8C\u9009\u62E9",
@@ -15573,7 +15575,7 @@ var SKILL_ROUTES = [
15573
15575
  id: "lasso-biomarker-panel",
15574
15576
  name: "LASSO \u751F\u7269\u6807\u5FD7\u7269\u9762\u677F\u7B5B\u9009",
15575
15577
  category: "\u7EDF\u8BA1",
15576
- tag: "workflow",
15578
+ tag: "builtin",
15577
15579
  keywords: [
15578
15580
  "lasso\u56DE\u5F52\u7B5B\u9009",
15579
15581
  "lasso\u751F\u7269\u6807\u5FD7\u7269",
@@ -15594,7 +15596,7 @@ var SKILL_ROUTES = [
15594
15596
  id: "pcr-primer-design",
15595
15597
  name: "PCR / qPCR \u5F15\u7269\u8BBE\u8BA1",
15596
15598
  category: "\u5206\u5B50\u751F\u7269\u5B66",
15597
- tag: "workflow",
15599
+ tag: "builtin",
15598
15600
  keywords: [
15599
15601
  "\u5F15\u7269\u8BBE\u8BA1",
15600
15602
  "primer design",
@@ -15616,7 +15618,7 @@ var SKILL_ROUTES = [
15616
15618
  id: "survival-analysis-clinical",
15617
15619
  name: "\u4E34\u5E8A\u751F\u5B58\u5206\u6790 (KM + Cox)",
15618
15620
  category: "\u4E34\u5E8A",
15619
- tag: "workflow",
15621
+ tag: "builtin",
15620
15622
  keywords: [
15621
15623
  // exact method names
15622
15624
  "kaplan-meier",
@@ -15663,12 +15665,12 @@ var SKILL_ROUTES = [
15663
15665
  "\u7A81\u53D8\u4E0E\u9884\u540E"
15664
15666
  ]
15665
15667
  },
15666
- // ── OpenClaw Key Skills ────────────────────────────────────────────────────────
15668
+ // ── Extended Skills (key routable entries) ───────────────────────────────────
15667
15669
  {
15668
15670
  id: "pubmed-search",
15669
15671
  name: "PubMed \u6587\u732E\u68C0\u7D22",
15670
15672
  category: "\u6587\u732E",
15671
- tag: "skill",
15673
+ tag: "builtin",
15672
15674
  keywords: [
15673
15675
  "pubmed\u68C0\u7D22",
15674
15676
  "pubmed\u641C\u7D22",
@@ -15683,14 +15685,14 @@ var SKILL_ROUTES = [
15683
15685
  id: "arxiv-search",
15684
15686
  name: "arXiv \u9884\u5370\u672C\u68C0\u7D22",
15685
15687
  category: "\u6587\u732E",
15686
- tag: "skill",
15688
+ tag: "builtin",
15687
15689
  keywords: ["arxiv\u68C0\u7D22", "arxiv\u641C\u7D22", "\u9884\u5370\u672C\u68C0\u7D22", "\u9884\u5370\u672C\u8BBA\u6587", "arxiv\u6587\u732E"]
15688
15690
  },
15689
15691
  {
15690
15692
  id: "alphafold",
15691
15693
  name: "AlphaFold \u86CB\u767D\u8D28\u7ED3\u6784\u9884\u6D4B",
15692
15694
  category: "\u7ED3\u6784\u751F\u7269\u5B66",
15693
- tag: "skill",
15695
+ tag: "builtin",
15694
15696
  keywords: [
15695
15697
  "alphafold\u7ED3\u6784\u9884\u6D4B",
15696
15698
  "alphafold\u8FD0\u884C",
@@ -15704,7 +15706,7 @@ var SKILL_ROUTES = [
15704
15706
  id: "alphafold-database",
15705
15707
  name: "AlphaFold \u6570\u636E\u5E93\u67E5\u8BE2",
15706
15708
  category: "\u7ED3\u6784\u751F\u7269\u5B66",
15707
- tag: "skill",
15709
+ tag: "builtin",
15708
15710
  keywords: [
15709
15711
  "alphafold\u6570\u636E\u5E93",
15710
15712
  "alphafold db",
@@ -15717,7 +15719,7 @@ var SKILL_ROUTES = [
15717
15719
  id: "bindcraft",
15718
15720
  name: "BindCraft \u86CB\u767D\u8D28\u7ED3\u5408\u4F53\u8BBE\u8BA1",
15719
15721
  category: "\u7ED3\u6784\u751F\u7269\u5B66",
15720
- tag: "skill",
15722
+ tag: "builtin",
15721
15723
  keywords: [
15722
15724
  "bindcraft",
15723
15725
  "\u7ED3\u5408\u4F53\u8BBE\u8BA1",
@@ -15731,7 +15733,7 @@ var SKILL_ROUTES = [
15731
15733
  id: "anndata",
15732
15734
  name: "AnnData \u5355\u7EC6\u80DE\u6570\u636E\u64CD\u4F5C",
15733
15735
  category: "\u5355\u7EC6\u80DE",
15734
- tag: "skill",
15736
+ tag: "builtin",
15735
15737
  keywords: [
15736
15738
  "anndata\u64CD\u4F5C",
15737
15739
  "h5ad\u6587\u4EF6\u5904\u7406",
@@ -15745,7 +15747,7 @@ var SKILL_ROUTES = [
15745
15747
  id: "cellagent-annotation",
15746
15748
  name: "CellAgent \u7EC6\u80DE\u7C7B\u578B\u81EA\u52A8\u6CE8\u91CA",
15747
15749
  category: "\u5355\u7EC6\u80DE",
15748
- tag: "skill",
15750
+ tag: "builtin",
15749
15751
  keywords: [
15750
15752
  "\u7EC6\u80DE\u7C7B\u578B\u6CE8\u91CA",
15751
15753
  "cell type annotation",
@@ -15759,7 +15761,7 @@ var SKILL_ROUTES = [
15759
15761
  id: "scvi-tools",
15760
15762
  name: "scVI \u5355\u7EC6\u80DE\u6DF1\u5EA6\u5B66\u4E60",
15761
15763
  category: "\u5355\u7EC6\u80DE",
15762
- tag: "skill",
15764
+ tag: "builtin",
15763
15765
  keywords: [
15764
15766
  "scvi-tools",
15765
15767
  "scvi\u6A21\u578B",
@@ -15773,7 +15775,7 @@ var SKILL_ROUTES = [
15773
15775
  id: "agentd-drug-discovery",
15774
15776
  name: "\u836F\u7269\u53D1\u73B0 Agent",
15775
15777
  category: "\u836F\u7269",
15776
- tag: "skill",
15778
+ tag: "builtin",
15777
15779
  keywords: [
15778
15780
  "\u836F\u7269\u53D1\u73B0\u6D41\u7A0B",
15779
15781
  "drug discovery",
@@ -15787,7 +15789,7 @@ var SKILL_ROUTES = [
15787
15789
  id: "chembl-database",
15788
15790
  name: "ChEMBL \u5316\u5408\u7269\u6D3B\u6027\u6570\u636E\u5E93",
15789
15791
  category: "\u836F\u7269",
15790
- tag: "skill",
15792
+ tag: "builtin",
15791
15793
  keywords: [
15792
15794
  "chembl\u67E5\u8BE2",
15793
15795
  "chembl\u6570\u636E\u5E93",
@@ -15801,7 +15803,7 @@ var SKILL_ROUTES = [
15801
15803
  id: "rdkit",
15802
15804
  name: "RDKit \u5316\u5B66\u4FE1\u606F\u5B66",
15803
15805
  category: "\u836F\u7269",
15804
- tag: "skill",
15806
+ tag: "builtin",
15805
15807
  keywords: [
15806
15808
  "rdkit",
15807
15809
  "\u5316\u5B66\u4FE1\u606F\u5B66",
@@ -15816,7 +15818,7 @@ var SKILL_ROUTES = [
15816
15818
  id: "bio-variant-calling",
15817
15819
  name: "\u53D8\u5F02\u68C0\u6D4B\u6D41\u7A0B (GATK/Mutect2)",
15818
15820
  category: "\u57FA\u56E0\u7EC4",
15819
- tag: "skill",
15821
+ tag: "builtin",
15820
15822
  keywords: [
15821
15823
  "\u53D8\u5F02\u68C0\u6D4B\u6D41\u7A0B",
15822
15824
  "variant calling\u6D41\u7A0B",
@@ -15831,7 +15833,7 @@ var SKILL_ROUTES = [
15831
15833
  id: "antibody-design-agent",
15832
15834
  name: "\u6297\u4F53\u8BBE\u8BA1 Agent",
15833
15835
  category: "\u6297\u4F53",
15834
- tag: "skill",
15836
+ tag: "builtin",
15835
15837
  keywords: [
15836
15838
  "\u6297\u4F53\u8BBE\u8BA1",
15837
15839
  "antibody design",
@@ -15845,7 +15847,7 @@ var SKILL_ROUTES = [
15845
15847
  id: "armored-cart-design-agent",
15846
15848
  name: "Armored CAR-T \u8BBE\u8BA1",
15847
15849
  category: "\u6297\u4F53",
15848
- tag: "skill",
15850
+ tag: "builtin",
15849
15851
  keywords: [
15850
15852
  "car-t\u8BBE\u8BA1",
15851
15853
  "cart\u7EC6\u80DE\u8BBE\u8BA1",
@@ -16001,7 +16003,7 @@ function clearCheckpoints(sessionId) {
16001
16003
 
16002
16004
  // src/index.ts
16003
16005
  var import_fs7 = require("fs");
16004
- var VERSION2 = "2.4.2";
16006
+ var VERSION2 = "2.4.4";
16005
16007
  var SKILLHUB_HUBS = {
16006
16008
  bgi: { label: "BGI\u5185\u7F51", apiBase: "https://clawhub.ai", backend: "clawhub" },
16007
16009
  clawhub: { label: "clawhub.ai", apiBase: "https://clawhub.ai", backend: "clawhub" },
@@ -16151,8 +16153,8 @@ function installBundledData() {
16151
16153
  const installedDataVersion = (0, import_fs6.existsSync)(DATA_VERSION_FILE) ? (0, import_fs6.readFileSync)(DATA_VERSION_FILE, "utf8").trim() : "";
16152
16154
  const needsUpdate = installedDataVersion !== VERSION2;
16153
16155
  const targets = [
16154
- { src: (0, import_path6.join)(bundledData, "workflows"), dest: WORKFLOWS_DIR, name: "Skills (\u751F\u4FE1\u5DE5\u4F5C\u6D41)" },
16155
- { src: (0, import_path6.join)(bundledData, "skills"), dest: SKILLS_DIR, name: "Skills (\u533B\u5B66\u4E13\u79D1)" },
16156
+ { src: (0, import_path6.join)(bundledData, "workflows"), dest: WORKFLOWS_DIR, name: "Skills (\u5206\u6790\u7C7B)" },
16157
+ { src: (0, import_path6.join)(bundledData, "skills"), dest: SKILLS_DIR, name: "Skills (\u6269\u5C55\u7C7B)" },
16156
16158
  { src: (0, import_path6.join)(bundledData, "tools"), dest: TOOLS_DIR, name: "\u5DE5\u5177" }
16157
16159
  ];
16158
16160
  let installed = false;
@@ -16231,7 +16233,7 @@ function printHelp() {
16231
16233
  console.log(` ${source_default.cyan("!<\u547D\u4EE4>")} \u7ED5\u8FC7 AI \u76F4\u63A5\u6267\u884C Shell \u547D\u4EE4\uFF08\u5B9E\u65F6\u8F93\u51FA\uFF09`);
16232
16234
  console.log(source_default.dim(" \u793A\u4F8B: !ls -la !Rscript analysis.R !python script.py !samtools view -h a.bam"));
16233
16235
  console.log();
16234
- console.log(source_default.bold.cyan("\u2500\u2500\u2500 \u5DE5\u4F5C\u6D41\u5411\u5BFC \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
16236
+ console.log(source_default.bold.cyan("\u2500\u2500\u2500 Skill \u5411\u5BFC \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
16235
16237
  console.log(` ${source_default.cyan("/run")} <skill-id> \u4EA4\u4E92\u5F0F\u53C2\u6570\u5411\u5BFC\uFF0C\u81EA\u52A8\u751F\u6210\u5E76\u6267\u884C\u5206\u6790\u811A\u672C`);
16236
16238
  console.log(` ${source_default.cyan("/check-env")} [id] \u68C0\u6D4B Skill \u6240\u9700 R/Python \u5305\u662F\u5426\u5DF2\u5B89\u88C5`);
16237
16239
  console.log(` ${source_default.cyan("/search")} <\u5173\u952E\u8BCD> \u5728 SkillHub \u641C\u7D22\u5E76\u4E0B\u8F7D\u6280\u80FD ${source_default.dim("[--hub=bgi|clawhub|tencent]")}`);
@@ -16976,7 +16978,7 @@ async function handleCommand(input, rl, history, thinkMode, injectedSkills) {
16976
16978
  }
16977
16979
  break;
16978
16980
  }
16979
- // ── /run workflow wizard ─────────────────────────────────────────────────
16981
+ // ── /run skill wizard ────────────────────────────────────────────────────
16980
16982
  case "run": {
16981
16983
  const targetId = arg;
16982
16984
  if (!targetId) {
@@ -17017,7 +17019,7 @@ async function handleCommand(input, rl, history, thinkMode, injectedSkills) {
17017
17019
  if (ans.trim()) answers[q2] = ans.trim();
17018
17020
  }
17019
17021
  const paramSummary = Object.entries(answers).map(([k2, v2]) => `- ${k2}: ${v2}`).join("\n");
17020
- const runPrompt = `\u8BF7\u6839\u636E\u4EE5\u4E0B\u53C2\u6570\uFF0C\u4F7F\u7528 ${skillName || runMatch.id} \u5DE5\u4F5C\u6D41\u751F\u6210\u5B8C\u6574\u7684\u5206\u6790\u811A\u672C\u5E76\u7ACB\u5373\u6267\u884C\uFF1A
17022
+ const runPrompt = `\u8BF7\u6839\u636E\u4EE5\u4E0B\u53C2\u6570\uFF0C\u4F7F\u7528 ${skillName || runMatch.id} \u6280\u80FD\u751F\u6210\u5B8C\u6574\u7684\u5206\u6790\u811A\u672C\u5E76\u7ACB\u5373\u6267\u884C\uFF1A
17021
17023
 
17022
17024
  \u7528\u6237\u63D0\u4F9B\u7684\u53C2\u6570\uFF1A
17023
17025
  ${paramSummary}
@@ -17835,8 +17837,9 @@ async function main() {
17835
17837
  break;
17836
17838
  }
17837
17839
  if (exiting) break;
17838
- const trimmed = input.trim();
17839
- if (!trimmed) continue;
17840
+ const rawTrimmed = input.trim();
17841
+ if (!rawTrimmed) continue;
17842
+ const trimmed = rawTrimmed.startsWith("\\") ? "/" + rawTrimmed.slice(1) : rawTrimmed;
17840
17843
  if (["exit", "quit", "q", "/exit", "/quit"].includes(trimmed.toLowerCase())) {
17841
17844
  await exitWithReport();
17842
17845
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgicli/bgicli",
3
- "version": "2.4.2",
3
+ "version": "2.4.4",
4
4
  "description": "BGI CLI — Bioinformatics AI terminal for Chinese researchers (百炼/DeepSeek/Kimi/Qwen)",
5
5
  "bin": {
6
6
  "bgi": "dist/bgi.js"