@delta-infra/cli 1.1.17 → 1.1.19

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 (77) hide show
  1. package/README.md +520 -506
  2. package/checksums.txt +5 -5
  3. package/package.json +3 -2
  4. package/scripts/install-wizard.js +688 -701
  5. package/scripts/install.js +442 -442
  6. package/scripts/run.js +65 -65
  7. package/skills/delta-protein/AGENTS.md +73 -0
  8. package/skills/delta-protein/SKILL.md +389 -0
  9. package/skills/delta-protein/agents/openai.yaml +4 -0
  10. package/skills/delta-protein/references/bfitter.md +64 -0
  11. package/skills/delta-protein/references/catapro_predict.md +63 -0
  12. package/skills/delta-protein/references/catpred_predict.md +65 -0
  13. package/skills/delta-protein/references/caver_tunnel_analyze.md +63 -0
  14. package/skills/delta-protein/references/consensus_mutation.md +61 -0
  15. package/skills/delta-protein/references/consurf_predict.md +67 -0
  16. package/skills/delta-protein/references/crop_sequence.md +69 -0
  17. package/skills/delta-protein/references/dock.md +82 -0
  18. package/skills/delta-protein/references/dock_score.md +70 -0
  19. package/skills/delta-protein/references/easifa_predict_active_site.md +70 -0
  20. package/skills/delta-protein/references/ephod_predict_mutation.md +66 -0
  21. package/skills/delta-protein/references/ephod_predict_protein.md +61 -0
  22. package/skills/delta-protein/references/esmfold2_predict.md +67 -0
  23. package/skills/delta-protein/references/evcouplings_mutation.md +64 -0
  24. package/skills/delta-protein/references/fasta_to_sequence.md +59 -0
  25. package/skills/delta-protein/references/foldseek.md +61 -0
  26. package/skills/delta-protein/references/generate_msa.md +61 -0
  27. package/skills/delta-protein/references/interpro_analyze.md +63 -0
  28. package/skills/delta-protein/references/mpnn_design_sequence.md +71 -0
  29. package/skills/delta-protein/references/multievolve.md +73 -0
  30. package/skills/delta-protein/references/pisa_query.md +70 -0
  31. package/skills/delta-protein/references/plip_analyze.md +65 -0
  32. package/skills/delta-protein/references/pocket_prediction.md +63 -0
  33. package/skills/delta-protein/references/protein_design.md +65 -0
  34. package/skills/delta-protein/references/protein_evolution.md +77 -0
  35. package/skills/delta-protein/references/protein_sol_predict_mutation.md +66 -0
  36. package/skills/delta-protein/references/protein_sol_predict_protein.md +61 -0
  37. package/skills/delta-protein/references/protenix.md +66 -0
  38. package/skills/delta-protein/references/protrek_search.md +90 -0
  39. package/skills/delta-protein/references/pubchem_search.md +68 -0
  40. package/skills/delta-protein/references/pubmed_search.md +79 -0
  41. package/skills/delta-protein/references/reap_design_primer.md +69 -0
  42. package/skills/delta-protein/references/rfd3_design.md +65 -0
  43. package/skills/delta-protein/references/structure_to_sequence.md +61 -0
  44. package/skills/delta-protein/references/summarize_result.md +68 -0
  45. package/skills/delta-protein/references/surface_charge.md +84 -0
  46. package/skills/delta-protein/references/uniprot_batch_query.md +63 -0
  47. package/skills/delta-protein/references/uniprot_query.md +64 -0
  48. package/skills/delta-protein/references/zero_shot_mutant_candidates.md +76 -0
  49. package/skills/delta-protein/scripts/gen_references.py +167 -0
  50. package/skills/delta-protein/scripts/output_metadata.json +275 -0
  51. package/skills/delta-sandbox/SKILL.md +388 -388
  52. package/skills/delta-sandbox/agents/openai.yaml +4 -4
  53. package/skills/delta-sandbox/references/commands.md +58 -58
  54. package/skills/delta-sandbox/references/lifecycle.md +100 -100
  55. package/skills/delta-sandbox/references/recipes.md +138 -138
  56. package/skills/delta-science/AGENTS.md +47 -47
  57. package/skills/delta-science/SKILL.md +227 -185
  58. package/skills/delta-science/agents/openai.yaml +4 -4
  59. package/skills/delta-science/references/antbo.md +105 -100
  60. package/skills/delta-science/references/delta-bo.md +92 -89
  61. package/skills/delta-science/references/gsasii.md +118 -116
  62. package/skills/delta-science/references/lammps.md +68 -66
  63. package/skills/delta-science/references/ldm-bo.md +132 -129
  64. package/skills/delta-science/references/materials-design.md +130 -118
  65. package/skills/delta-science/references/pubchem.md +128 -126
  66. package/skills/delta-science/references/pymatgen.md +69 -68
  67. package/skills/delta-science/references/qe.md +134 -125
  68. package/skills/delta-science/references/rdkit.md +141 -138
  69. package/skills/delta-science/references/strbo.md +95 -87
  70. package/skills/delta-science/references/synbo.md +201 -198
  71. package/skills/delta-science/references/xrd.md +619 -101
  72. package/skills/delta-science/scripts/catalog.py +92 -92
  73. package/skills/delta-science/scripts/generated_catalog.py +69 -69
  74. package/skills/delta-science/scripts/invoke.py +346 -346
  75. package/skills/delta-shared/SKILL.md +113 -111
  76. package/skills/delta-shared/agents/openai.yaml +4 -4
  77. package/skills/manifest.json +20 -19
