salpa-cli
The Salpa node authoring CLI. Scaffolds node packages that match the shipped template contract — the deterministic path to a new node — and checks them against that contract before you install them.
python3 -m pip install salpa-cli
salpa new my-analyzer # interactive
salpa new my-suite -t multi-node-package --yes
salpa validate my_suite # will it install and register?
Installing adds the salpa command. If your shell can't find salpa afterward,
your Python scripts directory isn't on your PATH —
installing into a virtual environment is the simplest fix (it puts salpa on PATH).
salpa new creates ./<under_scored_name>/ from a bundled template, with every
placeholder substituted and the directory underscored (the dir name becomes the
Python package name, so a hyphen would break from .core import ...; meta.toml's
name stays kebab-case).
Templates
Templates ship inside the wheel and are the single source of truth for the node contract, so there is no second copy to drift.
| Template | For |
|---|---|
individual-node |
one node with its own pixi env (default) |
multi-node-package |
several related nodes sharing one pixi env, chained via predecessor_data |
Options
salpa new [NAME]
-t, --template individual-node | multi-node-package
-d, --description one-line description
--author author name
--category UI category (e.g. "Cheminformatics")
-o, --output directory to create the package in (default: .)
-y, --yes non-interactive: accept defaults, no prompts
--install run `pixi install` in the new package afterwards
Validating
salpa validate [PATH] checks a package against the contract the app enforces at
install and registration time. Every check maps to a real failure — a node missing
from [package.nodes], a shared-environment name that drifted between three files,
a stray per-node pixi.toml that silently opts a node out of the shared env. It is
not a linter: style is not checked.
salpa validate [PATH] # default: the current directory
--strict # warnings become errors (CI)
--ignore CODE # suppress one check by code, repeatable
--json # machine-readable report
--no-import # skip the import checks
--python PATH # override the auto-detected import-check interpreter
Exit codes: 0 clean · 1 at least one error · 2 the path is not a package.
Findings are ERROR (will not install or will not register) or WARN (installs,
but is probably not what you meant). Each carries a stable code (E3, S2, …) so
it can be quoted, grepped, and suppressed.
Import checks. I1-I3 import your node.py in a subprocess to confirm the
app can read its OPTIONS. They need the authoring SDK (bocoflow_core), and the
interpreter that has it is found for you — your package already declares the SDK in
its own pixi.toml, so its solved test environment is the right one to judge the
package against:
pixi install -e test # solve the test env — the one your pixi.toml puts the SDK in
salpa validate # the import checks now run, no flags
The search order, first hit wins: .pixi/envs/test → .pixi/envs/default → the
interpreter running salpa. A candidate that cannot import bocoflow_core is
passed over, and the report names the one that answered. pip install bocoflow-core-sdk beside salpa works too, and --python PATH overrides the
search entirely (a --python that lacks the SDK skips rather than falling back —
naming an interpreter is an instruction, not a hint).
With no interpreter at all, the checks are skipped, and both the status line and
the summary say so — No findings (import checks skipped) is a smaller claim than
No findings. This package should install and register., and reads as one.
Suppressing a check. Some warnings describe a shape that is occasionally
correct — E3 (a per-node pixi.toml) is a deliberate opt-out when a node's
dependencies conflict with its package's shared environment. --ignore lets such a
package pass --strict without silencing everything:
salpa validate --strict --ignore E3
Suppressed findings are still reported (and appear under suppressed in --json)
— they are hidden from the exit code, not from you.
salpa new runs a validation pass over its own output and prints a one-line
summary. That pass covers structure, naming and environment only; the import
checks are left to salpa validate.
Authoring guide
salpa docs prints the bundled node-authoring guide. Full documentation:
https://salpa.app/docs/custom-nodes
Reserved
salpa publish / install / run are reserved for later and not implemented
yet. The current surface is salpa new, salpa validate and salpa docs.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file salpa_cli-0.2.1-py3-none-any.whl.
File metadata
- Download URL: salpa_cli-0.2.1-py3-none-any.whl
- Upload date:
- Size: 68.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbb92a752fc6d6c68d47f1a231665300cfa55730ed82fcc36b3085d7a1d2fc13
|
|
| MD5 |
512e89848ea3b30d9aa667c33871fac3
|
|
| BLAKE2b-256 |
74cd50665811e9586345733ba0830b53926748211ce6fd94bebc30c907c643be
|