@delta-infra/cli 1.0.98 → 1.1.0

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 (31) hide show
  1. package/README.md +469 -469
  2. package/checksums.txt +5 -5
  3. package/package.json +2 -2
  4. package/scripts/install-wizard.js +701 -701
  5. package/scripts/install.js +442 -442
  6. package/scripts/run.js +65 -65
  7. package/skills/delta-sandbox/SKILL.md +383 -344
  8. package/skills/delta-sandbox/agents/openai.yaml +4 -4
  9. package/skills/delta-sandbox/references/commands.md +58 -58
  10. package/skills/delta-sandbox/references/lifecycle.md +100 -100
  11. package/skills/delta-sandbox/references/recipes.md +138 -138
  12. package/skills/delta-science/AGENTS.md +41 -40
  13. package/skills/delta-science/SKILL.md +139 -139
  14. package/skills/delta-science/agents/openai.yaml +4 -4
  15. package/skills/delta-science/references/antbo.md +100 -100
  16. package/skills/delta-science/references/delta-bo.md +89 -89
  17. package/skills/delta-science/references/gsasii.md +116 -116
  18. package/skills/delta-science/references/lammps.md +66 -66
  19. package/skills/delta-science/references/ldm-bo.md +129 -129
  20. package/skills/delta-science/references/materials-design.md +109 -109
  21. package/skills/delta-science/references/pubchem.md +126 -126
  22. package/skills/delta-science/references/pymatgen.md +68 -68
  23. package/skills/delta-science/references/rdkit.md +138 -138
  24. package/skills/delta-science/references/strbo.md +87 -87
  25. package/skills/delta-science/references/synbo.md +198 -198
  26. package/skills/delta-science/scripts/catalog.py +92 -92
  27. package/skills/delta-science/scripts/generated_catalog.py +69 -69
  28. package/skills/delta-science/scripts/invoke.py +346 -346
  29. package/skills/delta-shared/SKILL.md +97 -97
  30. package/skills/delta-shared/agents/openai.yaml +4 -4
  31. package/skills/manifest.json +19 -19