package/scripts/run.js CHANGED
@@ -1,65 +1,65 @@
1
- #!/usr/bin/env node
2
- // Copyright (c) 2026 Delta Agent Cloud Authors
3
- // SPDX-License-Identifier: MIT
4
-
5
- const { execFileSync } = require("child_process");
6
- const fs = require("fs");
7
- const path = require("path");
8
-
9
- const ext = process.platform === "win32" ? ".exe" : "";
10
- const bin = path.join(__dirname, "..", "bin", "delta-cli" + ext);
11
-
12
- // On Windows, a crashed self-update may have left the binary renamed to .old.
13
- const oldBin = bin + ".old";
14
- function restoreOldBinary() {
15
- try {
16
- if (fs.existsSync(bin)) {
17
- fs.rmSync(bin, { force: true });
18
- }
19
- fs.renameSync(oldBin, bin);
20
- return true;
21
- } catch { return false; }
22
- }
23
-
24
- if (process.platform === "win32" && fs.existsSync(oldBin)) {
25
- if (!fs.existsSync(bin)) {
26
- restoreOldBinary();
27
- } else {
28
- try {
29
- execFileSync(bin, ["--version"], { stdio: "ignore", timeout: 10000 });
30
- try { fs.rmSync(oldBin, { force: true }); } catch {}
31
- } catch {
32
- restoreOldBinary();
33
- }
34
- }
35
- }
36
-
37
- const args = process.argv.slice(2);
38
-
39
- // Intercept install/uninstall — run wizard, bypass native binary
40
- if (args[0] === "install" || args[0] === "uninstall") {
41
- require("./install-wizard.js");
42
- } else {
43
- // Auto-download binary if missing (e.g. npx skipped postinstall)
44
- if (!fs.existsSync(bin)) {
45
- try {
46
- execFileSync(process.execPath, [path.join(__dirname, "install.js")], {
47
- stdio: "inherit",
48
- env: { ...process.env, DELTA_CLI_RUN: "true", DELTA_CLI_VERSION: process.env.DELTA_CLI_VERSION || "" },
49
- });
50
- } catch {
51
- console.error(
52
- `\nFailed to auto-install delta-cli binary.\n` +
53
- `To fix, run the install script manually:\n` +
54
- ` node "${path.join(__dirname, "install.js")}"\n`
55
- );
56
- process.exit(1);
57
- }
58
- }
59
-
60
- try {
61
- execFileSync(bin, args, { stdio: "inherit" });
62
- } catch (e) {
63
- process.exit(e.status || 1);
64
- }
65
- }
1
+ #!/usr/bin/env node
2
+ // Copyright (c) 2026 Delta Agent Cloud Authors
3
+ // SPDX-License-Identifier: MIT
4
+
5
+ const { execFileSync } = require("child_process");
6
+ const fs = require("fs");
7
+ const path = require("path");
8
+
9
+ const ext = process.platform === "win32" ? ".exe" : "";
10
+ const bin = path.join(__dirname, "..", "bin", "delta-cli" + ext);
11
+
12
+ // On Windows, a crashed self-update may have left the binary renamed to .old.
13
+ const oldBin = bin + ".old";
14
+ function restoreOldBinary() {
15
+ try {
16
+ if (fs.existsSync(bin)) {
17
+ fs.rmSync(bin, { force: true });
18
+ }
19
+ fs.renameSync(oldBin, bin);
20
+ return true;
21
+ } catch { return false; }
22
+ }
23
+
24
+ if (process.platform === "win32" && fs.existsSync(oldBin)) {
25
+ if (!fs.existsSync(bin)) {
26
+ restoreOldBinary();
27
+ } else {
28
+ try {
29
+ execFileSync(bin, ["--version"], { stdio: "ignore", timeout: 10000 });
30
+ try { fs.rmSync(oldBin, { force: true }); } catch {}
31
+ } catch {
32
+ restoreOldBinary();
33
+ }
34
+ }
35
+ }
36
+
37
+ const args = process.argv.slice(2);
38
+
39
+ // Intercept install/uninstall — run wizard, bypass native binary
40
+ if (args[0] === "install" || args[0] === "uninstall") {
41
+ require("./install-wizard.js");
42
+ } else {
43
+ // Auto-download binary if missing (e.g. npx skipped postinstall)
44
+ if (!fs.existsSync(bin)) {
45
+ try {
46
+ execFileSync(process.execPath, [path.join(__dirname, "install.js")], {
47
+ stdio: "inherit",
48
+ env: { ...process.env, DELTA_CLI_RUN: "true", DELTA_CLI_VERSION: process.env.DELTA_CLI_VERSION || "" },
49
+ });
50
+ } catch {
51
+ console.error(
52
+ `\nFailed to auto-install delta-cli binary.\n` +
53
+ `To fix, run the install script manually:\n` +
54
+ ` node "${path.join(__dirname, "install.js")}"\n`
55
+ );
56
+ process.exit(1);
57
+ }
58
+ }
59
+
60
+ try {
61
+ execFileSync(bin, args, { stdio: "inherit" });
62
+ } catch (e) {
63
+ process.exit(e.status || 1);
64
+ }
65
+ }
@@ -0,0 +1,73 @@
1
+ # skills/delta-protein — Protein Analysis Skill Package
2
+
3
+ **Parent:** `../AGENTS.md`
4
+
5
+ ## OVERVIEW
6
+
7
+ Single public `delta-protein` skill: the unified entry point for Huada protein and
8
+ bioinformatics online analysis tools (mutation prediction, structure prediction, MSA,
9
+ protein design, docking, pocket/active-site analysis, conservation/InterPro,
10
+ enzyme kinetics, solubility/pH prediction, and PubMed/PubChem/UniProt/PISA/PLIP
11
+ lookup). It is host-neutral and routed exclusively through the Delta CLI
12
+ (`science invoke`) to the Science Server's `huada_protein_tools` tool. Per-endpoint
13
+ operation contracts live in `references/` and are loaded on demand; there are no
14
+ separate planner-visible per-tool skills and no workflow endpoints.
15
+
16
+ ## STRUCTURE
17
+
18
+ ```
19
+ delta-protein/
20
+ ├── SKILL.md # single entry point: routing, CLI-only execution, safety red lines
21
+ ├── agents/
22
+ │ └── openai.yaml # host agent registration
23
+ └── references/
24
+ └── <endpoint>.md # one registered endpoint's operation contract
25
+ # (39 endpoints under tool `huada_protein_tools`)
26
+ ```
27
+
28
+ ## DATA SOURCE
29
+
30
+ - Tool/endpoint identity and request fields come from the live Catalog
31
+ (`delta-cli science list`, `delta-cli science endpoints list <tool>`) plus the
32
+ authoritative parameter registry in
33
+ `agent/protein_common/tool_registry/definitions.py` of the `delta-search-backend`
34
+ project (per-tool `params`, `required_groups`, `default_params`, `timeout`).
35
+ - Response envelope is the Huada contract `{"status","message","tool_type",
36
+ "resultjson","download_url"}`; per-tool `resultjson` keys are derived from the
37
+ tool implementations, not invented.
38
+ - Each registered endpoint is a single tool call. Multi-step card workflows
39
+ (cards/*.json) are NOT registered as endpoints and are not documented here; an
40
+ agent may chain single endpoints in sequence when the task requires it.
41
+
42
+ ## CONVENTIONS
43
+
44
+ - JSON/query operations go through `delta-cli science invoke --tool huada_protein_tools --endpoint <name>`; binary artifacts from `download_url` go through `delta-cli science file download`
45
+ - Endpoint names are exact server contracts, read from the Catalog — never invent fields/enums from memory
46
+ - Success is reported only when the subprocess exit is 0 AND top-level JSON `ok` is `true`; `data` holds the service response
47
+ - `references/` contains only registered real endpoints; routing and tool selection belong in `SKILL.md`
48
+ - Host-neutral: `delta-cli` is the sole service boundary; no host-specific tool/env dependencies
49
+ - Discover newly-deployed endpoints via `delta-cli science endpoints list huada_protein_tools`
50
+
51
+ ## MAINTENANCE
52
+
53
+ - `scripts/gen_references.py` regenerates the `## Output Projection` and
54
+ `## Output Template` sections in every reference from
55
+ `scripts/output_metadata.json` (single source of truth for field projection /
56
+ presentation form / downstream reuse / provenance marker). Stdlib only, idempotent.
57
+ - Workflow: update `output_metadata.json` → run
58
+ `python scripts/gen_references.py` → run `python scripts/gen_references.py --check`.
59
+ `--check` fails loudly on missing sections, drifting titles, broken SKILL links or
60
+ references not covered by metadata.
61
+ - `output_metadata.json` `provenance` is `tested` (verified by a real `delta-cli`
62
+ invocation) or `derived` (from ToolSpec descriptions / agent templates, marked
63
+ "pending live calibration"). Newly verified endpoints should be flipped to `tested`.
64
+ - After changing references/SKILL, resync the opencode install dir:
65
+ `python scripts/gen_references.py --sync "%USERPROFILE%\.config\opencode\skills\delta-protein"`.
66
+
67
+ ## ANTI-PATTERNS
68
+
69
+ - Do not call `curl`/`requests`/`httpx`/browser/PowerShell web directly against any Huada or Gateway URL
70
+ - Do not bypass delta-cli or attach local MCP tool servers directly
71
+ - Do not fabricate protein sequences, structures, activity data, or algorithm results, and do not pass local-library results off as Science results
72
+ - Do not create extra JSON/CSV/report/image artifacts unless the user explicitly asks
73
+ - Do not break relative links between SKILL.md and `references/`
@@ -0,0 +1,389 @@
1
+ ---
2
+ name: delta-protein
3
+ description: "The unified entry point for the company's Huada protein/bioinformatics online analysis capabilities — all calls go through the Delta CLI. Any zero-shot or multi-site mutation prediction, structure prediction (Protenix/ESMFold2), sequence extraction (PDB/FASTA/Foldseek), MSA computation, optimal-pH and solubility prediction for proteins/mutants, enzyme kinetic parameters (kcat/Km), consensus mutation and EVcouplings coevolutionary analysis, protein design (MPNN/RFdiffusion3), molecular docking and Vina scoring, pocket prediction, surface charge, flexible sites, tunnel analysis, PLIP/PISA interactions, active sites, InterPro/ConSurf annotations, single-site mutation primer design, and PubMed/PubChem/UniProt/ProTrek retrieval — all protein analysis tasks must use this Skill; call the huada_protein_tools endpoint via delta-cli, and never bypass the Delta CLI through local MCP servers, legacy gateway scripts, or web search. Simple queries, comparisons or verifications return concise text directly; analysis/multi-step/design/mutation/evaluation tasks produce one structured Markdown report (skeleton and per-task-type chapter structure in SKILL.md) after all endpoints complete. By default, do not create additional JSON/CSV, image or chart files unless the user explicitly asks."
4
+ metadata:
5
+ requires:
6
+ bins: ["delta-cli"]
7
+ cliHelp: "delta-cli science --help"
8
+ ---
9
+
10
+ # Delta Protein
11
+
12
+ Convert natural-language protein research tasks into the minimal set of verifiable
13
+ Delta CLI Science calls. Expose only this Skill; endpoint selection, parameters,
14
+ cross-endpoint handoffs and result validation are all handled inside this Skill. All
15
+ endpoints belong to the single tool `huada_protein_tools`, and each registered
16
+ endpoint is a single tool call (no workflow endpoints exist).
17
+
18
+ ## Service Call Boundary
19
+
20
+ - All online protein/bioinformatics operations ultimately go through the Delta CLI:
21
+ JSON-compatible endpoints use
22
+ `delta-cli science invoke --tool huada_protein_tools --endpoint <name> --data JSON`;
23
+ file/binary artifacts use `delta-cli science file download`.
24
+ - Use the CLI's standard authentication and the Science service address derived from
25
+ `base_url` (`{base_url}/science_tool`). Never override the service route via
26
+ environment variables, command-line arguments or business URLs.
27
+ - It is forbidden to access Huada, the Gateway, or any business service URL directly
28
+ with `curl`, `requests`, `httpx`, a browser, or PowerShell web commands; do not
29
+ assemble/attach a local MCP tool server.
30
+ - Local tools (RDKit/pymatgen/self-run algorithms, etc.) may be used for format
31
+ conversion, file parsing or display, but their origin must be made explicit and kept
32
+ separate from CLI results; they must never be passed off as Science results.
33
+ - Before executing, read the corresponding reference and combine required fields and
34
+ request parameters per that reference; when a reference is missing, stale, or
35
+ inconsistent with the live catalog, query the real-time catalog with
36
+ `delta-cli science list` and `delta-cli science endpoints list huada_protein_tools`.
37
+ Never create fields, enum values or branches beyond the required combinations from memory.
38
+ - Endpoint names are the single authoritative invocation names. The endpoint passed to
39
+ the CLI must match the catalog exactly; do not alias-map (the `protein_dock` tool's
40
+ endpoint in the catalog is `dock`), trim prefixes, or rename-and-retry after a
41
+ `not_found`. When inconsistent with the catalog, terminate and report the
42
+ configuration problem.
43
+ - A call may only be reported as successful when the CLI subprocess exits 0 AND the
44
+ top-level `ok` in its JSON output is `true`. The CLI top-level `data` holds the
45
+ service response; read the server-side return contract per the corresponding
46
+ reference — do not recursively search for plausible-looking values, and do not
47
+ misreport business results such as `status:error` as transport failures.
48
+ - Fields marked as "default" in a reference or ToolSpec are fill-in conveniences for
49
+ the backend agent orchestration layer; they are NOT omissible when calling the CLI
50
+ directly. As long as the server validates a field as required, it must be passed
51
+ explicitly (e.g. `DB` for `consurf_predict`); when validation reports a missing
52
+ field, supply it per the server error and write the live-verified value back into
53
+ the reference.
54
+ - JSON-bearing arguments must follow the shell rules of the calling environment;
55
+ never use bare POSIX single quotes on Windows.
56
+
57
+ ### Cross-platform JSON Passing Convention (Mandatory)
58
+
59
+ | Platform / execution environment | Authoritative way to pass `--data` / `--params` JSON |
60
+ |---|---|
61
+ | Linux / macOS (sh/bash) | `--data '{"k":"v"}'` (POSIX single quotes, verbatim) |
62
+ | Windows cmd.exe | `--data "{\"k\":\"v\"}"` (cmd double quotes + `\"` escaping) |
63
+ | Windows PowerShell 5.1 / opencode(win32) | always parse via cmd: `cmd /c '... --data "{\"k\":\"v\"}"'` (outer PowerShell uses single quotes verbatim, inner layer uses cmd `\"` escaping), or write the full command to a `.bat`/`.cmd` file and run it |
64
+
65
+ Rules:
66
+
67
+ - Do not let PowerShell parse `\"` or bare JSON double quotes: PS 5.1 strips embedded
68
+ double quotes from arguments when invoking native binaries (`{"k":"v"}` → `{k:v}`,
69
+ reporting `invalid character 'k'`) or breaks apart the outer quoted string.
70
+ - On win32, opencode's Bash tool is PowerShell: every `delta-cli` call carrying JSON
71
+ must be wrapped with `cmd /c '<cmd syntax>'` or a `.bat` file, with all `--data`
72
+ JSON keys/values escaped as `\"`.
73
+ - On Linux/macOS do not switch to `\"` for Windows compatibility; standard POSIX
74
+ single quotes are fine; documentation examples are host-neutral and actual execution
75
+ follows this table.
76
+
77
+ Call template:
78
+
79
+ ```text
80
+ delta-cli science invoke --tool huada_protein_tools --endpoint ENDPOINT --data JSON
81
+ ```
82
+
83
+ File artifact download template (when `download_url` points to raw files such as
84
+ PDB/XLSX/FASTA/ZIP):
85
+
86
+ ```text
87
+ delta-cli science file download --tool huada_protein_tools --endpoint ENDPOINT \
88
+ --params '{"...":"..."}' --output <path>
89
+ ```
90
+
91
+ Only call the endpoints needed to achieve the goal. File-type parameters
92
+ (`structure_file`/`sequence_file`/`msa_file`/`mutant_list_file` etc.) take
93
+ server-accessible URL/path strings, not local upload paths; when a genuine local
94
+ upload is needed, first derive a `download_url` via endpoints such as
95
+ generate_msa/foldseek/structure_to_sequence and backfill it.
96
+
97
+ ## Choosing an Endpoint
98
+
99
+ | Protein task | endpoint | Detailed rules |
100
+ | --- | --- | --- |
101
+ | Zero-shot single-site mutant candidates (no experimental data) | `zero_shot_mutant_candidates` | [zero_shot_mutant_candidates.md](references/zero_shot_mutant_candidates.md) |
102
+ | n-site/multi-site mutation activity regression (data available, explicit n) | `protein_evolution` | [protein_evolution.md](references/protein_evolution.md) |
103
+ | Multi-site combinatorial mutation activity (training data, n unspecified) | `multievolve` | [multievolve.md](references/multievolve.md) |
104
+ | Consensus mutation analysis (aligned MSA) | `consensus_mutation` | [consensus_mutation.md](references/consensus_mutation.md) |
105
+ | EVcouplings coevolutionary mutation scoring | `evcouplings_mutation` | [evcouplings_mutation.md](references/evcouplings_mutation.md) |
106
+ | Multi-model mutation result summary (final chain step) | `summarize_result` | [summarize_result.md](references/summarize_result.md) |
107
+ | Single-site mutation primer design (REAP Step 7) | `reap_design_primer` | [reap_design_primer.md](references/reap_design_primer.md) |
108
+ | Crop a protein sequence by regions | `crop_sequence` | [crop_sequence.md](references/crop_sequence.md) |
109
+ | Pure protein structure prediction | `protenix` | [protenix.md](references/protenix.md) |
110
+ | Protein/DNA/RNA/ligand complex structure prediction | `esmfold2_predict` | [esmfold2_predict.md](references/esmfold2_predict.md) |
111
+ | Extract protein sequence from PDB/CIF | `structure_to_sequence` | [structure_to_sequence.md](references/structure_to_sequence.md) |
112
+ | Extract protein sequence from FASTA | `fasta_to_sequence` | [fasta_to_sequence.md](references/fasta_to_sequence.md) |
113
+ | Extract Foldseek/SaProt sequence from structure | `foldseek` | [foldseek.md](references/foldseek.md) |
114
+ | Compute homolog MSA (MMseqs2, uniref100) | `generate_msa` | [generate_msa.md](references/generate_msa.md) |
115
+ | Protein optimal pH prediction | `ephod_predict_protein` | [ephod_predict_protein.md](references/ephod_predict_protein.md) |
116
+ | Mutant optimal pH prediction | `ephod_predict_mutation` | [ephod_predict_mutation.md](references/ephod_predict_mutation.md) |
117
+ | Protein solubility and isoelectric point prediction | `protein_sol_predict_protein` | [protein_sol_predict_protein.md](references/protein_sol_predict_protein.md) |
118
+ | Mutant solubility prediction | `protein_sol_predict_mutation` | [protein_sol_predict_mutation.md](references/protein_sol_predict_mutation.md) |
119
+ | Enzyme kinetic parameter prediction (CataPro) | `catapro_predict` | [catapro_predict.md](references/catapro_predict.md) |
120
+ | Enzyme kinetic parameter prediction (CatPred) | `catpred_predict` | [catpred_predict.md](references/catpred_predict.md) |
121
+ | De novo protein design (RFdiffusion3+MPNN) | `protein_design` | [protein_design.md](references/protein_design.md) |
122
+ | Protein scaffold design (RFdiffusion3) | `rfd3_design` | [rfd3_design.md](references/rfd3_design.md) |
123
+ | MPNN sequence design (given structure) | `mpnn_design_sequence` | [mpnn_design_sequence.md](references/mpnn_design_sequence.md) |
124
+ | Protein-ligand molecular docking | `dock` | [dock.md](references/dock.md) |
125
+ | Single-pose scoring of a complex (Vina score_only) | `dock_score` | [dock_score.md](references/dock_score.md) |
126
+ | Pocket prediction (p2rank) | `pocket_prediction` | [pocket_prediction.md](references/pocket_prediction.md) |
127
+ | Surface residue charge analysis (ProCaliper+APBS) | `surface_charge` | [surface_charge.md](references/surface_charge.md) |
128
+ | Flexible-site analysis (B-factor) | `bfitter` | [bfitter.md](references/bfitter.md) |
129
+ | Tunnel/channel analysis (CAVER) | `caver_tunnel_analyze` | [caver_tunnel_analyze.md](references/caver_tunnel_analyze.md) |
130
+ | Protein-ligand interaction analysis | `plip_analyze` | [plip_analyze.md](references/plip_analyze.md) |
131
+ | Protein interface analysis (PDBePISA) | `pisa_query` | [pisa_query.md](references/pisa_query.md) |
132
+ | Residue conservation analysis (ConSurf) | `consurf_predict` | [consurf_predict.md](references/consurf_predict.md) |
133
+ | Enzyme active-site prediction (EasIFA) | `easifa_predict_active_site` | [easifa_predict_active_site.md](references/easifa_predict_active_site.md) |
134
+ | Domain/GO annotation (InterProScan) | `interpro_analyze` | [interpro_analyze.md](references/interpro_analyze.md) |
135
+ | Open-ended protein retrieval (text/sequence/structure) | `protrek_search` | [protrek_search.md](references/protrek_search.md) |
136
+ | Known protein metadata query | `uniprot_query` | [uniprot_query.md](references/uniprot_query.md) |
137
+ | Batch protein metadata query | `uniprot_batch_query` | [uniprot_batch_query.md](references/uniprot_batch_query.md) |
138
+ | PubMed literature search | `pubmed_search` | [pubmed_search.md](references/pubmed_search.md) |
139
+ | PubChem compound search | `pubchem_search` | [pubchem_search.md](references/pubchem_search.md) |
140
+
141
+ When the tool is clear, read the selected endpoint's reference directly — it already
142
+ contains the required combinations, request fields, defaults and outputs; do not read
143
+ other endpoint docs. Multi-step tasks are decomposed by this Skill's routing rules,
144
+ reading only the references of the endpoints actually involved in each step.
145
+
146
+ ## Routing Boundaries
147
+
148
+ - Use `protenix` for pure protein structure prediction; use `esmfold2_predict` for
149
+ complexes involving DNA/RNA/ligands; never mix them.
150
+ - `ephod_predict_protein`/`protein_sol_predict_protein` accept
151
+ `protein_list`/`protein_list_file` (sequence-file URLs); the `..._mutation`
152
+ variants accept mutation lists; protein-level and mutation-level inputs cannot be
153
+ swapped.
154
+ - `uniprot_query` is for exact metadata queries on known accession/gene/protein
155
+ names; open-ended functional/reaction/family retrieval uses `protrek_search`; the
156
+ two are not interchangeable.
157
+ - Both `catpred_predict` and `catapro_predict` predict kcat, Km and kcat/Km; call each per
158
+ its reference's required fields and constraints — the results are not
159
+ interchangeable in meaning.
160
+ - Without experimental data use `zero_shot_mutant_candidates`; with mutation activity
161
+ data and an explicit n-site/multi-site mutation specification use
162
+ `protein_evolution`; when the number of sites is unspecified but training data is
163
+ provided, use `multievolve`.
164
+
165
+ This Skill has no workflow endpoints. For multi-step chains, call multiple endpoints
166
+ in dependency order, and for downstream `structure_file`/`msa_file`/box parameters
167
+ only use business fields verified in the previous step:
168
+
169
+ - `generate_msa`'s output `download_url` becomes the `msa_file` of
170
+ `consensus_mutation`/`evcouplings_mutation`/`zero_shot_mutant_candidates`;
171
+ - `pocket_prediction`'s output `download_url` (cropped pocket PDB) becomes the
172
+ `structure_file` of `rfd3_design`;
173
+ - `dock`'s rank-1 `pdb_url` (clean complex PDB) becomes the `structure_file` of
174
+ `plip_analyze`;
175
+ - structure-prediction/sequence-extraction outputs feed downstream
176
+ mutation/design/property endpoints; validate success before transitioning.
177
+ - `summarize_result` consumes only a URL list of multiple prediction-result files and
178
+ is the final step of a mutation-prediction chain.
179
+
180
+ By default, do not make extra health, catalog or file-operation calls beyond known
181
+ endpoints; the minimal set of read-only calls is acceptable when the user requests it,
182
+ diagnostics require it, or a reference is inconsistent with the live catalog.
183
+
184
+ ## Input Handling
185
+
186
+ - Parameter source priority: (1) provided verbatim by the user, (2) fields already
187
+ confirmed in the session (protein sequence/structure/mutation list), (3)
188
+ `resultjson`/`download_url`/`pdb_url` verified from upstream endpoints. Fabricating
189
+ missing parameters is forbidden.
190
+ - In-session reuse: each step of a multi-step task may only use business fields
191
+ verified in the previous step of the current task; do not pull historical workspace
192
+ results from other sessions to complete the current task. For concrete backfill
193
+ chains of upstream artifacts see "Downstream reuse" in each reference's Output
194
+ Projection; parameter-level examples are in "Routing Boundaries".
195
+ - Defaults vs server-required: fields marked as "default" in a reference or ToolSpec
196
+ are fill-in conveniences for the backend agent orchestration layer; they are NOT
197
+ omissible when calling the CLI directly. As long as the server validates a field as
198
+ required, it must be passed explicitly (e.g. `DB` for `consurf_predict`). When
199
+ validation reports a missing field, supply it per the server error and write the
200
+ live-verified value back into the reference.
201
+ - File-type parameters (`structure_file`/`sequence_file`/`fasta_file`/`msa_file`/
202
+ `mutant_list_file`/`training_dataset`/`result_files` etc.) take server-accessible
203
+ URL/path strings, not local upload paths; when a genuine local upload is needed,
204
+ first derive a `download_url` via generate_msa/foldseek/structure_to_sequence and
205
+ backfill it.
206
+ - Pass multi-valued parameters per the type in the corresponding reference: string
207
+ lists (`model_name`/`cofactors`/`target_columns`), numbers
208
+ (`topk`/`rfd3_n`/`max_results`), booleans (`fix`/`use_msa`), region lists
209
+ (`regions` of `crop_sequence`). Enum values (`input_type`/`query_type`/`DB`/
210
+ `sampling_method` etc.) may only take the values listed in the reference.
211
+
212
+ ## Safety, Retry & Artifacts
213
+
214
+ - Remote tasks such as submission, docking, and design require explicit user
215
+ authorization. Do not retry when the outcome is unknown, timed out, or
216
+ disconnected — the remote computation may already have happened; do not retry
217
+ `status:error` or empty results with different parameters.
218
+ - For catalog and clearly read-only, idempotent queries, network-class 502/504 or
219
+ timeout may be retried at most once with identical parameters.
220
+ - After a failed CLI call, return a short summary of the raw error. When the user
221
+ explicitly asks for troubleshooting, run read-only `delta-cli auth status`,
222
+ `delta-cli config show` or `delta-cli ... --help`; never log in yourself, modify
223
+ config or environment variables, forge a UID, token or API key, or retry by
224
+ changing the endpoint, parameters or call chain.
225
+ - `X-User-Uid`, login, quota or permission errors are terminal authentication errors;
226
+ forward only the raw error and the login hint. The Skill never logs in by itself,
227
+ checks credentials, guesses user identity, or attempts to circumvent quota.
228
+ - Heavy calls run serially. A client timeout does not mean the remote computation was
229
+ cancelled.
230
+ - Do not create CSV, images or reports unless the user asks for files; after
231
+ downloading binary artifacts, verify them by filename/MIME.
232
+ - Never fabricate protein sequences, structures, mutations, activities, pH,
233
+ solubility, energies, or infer their mechanisms; prediction results must not be
234
+ described as measured results; do not present model variance or scores as
235
+ experimental error.
236
+ - Paths, JSON, charts or reports auto-attached by the outer planner are not equivalent
237
+ to an explicit user request. If the task is essentially just a query, comparison or
238
+ verification, return the minimal text result directly.
239
+ - When the user explicitly asks for public background material or literature, web
240
+ search is allowed, but it must not be presented as a Science service call or
241
+ substitute for CLI results; label sources separately.
242
+
243
+ ## Output
244
+
245
+ Compose the final answer from the business response in the current CLI `data` as
246
+ defined by the corresponding reference; preserve strings, numbers, warnings and
247
+ provenance verbatim. Do not add units, mechanisms, citations, links, predicted values
248
+ or memorized knowledge the service did not return. Re-running the CLI to sort, lay
249
+ out, tabulate or summarize is forbidden, as is hand-copying results into new data
250
+ literals; simple filtering, comparison and text organization happen directly in the
251
+ final answer.
252
+
253
+ ### Output Modes (two-mode decision)
254
+
255
+ - **Report mode (default)**: whenever the task produces prediction/analysis/design
256
+ results, output a report even for a single endpoint: property predictions
257
+ (ephod/protein_sol/catpred/catapro), structure prediction and sequence extraction,
258
+ mutation prediction and design, docking/scoring/pocket/charge/tunnel/conservation/
259
+ active-site/annotation, primer design, etc. Also report mode when the user
260
+ explicitly asks for a "report/detailed/summary", or when multiple endpoints/
261
+ reviews/comparisons are involved. **The whole task produces exactly one report**:
262
+ no matter how many endpoints are called, run all endpoints in sequence first
263
+ (validate only `ok:true` at each step and stash key fields), then generate the
264
+ report once at the end.
265
+ - **Concise mode (value-lookup only)**: use it only when the goal is to "look up a
266
+ ready-made value" — answer in the most minimal text directly, without the report
267
+ skeleton — e.g. `pubchem_search` for a single compound's molecular weight/formula,
268
+ `uniprot_query` for a single entry's sequence/metadata,
269
+ `protrek_search`/`pubmed_search` as pure information retrieval display. **Whenever
270
+ prediction/analysis endpoints such as `ephod_predict_*` are called — even just
271
+ once — report mode is mandatory**; do not downgrade to concise mode because of a
272
+ "single return".
273
+
274
+ ### Report Mode: one report for the whole task (skeleton)
275
+
276
+ The report follows fixed numbered sections; numbering is consecutive and never skips.
277
+ If a section genuinely has no content, write "No relevant results in this section"
278
+ and state why; never delete the heading. Generic skeleton:
279
+
280
+ - `## 1. Analysis Overview`: analysis goal / endpoints & methods used / input data
281
+ sources.
282
+ - `## 2. Core Results`: `### 2.1 Key findings` (key numbers **bold**); `### 2.2
283
+ Detailed data` (one paragraph per endpoint, see "Tool result snippets"; tables go in
284
+ the relevant subsection, preceded by an intro sentence).
285
+ - `## 3. Data & Downloads`: all `download_url`/`pdb_url`/`zip_download_url` listed as
286
+ `[name](full URL)` with type/use noted; when there are none, write "This analysis
287
+ generated no downloadable files".
288
+ - `## 4. Notes & Recommendations`: prediction limitations, model differences,
289
+ experimental validation suggestions.
290
+
291
+ When intent is clear, replace the skeleton with the matched intent-based section
292
+ structure; for mixed types arrange per "Mixed types / others".
293
+
294
+ ### Report Mode: tool result snippets
295
+
296
+ Under `### 2.2 Detailed data` (or the matching subsection of an intent-based
297
+ section), one paragraph per endpoint, formatted as:
298
+
299
+ - `### Tool result: <endpoint display name> (step N)` + `**Status**: succeeded /
300
+ failed (with error summary)`.
301
+ - Data presented per that endpoint's reference "Output template";
302
+ `summarize_result` gives the full overview table (≤100 rows, prompt download
303
+ beyond); `pubmed_search` uses a paper table; key numbers bolded.
304
+ - Structure files (`.pdb`/`.cif`/`.ent`) are presented as plain Markdown links
305
+ `[structure result (.pdb)](full URL)` in "Data & Downloads"; **do not use
306
+ `:::structure` custom blocks** (backend/frontend-only; the TUI on
307
+ Windows/Linux/macOS does not render them and shows raw text).
308
+ - A failed tool states the failure reason in its paragraph; never fabricate results;
309
+ endpoints not executed do not appear in the report.
310
+
311
+ ### Intent-based report sections (by task type)
312
+
313
+ | Task type | Report sections |
314
+ |---|---|
315
+ | mutation (mutation prediction with data: protein_evolution/multievolve/consensus/EVcouplings/zero-shot + summary) | 1 Analysis Overview / 2 Recommended mutation sites [2.1 Top candidate mutation table (position/wild type/mutation/model/score/predicted effect); 2.2 Conservation reading (if any, annotation only); 2.3 Multi-model comparison (if any)] / 3 Overall recommendation / 4 Data & Downloads / 5 Notes |
316
+ | structure (protenix/esmfold2/sequence extraction/MSA) | 1 Analysis Overview / 2 Structure information [2.1 Quality assessment (confidence/trusted regions); 2.2 Key structural features; 2.3 Sequence information] / 3 Structure files & downloads / 4 Analysis recommendations / 5 Notes |
317
+ | property (pH/solubility/enzyme kinetics) | 1 Analysis Overview / 2 Prediction results [2.1 Key value summary table (property/predicted value/unit/description); 2.2 Wild type vs mutants, if any] / 3 Result interpretation / 4 Data & Downloads / 5 Notes |
318
+ | design (protein_design/rfd3_design/mpnn_design_sequence) | 1 Design overview / 2 Designed sequences [2.1 Representative sequences (monospace); 2.2 Differences from the original sequence, if any] / 3 Design scores (table) / 4 Design strategy analysis / 5 Data & Downloads / 6 Follow-up suggestions |
319
+ | search (pubmed/pubchem/uniprot/protrek) | 1 Search overview (keywords/databases/hit count) / 2 Result details (literature grouped by PMID; compound/entry lists) / 3 Key findings & summary / 4 Data & Downloads / 5 Notes |
320
+ | analysis (active site/conservation/interface/interaction/pocket/charge/tunnel) | 1 Analysis overview / 2 Active site (table: position/residue/site type/function annotation/confidence) / 3 Conserved residues (table: position/residue/score/rank/conclusion/functional significance) / 4 Functional interpretation / 5 Data & Downloads / 6 Research recommendations |
321
+ | Mixed types / others | 1 Analysis flow overview (actual steps & dependencies) / 2 Per-endpoint results (each `### 2.x` per endpoint using its Output template) / 3 Combined analysis / 4 Data & Downloads / 5 Notes & recommendations |
322
+
323
+ Conservation reading fixed semantics: higher `conserved_score` = less conserved,
324
+ lower = more conserved; higher `conserved_rank` = more conserved (1,2,3 are usually
325
+ variable residues, 7,8,9 are usually conserved).
326
+
327
+ ### Report Mode: organization rules (aligned with agent content orchestration)
328
+
329
+ - Multi-endpoint reports are organized by the actual call order, with later results
330
+ citing earlier ones as evidence (note the source field); cross-tool references are
331
+ noted at the end of the relevant subsection rather than repeating the full data;
332
+ only cite fields verified in the current task.
333
+ - Tabulate only when the user needs it or the data suits it; column names restated in
334
+ natural language, never exposing raw JSON key names; keep original references
335
+ (mutations as `Y126A/Y206F`, PMIDs in the last table column).
336
+
337
+ On success, return only bounded text generated from the current CLI business result;
338
+ on failure, return only a short summary of the CLI's raw error.
339
+
340
+ ### Keep Execution-layer Details Internal
341
+
342
+ - Answers present only business results, the necessary interpretation basis,
343
+ download links and evidence boundaries; **do not output execution details**,
344
+ including but not limited to:
345
+ - parameters/defaults/required values (e.g. `DB=UNIREF100`, `chain=A`,
346
+ `max_results`) — include them in the command, don't restate them in prose;
347
+ - invocation details (`cmd /c` wrapping, PowerShell escaping, `.bat`, direct exe
348
+ call);
349
+ - working process (retry counts, 503, temp files, quota/credit consumption).
350
+ - Endpoints with defaults/server-required fields still set the parameters when
351
+ executing, but the display only carries business data (e.g. ConSurf output lists
352
+ conserved positions, not "called with `DB=UNIREF100`").
353
+ - After a successful result, give the final answer directly; do not proactively offer
354
+ follow-ups such as "want me to re-run verification / generate a new link"
355
+ (re-running the CLI for verification is forbidden) unless the user explicitly asks.
356
+
357
+ Any URL (`download_url`, `pdb_url`, service-returned links, etc.) must be rendered in
358
+ one of the following two **safe forms**; bare text URLs are forbidden in prose (to
359
+ prevent Markdown treating `_..._` as italics and stripping underscores, which breaks
360
+ links):
361
+
362
+ - **inline code backticks** wrapping the full URL, e.g.
363
+ `` `https://delta-bucket-public.yangtzeailab.com/toolResultFile/protein-test/protein_00735e8a_20261012_103005.xlsx` ``; or
364
+ - **Markdown link** `[name](full URL)` — underscores in the link target are preserved
365
+ from italic handling, e.g.
366
+ `[result file](https://delta-bucket-public.yangtzeailab.com/toolResultFile/protein-test/protein_00735e8a_20261012_103005.xlsx)`.
367
+
368
+ Also state the file type and use. Whenever a URL is cited, verify it against the raw
369
+ JSON returned by the CLI (fields within `data`), not against rendered text.
370
+
371
+ Keep after every successful result:
372
+
373
+ ```text
374
+ Evidence boundary: only business results from the current Delta CLI `data`
375
+ Call chain: delta-cli
376
+ No supplementation of unreturned content: yes
377
+ ```
378
+
379
+ ## Completion Criteria
380
+
381
+ - Every online operation is evidenced by a CLI exit code of 0 and top-level
382
+ `ok:true`;
383
+ - Every scientific number comes from a business field in the current call's `data`,
384
+ as defined by the reference;
385
+ - Downstream inputs come from upstream results verified in the current task;
386
+ - Failures are correctly classified as config, CLI, parameter, Science Server,
387
+ business service or timeout;
388
+ - No direct HTTP, local science library, cross-session file or manual result
389
+ substitutes.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Delta Protein"
3
+ short_description: "Unified access to Huada protein analysis tools through the Delta CLI"
4
+ default_prompt: "Use $delta-protein to analyze protein research goals: pick the right endpoint and complete the task by calling huada_protein_tools through the Delta CLI."