@yeyuan98/opencode-bioresearcher-plugin 1.3.0 → 1.3.1-alpha.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.
- package/README.md +140 -137
- package/dist/skills/demo-skill/SKILL.md +41 -41
- package/dist/skills/demo-skill/demo_script.py +23 -23
- package/dist/skills/pubmed-weekly/SKILL.md +329 -0
- package/dist/skills/pubmed-weekly/pubmed_weekly.py +411 -0
- package/dist/skills/pubmed-weekly/pyproject.toml +8 -0
- package/dist/skills/python-setup-uv/SKILL.md +141 -141
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,137 +1,140 @@
|
|
|
1
|
-
# BioResearcher Plugin
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Skills
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
|
85
|
-
|
|
86
|
-
| `.
|
|
87
|
-
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
"
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
1
|
+
# BioResearcher Plugin
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
OpenCode plugin that adds agents and tools for biomedical and pharmaceutical research.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
No nonsense and powerful. Agents and tools that just work for your typical biomedical and pharmaceutical research needs.
|
|
10
|
+
|
|
11
|
+
Tab to activate and start asking right away:
|
|
12
|
+
|
|
13
|
+
- The **Bioresearcher Agent** is jack-of-all-trades.
|
|
14
|
+
- The **BioresearcherDR Agent** is a specialist for biomed/pharma deep research (DR).
|
|
15
|
+
|
|
16
|
+
## Agents
|
|
17
|
+
|
|
18
|
+
### BioresearcherDR
|
|
19
|
+
|
|
20
|
+
By default, it will conduct **highly detailed and in-depth** research, easily surpassing all general purpose LLM applications.
|
|
21
|
+
|
|
22
|
+
To reduce research depth and make research process faster, start your question with `light-research`:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
light-research Significance of KRAS for cancer?
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
To skip the Question-Clarification cycle, prompt your question with `no-interview`:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
no-interview light-research Significance of KRAS for cancer?
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Tools
|
|
35
|
+
|
|
36
|
+
### Table Tools
|
|
37
|
+
|
|
38
|
+
Manipulate Excel, CSV, and ODS files with precision and smart parsing for dates, numbers, and data types.
|
|
39
|
+
|
|
40
|
+
**Enable LLMs to wrangle huge tables WITHOUT overwhelming model context.**
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
What are tools for table processing?
|
|
44
|
+
What are column names in XXX.xlsx?
|
|
45
|
+
Analyze XXX.xlsx - group by Y column, and report unique values of Z column.
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Calculator
|
|
49
|
+
|
|
50
|
+
Evaluate mathematical expressions with full support for brackets, powers, and scientific notation.
|
|
51
|
+
|
|
52
|
+
**Make your model accurate with numbers. No more 3.11 > 3.9 nor 1+2=5.**
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Use the calculator tool: (3+1.5*6-1/2)^3
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Blocking Timer
|
|
59
|
+
|
|
60
|
+
Pause execution for testing or pacing operations.
|
|
61
|
+
|
|
62
|
+
**Respect API rate limits. No more IP bans/blocks.**
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
Query XXX API. You MUST include a 0.5 second delay between two API calls with the blockingTimer tool.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### PubMed Parser
|
|
69
|
+
|
|
70
|
+
Parse PubMed XML files to markdown or Excel format. Supports `.xml` and `.xml.gz` files.
|
|
71
|
+
|
|
72
|
+
**Analyze years of publication articles in one go. Simple and powerful.**
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
Download pubmed article data from https://ftp.ncbi.nlm.nih.gov/pubmed/updatefiles/pubmed26n1340.xml.gz and parse to Excel format.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Reference: [PubMed Download Data](https://pubmed.ncbi.nlm.nih.gov/download/).
|
|
79
|
+
|
|
80
|
+
## Skills
|
|
81
|
+
|
|
82
|
+
Skills are reusable prompt templates discovered from multiple paths:
|
|
83
|
+
|
|
84
|
+
| Path | Scope |
|
|
85
|
+
|------|-------|
|
|
86
|
+
| `.opencode/skills/` | Project |
|
|
87
|
+
| `~/.config/opencode/skills/` | Global |
|
|
88
|
+
| `.claude/skills/` | Claude Code compatible |
|
|
89
|
+
| `.agents/skills/` | Agents compatible |
|
|
90
|
+
|
|
91
|
+
This plugin provides a skill tool that overrides Opencode's built-in to support plugin-shipped skills.
|
|
92
|
+
|
|
93
|
+
See [skill-tools/README.md](skill-tools/README.md) for full documentation.
|
|
94
|
+
|
|
95
|
+
### Supplied skills
|
|
96
|
+
|
|
97
|
+
- `demo-skill`: showcase skill tool mechanisms.
|
|
98
|
+
- `python-setup-uv`: setup python runtime in your working directory with uv.
|
|
99
|
+
- `pubmed-weekly`: automated download of pubmed daily update files over the past one week.
|
|
100
|
+
|
|
101
|
+
Prompt the following and follow along:
|
|
102
|
+
|
|
103
|
+
```txt
|
|
104
|
+
Setup python uv with skill
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Installation
|
|
108
|
+
|
|
109
|
+
Add the plugin to your `opencode.json`:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"$schema": "https://opencode.ai/config.json",
|
|
114
|
+
"plugin": [
|
|
115
|
+
"@yeyuan98/opencode-bioresearcher-plugin",
|
|
116
|
+
],
|
|
117
|
+
"mcp": {
|
|
118
|
+
"biomcp": {
|
|
119
|
+
"type": "local",
|
|
120
|
+
"command": ["uv", "run", "--with", "biomcp-python", "biomcp", "run"],
|
|
121
|
+
"enabled": true,
|
|
122
|
+
"timeout": 120000
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
BioMCP is absolutely required and might take time to load. You will need to have `uv` installed on your system too. Refer to [BioMCP guide](https://biomcp.org/getting-started) for details.
|
|
129
|
+
|
|
130
|
+
## Common Issues and Solutions
|
|
131
|
+
|
|
132
|
+
| Issue | Solution |
|
|
133
|
+
|-------|----------|
|
|
134
|
+
| Agent not appearing | Check plugin in opencode.json is typed correctly |
|
|
135
|
+
| BioMCP tool failures | Make sure you have BioMCP [installed and enabled](https://opencode.ai/docs/mcp-servers/#enable) |
|
|
136
|
+
| Research taking a long time | Check whether subagents are generating outputs; could be slow model / API throttle / overcomplicated query / etc. |
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
CC BY-NC-ND 4.0
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: demo-skill
|
|
3
|
-
description: Demo skill showcasing the plugin skill integration system
|
|
4
|
-
allowedTools:
|
|
5
|
-
- Bash
|
|
6
|
-
- Read
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Demo Skill
|
|
10
|
-
|
|
11
|
-
This skill demonstrates the plugin skill integration system.
|
|
12
|
-
|
|
13
|
-
## Features Demonstrated
|
|
14
|
-
|
|
15
|
-
1. **Skill Discovery** - This skill is discovered from `plugin/skills/`
|
|
16
|
-
2. **allowedTools** - Listed above (documentation only)
|
|
17
|
-
3. **Bundled Resources** - Files in this directory are accessible
|
|
18
|
-
|
|
19
|
-
## Test Resource Resolution
|
|
20
|
-
|
|
21
|
-
Run the bundled script to verify resources are properly resolved:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
python demo_script.py
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Expected output:
|
|
28
|
-
```
|
|
29
|
-
Demo Skill - Resource Resolution Test
|
|
30
|
-
=====================================
|
|
31
|
-
Skill directory: <path to skill>
|
|
32
|
-
Status: Resources resolved correctly!
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## How It Works
|
|
36
|
-
|
|
37
|
-
1. Plugin builds with `npm run build`
|
|
38
|
-
2. `skills/` directory copied to `dist/skills/`
|
|
39
|
-
3. Skill tool discovers all `SKILL.md` files
|
|
40
|
-
4. Agent calls `skill` tool with skill name
|
|
41
|
-
5. Skill content + file list returned to agent
|
|
1
|
+
---
|
|
2
|
+
name: demo-skill
|
|
3
|
+
description: Demo skill showcasing the plugin skill integration system
|
|
4
|
+
allowedTools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Demo Skill
|
|
10
|
+
|
|
11
|
+
This skill demonstrates the plugin skill integration system.
|
|
12
|
+
|
|
13
|
+
## Features Demonstrated
|
|
14
|
+
|
|
15
|
+
1. **Skill Discovery** - This skill is discovered from `plugin/skills/`
|
|
16
|
+
2. **allowedTools** - Listed above (documentation only)
|
|
17
|
+
3. **Bundled Resources** - Files in this directory are accessible
|
|
18
|
+
|
|
19
|
+
## Test Resource Resolution
|
|
20
|
+
|
|
21
|
+
Run the bundled script to verify resources are properly resolved:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
python demo_script.py
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Expected output:
|
|
28
|
+
```
|
|
29
|
+
Demo Skill - Resource Resolution Test
|
|
30
|
+
=====================================
|
|
31
|
+
Skill directory: <path to skill>
|
|
32
|
+
Status: Resources resolved correctly!
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## How It Works
|
|
36
|
+
|
|
37
|
+
1. Plugin builds with `npm run build`
|
|
38
|
+
2. `skills/` directory copied to `dist/skills/`
|
|
39
|
+
3. Skill tool discovers all `SKILL.md` files
|
|
40
|
+
4. Agent calls `skill` tool with skill name
|
|
41
|
+
5. Skill content + file list returned to agent
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
"""Demo script to verify skill resource resolution."""
|
|
3
|
-
|
|
4
|
-
import os
|
|
5
|
-
import sys
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def main():
|
|
9
|
-
print("Demo Skill - Resource Resolution Test")
|
|
10
|
-
print("=" * 40)
|
|
11
|
-
print(f"Script location: {os.path.abspath(__file__)}")
|
|
12
|
-
print(f"Python version: {sys.version.split()[0]}")
|
|
13
|
-
print()
|
|
14
|
-
print("Status: Resources resolved correctly!")
|
|
15
|
-
print()
|
|
16
|
-
print("This confirms:")
|
|
17
|
-
print(" - Skill files bundled at build time")
|
|
18
|
-
print(" - Resources discoverable via skill tool")
|
|
19
|
-
print(" - Scripts executable from skill directory")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if __name__ == "__main__":
|
|
23
|
-
main()
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Demo script to verify skill resource resolution."""
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main():
|
|
9
|
+
print("Demo Skill - Resource Resolution Test")
|
|
10
|
+
print("=" * 40)
|
|
11
|
+
print(f"Script location: {os.path.abspath(__file__)}")
|
|
12
|
+
print(f"Python version: {sys.version.split()[0]}")
|
|
13
|
+
print()
|
|
14
|
+
print("Status: Resources resolved correctly!")
|
|
15
|
+
print()
|
|
16
|
+
print("This confirms:")
|
|
17
|
+
print(" - Skill files bundled at build time")
|
|
18
|
+
print(" - Resources discoverable via skill tool")
|
|
19
|
+
print(" - Scripts executable from skill directory")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
if __name__ == "__main__":
|
|
23
|
+
main()
|