@yeyuan98/opencode-bioresearcher-plugin 1.5.0 → 1.5.2-alpha.2
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 +50 -50
- package/dist/agents/bioresearcher/prompt.d.ts +1 -1
- package/dist/agents/bioresearcher/prompt.js +235 -27
- package/dist/agents/bioresearcherDR/prompt.d.ts +1 -1
- package/dist/agents/bioresearcherDR/prompt.js +8 -8
- package/dist/agents/bioresearcherDR_worker/prompt.d.ts +3 -2
- package/dist/agents/bioresearcherDR_worker/prompt.js +37 -12
- package/dist/index.js +6 -6
- package/dist/shared/tool-restrictions.d.ts +2 -2
- package/dist/shared/tool-restrictions.js +4 -3
- package/dist/skills/bioresearcher-core/SKILL.md +58 -1
- package/dist/skills/bioresearcher-core/patterns/bioresearcher/analysis-methods.md +551 -0
- package/dist/skills/bioresearcher-core/patterns/bioresearcher/best-practices.md +647 -0
- package/dist/skills/bioresearcher-core/patterns/bioresearcher/python-standards.md +944 -0
- package/dist/skills/bioresearcher-core/patterns/bioresearcher/report-template.md +613 -0
- package/dist/skills/bioresearcher-core/patterns/bioresearcher/tool-selection.md +481 -0
- package/dist/skills/bioresearcher-core/patterns/citations.md +234 -0
- package/dist/skills/bioresearcher-core/patterns/rate-limiting.md +167 -0
- package/dist/skills/bioresearcher-tests/README.md +90 -0
- package/dist/skills/bioresearcher-tests/SKILL.md +255 -0
- package/dist/skills/bioresearcher-tests/pyproject.toml +6 -0
- package/dist/skills/bioresearcher-tests/resources/json_samples/in_markdown.md.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/json_samples/nested_object.json.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/json_samples/schema_draft7.json.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/json_samples/simple_array.json.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/json_samples/simple_object.json.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/obo_sample.obo.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/pubmed_sample.xml.gz +0 -0
- package/dist/skills/bioresearcher-tests/resources/table_sample.xlsx.gz +0 -0
- package/dist/skills/bioresearcher-tests/test_cases/json_tests.md +137 -0
- package/dist/skills/bioresearcher-tests/test_cases/misc_tests.md +141 -0
- package/dist/skills/bioresearcher-tests/test_cases/parser_tests.md +80 -0
- package/dist/skills/bioresearcher-tests/test_cases/skill_tests.md +59 -0
- package/dist/skills/bioresearcher-tests/test_cases/table_tests.md +194 -0
- package/dist/skills/bioresearcher-tests/test_runner.py +607 -0
- package/dist/skills/env-jsonc-setup/SKILL.md +206 -206
- package/dist/skills/long-table-summary/SKILL.md +117 -46
- package/dist/skills/long-table-summary/combine_outputs.py +55 -9
- package/dist/skills/long-table-summary/generate_prompts.py +9 -0
- package/dist/skills/pubmed-weekly/pubmed_weekly.py +130 -29
- package/dist/{db-tools → tools/db}/backends/mysql/translator.js +23 -23
- package/dist/{db-tools → tools/db}/tools.js +34 -34
- package/dist/{misc-tools → tools/misc}/json-validate.js +4 -5
- package/dist/tools/sandbox/bash-parser.d.ts +17 -0
- package/dist/tools/sandbox/bash-parser.js +166 -0
- package/dist/tools/sandbox/escape-scenarios.test.d.ts +7 -0
- package/dist/tools/sandbox/escape-scenarios.test.js +182 -0
- package/dist/tools/sandbox/expander.d.ts +30 -0
- package/dist/tools/sandbox/expander.js +57 -0
- package/dist/tools/sandbox/final-verification.test.d.ts +6 -0
- package/dist/tools/sandbox/final-verification.test.js +70 -0
- package/dist/tools/sandbox/hooks.d.ts +25 -0
- package/dist/tools/sandbox/hooks.js +217 -0
- package/dist/tools/sandbox/index.d.ts +19 -0
- package/dist/tools/sandbox/index.js +24 -0
- package/dist/tools/sandbox/manager.d.ts +60 -0
- package/dist/tools/sandbox/manager.js +113 -0
- package/dist/tools/sandbox/sandbox.integration.test.d.ts +7 -0
- package/dist/tools/sandbox/sandbox.integration.test.js +106 -0
- package/dist/tools/sandbox/sandbox.test.d.ts +6 -0
- package/dist/tools/sandbox/sandbox.test.js +160 -0
- package/dist/tools/sandbox/tool.d.ts +66 -0
- package/dist/tools/sandbox/tool.js +163 -0
- package/dist/tools/sandbox/types.d.ts +38 -0
- package/dist/tools/sandbox/types.js +6 -0
- package/dist/tools/sandbox/validator.d.ts +33 -0
- package/dist/tools/sandbox/validator.js +150 -0
- package/dist/{skill-tools → tools/skill}/registry.js +1 -2
- package/dist/{table-tools → tools/table}/utils.js +4 -4
- package/package.json +1 -1
- package/dist/db-tools/executor.d.ts +0 -13
- package/dist/db-tools/executor.js +0 -54
- package/dist/db-tools/pool.d.ts +0 -8
- package/dist/db-tools/pool.js +0 -49
- package/dist/db-tools/tools/index.d.ts +0 -27
- package/dist/db-tools/tools/index.js +0 -191
- package/dist/db-tools/types.d.ts +0 -94
- package/dist/db-tools/types.js +0 -40
- package/dist/misc-tools/json-tools.d.ts +0 -33
- package/dist/misc-tools/json-tools.js +0 -187
- package/dist/skill/frontmatter.d.ts +0 -2
- package/dist/skill/frontmatter.js +0 -65
- package/dist/skill/index.d.ts +0 -3
- package/dist/skill/index.js +0 -2
- package/dist/skill/registry.d.ts +0 -11
- package/dist/skill/registry.js +0 -64
- package/dist/skill/tool.d.ts +0 -9
- package/dist/skill/tool.js +0 -115
- package/dist/skill/types.d.ts +0 -22
- package/dist/skill/types.js +0 -7
- /package/dist/{db-tools → tools/db}/backends/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/index.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/backend.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/backend.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/connection.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/connection.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/index.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/translator.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mongodb/translator.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/backend.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/backend.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/connection.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/connection.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/index.js +0 -0
- /package/dist/{db-tools → tools/db}/backends/mysql/translator.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/base.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/base.js +0 -0
- /package/dist/{db-tools → tools/db}/core/config-loader.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/config-loader.js +0 -0
- /package/dist/{db-tools → tools/db}/core/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/index.js +0 -0
- /package/dist/{db-tools → tools/db}/core/jsonc-parser.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/jsonc-parser.js +0 -0
- /package/dist/{db-tools → tools/db}/core/validator.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/core/validator.js +0 -0
- /package/dist/{db-tools → tools/db}/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/index.js +0 -0
- /package/dist/{db-tools → tools/db}/interface/backend.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/interface/backend.js +0 -0
- /package/dist/{db-tools → tools/db}/interface/connection.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/interface/connection.js +0 -0
- /package/dist/{db-tools → tools/db}/interface/index.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/interface/index.js +0 -0
- /package/dist/{db-tools → tools/db}/interface/query.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/interface/query.js +0 -0
- /package/dist/{db-tools → tools/db}/interface/schema.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/interface/schema.js +0 -0
- /package/dist/{db-tools → tools/db}/tools.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/utils.d.ts +0 -0
- /package/dist/{db-tools → tools/db}/utils.js +0 -0
- /package/dist/{misc-tools → tools/misc}/calculator.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/calculator.js +0 -0
- /package/dist/{misc-tools → tools/misc}/index.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/index.js +0 -0
- /package/dist/{misc-tools → tools/misc}/json-extract.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/json-extract.js +0 -0
- /package/dist/{misc-tools → tools/misc}/json-infer.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/json-infer.js +0 -0
- /package/dist/{misc-tools → tools/misc}/json-validate.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/timer.d.ts +0 -0
- /package/dist/{misc-tools → tools/misc}/timer.js +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/index.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/index.js +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/obo.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/obo.js +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/types.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/types.js +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/utils.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/obo/utils.js +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/index.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/index.js +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/pubmed.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/pubmed.js +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/types.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/types.js +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/utils.d.ts +0 -0
- /package/dist/{parser-tools → tools/parser}/pubmed/utils.js +0 -0
- /package/dist/{skill-tools → tools/skill}/frontmatter.d.ts +0 -0
- /package/dist/{skill-tools → tools/skill}/frontmatter.js +0 -0
- /package/dist/{skill-tools → tools/skill}/index.d.ts +0 -0
- /package/dist/{skill-tools → tools/skill}/index.js +0 -0
- /package/dist/{skill-tools → tools/skill}/registry.d.ts +0 -0
- /package/dist/{skill-tools → tools/skill}/tool.d.ts +0 -0
- /package/dist/{skill-tools → tools/skill}/tool.js +0 -0
- /package/dist/{skill-tools → tools/skill}/types.d.ts +0 -0
- /package/dist/{skill-tools → tools/skill}/types.js +0 -0
- /package/dist/{table-tools → tools/table}/index.d.ts +0 -0
- /package/dist/{table-tools → tools/table}/index.js +0 -0
- /package/dist/{table-tools → tools/table}/tools.d.ts +0 -0
- /package/dist/{table-tools → tools/table}/tools.js +0 -0
- /package/dist/{table-tools → tools/table}/utils.d.ts +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Miscellaneous Tool Tests
|
|
2
|
+
|
|
3
|
+
## Test: Timer - Short Delay
|
|
4
|
+
- Tool: blockingTimer
|
|
5
|
+
- Input:
|
|
6
|
+
```json
|
|
7
|
+
{"delay": 1}
|
|
8
|
+
```
|
|
9
|
+
- Validators:
|
|
10
|
+
- contains_string("Timer completed")
|
|
11
|
+
- contains_string("1 seconds")
|
|
12
|
+
- Expected: Timer completed message after 1 second
|
|
13
|
+
|
|
14
|
+
## Test: Timer - Zero Delay
|
|
15
|
+
- Tool: blockingTimer
|
|
16
|
+
- Input:
|
|
17
|
+
```json
|
|
18
|
+
{"delay": 0}
|
|
19
|
+
```
|
|
20
|
+
- Validators:
|
|
21
|
+
- contains_string("Timer completed")
|
|
22
|
+
- Expected: Immediate completion
|
|
23
|
+
|
|
24
|
+
## Test: Timer - Max Exceeded
|
|
25
|
+
- Tool: blockingTimer
|
|
26
|
+
- Input:
|
|
27
|
+
```json
|
|
28
|
+
{"delay": 301}
|
|
29
|
+
```
|
|
30
|
+
- Validators:
|
|
31
|
+
- contains_string("300")
|
|
32
|
+
- contains_string("NOT exceed")
|
|
33
|
+
- Expected: Error about max delay exceeded
|
|
34
|
+
|
|
35
|
+
## Test: Calculator - Basic Arithmetic
|
|
36
|
+
- Tool: calculator
|
|
37
|
+
- Input:
|
|
38
|
+
```json
|
|
39
|
+
{"formula": "2 + 3 * 4", "precision": 3}
|
|
40
|
+
```
|
|
41
|
+
- Validators:
|
|
42
|
+
- has result
|
|
43
|
+
- result === 14
|
|
44
|
+
- Expected: 14 (order of operations: 3*4=12, 2+12=14)
|
|
45
|
+
|
|
46
|
+
## Test: Calculator - Power
|
|
47
|
+
- Tool: calculator
|
|
48
|
+
- Input:
|
|
49
|
+
```json
|
|
50
|
+
{"formula": "2 ^ 10", "precision": 0}
|
|
51
|
+
```
|
|
52
|
+
- Validators:
|
|
53
|
+
- has result
|
|
54
|
+
- result === 1024
|
|
55
|
+
- Expected: 1024 (2 to power of 10)
|
|
56
|
+
|
|
57
|
+
## Test: Calculator - Brackets
|
|
58
|
+
- Tool: calculator
|
|
59
|
+
- Input:
|
|
60
|
+
```json
|
|
61
|
+
{"formula": "(2 + 3) * 4", "precision": 3}
|
|
62
|
+
```
|
|
63
|
+
- Validators:
|
|
64
|
+
- has result
|
|
65
|
+
- result === 20
|
|
66
|
+
- Expected: 20 (brackets first: 5*4=20)
|
|
67
|
+
|
|
68
|
+
## Test: Calculator - Scientific Notation
|
|
69
|
+
- Tool: calculator
|
|
70
|
+
- Input:
|
|
71
|
+
```json
|
|
72
|
+
{"formula": "1e3 + 500", "precision": 3}
|
|
73
|
+
```
|
|
74
|
+
- Validators:
|
|
75
|
+
- has result
|
|
76
|
+
- result === 1500
|
|
77
|
+
- Expected: 1500 (1000 + 500)
|
|
78
|
+
|
|
79
|
+
## Test: Calculator - Division by Zero
|
|
80
|
+
- Tool: calculator
|
|
81
|
+
- Input:
|
|
82
|
+
```json
|
|
83
|
+
{"formula": "1 / 0", "precision": 3}
|
|
84
|
+
```
|
|
85
|
+
- Validators:
|
|
86
|
+
- contains_string("CALCULATOR ERROR")
|
|
87
|
+
- Expected: Error about division by zero
|
|
88
|
+
|
|
89
|
+
## Test: Calculator - Invalid Syntax
|
|
90
|
+
- Tool: calculator
|
|
91
|
+
- Input:
|
|
92
|
+
```json
|
|
93
|
+
{"formula": "2(3)", "precision": 3}
|
|
94
|
+
```
|
|
95
|
+
- Validators:
|
|
96
|
+
- contains_string("CALCULATOR ERROR")
|
|
97
|
+
- contains_string("parentheses")
|
|
98
|
+
- Expected: Error about implicit multiplication not allowed
|
|
99
|
+
|
|
100
|
+
## Test: Calculator - Precision
|
|
101
|
+
- Tool: calculator
|
|
102
|
+
- Input:
|
|
103
|
+
```json
|
|
104
|
+
{"formula": "10 / 3", "precision": 2}
|
|
105
|
+
```
|
|
106
|
+
- Validators:
|
|
107
|
+
- has result
|
|
108
|
+
- result === 3.33
|
|
109
|
+
- Expected: 3.33 (2 decimal places)
|
|
110
|
+
|
|
111
|
+
## Test: Timer - Exact Boundary
|
|
112
|
+
- Tool: blockingTimer
|
|
113
|
+
- Input:
|
|
114
|
+
```json
|
|
115
|
+
{"delay": 300}
|
|
116
|
+
```
|
|
117
|
+
- Validators:
|
|
118
|
+
- contains_string("Timer completed")
|
|
119
|
+
- Expected: Timer completes at exact max boundary (300s)
|
|
120
|
+
|
|
121
|
+
## Test: Calculator - Empty Formula
|
|
122
|
+
- Tool: calculator
|
|
123
|
+
- Input:
|
|
124
|
+
```json
|
|
125
|
+
{"formula": "", "precision": 3}
|
|
126
|
+
```
|
|
127
|
+
- Validators:
|
|
128
|
+
- contains_string("CALCULATOR ERROR")
|
|
129
|
+
- contains_string("empty")
|
|
130
|
+
- Expected: Error about empty formula
|
|
131
|
+
|
|
132
|
+
## Test: Calculator - Invalid Characters
|
|
133
|
+
- Tool: calculator
|
|
134
|
+
- Input:
|
|
135
|
+
```json
|
|
136
|
+
{"formula": "2 + abc", "precision": 3}
|
|
137
|
+
```
|
|
138
|
+
- Validators:
|
|
139
|
+
- contains_string("CALCULATOR ERROR")
|
|
140
|
+
- contains_string("invalid characters")
|
|
141
|
+
- Expected: Error about invalid characters
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Parser Tool Tests
|
|
2
|
+
|
|
3
|
+
## Test: PubMed XML - Single Mode
|
|
4
|
+
- Tool: parse_pubmed_articleSet
|
|
5
|
+
- Input:
|
|
6
|
+
```json
|
|
7
|
+
{"filePath": ".bioresearcher-tests/workspace/pubmed_sample.xml", "outputMode": "single", "verbose": false}
|
|
8
|
+
```
|
|
9
|
+
- Validators:
|
|
10
|
+
- success_is_true
|
|
11
|
+
- file_exists
|
|
12
|
+
- stats.total === 2
|
|
13
|
+
- stats.successful === 2
|
|
14
|
+
- Expected: Single markdown file with 2 articles
|
|
15
|
+
|
|
16
|
+
## Test: PubMed XML - Excel Mode
|
|
17
|
+
- Tool: parse_pubmed_articleSet
|
|
18
|
+
- Input:
|
|
19
|
+
```json
|
|
20
|
+
{"filePath": ".bioresearcher-tests/workspace/pubmed_sample.xml", "outputMode": "excel", "outputFileName": "pubmed_test.xlsx", "verbose": false}
|
|
21
|
+
```
|
|
22
|
+
- Validators:
|
|
23
|
+
- success_is_true
|
|
24
|
+
- file_exists
|
|
25
|
+
- file ends with .xlsx
|
|
26
|
+
- Expected: Excel file with PMID, Title, Authors, Journal, DOI, Abstract, Keywords columns
|
|
27
|
+
|
|
28
|
+
## Test: PubMed XML - Individual Mode
|
|
29
|
+
- Tool: parse_pubmed_articleSet
|
|
30
|
+
- Input:
|
|
31
|
+
```json
|
|
32
|
+
{"filePath": ".bioresearcher-tests/workspace/pubmed_sample.xml", "outputMode": "individual", "verbose": false}
|
|
33
|
+
```
|
|
34
|
+
- Validators:
|
|
35
|
+
- success_is_true
|
|
36
|
+
- directory exists
|
|
37
|
+
- Expected: Directory with individual .md files per article
|
|
38
|
+
|
|
39
|
+
## Test: OBO - Basic Parsing
|
|
40
|
+
- Tool: parse_obo_file
|
|
41
|
+
- Input:
|
|
42
|
+
```json
|
|
43
|
+
{"filePath": ".bioresearcher-tests/workspace/obo_sample.obo", "outputFileName": "obo_test.csv", "verbose": false}
|
|
44
|
+
```
|
|
45
|
+
- Validators:
|
|
46
|
+
- success_is_true
|
|
47
|
+
- file_exists
|
|
48
|
+
- stats.terms >= 3
|
|
49
|
+
- Expected: CSV file with term data
|
|
50
|
+
|
|
51
|
+
## Test: PubMed - Nonexistent File
|
|
52
|
+
- Tool: parse_pubmed_articleSet
|
|
53
|
+
- Input:
|
|
54
|
+
```json
|
|
55
|
+
{"filePath": ".bioresearcher-tests/workspace/nonexistent.xml", "outputMode": "single"}
|
|
56
|
+
```
|
|
57
|
+
- Validators:
|
|
58
|
+
- contains_string("error")
|
|
59
|
+
- Expected: Error response
|
|
60
|
+
|
|
61
|
+
## Test: PubMed - Compressed Input
|
|
62
|
+
- Tool: parse_pubmed_articleSet
|
|
63
|
+
- Input:
|
|
64
|
+
```json
|
|
65
|
+
{"filePath": "<skill_path>/resources/pubmed_sample.xml.gz", "outputMode": "single", "verbose": false}
|
|
66
|
+
```
|
|
67
|
+
- Validators:
|
|
68
|
+
- success_is_true
|
|
69
|
+
- stats.total === 2
|
|
70
|
+
- Expected: Handles .xml.gz compressed files directly
|
|
71
|
+
|
|
72
|
+
## Test: OBO - Nonexistent File
|
|
73
|
+
- Tool: parse_obo_file
|
|
74
|
+
- Input:
|
|
75
|
+
```json
|
|
76
|
+
{"filePath": ".bioresearcher-tests/workspace/nonexistent.obo", "outputFileName": "test.csv", "verbose": false}
|
|
77
|
+
```
|
|
78
|
+
- Validators:
|
|
79
|
+
- contains_string("error")
|
|
80
|
+
- Expected: Error response for file not found
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Skill Tests
|
|
2
|
+
|
|
3
|
+
## Test: Load demo-skill
|
|
4
|
+
- Tool: skill
|
|
5
|
+
- Input:
|
|
6
|
+
```json
|
|
7
|
+
{"name": "demo-skill"}
|
|
8
|
+
```
|
|
9
|
+
- Validators:
|
|
10
|
+
- contains_string("skill_content")
|
|
11
|
+
- contains_string("demo-skill")
|
|
12
|
+
- Expected: Skill content loaded successfully
|
|
13
|
+
|
|
14
|
+
## Test: Load bioresearcher-core
|
|
15
|
+
- Tool: skill
|
|
16
|
+
- Input:
|
|
17
|
+
```json
|
|
18
|
+
{"name": "bioresearcher-core"}
|
|
19
|
+
```
|
|
20
|
+
- Validators:
|
|
21
|
+
- contains_string("skill_content")
|
|
22
|
+
- contains_string("bioresearcher-core")
|
|
23
|
+
- contains_string("allowed_tools")
|
|
24
|
+
- Expected: Skill content with allowedTools list
|
|
25
|
+
|
|
26
|
+
## Test: Execute demo-skill Script
|
|
27
|
+
- Tool: Bash
|
|
28
|
+
- Prerequisite: Load skill demo-skill first, extract skill_path
|
|
29
|
+
- Input:
|
|
30
|
+
```bash
|
|
31
|
+
cd <skill_path>/../demo-skill && python demo_script.py
|
|
32
|
+
```
|
|
33
|
+
- Validators:
|
|
34
|
+
- contains_string("Resources resolved")
|
|
35
|
+
- Expected: Demo script executes successfully
|
|
36
|
+
|
|
37
|
+
## Test: Skill Not Found
|
|
38
|
+
- Tool: skill
|
|
39
|
+
- Input:
|
|
40
|
+
```json
|
|
41
|
+
{"name": "nonexistent-skill-xyz-12345"}
|
|
42
|
+
```
|
|
43
|
+
- Validators:
|
|
44
|
+
- contains_string("not found")
|
|
45
|
+
- Expected: Error with available skills list
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Skipped: Skills with User Interaction
|
|
50
|
+
|
|
51
|
+
The following skills are NOT tested because they use the Question tool
|
|
52
|
+
and require user interaction during execution:
|
|
53
|
+
|
|
54
|
+
- `python-setup-uv` - Uses Question tool for installer choice and AGENTS.md update
|
|
55
|
+
- `long-table-summary` - Uses Question tool for table location, instructions, batch size
|
|
56
|
+
- `env-jsonc-setup` - Uses Question tool for configuration options
|
|
57
|
+
- `pubmed-weekly` - May use Question tool for download options
|
|
58
|
+
|
|
59
|
+
These skills are tested for metadata only (loading succeeds, content returned).
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Table Tool Tests
|
|
2
|
+
|
|
3
|
+
## Test: List Sheets
|
|
4
|
+
- Tool: tableListSheets
|
|
5
|
+
- Input:
|
|
6
|
+
```json
|
|
7
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx"}
|
|
8
|
+
```
|
|
9
|
+
- Validators:
|
|
10
|
+
- has sheets array
|
|
11
|
+
- array_length >= 1
|
|
12
|
+
- Expected: List of sheet names
|
|
13
|
+
|
|
14
|
+
## Test: Get Sheet Preview
|
|
15
|
+
- Tool: tableGetSheetPreview
|
|
16
|
+
- Input:
|
|
17
|
+
```json
|
|
18
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx"}
|
|
19
|
+
```
|
|
20
|
+
- Validators:
|
|
21
|
+
- has preview array
|
|
22
|
+
- has total_rows
|
|
23
|
+
- Expected: First 6 rows preview
|
|
24
|
+
|
|
25
|
+
## Test: Get Headers
|
|
26
|
+
- Tool: tableGetHeaders
|
|
27
|
+
- Input:
|
|
28
|
+
```json
|
|
29
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx"}
|
|
30
|
+
```
|
|
31
|
+
- Validators:
|
|
32
|
+
- has headers array
|
|
33
|
+
- headers includes "Name"
|
|
34
|
+
- Expected: Column headers
|
|
35
|
+
|
|
36
|
+
## Test: Get Cell
|
|
37
|
+
- Tool: tableGetCell
|
|
38
|
+
- Input:
|
|
39
|
+
```json
|
|
40
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "cell_address": "A1"}
|
|
41
|
+
```
|
|
42
|
+
- Validators:
|
|
43
|
+
- has value
|
|
44
|
+
- has type
|
|
45
|
+
- Expected: Cell A1 value
|
|
46
|
+
|
|
47
|
+
## Test: Get Range
|
|
48
|
+
- Tool: tableGetRange
|
|
49
|
+
- Input:
|
|
50
|
+
```json
|
|
51
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "range": "A1:C3"}
|
|
52
|
+
```
|
|
53
|
+
- Validators:
|
|
54
|
+
- has data array
|
|
55
|
+
- rows === 3
|
|
56
|
+
- columns === 3
|
|
57
|
+
- Expected: 3x3 data array
|
|
58
|
+
|
|
59
|
+
## Test: Filter Rows
|
|
60
|
+
- Tool: tableFilterRows
|
|
61
|
+
- Input:
|
|
62
|
+
```json
|
|
63
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "column": "Age", "operator": ">", "value": 25, "max_results": 100}
|
|
64
|
+
```
|
|
65
|
+
- Validators:
|
|
66
|
+
- has matched_rows
|
|
67
|
+
- has total_matches
|
|
68
|
+
- Expected: Filtered rows where Age > 25
|
|
69
|
+
|
|
70
|
+
## Test: Search
|
|
71
|
+
- Tool: tableSearch
|
|
72
|
+
- Input:
|
|
73
|
+
```json
|
|
74
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "search_term": "Active", "max_results": 50}
|
|
75
|
+
```
|
|
76
|
+
- Validators:
|
|
77
|
+
- has results array
|
|
78
|
+
- has total_found
|
|
79
|
+
- Expected: Cells containing "Active"
|
|
80
|
+
|
|
81
|
+
## Test: Summarize
|
|
82
|
+
- Tool: tableSummarize
|
|
83
|
+
- Input:
|
|
84
|
+
```json
|
|
85
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "columns": ["Age", "Score"]}
|
|
86
|
+
```
|
|
87
|
+
- Validators:
|
|
88
|
+
- has summaries object
|
|
89
|
+
- Expected: Statistical summary with sum, avg, min, max, std_dev
|
|
90
|
+
|
|
91
|
+
## Test: Group By
|
|
92
|
+
- Tool: tableGroupBy
|
|
93
|
+
- Input:
|
|
94
|
+
```json
|
|
95
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "group_column": "Category", "agg_column": "Score", "agg_type": "avg"}
|
|
96
|
+
```
|
|
97
|
+
- Validators:
|
|
98
|
+
- has groups object
|
|
99
|
+
- Expected: Grouped averages by Category
|
|
100
|
+
|
|
101
|
+
## Test: Create File
|
|
102
|
+
- Tool: tableCreateFile
|
|
103
|
+
- Input:
|
|
104
|
+
```json
|
|
105
|
+
{"file_path": ".bioresearcher-tests/workspace/output_created.xlsx", "sheet_name": "TestData", "data": [{"Name": "Alice", "Age": 30}, {"Name": "Bob", "Age": 25}]}
|
|
106
|
+
```
|
|
107
|
+
- Validators:
|
|
108
|
+
- success_is_true
|
|
109
|
+
- rows_created === 2
|
|
110
|
+
- Expected: New Excel file created with 2 rows
|
|
111
|
+
|
|
112
|
+
## Test: Append Rows
|
|
113
|
+
- Tool: tableAppendRows
|
|
114
|
+
- Prerequisite: Test "Create File" must pass first
|
|
115
|
+
- Input:
|
|
116
|
+
```json
|
|
117
|
+
{"file_path": ".bioresearcher-tests/workspace/output_created.xlsx", "rows": [{"Name": "Charlie", "Age": 35}]}
|
|
118
|
+
```
|
|
119
|
+
- Validators:
|
|
120
|
+
- success_is_true
|
|
121
|
+
- rows_appended === 1
|
|
122
|
+
- Expected: Row appended to existing file
|
|
123
|
+
|
|
124
|
+
## Test: Update Cell
|
|
125
|
+
- Tool: tableUpdateCell
|
|
126
|
+
- Prerequisite: Test "Create File" must pass first
|
|
127
|
+
- Input:
|
|
128
|
+
```json
|
|
129
|
+
{"file_path": ".bioresearcher-tests/workspace/output_created.xlsx", "cell_address": "A1", "value": "UpdatedName"}
|
|
130
|
+
```
|
|
131
|
+
- Validators:
|
|
132
|
+
- success_is_true
|
|
133
|
+
- Expected: Cell A1 updated to "UpdatedName"
|
|
134
|
+
|
|
135
|
+
## Test: Pivot Summary
|
|
136
|
+
- Tool: tablePivotSummary
|
|
137
|
+
- Input:
|
|
138
|
+
```json
|
|
139
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "row_field": "Category", "col_field": "Status", "value_field": "Score", "agg": "sum"}
|
|
140
|
+
```
|
|
141
|
+
- Validators:
|
|
142
|
+
- has pivot object
|
|
143
|
+
- has columns array
|
|
144
|
+
- Expected: Pivot table with Category rows, Status columns, Score sums
|
|
145
|
+
|
|
146
|
+
## Test: Nonexistent File
|
|
147
|
+
- Tool: tableListSheets
|
|
148
|
+
- Input:
|
|
149
|
+
```json
|
|
150
|
+
{"file_path": ".bioresearcher-tests/workspace/nonexistent.xlsx"}
|
|
151
|
+
```
|
|
152
|
+
- Validators:
|
|
153
|
+
- contains_string("Error")
|
|
154
|
+
- Expected: Error response for file not found
|
|
155
|
+
|
|
156
|
+
## Test: Invalid Cell Address
|
|
157
|
+
- Tool: tableGetCell
|
|
158
|
+
- Input:
|
|
159
|
+
```json
|
|
160
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "cell_address": "INVALID"}
|
|
161
|
+
```
|
|
162
|
+
- Validators:
|
|
163
|
+
- contains_string("Error")
|
|
164
|
+
- Expected: Error response for invalid address
|
|
165
|
+
|
|
166
|
+
## Test: Invalid Filter Operator
|
|
167
|
+
- Tool: tableFilterRows
|
|
168
|
+
- Input:
|
|
169
|
+
```json
|
|
170
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "column": "Age", "operator": "INVALID", "value": 25, "max_results": 100}
|
|
171
|
+
```
|
|
172
|
+
- Validators:
|
|
173
|
+
- contains_string("Error")
|
|
174
|
+
- Expected: Error response for invalid operator
|
|
175
|
+
|
|
176
|
+
## Test: Nonexistent Column
|
|
177
|
+
- Tool: tableSummarize
|
|
178
|
+
- Input:
|
|
179
|
+
```json
|
|
180
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "columns": ["NonexistentColumn"]}
|
|
181
|
+
```
|
|
182
|
+
- Validators:
|
|
183
|
+
- has summaries object
|
|
184
|
+
- Expected: Empty summaries (graceful handling)
|
|
185
|
+
|
|
186
|
+
## Test: Out of Bounds Range
|
|
187
|
+
- Tool: tableGetRange
|
|
188
|
+
- Input:
|
|
189
|
+
```json
|
|
190
|
+
{"file_path": ".bioresearcher-tests/workspace/table_sample.xlsx", "range": "Z999:ZZ999"}
|
|
191
|
+
```
|
|
192
|
+
- Validators:
|
|
193
|
+
- has data array
|
|
194
|
+
- Expected: Empty data array (out of bounds handled)
|