@@ -1,126 +1,126 @@
1
- # PubChem 详细规则
2
-
3
- 只能通过 `delta-cli science invoke` 调用。本文件中的业务响应位于 CLI 顶层 `data`;
4
- 只按本文件说明读取字段,不得递归搜索。本文件中的 URL 只用于说明 endpoint schema,
5
- 不授权直接 HTTP。普通名称基础查询只调用一次 `compound-summary`;多个名称
6
- 只调用一次 `compound-batch-summary`,默认 body 仅包含 `identifiers` 和
7
- `namespace:"name"`,不得先调用 health/schema。
8
-
9
- 结果直接从 `data` 投影。批量记录位于 `data.results[*]`,原始标签在 `input`,
10
- 属性在嵌套 `properties`。SMILES 回退顺序固定为
11
- `CanonicalSMILES -> ConnectivitySMILES -> SMILES -> IsomericSMILES`。
12
- PubChem `XLogP` 与 RDKit `MolLogP` 不得互换;not_found 不得用本地计算补值。
13
-
14
- Namespaces: `cid`, `name`, `smiles`, `inchi`, `inchikey`, `formula`.
15
-
16
- ## Health
17
-
18
- operation:`health`,无 body。
19
-
20
- ## Resolve CIDs
21
-
22
- operation:`compound-resolve-cids`。
23
-
24
- ```json
25
- {"identifier": "aspirin", "namespace": "name", "max_records": 20}
26
- ```
27
-
28
- `max_records`: 1-100.
29
-
30
- ## Properties
31
-
32
- operation:`compound-properties`。
33
-
34
- ```json
35
- {
36
- "identifier": "2244",
37
- "namespace": "cid",
38
- "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "IUPACName"]
39
- }
40
- ```
41
-
42
- Allowed properties include `MolecularFormula`, `MolecularWeight`,
43
- `CanonicalSMILES`, `IsomericSMILES`, `SMILES`, `ConnectivitySMILES`,
44
- `IUPACName`, `InChI`, `InChIKey`, `XLogP`, `TPSA`, `HBondDonorCount`,
45
- `HBondAcceptorCount`, `RotatableBondCount`, `ExactMass`, `MonoisotopicMass`,
46
- `Charge`, `HeavyAtomCount`, `Complexity`, `CovalentUnitCount`,
47
- `DefinedAtomStereoCount`, `UndefinedAtomStereoCount`, `DefinedBondStereoCount`,
48
- `UndefinedBondStereoCount`, and `IsotopeAtomCount`.
49
-
50
- ## Synonyms
51
-
52
- operation:`compound-synonyms`。
53
-
54
- ```json
55
- {"identifier": "2244", "namespace": "cid", "max_synonyms": 50}
56
- ```
57
-
58
- `max_synonyms`: 1-500.
59
-
60
- ## Summary
61
-
62
- operation:`compound-summary`。
63
-
64
- ```json
65
- {
66
- "identifier": "aspirin",
67
- "namespace": "name",
68
- "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "IUPACName"],
69
- "synonym_limit": 20
70
- }
71
- ```
72
-
73
- `synonym_limit`: 0-100. Use this endpoint for general compound lookup because
74
- it resolves CID, selected properties, and synonyms in one call.
75
-
76
- Response fields include `valid`, `cid`, `properties`, `properties_raw`,
77
- `aliases`, `synonyms`, and `metadata`. Numeric properties are coerced to JSON
78
- numbers when possible. Requested SMILES aliases are filled when PubChem returns
79
- an equivalent key such as `ConnectivitySMILES`.
80
-
81
- ## Batch Summary
82
-
83
- operation:`compound-batch-summary`。
84
-
85
- ```json
86
- {
87
- "identifiers": ["aspirin", "ibuprofen", "caffeine"],
88
- "namespace": "name",
89
- "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "XLogP", "TPSA"],
90
- "synonym_limit": 5
91
- }
92
- ```
93
-
94
- Limits: 1-100 identifiers. The response preserves input order and includes
95
- per-item errors:
96
-
97
- ```json
98
- {
99
- "valid": false,
100
- "namespace": "name",
101
- "properties_requested": ["CanonicalSMILES"],
102
- "results": [
103
- {
104
- "input": "aspirin",
105
- "valid": true,
106
- "cid": 2244,
107
- "properties": {
108
- "CanonicalSMILES": "CC(=O)Oc1ccccc1C(=O)O",
109
- "ConnectivitySMILES": "CC(=O)Oc1ccccc1C(=O)O",
110
- "_aliases": {"CanonicalSMILES": "ConnectivitySMILES"},
111
- "properties_raw": {}
112
- },
113
- "properties_raw": {},
114
- "aliases": {"CanonicalSMILES": "ConnectivitySMILES"},
115
- "synonyms": []
116
- },
117
- {
118
- "input": "bad-name",
119
- "valid": false,
120
- "error": "not found"
121
- }
122
- ],
123
- "count": 2,
124
- "failed_count": 1
125
- }
126
- ```
1
+ # PubChem 详细规则
2
+
3
+ 只能通过 `delta-cli science invoke` 调用。本文件中的业务响应位于 CLI 顶层 `data`;
4
+ 只按本文件说明读取字段,不得递归搜索。本文件中的 URL 只用于说明 endpoint schema,
5
+ 不授权直接 HTTP。普通名称基础查询只调用一次 `compound-summary`;多个名称
6
+ 只调用一次 `compound-batch-summary`,默认 body 仅包含 `identifiers` 和
7
+ `namespace:"name"`,不得先调用 health/schema。
8
+
9
+ 结果直接从 `data` 投影。批量记录位于 `data.results[*]`,原始标签在 `input`,
10
+ 属性在嵌套 `properties`。SMILES 回退顺序固定为
11
+ `CanonicalSMILES -> ConnectivitySMILES -> SMILES -> IsomericSMILES`。
12
+ PubChem `XLogP` 与 RDKit `MolLogP` 不得互换;not_found 不得用本地计算补值。
13
+
14
+ Namespaces: `cid`, `name`, `smiles`, `inchi`, `inchikey`, `formula`.
15
+
16
+ ## Health
17
+
18
+ operation:`health`,无 body。
19
+
20
+ ## Resolve CIDs
21
+
22
+ operation:`compound-resolve-cids`。
23
+
24
+ ```json
25
+ {"identifier": "aspirin", "namespace": "name", "max_records": 20}
26
+ ```
27
+
28
+ `max_records`: 1-100.
29
+
30
+ ## Properties
31
+
32
+ operation:`compound-properties`。
33
+
34
+ ```json
35
+ {
36
+ "identifier": "2244",
37
+ "namespace": "cid",
38
+ "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "IUPACName"]
39
+ }
40
+ ```
41
+
42
+ Allowed properties include `MolecularFormula`, `MolecularWeight`,
43
+ `CanonicalSMILES`, `IsomericSMILES`, `SMILES`, `ConnectivitySMILES`,
44
+ `IUPACName`, `InChI`, `InChIKey`, `XLogP`, `TPSA`, `HBondDonorCount`,
45
+ `HBondAcceptorCount`, `RotatableBondCount`, `ExactMass`, `MonoisotopicMass`,
46
+ `Charge`, `HeavyAtomCount`, `Complexity`, `CovalentUnitCount`,
47
+ `DefinedAtomStereoCount`, `UndefinedAtomStereoCount`, `DefinedBondStereoCount`,
48
+ `UndefinedBondStereoCount`, and `IsotopeAtomCount`.
49
+
50
+ ## Synonyms
51
+
52
+ operation:`compound-synonyms`。
53
+
54
+ ```json
55
+ {"identifier": "2244", "namespace": "cid", "max_synonyms": 50}
56
+ ```
57
+
58
+ `max_synonyms`: 1-500.
59
+
60
+ ## Summary
61
+
62
+ operation:`compound-summary`。
63
+
64
+ ```json
65
+ {
66
+ "identifier": "aspirin",
67
+ "namespace": "name",
68
+ "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "IUPACName"],
69
+ "synonym_limit": 20
70
+ }
71
+ ```
72
+
73
+ `synonym_limit`: 0-100. Use this endpoint for general compound lookup because
74
+ it resolves CID, selected properties, and synonyms in one call.
75
+
76
+ Response fields include `valid`, `cid`, `properties`, `properties_raw`,
77
+ `aliases`, `synonyms`, and `metadata`. Numeric properties are coerced to JSON
78
+ numbers when possible. Requested SMILES aliases are filled when PubChem returns
79
+ an equivalent key such as `ConnectivitySMILES`.
80
+
81
+ ## Batch Summary
82
+
83
+ operation:`compound-batch-summary`。
84
+
85
+ ```json
86
+ {
87
+ "identifiers": ["aspirin", "ibuprofen", "caffeine"],
88
+ "namespace": "name",
89
+ "properties": ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "XLogP", "TPSA"],
90
+ "synonym_limit": 5
91
+ }
92
+ ```
93
+
94
+ Limits: 1-100 identifiers. The response preserves input order and includes
95
+ per-item errors:
96
+
97
+ ```json
98
+ {
99
+ "valid": false,
100
+ "namespace": "name",
101
+ "properties_requested": ["CanonicalSMILES"],
102
+ "results": [
103
+ {
104
+ "input": "aspirin",
105
+ "valid": true,
106
+ "cid": 2244,
107
+ "properties": {
108
+ "CanonicalSMILES": "CC(=O)Oc1ccccc1C(=O)O",
109
+ "ConnectivitySMILES": "CC(=O)Oc1ccccc1C(=O)O",
110
+ "_aliases": {"CanonicalSMILES": "ConnectivitySMILES"},
111
+ "properties_raw": {}
112
+ },
113
+ "properties_raw": {},
114
+ "aliases": {"CanonicalSMILES": "ConnectivitySMILES"},
115
+ "synonyms": []
116
+ },
117
+ {
118
+ "input": "bad-name",
119
+ "valid": false,
120
+ "error": "not found"
121
+ }
122
+ ],
123
+ "count": 2,
124
+ "failed_count": 1
125
+ }
126
+ ```
@@ -1,68 +1,68 @@
1
- # pymatgen 详细规则
2
-
3
- 所有调用直接使用 `delta-cli science invoke`。无机化学式、组成和式量优先使用 pymatgen,不用 PubChem
4
- 或本地元素表替代。结构 operation 必须发送完整结构文本,不能发送本地文件路径;
5
- 支持 `cif`、`poscar`、`json`、`cssr`、`xsf`,不接收 LAMMPS data/dump。
6
-
7
- ## Health
8
-
9
- operation:`health`,无 body。
10
-
11
- ## Composition Parse
12
-
13
- operation:`composition-parse`。
14
-
15
- ```json
16
- {"formula": "LiFePO4", "format": "formula"}
17
- ```
18
-
19
- Key response fields in `data`: `valid`, `formula`, `reduced_formula`,
20
- `alphabetic_formula`, `anonymous_formula`, `chemical_system`,
21
- `number_of_atoms`, `weight`, `element_amounts`, `atomic_fractions`,
22
- `weight_fractions`, `error`.
23
-
24
- ## Structure Parse / Summary
25
-
26
- operation:`structure-parse` 或 `structure-summary`。
27
-
28
- ```json
29
- {"input": "<CIF text>", "format": "cif", "primitive": false}
30
- ```
31
-
32
- Input formats: `cif`, `poscar`, `json`, `cssr`, `xsf`.
33
-
34
- Summary fields include `formula`, `reduced_formula`, `chemical_system`,
35
- `nsites`, `nelements`, `density`, `volume`, `lattice`, `element_amounts`, and
36
- `species`.
37
-
38
- ## Structure Convert
39
-
40
- operation:`structure-convert`。
41
-
42
- ```json
43
- {
44
- "input": "<CIF text>",
45
- "input_format": "cif",
46
- "output_format": "poscar",
47
- "primitive": false
48
- }
49
- ```
50
-
51
- Output formats: `cif`, `poscar`, `json`, `cssr`, `xsf`.
52
-
53
- ## Symmetry
54
-
55
- operation:`structure-symmetry`。
56
-
57
- ```json
58
- {
59
- "input": "<CIF text>",
60
- "format": "cif",
61
- "primitive": false,
62
- "symprec": 0.01,
63
- "angle_tolerance": 5.0
64
- }
65
- ```
66
-
67
- Returns `space_group_symbol`, `space_group_number`, `crystal_system`,
68
- `point_group_symbol`, `hall`, and `nsites`.
1
+ # pymatgen 详细规则
2
+
3
+ 所有调用直接使用 `delta-cli science invoke`。无机化学式、组成和式量优先使用 pymatgen,不用 PubChem
4
+ 或本地元素表替代。结构 operation 必须发送完整结构文本,不能发送本地文件路径;
5
+ 支持 `cif`、`poscar`、`json`、`cssr`、`xsf`,不接收 LAMMPS data/dump。
6
+
7
+ ## Health
8
+
9
+ operation:`health`,无 body。
10
+
11
+ ## Composition Parse
12
+
13
+ operation:`composition-parse`。
14
+
15
+ ```json
16
+ {"formula": "LiFePO4", "format": "formula"}
17
+ ```
18
+
19
+ Key response fields in `data`: `valid`, `formula`, `reduced_formula`,
20
+ `alphabetic_formula`, `anonymous_formula`, `chemical_system`,
21
+ `number_of_atoms`, `weight`, `element_amounts`, `atomic_fractions`,
22
+ `weight_fractions`, `error`.
23
+
24
+ ## Structure Parse / Summary
25
+
26
+ operation:`structure-parse` 或 `structure-summary`。
27
+
28
+ ```json
29
+ {"input": "<CIF text>", "format": "cif", "primitive": false}
30
+ ```
31
+
32
+ Input formats: `cif`, `poscar`, `json`, `cssr`, `xsf`.
33
+
34
+ Summary fields include `formula`, `reduced_formula`, `chemical_system`,
35
+ `nsites`, `nelements`, `density`, `volume`, `lattice`, `element_amounts`, and
36
+ `species`.
37
+
38
+ ## Structure Convert
39
+
40
+ operation:`structure-convert`。
41
+
42
+ ```json
43
+ {
44
+ "input": "<CIF text>",
45
+ "input_format": "cif",
46
+ "output_format": "poscar",
47
+ "primitive": false
48
+ }
49
+ ```
50
+
51
+ Output formats: `cif`, `poscar`, `json`, `cssr`, `xsf`.
52
+
53
+ ## Symmetry
54
+
55
+ operation:`structure-symmetry`。
56
+
57
+ ```json
58
+ {
59
+ "input": "<CIF text>",
60
+ "format": "cif",
61
+ "primitive": false,
62
+ "symprec": 0.01,
63
+ "angle_tolerance": 5.0
64
+ }
65
+ ```
66
+
67
+ Returns `space_group_symbol`, `space_group_number`, `crystal_system`,
68
+ `point_group_symbol`, `hall`, and `nsites`.
@@ -1,138 +1,138 @@
1
- # RDKit 详细规则
2
-
3
- 只能通过 `delta-cli science invoke` 调用。以下业务响应位于 CLI 顶层 `data`;只按本文件
4
- 说明读取字段,不得递归搜索。这里只记录 operation schema,不授权直接 HTTP。
5
-
6
- 一个请求只执行完成目标所需的最少调用。同时校验、规范化并计算基础描述符时使用一次
7
- `batch-parse-describe`,payload 使用 `molecules:[{id,smiles}]`,不得拆成 parse 和
8
- descriptors。多个分子的全对相似度使用一次 `similarity-matrix`;排名字段固定为
9
- `a`、`b`、`similarity`,不是 `i`、`j`、`score`。
10
-
11
- 只报告业务响应实际存在的描述符。渲染 PNG 时只解码文档指定字段,并验证字节以
12
- `89 50 4e 47 0d 0a 1a 0a` 开头;不得把 JSON envelope 保存成图片。
13
-
14
- ## Health
15
-
16
- operation:`health`,无 body。
17
-
18
- ## Parse
19
-
20
- operation:`parse`。
21
-
22
- ```json
23
- {"input": "CCO", "format": "smiles", "sanitize": true}
24
- ```
25
-
26
- Formats: `smiles`, `inchi`, `molblock`.
27
-
28
- Key response fields in `data`: `valid`, `canonical_smiles`, `formula`,
29
- `molecular_weight`, `exact_molecular_weight`, `inchi_key`, `atom_count`,
30
- `heavy_atom_count`, `bond_count`, `warnings`, `error`.
31
-
32
- ## Descriptors
33
-
34
- operation:`descriptors`。
35
-
36
- ```json
37
- {"smiles": "CCO", "descriptor_set": "basic", "sanitize": true}
38
- ```
39
-
40
- `descriptor_set` currently supports `basic`. Descriptor keys include `Formula`,
41
- `MolWt`, `ExactMolWt`, `HeavyAtomMolWt`, `TPSA`, `MolLogP`, `NumHDonors`,
42
- `NumHAcceptors`, `NumRotatableBonds`, `RingCount`, `FractionCSP3`,
43
- `HeavyAtomCount`, `AtomCount`, and `BondCount`.
44
-
45
- ## Batch Descriptors
46
-
47
- operation:`batch-descriptors`。
48
-
49
- ```json
50
- {"smiles": ["CCO", "c1ccccc1"], "descriptor_set": "basic", "sanitize": true}
51
- ```
52
-
53
- Limits: 1-500 SMILES.
54
-
55
- ## Batch Parse Describe
56
-
57
- operation:`batch-parse-describe`。
58
-
59
- ```json
60
- {
61
- "molecules": [
62
- {"id": "aspirin", "smiles": "CC(=O)Oc1ccccc1C(=O)O"},
63
- {"id": "caffeine", "smiles": "Cn1cnc2c1c(=O)n(C)c(=O)n2C"}
64
- ],
65
- "descriptor_set": "basic",
66
- "fingerprint": {"type": "morgan", "radius": 2, "n_bits": 2048},
67
- "sanitize": true
68
- }
69
- ```
70
-
71
- Limits: 1-500 molecules. Returns per-item `valid`, `canonical_smiles`, parse
72
- fields, `descriptors`, optional `fingerprint_metadata`, `on_bits`, `bit_count`,
73
- `warnings`, and `error`.
74
-
75
- ## Render
76
-
77
- operation:`render`。
78
-
79
- ```json
80
- {"smiles": "CCO", "image_format": "svg", "width": 450, "height": 320}
81
- ```
82
-
83
- Image formats: `svg`, `png`. SVG returns text; PNG returns base64.
84
- Width/height range: 150-2000.
85
-
86
- ## Fingerprint
87
-
88
- operation:`fingerprint`。
89
-
90
- ```json
91
- {"smiles": "CCO", "radius": 2, "n_bits": 2048}
92
- ```
93
-
94
- Morgan fingerprint parameters: `radius` 1-6, `n_bits` 128-8192.
95
-
96
- ## Similarity
97
-
98
- operation:`similarity`。
99
-
100
- ```json
101
- {"query_smiles": "CCO", "target_smiles": "CCCO", "radius": 2, "n_bits": 2048}
102
- ```
103
-
104
- Returns Tanimoto similarity.
105
-
106
- ## Similarity Matrix
107
-
108
- operation:`similarity-matrix`。
109
-
110
- ```json
111
- {
112
- "molecules": [
113
- {"id": "aspirin", "smiles": "CC(=O)Oc1ccccc1C(=O)O"},
114
- {"id": "ibuprofen", "smiles": "CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O"}
115
- ],
116
- "fingerprint": {"type": "morgan", "radius": 2, "n_bits": 2048},
117
- "sanitize": true
118
- }
119
- ```
120
-
121
- Returns `matrix` in input order and `ranked_pairs` sorted by descending
122
- Tanimoto similarity. Each ranked record is named, not index-based:
123
-
124
- ```json
125
- {"a":"aspirin","b":"ibuprofen","similarity":0.195122}
126
- ```
127
-
128
- Do not expect `i`, `j`, or `score` fields.
129
-
130
- ## Substructure
131
-
132
- operation:`substructure`。
133
-
134
- ```json
135
- {"query_smarts": "c1ccccc1", "target_smiles": ["c1ccccc1", "CCO"]}
136
- ```
137
-
138
- Limits: SMARTS max length 5000; target list size 1-500.
1
+ # RDKit 详细规则
2
+
3
+ 只能通过 `delta-cli science invoke` 调用。以下业务响应位于 CLI 顶层 `data`;只按本文件
4
+ 说明读取字段,不得递归搜索。这里只记录 operation schema,不授权直接 HTTP。
5
+
6
+ 一个请求只执行完成目标所需的最少调用。同时校验、规范化并计算基础描述符时使用一次
7
+ `batch-parse-describe`,payload 使用 `molecules:[{id,smiles}]`,不得拆成 parse 和
8
+ descriptors。多个分子的全对相似度使用一次 `similarity-matrix`;排名字段固定为
9
+ `a`、`b`、`similarity`,不是 `i`、`j`、`score`。
10
+
11
+ 只报告业务响应实际存在的描述符。渲染 PNG 时只解码文档指定字段,并验证字节以
12
+ `89 50 4e 47 0d 0a 1a 0a` 开头;不得把 JSON envelope 保存成图片。
13
+
14
+ ## Health
15
+
16
+ operation:`health`,无 body。
17
+
18
+ ## Parse
19
+
20
+ operation:`parse`。
21
+
22
+ ```json
23
+ {"input": "CCO", "format": "smiles", "sanitize": true}
24
+ ```
25
+
26
+ Formats: `smiles`, `inchi`, `molblock`.
27
+
28
+ Key response fields in `data`: `valid`, `canonical_smiles`, `formula`,
29
+ `molecular_weight`, `exact_molecular_weight`, `inchi_key`, `atom_count`,
30
+ `heavy_atom_count`, `bond_count`, `warnings`, `error`.
31
+
32
+ ## Descriptors
33
+
34
+ operation:`descriptors`。
35
+
36
+ ```json
37
+ {"smiles": "CCO", "descriptor_set": "basic", "sanitize": true}
38
+ ```
39
+
40
+ `descriptor_set` currently supports `basic`. Descriptor keys include `Formula`,
41
+ `MolWt`, `ExactMolWt`, `HeavyAtomMolWt`, `TPSA`, `MolLogP`, `NumHDonors`,
42
+ `NumHAcceptors`, `NumRotatableBonds`, `RingCount`, `FractionCSP3`,
43
+ `HeavyAtomCount`, `AtomCount`, and `BondCount`.
44
+
45
+ ## Batch Descriptors
46
+
47
+ operation:`batch-descriptors`。
48
+
49
+ ```json
50
+ {"smiles": ["CCO", "c1ccccc1"], "descriptor_set": "basic", "sanitize": true}
51
+ ```
52
+
53
+ Limits: 1-500 SMILES.
54
+
55
+ ## Batch Parse Describe
56
+
57
+ operation:`batch-parse-describe`。
58
+
59
+ ```json
60
+ {
61
+ "molecules": [
62
+ {"id": "aspirin", "smiles": "CC(=O)Oc1ccccc1C(=O)O"},
63
+ {"id": "caffeine", "smiles": "Cn1cnc2c1c(=O)n(C)c(=O)n2C"}
64
+ ],
65
+ "descriptor_set": "basic",
66
+ "fingerprint": {"type": "morgan", "radius": 2, "n_bits": 2048},
67
+ "sanitize": true
68
+ }
69
+ ```
70
+
71
+ Limits: 1-500 molecules. Returns per-item `valid`, `canonical_smiles`, parse
72
+ fields, `descriptors`, optional `fingerprint_metadata`, `on_bits`, `bit_count`,
73
+ `warnings`, and `error`.
74
+
75
+ ## Render
76
+
77
+ operation:`render`。
78
+
79
+ ```json
80
+ {"smiles": "CCO", "image_format": "svg", "width": 450, "height": 320}
81
+ ```
82
+
83
+ Image formats: `svg`, `png`. SVG returns text; PNG returns base64.
84
+ Width/height range: 150-2000.
85
+
86
+ ## Fingerprint
87
+
88
+ operation:`fingerprint`。
89
+
90
+ ```json
91
+ {"smiles": "CCO", "radius": 2, "n_bits": 2048}
92
+ ```
93
+
94
+ Morgan fingerprint parameters: `radius` 1-6, `n_bits` 128-8192.
95
+
96
+ ## Similarity
97
+
98
+ operation:`similarity`。
99
+
100
+ ```json
101
+ {"query_smiles": "CCO", "target_smiles": "CCCO", "radius": 2, "n_bits": 2048}
102
+ ```
103
+
104
+ Returns Tanimoto similarity.
105
+
106
+ ## Similarity Matrix
107
+
108
+ operation:`similarity-matrix`。
109
+
110
+ ```json
111
+ {
112
+ "molecules": [
113
+ {"id": "aspirin", "smiles": "CC(=O)Oc1ccccc1C(=O)O"},
114
+ {"id": "ibuprofen", "smiles": "CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O"}
115
+ ],
116
+ "fingerprint": {"type": "morgan", "radius": 2, "n_bits": 2048},
117
+ "sanitize": true
118
+ }
119
+ ```
120
+
121
+ Returns `matrix` in input order and `ranked_pairs` sorted by descending
122
+ Tanimoto similarity. Each ranked record is named, not index-based:
123
+
124
+ ```json
125
+ {"a":"aspirin","b":"ibuprofen","similarity":0.195122}
126
+ ```
127
+
128
+ Do not expect `i`, `j`, or `score` fields.
129
+
130
+ ## Substructure
131
+
132
+ operation:`substructure`。
133
+
134
+ ```json
135
+ {"query_smarts": "c1ccccc1", "target_smiles": ["c1ccccc1", "CCO"]}
136
+ ```
137
+
138
+ Limits: SMARTS max length 5000; target list size 1-500.