create-xani-agentic-app 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +237 -0
- package/index.js +219 -0
- package/package.json +46 -0
- package/template/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/template/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/template/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/template/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/template/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/template/.agents/skills/better-auth-best-practices/SKILL.md +175 -0
- package/template/.agents/skills/checkpoint/SKILL.md +82 -0
- package/template/.agents/skills/create-spec/SKILL.md +132 -0
- package/template/.agents/skills/create-spec/references/action-required-template.md +53 -0
- package/template/.agents/skills/create-spec/references/readme-template.md +53 -0
- package/template/.agents/skills/create-spec/references/requirements-template.md +54 -0
- package/template/.agents/skills/create-spec/references/task-template.md +79 -0
- package/template/.agents/skills/find-skills/SKILL.md +142 -0
- package/template/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/template/.agents/skills/frontend-design/SKILL.md +42 -0
- package/template/.agents/skills/implement-feature/SKILL.md +189 -0
- package/template/.agents/skills/implement-feature/references/coder-prompt-template.md +46 -0
- package/template/.agents/skills/implement-feature/references/fix-prompt-template.md +38 -0
- package/template/.agents/skills/implement-feature/references/review-prompt-template.md +50 -0
- package/template/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/template/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/template/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/template/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/template/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/template/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/template/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/template/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/template/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/template/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/template/.agents/skills/nextjs/SKILL.md +434 -0
- package/template/.agents/skills/nextjs/overlay.yaml +284 -0
- package/template/.agents/skills/nextjs/references/app-router-files.md +94 -0
- package/template/.agents/skills/nextjs/references/async-patterns.md +87 -0
- package/template/.agents/skills/nextjs/references/bundling.md +180 -0
- package/template/.agents/skills/nextjs/references/data-patterns.md +297 -0
- package/template/.agents/skills/nextjs/references/debug-tricks.md +105 -0
- package/template/.agents/skills/nextjs/references/directives.md +73 -0
- package/template/.agents/skills/nextjs/references/error-handling.md +227 -0
- package/template/.agents/skills/nextjs/references/file-conventions.md +140 -0
- package/template/.agents/skills/nextjs/references/font.md +245 -0
- package/template/.agents/skills/nextjs/references/functions.md +108 -0
- package/template/.agents/skills/nextjs/references/hydration-error.md +91 -0
- package/template/.agents/skills/nextjs/references/image.md +173 -0
- package/template/.agents/skills/nextjs/references/metadata.md +301 -0
- package/template/.agents/skills/nextjs/references/parallel-routes.md +287 -0
- package/template/.agents/skills/nextjs/references/route-handlers.md +146 -0
- package/template/.agents/skills/nextjs/references/rsc-boundaries.md +159 -0
- package/template/.agents/skills/nextjs/references/runtime-selection.md +39 -0
- package/template/.agents/skills/nextjs/references/scripts.md +141 -0
- package/template/.agents/skills/nextjs/references/self-hosting.md +371 -0
- package/template/.agents/skills/nextjs/references/suspense-boundaries.md +67 -0
- package/template/.agents/skills/nextjs/upstream/SKILL.md +153 -0
- package/template/.agents/skills/nextjs/upstream/references/app-router-files.md +94 -0
- package/template/.agents/skills/nextjs/upstream/references/async-patterns.md +87 -0
- package/template/.agents/skills/nextjs/upstream/references/bundling.md +180 -0
- package/template/.agents/skills/nextjs/upstream/references/data-patterns.md +297 -0
- package/template/.agents/skills/nextjs/upstream/references/debug-tricks.md +105 -0
- package/template/.agents/skills/nextjs/upstream/references/directives.md +73 -0
- package/template/.agents/skills/nextjs/upstream/references/error-handling.md +227 -0
- package/template/.agents/skills/nextjs/upstream/references/file-conventions.md +140 -0
- package/template/.agents/skills/nextjs/upstream/references/font.md +245 -0
- package/template/.agents/skills/nextjs/upstream/references/functions.md +108 -0
- package/template/.agents/skills/nextjs/upstream/references/hydration-error.md +91 -0
- package/template/.agents/skills/nextjs/upstream/references/image.md +173 -0
- package/template/.agents/skills/nextjs/upstream/references/metadata.md +301 -0
- package/template/.agents/skills/nextjs/upstream/references/parallel-routes.md +287 -0
- package/template/.agents/skills/nextjs/upstream/references/route-handlers.md +146 -0
- package/template/.agents/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
- package/template/.agents/skills/nextjs/upstream/references/runtime-selection.md +39 -0
- package/template/.agents/skills/nextjs/upstream/references/scripts.md +141 -0
- package/template/.agents/skills/nextjs/upstream/references/self-hosting.md +371 -0
- package/template/.agents/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
- package/template/.agents/skills/playwright-cli/SKILL.md +344 -0
- package/template/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/template/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/template/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/template/.agents/skills/playwright-cli/references/running-code.md +231 -0
- package/template/.agents/skills/playwright-cli/references/session-management.md +169 -0
- package/template/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/template/.agents/skills/playwright-cli/references/test-generation.md +88 -0
- package/template/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/template/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/template/.agents/skills/review-pr/SKILL.md +97 -0
- package/template/.agents/skills/security-scanner/SKILL.md +157 -0
- package/template/.agents/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.agents/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.agents/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.agents/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.agents/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.agents/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.agents/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.agents/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.agents/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.agents/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.agents/skills/security-scanner/references/report-template.md +148 -0
- package/template/.agents/skills/shadcn/SKILL.md +246 -0
- package/template/.agents/skills/shadcn/agents/openai.yml +5 -0
- package/template/.agents/skills/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/shadcn/cli.md +276 -0
- package/template/.agents/skills/shadcn/customization.md +209 -0
- package/template/.agents/skills/shadcn/evals/evals.json +47 -0
- package/template/.agents/skills/shadcn/mcp.md +94 -0
- package/template/.agents/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.agents/skills/shadcn/rules/composition.md +195 -0
- package/template/.agents/skills/shadcn/rules/forms.md +192 -0
- package/template/.agents/skills/shadcn/rules/icons.md +101 -0
- package/template/.agents/skills/shadcn/rules/styling.md +162 -0
- package/template/.agents/skills/ship-it/SKILL.md +174 -0
- package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agents/skills/skill-creator/SKILL.md +485 -0
- package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/template/.agents/skills/vercel-react-best-practices/AGENTS.md +3750 -0
- package/template/.agents/skills/vercel-react-best-practices/README.md +123 -0
- package/template/.agents/skills/vercel-react-best-practices/SKILL.md +148 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/.claude/agents/better-auth-expert.md +189 -0
- package/template/.claude/agents/code-review.md +147 -0
- package/template/.claude/agents/coder.md +139 -0
- package/template/.claude/agents/deep-dive.md +133 -0
- package/template/.claude/agents/polar-payments-expert.md +140 -0
- package/template/.claude/agents/security-scanner.md +214 -0
- package/template/.claude/settings.local.json +15 -0
- package/template/.claude/skills/ai-sdk/SKILL.md +78 -0
- package/template/.claude/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/template/.claude/skills/ai-sdk/references/common-errors.md +443 -0
- package/template/.claude/skills/ai-sdk/references/devtools.md +52 -0
- package/template/.claude/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/template/.claude/skills/better-auth-best-practices/SKILL.md +175 -0
- package/template/.claude/skills/caveman/SKILL.md +49 -0
- package/template/.claude/skills/checkpoint/SKILL.md +82 -0
- package/template/.claude/skills/create-spec/SKILL.md +132 -0
- package/template/.claude/skills/create-spec/references/action-required-template.md +53 -0
- package/template/.claude/skills/create-spec/references/readme-template.md +53 -0
- package/template/.claude/skills/create-spec/references/requirements-template.md +54 -0
- package/template/.claude/skills/create-spec/references/task-template.md +79 -0
- package/template/.claude/skills/d3-visualization/SKILL.md +62 -0
- package/template/.claude/skills/find-skills/SKILL.md +142 -0
- package/template/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/template/.claude/skills/frontend-design/SKILL.md +42 -0
- package/template/.claude/skills/grill-me/SKILL.md +10 -0
- package/template/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/template/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
- package/template/.claude/skills/grill-with-docs/SKILL.md +88 -0
- package/template/.claude/skills/gsap-core/SKILL.md +267 -0
- package/template/.claude/skills/implement-feature/SKILL.md +189 -0
- package/template/.claude/skills/implement-feature/references/coder-prompt-template.md +46 -0
- package/template/.claude/skills/implement-feature/references/fix-prompt-template.md +38 -0
- package/template/.claude/skills/implement-feature/references/review-prompt-template.md +50 -0
- package/template/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/template/.claude/skills/mcp-builder/SKILL.md +236 -0
- package/template/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/template/.claude/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/template/.claude/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/template/.claude/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/template/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/template/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/template/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/template/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/template/.claude/skills/nextjs/SKILL.md +434 -0
- package/template/.claude/skills/nextjs/overlay.yaml +284 -0
- package/template/.claude/skills/nextjs/references/app-router-files.md +94 -0
- package/template/.claude/skills/nextjs/references/async-patterns.md +87 -0
- package/template/.claude/skills/nextjs/references/bundling.md +180 -0
- package/template/.claude/skills/nextjs/references/data-patterns.md +297 -0
- package/template/.claude/skills/nextjs/references/debug-tricks.md +105 -0
- package/template/.claude/skills/nextjs/references/directives.md +73 -0
- package/template/.claude/skills/nextjs/references/error-handling.md +227 -0
- package/template/.claude/skills/nextjs/references/file-conventions.md +140 -0
- package/template/.claude/skills/nextjs/references/font.md +245 -0
- package/template/.claude/skills/nextjs/references/functions.md +108 -0
- package/template/.claude/skills/nextjs/references/hydration-error.md +91 -0
- package/template/.claude/skills/nextjs/references/image.md +173 -0
- package/template/.claude/skills/nextjs/references/metadata.md +301 -0
- package/template/.claude/skills/nextjs/references/parallel-routes.md +287 -0
- package/template/.claude/skills/nextjs/references/route-handlers.md +146 -0
- package/template/.claude/skills/nextjs/references/rsc-boundaries.md +159 -0
- package/template/.claude/skills/nextjs/references/runtime-selection.md +39 -0
- package/template/.claude/skills/nextjs/references/scripts.md +141 -0
- package/template/.claude/skills/nextjs/references/self-hosting.md +371 -0
- package/template/.claude/skills/nextjs/references/suspense-boundaries.md +67 -0
- package/template/.claude/skills/nextjs/upstream/SKILL.md +153 -0
- package/template/.claude/skills/nextjs/upstream/references/app-router-files.md +94 -0
- package/template/.claude/skills/nextjs/upstream/references/async-patterns.md +87 -0
- package/template/.claude/skills/nextjs/upstream/references/bundling.md +180 -0
- package/template/.claude/skills/nextjs/upstream/references/data-patterns.md +297 -0
- package/template/.claude/skills/nextjs/upstream/references/debug-tricks.md +105 -0
- package/template/.claude/skills/nextjs/upstream/references/directives.md +73 -0
- package/template/.claude/skills/nextjs/upstream/references/error-handling.md +227 -0
- package/template/.claude/skills/nextjs/upstream/references/file-conventions.md +140 -0
- package/template/.claude/skills/nextjs/upstream/references/font.md +245 -0
- package/template/.claude/skills/nextjs/upstream/references/functions.md +108 -0
- package/template/.claude/skills/nextjs/upstream/references/hydration-error.md +91 -0
- package/template/.claude/skills/nextjs/upstream/references/image.md +173 -0
- package/template/.claude/skills/nextjs/upstream/references/metadata.md +301 -0
- package/template/.claude/skills/nextjs/upstream/references/parallel-routes.md +287 -0
- package/template/.claude/skills/nextjs/upstream/references/route-handlers.md +146 -0
- package/template/.claude/skills/nextjs/upstream/references/rsc-boundaries.md +159 -0
- package/template/.claude/skills/nextjs/upstream/references/runtime-selection.md +39 -0
- package/template/.claude/skills/nextjs/upstream/references/scripts.md +141 -0
- package/template/.claude/skills/nextjs/upstream/references/self-hosting.md +371 -0
- package/template/.claude/skills/nextjs/upstream/references/suspense-boundaries.md +67 -0
- package/template/.claude/skills/playwright-cli/SKILL.md +344 -0
- package/template/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
- package/template/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/template/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
- package/template/.claude/skills/playwright-cli/references/running-code.md +231 -0
- package/template/.claude/skills/playwright-cli/references/session-management.md +169 -0
- package/template/.claude/skills/playwright-cli/references/storage-state.md +275 -0
- package/template/.claude/skills/playwright-cli/references/test-generation.md +88 -0
- package/template/.claude/skills/playwright-cli/references/tracing.md +139 -0
- package/template/.claude/skills/playwright-cli/references/video-recording.md +143 -0
- package/template/.claude/skills/react-three-fiber/SKILL.md +180 -0
- package/template/.claude/skills/remotion/SKILL.md +43 -0
- package/template/.claude/skills/review-pr/SKILL.md +97 -0
- package/template/.claude/skills/security-scanner/SKILL.md +157 -0
- package/template/.claude/skills/security-scanner/references/A01-broken-access-control.md +136 -0
- package/template/.claude/skills/security-scanner/references/A02-security-misconfiguration.md +130 -0
- package/template/.claude/skills/security-scanner/references/A03-software-supply-chain-failures.md +117 -0
- package/template/.claude/skills/security-scanner/references/A04-cryptographic-failures.md +141 -0
- package/template/.claude/skills/security-scanner/references/A05-injection.md +155 -0
- package/template/.claude/skills/security-scanner/references/A06-insecure-design.md +145 -0
- package/template/.claude/skills/security-scanner/references/A07-authentication-failures.md +150 -0
- package/template/.claude/skills/security-scanner/references/A08-software-data-integrity-failures.md +132 -0
- package/template/.claude/skills/security-scanner/references/A09-security-logging-alerting-failures.md +130 -0
- package/template/.claude/skills/security-scanner/references/A10-mishandling-exceptional-conditions.md +154 -0
- package/template/.claude/skills/security-scanner/references/report-template.md +148 -0
- package/template/.claude/skills/shadcn/SKILL.md +246 -0
- package/template/.claude/skills/shadcn/agents/openai.yml +5 -0
- package/template/.claude/skills/shadcn/assets/shadcn-small.png +0 -0
- package/template/.claude/skills/shadcn/assets/shadcn.png +0 -0
- package/template/.claude/skills/shadcn/cli.md +276 -0
- package/template/.claude/skills/shadcn/customization.md +209 -0
- package/template/.claude/skills/shadcn/evals/evals.json +47 -0
- package/template/.claude/skills/shadcn/mcp.md +94 -0
- package/template/.claude/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.claude/skills/shadcn/rules/composition.md +195 -0
- package/template/.claude/skills/shadcn/rules/forms.md +192 -0
- package/template/.claude/skills/shadcn/rules/icons.md +101 -0
- package/template/.claude/skills/shadcn/rules/styling.md +162 -0
- package/template/.claude/skills/ship-it/SKILL.md +174 -0
- package/template/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.claude/skills/skill-creator/SKILL.md +485 -0
- package/template/.claude/skills/skill-creator/agents/analyzer.md +274 -0
- package/template/.claude/skills/skill-creator/agents/comparator.md +202 -0
- package/template/.claude/skills/skill-creator/agents/grader.md +223 -0
- package/template/.claude/skills/skill-creator/assets/eval_review.html +146 -0
- package/template/.claude/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/template/.claude/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/template/.claude/skills/skill-creator/references/schemas.md +430 -0
- package/template/.claude/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/template/.claude/skills/skill-creator/scripts/generate_report.py +326 -0
- package/template/.claude/skills/skill-creator/scripts/improve_description.py +247 -0
- package/template/.claude/skills/skill-creator/scripts/package_skill.py +136 -0
- package/template/.claude/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/template/.claude/skills/skill-creator/scripts/run_eval.py +310 -0
- package/template/.claude/skills/skill-creator/scripts/run_loop.py +328 -0
- package/template/.claude/skills/skill-creator/scripts/utils.py +47 -0
- package/template/.claude/skills/svelte/SKILL.md +284 -0
- package/template/.claude/skills/tdd/SKILL.md +109 -0
- package/template/.claude/skills/tdd/deep-modules.md +33 -0
- package/template/.claude/skills/tdd/interface-design.md +31 -0
- package/template/.claude/skills/tdd/mocking.md +59 -0
- package/template/.claude/skills/tdd/refactoring.md +10 -0
- package/template/.claude/skills/tdd/tests.md +61 -0
- package/template/.claude/skills/threejs/SKILL.md +43 -0
- package/template/.claude/skills/to-issues/SKILL.md +83 -0
- package/template/.claude/skills/to-prd/SKILL.md +76 -0
- package/template/.claude/skills/vercel-react-best-practices/AGENTS.md +3750 -0
- package/template/.claude/skills/vercel-react-best-practices/README.md +123 -0
- package/template/.claude/skills/vercel-react-best-practices/SKILL.md +148 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.claude/skills/video-downloader/SKILL.md +42 -0
- package/template/.claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/template/.claude/skills/webgpu-threejs-tsl/REFERENCE.md +371 -0
- package/template/.claude/skills/webgpu-threejs-tsl/SKILL.md +93 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/compute-shaders.md +578 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/core-concepts.md +497 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/device-loss.md +359 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/limits-and-features.md +133 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/materials.md +353 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/post-processing.md +515 -0
- package/template/.claude/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +324 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/basic-setup.js +87 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/custom-material.js +170 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/earth-shader.js +292 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/particle-system.js +259 -0
- package/template/.claude/skills/webgpu-threejs-tsl/examples/post-processing.js +199 -0
- package/template/.claude/skills/webgpu-threejs-tsl/templates/compute-shader.js +343 -0
- package/template/.claude/skills/webgpu-threejs-tsl/templates/webgpu-project.js +276 -0
- package/template/.claude/skills/zoom-out/SKILL.md +7 -0
- package/template/.mcp.json +5 -0
- package/template/.nvmrc +1 -0
- package/template/.prettierignore +25 -0
- package/template/.prettierrc +11 -0
- package/template/.vscode/settings.json +1 -0
- package/template/.vscode/tasks.json.example +85 -0
- package/template/AGENTS.md +37 -0
- package/template/CLAUDE.md +75 -0
- package/template/CONTEXT.md +29 -0
- package/template/DESIGN.md +451 -0
- package/template/README.md +394 -0
- package/template/_gitignore +48 -0
- package/template/components.json +21 -0
- package/template/docker-compose.yml +9 -0
- package/template/docs/business/starter-prompt.md +94 -0
- package/template/docs/technical/ai/streaming.md +520 -0
- package/template/docs/technical/ai/structured-data.md +409 -0
- package/template/docs/technical/betterauth/polar.md +476 -0
- package/template/docs/technical/react-markdown.md +123 -0
- package/template/drizzle/0000_chilly_the_phantom.sql +50 -0
- package/template/drizzle/0001_last_warpath.sql +5 -0
- package/template/drizzle/meta/0000_snapshot.json +326 -0
- package/template/drizzle/meta/0001_snapshot.json +410 -0
- package/template/drizzle/meta/_journal.json +20 -0
- package/template/drizzle.config.ts +10 -0
- package/template/env.example +26 -0
- package/template/eslint.config.mjs +75 -0
- package/template/next-env.d.ts +6 -0
- package/template/next.config.ts +57 -0
- package/template/package.json +79 -0
- package/template/postcss.config.mjs +5 -0
- package/template/public/file.svg +1 -0
- package/template/public/globe.svg +1 -0
- package/template/public/next.svg +1 -0
- package/template/public/vercel.svg +1 -0
- package/template/public/window.svg +1 -0
- package/template/scripts/setup.ts +277 -0
- package/template/skills-lock.json +61 -0
- package/template/specs/ui-polish-responsive/README.md +59 -0
- package/template/specs/ui-polish-responsive/action-required.md +3 -0
- package/template/specs/ui-polish-responsive/requirements.md +53 -0
- package/template/specs/ui-polish-responsive/tasks/task-01-globals-css.md +144 -0
- package/template/specs/ui-polish-responsive/tasks/task-02-layout.md +66 -0
- package/template/specs/ui-polish-responsive/tasks/task-03-site-header.md +79 -0
- package/template/specs/ui-polish-responsive/tasks/task-04-site-footer.md +63 -0
- package/template/specs/ui-polish-responsive/tasks/task-05-home-page.md +215 -0
- package/template/specs/ui-polish-responsive/tasks/task-06-dashboard.md +222 -0
- package/template/specs/ui-polish-responsive/tasks/task-07-chat-page.md +225 -0
- package/template/specs/ui-polish-responsive/tasks/task-08-profile-page.md +192 -0
- package/template/specs/ui-polish-responsive/tasks/task-09-auth-pages.md +97 -0
- package/template/specs/ui-polish-responsive/tasks/task-10-setup-checklist.md +120 -0
- package/template/specs/ui-polish-responsive/tasks/task-11-starter-prompt-modal.md +87 -0
- package/template/src/app/(auth)/forgot-password/page.tsx +35 -0
- package/template/src/app/(auth)/layout.tsx +7 -0
- package/template/src/app/(auth)/login/page.tsx +44 -0
- package/template/src/app/(auth)/register/page.tsx +33 -0
- package/template/src/app/(auth)/reset-password/page.tsx +36 -0
- package/template/src/app/api/auth/[...all]/route.ts +4 -0
- package/template/src/app/api/chat/route.ts +80 -0
- package/template/src/app/api/diagnostics/route.ts +162 -0
- package/template/src/app/chat/error.tsx +46 -0
- package/template/src/app/chat/loading.tsx +42 -0
- package/template/src/app/chat/page.tsx +348 -0
- package/template/src/app/dashboard/loading.tsx +63 -0
- package/template/src/app/dashboard/page.tsx +79 -0
- package/template/src/app/error.tsx +44 -0
- package/template/src/app/favicon.ico +0 -0
- package/template/src/app/globals.css +175 -0
- package/template/src/app/layout.tsx +108 -0
- package/template/src/app/manifest.ts +21 -0
- package/template/src/app/not-found.tsx +28 -0
- package/template/src/app/page.tsx +152 -0
- package/template/src/app/profile/page.tsx +416 -0
- package/template/src/app/robots.ts +16 -0
- package/template/src/app/sitemap.ts +26 -0
- package/template/src/components/auth/forgot-password-form.tsx +83 -0
- package/template/src/components/auth/reset-password-form.tsx +107 -0
- package/template/src/components/auth/sign-in-button.tsx +97 -0
- package/template/src/components/auth/sign-out-button.tsx +31 -0
- package/template/src/components/auth/sign-up-form.tsx +121 -0
- package/template/src/components/auth/user-profile.tsx +91 -0
- package/template/src/components/setup-checklist.tsx +180 -0
- package/template/src/components/site-footer.tsx +24 -0
- package/template/src/components/site-header.tsx +46 -0
- package/template/src/components/starter-prompt-modal.tsx +202 -0
- package/template/src/components/theme-provider.tsx +11 -0
- package/template/src/components/ui/avatar.tsx +52 -0
- package/template/src/components/ui/badge.tsx +35 -0
- package/template/src/components/ui/button.tsx +58 -0
- package/template/src/components/ui/card.tsx +78 -0
- package/template/src/components/ui/dialog.tsx +142 -0
- package/template/src/components/ui/dropdown-menu.tsx +256 -0
- package/template/src/components/ui/github-stars.tsx +53 -0
- package/template/src/components/ui/input.tsx +20 -0
- package/template/src/components/ui/label.tsx +23 -0
- package/template/src/components/ui/mode-toggle.tsx +38 -0
- package/template/src/components/ui/separator.tsx +23 -0
- package/template/src/components/ui/skeleton.tsx +13 -0
- package/template/src/components/ui/sonner.tsx +42 -0
- package/template/src/components/ui/spinner.tsx +21 -0
- package/template/src/components/ui/textarea.tsx +17 -0
- package/template/src/hooks/use-diagnostics.ts +86 -0
- package/template/src/lib/auth-client.ts +16 -0
- package/template/src/lib/auth.ts +25 -0
- package/template/src/lib/db.ts +12 -0
- package/template/src/lib/env.ts +117 -0
- package/template/src/lib/schema.ts +82 -0
- package/template/src/lib/session.ts +48 -0
- package/template/src/lib/storage.ts +225 -0
- package/template/src/lib/utils.ts +6 -0
- package/template/src/proxy.ts +25 -0
- package/template/tsconfig.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# create-xani-agentic-app
|
|
2
|
+
|
|
3
|
+
Scaffold a new agentic AI application with Next.js, Better Auth, and AI SDK.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Create a new project in the current directory:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx create-xani-agentic-app@latest .
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Create a new project in a subdirectory:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx create-xani-agentic-app@latest my-app
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Non-Interactive Mode (for CI/CD and coding agents)
|
|
20
|
+
|
|
21
|
+
All prompts can be bypassed with CLI flags, enabling fully automated project scaffolding:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Full non-interactive setup
|
|
25
|
+
npx create-xani-agentic-app@latest my-app -y -p pnpm
|
|
26
|
+
|
|
27
|
+
# Skip install and git init for faster scaffolding
|
|
28
|
+
npx create-xani-agentic-app@latest my-app -y -p npm --skip-install --skip-git
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Available Flags
|
|
32
|
+
|
|
33
|
+
| Flag | Short | Description |
|
|
34
|
+
|------|-------|-------------|
|
|
35
|
+
| `--yes` | `-y` | Auto-confirm non-empty directory prompt |
|
|
36
|
+
| `--package-manager <manager>` | `-p` | Package manager to use: `pnpm`, `npm`, or `yarn` |
|
|
37
|
+
| `--skip-install` | | Skip dependency installation |
|
|
38
|
+
| `--skip-git` | | Skip git repository initialization |
|
|
39
|
+
|
|
40
|
+
## What's Included
|
|
41
|
+
|
|
42
|
+
This starter kit includes:
|
|
43
|
+
|
|
44
|
+
- **Next.js 16** with App Router and Turbopack
|
|
45
|
+
- **Better Auth** for authentication (email/password, OAuth)
|
|
46
|
+
- **AI SDK** by Vercel for AI chat functionality
|
|
47
|
+
- **Drizzle ORM** with PostgreSQL database
|
|
48
|
+
- **Tailwind CSS** with shadcn/ui components
|
|
49
|
+
- **TypeScript** for type safety
|
|
50
|
+
- **Dark mode** support with next-themes
|
|
51
|
+
|
|
52
|
+
## Next Steps
|
|
53
|
+
|
|
54
|
+
After creating your project:
|
|
55
|
+
|
|
56
|
+
1. **Update environment variables**: Edit `.env` with your API keys and database credentials
|
|
57
|
+
2. **Start the database**: `docker compose up -d`
|
|
58
|
+
3. **Run migrations**: `pnpm run db:migrate` (or `npm`/`yarn`)
|
|
59
|
+
4. **Start dev server**: `pnpm run dev`
|
|
60
|
+
|
|
61
|
+
Visit `http://localhost:3000` to see your app!
|
|
62
|
+
|
|
63
|
+
## Publishing to npm
|
|
64
|
+
|
|
65
|
+
To publish this package to npm:
|
|
66
|
+
|
|
67
|
+
1. **Update package.json**: Set your author, repository URL, and version in `create-xani-agentic-app/package.json`
|
|
68
|
+
2. **Test locally** (optional): Test the package before publishing:
|
|
69
|
+
```bash
|
|
70
|
+
cd create-xani-agentic-app
|
|
71
|
+
npm link
|
|
72
|
+
cd /path/to/test/directory
|
|
73
|
+
create-xani-agentic-app my-test-app
|
|
74
|
+
```
|
|
75
|
+
3. **Publish**: The sync happens automatically!
|
|
76
|
+
```bash
|
|
77
|
+
cd create-xani-agentic-app
|
|
78
|
+
npm publish
|
|
79
|
+
```
|
|
80
|
+
The `prepublishOnly` hook will automatically sync the template from the main project before publishing.
|
|
81
|
+
|
|
82
|
+
## Maintainer Guide: Updating & Publishing
|
|
83
|
+
|
|
84
|
+
This section is for maintainers who need to update the npm package after making changes to the main project.
|
|
85
|
+
|
|
86
|
+
### Complete Publishing Workflow
|
|
87
|
+
|
|
88
|
+
Follow these steps **every time** you make changes to the main project and want to publish them:
|
|
89
|
+
|
|
90
|
+
#### Step 1: Make Changes to Main Project
|
|
91
|
+
|
|
92
|
+
Edit any files in the main project (outside of `create-xani-agentic-app/` folder):
|
|
93
|
+
- `src/` components and pages
|
|
94
|
+
- `docker-compose.yml`
|
|
95
|
+
- `package.json`
|
|
96
|
+
- Configuration files
|
|
97
|
+
- etc.
|
|
98
|
+
|
|
99
|
+
#### Step 2: Navigate to create-xani-agentic-app Directory
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
cd create-xani-agentic-app
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### Step 3: Sync Template from Main Project
|
|
106
|
+
|
|
107
|
+
This copies all your changes from the main project into the template folder:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npm run sync
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**What this does:**
|
|
114
|
+
- Deletes everything in `create-xani-agentic-app/template/`
|
|
115
|
+
- Copies ALL files from your main project into `template/`
|
|
116
|
+
- Excludes: `node_modules`, `.next`, `.git`, lock files, `.env`, and the `create-xani-agentic-app` folder itself
|
|
117
|
+
- Cleans up the template's `package.json` (removes `private` field and `sync-template` script)
|
|
118
|
+
|
|
119
|
+
#### Step 4: Bump the Version
|
|
120
|
+
|
|
121
|
+
Update the version number in `create-xani-agentic-app/package.json`:
|
|
122
|
+
|
|
123
|
+
**Option A - Using npm version command (recommended):**
|
|
124
|
+
```bash
|
|
125
|
+
npm version patch # 1.1.3 → 1.1.4 (bug fixes)
|
|
126
|
+
# or
|
|
127
|
+
npm version minor # 1.1.3 → 1.2.0 (new features)
|
|
128
|
+
# or
|
|
129
|
+
npm version major # 1.1.3 → 2.0.0 (breaking changes)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Option B - Manual:**
|
|
133
|
+
Edit `create-xani-agentic-app/package.json` and change the version number.
|
|
134
|
+
|
|
135
|
+
#### Step 5: Verify Everything Looks Good (Optional)
|
|
136
|
+
|
|
137
|
+
Quick check to make sure your changes are in the package:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npm pack --dry-run | grep "template/"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
This shows all files that will be published. Look for your changed files.
|
|
144
|
+
|
|
145
|
+
#### Step 6: Publish to npm
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npm publish
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**What happens:**
|
|
152
|
+
- The `prepublishOnly` hook automatically runs `npm run sync` again (safety check)
|
|
153
|
+
- Your package gets published to npm with the new version
|
|
154
|
+
|
|
155
|
+
#### Step 7: Test It
|
|
156
|
+
|
|
157
|
+
In a different directory, test that it works:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
cd /path/to/test-directory
|
|
161
|
+
npx create-xani-agentic-app@latest test-project
|
|
162
|
+
# or use the specific version
|
|
163
|
+
npx create-xani-agentic-app@1.1.4 test-project
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Quick Reference Commands
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Complete workflow in 4 commands:
|
|
170
|
+
cd create-xani-agentic-app
|
|
171
|
+
npm run sync
|
|
172
|
+
npm version patch
|
|
173
|
+
npm publish
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Common Scenarios
|
|
177
|
+
|
|
178
|
+
**Scenario 1: You edited `docker-compose.yml` in the main project**
|
|
179
|
+
```bash
|
|
180
|
+
cd create-xani-agentic-app
|
|
181
|
+
npm run sync # Copies docker-compose.yml to template/
|
|
182
|
+
npm version patch # Bumps to next version
|
|
183
|
+
npm publish # Publishes to npm
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Scenario 2: You added a new component in `src/components/`**
|
|
187
|
+
```bash
|
|
188
|
+
cd create-xani-agentic-app
|
|
189
|
+
npm run sync # Copies new component to template/
|
|
190
|
+
npm version patch # Bumps version
|
|
191
|
+
npm publish # Publishes
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Scenario 3: You updated multiple files**
|
|
195
|
+
```bash
|
|
196
|
+
cd create-xani-agentic-app
|
|
197
|
+
npm run sync # Copies ALL changes to template/
|
|
198
|
+
npm version patch # Bumps version
|
|
199
|
+
npm publish # Publishes
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### What Gets Excluded from the Template
|
|
203
|
+
|
|
204
|
+
The sync script excludes these patterns (see `scripts/sync-templates.js`):
|
|
205
|
+
- `node_modules`
|
|
206
|
+
- `.next`
|
|
207
|
+
- `.git`
|
|
208
|
+
- `pnpm-lock.yaml`
|
|
209
|
+
- `package-lock.json`
|
|
210
|
+
- `yarn.lock`
|
|
211
|
+
- `tsconfig.tsbuildinfo`
|
|
212
|
+
- `.env`
|
|
213
|
+
- `create-xani-agentic-app` (the folder itself)
|
|
214
|
+
|
|
215
|
+
### Troubleshooting
|
|
216
|
+
|
|
217
|
+
**Issue: npmjs.com shows old version after publishing**
|
|
218
|
+
- The npm website can take 5-10 minutes to update due to CDN caching
|
|
219
|
+
- Verify actual registry: `npm view create-xani-agentic-app version`
|
|
220
|
+
- The package is available to users immediately via `npx` even if the website hasn't updated
|
|
221
|
+
|
|
222
|
+
**Issue: Users getting old version with `npx`**
|
|
223
|
+
- Users may have cached versions. Tell them to:
|
|
224
|
+
```bash
|
|
225
|
+
npx clear-npx-cache
|
|
226
|
+
npx create-xani-agentic-app@latest my-project
|
|
227
|
+
# or use specific version
|
|
228
|
+
npx create-xani-agentic-app@1.1.4 my-project
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Issue: Forgot to run sync before publishing**
|
|
232
|
+
- No problem! The `prepublishOnly` hook runs it automatically
|
|
233
|
+
- But it's good practice to run manually first to verify changes
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
MIT
|
package/index.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { program } from 'commander';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import prompts from 'prompts';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import { execSync } from 'child_process';
|
|
11
|
+
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = path.dirname(__filename);
|
|
14
|
+
|
|
15
|
+
const TEMPLATE_DIR = path.join(__dirname, 'template');
|
|
16
|
+
|
|
17
|
+
async function main() {
|
|
18
|
+
console.log(chalk.bold.cyan('\n🤖 Create Xani Agentic App\n'));
|
|
19
|
+
|
|
20
|
+
program
|
|
21
|
+
.name('create-xani-agentic-app')
|
|
22
|
+
.description('Scaffold a new agentic AI application')
|
|
23
|
+
.argument('[project-directory]', 'Project directory name (use "." for current directory)')
|
|
24
|
+
.option('-y, --yes', 'Auto-confirm non-empty directory prompt')
|
|
25
|
+
.option('-p, --package-manager <manager>', 'Package manager to use: pnpm | npm | yarn')
|
|
26
|
+
.option('--skip-install', 'Skip dependency installation')
|
|
27
|
+
.option('--skip-git', 'Skip git repository initialization')
|
|
28
|
+
.parse(process.argv);
|
|
29
|
+
|
|
30
|
+
const args = program.args;
|
|
31
|
+
const opts = program.opts();
|
|
32
|
+
let projectDir = args[0] || '.';
|
|
33
|
+
|
|
34
|
+
// Validate --package-manager value if provided
|
|
35
|
+
const validPackageManagers = ['pnpm', 'npm', 'yarn'];
|
|
36
|
+
if (opts.packageManager && !validPackageManagers.includes(opts.packageManager)) {
|
|
37
|
+
console.log(chalk.red(`Invalid package manager: "${opts.packageManager}"`));
|
|
38
|
+
console.log(chalk.yellow(`Valid options: ${validPackageManagers.join(', ')}`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Resolve the target directory
|
|
43
|
+
const targetDir = path.resolve(process.cwd(), projectDir);
|
|
44
|
+
const projectName = projectDir === '.' ? path.basename(targetDir) : projectDir;
|
|
45
|
+
|
|
46
|
+
// Check if directory exists and is not empty
|
|
47
|
+
if (fs.existsSync(targetDir)) {
|
|
48
|
+
const files = fs.readdirSync(targetDir);
|
|
49
|
+
if (files.length > 0 && projectDir !== '.') {
|
|
50
|
+
if (opts.yes) {
|
|
51
|
+
console.log(chalk.yellow(`Directory "${projectDir}" is not empty. Proceeding (--yes).`));
|
|
52
|
+
} else {
|
|
53
|
+
const { proceed } = await prompts({
|
|
54
|
+
type: 'confirm',
|
|
55
|
+
name: 'proceed',
|
|
56
|
+
message: `Directory "${projectDir}" is not empty. Continue anyway?`,
|
|
57
|
+
initial: false
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (!proceed) {
|
|
61
|
+
console.log(chalk.yellow('Cancelled.'));
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Determine package manager
|
|
69
|
+
let packageManager;
|
|
70
|
+
if (opts.packageManager) {
|
|
71
|
+
packageManager = opts.packageManager;
|
|
72
|
+
} else {
|
|
73
|
+
const response = await prompts({
|
|
74
|
+
type: 'select',
|
|
75
|
+
name: 'packageManager',
|
|
76
|
+
message: 'Which package manager do you want to use?',
|
|
77
|
+
choices: [
|
|
78
|
+
{ title: 'pnpm (recommended)', value: 'pnpm' },
|
|
79
|
+
{ title: 'npm', value: 'npm' },
|
|
80
|
+
{ title: 'yarn', value: 'yarn' }
|
|
81
|
+
],
|
|
82
|
+
initial: 0
|
|
83
|
+
});
|
|
84
|
+
packageManager = response.packageManager;
|
|
85
|
+
|
|
86
|
+
if (!packageManager) {
|
|
87
|
+
console.log(chalk.yellow('Cancelled.'));
|
|
88
|
+
process.exit(0);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
console.log();
|
|
93
|
+
const spinner = ora('Creating project...').start();
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
// Create target directory if it doesn't exist
|
|
97
|
+
fs.ensureDirSync(targetDir);
|
|
98
|
+
|
|
99
|
+
// Copy template files
|
|
100
|
+
spinner.text = 'Copying template files...';
|
|
101
|
+
await fs.copy(TEMPLATE_DIR, targetDir, {
|
|
102
|
+
overwrite: false,
|
|
103
|
+
errorOnExist: false,
|
|
104
|
+
filter: (src) => {
|
|
105
|
+
// Skip node_modules, .next, and other build artifacts
|
|
106
|
+
const relativePath = path.relative(TEMPLATE_DIR, src);
|
|
107
|
+
return !relativePath.includes('node_modules') &&
|
|
108
|
+
!relativePath.includes('.next') &&
|
|
109
|
+
!relativePath.includes('.git') &&
|
|
110
|
+
!relativePath.includes('pnpm-lock.yaml') &&
|
|
111
|
+
!relativePath.includes('package-lock.json') &&
|
|
112
|
+
!relativePath.includes('yarn.lock') &&
|
|
113
|
+
!relativePath.includes('tsconfig.tsbuildinfo');
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Copy .env.example to .env if it doesn't exist
|
|
118
|
+
const envExamplePath = path.join(targetDir, 'env.example');
|
|
119
|
+
const envPath = path.join(targetDir, '.env');
|
|
120
|
+
|
|
121
|
+
if (fs.existsSync(envExamplePath) && !fs.existsSync(envPath)) {
|
|
122
|
+
spinner.text = 'Setting up environment file...';
|
|
123
|
+
await fs.copy(envExamplePath, envPath);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Rename _gitignore to .gitignore (npm excludes .gitignore by default)
|
|
127
|
+
const gitignoreTemplatePath = path.join(targetDir, '_gitignore');
|
|
128
|
+
const gitignorePath = path.join(targetDir, '.gitignore');
|
|
129
|
+
|
|
130
|
+
if (fs.existsSync(gitignoreTemplatePath)) {
|
|
131
|
+
spinner.text = 'Setting up .gitignore file...';
|
|
132
|
+
await fs.move(gitignoreTemplatePath, gitignorePath, { overwrite: true });
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Update package.json name if not current directory
|
|
136
|
+
if (projectDir !== '.') {
|
|
137
|
+
const packageJsonPath = path.join(targetDir, 'package.json');
|
|
138
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
139
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
140
|
+
packageJson.name = projectName;
|
|
141
|
+
await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
spinner.succeed(chalk.green('Project created successfully!'));
|
|
146
|
+
|
|
147
|
+
// Install dependencies
|
|
148
|
+
if (opts.skipInstall) {
|
|
149
|
+
console.log(chalk.yellow('\nSkipping dependency installation (--skip-install).'));
|
|
150
|
+
} else {
|
|
151
|
+
console.log();
|
|
152
|
+
const installSpinner = ora(`Installing dependencies with ${packageManager}...`).start();
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
const installCmd = packageManager === 'yarn' ? 'yarn install' : `${packageManager} install`;
|
|
156
|
+
execSync(installCmd, {
|
|
157
|
+
cwd: targetDir,
|
|
158
|
+
stdio: 'pipe'
|
|
159
|
+
});
|
|
160
|
+
installSpinner.succeed(chalk.green('Dependencies installed!'));
|
|
161
|
+
} catch (error) {
|
|
162
|
+
installSpinner.fail(chalk.red('Failed to install dependencies'));
|
|
163
|
+
console.log(chalk.yellow(`\nPlease run "${packageManager} install" manually.\n`));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Initialize Git repository
|
|
168
|
+
if (opts.skipGit) {
|
|
169
|
+
console.log(chalk.yellow('\nSkipping git initialization (--skip-git).'));
|
|
170
|
+
} else {
|
|
171
|
+
console.log();
|
|
172
|
+
const gitSpinner = ora('Initializing Git repository...').start();
|
|
173
|
+
|
|
174
|
+
try {
|
|
175
|
+
// Check if git is available
|
|
176
|
+
execSync('git --version', { stdio: 'pipe' });
|
|
177
|
+
|
|
178
|
+
// Initialize git repo if not already initialized
|
|
179
|
+
if (!fs.existsSync(path.join(targetDir, '.git'))) {
|
|
180
|
+
execSync('git init', { cwd: targetDir, stdio: 'pipe' });
|
|
181
|
+
execSync('git add .', { cwd: targetDir, stdio: 'pipe' });
|
|
182
|
+
execSync('git commit -m "Initial commit from create-xani-agentic-app"', {
|
|
183
|
+
cwd: targetDir,
|
|
184
|
+
stdio: 'pipe'
|
|
185
|
+
});
|
|
186
|
+
gitSpinner.succeed(chalk.green('Git repository initialized!'));
|
|
187
|
+
} else {
|
|
188
|
+
gitSpinner.info(chalk.blue('Git repository already exists'));
|
|
189
|
+
}
|
|
190
|
+
} catch (error) {
|
|
191
|
+
gitSpinner.warn(chalk.yellow('Git not found - skipping repository initialization'));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Display next steps
|
|
196
|
+
console.log();
|
|
197
|
+
console.log(chalk.bold.green('✨ Your agentic app is ready!\n'));
|
|
198
|
+
console.log(chalk.bold('Next steps:\n'));
|
|
199
|
+
|
|
200
|
+
if (projectDir !== '.') {
|
|
201
|
+
console.log(chalk.cyan(` cd ${projectDir}`));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
console.log(chalk.cyan(' 1. Update the .env file with your API keys and database credentials'));
|
|
205
|
+
console.log(chalk.cyan(` 2. Start the database: docker compose up -d`));
|
|
206
|
+
console.log(chalk.cyan(` 3. Run database migrations: ${packageManager} run db:migrate`));
|
|
207
|
+
console.log(chalk.cyan(` 4. Start the development server: ${packageManager} run dev`));
|
|
208
|
+
|
|
209
|
+
console.log();
|
|
210
|
+
console.log(chalk.gray('For more information, check out the README.md file.\n'));
|
|
211
|
+
|
|
212
|
+
} catch (error) {
|
|
213
|
+
spinner.fail(chalk.red('Failed to create project'));
|
|
214
|
+
console.error(error);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
main().catch(console.error);
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-xani-agentic-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Scaffold a new agentic AI application with Next.js, Better Auth, and AI SDK",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-xani-agentic-app": "./index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.js",
|
|
11
|
+
"template"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"sync": "node scripts/sync-templates.js",
|
|
15
|
+
"prepublishOnly": "npm run sync",
|
|
16
|
+
"publish:token": "node scripts/publish-with-token.js"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"ai",
|
|
20
|
+
"agents",
|
|
21
|
+
"nextjs",
|
|
22
|
+
"better-auth",
|
|
23
|
+
"starter-kit",
|
|
24
|
+
"boilerplate",
|
|
25
|
+
"scaffold",
|
|
26
|
+
"create-app"
|
|
27
|
+
],
|
|
28
|
+
"author": "AlexandreXavier",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/AlexandreXavier/xani-agentic-starter-kit.git",
|
|
33
|
+
"directory": "create-xani-agentic-app"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/AlexandreXavier/xani-agentic-starter-kit#readme",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/AlexandreXavier/xani-agentic-starter-kit/issues"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"chalk": "^5.3.0",
|
|
41
|
+
"commander": "^12.1.0",
|
|
42
|
+
"fs-extra": "^11.2.0",
|
|
43
|
+
"ora": "^8.1.1",
|
|
44
|
+
"prompts": "^2.4.2"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-sdk
|
|
3
|
+
description: 'Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: "AI SDK", "Vercel AI SDK", "generateText", "streamText", "add AI to my app", "build an agent", "tool calling", "structured output", "useChat".'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
Before searching docs, check if `node_modules/ai/docs/` exists. If not, install **only** the `ai` package using the project's package manager (e.g., `pnpm add ai`).
|
|
9
|
+
|
|
10
|
+
Do not install other packages at this stage. Provider packages (e.g., `@ai-sdk/openai`) and client packages (e.g., `@ai-sdk/react`) should be installed later when needed based on user requirements.
|
|
11
|
+
|
|
12
|
+
## Critical: Do Not Trust Internal Knowledge
|
|
13
|
+
|
|
14
|
+
Everything you know about the AI SDK is outdated or wrong. Your training data contains obsolete APIs, deprecated patterns, and incorrect usage.
|
|
15
|
+
|
|
16
|
+
**When working with the AI SDK:**
|
|
17
|
+
|
|
18
|
+
1. Ensure `ai` package is installed (see Prerequisites)
|
|
19
|
+
2. Search `node_modules/ai/docs/` and `node_modules/ai/src/` for current APIs
|
|
20
|
+
3. If not found locally, search ai-sdk.dev documentation (instructions below)
|
|
21
|
+
4. Never rely on memory - always verify against source code or docs
|
|
22
|
+
5. **`useChat` has changed significantly** - check [Common Errors](references/common-errors.md) before writing client code
|
|
23
|
+
6. When deciding which model and provider to use (e.g. OpenAI, Anthropic, Gemini), use the Vercel AI Gateway provider unless the user specifies otherwise. See [AI Gateway Reference](references/ai-gateway.md) for usage details.
|
|
24
|
+
7. **Always fetch current model IDs** - Never use model IDs from memory. Before writing code that uses a model, run `curl -s https://ai-gateway.vercel.sh/v1/models | jq -r '[.data[] | select(.id | startswith("provider/")) | .id] | reverse | .[]'` (replacing `provider` with the relevant provider like `anthropic`, `openai`, or `google`) to get the full list with newest models first. Use the model with the highest version number (e.g., `claude-sonnet-4-5` over `claude-sonnet-4` over `claude-3-5-sonnet`).
|
|
25
|
+
8. Run typecheck after changes to ensure code is correct
|
|
26
|
+
9. **Be minimal** - Only specify options that differ from defaults. When unsure of defaults, check docs or source rather than guessing or over-specifying.
|
|
27
|
+
|
|
28
|
+
If you cannot find documentation to support your answer, state that explicitly.
|
|
29
|
+
|
|
30
|
+
## Finding Documentation
|
|
31
|
+
|
|
32
|
+
### ai@6.0.34+
|
|
33
|
+
|
|
34
|
+
Search bundled docs and source in `node_modules/ai/`:
|
|
35
|
+
|
|
36
|
+
- **Docs**: `grep "query" node_modules/ai/docs/`
|
|
37
|
+
- **Source**: `grep "query" node_modules/ai/src/`
|
|
38
|
+
|
|
39
|
+
Provider packages include docs at `node_modules/@ai-sdk/<provider>/docs/`.
|
|
40
|
+
|
|
41
|
+
### Earlier versions
|
|
42
|
+
|
|
43
|
+
1. Search: `https://ai-sdk.dev/api/search-docs?q=your_query`
|
|
44
|
+
2. Fetch `.md` URLs from results (e.g., `https://ai-sdk.dev/docs/agents/building-agents.md`)
|
|
45
|
+
|
|
46
|
+
## When Typecheck Fails
|
|
47
|
+
|
|
48
|
+
**Before searching source code**, grep [Common Errors](references/common-errors.md) for the failing property or function name. Many type errors are caused by deprecated APIs documented there.
|
|
49
|
+
|
|
50
|
+
If not found in common-errors.md:
|
|
51
|
+
|
|
52
|
+
1. Search `node_modules/ai/src/` and `node_modules/ai/docs/`
|
|
53
|
+
2. Search ai-sdk.dev (for earlier versions or if not found locally)
|
|
54
|
+
|
|
55
|
+
## Building and Consuming Agents
|
|
56
|
+
|
|
57
|
+
### Creating Agents
|
|
58
|
+
|
|
59
|
+
Always use the `ToolLoopAgent` pattern. Search `node_modules/ai/docs/` for current agent creation APIs.
|
|
60
|
+
|
|
61
|
+
**File conventions**: See [type-safe-agents.md](references/type-safe-agents.md) for where to save agents and tools.
|
|
62
|
+
|
|
63
|
+
**Type Safety**: When consuming agents with `useChat`, always use `InferAgentUIMessage<typeof agent>` for type-safe tool results. See [reference](references/type-safe-agents.md).
|
|
64
|
+
|
|
65
|
+
### Consuming Agents (Framework-Specific)
|
|
66
|
+
|
|
67
|
+
Before implementing agent consumption:
|
|
68
|
+
|
|
69
|
+
1. Check `package.json` to detect the project's framework/stack
|
|
70
|
+
2. Search documentation for the framework's quickstart guide
|
|
71
|
+
3. Follow the framework-specific patterns for streaming, API routes, and client integration
|
|
72
|
+
|
|
73
|
+
## References
|
|
74
|
+
|
|
75
|
+
- [Common Errors](references/common-errors.md) - Renamed parameters reference (parameters → inputSchema, etc.)
|
|
76
|
+
- [AI Gateway](references/ai-gateway.md) - Gateway setup and usage
|
|
77
|
+
- [Type-Safe Agents with useChat](references/type-safe-agents.md) - End-to-end type safety with InferAgentUIMessage
|
|
78
|
+
- [DevTools](references/devtools.md) - Set up local debugging and observability (development only)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Vercel AI Gateway
|
|
3
|
+
description: Reference for using Vercel AI Gateway with the AI SDK.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vercel AI Gateway
|
|
7
|
+
|
|
8
|
+
The Vercel AI Gateway is the fastest way to get started with the AI SDK. It provides access to models from OpenAI, Anthropic, Google, and other providers through a single API.
|
|
9
|
+
|
|
10
|
+
## Authentication
|
|
11
|
+
|
|
12
|
+
Authenticate with OIDC (for Vercel deployments) or an [AI Gateway API key](https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai-gateway%2Fapi-keys&title=AI+Gateway+API+Keys):
|
|
13
|
+
|
|
14
|
+
```env filename=".env.local"
|
|
15
|
+
AI_GATEWAY_API_KEY=your_api_key_here
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
The AI Gateway is the default global provider, so you can access models using a simple string:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { generateText } from 'ai';
|
|
24
|
+
|
|
25
|
+
const { text } = await generateText({
|
|
26
|
+
model: 'anthropic/claude-sonnet-4.5',
|
|
27
|
+
prompt: 'What is love?',
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
You can also explicitly import and use the gateway provider:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
// Option 1: Import from 'ai' package (included by default)
|
|
35
|
+
import { gateway } from 'ai';
|
|
36
|
+
model: gateway('anthropic/claude-sonnet-4.5');
|
|
37
|
+
|
|
38
|
+
// Option 2: Install and import from '@ai-sdk/gateway' package
|
|
39
|
+
import { gateway } from '@ai-sdk/gateway';
|
|
40
|
+
model: gateway('anthropic/claude-sonnet-4.5');
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Find Available Models
|
|
44
|
+
|
|
45
|
+
**Important**: Always fetch the current model list before writing code. Never use model IDs from memory - they may be outdated.
|
|
46
|
+
|
|
47
|
+
List all available models through the gateway API:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl https://ai-gateway.vercel.sh/v1/models
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Filter by provider using `jq`. **Do not truncate with `head`** - always fetch the full list to find the latest models:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Anthropic models
|
|
57
|
+
curl -s https://ai-gateway.vercel.sh/v1/models | jq -r '[.data[] | select(.id | startswith("anthropic/")) | .id] | reverse | .[]'
|
|
58
|
+
|
|
59
|
+
# OpenAI models
|
|
60
|
+
curl -s https://ai-gateway.vercel.sh/v1/models | jq -r '[.data[] | select(.id | startswith("openai/")) | .id] | reverse | .[]'
|
|
61
|
+
|
|
62
|
+
# Google models
|
|
63
|
+
curl -s https://ai-gateway.vercel.sh/v1/models | jq -r '[.data[] | select(.id | startswith("google/")) | .id] | reverse | .[]'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
When multiple versions of a model exist, use the one with the highest version number (e.g., prefer `anthropic/claude-sonnet-4.6` over `anthropic/claude-sonnet-4.5` over `claude-sonnet-4`).
|