@pikaa-ai/pikaa 0.3.22 → 0.3.24
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/assets/brand/orbit-logo-option4-whale.jpg +0 -0
- package/assets/brand/orbit-logo.jpg +0 -0
- package/assets/brand/orbit-logo.png +0 -0
- package/assets/brand/orbit-logo.svg +3 -0
- package/dist/cli.js +448 -181
- package/dist/index.js +22 -2
- package/package.json +1 -2
- package/skills/adaptyv/SKILL.md +0 -240
- package/skills/aeon/SKILL.md +0 -402
- package/skills/analytical-method-validation/SKILL.md +0 -299
- package/skills/anndata/SKILL.md +0 -431
- package/skills/arbor/SKILL.md +0 -152
- package/skills/arboreto/SKILL.md +0 -267
- package/skills/astropy/SKILL.md +0 -353
- package/skills/autoskill/SKILL.md +0 -233
- package/skills/benchling-integration/SKILL.md +0 -229
- package/skills/bgpt-paper-search/SKILL.md +0 -75
- package/skills/bids/SKILL.md +0 -237
- package/skills/biopython/SKILL.md +0 -472
- package/skills/bioservices/SKILL.md +0 -399
- package/skills/bulk-rnaseq/SKILL.md +0 -198
- package/skills/cellxgene-census/SKILL.md +0 -283
- package/skills/cirq/SKILL.md +0 -370
- package/skills/citation-management/SKILL.md +0 -329
- package/skills/clinical-decision-support/SKILL.md +0 -238
- package/skills/clinical-decision-support/references/README.md +0 -62
- package/skills/clinical-reports/SKILL.md +0 -248
- package/skills/clinical-reports/references/README.md +0 -34
- package/skills/cobrapy/SKILL.md +0 -496
- package/skills/consciousness-council/SKILL.md +0 -151
- package/skills/dask/SKILL.md +0 -482
- package/skills/database-lookup/SKILL.md +0 -386
- package/skills/datamol/SKILL.md +0 -200
- package/skills/deepchem/SKILL.md +0 -244
- package/skills/deepspot-m/SKILL.md +0 -175
- package/skills/deeptools/SKILL.md +0 -412
- package/skills/depmap/SKILL.md +0 -301
- package/skills/dhdna-profiler/SKILL.md +0 -184
- package/skills/diffdock/SKILL.md +0 -488
- package/skills/dnanexus-integration/SKILL.md +0 -325
- package/skills/docx/SKILL.md +0 -99
- package/skills/esm/SKILL.md +0 -334
- package/skills/etetoolkit/SKILL.md +0 -327
- package/skills/exa-search/SKILL.md +0 -102
- package/skills/executing-plans/SKILL.md +0 -14
- package/skills/experimental-design/SKILL.md +0 -234
- package/skills/exploratory-data-analysis/SKILL.md +0 -280
- package/skills/flowio/SKILL.md +0 -310
- package/skills/fluidsim/SKILL.md +0 -279
- package/skills/frontend-design/SKILL.md +0 -100
- package/skills/generate-image/SKILL.md +0 -304
- package/skills/geniml/SKILL.md +0 -310
- package/skills/genomic-coordinates/SKILL.md +0 -189
- package/skills/genomic-intelligence/SKILL.md +0 -243
- package/skills/geomaster/README.md +0 -105
- package/skills/geomaster/SKILL.md +0 -366
- package/skills/geopandas/SKILL.md +0 -250
- package/skills/get-available-resources/SKILL.md +0 -260
- package/skills/gget/SKILL.md +0 -153
- package/skills/ginkgo-cloud-lab/SKILL.md +0 -106
- package/skills/glycoengineering/SKILL.md +0 -339
- package/skills/gtars/SKILL.md +0 -282
- package/skills/guardian-rails/SKILL.md +0 -54
- package/skills/histolab/SKILL.md +0 -243
- package/skills/hugging-science/SKILL.md +0 -132
- package/skills/hypogenic/SKILL.md +0 -290
- package/skills/hypothesis-generation/SKILL.md +0 -264
- package/skills/imaging-data-commons/SKILL.md +0 -496
- package/skills/infographics/SKILL.md +0 -315
- package/skills/iso-standards-readiness/SKILL.md +0 -352
- package/skills/lab-hardware-cad/SKILL.md +0 -372
- package/skills/labarchive-integration/SKILL.md +0 -216
- package/skills/lamindb/SKILL.md +0 -408
- package/skills/latchbio-integration/SKILL.md +0 -227
- package/skills/latex-posters/SKILL.md +0 -369
- package/skills/latex-posters/references/README.md +0 -439
- package/skills/liteparse/SKILL.md +0 -295
- package/skills/literature-review/SKILL.md +0 -263
- package/skills/markdown-mermaid-writing/SKILL.md +0 -322
- package/skills/market-research-reports/SKILL.md +0 -337
- package/skills/markitdown/SKILL.md +0 -264
- package/skills/matchms/SKILL.md +0 -276
- package/skills/matlab/SKILL.md +0 -274
- package/skills/matplotlib/SKILL.md +0 -378
- package/skills/medchem/SKILL.md +0 -321
- package/skills/modal/SKILL.md +0 -468
- package/skills/molecular-dynamics/SKILL.md +0 -458
- package/skills/molfeat/SKILL.md +0 -348
- package/skills/ncats-arax/SKILL.md +0 -178
- package/skills/networkx/SKILL.md +0 -440
- package/skills/neurokit2/SKILL.md +0 -323
- package/skills/neuropixels-analysis/SKILL.md +0 -412
- package/skills/nextflow/SKILL.md +0 -195
- package/skills/omero-integration/SKILL.md +0 -222
- package/skills/onekgpd/SKILL.md +0 -371
- package/skills/ontology-term-resolution/SKILL.md +0 -147
- package/skills/open-notebook/SKILL.md +0 -297
- package/skills/openpiv/SKILL.md +0 -469
- package/skills/opentrons-integration/SKILL.md +0 -322
- package/skills/optimize-for-gpu/SKILL.md +0 -176
- package/skills/owasp-top10/SKILL.md +0 -48
- package/skills/pacsomatic/LICENSE +0 -21
- package/skills/pacsomatic/SKILL.md +0 -150
- package/skills/paper-lookup/SKILL.md +0 -263
- package/skills/paperclip/SKILL.md +0 -413
- package/skills/paperzilla/SKILL.md +0 -159
- package/skills/parallel-web/SKILL.md +0 -128
- package/skills/pathml/SKILL.md +0 -222
- package/skills/pathogen-variant-surveillance/SKILL.md +0 -208
- package/skills/pathway-enrichment/SKILL.md +0 -194
- package/skills/pdf/SKILL.md +0 -322
- package/skills/peer-review/SKILL.md +0 -288
- package/skills/penetration-testing/SKILL.md +0 -31
- package/skills/pennylane/SKILL.md +0 -240
- package/skills/phylogenetics/SKILL.md +0 -409
- package/skills/pi-agent/SKILL.md +0 -83
- package/skills/pkpd-modeling/SKILL.md +0 -381
- package/skills/polars/SKILL.md +0 -393
- package/skills/polars-bio/SKILL.md +0 -379
- package/skills/ponytail/SKILL.md +0 -31
- package/skills/ponytail-audit/SKILL.md +0 -18
- package/skills/pptx/SKILL.md +0 -246
- package/skills/pptx-posters/SKILL.md +0 -258
- package/skills/primekg/SKILL.md +0 -99
- package/skills/protocolsio-integration/SKILL.md +0 -236
- package/skills/pufferlib/SKILL.md +0 -328
- package/skills/pydeseq2/SKILL.md +0 -369
- package/skills/pydicom/SKILL.md +0 -381
- package/skills/pyhealth/SKILL.md +0 -124
- package/skills/pylabrobot/SKILL.md +0 -216
- package/skills/pymatgen/SKILL.md +0 -404
- package/skills/pymc/SKILL.md +0 -310
- package/skills/pymoo/SKILL.md +0 -276
- package/skills/pyopenms/SKILL.md +0 -179
- package/skills/pysam/SKILL.md +0 -330
- package/skills/pytdc/SKILL.md +0 -297
- package/skills/pytorch-lightning/SKILL.md +0 -191
- package/skills/pyzotero/SKILL.md +0 -137
- package/skills/qiskit/SKILL.md +0 -259
- package/skills/qutip/SKILL.md +0 -317
- package/skills/rdkit/SKILL.md +0 -94
- package/skills/relsa-severity-assessment/SKILL.md +0 -354
- package/skills/research-grants/SKILL.md +0 -296
- package/skills/research-grants/references/README.md +0 -287
- package/skills/research-lookup/README.md +0 -106
- package/skills/research-lookup/SKILL.md +0 -338
- package/skills/rowan/SKILL.md +0 -398
- package/skills/scanpy/SKILL.md +0 -303
- package/skills/scholar-evaluation/SKILL.md +0 -296
- package/skills/scientific-brainstorming/SKILL.md +0 -282
- package/skills/scientific-critical-thinking/SKILL.md +0 -180
- package/skills/scientific-schematics/SKILL.md +0 -370
- package/skills/scientific-slides/SKILL.md +0 -379
- package/skills/scientific-visualization/SKILL.md +0 -285
- package/skills/scientific-writing/SKILL.md +0 -356
- package/skills/scikit-bio/SKILL.md +0 -470
- package/skills/scikit-learn/SKILL.md +0 -324
- package/skills/scikit-survival/SKILL.md +0 -313
- package/skills/scvelo/SKILL.md +0 -328
- package/skills/scvi-tools/SKILL.md +0 -201
- package/skills/seaborn/SKILL.md +0 -254
- package/skills/security-auditor/SKILL.md +0 -37
- package/skills/shap/SKILL.md +0 -282
- package/skills/simpy/SKILL.md +0 -283
- package/skills/stable-baselines3/SKILL.md +0 -325
- package/skills/statistical-analysis/SKILL.md +0 -446
- package/skills/statistical-power/SKILL.md +0 -200
- package/skills/statsmodels/SKILL.md +0 -238
- package/skills/sympy/SKILL.md +0 -354
- package/skills/systematic-debugging/SKILL.md +0 -35
- package/skills/tamarind/SKILL.md +0 -285
- package/skills/tdd/SKILL.md +0 -26
- package/skills/tiledbvcf/SKILL.md +0 -456
- package/skills/timesfm-forecasting/SKILL.md +0 -408
- package/skills/timesfm-forecasting/examples/global-temperature/README.md +0 -178
- package/skills/torch-geometric/SKILL.md +0 -458
- package/skills/torchdrug/SKILL.md +0 -241
- package/skills/transformers/SKILL.md +0 -195
- package/skills/treatment-plans/SKILL.md +0 -174
- package/skills/treatment-plans/references/README.md +0 -19
- package/skills/umap-learn/SKILL.md +0 -488
- package/skills/uncertainty-and-units/SKILL.md +0 -384
- package/skills/usfiscaldata/SKILL.md +0 -171
- package/skills/vaex/SKILL.md +0 -204
- package/skills/venue-templates/SKILL.md +0 -269
- package/skills/verification-before-completion/SKILL.md +0 -22
- package/skills/waypoint-bio/SKILL.md +0 -273
- package/skills/what-if-oracle/SKILL.md +0 -184
- package/skills/writing-plans/SKILL.md +0 -15
- package/skills/xlsx/SKILL.md +0 -110
- package/skills/zarr-python/SKILL.md +0 -241
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: opentrons-integration
|
|
3
|
-
description: Author, review, migrate, simulate, and troubleshoot official Opentrons Python Protocol API v2 protocols for Flex and OT-2 robots. Use for robot-specific liquid handling, deck and labware setup, pipettes, modules, runtime parameters, liquid classes, and Opentrons App analysis. Use pylabrobot instead when one workflow must support multiple robot vendors.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Requires Python 3.10+ and uv for local simulation. Flex examples target opentrons 9.1.1 and API 2.29; the separate OT-2 line targets API 2.28 and uses opentrons 9.0.0 as its local compatibility simulator. Physical execution requires compatible hardware, current robot software, and the appropriate Opentrons App.
|
|
6
|
-
allowed-tools: Read Write Edit Bash
|
|
7
|
-
metadata:
|
|
8
|
-
version: "2.0"
|
|
9
|
-
skill-author: "K-Dense Inc."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Opentrons Integration
|
|
13
|
-
|
|
14
|
-
## Overview
|
|
15
|
-
|
|
16
|
-
Create production-minded Python Protocol API v2 protocols for Opentrons Flex and
|
|
17
|
-
OT-2. This skill covers protocol structure, hardware and deck configuration,
|
|
18
|
-
liquid handling, runtime customization, module control, simulation, and safe
|
|
19
|
-
deployment.
|
|
20
|
-
|
|
21
|
-
The verified baseline as of **2026-07-23** is:
|
|
22
|
-
|
|
23
|
-
- `opentrons==9.1.1` for reproducible Flex simulation.
|
|
24
|
-
- `opentrons==9.0.0` for local OT-2 API 2.28 compatibility simulation.
|
|
25
|
-
- Flex supports API levels 2.15 through 2.29 on current software.
|
|
26
|
-
- OT-2 supports API levels 2.0 through 2.28 on current software.
|
|
27
|
-
- API 2.29 is Flex-only at this baseline. Do not put `2.29` in an OT-2 protocol.
|
|
28
|
-
|
|
29
|
-
Read `references/sources.md` for the upstream documentation used for this
|
|
30
|
-
snapshot. Recheck the official versioning page before targeting newer robot
|
|
31
|
-
software.
|
|
32
|
-
|
|
33
|
-
## Safety Boundary
|
|
34
|
-
|
|
35
|
-
Opentrons protocols control physical equipment. Never treat successful Python
|
|
36
|
-
syntax or local simulation as permission to run on a robot.
|
|
37
|
-
|
|
38
|
-
Before live execution:
|
|
39
|
-
|
|
40
|
-
1. Simulate locally with the same pinned `opentrons` version used for authoring.
|
|
41
|
-
2. Import the protocol into the correct Opentrons App and require successful
|
|
42
|
-
analysis.
|
|
43
|
-
3. Verify robot model, software, pipettes, mounts, modules, adapters, labware
|
|
44
|
-
definitions, deck fixtures, tip count, source volumes, dead volumes, and
|
|
45
|
-
destination capacity.
|
|
46
|
-
4. Review the run preview and deck map with the operator.
|
|
47
|
-
5. Perform a slow dry run with nonhazardous liquid when geometry, custom
|
|
48
|
-
labware, partial tip pickup, or gripper moves are new.
|
|
49
|
-
6. Keep the emergency stop accessible and follow site-specific biosafety,
|
|
50
|
-
chemical-safety, and contamination-control procedures.
|
|
51
|
-
|
|
52
|
-
Simulation cannot verify physical calibration, liquid properties, meniscus
|
|
53
|
-
behavior, labware manufacturing tolerances, cap or seal removal, tubing, or all
|
|
54
|
-
possible collisions.
|
|
55
|
-
|
|
56
|
-
## Choose the Right Interface
|
|
57
|
-
|
|
58
|
-
Use this skill for Python files imported into the Opentrons App and run through
|
|
59
|
-
the Protocol API.
|
|
60
|
-
|
|
61
|
-
- Use **Protocol Designer** for supported no-code workflows.
|
|
62
|
-
- Use **PyLabRobot** for a hardware-agnostic workflow spanning vendors.
|
|
63
|
-
- Treat the robot's HTTP API as a separate integration surface. If direct HTTP
|
|
64
|
-
control is explicitly required, use the OpenAPI document served by the target
|
|
65
|
-
robot and do not infer endpoints from Protocol API methods.
|
|
66
|
-
|
|
67
|
-
## Required Intake
|
|
68
|
-
|
|
69
|
-
Do not write final protocol code until these facts are known:
|
|
70
|
-
|
|
71
|
-
- Robot: Flex or OT-2, plus installed robot software.
|
|
72
|
-
- Pipette model, volume range, channel count, and mount.
|
|
73
|
-
- Modules and generations; Flex Gripper or Stacker availability.
|
|
74
|
-
- Exact labware API load names and custom definition files, if any.
|
|
75
|
-
- Deck fixtures: Flex trash bin, waste chute, staging slots, or Stackers.
|
|
76
|
-
- Source volumes, destination volumes, dead volume, mixing needs, and liquid
|
|
77
|
-
characteristics.
|
|
78
|
-
- Tip policy: contamination boundaries, reuse policy, filters, partial pickup,
|
|
79
|
-
and total tips.
|
|
80
|
-
- Operator interventions, incubation timing, runtime parameters, and output
|
|
81
|
-
files.
|
|
82
|
-
- Acceptance criteria: tolerated volume error, required controls, and dry-run
|
|
83
|
-
plan.
|
|
84
|
-
|
|
85
|
-
If any physical configuration is uncertain, produce a parameterized draft and
|
|
86
|
-
an explicit assumptions list rather than guessing.
|
|
87
|
-
|
|
88
|
-
## Install and Simulate
|
|
89
|
-
|
|
90
|
-
Flex:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
uv run --with "opentrons==9.1.1" opentrons_simulate protocol.py
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
OT-2 API 2.28:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
uv run --with "opentrons==9.0.0" opentrons_simulate protocol.py
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
The 9.1.1 package intentionally rejects OT-2 protocols after the Flex/OT-2
|
|
103
|
-
release-line split. Always complete OT-2 analysis in the current OT-2 App.
|
|
104
|
-
|
|
105
|
-
For a dedicated Flex environment:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
uv venv --python 3.10
|
|
109
|
-
uv pip install --python .venv/bin/python -r skills/opentrons-integration/requirements-flex.txt
|
|
110
|
-
.venv/bin/opentrons_simulate protocol.py
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Use `requirements-ot2.txt` instead for an OT-2 compatibility environment. On
|
|
114
|
-
Windows, invoke the executable from `.venv\Scripts\opentrons_simulate.exe`.
|
|
115
|
-
Local simulation is for Python protocols; import Protocol Designer JSON files
|
|
116
|
-
into the appropriate Opentrons App instead.
|
|
117
|
-
|
|
118
|
-
## Protocol Skeletons
|
|
119
|
-
|
|
120
|
-
### Flex, API 2.29
|
|
121
|
-
|
|
122
|
-
For Flex, `requirements` is mandatory. Put `apiLevel` only in `requirements`,
|
|
123
|
-
not in both `metadata` and `requirements`.
|
|
124
|
-
|
|
125
|
-
```python
|
|
126
|
-
from opentrons import protocol_api
|
|
127
|
-
|
|
128
|
-
metadata = {
|
|
129
|
-
"protocolName": "Flex transfer",
|
|
130
|
-
"author": "Your Name",
|
|
131
|
-
"description": "Transfer buffer into a plate.",
|
|
132
|
-
}
|
|
133
|
-
requirements = {"robotType": "Flex", "apiLevel": "2.29"}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def run(protocol: protocol_api.ProtocolContext) -> None:
|
|
137
|
-
tips = protocol.load_labware(
|
|
138
|
-
"opentrons_flex_96_tiprack_200ul", "D1"
|
|
139
|
-
)
|
|
140
|
-
reservoir = protocol.load_labware("nest_12_reservoir_15ml", "D2")
|
|
141
|
-
plate = protocol.load_labware("nest_96_wellplate_200ul_flat", "C2")
|
|
142
|
-
protocol.load_trash_bin("A3")
|
|
143
|
-
pipette = protocol.load_instrument(
|
|
144
|
-
"flex_1channel_1000", "left", tip_racks=[tips]
|
|
145
|
-
)
|
|
146
|
-
|
|
147
|
-
pipette.transfer(
|
|
148
|
-
100,
|
|
149
|
-
reservoir["A1"],
|
|
150
|
-
plate["A1"],
|
|
151
|
-
new_tip="always",
|
|
152
|
-
)
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### OT-2, API 2.28
|
|
156
|
-
|
|
157
|
-
For OT-2 API 2.15 and later, a `requirements` block is recommended. OT-2 has a
|
|
158
|
-
fixed trash in slot 12; do not call `load_trash_bin()`.
|
|
159
|
-
|
|
160
|
-
```python
|
|
161
|
-
from opentrons import protocol_api
|
|
162
|
-
|
|
163
|
-
metadata = {
|
|
164
|
-
"protocolName": "OT-2 transfer",
|
|
165
|
-
"author": "Your Name",
|
|
166
|
-
}
|
|
167
|
-
requirements = {"robotType": "OT-2", "apiLevel": "2.28"}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
def run(protocol: protocol_api.ProtocolContext) -> None:
|
|
171
|
-
tips = protocol.load_labware("opentrons_96_tiprack_300ul", "1")
|
|
172
|
-
reservoir = protocol.load_labware("nest_12_reservoir_15ml", "2")
|
|
173
|
-
plate = protocol.load_labware("nest_96_wellplate_200ul_flat", "3")
|
|
174
|
-
pipette = protocol.load_instrument(
|
|
175
|
-
"p300_single_gen2", "left", tip_racks=[tips]
|
|
176
|
-
)
|
|
177
|
-
pipette.transfer(100, reservoir["A1"], plate["A1"])
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Use the lowest API level that provides every required feature when a protocol
|
|
181
|
-
must run across a mixed software fleet. Use the current maximum only when the
|
|
182
|
-
workflow needs its behavior or capabilities.
|
|
183
|
-
|
|
184
|
-
## Authoring Workflow
|
|
185
|
-
|
|
186
|
-
### 1. Select robot and API level
|
|
187
|
-
|
|
188
|
-
Check the maximum supported API in the App under the robot's advanced settings.
|
|
189
|
-
Map every requested feature to its minimum API level using
|
|
190
|
-
`references/api_reference.md`.
|
|
191
|
-
|
|
192
|
-
Important gates:
|
|
193
|
-
|
|
194
|
-
- 2.20: CSV runtime parameters, liquid presence detection, expanded partial
|
|
195
|
-
nozzle layouts.
|
|
196
|
-
- 2.21: Absorbance Plate Reader.
|
|
197
|
-
- 2.22: current labware-level liquid loading methods.
|
|
198
|
-
- 2.23: meniscus locations and labware lids.
|
|
199
|
-
- 2.24: liquid classes and liquid-class complex commands.
|
|
200
|
-
- 2.25: Flex Stacker and Flex 96-Channel 200 µL pipette.
|
|
201
|
-
- 2.27: dynamic pipetting and concurrent module actions.
|
|
202
|
-
- 2.28: 20 µL Flex tips, improved partial-tip return, and thermocycler ramp rate.
|
|
203
|
-
- 2.29: step grouping; Flex only at the verified baseline.
|
|
204
|
-
|
|
205
|
-
### 2. Build the deck explicitly
|
|
206
|
-
|
|
207
|
-
- Use exact load names from the official Labware Library.
|
|
208
|
-
- Load Flex trash bins or the waste chute explicitly.
|
|
209
|
-
- Account for module footprints, staging slots, Stacker shuttles, gripper paths,
|
|
210
|
-
and tall-labware adjacency.
|
|
211
|
-
- Load labware on adapters or module contexts in the documented order.
|
|
212
|
-
- Never substitute a similarly named labware definition; geometry and offsets
|
|
213
|
-
are part of the protocol's safety model.
|
|
214
|
-
|
|
215
|
-
See `references/modules_and_deck.md`.
|
|
216
|
-
|
|
217
|
-
### 3. Select pipettes and tips
|
|
218
|
-
|
|
219
|
-
Current load names are:
|
|
220
|
-
|
|
221
|
-
- Flex: `flex_1channel_50`, `flex_1channel_1000`,
|
|
222
|
-
`flex_8channel_50`, `flex_8channel_1000`,
|
|
223
|
-
`flex_96channel_200`, `flex_96channel_1000`.
|
|
224
|
-
- OT-2 GEN2: `p20_single_gen2`, `p20_multi_gen2`,
|
|
225
|
-
`p300_single_gen2`, `p300_multi_gen2`, `p1000_single_gen2`.
|
|
226
|
-
|
|
227
|
-
Check that every requested volume is within the configured pipette and tip
|
|
228
|
-
range. A 100 nL operation is not an Opentrons pipetting task.
|
|
229
|
-
|
|
230
|
-
### 4. Choose a liquid-handling layer
|
|
231
|
-
|
|
232
|
-
- Use `aspirate()`, `dispense()`, `mix()`, `air_gap()`, `blow_out()`, and
|
|
233
|
-
`touch_tip()` for explicit control.
|
|
234
|
-
- Use `transfer()`, `distribute()`, and `consolidate()` for standard movements.
|
|
235
|
-
- On Flex, consider `transfer_with_liquid_class()`,
|
|
236
|
-
`distribute_with_liquid_class()`, or `consolidate_with_liquid_class()` for
|
|
237
|
-
Opentrons-verified aqueous, volatile, or viscous behavior.
|
|
238
|
-
- Use dynamic start/end locations or `dynamic_mix()` only when API 2.27+ and the
|
|
239
|
-
geometry has been reviewed.
|
|
240
|
-
|
|
241
|
-
Model contamination boundaries before optimizing tips. Never reuse a tip across
|
|
242
|
-
unrelated samples merely to reduce consumables. See
|
|
243
|
-
`references/liquid_handling.md`.
|
|
244
|
-
|
|
245
|
-
### 5. Add setup information and runtime controls
|
|
246
|
-
|
|
247
|
-
Use `define_liquid()` and labware-level `load_liquid()` or
|
|
248
|
-
`load_liquid_by_well()` to improve setup visualization. Do not use deprecated
|
|
249
|
-
`Well.load_liquid()` in new API 2.22+ protocols.
|
|
250
|
-
|
|
251
|
-
Define operator-controlled values in `add_parameters()` and read them from
|
|
252
|
-
`protocol.params`. Validate ranges and use defaults that produce a safe,
|
|
253
|
-
meaningful simulation. CSV parameters have no default and only one CSV
|
|
254
|
-
parameter can be selected per run.
|
|
255
|
-
|
|
256
|
-
### 6. Budget resources
|
|
257
|
-
|
|
258
|
-
Before simulation, calculate:
|
|
259
|
-
|
|
260
|
-
- Tips or tip sets required under every branch.
|
|
261
|
-
- Source volume = delivered volume + mixing loss + disposal volume + dead
|
|
262
|
-
volume + a justified reserve.
|
|
263
|
-
- Maximum destination volume after every addition and mix.
|
|
264
|
-
- Number of module, adapter, trash, and staging positions.
|
|
265
|
-
- Incubation and module timing, including concurrent tasks.
|
|
266
|
-
|
|
267
|
-
### 7. Validate in layers
|
|
268
|
-
|
|
269
|
-
1. Compile: `python -m py_compile protocol.py`.
|
|
270
|
-
2. Simulate with the pinned package.
|
|
271
|
-
3. Inspect the run log for command count, tip changes, pauses, and unexpected
|
|
272
|
-
locations.
|
|
273
|
-
4. Import into the appropriate App and require successful analysis.
|
|
274
|
-
5. Check protocol visualization, runtime parameter defaults, deck map, module
|
|
275
|
-
setup, and labware offsets.
|
|
276
|
-
6. Perform an operator-reviewed dry run before first use.
|
|
277
|
-
|
|
278
|
-
See `references/validation_and_operations.md`.
|
|
279
|
-
|
|
280
|
-
## Common Failure Modes
|
|
281
|
-
|
|
282
|
-
- Using old names such as `p300_single_flex`; use current `flex_*` load names.
|
|
283
|
-
- Declaring `apiLevel` in both `metadata` and `requirements`.
|
|
284
|
-
- Using API 2.29 for OT-2.
|
|
285
|
-
- Forgetting a Flex trash bin or waste chute.
|
|
286
|
-
- Loading a Magnetic Module on Flex; use supported Flex magnetic hardware.
|
|
287
|
-
- Calling `read(wavelengths=...)` on the plate reader; call `initialize()` first,
|
|
288
|
-
then `read()`.
|
|
289
|
-
- Using deprecated `Well.load_liquid()` instead of labware-level methods.
|
|
290
|
-
- Assuming simulation verifies calibration, liquid height, or physical
|
|
291
|
-
clearances.
|
|
292
|
-
- Passing an unsafe well to a partial-nozzle pipette, which can place tips
|
|
293
|
-
outside labware and cause a crash.
|
|
294
|
-
- Using `new_tip="once"` across samples with incompatible contamination
|
|
295
|
-
requirements.
|
|
296
|
-
|
|
297
|
-
## Bundled Templates
|
|
298
|
-
|
|
299
|
-
| File | Purpose |
|
|
300
|
-
| --- | --- |
|
|
301
|
-
| `scripts/basic_protocol_template.py` | Minimal Flex 2.29 transfer with current names |
|
|
302
|
-
| `scripts/ot2_basic_protocol_template.py` | Minimal OT-2 2.28 transfer |
|
|
303
|
-
| `scripts/serial_dilution_template.py` | Full-plate 1:2 dilution with an 8-channel Flex pipette |
|
|
304
|
-
| `scripts/pcr_setup_template.py` | Flex PCR setup and Thermocycler cycling |
|
|
305
|
-
| `scripts/runtime_parameters_template.py` | Safe numeric and Boolean runtime parameters |
|
|
306
|
-
| `scripts/absorbance_reader_template.py` | Correct Flex plate-reader initialization and read workflow |
|
|
307
|
-
|
|
308
|
-
Templates are starting points, not validated assays. Replace volumes, labware,
|
|
309
|
-
liquids, timing, and tip policies only after checking hardware compatibility and
|
|
310
|
-
the wet-lab method.
|
|
311
|
-
|
|
312
|
-
## Reference Guide
|
|
313
|
-
|
|
314
|
-
| Reference | Use it for |
|
|
315
|
-
| --- | --- |
|
|
316
|
-
| `references/api_reference.md` | Current load names, version gates, and high-value methods |
|
|
317
|
-
| `references/protocol_authoring.md` | Requirements, labware, runtime parameters, and design workflow |
|
|
318
|
-
| `references/liquid_handling.md` | Command selection, liquid classes, sensing, and partial tips |
|
|
319
|
-
| `references/modules_and_deck.md` | Module compatibility, deck fixtures, gripper, and Stacker |
|
|
320
|
-
| `references/validation_and_operations.md` | Simulation, App analysis, dry runs, and troubleshooting |
|
|
321
|
-
| `references/migration-api-2-19-to-2-29.md` | Updating older protocols and this skill's former patterns |
|
|
322
|
-
| `references/sources.md` | Official documentation and release sources |
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: optimize-for-gpu
|
|
3
|
-
description: GPU-accelerates scientific Python on NVIDIA hardware and verifies that the result is correct and faster. Use for CUDA/GPU optimization; CPU-bound NumPy, SciPy, pandas, scikit-learn, NetworkX, scikit-image, vector-search, image-processing, graph, simulation, or file-I/O workloads; CuPy, cuDF, cuML, cuGraph, cuVS, cuCIM, KvikIO, Warp, Newton, Numba-CUDA, or RAFT questions; and profiling, memory-transfer, kernel, or multi-GPU bottlenecks. Also use when large data-parallel Python code is slow and GPU acceleration is a plausible option, even if the user does not name CUDA.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Requires an NVIDIA CUDA-capable GPU for GPU execution. RAPIDS 26.06 requires Python 3.11+ on Linux or WSL2 and matching CUDA 12 or 13 wheels. Package installation needs network access.
|
|
6
|
-
metadata:
|
|
7
|
-
version: "1.3"
|
|
8
|
-
skill-author: K-Dense, Inc.
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# GPU Optimization for Python with NVIDIA
|
|
12
|
-
|
|
13
|
-
Treat GPU acceleration as an evidence-driven optimization, not an automatic rewrite. Preserve the
|
|
14
|
-
user's numerical and algorithmic contract, measure with representative data, and keep the GPU
|
|
15
|
-
version only when synchronized end-to-end benchmarks show a useful improvement.
|
|
16
|
-
|
|
17
|
-
## When This Skill Applies
|
|
18
|
-
|
|
19
|
-
- User wants to speed up numerical/scientific Python code
|
|
20
|
-
- User is working with large arrays, matrices, or dataframes
|
|
21
|
-
- User mentions CUDA, GPU, NVIDIA, or parallel computing
|
|
22
|
-
- User has NumPy, pandas, SciPy, scikit-learn, NetworkX, or scipy.sparse.linalg code that processes large datasets
|
|
23
|
-
- User needs low-level GPU primitives (sparse eigensolvers, device memory management, multi-GPU communication)
|
|
24
|
-
- User is doing machine learning (training, inference, hyperparameter tuning, preprocessing)
|
|
25
|
-
- User is doing graph analytics (centrality, community detection, shortest paths, PageRank, etc.)
|
|
26
|
-
- User is doing vector search, nearest neighbor search, similarity search, or building a RAG pipeline
|
|
27
|
-
- User has Faiss, Annoy, ScaNN, or sklearn NearestNeighbors code that could be GPU-accelerated
|
|
28
|
-
- User wants GPU-accelerated interactive dashboards, cross-filtering, or exploratory data analysis on large datasets
|
|
29
|
-
- User is doing geospatial analysis (point-in-polygon, spatial joins, trajectory analysis, distance calculations) with GeoPandas or shapely
|
|
30
|
-
- User is doing image processing, computer vision, or medical imaging (filtering, segmentation, morphology, feature detection) with scikit-image or OpenCV
|
|
31
|
-
- User is working with whole-slide images (WSI), digital pathology, microscopy, or remote sensing imagery
|
|
32
|
-
- User is loading large binary data files into GPU memory (numpy.fromfile → cupy, or Python open() → GPU array)
|
|
33
|
-
- User needs to read files from S3, HTTP, or WebHDFS directly into GPU memory
|
|
34
|
-
- User mentions GPUDirect Storage (GDS) or wants to bypass CPU-memory staging for file IO
|
|
35
|
-
- User is doing physics simulation (particles, cloth, fluids, rigid bodies) or differentiable simulation
|
|
36
|
-
- User needs mesh operations (ray casting, closest-point queries, signed distance fields) or geometry processing on GPU
|
|
37
|
-
- User is doing robotics (kinematics, dynamics, control) with transforms and quaternions
|
|
38
|
-
- User has Python simulation loops that could be JIT-compiled to GPU kernels
|
|
39
|
-
- User mentions NVIDIA Warp or wants differentiable GPU simulation integrated with PyTorch/JAX
|
|
40
|
-
- User is doing simulations, signal processing, financial modeling, bioinformatics, physics, or any compute-intensive work
|
|
41
|
-
- User wants to optimize existing code and GPU acceleration is the right answer
|
|
42
|
-
|
|
43
|
-
## Choose the Smallest Suitable Layer
|
|
44
|
-
|
|
45
|
-
Prefer a maintained library implementation over a custom kernel:
|
|
46
|
-
|
|
47
|
-
| Existing workload | Preferred path | Use for |
|
|
48
|
-
| --- | --- | --- |
|
|
49
|
-
| NumPy / SciPy | **CuPy** | arrays, sparse matrices, linear algebra, FFTs, signal processing |
|
|
50
|
-
| pandas | **cudf.pandas**, then **cuDF** | accelerator mode first; native API for more control |
|
|
51
|
-
| scikit-learn | **cuml.accel**, then **cuML** | accelerator mode first; native estimators as needed |
|
|
52
|
-
| NetworkX | **nx-cugraph**, then **cuGraph** | backend dispatch first; native graph API at scale |
|
|
53
|
-
| scikit-image | **cuCIM** | GPU image processing and whole-slide imaging |
|
|
54
|
-
| Faiss / Annoy / k-NN | **cuVS** | exact and approximate vector search |
|
|
55
|
-
| Raw or remote file I/O | **KvikIO** | GPU buffers and GPUDirect Storage |
|
|
56
|
-
| Custom array kernels | **Numba-CUDA-MLIR** for new work; **Numba-CUDA** for existing code | explicit SIMT kernels and shared memory |
|
|
57
|
-
| Spatial or differentiable kernels | **Warp** | geometry, simulation kernels, robotics, autodiff |
|
|
58
|
-
| High-level physics simulation | **Newton** | maintained engine that succeeds the removed `warp.sim` module |
|
|
59
|
-
| Low-level RAPIDS primitives | **RAFT** (`pylibraft`) | sparse eigensolvers, resources, multi-GPU building blocks |
|
|
60
|
-
|
|
61
|
-
Do not move code out of PyTorch, JAX, TensorFlow, or another GPU-native framework merely to use
|
|
62
|
-
one of these libraries. First remove CPU round trips and use the framework's compiler, profiler,
|
|
63
|
-
mixed-precision, and batching facilities.
|
|
64
|
-
|
|
65
|
-
Treat these as legacy-only:
|
|
66
|
-
|
|
67
|
-
| Project | Status | Guidance |
|
|
68
|
-
| --- | --- | --- |
|
|
69
|
-
| **cuxfilter** | Final release 26.06 | Maintain existing dashboards only. For new work, combine cuDF with HoloViews/hvPlot/Datashader and serve with Panel, Dash, Streamlit, or Bokeh. |
|
|
70
|
-
| **cuSpatial** | Archived at 25.04 | Use only in an isolated legacy environment. For new work, keep geometry in GeoPandas/Shapely and accelerate compatible tabular stages with cuDF. |
|
|
71
|
-
|
|
72
|
-
Full per-library guidance, including when each is the *wrong* choice and how to combine
|
|
73
|
-
them, is in [references/decision_framework.md](references/decision_framework.md).
|
|
74
|
-
Install commands and CUDA version selection are in
|
|
75
|
-
[references/installation.md](references/installation.md). Before/after conversions for
|
|
76
|
-
every library are in
|
|
77
|
-
[references/code_transformation_patterns.md](references/code_transformation_patterns.md).
|
|
78
|
-
|
|
79
|
-
## Optimization Workflow
|
|
80
|
-
|
|
81
|
-
### 1. Define the contract and baseline
|
|
82
|
-
|
|
83
|
-
- Capture a representative input, expected output, and acceptable numerical tolerance.
|
|
84
|
-
- Measure the current end-to-end path, including input, transfers, compute, and output.
|
|
85
|
-
- Profile before changing code. Use CPU profilers for CPU code and identify whether the real limit
|
|
86
|
-
is compute, memory bandwidth, allocation, transfer, synchronization, or storage.
|
|
87
|
-
- Record hardware, package versions, dtypes, shapes, batch size, and warm-up policy with results.
|
|
88
|
-
|
|
89
|
-
### 2. Check suitability before porting
|
|
90
|
-
|
|
91
|
-
GPU execution is promising when the hot path exposes substantial independent work, runs often
|
|
92
|
-
enough to amortize initialization and transfer, and has a working set that fits available device
|
|
93
|
-
memory with room for temporaries. Keep a CPU path when the workload is small, mostly sequential,
|
|
94
|
-
dominated by unsupported operations, or requires frequent host-device round trips.
|
|
95
|
-
|
|
96
|
-
Do not use fixed row-count thresholds as proof. Benchmark the user's actual shapes and hardware.
|
|
97
|
-
For out-of-core data, estimate peak working memory and choose chunking, Dask, or a streaming design
|
|
98
|
-
before allocating.
|
|
99
|
-
|
|
100
|
-
### 3. Try the least disruptive implementation
|
|
101
|
-
|
|
102
|
-
1. If the code already uses a GPU-native framework, optimize within that framework.
|
|
103
|
-
2. Try accelerator or backend modes (`cudf.pandas`, `cuml.accel`, `nx-cugraph`).
|
|
104
|
-
3. Move to a native GPU API only where accelerator coverage or performance is insufficient.
|
|
105
|
-
4. Write a custom kernel only when profiling shows an operation without a suitable library
|
|
106
|
-
implementation.
|
|
107
|
-
|
|
108
|
-
Read the relevant library reference before writing code; compatible names can still differ in
|
|
109
|
-
defaults, dtypes, output types, and supported arguments.
|
|
110
|
-
|
|
111
|
-
### 4. Keep a coherent GPU data path
|
|
112
|
-
|
|
113
|
-
- Transfer inputs once and keep intermediates device-resident.
|
|
114
|
-
- Reuse allocations and prefer `out=` or in-place forms when semantics allow.
|
|
115
|
-
- Batch small operations; fuse elementwise work when it removes intermediate arrays.
|
|
116
|
-
- Use pinned host memory and non-default streams only after profiling shows transfer overlap matters.
|
|
117
|
-
- Choose `float32`, mixed precision, or reduced-precision storage only when the contract permits it.
|
|
118
|
-
|
|
119
|
-
### 5. Validate semantics before speed
|
|
120
|
-
|
|
121
|
-
- Compare CPU and GPU outputs on small deterministic fixtures and representative data.
|
|
122
|
-
- Use explicit tolerances for floating-point results and test edge cases, NaNs, ordering, and dtypes.
|
|
123
|
-
- For approximate nearest-neighbor indexes, report recall@k against exact search; do not compare an
|
|
124
|
-
exact CPU algorithm with an approximate GPU algorithm as if they were equivalent.
|
|
125
|
-
- Check accelerator warnings and logs for CPU fallback.
|
|
126
|
-
|
|
127
|
-
### 6. Benchmark GPU code correctly
|
|
128
|
-
|
|
129
|
-
GPU work is asynchronous, so a CPU timer around an unsynchronized call measures enqueue time.
|
|
130
|
-
Warm up context creation and JIT compilation, then use CUDA events or a library-aware timer:
|
|
131
|
-
|
|
132
|
-
```python
|
|
133
|
-
from cupyx.profiler import benchmark
|
|
134
|
-
|
|
135
|
-
print(benchmark(gpu_function, (arg1, arg2), n_warmup=10, n_repeat=100))
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Use `%gpu_timeit` in notebooks, Nsight Systems (`nsys`) for end-to-end timelines, and Nsight
|
|
139
|
-
Compute (`ncu`) for kernel analysis. Report both synchronized kernel/region time and realistic
|
|
140
|
-
end-to-end latency; include transfer and conversion costs when production pays them.
|
|
141
|
-
|
|
142
|
-
### 7. Keep, revise, or reject the port
|
|
143
|
-
|
|
144
|
-
Retain the GPU path only when it passes correctness checks and improves the metric the user cares
|
|
145
|
-
about on representative data. If it does not, explain whether the limiting factor is problem size,
|
|
146
|
-
transfers, unsupported fallback, memory pressure, launch granularity, or the algorithm itself.
|
|
147
|
-
|
|
148
|
-
## Important Notes
|
|
149
|
-
|
|
150
|
-
- Provide a CPU fallback when the application requires portability; otherwise fail early with a
|
|
151
|
-
clear hardware and dependency error.
|
|
152
|
-
- Test numerical correctness against CPU results (GPU floating point may differ slightly due to operation ordering)
|
|
153
|
-
- GPU memory is limited — for datasets larger than GPU memory, consider chunking or using RAPIDS Dask for multi-GPU
|
|
154
|
-
- Prefer the CUDA Array Interface or DLPack for supported zero-copy interchange, but verify device,
|
|
155
|
-
dtype, contiguity, ownership, and stream semantics rather than assuming every conversion is free.
|
|
156
|
-
|
|
157
|
-
## Reference Files
|
|
158
|
-
|
|
159
|
-
Before writing any GPU optimization code, read the relevant reference file(s):
|
|
160
|
-
|
|
161
|
-
| File | When to Read |
|
|
162
|
-
|------|-------------|
|
|
163
|
-
| `references/cupy.md` | User has NumPy/SciPy code, or needs array operations on GPU |
|
|
164
|
-
| `references/numba.md` | User has existing Numba-CUDA code or needs explicit SIMT kernels; note the migration path to Numba-CUDA-MLIR |
|
|
165
|
-
| `references/cudf.md` | User has pandas code, or needs dataframe operations on GPU |
|
|
166
|
-
| `references/cuml.md` | User has scikit-learn code, or needs ML training/inference/preprocessing on GPU |
|
|
167
|
-
| `references/cugraph.md` | User has NetworkX code, or needs graph analytics on GPU |
|
|
168
|
-
| `references/warp.md` | User needs GPU kernels for simulation, spatial computing, mesh/volume queries, differentiable programming, or robotics; use Newton for a high-level physics engine |
|
|
169
|
-
| `references/kvikio.md` | User needs high-performance file IO to/from GPU, GPUDirect Storage, reading S3/HTTP to GPU, or Zarr on GPU |
|
|
170
|
-
| `references/cuxfilter.md` | User maintains or explicitly requests cuxfilter (sunset — 26.06 is the final release) |
|
|
171
|
-
| `references/cucim.md` | User has scikit-image code, or needs image processing, digital pathology, or WSI reading on GPU |
|
|
172
|
-
| `references/cuvs.md` | User needs vector search, nearest neighbors, similarity search, or RAG retrieval on GPU |
|
|
173
|
-
| `references/cuspatial.md` | User maintains or explicitly requests cuSpatial (archived — frozen at 25.04 and isolated from current RAPIDS) |
|
|
174
|
-
| `references/raft.md` | User needs sparse eigensolvers, device memory management, or multi-GPU primitives |
|
|
175
|
-
|
|
176
|
-
Read the specific reference before writing code — they contain detailed API patterns, optimization techniques, and pitfalls specific to each library.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: owasp-top10
|
|
3
|
-
description: "OWASP Top 10 Web & API Security Checklist - Guidelines, code patterns, and automated remediation for modern web application vulnerabilities."
|
|
4
|
-
risk: low
|
|
5
|
-
source: built-in
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# OWASP Top 10 Security Checklist
|
|
9
|
-
|
|
10
|
-
## 1. Broken Access Control (A01)
|
|
11
|
-
- **Check**: Are access control decisions enforced server-side on every request?
|
|
12
|
-
- **Remedy**: Implement centralized authorization middleware and verify tenancy on every query.
|
|
13
|
-
|
|
14
|
-
## 2. Cryptographic Failures (A02)
|
|
15
|
-
- **Check**: Are sensitive data in transit and at rest encrypted? Are deprecated algorithms (MD5, SHA1, DES) avoided?
|
|
16
|
-
- **Remedy**: Use Argon2id/bcrypt for passwords, AES-GCM for encryption, and TLS 1.3 for transport.
|
|
17
|
-
|
|
18
|
-
## 3. Injection (A03)
|
|
19
|
-
- **Check**: Are SQL, NoSQL, OS command, and LDAP queries parameterized?
|
|
20
|
-
- **Remedy**: Never concatenate user input into database queries or shell execution strings.
|
|
21
|
-
|
|
22
|
-
## 4. Insecure Design (A04)
|
|
23
|
-
- **Check**: Are threat modeling and defense-in-depth principles applied?
|
|
24
|
-
- **Remedy**: Enforce least privilege, strict input boundaries, and rate limits.
|
|
25
|
-
|
|
26
|
-
## 5. Security Misconfiguration (A05)
|
|
27
|
-
- **Check**: Are default passwords, unnecessary features, and debug error messages disabled in production?
|
|
28
|
-
- **Remedy**: Disable detailed stack traces in production API responses and enforce strict CSP headers.
|
|
29
|
-
|
|
30
|
-
## 6. Vulnerable and Outdated Components (A06)
|
|
31
|
-
- **Check**: Are dependencies monitored for known CVEs (`npm audit`, `bun audit`)?
|
|
32
|
-
- **Remedy**: Regularly update dependencies and pin exact versions.
|
|
33
|
-
|
|
34
|
-
## 7. Identification and Authentication Failures (A07)
|
|
35
|
-
- **Check**: Is multi-factor authentication supported? Are session identifiers secure?
|
|
36
|
-
- **Remedy**: Implement exponential backoff for failed logins and enforce strong password policies.
|
|
37
|
-
|
|
38
|
-
## 8. Software and Data Integrity Failures (A08)
|
|
39
|
-
- **Check**: Are plugins, libraries, and CDNs verified with integrity hashes?
|
|
40
|
-
- **Remedy**: Enforce subresource integrity (SRI) and signed package downloads.
|
|
41
|
-
|
|
42
|
-
## 9. Security Logging and Monitoring Failures (A09)
|
|
43
|
-
- **Check**: Are login attempts, access failures, and sensitive transactions logged?
|
|
44
|
-
- **Remedy**: Centralize structured security logs without logging plaintext credentials or PII.
|
|
45
|
-
|
|
46
|
-
## 10. Server-Side Request Forgery - SSRF (A10)
|
|
47
|
-
- **Check**: Do servers make HTTP requests to user-supplied URLs without validation?
|
|
48
|
-
- **Remedy**: Whitelist permitted target domains and reject private/internal IP ranges.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Beifang Niu
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|