@bgicli/bgicli 2.4.3 → 2.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -41
- package/dist/bgi.js +195 -79
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**BGI CLI** 是面向中国生物学研究者的 AI 终端工具,开箱即用,无需额外配置。
|
|
4
4
|
|
|
5
|
-
- ✅ **开箱即用** —
|
|
6
|
-
- ✅ **内置
|
|
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
|
-
|
|
18
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
33
|
-
|
|
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
|
-
|
|
|
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` |
|
|
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
|
-
|
|
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
|
-
###
|
|
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/ —
|
|
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
|
|
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
|
|
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\
|
|
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
|
|
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,53 @@ 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
|
|
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
|
-
|
|
14621
|
-
|
|
14622
|
-
|
|
14623
|
-
|
|
14620
|
+
## \u26A1 SKILL-FIRST PROTOCOL\uFF08\u5F3A\u5236\u6267\u884C\uFF0C\u4E0D\u53EF\u8DF3\u8FC7\uFF09
|
|
14621
|
+
|
|
14622
|
+
\u5F53\u7528\u6237\u63D0\u51FA\u4EFB\u4F55\u751F\u7269\u4FE1\u606F\u5B66 / \u836F\u7269\u53D1\u73B0 / \u4E34\u5E8A\u5206\u6790\u4EFB\u52A1\u65F6\uFF0C**\u5FC5\u987B\u4E25\u683C\u6309\u4EE5\u4E0B\u987A\u5E8F\u6267\u884C\uFF0C\u7981\u6B62\u4E71\u5E8F**\uFF1A
|
|
14623
|
+
|
|
14624
|
+
**\u7B2C\u4E00\u6B65 \u2014 \u8BC6\u522B\u6280\u80FD\uFF08\u5728\u8F93\u51FA\u4EFB\u4F55\u6B63\u6587\u524D\uFF09**
|
|
14625
|
+
\u626B\u63CF\u4E0B\u65B9 Skill Library\uFF0C\u627E\u51FA\u6240\u6709\u4E0E\u7528\u6237\u4EFB\u52A1\u76F8\u5173\u7684\u6280\u80FD\u3002\u5982\u679C Skill Library \u6CA1\u6709\u7CBE\u786E\u5339\u914D\uFF0C\u4E5F\u5E94\u641C\u7D22 Extended Skills \u76EE\u5F55\u3002
|
|
14626
|
+
|
|
14627
|
+
**\u7B2C\u4E8C\u6B65 \u2014 \u5C55\u793A\u5019\u9009\u6280\u80FD\u5E76\u8BF7\u7528\u6237\u786E\u8BA4**
|
|
14628
|
+
\u7528\u5982\u4E0B\u683C\u5F0F\uFF08\u4E2D\u6587\uFF09\u544A\u77E5\u7528\u6237\uFF0C**\u4E0D\u8981\u5148\u505A\u5176\u4ED6\u4E8B**\uFF1A
|
|
14629
|
+
> \u{1F50D} \u68C0\u6D4B\u5230\u4EE5\u4E0B\u76F8\u5173\u6280\u80FD\uFF1A
|
|
14630
|
+
>
|
|
14631
|
+
> \u2022 \`skill-id-1\` \u2014 **[\u6280\u80FD\u540D\u79F0]**\uFF1A[\u4E00\u53E5\u8BDD\u8BF4\u660E\u4E3A\u4F55\u5339\u914D\u8BE5\u4EFB\u52A1]
|
|
14632
|
+
> \u2022 \`skill-id-2\` \u2014 **[\u6280\u80FD\u540D\u79F0]**\uFF1A[\u4E00\u53E5\u8BDD\u8BF4\u660E]
|
|
14633
|
+
>
|
|
14634
|
+
> \u662F\u5426\u6FC0\u6D3B\u8FD9\u4E9B\u6280\u80FD\u5F00\u59CB\u5206\u6790\uFF1F
|
|
14635
|
+
|
|
14636
|
+
**\u7B2C\u4E09\u6B65 \u2014 \u6FC0\u6D3B\u6280\u80FD\uFF0C\u8BFB\u53D6 SKILL.md**
|
|
14637
|
+
\u7528\u6237\u786E\u8BA4\u540E\u7ACB\u5373\u6267\u884C\uFF1A\`cat ${WORKFLOWS_DIR}/<skill-id>/SKILL.md\`
|
|
14638
|
+
\u4E25\u683C\u6309\u7167 SKILL.md \u7684\u6BCF\u4E00\u6B65\u6267\u884C\uFF0C\u4E0D\u8DF3\u8FC7\u3001\u4E0D\u81EA\u884C\u53D1\u6325\u3002
|
|
14639
|
+
|
|
14640
|
+
**\u7B2C\u56DB\u6B65 \u2014 \u53EA\u95EE\u771F\u6B63\u5FC5\u8981\u7684\u6570\u636E\u95EE\u9898**
|
|
14641
|
+
SKILL.md \u8BFB\u5B8C\u540E\uFF0C\u53EA\u8BE2\u95EE\u6267\u884C\u6240\u9700\u7684\u5173\u952E\u4FE1\u606F\uFF08\u5982\u672C\u5730\u6587\u4EF6\u8DEF\u5F84\u3001\u6837\u672C\u5206\u7EC4\u540D\uFF09\u3002
|
|
14642
|
+
|
|
14643
|
+
\u274C **\u7EDD\u5BF9\u7981\u6B62**\uFF1A\u5728\u5B8C\u6210\u7B2C\u4E00\u6B65\uFF08\u8BC6\u522B\u6280\u80FD\uFF09\u4E4B\u524D\uFF0C\u8BE2\u95EE\u901A\u7528\u6570\u636E\u6536\u96C6\u95EE\u9898\u3002
|
|
14644
|
+
\u4F8B\u5982\u4E0B\u5217\u63D0\u95EE\u65B9\u5F0F\u662F**\u9519\u8BEF\u7684**\uFF0C\u5FC5\u987B\u907F\u514D\uFF1A
|
|
14645
|
+
- "\u60A8\u6709 GEO \u6570\u636E\u96C6\u5417\uFF1F"
|
|
14646
|
+
- "\u6570\u636E\u6765\u6E90\u662F\u4EC0\u4E48\uFF1F"
|
|
14647
|
+
- "\u60A8\u7684\u6570\u636E\u683C\u5F0F\u662F\u4EC0\u4E48\uFF1F"
|
|
14648
|
+
- "\u8BF7\u63D0\u4F9B\u4EE5\u4E0B\u4FE1\u606F\uFF1A1. \u6570\u636E\u6765\u6E90 2. \u6570\u636E\u5185\u5BB9 ..."
|
|
14649
|
+
|
|
14650
|
+
\u5982\u679C\u5B9E\u5728\u627E\u4E0D\u5230\u4EFB\u4F55\u5339\u914D\u6280\u80FD\uFF0C\u624D\u5141\u8BB8\u63D0\u95EE\u5E76\u8BF4\u660E\u7406\u7531\u3002
|
|
14624
14651
|
|
|
14625
14652
|
---
|
|
14626
14653
|
|
|
14627
|
-
##
|
|
14654
|
+
## Skill Library (22 Bioinformatics Skills)
|
|
14628
14655
|
|
|
14629
|
-
All
|
|
14656
|
+
All skills are at: **${WORKFLOWS_DIR}**
|
|
14630
14657
|
|
|
14631
|
-
For any
|
|
14658
|
+
For any skill, read its guide first:
|
|
14632
14659
|
\`\`\`bash
|
|
14633
|
-
cat ${WORKFLOWS_DIR}/<
|
|
14660
|
+
cat ${WORKFLOWS_DIR}/<skill-id>/SKILL.md
|
|
14634
14661
|
\`\`\`
|
|
14635
14662
|
|
|
14636
14663
|
### \u{1F9EC} Transcriptomics
|
|
@@ -14677,7 +14704,7 @@ cat ${WORKFLOWS_DIR}/<workflow-id>/SKILL.md
|
|
|
14677
14704
|
|
|
14678
14705
|
---
|
|
14679
14706
|
|
|
14680
|
-
## Molecular Biology
|
|
14707
|
+
## Molecular Biology Skills
|
|
14681
14708
|
|
|
14682
14709
|
Python tools are at: **${TOOLS_DIR}**
|
|
14683
14710
|
|
|
@@ -14710,16 +14737,16 @@ ${dbSection ?? "\uFF08\u6682\u672A\u6CE8\u518C\u4EFB\u4F55\u6570\u636E\u5E93\u30
|
|
|
14710
14737
|
|
|
14711
14738
|
---
|
|
14712
14739
|
|
|
14713
|
-
##
|
|
14740
|
+
## Extended Skills (979\u4E2A)
|
|
14714
14741
|
|
|
14715
|
-
\u6280\u80FD\
|
|
14742
|
+
\u66F4\u591A\u5185\u7F6E\u6280\u80FD\u4F4D\u4E8E: **${SKILLS_DIR}**
|
|
14716
14743
|
|
|
14717
14744
|
\u6BCF\u4E2A\u6280\u80FD\u76EE\u5F55\u5305\u542B\u4E00\u4E2A \`SKILL.md\` \u6587\u4EF6\uFF0C\u8BFB\u53D6\u65B9\u5F0F:
|
|
14718
14745
|
\`\`\`bash
|
|
14719
14746
|
cat ${SKILLS_DIR}/<skill-id>/SKILL.md
|
|
14720
14747
|
\`\`\`
|
|
14721
14748
|
|
|
14722
|
-
**\
|
|
14749
|
+
**\u6DB5\u76D6\u9886\u57DF**\uFF08\u7528\u6237\u901A\u8FC7 /sk \u547D\u4EE4\u52A0\u8F7D\u540E\u81EA\u52A8\u6CE8\u5165\u4E0A\u4E0B\u6587\uFF09:
|
|
14723
14750
|
- \u6587\u732E\u68C0\u7D22: pubmed-search, arxiv-search, bgpt-paper-search
|
|
14724
14751
|
- \u7ED3\u6784\u751F\u7269\u5B66: alphafold, alphafold-database, bindcraft, binder-design
|
|
14725
14752
|
- \u5355\u7EC6\u80DE: anndata, cellagent-annotation, scvi-tools
|
|
@@ -14728,7 +14755,9 @@ cat ${SKILLS_DIR}/<skill-id>/SKILL.md
|
|
|
14728
14755
|
- \u6297\u4F53\u8BBE\u8BA1: antibody-design-agent, armored-cart-design-agent
|
|
14729
14756
|
- \u4E34\u5E8A: clinical-*, ehr-fhir-integration, autonomous-oncology-agent
|
|
14730
14757
|
|
|
14731
|
-
\
|
|
14758
|
+
\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
|
|
14759
|
+
|
|
14760
|
+
\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
14761
|
|
|
14733
14762
|
---
|
|
14734
14763
|
|
|
@@ -14819,9 +14848,9 @@ message(sprintf("\u603B\u57FA\u56E0\u6570: %d | \u663E\u8457 DEG: %d (\u4E0A\u8C
|
|
|
14819
14848
|
## Script Execution Rules
|
|
14820
14849
|
|
|
14821
14850
|
\u{1F6A8} **\u5173\u952E\u89C4\u5219\uFF1A**
|
|
14822
|
-
1. **\u4F18\u5148\u4F7F\u7528\
|
|
14851
|
+
1. **\u4F18\u5148\u4F7F\u7528\u6280\u80FD\u5185\u7F6E\u811A\u672C**\uFF0C\u4E0D\u8981\u4ECE\u96F6\u5199\u4EE3\u7801
|
|
14823
14852
|
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\
|
|
14853
|
+
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
14854
|
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
14855
|
|
|
14827
14856
|
---
|
|
@@ -14838,25 +14867,25 @@ message(sprintf("\u603B\u57FA\u56E0\u6570: %d | \u663E\u8457 DEG: %d (\u4E0A\u8C
|
|
|
14838
14867
|
\u4F7F\u7528 HPC \u5DE5\u5177\u63D0\u4EA4 AlphaFold \u4EFB\u52A1
|
|
14839
14868
|
|
|
14840
14869
|
**\u7528\u6237\u8BF4 "\u627E DEG \u7684\u901A\u8DEF" \u2192**
|
|
14841
|
-
\u4F7F\u7528 functional-enrichment-from-degs \
|
|
14870
|
+
\u4F7F\u7528 functional-enrichment-from-degs \u6280\u80FD
|
|
14842
14871
|
|
|
14843
14872
|
**\u7528\u6237\u8BF4 "\u8BBE\u8BA1 CRISPR guide RNA" \u2192**
|
|
14844
14873
|
\u4F7F\u7528 molecular_biology.py \u7684 design_crispr_knockout_guides()
|
|
14845
14874
|
|
|
14846
14875
|
**\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 \
|
|
14876
|
+
\u2192 \u5DEE\u5F02\u8868\u8FBE\u5206\u6790\uFF08DESeq2\uFF09\uFF0C\u4F7F\u7528 bulk-rnaseq-counts-to-de-deseq2 \u6280\u80FD
|
|
14848
14877
|
|
|
14849
14878
|
**\u7528\u6237\u8BF4 "\u5148\u505A\u5DEE\u5F02\u8868\u8FBE\uFF0C\u518D\u505A\u5BCC\u96C6\u5206\u6790" \u2192**
|
|
14850
14879
|
\u2192 \u8BC6\u522B\u4E3A\u591A\u4EFB\u52A1\uFF1A\u4F9D\u6B21\u6267\u884C bulk-rnaseq-counts-to-de-deseq2 + functional-enrichment-from-degs
|
|
14851
14880
|
|
|
14852
14881
|
**\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 \
|
|
14882
|
+
\u2192 \u529F\u80FD\u5BCC\u96C6\u5206\u6790\uFF0C\u4F7F\u7528 functional-enrichment-from-degs \u6280\u80FD
|
|
14854
14883
|
|
|
14855
14884
|
**\u7528\u6237\u8BF4 "\u5206\u6790\u5355\u7EC6\u80DE\u6570\u636E" / "10X\u6570\u636E\u5206\u6790" \u2192**
|
|
14856
14885
|
\u5148\u95EE\uFF1APython \u8FD8\u662F R\uFF1F\u2192 Scanpy \u6216 Seurat
|
|
14857
14886
|
|
|
14858
14887
|
**\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 \
|
|
14888
|
+
\u2192 \u751F\u5B58\u5206\u6790\uFF0C\u4F7F\u7528 survival-analysis-clinical \u6280\u80FD
|
|
14860
14889
|
|
|
14861
14890
|
**\u7528\u6237\u8BF4 "\u5E2E\u6211\u5206\u6790 GSE12345" / "\u4E0B\u8F7D GEO \u6570\u636E" \u2192**
|
|
14862
14891
|
\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 +15178,7 @@ var SKILL_ROUTES = [
|
|
|
15149
15178
|
id: "bulk-rnaseq-counts-to-de-deseq2",
|
|
15150
15179
|
name: "DESeq2 \u5DEE\u5F02\u8868\u8FBE\u5206\u6790",
|
|
15151
15180
|
category: "\u8F6C\u5F55\u7EC4",
|
|
15152
|
-
tag: "
|
|
15181
|
+
tag: "builtin",
|
|
15153
15182
|
keywords: [
|
|
15154
15183
|
// exact tool names
|
|
15155
15184
|
"deseq2",
|
|
@@ -15184,7 +15213,7 @@ var SKILL_ROUTES = [
|
|
|
15184
15213
|
id: "bulk-omics-clustering",
|
|
15185
15214
|
name: "\u6837\u672C / \u7279\u5F81\u805A\u7C7B",
|
|
15186
15215
|
category: "\u8F6C\u5F55\u7EC4",
|
|
15187
|
-
tag: "
|
|
15216
|
+
tag: "builtin",
|
|
15188
15217
|
keywords: [
|
|
15189
15218
|
"wgcna\u805A\u7C7B",
|
|
15190
15219
|
"\u5C42\u6B21\u805A\u7C7B",
|
|
@@ -15209,7 +15238,7 @@ var SKILL_ROUTES = [
|
|
|
15209
15238
|
id: "scrnaseq-scanpy-core-analysis",
|
|
15210
15239
|
name: "scRNA-seq (Scanpy / Python)",
|
|
15211
15240
|
category: "\u5355\u7EC6\u80DE",
|
|
15212
|
-
tag: "
|
|
15241
|
+
tag: "builtin",
|
|
15213
15242
|
keywords: [
|
|
15214
15243
|
"scanpy",
|
|
15215
15244
|
"scrna-seq",
|
|
@@ -15234,7 +15263,7 @@ var SKILL_ROUTES = [
|
|
|
15234
15263
|
id: "scrnaseq-seurat-core-analysis",
|
|
15235
15264
|
name: "scRNA-seq (Seurat / R)",
|
|
15236
15265
|
category: "\u5355\u7EC6\u80DE",
|
|
15237
|
-
tag: "
|
|
15266
|
+
tag: "builtin",
|
|
15238
15267
|
keywords: [
|
|
15239
15268
|
"seurat",
|
|
15240
15269
|
"r\u8BED\u8A00\u5355\u7EC6\u80DE",
|
|
@@ -15252,7 +15281,7 @@ var SKILL_ROUTES = [
|
|
|
15252
15281
|
id: "spatial-transcriptomics",
|
|
15253
15282
|
name: "\u7A7A\u95F4\u8F6C\u5F55\u7EC4",
|
|
15254
15283
|
category: "\u5355\u7EC6\u80DE",
|
|
15255
|
-
tag: "
|
|
15284
|
+
tag: "builtin",
|
|
15256
15285
|
keywords: [
|
|
15257
15286
|
"\u7A7A\u95F4\u8F6C\u5F55\u7EC4",
|
|
15258
15287
|
"spatial transcriptomics",
|
|
@@ -15274,7 +15303,7 @@ var SKILL_ROUTES = [
|
|
|
15274
15303
|
id: "coexpression-network",
|
|
15275
15304
|
name: "WGCNA \u5171\u8868\u8FBE\u7F51\u7EDC",
|
|
15276
15305
|
category: "\u8F6C\u5F55\u7EC4",
|
|
15277
|
-
tag: "
|
|
15306
|
+
tag: "builtin",
|
|
15278
15307
|
keywords: [
|
|
15279
15308
|
"wgcna",
|
|
15280
15309
|
"\u5171\u8868\u8FBE\u7F51\u7EDC",
|
|
@@ -15293,7 +15322,7 @@ var SKILL_ROUTES = [
|
|
|
15293
15322
|
id: "functional-enrichment-from-degs",
|
|
15294
15323
|
name: "GO / KEGG / GSEA \u5BCC\u96C6\u5206\u6790",
|
|
15295
15324
|
category: "\u8F6C\u5F55\u7EC4",
|
|
15296
|
-
tag: "
|
|
15325
|
+
tag: "builtin",
|
|
15297
15326
|
keywords: [
|
|
15298
15327
|
"\u5BCC\u96C6\u5206\u6790",
|
|
15299
15328
|
"go\u5206\u6790",
|
|
@@ -15318,14 +15347,26 @@ var SKILL_ROUTES = [
|
|
|
15318
15347
|
"\u901A\u8DEF\u5BCC\u96C6",
|
|
15319
15348
|
"\u57FA\u56E0\u96C6\u5206\u6790",
|
|
15320
15349
|
"ora\u5206\u6790",
|
|
15321
|
-
"gsea\u5206\u6790"
|
|
15350
|
+
"gsea\u5206\u6790",
|
|
15351
|
+
// mutation → pathway → phenotype
|
|
15352
|
+
"\u7A81\u53D8\u901A\u8DEF",
|
|
15353
|
+
"\u7A81\u53D8\u5F71\u54CD\u901A\u8DEF",
|
|
15354
|
+
"\u7A81\u53D8\u4E0B\u6E38\u901A\u8DEF",
|
|
15355
|
+
"\u6851\u57FA\u56FE\u901A\u8DEF",
|
|
15356
|
+
"kras\u901A\u8DEF",
|
|
15357
|
+
"ras-raf-mek\u901A\u8DEF",
|
|
15358
|
+
"mapk\u901A\u8DEF",
|
|
15359
|
+
"pi3k\u901A\u8DEF",
|
|
15360
|
+
"\u80BA\u764C\u901A\u8DEF",
|
|
15361
|
+
"\u9A71\u52A8\u57FA\u56E0\u901A\u8DEF",
|
|
15362
|
+
"\u4FE1\u53F7\u901A\u8DEF\u5BCC\u96C6"
|
|
15322
15363
|
]
|
|
15323
15364
|
},
|
|
15324
15365
|
{
|
|
15325
15366
|
id: "grn-pyscenic",
|
|
15326
15367
|
name: "pySCENIC \u57FA\u56E0\u8C03\u63A7\u7F51\u7EDC",
|
|
15327
15368
|
category: "\u5355\u7EC6\u80DE",
|
|
15328
|
-
tag: "
|
|
15369
|
+
tag: "builtin",
|
|
15329
15370
|
keywords: [
|
|
15330
15371
|
"pyscenic",
|
|
15331
15372
|
"scenic",
|
|
@@ -15346,7 +15387,7 @@ var SKILL_ROUTES = [
|
|
|
15346
15387
|
id: "genetic-variant-annotation",
|
|
15347
15388
|
name: "\u9057\u4F20\u53D8\u5F02\u6CE8\u91CA",
|
|
15348
15389
|
category: "\u57FA\u56E0\u7EC4",
|
|
15349
|
-
tag: "
|
|
15390
|
+
tag: "builtin",
|
|
15350
15391
|
keywords: [
|
|
15351
15392
|
"\u53D8\u5F02\u6CE8\u91CA",
|
|
15352
15393
|
"variant annotation",
|
|
@@ -15364,14 +15405,43 @@ var SKILL_ROUTES = [
|
|
|
15364
15405
|
"vcf\u6587\u4EF6\u5206\u6790",
|
|
15365
15406
|
"\u9057\u4F20\u53D8\u5F02\u89E3\u6790",
|
|
15366
15407
|
"\u81F4\u75C5\u6027\u8BC4\u4F30",
|
|
15367
|
-
"\u53D8\u5F02\u5F71\u54CD\u9884\u6D4B"
|
|
15408
|
+
"\u53D8\u5F02\u5F71\u54CD\u9884\u6D4B",
|
|
15409
|
+
// specific oncology mutations (KRAS/EGFR/ALK etc.)
|
|
15410
|
+
"kras\u7A81\u53D8",
|
|
15411
|
+
"kras g12c",
|
|
15412
|
+
"kras g12d",
|
|
15413
|
+
"kras g12v",
|
|
15414
|
+
"kras mutation",
|
|
15415
|
+
"egfr\u7A81\u53D8",
|
|
15416
|
+
"egfr l858r",
|
|
15417
|
+
"egfr\u5916\u663E\u5B5019\u7F3A\u5931",
|
|
15418
|
+
"alk\u878D\u5408",
|
|
15419
|
+
"braf v600e",
|
|
15420
|
+
"tp53\u7A81\u53D8",
|
|
15421
|
+
"pik3ca\u7A81\u53D8",
|
|
15422
|
+
// cancer contexts
|
|
15423
|
+
"nsclc\u7A81\u53D8",
|
|
15424
|
+
"\u80BA\u764C\u7A81\u53D8",
|
|
15425
|
+
"\u975E\u5C0F\u7EC6\u80DE\u80BA\u764C\u7A81\u53D8",
|
|
15426
|
+
"\u80BA\u817A\u764C\u7A81\u53D8",
|
|
15427
|
+
"\u80BF\u7624\u4F53\u7EC6\u80DE\u7A81\u53D8",
|
|
15428
|
+
"\u9A71\u52A8\u57FA\u56E0\u7A81\u53D8",
|
|
15429
|
+
"\u764C\u75C7\u9A71\u52A8\u7A81\u53D8",
|
|
15430
|
+
// mutation landscape
|
|
15431
|
+
"\u7A81\u53D8\u9891\u7387",
|
|
15432
|
+
"\u8DE8\u764C\u79CD\u7A81\u53D8",
|
|
15433
|
+
"\u7A81\u53D8\u70ED\u56FE",
|
|
15434
|
+
"\u7A81\u53D8\u666F\u89C2\u56FE",
|
|
15435
|
+
"\u7011\u5E03\u56FE\u7A81\u53D8",
|
|
15436
|
+
"mutation landscape",
|
|
15437
|
+
"oncoprint"
|
|
15368
15438
|
]
|
|
15369
15439
|
},
|
|
15370
15440
|
{
|
|
15371
15441
|
id: "gwas-to-function-twas",
|
|
15372
15442
|
name: "GWAS \u2192 TWAS \u529F\u80FD\u89E3\u6790",
|
|
15373
15443
|
category: "\u57FA\u56E0\u7EC4",
|
|
15374
|
-
tag: "
|
|
15444
|
+
tag: "builtin",
|
|
15375
15445
|
keywords: [
|
|
15376
15446
|
"gwas\u5206\u6790",
|
|
15377
15447
|
"twas",
|
|
@@ -15394,7 +15464,7 @@ var SKILL_ROUTES = [
|
|
|
15394
15464
|
id: "mendelian-randomization-twosamplemr",
|
|
15395
15465
|
name: "\u5B5F\u5FB7\u5C14\u968F\u673A\u5316 (MR)",
|
|
15396
15466
|
category: "\u7EDF\u8BA1",
|
|
15397
|
-
tag: "
|
|
15467
|
+
tag: "builtin",
|
|
15398
15468
|
keywords: [
|
|
15399
15469
|
"\u5B5F\u5FB7\u5C14\u968F\u673A\u5316",
|
|
15400
15470
|
"mendelian randomization",
|
|
@@ -15415,7 +15485,7 @@ var SKILL_ROUTES = [
|
|
|
15415
15485
|
id: "polygenic-risk-score-prs-catalog",
|
|
15416
15486
|
name: "PRS \u591A\u57FA\u56E0\u98CE\u9669\u8BC4\u5206",
|
|
15417
15487
|
category: "\u57FA\u56E0\u7EC4",
|
|
15418
|
-
tag: "
|
|
15488
|
+
tag: "builtin",
|
|
15419
15489
|
keywords: [
|
|
15420
15490
|
"prs\u8BC4\u5206",
|
|
15421
15491
|
"polygenic risk score",
|
|
@@ -15433,7 +15503,7 @@ var SKILL_ROUTES = [
|
|
|
15433
15503
|
id: "pooled-crispr-screens",
|
|
15434
15504
|
name: "CRISPR \u6587\u5E93\u7B5B\u9009 (MAGeCK/BAGEL2)",
|
|
15435
15505
|
category: "\u57FA\u56E0\u7EC4",
|
|
15436
|
-
tag: "
|
|
15506
|
+
tag: "builtin",
|
|
15437
15507
|
keywords: [
|
|
15438
15508
|
"crispr\u6587\u5E93\u7B5B\u9009",
|
|
15439
15509
|
"crispr screen",
|
|
@@ -15455,7 +15525,7 @@ var SKILL_ROUTES = [
|
|
|
15455
15525
|
id: "chip-atlas-peak-enrichment",
|
|
15456
15526
|
name: "ChIP-seq \u5CF0\u503C\u5BCC\u96C6 (ChIP-Atlas)",
|
|
15457
15527
|
category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
|
|
15458
|
-
tag: "
|
|
15528
|
+
tag: "builtin",
|
|
15459
15529
|
keywords: [
|
|
15460
15530
|
"chip-atlas",
|
|
15461
15531
|
"chip-seq\u5CF0\u503C\u5BCC\u96C6",
|
|
@@ -15474,7 +15544,7 @@ var SKILL_ROUTES = [
|
|
|
15474
15544
|
id: "chip-atlas-diff-analysis",
|
|
15475
15545
|
name: "ChIP-seq \u5DEE\u5F02\u7ED3\u5408\u5206\u6790",
|
|
15476
15546
|
category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
|
|
15477
|
-
tag: "
|
|
15547
|
+
tag: "builtin",
|
|
15478
15548
|
keywords: [
|
|
15479
15549
|
"chip\u5DEE\u5F02\u5206\u6790",
|
|
15480
15550
|
"differential binding",
|
|
@@ -15491,7 +15561,7 @@ var SKILL_ROUTES = [
|
|
|
15491
15561
|
id: "chip-atlas-target-genes",
|
|
15492
15562
|
name: "ChIP-seq \u9776\u57FA\u56E0\u9274\u5B9A",
|
|
15493
15563
|
category: "\u8868\u89C2\u57FA\u56E0\u7EC4",
|
|
15494
|
-
tag: "
|
|
15564
|
+
tag: "builtin",
|
|
15495
15565
|
keywords: [
|
|
15496
15566
|
"chip\u9776\u57FA\u56E0",
|
|
15497
15567
|
"chip target gene",
|
|
@@ -15511,7 +15581,7 @@ var SKILL_ROUTES = [
|
|
|
15511
15581
|
id: "clinicaltrials-landscape",
|
|
15512
15582
|
name: "\u4E34\u5E8A\u8BD5\u9A8C\u683C\u5C40\u5206\u6790",
|
|
15513
15583
|
category: "\u4E34\u5E8A",
|
|
15514
|
-
tag: "
|
|
15584
|
+
tag: "builtin",
|
|
15515
15585
|
keywords: [
|
|
15516
15586
|
"clinicaltrials\u5206\u6790",
|
|
15517
15587
|
"clinical trial landscape",
|
|
@@ -15529,7 +15599,7 @@ var SKILL_ROUTES = [
|
|
|
15529
15599
|
id: "literature-preclinical",
|
|
15530
15600
|
name: "\u4E34\u5E8A\u524D\u6587\u732E\u7CFB\u7EDF\u63D0\u53D6",
|
|
15531
15601
|
category: "\u6587\u732E",
|
|
15532
|
-
tag: "
|
|
15602
|
+
tag: "builtin",
|
|
15533
15603
|
keywords: [
|
|
15534
15604
|
"\u4E34\u5E8A\u524D\u6587\u732E",
|
|
15535
15605
|
"preclinical literature",
|
|
@@ -15547,7 +15617,7 @@ var SKILL_ROUTES = [
|
|
|
15547
15617
|
id: "experimental-design-statistics",
|
|
15548
15618
|
name: "\u5B9E\u9A8C\u8BBE\u8BA1\u4E0E\u7EDF\u8BA1\u68C0\u9A8C",
|
|
15549
15619
|
category: "\u7EDF\u8BA1",
|
|
15550
|
-
tag: "
|
|
15620
|
+
tag: "builtin",
|
|
15551
15621
|
keywords: [
|
|
15552
15622
|
"\u6837\u672C\u91CF\u8BA1\u7B97",
|
|
15553
15623
|
"\u7EDF\u8BA1\u68C0\u9A8C\u9009\u62E9",
|
|
@@ -15573,7 +15643,7 @@ var SKILL_ROUTES = [
|
|
|
15573
15643
|
id: "lasso-biomarker-panel",
|
|
15574
15644
|
name: "LASSO \u751F\u7269\u6807\u5FD7\u7269\u9762\u677F\u7B5B\u9009",
|
|
15575
15645
|
category: "\u7EDF\u8BA1",
|
|
15576
|
-
tag: "
|
|
15646
|
+
tag: "builtin",
|
|
15577
15647
|
keywords: [
|
|
15578
15648
|
"lasso\u56DE\u5F52\u7B5B\u9009",
|
|
15579
15649
|
"lasso\u751F\u7269\u6807\u5FD7\u7269",
|
|
@@ -15594,7 +15664,7 @@ var SKILL_ROUTES = [
|
|
|
15594
15664
|
id: "pcr-primer-design",
|
|
15595
15665
|
name: "PCR / qPCR \u5F15\u7269\u8BBE\u8BA1",
|
|
15596
15666
|
category: "\u5206\u5B50\u751F\u7269\u5B66",
|
|
15597
|
-
tag: "
|
|
15667
|
+
tag: "builtin",
|
|
15598
15668
|
keywords: [
|
|
15599
15669
|
"\u5F15\u7269\u8BBE\u8BA1",
|
|
15600
15670
|
"primer design",
|
|
@@ -15616,7 +15686,7 @@ var SKILL_ROUTES = [
|
|
|
15616
15686
|
id: "survival-analysis-clinical",
|
|
15617
15687
|
name: "\u4E34\u5E8A\u751F\u5B58\u5206\u6790 (KM + Cox)",
|
|
15618
15688
|
category: "\u4E34\u5E8A",
|
|
15619
|
-
tag: "
|
|
15689
|
+
tag: "builtin",
|
|
15620
15690
|
keywords: [
|
|
15621
15691
|
// exact method names
|
|
15622
15692
|
"kaplan-meier",
|
|
@@ -15663,12 +15733,12 @@ var SKILL_ROUTES = [
|
|
|
15663
15733
|
"\u7A81\u53D8\u4E0E\u9884\u540E"
|
|
15664
15734
|
]
|
|
15665
15735
|
},
|
|
15666
|
-
// ──
|
|
15736
|
+
// ── Extended Skills (key routable entries) ───────────────────────────────────
|
|
15667
15737
|
{
|
|
15668
15738
|
id: "pubmed-search",
|
|
15669
15739
|
name: "PubMed \u6587\u732E\u68C0\u7D22",
|
|
15670
15740
|
category: "\u6587\u732E",
|
|
15671
|
-
tag: "
|
|
15741
|
+
tag: "builtin",
|
|
15672
15742
|
keywords: [
|
|
15673
15743
|
"pubmed\u68C0\u7D22",
|
|
15674
15744
|
"pubmed\u641C\u7D22",
|
|
@@ -15683,14 +15753,14 @@ var SKILL_ROUTES = [
|
|
|
15683
15753
|
id: "arxiv-search",
|
|
15684
15754
|
name: "arXiv \u9884\u5370\u672C\u68C0\u7D22",
|
|
15685
15755
|
category: "\u6587\u732E",
|
|
15686
|
-
tag: "
|
|
15756
|
+
tag: "builtin",
|
|
15687
15757
|
keywords: ["arxiv\u68C0\u7D22", "arxiv\u641C\u7D22", "\u9884\u5370\u672C\u68C0\u7D22", "\u9884\u5370\u672C\u8BBA\u6587", "arxiv\u6587\u732E"]
|
|
15688
15758
|
},
|
|
15689
15759
|
{
|
|
15690
15760
|
id: "alphafold",
|
|
15691
15761
|
name: "AlphaFold \u86CB\u767D\u8D28\u7ED3\u6784\u9884\u6D4B",
|
|
15692
15762
|
category: "\u7ED3\u6784\u751F\u7269\u5B66",
|
|
15693
|
-
tag: "
|
|
15763
|
+
tag: "builtin",
|
|
15694
15764
|
keywords: [
|
|
15695
15765
|
"alphafold\u7ED3\u6784\u9884\u6D4B",
|
|
15696
15766
|
"alphafold\u8FD0\u884C",
|
|
@@ -15704,7 +15774,7 @@ var SKILL_ROUTES = [
|
|
|
15704
15774
|
id: "alphafold-database",
|
|
15705
15775
|
name: "AlphaFold \u6570\u636E\u5E93\u67E5\u8BE2",
|
|
15706
15776
|
category: "\u7ED3\u6784\u751F\u7269\u5B66",
|
|
15707
|
-
tag: "
|
|
15777
|
+
tag: "builtin",
|
|
15708
15778
|
keywords: [
|
|
15709
15779
|
"alphafold\u6570\u636E\u5E93",
|
|
15710
15780
|
"alphafold db",
|
|
@@ -15717,7 +15787,7 @@ var SKILL_ROUTES = [
|
|
|
15717
15787
|
id: "bindcraft",
|
|
15718
15788
|
name: "BindCraft \u86CB\u767D\u8D28\u7ED3\u5408\u4F53\u8BBE\u8BA1",
|
|
15719
15789
|
category: "\u7ED3\u6784\u751F\u7269\u5B66",
|
|
15720
|
-
tag: "
|
|
15790
|
+
tag: "builtin",
|
|
15721
15791
|
keywords: [
|
|
15722
15792
|
"bindcraft",
|
|
15723
15793
|
"\u7ED3\u5408\u4F53\u8BBE\u8BA1",
|
|
@@ -15731,7 +15801,7 @@ var SKILL_ROUTES = [
|
|
|
15731
15801
|
id: "anndata",
|
|
15732
15802
|
name: "AnnData \u5355\u7EC6\u80DE\u6570\u636E\u64CD\u4F5C",
|
|
15733
15803
|
category: "\u5355\u7EC6\u80DE",
|
|
15734
|
-
tag: "
|
|
15804
|
+
tag: "builtin",
|
|
15735
15805
|
keywords: [
|
|
15736
15806
|
"anndata\u64CD\u4F5C",
|
|
15737
15807
|
"h5ad\u6587\u4EF6\u5904\u7406",
|
|
@@ -15745,7 +15815,7 @@ var SKILL_ROUTES = [
|
|
|
15745
15815
|
id: "cellagent-annotation",
|
|
15746
15816
|
name: "CellAgent \u7EC6\u80DE\u7C7B\u578B\u81EA\u52A8\u6CE8\u91CA",
|
|
15747
15817
|
category: "\u5355\u7EC6\u80DE",
|
|
15748
|
-
tag: "
|
|
15818
|
+
tag: "builtin",
|
|
15749
15819
|
keywords: [
|
|
15750
15820
|
"\u7EC6\u80DE\u7C7B\u578B\u6CE8\u91CA",
|
|
15751
15821
|
"cell type annotation",
|
|
@@ -15759,7 +15829,7 @@ var SKILL_ROUTES = [
|
|
|
15759
15829
|
id: "scvi-tools",
|
|
15760
15830
|
name: "scVI \u5355\u7EC6\u80DE\u6DF1\u5EA6\u5B66\u4E60",
|
|
15761
15831
|
category: "\u5355\u7EC6\u80DE",
|
|
15762
|
-
tag: "
|
|
15832
|
+
tag: "builtin",
|
|
15763
15833
|
keywords: [
|
|
15764
15834
|
"scvi-tools",
|
|
15765
15835
|
"scvi\u6A21\u578B",
|
|
@@ -15773,21 +15843,54 @@ var SKILL_ROUTES = [
|
|
|
15773
15843
|
id: "agentd-drug-discovery",
|
|
15774
15844
|
name: "\u836F\u7269\u53D1\u73B0 Agent",
|
|
15775
15845
|
category: "\u836F\u7269",
|
|
15776
|
-
tag: "
|
|
15846
|
+
tag: "builtin",
|
|
15777
15847
|
keywords: [
|
|
15778
15848
|
"\u836F\u7269\u53D1\u73B0\u6D41\u7A0B",
|
|
15779
15849
|
"drug discovery",
|
|
15780
15850
|
"\u5019\u9009\u836F\u7269\u7B5B\u9009",
|
|
15781
15851
|
"\u5148\u5BFC\u5316\u5408\u7269",
|
|
15782
15852
|
"hit\u5316\u5408\u7269",
|
|
15783
|
-
"\u836F\u7269\u9776\u70B9\u53D1\u73B0"
|
|
15853
|
+
"\u836F\u7269\u9776\u70B9\u53D1\u73B0",
|
|
15854
|
+
// drug target analysis
|
|
15855
|
+
"\u9776\u70B9\u8BC4\u4F30",
|
|
15856
|
+
"\u9776\u70B9\u53EF\u89C6\u5316",
|
|
15857
|
+
"\u9776\u70B9\u62A5\u544A",
|
|
15858
|
+
"\u9776\u70B9\u5206\u6790",
|
|
15859
|
+
"\u9776\u70B9\u53EF\u6210\u836F\u6027",
|
|
15860
|
+
"druggability",
|
|
15861
|
+
"\u53EF\u6210\u836F\u6027\u8BC4\u4F30",
|
|
15862
|
+
"\u9776\u70B9\u7EFC\u5408\u8BC4\u5206",
|
|
15863
|
+
"target visualization",
|
|
15864
|
+
"drug target report",
|
|
15865
|
+
"target assessment",
|
|
15866
|
+
// specific target contexts
|
|
15867
|
+
"kras\u9776\u70B9",
|
|
15868
|
+
"kras\u53EF\u6210\u836F\u6027",
|
|
15869
|
+
"kras\u6291\u5236\u5242",
|
|
15870
|
+
"kras\u7A81\u53D8\u9776\u70B9",
|
|
15871
|
+
"egfr\u9776\u70B9",
|
|
15872
|
+
"alk\u9776\u70B9",
|
|
15873
|
+
"braf\u9776\u70B9",
|
|
15874
|
+
"her2\u9776\u70B9",
|
|
15875
|
+
"met\u9776\u70B9",
|
|
15876
|
+
// visualization types for target reports
|
|
15877
|
+
"\u96F7\u8FBE\u56FE\u8BC4\u5206",
|
|
15878
|
+
"\u6C14\u6CE1\u56FE\u9776\u70B9",
|
|
15879
|
+
"\u6851\u57FA\u56FE\u7A81\u53D8\u901A\u8DEF",
|
|
15880
|
+
"\u9776\u70B9\u70ED\u56FE",
|
|
15881
|
+
// natural-language synonyms
|
|
15882
|
+
"\u54EA\u4E9B\u9776\u70B9\u503C\u5F97\u5F00\u53D1",
|
|
15883
|
+
"\u9776\u70B9\u4F18\u5148\u7EA7",
|
|
15884
|
+
"\u9776\u70B9\u6210\u836F\u6027\u5206\u6790",
|
|
15885
|
+
"\u9776\u5411\u6CBB\u7597\u9776\u70B9",
|
|
15886
|
+
"\u7CBE\u51C6\u533B\u5B66\u9776\u70B9"
|
|
15784
15887
|
]
|
|
15785
15888
|
},
|
|
15786
15889
|
{
|
|
15787
15890
|
id: "chembl-database",
|
|
15788
15891
|
name: "ChEMBL \u5316\u5408\u7269\u6D3B\u6027\u6570\u636E\u5E93",
|
|
15789
15892
|
category: "\u836F\u7269",
|
|
15790
|
-
tag: "
|
|
15893
|
+
tag: "builtin",
|
|
15791
15894
|
keywords: [
|
|
15792
15895
|
"chembl\u67E5\u8BE2",
|
|
15793
15896
|
"chembl\u6570\u636E\u5E93",
|
|
@@ -15801,7 +15904,7 @@ var SKILL_ROUTES = [
|
|
|
15801
15904
|
id: "rdkit",
|
|
15802
15905
|
name: "RDKit \u5316\u5B66\u4FE1\u606F\u5B66",
|
|
15803
15906
|
category: "\u836F\u7269",
|
|
15804
|
-
tag: "
|
|
15907
|
+
tag: "builtin",
|
|
15805
15908
|
keywords: [
|
|
15806
15909
|
"rdkit",
|
|
15807
15910
|
"\u5316\u5B66\u4FE1\u606F\u5B66",
|
|
@@ -15816,7 +15919,7 @@ var SKILL_ROUTES = [
|
|
|
15816
15919
|
id: "bio-variant-calling",
|
|
15817
15920
|
name: "\u53D8\u5F02\u68C0\u6D4B\u6D41\u7A0B (GATK/Mutect2)",
|
|
15818
15921
|
category: "\u57FA\u56E0\u7EC4",
|
|
15819
|
-
tag: "
|
|
15922
|
+
tag: "builtin",
|
|
15820
15923
|
keywords: [
|
|
15821
15924
|
"\u53D8\u5F02\u68C0\u6D4B\u6D41\u7A0B",
|
|
15822
15925
|
"variant calling\u6D41\u7A0B",
|
|
@@ -15831,7 +15934,7 @@ var SKILL_ROUTES = [
|
|
|
15831
15934
|
id: "antibody-design-agent",
|
|
15832
15935
|
name: "\u6297\u4F53\u8BBE\u8BA1 Agent",
|
|
15833
15936
|
category: "\u6297\u4F53",
|
|
15834
|
-
tag: "
|
|
15937
|
+
tag: "builtin",
|
|
15835
15938
|
keywords: [
|
|
15836
15939
|
"\u6297\u4F53\u8BBE\u8BA1",
|
|
15837
15940
|
"antibody design",
|
|
@@ -15845,7 +15948,7 @@ var SKILL_ROUTES = [
|
|
|
15845
15948
|
id: "armored-cart-design-agent",
|
|
15846
15949
|
name: "Armored CAR-T \u8BBE\u8BA1",
|
|
15847
15950
|
category: "\u6297\u4F53",
|
|
15848
|
-
tag: "
|
|
15951
|
+
tag: "builtin",
|
|
15849
15952
|
keywords: [
|
|
15850
15953
|
"car-t\u8BBE\u8BA1",
|
|
15851
15954
|
"cart\u7EC6\u80DE\u8BBE\u8BA1",
|
|
@@ -16001,7 +16104,7 @@ function clearCheckpoints(sessionId) {
|
|
|
16001
16104
|
|
|
16002
16105
|
// src/index.ts
|
|
16003
16106
|
var import_fs7 = require("fs");
|
|
16004
|
-
var VERSION2 = "2.4.
|
|
16107
|
+
var VERSION2 = "2.4.4";
|
|
16005
16108
|
var SKILLHUB_HUBS = {
|
|
16006
16109
|
bgi: { label: "BGI\u5185\u7F51", apiBase: "https://clawhub.ai", backend: "clawhub" },
|
|
16007
16110
|
clawhub: { label: "clawhub.ai", apiBase: "https://clawhub.ai", backend: "clawhub" },
|
|
@@ -16151,8 +16254,8 @@ function installBundledData() {
|
|
|
16151
16254
|
const installedDataVersion = (0, import_fs6.existsSync)(DATA_VERSION_FILE) ? (0, import_fs6.readFileSync)(DATA_VERSION_FILE, "utf8").trim() : "";
|
|
16152
16255
|
const needsUpdate = installedDataVersion !== VERSION2;
|
|
16153
16256
|
const targets = [
|
|
16154
|
-
{ src: (0, import_path6.join)(bundledData, "workflows"), dest: WORKFLOWS_DIR, name: "Skills (\
|
|
16155
|
-
{ src: (0, import_path6.join)(bundledData, "skills"), dest: SKILLS_DIR, name: "Skills (\
|
|
16257
|
+
{ src: (0, import_path6.join)(bundledData, "workflows"), dest: WORKFLOWS_DIR, name: "Skills (\u5206\u6790\u7C7B)" },
|
|
16258
|
+
{ src: (0, import_path6.join)(bundledData, "skills"), dest: SKILLS_DIR, name: "Skills (\u6269\u5C55\u7C7B)" },
|
|
16156
16259
|
{ src: (0, import_path6.join)(bundledData, "tools"), dest: TOOLS_DIR, name: "\u5DE5\u5177" }
|
|
16157
16260
|
];
|
|
16158
16261
|
let installed = false;
|
|
@@ -16231,7 +16334,7 @@ function printHelp() {
|
|
|
16231
16334
|
console.log(` ${source_default.cyan("!<\u547D\u4EE4>")} \u7ED5\u8FC7 AI \u76F4\u63A5\u6267\u884C Shell \u547D\u4EE4\uFF08\u5B9E\u65F6\u8F93\u51FA\uFF09`);
|
|
16232
16335
|
console.log(source_default.dim(" \u793A\u4F8B: !ls -la !Rscript analysis.R !python script.py !samtools view -h a.bam"));
|
|
16233
16336
|
console.log();
|
|
16234
|
-
console.log(source_default.bold.cyan("\u2500\u2500\u2500 \
|
|
16337
|
+
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
16338
|
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
16339
|
console.log(` ${source_default.cyan("/check-env")} [id] \u68C0\u6D4B Skill \u6240\u9700 R/Python \u5305\u662F\u5426\u5DF2\u5B89\u88C5`);
|
|
16237
16340
|
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 +17079,7 @@ async function handleCommand(input, rl, history, thinkMode, injectedSkills) {
|
|
|
16976
17079
|
}
|
|
16977
17080
|
break;
|
|
16978
17081
|
}
|
|
16979
|
-
// ── /run
|
|
17082
|
+
// ── /run skill wizard ────────────────────────────────────────────────────
|
|
16980
17083
|
case "run": {
|
|
16981
17084
|
const targetId = arg;
|
|
16982
17085
|
if (!targetId) {
|
|
@@ -17017,7 +17120,7 @@ async function handleCommand(input, rl, history, thinkMode, injectedSkills) {
|
|
|
17017
17120
|
if (ans.trim()) answers[q2] = ans.trim();
|
|
17018
17121
|
}
|
|
17019
17122
|
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} \
|
|
17123
|
+
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
17124
|
|
|
17022
17125
|
\u7528\u6237\u63D0\u4F9B\u7684\u53C2\u6570\uFF1A
|
|
17023
17126
|
${paramSummary}
|
|
@@ -17878,16 +17981,29 @@ async function main() {
|
|
|
17878
17981
|
const { routes: suggestedRoutes, topScore } = routeSkill(trimmed);
|
|
17879
17982
|
const newRoutes = suggestedRoutes.filter((r2) => !injectedSkills.has(r2.id));
|
|
17880
17983
|
if (newRoutes.length === 1 && topScore >= 8) {
|
|
17881
|
-
|
|
17882
|
-
|
|
17883
|
-
|
|
17884
|
-
|
|
17885
|
-
}
|
|
17886
|
-
|
|
17887
|
-
|
|
17888
|
-
newRoutes.slice(0, 3).forEach((r2) => {
|
|
17889
|
-
console.log(source_default.dim(` /sk ${r2.id} \u2014 ${r2.name}`));
|
|
17984
|
+
await injectSkill(newRoutes[0].id, history, injectedSkills, rl, false);
|
|
17985
|
+
} else if (newRoutes.length >= 1 && topScore >= 2) {
|
|
17986
|
+
const candidates = newRoutes.slice(0, 3);
|
|
17987
|
+
console.log();
|
|
17988
|
+
console.log(source_default.bold.yellow("\u250C\u2500 \u{1F50D} \u68C0\u6D4B\u5230\u76F8\u5173\u6280\u80FD \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"));
|
|
17989
|
+
candidates.forEach((r2, i2) => {
|
|
17990
|
+
console.log(`\u2502 ${source_default.bold.cyan(`[${i2 + 1}]`)} ${source_default.cyan(r2.id)}${source_default.dim(" \u2014")} ${r2.name}`);
|
|
17890
17991
|
});
|
|
17992
|
+
console.log(source_default.bold.yellow("\u2514\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
|
|
17993
|
+
const pickPrompt = candidates.length > 1 ? ` \u6FC0\u6D3B\u54EA\u4E2A\u6280\u80FD\uFF1F\u8F93\u5165\u7F16\u53F7 (\u5982 1 \u6216 1,2)\uFF0C\u56DE\u8F66\u8DF3\u8FC7 \u203A ` : ` \u6FC0\u6D3B\u6B64\u6280\u80FD\uFF1F[Y/n] \u203A `;
|
|
17994
|
+
const skillChoice = await question(rl, source_default.yellow(pickPrompt));
|
|
17995
|
+
const choiceTrimmed = skillChoice.trim().toLowerCase();
|
|
17996
|
+
if (choiceTrimmed !== "" && choiceTrimmed !== "n") {
|
|
17997
|
+
let indices;
|
|
17998
|
+
if (candidates.length === 1) {
|
|
17999
|
+
indices = choiceTrimmed === "y" || choiceTrimmed === "" ? [0] : [];
|
|
18000
|
+
} else {
|
|
18001
|
+
indices = choiceTrimmed.split(",").map((s2) => parseInt(s2.trim(), 10) - 1).filter((i2) => i2 >= 0 && i2 < candidates.length);
|
|
18002
|
+
}
|
|
18003
|
+
for (const idx of indices) {
|
|
18004
|
+
await injectSkill(candidates[idx].id, history, injectedSkills, rl, true);
|
|
18005
|
+
}
|
|
18006
|
+
}
|
|
17891
18007
|
console.log();
|
|
17892
18008
|
}
|
|
17893
18009
|
const expanded = expandFileRefs(trimmed);
|