/** * Skill setup manifest — the optional `setup` block of a skill's `skill.json`. * * It declares what a skill needs on the machine before it can run, so a * runner can install it without a human reading the README: * * - `command` — a program on PATH (or at a known path), installed per OS with * Homebrew, apt-get, or a script shipped next to the skill. * - `file` — a large file such as a model: URL + sha256 + size + where it goes. * - `python` — packages installed into a Crewly-managed venv * (`$CREWLY_HOME/venv/`), probed by importing modules. * * The format is declarative on purpose: package names, paths and URLs are * validated here, so a registry entry cannot smuggle shell into a field that * is only meant to hold a package name. The two places that do run shell — * `check.shell` and `install..script` — are code shipped by the skill * itself, which is no more trusted than its `execute.sh` and goes through the * same trust rule (see skill-install-job.service). * * Spec: specs/skill-auto-install.md * * @module services/skill-setup/skill-setup-manifest */ /** Operating-system families a `command` step can carry install recipes for. */ export type OsFamily = 'darwin' | 'debian' | 'linux'; /** Every OS family, in manifest order. */ export declare const OS_FAMILIES: readonly OsFamily[]; /** How to install a command on one OS family. Exactly the listed methods run, in this order. */ export interface OsInstallRecipe { /** Homebrew formulae (`brew install …`) */ brew?: string[]; /** Homebrew casks (`brew install --cask …`) */ brewCask?: string[]; /** Debian/Ubuntu packages (`apt-get install -y …`, needs root or passwordless sudo) */ apt?: string[]; /** A bash script in the skill directory (file name only), run with `bash /