/** * `/choosing-asset-pipelines/SKILL.md` — WHICH lane makes a given thing, before any * command runs. * * Exists because the GDK grew several ways to make the same thing — a level from the baseline * terrain, `bitmagic forge` (five modes), a Blender script or a Unity port; a character from the * free block default, a free library hit, a voxel forge or a low-poly forge at four times the * price — and the routing knowledge sat in five places: the per-command reference in * `generating-assets`, the "one forge" rule in `planning-a-game`, the Blender skill's §0 gate, the * hosted Creator agent's GLB-vs-voxel rules (which never reach a CLI project at all), and code * comments. An agent took the first lane it remembered, and a creator had to know Bitmagic's * internals to steer it. This file is the table by NEED: conditions (art style, model class, * local tooling, prototype vs polished), rough cost, rough time, recommended order — and the rule * for when the agent decides alone versus asks the creator with a recommendation. * * It is a shipped skill so that `bitmagic upgrade` re-renders it in every project with every CLI * release — that is the whole update mechanism; nothing here is hand-maintained in a creator's * project. Same file-layout contract as `skill-files.ts`: a pure function returning the markdown * as a template literal, every backtick inside escaped as \` and every `${` escaped, except the * `${PRIMARY_SKILLS_DIR}` interpolations, which are the point (sibling skills are cited by the * fixed path every agent's project has, never by a vendor path). Imports only `agent-targets.js` * so `project.ts` can import this without a cycle. * * What keeps it honest, and what does not: * - `__tests__/asset-pipeline-skill-files.test.ts` fails when a `bitmagic generate` subcommand or * a `bitmagic character` verb exists with no row here (deprecated aliases excepted), when a row * names a subcommand or a skill directory that does not exist, or when one of the need sections * or the two defaults (audio opt-in, block characters) disappears. So a new generator cannot * ship without a row — but a RENAMED flag can: the day this shipped, `--no-library` had just * become `--fresh` and `--library-only` had become `character search` + `add`, and every test * passed. That is why the sheet names COMMANDS ONLY and tells the agent to read `--help` — * a flag written here is a flag that will be wrong. * - Prices and timings are NOT test-checked. Sparks come from `api-server/src/llm/llm_cost.json` * (`toolCosts`, 1 spark = $0.01): glb/model/prop 3, voxel character 15, low-poly character 60, * library-only 0, skybox and background 5, image 3, cover and reference 6, block-type 3, sound * 12, music 0.25/s, video 1.35/s, authored animation 1, video-to-motion 15; forge and vehicle * are usage-priced, presets free. Timings are observed. The CLI cannot import that file, so a * price, flag or backend change is invisible to the test — which is why the release checklist * (`.claude/skills/generate-release-checklist`) asks for this file to be re-read whenever a * generator or `toolCosts` changes. Every figure is written as approximate for the same reason. */ export declare function renderAssetPipelinesSkill(): string;