chore: tighten changeset config, add stanza-cli bin alias, and sync docs

- Set `disableThanks`, `prettier: false`, `privatePackages: { version: false, tag: false }`, and `updateInternalDependents: "always"` in `.changeset/config.json`; simplify the release workflow by dropping `NPM_TOKEN` and `NPM_CONFIG_PROVENANCE` from the CI env and switching to `vp run version`
- Add `stanza-cli` as a second bin entry in `publishConfig` alongside `stanza` so the package is callable by either name; reset the CLI package version to `0.0.0` so changesets drive versioning from a clean baseline
- Update docs throughout to reflect the `doctor` command surface (CLI reference, agents guide, telemetry list), the main-file registry URL convention (`registries` entries now point at the full `index.json` URL, not a directory), and the `STANZA_REGISTRY` env var description
This commit is contained in:
2026-05-30 13:59:46 -04:00
parent e89fb63c31
commit ea7fe48d00
19 changed files with 232 additions and 228 deletions
+2 -6
View File
@@ -1,12 +1,8 @@
---
"stanza-cli": minor
"create-stanza": patch
"create-stanza": minor
---
Add the **`api`** category to the taxonomy (single-choice, `home: package``packages/api/`), matching the documented roadmap for a typed RPC layer between the framework and your services. No first-party modules ship for it yet, so it's inert until a `trpc`/`orpc` module lands — the wizard skips it and the web builder hides it while empty. This is purely additive: `stanza.json`'s schema is unchanged (the `modules` record already keys on arbitrary categories).
`stanza add` now reports a mid-apply failure with recovery guidance instead of a raw stack trace: a region conflict states plainly that nothing was written, while a failure after files were touched points at `stanza remove …` (to sweep what Stanza tracked) and `git restore . && git clean -fd` (to reset a clean worktree) — the latter only suggested when a clean baseline was enforced.
A `STANZA_REGISTRY` pointed at a local directory now loads a **built** JSON registry (`index.json` + `modules/<category>-<id>.json`) when one is present, so a self-hosted on-disk mirror, an air-gapped install, or a CI fixture works under the published binary — previously a filesystem path only resolved raw `module.ts` sources, which the bundled CLI can't import.
Both published packages (`stanza-cli`, `create-stanza`) now ship npm READMEs.
Both published packages (`stanza-cli`, `create-stanza`) now ship npm READMEs. `stanza-cli` also exposes a `stanza-cli` binary alongside the primary `stanza` command, so `npx stanza-cli …` (and `bunx` / `pnpm dlx` / `yarn dlx`) resolve predictably regardless of how each runner handles a single differently-named bin.
+10 -2
View File
@@ -1,11 +1,19 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json",
"changelog": ["@changesets/changelog-github", { "repo": "jakejarvis/stanza" }],
"changelog": [
"@changesets/changelog-github",
{ "repo": "jakejarvis/stanza", "disableThanks": true }
],
"commit": false,
"prettier": false,
"fixed": [],
"linked": [],
"access": "public",
"privatePackages": { "version": false, "tag": false },
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
"ignore": [],
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"updateInternalDependents": "always"
}
}
@@ -2,26 +2,10 @@
"stanza-cli": minor
---
Unify registry loading behind a single **main file**, add transactional apply
rollback, and add `stanza doctor`.
Unify registry loading behind a single **main file**, add transactional apply rollback, and add `stanza doctor`.
- **Registry main file.** A registry is now addressed by the full URL/path to
its main JSON file (the index), which carries a required `path` on every
module entry; the loader resolves each module relative to the main file over
`file://` and `http(s)://` identically. The `modules/<category>-<id>.json`
naming convention, the `.ts` source-tree loader, the in-repo auto-detect, and
the inline-template disk fallback are all gone — one loader, no conventions.
`STANZA_REGISTRY` must be the full path/URL to a main JSON file (not a
directory). **Breaking** (pre-release, clean break): the registry index is
now `schemaVersion: 2`, and a third-party `registries` object entry is
`{ url, headers?, params? }` where `url` is the full main-file URL —
`indexUrl` and `{category}`/`{id}` URL templating are removed.
- **Registry main file.** A registry is now addressed by the full URL/path to its main JSON file (the index), which carries a required `path` on every module entry; the loader resolves each module relative to the main file over `file://` and `http(s)://` identically. The `modules/<category>-<id>.json` naming convention, the `.ts` source-tree loader, the in-repo auto-detect, and the inline-template disk fallback are all gone — one loader, no conventions. `STANZA_REGISTRY` must be the full path/URL to a main JSON file (not a directory). **Breaking** (pre-release, clean break): the registry index is now `schemaVersion: 2`, and a third-party `registries` object entry is `{ url, headers?, params? }` where `url` is the full main-file URL — `indexUrl` and `{category}`/`{id}` URL templating are removed.
- **Auto-rollback.** `stanza add` (and each module in `stanza init`) now wraps
its file writes in a transaction: if any step throws — including mid-codemod —
the touched files and `stanza.json` are restored to their pre-apply state
instead of leaving a partial change.
- **Auto-rollback.** `stanza add` (and each module in `stanza init`) now wraps its file writes in a transaction: if any step throws — including mid-codemod — the touched files and `stanza.json` are restored to their pre-apply state instead of leaving a partial change.
- **`stanza doctor`.** New read-only command that checks `stanza.json` against
the filesystem (claimed files/deps/scripts/env vars still present, internal
packages wired) and reports drift, exiting non-zero when found.
- **`stanza doctor`.** New read-only command that checks `stanza.json` against the filesystem (claimed files/deps/scripts/env vars still present, internal packages wired) and reports drift, exiting non-zero when found.
+2 -5
View File
@@ -11,7 +11,7 @@ permissions: {}
jobs:
release:
name: Version + publish
name: Version & publish
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
@@ -45,12 +45,9 @@ jobs:
id: changesets
uses: changesets/action@v1
with:
version: vp exec changeset version
version: vp run version
publish: vp run release
title: "chore: release"
commit: "chore: release"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# Enable provenance — requires `id-token: write` above.
NPM_CONFIG_PROVENANCE: "true"
+4 -3
View File
@@ -1,6 +1,6 @@
{
"name": "stanza-cli",
"version": "0.1.0",
"version": "0.0.0",
"description": "Modular monorepo template CLI — shadcn for stacks.",
"keywords": [
"boilerplate",
@@ -30,7 +30,8 @@
},
"publishConfig": {
"bin": {
"stanza": "./dist/bin.mjs"
"stanza": "./dist/bin.mjs",
"stanza-cli": "./dist/bin.mjs"
},
"main": "./dist/index.mjs",
"types": "./dist/index.d.mts",
@@ -46,7 +47,7 @@
"build": "vp pack"
},
"dependencies": {
"@clack/prompts": "^1.4.0",
"@clack/prompts": "^1.5.0",
"citty": "^0.2.2",
"handlebars": "^4.7.9",
"jsonc-parser": "^3.3.1",
+3 -1
View File
@@ -32,6 +32,7 @@ A few rules on top of the [CLI surface](/docs/cli) keep agent runs predictable:
- **Pass [`--app=<id>`](/docs/cli#add)** to `add`/`remove` in multi-app projects. Single-app projects auto-target, but if `stanza.json`'s `apps` array has more than one entry, scripts should pass the flag explicitly rather than relying on cwd inference.
- **`stanza.json` is generated state.** Don't hand-edit it; use the verbs that maintain it (`add`, `remove`).
- **Generated files are user-owned source.** Once Stanza writes a template, edit it like any other file in the repo.
- **Verify with [`stanza doctor`](/docs/cli#doctor).** It reports drift between `stanza.json` and the filesystem and exits non-zero, so a script can gate on it after a run or after hand-edits.
## Common errors
@@ -67,8 +68,9 @@ npx -y stanza-cli@latest add auth better-auth --dry-run
npx -y stanza-cli@latest add auth better-auth
pnpm install
# 4. Inspect.
# 4. Inspect + verify.
npx -y stanza-cli@latest list
npx -y stanza-cli@latest doctor # confirm the project matches its manifest
```
When reporting results back to the user, include the exact command run, whether it wrote files, and any follow-up install needed.
+15 -16
View File
@@ -297,7 +297,7 @@ Module authors don't run a separate validation step — the same Zod schemas the
- `vp test` runs the whole repo's schema + resolver tests; add a fixture under `registry/modules/<your-id>/` and the existing suite picks it up.
- `vp check` does a type-aware lint pass that catches most authoring mistakes statically.
For a third-party registry, the same `ModuleSchema` ships from `@stanza/registry`. The simplest test loop is to point the consumer's `STANZA_REGISTRY` at a local directory (`STANZA_REGISTRY=./path/to/your/registry stanza search`) and watch for parse errors.
For a third-party registry, the same `ModuleSchema` ships from `@stanza/registry`. The simplest test loop is to build your registry and point the consumer's `STANZA_REGISTRY` at the built main file (`STANZA_REGISTRY=./out/registry/index.json stanza search`) and watch for parse errors.
## Building a registry
@@ -306,7 +306,7 @@ The build script ([`packages/registry/src/build.ts`](https://github.com/jakejarv
```
<out>/
├── registry/
│ ├── index.json # categories + per-module summaries
│ ├── index.json # main file: categories + per-module summaries (each with a `path`)
│ └── modules/
│ ├── <category>-<id>.json # one file per module, templates inlined
│ └── …
@@ -329,32 +329,31 @@ For a third-party registry, fork the build script (or call it as a library) agai
## Hosting a registry
A registry is plain static JSON — host it anywhere that serves files: a CDN, Vercel/Netlify/Cloudflare Pages, GitHub Pages, S3 + CloudFront, your own Nginx, etc. No runtime, no DB, no SSR. The two URL shapes Stanza understands:
A registry is plain static JSON — host it anywhere that serves files: a CDN, Vercel/Netlify/Cloudflare Pages, GitHub Pages, S3 + CloudFront, your own Nginx, etc. No runtime, no DB, no SSR.
**Canonical layout** (string shorthand in `stanza.json`):
A registry is addressed by the **full URL to its main JSON file** (the index). Every module entry in that file carries a relative `path`, which the CLI resolves against the main file's URL — so the directory layout is a convention, not a requirement:
```
https://reg.acme.dev/
├── index.json
https://reg.acme.example/
├── index.json # the main file — each module entry carries a `path`
└── modules/
├── testing-cosmos.json
└── auth-something.json
```
Declared as:
Declared as the full URL to that main file:
```jsonc
{ "registries": { "@acme": "https://reg.acme.dev" } }
{ "registries": { "@acme": "https://reg.acme.example/index.json" } }
```
**Custom layout** (object form with URL template):
The build names the main file `index.json`, but the loader resolves whatever URL you give it — the filename isn't special. For auth headers or query params, use the object form:
```jsonc
{
"registries": {
"@acme": {
"url": "https://api.acme.dev/r/{category}/{id}.json",
"indexUrl": "https://api.acme.dev/r/index.json",
"url": "https://reg.acme.example/index.json",
"headers": { "Authorization": "Bearer ${ACME_TOKEN}" },
"params": { "version": "stable" },
},
@@ -362,7 +361,7 @@ Declared as:
}
```
`{category}` and `{id}` are both required placeholders; `indexUrl` is optional (without it the registry is fetch-by-name only — modules still install, but `stanza search` skips that namespace). Headers and params support `${ENV_VAR}` expansion against `process.env`; a header whose template references an unset variable is silently dropped, while an unset variable in `params` is a hard error.
`url` is the full URL to the main file — there's no filename convention and no `{category}`/`{id}` templating, since each module's location comes from its `path` in the main file. Headers and params support `${ENV_VAR}` expansion against `process.env`; a header whose template references an unset variable is silently dropped, while an unset variable in `params` is a hard error.
## Publishing under your own namespace
@@ -372,7 +371,7 @@ There's no central registry to list with. Pick an `@scope` (the naming rule is t
// users add to their stanza.json
{
"registries": {
"@acme": "https://reg.acme.dev",
"@acme": "https://reg.acme.example/index.json",
},
}
```
@@ -384,7 +383,7 @@ stanza add testing @acme/cosmos
Unknown namespaces fail fast — there's no implicit fallback to `@stanza`, so a typo can't leak a private module name to the public registry. The chosen namespace is recorded on the manifest module record (`stanza remove` knows where to refetch from).
`@stanza` is reserved. Declaring it under `registries` is a schema error; to override its URL (for a fully-mirrored self-hosted registry or to pin a fixture in CI), set the `STANZA_REGISTRY` env var.
`@stanza` is reserved. Declaring it under `registries` is a schema error; to override its source (for a fully-mirrored self-hosted registry or to pin a fixture in CI), set the `STANZA_REGISTRY` env var to the full URL or filesystem path of a main JSON file.
## What third-party modules can do
@@ -430,14 +429,14 @@ out/registry/
└── testing-cosmos.json
```
**3. Host it.** Push `out/registry/` (or its parent) to wherever you serve static files. Say it ends up at `https://reg.acme.dev/`.
**3. Host it.** Push `out/registry/` (or its parent) to wherever you serve static files. Say the main file ends up at `https://reg.acme.example/index.json`.
**4. Tell users how to install.** Their `stanza.json`:
```jsonc
{
"registries": {
"@acme": "https://reg.acme.dev",
"@acme": "https://reg.acme.example/index.json",
},
}
```
+14 -4
View File
@@ -3,7 +3,7 @@ title: CLI
description: The Stanza command-line verbs, flags, and environment variables.
---
Stanza ships five verbs against the category taxonomy. Run any verb with `--help` for its full flag list:
Stanza ships six verbs against the category taxonomy. Run any verb with `--help` for its full flag list:
```sh
npx stanza-cli add --help
@@ -32,7 +32,7 @@ Add one module to an existing project.
npx stanza-cli add <category> <module> [--app=<id>]
```
Resolves peers, selects the matching adapter, and writes the module's templates, deps, env, and scripts to the right home. Adding a module to a single-choice category that's already filled fails until you remove the existing one — and that limit is **per app** for `home: "app"` categories (so picking a framework for one app doesn't block a different framework for another).
Resolves peers, selects the matching adapter, and writes the module's templates, deps, env, and scripts to the right home. If an apply step fails partway through — including inside a codemod — Stanza rolls the changes back, so a failed `add` leaves your tree as it was. Adding a module to a single-choice category that's already filled fails until you remove the existing one — and that limit is **per app** for `home: "app"` categories (so picking a framework for one app doesn't block a different framework for another).
- `--app=<id>` — pick which app the install targets. Required for app-relevant modules when the project has multiple apps and you're not running inside one of them. Single-app projects auto-target; multi-app projects also auto-pick when `cwd` is inside one app's directory. Interactive runs (TTY, no `--yes`) fall back to a prompt; non-interactive runs error out asking for the flag.
- The flag is meaningless for `home: "repo"` modules like `tooling`.
@@ -67,6 +67,16 @@ npx stanza-cli search [query]
Use the printed **id** (not the display label) when passing a module to `add`.
## `doctor`
Check `stanza.json` against the filesystem and report drift, without changing anything.
```sh
npx stanza-cli doctor
```
Walks every [region](/docs/concepts#regions) claim in the manifest and verifies it still holds on disk — claimed files exist, claimed dependencies/scripts/env vars are still present, and each internal package with claims is wired into its consuming apps. Read-only; exits non-zero when it finds drift, so it slots into CI or a pre-commit check. It doesn't repair anything — use `add` / `remove` for that.
<Callout type="info">
**Planned:** `swap` (replace a module with another in the same category) and `update` (re-pull a
module at a newer version) are on the roadmap. The manifest already reserves the fields they need;
@@ -83,7 +93,7 @@ These apply to the mutating verbs (`init`, `add`, `remove`):
## Environment variables
- `STANZA_REGISTRY=<url-or-path>` — override the `@stanza` default namespace's URL (or filesystem path). For per-namespace third-party registries, use the `registries` field in `stanza.json` instead — see [Third-party registries](/docs/registry#third-party-registries).
- `STANZA_REGISTRY=<url-or-path>` — override the `@stanza` default namespace's source: the full URL or filesystem path to a registry's **main JSON file** (not a directory). For per-namespace third-party registries, use the `registries` field in `stanza.json` instead — see [Third-party registries](/docs/registry#third-party-registries).
- `STANZA_NO_NPM_LOOKUP=1` — skip npm version lookups and write dependency ranges verbatim.
- `STANZA_NPM_REGISTRY=<url>` — override the npm registry used for version lookups.
- `STANZA_TELEMETRY=0` / `DO_NOT_TRACK=1` — disable telemetry persistently. Telemetry is also auto-skipped in CI.
@@ -95,7 +105,7 @@ Stanza captures a small set of anonymous events to help us see which modules peo
**What's sent**
- The command name (`init`, `add`, `remove`, `list`, `search`), its duration in milliseconds, and whether it succeeded.
- The command name (`init`, `add`, `remove`, `list`, `search`, `doctor`), its duration in milliseconds, and whether it succeeded.
- CLI version, Node version, OS, and architecture.
- For installs and removes: the module id, its category, and the namespace it came from (e.g. `@stanza` or `@acme`).
- An ephemeral UUID generated per process so events from the same run can be grouped. It's regenerated next time and never persisted.
+4 -4
View File
@@ -52,10 +52,10 @@ A `one` category holds at most one module — adding a second fails until you re
</Callout>
<Callout type="info">
**Planned:** more categories are on the roadmap — `api`, `ai`, `payments`, `email` (single-choice)
and `deploy` (coexisting). They aren't shipping yet, but the taxonomy is designed to absorb them
without breaking existing projects. See the [module registry](/docs/registry) for the full
roadmap.
The table above is a representative subset. The full taxonomy also includes `ai`, `payments`,
`email`, and `monorepo` (single-choice) and `deploy` (coexisting) — most with modules available
today — plus `api` (single-choice), defined with its modules on the roadmap. See the [module
registry](/docs/registry) for the complete list and per-module status.
</Callout>
## Vendoring
+2 -1
View File
@@ -7,7 +7,7 @@ Scaffold a new monorepo, then layer in modules as you go.
## Prerequisites
- **Node.js** 20 or newer.
- **Node.js** 22 or newer.
- A package manager — **pnpm** (recommended), **npm**, or **bun**. Stanza writes a workspace-based monorepo, so a workspace-aware package manager is required.
## Create a project
@@ -57,6 +57,7 @@ pnpm install
```sh
npx stanza-cli list # show installed modules, grouped by category
npx stanza-cli doctor # check the project still matches its manifest
npx stanza-cli search drizzle # find modules in the registry by query
npx stanza-cli remove auth # remove a module and sweep the files it owns
```
+2 -2
View File
@@ -171,10 +171,10 @@ Not a category — a top-level field in `stanza.json` (`packageManager: "pnpm" |
The categories above are first-party — Stanza ships them under the default `@stanza` namespace. Anyone can publish additional modules under their own `@scope` and have users install them with `stanza add <category> @scope/<id>`. The category taxonomy itself stays first-party (third-party registries can't redefine it).
For consumers, declaring a registry is a few lines in `stanza.json`:
For consumers, declaring a registry is the full URL of its main JSON file in `stanza.json`:
```jsonc
{ "registries": { "@acme": "https://reg.acme.dev" } }
{ "registries": { "@acme": "https://reg.acme.example/index.json" } }
```
For authors, the full module surface — `defineModule`, templates, codemods, the build pipeline, hosting, namespace conventions, and a worked example — lives in the [Authoring manual](/docs/authoring).
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@stanza/web",
"version": "0.1.0",
"version": "0.0.0",
"private": true,
"license": "MIT",
"type": "module",
@@ -23,9 +23,9 @@
"@tanstack/react-devtools": "^0.10.5",
"@tanstack/react-hotkeys": "^0.10.0",
"@tanstack/react-pacer": "^0.22.1",
"@tanstack/react-router": "^1.170.9",
"@tanstack/react-router": "^1.170.10",
"@tanstack/react-router-devtools": "^1.167.0",
"@tanstack/react-start": "^1.168.16",
"@tanstack/react-start": "^1.168.18",
"@vercel/analytics": "^2.0.1",
"@vercel/functions": "^3.6.1",
"class-variance-authority": "^0.7.1",
+2 -1
View File
@@ -7,11 +7,12 @@ import mdx from "fumadocs-mdx/vite";
import { nitro } from "nitro/vite";
import { defineConfig, lazyPlugins } from "vite-plus";
import { version as cliVersion } from "../cli/package.json" with { type: "json" };
import { listPrerenderPages } from "./src/lib/prerender.ts";
export default defineConfig({
define: {
__APP_VERSION__: JSON.stringify(process.env.npm_package_version),
__APP_VERSION__: JSON.stringify(cliVersion),
},
plugins: lazyPlugins(async () => [
mdx(await import("./source.config.ts")),
+3 -2
View File
@@ -1,6 +1,6 @@
{
"name": "stanza",
"version": "0.1.0",
"version": "0.0.0",
"private": true,
"description": "Modular monorepo template CLI — shadcn for stacks.",
"license": "MIT",
@@ -17,7 +17,8 @@
"fmt": "vp fmt",
"fmt:check": "vp fmt --check",
"changeset": "vp exec changeset",
"release": "vp run build:cli && changeset publish",
"version": "vp exec changeset version",
"release": "vp run build:cli && vp exec changeset publish",
"prepare": "vp config"
},
"devDependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@stanza/codemods",
"version": "0.1.0",
"version": "0.0.0",
"private": true,
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "create-stanza",
"version": "0.1.0",
"version": "0.0.0",
"description": "`npm init stanza` — the canonical entry point to the stanza wizard.",
"keywords": [
"cli",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@stanza/registry",
"version": "0.1.0",
"version": "0.0.0",
"private": true,
"license": "MIT",
"type": "module",
+150 -150
View File
@@ -40,8 +40,8 @@ importers:
apps/cli:
dependencies:
'@clack/prompts':
specifier: ^1.4.0
version: 1.4.0
specifier: ^1.5.0
version: 1.5.0
citty:
specifier: ^0.2.2
version: 0.2.2
@@ -128,14 +128,14 @@ importers:
specifier: ^0.22.1
version: 0.22.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-router':
specifier: ^1.170.9
version: 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
specifier: ^1.170.10
version: 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-router-devtools':
specifier: ^1.167.0
version: 1.167.0(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.171.7)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
version: 1.167.0(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.171.8)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start':
specifier: ^1.168.16
version: 1.168.16(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
specifier: ^1.168.18
version: 1.168.18(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@vercel/analytics':
specifier: ^2.0.1
version: 2.0.1(react@19.2.6)
@@ -150,13 +150,13 @@ importers:
version: 2.1.1
fumadocs-core:
specifier: ^16.9.3
version: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
version: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
fumadocs-mdx:
specifier: ^15.0.10
version: 15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react@19.2.6)(rolldown@1.0.3)
version: 15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react@19.2.6)(rolldown@1.0.3)
fumadocs-ui:
specifier: npm:@fumadocs/base-ui@^16.9.3
version: '@fumadocs/base-ui@16.9.3(@tailwindcss/oxide@4.3.0)(@takumi-rs/image-response@1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0)'
version: '@fumadocs/base-ui@16.9.3(@tailwindcss/oxide@4.3.0)(@takumi-rs/image-response@1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0)'
lru-cache:
specifier: ^11.5.1
version: 11.5.1
@@ -757,12 +757,12 @@ packages:
'@changesets/write@0.4.0':
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
'@clack/core@1.3.1':
resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==}
'@clack/core@1.4.0':
resolution: {integrity: sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw==}
engines: {node: '>= 20.12.0'}
'@clack/prompts@1.4.0':
resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==}
'@clack/prompts@1.5.0':
resolution: {integrity: sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA==}
engines: {node: '>= 20.12.0'}
'@csstools/color-helpers@6.0.2':
@@ -801,8 +801,8 @@ packages:
resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
engines: {node: '>=20.19.0'}
'@dotenvx/dotenvx@1.69.1':
resolution: {integrity: sha512-kwQB5KcAegxw/+NGUgXAo5ovyOSjlMhoXSSnSEpDhoHJwzMcMO0HE1U0VCYZ7jbAeCMGamed9XdWzOA5ixtTNg==}
'@dotenvx/dotenvx@1.69.2':
resolution: {integrity: sha512-60Vh31k5bAAPq57Isx+Iopl2FrZQzZyUc4kh/OESgXiwhrKXqdxEn3JGTGSawng1DkkeC4jofFq1VpPJqNQx4w==}
hasBin: true
'@ecies/ciphers@0.2.6':
@@ -1043,22 +1043,22 @@ packages:
peerDependencies:
hono: ^4
'@inquirer/ansi@2.0.6':
resolution: {integrity: sha512-I/INw4sHGlVZ/afZOckpLiDP9SmbMl1g/GCqeHjLw1Afw/0PlRs2tRFgTGWmdI0hoNuWZn3y2iHNmG1vyECyQQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/ansi@2.0.7':
resolution: {integrity: sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'}
'@inquirer/confirm@6.1.0':
resolution: {integrity: sha512-USpeB76eqK7yGricDlGAupxWlp4a59qpeZOoNWaxO/nJln7agpJveyNkQ1d5u8YXG6TOqxZtQpKPORQQDrdVsA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/confirm@6.1.1':
resolution: {integrity: sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
'@types/node':
optional: true
'@inquirer/core@11.2.0':
resolution: {integrity: sha512-joR1YS2sI0us+9d0I8ViqFbrRLONO8CFTuyvBX4ZVBSch+VsZiugUABdrhBXXJR1VyEzvpz5SQCix3keETQ58g==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/core@11.2.1':
resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
@@ -1074,13 +1074,13 @@ packages:
'@types/node':
optional: true
'@inquirer/figures@2.0.6':
resolution: {integrity: sha512-dsZgQtH2t5Q6ah3aPbZbeEZAxsD9qQu0DXf01AltuEfRTm+NoLN6+rLVbr+4edeEbNCp/wBNM6mALRWtsQpfkw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/figures@2.0.7':
resolution: {integrity: sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'}
'@inquirer/type@4.0.6':
resolution: {integrity: sha512-J+9tdxOskuYuGjsvGaq00AamhDgjR7anhEW2dP4QdQpFCMPngCeC/bCYWQ5NsMWZRdsy53is7kAHb/+7cwDk2g==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'}
'@inquirer/type@4.0.7':
resolution: {integrity: sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==}
engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
@@ -2168,22 +2168,22 @@ packages:
'@tanstack/router-core':
optional: true
'@tanstack/react-router@1.170.9':
resolution: {integrity: sha512-rXXztp6GyXFwResQR0jdvkf52wy/sAQqze3OR08+8uNM7nHir1P46qBrwg2TL5EEtX+0WUho4BZ/nMpAgQVB6A==}
'@tanstack/react-router@1.170.10':
resolution: {integrity: sha512-gVmWYq0ucWr+OB97Nud0YhKa9NOipB7/QrWI7wRZJJWEL0qUS8WPqAs0vA1f3IBXZpXmf8xxzf/tl5cmo4tlmA==}
engines: {node: '>=20.19'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-start-client@1.168.6':
resolution: {integrity: sha512-6G/ef89hx3yWfoHLKpDxDpgMsje889bh8tpy6SMeELrCW6ob8x0G+peoFpB5zhNVE03wCFXhImM6KkZFRwSyaQ==}
'@tanstack/react-start-client@1.168.7':
resolution: {integrity: sha512-ldvWrNvXb/EXAY+8uj0XbkVlP0Uh6Ddm63NNNKWf5V2BcQ6KRxiZgANXLWlKRczmnklZiwN2eWFexEJFEzetLQ==}
engines: {node: '>=22.12.0'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-start-rsc@0.1.15':
resolution: {integrity: sha512-AdO+3OQicxFibsXEOIG2u2aRIAc1KIWMC98iiwaIUw/1ObP7uilZcYQynwdDeqsGKd0Ulr+tXZXebLdQwV4OeA==}
'@tanstack/react-start-rsc@0.1.17':
resolution: {integrity: sha512-qOgOccz24i7mRnTzARSB6sWJa4kSon3AVyQ7NowJ1/o2VquHpblu7OY2sdxSbOqU0e3t6fSgqu08RTym47H1Fw==}
engines: {node: '>=22.12.0'}
peerDependencies:
'@rspack/core': '>=2.0.0-0'
@@ -2199,15 +2199,15 @@ packages:
react-server-dom-rspack:
optional: true
'@tanstack/react-start-server@1.167.11':
resolution: {integrity: sha512-7IOSbMJ7mvNbcI6/LAHsYbhR+oIxDfZlWSBau1E/l2tY2HSnKdtu+tj1yTY7zgwqEdn14IyGFSxpHe/eTFNB5g==}
'@tanstack/react-start-server@1.167.13':
resolution: {integrity: sha512-u/nfkW9M79HRx45uJipEi6txjfTJhYTFUirBSm7jqZfId7RRDfV+j38fipGhbIbCjCkHd6hPbUzJAnQFoM0uqg==}
engines: {node: '>=22.12.0'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-start@1.168.16':
resolution: {integrity: sha512-ZkrGThxJG0SPg5V+VB4C+7KKx8kl1vo1lQY9FR2t6EqNKfZhl5N9qpkPOeyJNhse1pqe8Ihbv8LNL9c1/SohkQ==}
'@tanstack/react-start@1.168.18':
resolution: {integrity: sha512-IRYbUPgUToyt1W9KJJB3oG/OUmqYOfHW521cPe5pZhJe3LkaTdtu7KpHsW4p6z+su8CfN7n9oofb0vY36lXRkg==}
engines: {node: '>=22.12.0'}
peerDependencies:
'@rsbuild/core': ^2.0.0
@@ -2235,8 +2235,8 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
'@tanstack/router-core@1.171.7':
resolution: {integrity: sha512-AboyQD0OPIu0adJi6HeCupTU9Wx7zr4q4ceJYQdBL3mLH18m4M57XXdzJdtzOg/twl8DtWej0RGJ12ma8CV1iQ==}
'@tanstack/router-core@1.171.8':
resolution: {integrity: sha512-PbrTBbofFcacrH3RLgHYILRqTFnAGq+gXrXoA/vo7qUSkJpSO4GWfLtrtCahD4VayzRm19IPwcjPPLEugag6pw==}
engines: {node: '>=20.19'}
'@tanstack/router-devtools-core@1.168.0':
@@ -2249,16 +2249,16 @@ packages:
csstype:
optional: true
'@tanstack/router-generator@1.167.11':
resolution: {integrity: sha512-Wnom12QTx0lreBQEL3zE2N88SDIT6xferScd46dnPCEYR8u+AkBBGRzlzZEpniIm+eF3byvIKBjYQgemdadoFg==}
'@tanstack/router-generator@1.167.12':
resolution: {integrity: sha512-FGr7nn6VhjL53TUCTyDgApSkAYRxhId+v0HVQdSu0ADkNuHY+sUnYEMqiF6aN82jYWuXzrSL1xazg6/rfEP82g==}
engines: {node: '>=20.19'}
'@tanstack/router-plugin@1.168.12':
resolution: {integrity: sha512-DqeJs+/LinTsTc6gIsloauHdCjePk6pmhpmcqrNWbNi8dS+QMj2UZ4HgU9JgOiYGznkd49i8BeQJFUxzASmr7Q==}
'@tanstack/router-plugin@1.168.13':
resolution: {integrity: sha512-LnepwDai+TaC4K3aZeXrrKpnGoP8xGGilVGFfa5flGgC3+jCSBysb8SktidRE8eF2/iOzCQC0LIGirtMyZepSA==}
engines: {node: '>=20.19'}
peerDependencies:
'@rsbuild/core': '>=1.0.2 || ^2.0.0'
'@tanstack/react-router': ^1.170.9
'@tanstack/react-router': ^1.170.10
vite: '>=5.0.0 || >=6.0.0 || >=7.0.0 || >=8.0.0'
vite-plugin-solid: ^2.11.10 || ^3.0.0-0
webpack: '>=5.92.0'
@@ -2278,16 +2278,16 @@ packages:
resolution: {integrity: sha512-62layyTGmclHDQS/eidwKRfN1hhCKwViG7iEBcVmL0MXgcAB3OOucWCEcDDGd9Cu11H6b4QQ5oOo47MWIqwz0A==}
engines: {node: '>=20.19'}
'@tanstack/start-client-core@1.170.5':
resolution: {integrity: sha512-rtL6JyEB7/zeylgOjwtFEtmTIwRUm4Mf4bEhp2yUVk8kB4zLlmYcpSAFbb/aIrLp/Yl9XS2dx3OxB7oIPUuplg==}
'@tanstack/start-client-core@1.170.6':
resolution: {integrity: sha512-Zh4JY3bWiM8K807CnyRE/+53YiUx/R6nRhQr1BSxaXM3iFh9/FxoN4peK+yhkG7Hq/O2AGBWHt9yscxrsFD5+g==}
engines: {node: '>=22.12.0'}
'@tanstack/start-fn-stubs@1.162.0':
resolution: {integrity: sha512-QWfUZ3Yo923tdQn38LyKMU8rcTw69zc+T4dAvgTWV4O56SqFRsGfS0lSWIMhJRwXIx/bvdi7nTUBDdZtTHtpTQ==}
engines: {node: '>=22.12.0'}
'@tanstack/start-plugin-core@1.171.8':
resolution: {integrity: sha512-Eoe83LD3N7AQgsjb+uRq+DjUE82+e8liYqzfIVoZ03t4+XfHtTbMBB+f6XK2kUzTv4QBG7ZmZU959jWwQHfVTQ==}
'@tanstack/start-plugin-core@1.171.10':
resolution: {integrity: sha512-HYYcgwjnuGIMn7wgASM6AryKktyQ06FwziFDP3d93APFmC8dLPadSzvwV/AUWvPQYCQq2Dp9SAX3byXEMvjO7g==}
engines: {node: '>=22.12.0'}
peerDependencies:
'@rsbuild/core': ^2.0.0
@@ -2298,12 +2298,12 @@ packages:
vite:
optional: true
'@tanstack/start-server-core@1.169.6':
resolution: {integrity: sha512-Qf+Uinnc5Ak79QGD6pJsiK0IfUlWkyJNy+h9vTwOtVLBvmq/fR7GjBuf5ymidI/7jK/YQWVuw2aaEE6MHBC+iw==}
'@tanstack/start-server-core@1.169.8':
resolution: {integrity: sha512-yVhdg9QLNUrXdXDn5kN76u0YFKraR7bgb6ZFqHCbX63sTPabD4Z1fBr68PnzqKWB2gXfJmP9JN1puvcdChKeYA==}
engines: {node: '>=22.12.0'}
'@tanstack/start-storage-context@1.167.9':
resolution: {integrity: sha512-RKxJA95HgZXu2lgTCzGi7pShtgz7vyvDTEPOJfJBBMHM2S7SX/WLYTHqfHcYvbOzREXOxEbDQ8Hvtt0Klq8VKg==}
'@tanstack/start-storage-context@1.167.10':
resolution: {integrity: sha512-geCsFpgCt+S2gQjzXILdPZ9obIxtzuN8C0Esc1fcyWZhwYyqo4C8G2o/dIck8xGixCMSvOsxL5NkCXDdOm2KOQ==}
engines: {node: '>=22.12.0'}
'@tanstack/store@0.11.0':
@@ -2739,8 +2739,8 @@ packages:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
baseline-browser-mapping@2.10.32:
resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==}
baseline-browser-mapping@2.10.33:
resolution: {integrity: sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -4252,9 +4252,9 @@ packages:
typescript:
optional: true
mute-stream@4.0.0:
resolution: {integrity: sha512-gSrprq0fJ3EiOErzjdIZrjysVVmJ4uu1QWfCDss5LypA5OXvrMje5Ym5z6V6RLyJ2eF87lasX7t6a0AnFvZblg==}
engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0}
mute-stream@3.0.0:
resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==}
engines: {node: ^20.17.0 || >=22.9.0}
nanoid@3.3.12:
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
@@ -5060,11 +5060,11 @@ packages:
resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
engines: {node: ^20.0.0 || >=22.0.0}
tldts-core@7.4.1:
resolution: {integrity: sha512-sc2nGvGbixlJRHwTh/qQdPXTxJU1UDJboGPQm4d/01YUJ9r/u6aeIulQvEaxUlvKDN7hb1qCLjax+jhVAPLa/g==}
tldts-core@7.4.2:
resolution: {integrity: sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA==}
tldts@7.4.0:
resolution: {integrity: sha512-yHBe+zVfzNZ3QfTPW/Z6KK1G2t340gFjMHqI/4KKSt/abzYydzuCnpqdaF5gCCABby+9Yfbj59oR5F2Fd5CBzg==}
tldts@7.4.2:
resolution: {integrity: sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw==}
hasBin: true
to-regex-range@5.0.1:
@@ -5898,14 +5898,14 @@ snapshots:
human-id: 4.1.3
prettier: 2.8.8
'@clack/core@1.3.1':
'@clack/core@1.4.0':
dependencies:
fast-wrap-ansi: 0.2.2
sisteransi: 1.0.5
'@clack/prompts@1.4.0':
'@clack/prompts@1.5.0':
dependencies:
'@clack/core': 1.3.1
'@clack/core': 1.4.0
fast-string-width: 3.0.2
fast-wrap-ansi: 0.2.2
sisteransi: 1.0.5
@@ -5934,7 +5934,7 @@ snapshots:
'@csstools/css-tokenizer@4.0.0': {}
'@dotenvx/dotenvx@1.69.1':
'@dotenvx/dotenvx@1.69.2':
dependencies:
commander: 11.1.0
dotenv: 17.4.2
@@ -6071,12 +6071,12 @@ snapshots:
'@fontsource-variable/geist@5.2.9': {}
'@fumadocs/base-ui@16.9.3(@tailwindcss/oxide@4.3.0)(@takumi-rs/image-response@1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0)':
'@fumadocs/base-ui@16.9.3(@tailwindcss/oxide@4.3.0)(@takumi-rs/image-response@1.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0)':
dependencies:
'@base-ui/react': 1.5.0(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@fumadocs/tailwind': 0.0.5(@tailwindcss/oxide@4.3.0)(tailwindcss@4.3.0)
class-variance-authority: 0.7.1
fumadocs-core: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
fumadocs-core: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
lucide-react: 1.17.0(react@19.2.6)
motion: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
next-themes: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -6108,23 +6108,23 @@ snapshots:
dependencies:
hono: 4.12.23
'@inquirer/ansi@2.0.6': {}
'@inquirer/ansi@2.0.7': {}
'@inquirer/confirm@6.1.0(@types/node@25.9.1)':
'@inquirer/confirm@6.1.1(@types/node@25.9.1)':
dependencies:
'@inquirer/core': 11.2.0(@types/node@25.9.1)
'@inquirer/type': 4.0.6(@types/node@25.9.1)
'@inquirer/core': 11.2.1(@types/node@25.9.1)
'@inquirer/type': 4.0.7(@types/node@25.9.1)
optionalDependencies:
'@types/node': 25.9.1
'@inquirer/core@11.2.0(@types/node@25.9.1)':
'@inquirer/core@11.2.1(@types/node@25.9.1)':
dependencies:
'@inquirer/ansi': 2.0.6
'@inquirer/figures': 2.0.6
'@inquirer/type': 4.0.6(@types/node@25.9.1)
'@inquirer/ansi': 2.0.7
'@inquirer/figures': 2.0.7
'@inquirer/type': 4.0.7(@types/node@25.9.1)
cli-width: 4.1.0
fast-wrap-ansi: 0.2.2
mute-stream: 4.0.0
mute-stream: 3.0.0
signal-exit: 4.1.0
optionalDependencies:
'@types/node': 25.9.1
@@ -6136,9 +6136,9 @@ snapshots:
optionalDependencies:
'@types/node': 25.9.1
'@inquirer/figures@2.0.6': {}
'@inquirer/figures@2.0.7': {}
'@inquirer/type@4.0.6(@types/node@25.9.1)':
'@inquirer/type@4.0.7(@types/node@25.9.1)':
optionalDependencies:
'@types/node': 25.9.1
@@ -6951,45 +6951,45 @@ snapshots:
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
'@tanstack/react-router-devtools@1.167.0(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.171.7)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-router-devtools@1.167.0(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@tanstack/router-core@1.171.8)(csstype@3.2.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-devtools-core': 1.168.0(@tanstack/router-core@1.171.7)(csstype@3.2.3)
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-devtools-core': 1.168.0(@tanstack/router-core@1.171.8)(csstype@3.2.3)
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
optionalDependencies:
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
transitivePeerDependencies:
- csstype
'@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/history': 1.162.0
'@tanstack/react-store': 0.9.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
isbot: 5.1.40
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
'@tanstack/react-start-client@1.168.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-start-client@1.168.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.7
'@tanstack/start-client-core': 1.170.5
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.8
'@tanstack/start-client-core': 1.170.6
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
'@tanstack/react-start-rsc@0.1.15(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-start-rsc@0.1.17(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-server': 1.167.11(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.7
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-server': 1.167.13(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.8
'@tanstack/router-utils': 1.162.1
'@tanstack/start-client-core': 1.170.5
'@tanstack/start-client-core': 1.170.6
'@tanstack/start-fn-stubs': 1.162.0
'@tanstack/start-plugin-core': 1.171.8(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-server-core': 1.169.6(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-storage-context': 1.167.9
'@tanstack/start-plugin-core': 1.171.10(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-server-core': 1.169.8(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-storage-context': 1.167.10
pathe: 2.0.3
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
@@ -7003,28 +7003,28 @@ snapshots:
- vite-plugin-solid
- webpack
'@tanstack/react-start-server@1.167.11(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-start-server@1.167.13(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/history': 1.162.0
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.7
'@tanstack/start-client-core': 1.170.5
'@tanstack/start-server-core': 1.169.6(crossws@0.4.5(srvx@0.11.16))
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-core': 1.171.8
'@tanstack/start-client-core': 1.170.6
'@tanstack/start-server-core': 1.169.8(crossws@0.4.5(srvx@0.11.16))
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
transitivePeerDependencies:
- crossws
'@tanstack/react-start@1.168.16(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
'@tanstack/react-start@1.168.18(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
dependencies:
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-client': 1.168.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-rsc': 0.1.15(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-server': 1.167.11(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-client': 1.168.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-rsc': 0.1.17(@vitejs/plugin-rsc@0.5.26(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-start-server': 1.167.13(crossws@0.4.5(srvx@0.11.16))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/router-utils': 1.162.1
'@tanstack/start-client-core': 1.170.5
'@tanstack/start-plugin-core': 1.171.8(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-server-core': 1.169.6(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-client-core': 1.170.6
'@tanstack/start-plugin-core': 1.171.10(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-server-core': 1.169.8(crossws@0.4.5(srvx@0.11.16))
pathe: 2.0.3
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
@@ -7053,25 +7053,25 @@ snapshots:
react-dom: 19.2.6(react@19.2.6)
use-sync-external-store: 1.6.0(react@19.2.6)
'@tanstack/router-core@1.171.7':
'@tanstack/router-core@1.171.8':
dependencies:
'@tanstack/history': 1.162.0
cookie-es: 3.1.1
seroval: 1.5.4
seroval-plugins: 1.5.4(seroval@1.5.4)
'@tanstack/router-devtools-core@1.168.0(@tanstack/router-core@1.171.7)(csstype@3.2.3)':
'@tanstack/router-devtools-core@1.168.0(@tanstack/router-core@1.171.8)(csstype@3.2.3)':
dependencies:
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
clsx: 2.1.1
goober: 2.1.19(csstype@3.2.3)
optionalDependencies:
csstype: 3.2.3
'@tanstack/router-generator@1.167.11':
'@tanstack/router-generator@1.167.12':
dependencies:
'@babel/types': 7.29.7
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
'@tanstack/router-utils': 1.162.1
'@tanstack/virtual-file-routes': 1.162.0
jiti: 2.7.0
@@ -7081,7 +7081,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/router-plugin@1.168.12(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))':
'@tanstack/router-plugin@1.168.13(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))':
dependencies:
'@babel/core': 7.29.7
'@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
@@ -7089,15 +7089,15 @@ snapshots:
'@babel/template': 7.29.7
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
'@tanstack/router-core': 1.171.7
'@tanstack/router-generator': 1.167.11
'@tanstack/router-core': 1.171.8
'@tanstack/router-generator': 1.167.12
'@tanstack/router-utils': 1.162.1
'@tanstack/virtual-file-routes': 1.162.0
chokidar: 5.0.0
unplugin: 3.0.0
zod: 4.4.3
optionalDependencies:
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
vite: '@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3)'
transitivePeerDependencies:
- supports-color
@@ -7116,27 +7116,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/start-client-core@1.170.5':
'@tanstack/start-client-core@1.170.6':
dependencies:
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
'@tanstack/start-fn-stubs': 1.162.0
'@tanstack/start-storage-context': 1.167.9
'@tanstack/start-storage-context': 1.167.10
seroval: 1.5.4
'@tanstack/start-fn-stubs@1.162.0': {}
'@tanstack/start-plugin-core@1.171.8(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))':
'@tanstack/start-plugin-core@1.171.10(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(crossws@0.4.5(srvx@0.11.16))':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/core': 7.29.7
'@babel/types': 7.29.7
'@rolldown/pluginutils': 1.0.1
'@tanstack/router-core': 1.171.7
'@tanstack/router-generator': 1.167.11
'@tanstack/router-plugin': 1.168.12(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))
'@tanstack/router-core': 1.171.8
'@tanstack/router-generator': 1.167.12
'@tanstack/router-plugin': 1.168.13(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))
'@tanstack/router-utils': 1.162.1
'@tanstack/start-client-core': 1.170.5
'@tanstack/start-server-core': 1.169.6(crossws@0.4.5(srvx@0.11.16))
'@tanstack/start-client-core': 1.170.6
'@tanstack/start-server-core': 1.169.8(crossws@0.4.5(srvx@0.11.16))
exsolve: 1.0.8
lightningcss: 1.32.0
pathe: 2.0.3
@@ -7158,21 +7158,21 @@ snapshots:
- vite-plugin-solid
- webpack
'@tanstack/start-server-core@1.169.6(crossws@0.4.5(srvx@0.11.16))':
'@tanstack/start-server-core@1.169.8(crossws@0.4.5(srvx@0.11.16))':
dependencies:
'@tanstack/history': 1.162.0
'@tanstack/router-core': 1.171.7
'@tanstack/start-client-core': 1.170.5
'@tanstack/start-storage-context': 1.167.9
'@tanstack/router-core': 1.171.8
'@tanstack/start-client-core': 1.170.6
'@tanstack/start-storage-context': 1.167.10
fetchdts: 0.1.7
h3-v2: h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.16))
seroval: 1.5.4
transitivePeerDependencies:
- crossws
'@tanstack/start-storage-context@1.167.9':
'@tanstack/start-storage-context@1.167.10':
dependencies:
'@tanstack/router-core': 1.171.7
'@tanstack/router-core': 1.171.8
'@tanstack/store@0.11.0': {}
@@ -7524,7 +7524,7 @@ snapshots:
balanced-match@4.0.4: {}
baseline-browser-mapping@2.10.32: {}
baseline-browser-mapping@2.10.33: {}
better-path-resolve@1.0.0:
dependencies:
@@ -7560,7 +7560,7 @@ snapshots:
browserslist@4.28.2:
dependencies:
baseline-browser-mapping: 2.10.32
baseline-browser-mapping: 2.10.33
caniuse-lite: 1.0.30001793
electron-to-chromium: 1.5.364
node-releases: 2.0.46
@@ -8172,7 +8172,7 @@ snapshots:
fsevents@2.3.3:
optional: true
fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3):
fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3):
dependencies:
'@orama/orama': 3.1.18
estree-util-value-to-estree: 3.5.0
@@ -8193,7 +8193,7 @@ snapshots:
vfile: 6.0.3
optionalDependencies:
'@mdx-js/mdx': 3.1.1
'@tanstack/react-router': 1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@tanstack/react-router': 1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
@@ -8205,14 +8205,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
fumadocs-mdx@15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react@19.2.6)(rolldown@1.0.3):
fumadocs-mdx@15.0.10(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(@voidzero-dev/vite-plus-core@0.1.23(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(typescript@6.0.3))(fumadocs-core@16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(react@19.2.6)(rolldown@1.0.3):
dependencies:
'@mdx-js/mdx': 3.1.1
'@standard-schema/spec': 1.1.0
chokidar: 5.0.0
esbuild: 0.28.0
estree-util-value-to-estree: 3.5.0
fumadocs-core: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.9(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
fumadocs-core: 16.9.3(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(lucide-react@1.17.0(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3)
js-yaml: 4.1.1
mdast-util-mdx: 3.0.0
picocolors: 1.1.1
@@ -9211,7 +9211,7 @@ snapshots:
msw@2.14.6(@types/node@25.9.1)(typescript@6.0.3):
dependencies:
'@inquirer/confirm': 6.1.0(@types/node@25.9.1)
'@inquirer/confirm': 6.1.1(@types/node@25.9.1)
'@mswjs/interceptors': 0.41.9
'@open-draft/deferred-promise': 3.0.0
'@types/statuses': 2.0.6
@@ -9234,7 +9234,7 @@ snapshots:
transitivePeerDependencies:
- '@types/node'
mute-stream@4.0.0: {}
mute-stream@3.0.0: {}
nanoid@3.3.12: {}
@@ -10025,7 +10025,7 @@ snapshots:
'@babel/parser': 7.29.7
'@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
'@babel/preset-typescript': 7.29.7(@babel/core@7.29.7)
'@dotenvx/dotenvx': 1.69.1
'@dotenvx/dotenvx': 1.69.2
'@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76)
'@types/validate-npm-package-name': 4.0.2
browserslist: 4.28.2
@@ -10252,11 +10252,11 @@ snapshots:
tinypool@2.1.0: {}
tldts-core@7.4.1: {}
tldts-core@7.4.2: {}
tldts@7.4.0:
tldts@7.4.2:
dependencies:
tldts-core: 7.4.1
tldts-core: 7.4.2
to-regex-range@5.0.1:
dependencies:
@@ -10268,7 +10268,7 @@ snapshots:
tough-cookie@6.0.1:
dependencies:
tldts: 7.4.0
tldts: 7.4.2
tr46@0.0.3: {}
+9 -5
View File
@@ -7,6 +7,8 @@ description: Use the npm-distributed Stanza CLI non-interactively to scaffold or
Use only the published CLI surface. Do not assume the Stanza source repo, local `registry/modules`, maintainer scripts, or workspace packages are available unless the user explicitly provides them.
For depth this skill doesn't cover (the concept/region model, the full registry roadmap, and module authoring) fetch the complete docs at <https://stanza.tools/docs/llms-full.txt> when you have network access. For the current set of installable modules, `stanza search` is authoritative; the roadmap doc lags it.
## Runtime Contract
- The CLI package is `stanza-cli`; the binary is `stanza`.
@@ -73,7 +75,7 @@ Run `add`, `remove`, `list`, and `doctor` from the project root or any child dir
Every module belongs to exactly one **category**, and each category is either single-choice or multi-choice:
- **Single-choice** categories: `framework`, `ui`, `db`, `orm`, `auth`, `payments`, `email`, `ai`, `tooling`, `monorepo`. Adding a module to a filled single-choice category fails until the existing one is removed.
- **Single-choice** categories: `framework`, `api`, `ui`, `db`, `orm`, `auth`, `payments`, `email`, `ai`, `tooling`, `monorepo`. Adding a module to a filled single-choice category fails until the existing one is removed.
- **Multi-choice** categories: `testing`, `deploy`. Multiple modules coexist in one category.
For `init --yes`, pass each category's module ids as a comma-separated value; single-choice categories take exactly one, multi-choice take several — for example `--framework=next` and `--testing=vitest,playwright`.
@@ -89,17 +91,18 @@ For `init --yes`, pass each category's module ids as a comma-separated value; si
- Use `--dry-run` before a mutating command when the user wants a preview. It writes nothing.
- Mutating commands refuse to run in a dirty git worktree. Ask the user before using `--dangerously-allow-dirty`; it intentionally allows Stanza edits to mix with existing changes.
- A failed `add` rolls back automatically — if any step throws (including a codemod), Stanza restores the worktree to its pre-`add` state.
## Registries
Stanza ships modules from the first-party `@stanza` namespace by default. To install modules from another publisher, declare the registry in `stanza.json#registries` and address modules with `@<scope>/<id>` syntax:
Stanza ships modules from the first-party `@stanza` namespace by default. To install modules from another publisher, declare the registry in `stanza.json#registries` and address its modules with `@<scope>/<id>` syntax.
A registry is addressed by the **full URL to its main JSON file** — the index, which lists every module and the relative `path` to its full JSON. The string form is that URL:
Point a registry at the **full URL of its main JSON file** — the index, which lists every module and the relative `path` to its full JSON. The string form is that URL:
```json
{
"registries": {
"@acme": "https://reg.acme.dev/registry.json"
"@acme": "https://reg.acme.example/index.json"
}
}
```
@@ -114,7 +117,7 @@ Editing `stanza.json#registries` is an expected user-driven edit (the rest of th
{
"registries": {
"@acme": {
"url": "https://api.acme.dev/r/registry.json",
"url": "https://api.acme.example/r/registry.json",
"headers": { "Authorization": "Bearer ${ACME_TOKEN}" },
"params": { "channel": "stable" }
}
@@ -143,4 +146,5 @@ Editing `stanza.json#registries` is an expected user-driven edit (the rest of th
- Treat generated files as user-owned project code after Stanza writes them.
- Don't synthesize `modules`, `regions`, or `readmeChecksum` in `stanza.json` — those are runner-managed. `registries`, `apps`, and `packageManager` are user config and may be edited.
- Prefer CLI commands over reconstructing Stanza's template output yourself.
- After mutating a project (or editing generated files), run `stanza doctor` to confirm `stanza.json` still matches the filesystem; it exits non-zero on drift.
- When reporting results, include the exact command run, whether it wrote files, and any follow-up package-manager command needed.