# seam-cli
SeamJS command-line tool for building HTML skeleton templates, generating typed TypeScript clients from procedure manifests, and orchestrating dev servers.
## Crate Structure
The CLI is split into three crates:
- `seam-skeleton` (`src/cli/skeleton/`) — HTML skeleton extraction pipeline (slot, extract, document, CTR check)
- `seam-codegen` (`src/cli/codegen/`) — TypeScript codegen, manifest types, RPC hash map
- `seam-cli` (`src/cli/core/`) — Build orchestration, dev servers, CLI entry point (this crate)
## Modules
- `src/main.rs` — CLI entry point (clap), dispatches subcommands
- `src/config/` — Parses config files (`seam.config.ts` > `.mjs` > `.toml`), walks up directory tree to find config
- `src/pull.rs` — Fetches `/_seam/manifest.json` from a running server
- `src/build/` — Build pipeline orchestration (route processing, asset packaging)
- `src/dev/` — Starts backend + frontend dev servers
- `src/ui.rs` — Terminal output formatting
## Commands
| `seam pull` | Fetch procedure manifest from a running server |
| `seam generate` | Generate typed client from a manifest file |
| `seam build` | Extract HTML skeletons, run full build pipeline with per-page splitting |
| `seam dev` | Start backend and frontend dev servers |
| `seam clean` | Remove build artifacts (`.seam/` directory) |
| `seam --version` | Print CLI version |
## Development
- Build: `cargo build -p seam-cli`
- Test: `cargo test -p seam-cli`
- Run: `cargo run -p seam-cli -- <command>`
## Notes
- The crate name is `seam-cli`, but the binary name is `seam`
- Config file lookup walks up the directory tree until it finds `seam.config.ts`, `seam.config.mjs`, or `seam.toml`
- Skeleton logic lives in `seam-skeleton`, codegen in `seam-codegen`