{"owner":"vercel-labs","repo":"json-render","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md\n\nInstructions for AI coding agents working with this codebase.\n\n## Package Management\n\n**Always check the latest version before installing a package.**\n\nBefore adding or updating any dependency, verify the current latest version on npm:\n\n```bash\nnpm view <package-name> version\n```\n\nOr check multiple packages at once:\n\n```bash\nnpm view ai version\nnpm view @ai-sdk/provider-utils version\nnpm view zod version\n```\n\nThis ensures we don't install outdated versions that may have incompatible types or missing features.\n\n## Code Style\n\n- Do not use emojis in code or UI\n- Use shadcn CLI to add shadcn/ui components: `pnpm dlx shadcn@latest add <component>`\n- **Web app docs (`apps/web/`):** Never use Markdown table syntax (`| col | col |`). Always use HTML `<table>` with `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>`. Markdown tables do not render correctly in the web app. Inside HTML table cells, curly braces must be escaped as JSX expressions (e.g. `<code>{'{ \"$state\": \"/path\" }'}</code>`) because MDX parses `{` as a JSX expression boundary.\n\n## AI SDK / AI Gateway\n\nWhen using the Vercel AI SDK (`ai` package) with AI Gateway, pass the model as a plain string identifier -- do not import a provider constructor:\n\n```ts\nimport { streamText } from \"ai\";\n\nconst result = streamText({\n  model: \"anthropic/claude-haiku-4.5\",\n  prompt: \"...\",\n});\n```\n\nThis requires `AI_GATEWAY_API_KEY` to be set in the environment. See `tests/e2e/` for examples.\n\n## Dev Servers\n\nAll apps and examples with dev servers use [portless](https://github.com/vercel-labs/portless) to avoid hardcoded ports. Portless assigns random ports and exposes each app via `.localhost` URLs.\n\nNaming convention:\n- Main web app: `json-render` → `json-render.localhost:1355`\n- Examples: `[name]-demo.json-render` → `[name]-demo.json-render.localhost:1355`\n\nWhen adding a new example that runs a dev server, wrap its `dev` script with `portless <name>`:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"portless my-example-demo.json-render next dev --turbopack\"\n  }\n}\n```\n\nDo **not** add `--port` flags -- portless handles port assignment automatically. Do **not** add portless as a project dependency; it must be installed globally.\n\n## Workflow\n\n- Run `pnpm type-check` after each turn to ensure type safety\n- When making user-facing changes (new packages, API changes, new features, renamed exports, changed behavior), update the relevant documentation:\n  - Package `README.md` files in `packages/*/README.md`\n  - Root `README.md` (if packages table, install commands, or examples are affected)\n  - Web app docs in `apps/web/` (if guides, API references, or examples need updating)\n  - Skills in `skills/*/SKILL.md` (if the package has a corresponding skill)\n  - `AGENTS.md` (if workflow or conventions change)\n\n## Releasing\n\nReleases are manual, single-PR affairs. The maintainer controls the changelog voice and format.\n\nAll public `@json-render/*` packages share the same version. The canonical version lives in `packages/core/package.json`.\n\n### Preparing a release\n\nWhen asked to prepare a release (e.g. \"prepare v0.17.0\"):\n\n1. Create a branch (e.g. `prepare-v0.17.0`)\n2. Bump the version in `packages/core/package.json`\n3. Run `pnpm run version:sync` to update all other `@json-render/*` packages\n4. Write the changelog entry in `CHANGELOG.md`, wrapped in `<!-- release:start -->` and `<!-- release:end -->` markers (move the markers from the previous entry to the new one)\n5. **Fill documentation gaps** — every public package should have:\n   - A row in the root `README.md` packages table\n   - A renderer section in the root `README.md` (if it's a renderer)\n   - An API reference page at `apps/web/app/(main)/docs/api/<name>/page.mdx`\n   - An entry in `apps/web/lib/page-titles.ts` and `apps/web/lib/docs-navigation.ts`\n   - An entry in the docs-chat system prompt (`apps/web/app/api/docs-chat/route.ts`)\n   - A skill at `skills/<name>/SKILL.md`\n   - A `packages/<name>/README.md`\n6. **Run `pnpm type-check`** after all changes to verify nothing is broken\n7. Open a PR and merge to `main`\n\nCI compares the `@json-render/core` version to what's on npm. If it differs, it builds, publishes all public packages, and creates the GitHub release automatically. The release body is extracted from the content between the markers.\n\n### Scripts\n\n- `pnpm run version:sync` — sync all `@json-render/*` package versions to match `@json-render/core`\n- `pnpm run version:check` — verify all versions are in sync (runs in CI)\n- `pnpm run ci:publish` — build all packages and publish to npm (CI only)\n\n<!-- opensrc:start -->\n\n## Source Code Reference\n\nSource code for dependencies is available in `opensrc/` for deeper understanding of implementation details.\n\nSee `opensrc/sources.json` for the list of available packages and their versions.\n\nUse this source code when you need to understand how a package works internally, not just its types/interface.\n\n### Fetching Additional Source Code\n\nTo fetch source code for a package or repository you need to understand, run:\n\n```bash\nnpx opensrc <package>           # npm package (e.g., npx opensrc zod)\nnpx opensrc pypi:<package>      # Python package (e.g., npx opensrc pypi:requests)\nnpx opensrc crates:<package>    # Rust crate (e.g., npx opensrc crates:serde)\nnpx opensrc <owner>/<repo>      # GitHub repo (e.g., npx opensrc vercel/ai)\n```\n\n<!-- opensrc:end -->\n"},"files":{"AGENTS.md":"# AGENTS.md\n\nInstructions for AI coding agents working with this codebase.\n\n## Package Management\n\n**Always check the latest version before installing a package.**\n\nBefore adding or updating any dependency, verify the current latest version on npm:\n\n```bash\nnpm view <package-name> version\n```\n\nOr check multiple packages at once:\n\n```bash\nnpm view ai version\nnpm view @ai-sdk/provider-utils version\nnpm view zod version\n```\n\nThis ensures we don't install outdated versions that may have incompatible types or missing features.\n\n## Code Style\n\n- Do not use emojis in code or UI\n- Use shadcn CLI to add shadcn/ui components: `pnpm dlx shadcn@latest add <component>`\n- **Web app docs (`apps/web/`):** Never use Markdown table syntax (`| col | col |`). Always use HTML `<table>` with `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>`. Markdown tables do not render correctly in the web app. Inside HTML table cells, curly braces must be escaped as JSX expressions (e.g. `<code>{'{ \"$state\": \"/path\" }'}</code>`) because MDX parses `{` as a JSX expression boundary.\n\n## AI SDK / AI Gateway\n\nWhen using the Vercel AI SDK (`ai` package) with AI Gateway, pass the model as a plain string identifier -- do not import a provider constructor:\n\n```ts\nimport { streamText } from \"ai\";\n\nconst result = streamText({\n  model: \"anthropic/claude-haiku-4.5\",\n  prompt: \"...\",\n});\n```\n\nThis requires `AI_GATEWAY_API_KEY` to be set in the environment. See `tests/e2e/` for examples.\n\n## Dev Servers\n\nAll apps and examples with dev servers use [portless](https://github.com/vercel-labs/portless) to avoid hardcoded ports. Portless assigns random ports and exposes each app via `.localhost` URLs.\n\nNaming convention:\n- Main web app: `json-render` → `json-render.localhost:1355`\n- Examples: `[name]-demo.json-render` → `[name]-demo.json-render.localhost:1355`\n\nWhen adding a new example that runs a dev server, wrap its `dev` script with `portless <name>`:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"portless my-example-demo.json-render next dev --turbopack\"\n  }\n}\n```\n\nDo **not** add `--port` flags -- portless handles port assignment automatically. Do **not** add portless as a project dependency; it must be installed globally.\n\n## Workflow\n\n- Run `pnpm type-check` after each turn to ensure type safety\n- When making user-facing changes (new packages, API changes, new features, renamed exports, changed behavior), update the relevant documentation:\n  - Package `README.md` files in `packages/*/README.md`\n  - Root `README.md` (if packages table, install commands, or examples are affected)\n  - Web app docs in `apps/web/` (if guides, API references, or examples need updating)\n  - Skills in `skills/*/SKILL.md` (if the package has a corresponding skill)\n  - `AGENTS.md` (if workflow or conventions change)\n\n## Releasing\n\nReleases are manual, single-PR affairs. The maintainer controls the changelog voice and format.\n\nAll public `@json-render/*` packages share the same version. The canonical version lives in `packages/core/package.json`.\n\n### Preparing a release\n\nWhen asked to prepare a release (e.g. \"prepare v0.17.0\"):\n\n1. Create a branch (e.g. `prepare-v0.17.0`)\n2. Bump the version in `packages/core/package.json`\n3. Run `pnpm run version:sync` to update all other `@json-render/*` packages\n4. Write the changelog entry in `CHANGELOG.md`, wrapped in `<!-- release:start -->` and `<!-- release:end -->` markers (move the markers from the previous entry to the new one)\n5. **Fill documentation gaps** — every public package should have:\n   - A row in the root `README.md` packages table\n   - A renderer section in the root `README.md` (if it's a renderer)\n   - An API reference page at `apps/web/app/(main)/docs/api/<name>/page.mdx`\n   - An entry in `apps/web/lib/page-titles.ts` and `apps/web/lib/docs-navigation.ts`\n   - An entry in the docs-chat system prompt (`apps/web/app/api/docs-chat/route.ts`)\n   - A skill at `skills/<name>/SKILL.md`\n   - A `packages/<name>/README.md`\n6. **Run `pnpm type-check`** after all changes to verify nothing is broken\n7. Open a PR and merge to `main`\n\nCI compares the `@json-render/core` version to what's on npm. If it differs, it builds, publishes all public packages, and creates the GitHub release automatically. The release body is extracted from the content between the markers.\n\n### Scripts\n\n- `pnpm run version:sync` — sync all `@json-render/*` package versions to match `@json-render/core`\n- `pnpm run version:check` — verify all versions are in sync (runs in CI)\n- `pnpm run ci:publish` — build all packages and publish to npm (CI only)\n\n<!-- opensrc:start -->\n\n## Source Code Reference\n\nSource code for dependencies is available in `opensrc/` for deeper understanding of implementation details.\n\nSee `opensrc/sources.json` for the list of available packages and their versions.\n\nUse this source code when you need to understand how a package works internally, not just its types/interface.\n\n### Fetching Additional Source Code\n\nTo fetch source code for a package or repository you need to understand, run:\n\n```bash\nnpx opensrc <package>           # npm package (e.g., npx opensrc zod)\nnpx opensrc pypi:<package>      # Python package (e.g., npx opensrc pypi:requests)\nnpx opensrc crates:<package>    # Rust crate (e.g., npx opensrc crates:serde)\nnpx opensrc <owner>/<repo>      # GitHub repo (e.g., npx opensrc vercel/ai)\n```\n\n<!-- opensrc:end -->\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\nInstructions for AI coding agents working with this codebase.\n\n## Package Management\n\n**Always check the latest version before installing a package.**\n\nBefore adding or updating any dependency, verify the current latest version on npm:\n\n```bash\nnpm view <package-name> version\n```\n\nOr check multiple packages at once:\n\n```bash\nnpm view ai version\nnpm view @ai-sdk/provider-utils version\nnpm view zod version\n```\n\nThis ensures we don't install outdated versions that may have incompatible types or missing features.\n\n## Code Style\n\n- Do not use emojis in code or UI\n- Use shadcn CLI to add shadcn/ui components: `pnpm dlx shadcn@latest add <component>`\n- **Web app docs (`apps/web/`):** Never use Markdown table syntax (`| col | col |`). Always use HTML `<table>` with `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>`. Markdown tables do not render correctly in the web app. Inside HTML table cells, curly braces must be escaped as JSX expressions (e.g. `<code>{'{ \"$state\": \"/path\" }'}</code>`) because MDX parses `{` as a JSX expression boundary.\n\n## AI SDK / AI Gateway\n\nWhen using the Vercel AI SDK (`ai` package) with AI Gateway, pass the model as a plain string identifier -- do not import a provider constructor:\n\n```ts\nimport { streamText } from \"ai\";\n\nconst result = streamText({\n  model: \"anthropic/claude-haiku-4.5\",\n  prompt: \"...\",\n});\n```\n\nThis requires `AI_GATEWAY_API_KEY` to be set in the environment. See `tests/e2e/` for examples.\n\n## Dev Servers\n\nAll apps and examples with dev servers use [portless](https://github.com/vercel-labs/portless) to avoid hardcoded ports. Portless assigns random ports and exposes each app via `.localhost` URLs.\n\nNaming convention:\n- Main web app: `json-render` → `json-render.localhost:1355`\n- Examples: `[name]-demo.json-render` → `[name]-demo.json-render.localhost:1355`\n\nWhen adding a new example that runs a dev server, wrap its `dev` script with `portless <name>`:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"portless my-example-demo.json-render next dev --turbopack\"\n  }\n}\n```\n\nDo **not** add `--port` flags -- portless handles port assignment automatically. Do **not** add portless as a project dependency; it must be installed globally.\n\n## Workflow\n\n- Run `pnpm type-check` after each turn to ensure type safety\n- When making user-facing changes (new packages, API changes, new features, renamed exports, changed behavior), update the relevant documentation:\n  - Package `README.md` files in `packages/*/README.md`\n  - Root `README.md` (if packages table, install commands, or examples are affected)\n  - Web app docs in `apps/web/` (if guides, API references, or examples need updating)\n  - Skills in `skills/*/SKILL.md` (if the package has a corresponding skill)\n  - `AGENTS.md` (if workflow or conventions change)\n\n## Releasing\n\nReleases are manual, single-PR affairs. The maintainer controls the changelog voice and format.\n\nAll public `@json-render/*` packages share the same version. The canonical version lives in `packages/core/package.json`.\n\n### Preparing a release\n\nWhen asked to prepare a release (e.g. \"prepare v0.17.0\"):\n\n1. Create a branch (e.g. `prepare-v0.17.0`)\n2. Bump the version in `packages/core/package.json`\n3. Run `pnpm run version:sync` to update all other `@json-render/*` packages\n4. Write the changelog entry in `CHANGELOG.md`, wrapped in `<!-- release:start -->` and `<!-- release:end -->` markers (move the markers from the previous entry to the new one)\n5. **Fill documentation gaps** — every public package should have:\n   - A row in the root `README.md` packages table\n   - A renderer section in the root `README.md` (if it's a renderer)\n   - An API reference page at `apps/web/app/(main)/docs/api/<name>/page.mdx`\n   - An entry in `apps/web/lib/page-titles.ts` and `apps/web/lib/docs-navigation.ts`\n   - An entry in the docs-chat system prompt (`apps/web/app/api/docs-chat/route.ts`)\n   - A skill at `skills/<name>/SKILL.md`\n   - A `packages/<name>/README.md`\n6. **Run `pnpm type-check`** after all changes to verify nothing is broken\n7. Open a PR and merge to `main`\n\nCI compares the `@json-render/core` version to what's on npm. If it differs, it builds, publishes all public packages, and creates the GitHub release automatically. The release body is extracted from the content between the markers.\n\n### Scripts\n\n- `pnpm run version:sync` — sync all `@json-render/*` package versions to match `@json-render/core`\n- `pnpm run version:check` — verify all versions are in sync (runs in CI)\n- `pnpm run ci:publish` — build all packages and publish to npm (CI only)\n\n<!-- opensrc:start -->\n\n## Source Code Reference\n\nSource code for dependencies is available in `opensrc/` for deeper understanding of implementation details.\n\nSee `opensrc/sources.json` for the list of available packages and their versions.\n\nUse this source code when you need to understand how a package works internally, not just its types/interface.\n\n### Fetching Additional Source Code\n\nTo fetch source code for a package or repository you need to understand, run:\n\n```bash\nnpx opensrc <package>           # npm package (e.g., npx opensrc zod)\nnpx opensrc pypi:<package>      # Python package (e.g., npx opensrc pypi:requests)\nnpx opensrc crates:<package>    # Rust crate (e.g., npx opensrc crates:serde)\nnpx opensrc <owner>/<repo>      # GitHub repo (e.g., npx opensrc vercel/ai)\n```\n\n<!-- opensrc:end -->\n","category":"root","tokens":1343}]}