Merge pull request #2 from marciobarroso/fix/installation-warnings-nodejs-v24

Fix/installation warnings nodejs v24
This commit is contained in:
Marcio Barroso 2025-09-24 13:19:35 -03:00 committed by GitHub
commit 424fda562d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
30 changed files with 604 additions and 212 deletions

View File

@ -9,6 +9,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
## ✨ Features
### 🤖 Specialized AI Agents
- **Domain Architect** - Business domain modeling and bounded context definition
- **Next.js Architect** - Feature-Based Architecture and App Router patterns
- **BaseController Specialist** - Database-agnostic controller patterns and schema-first design
@ -23,6 +24,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
- **Security Auditor** - Security best practices for modern web applications
### 🔄 Domain-Driven Workflows
- **Feature-Based Project Setup** - Initialize project from `nextjs-new-app` template
- **Domain Feature Development** - Complete business domain implementation
- **BaseController Implementation** - Database-agnostic controller setup
@ -32,6 +34,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
- **Deployment Pipeline** - Production deployment with Feature-Based Architecture
### 📝 Architecture Templates
- Feature Structure Template (Complete feature organization)
- BaseController Extension Template (Database-agnostic controller)
- Schema-First Entity Template (Zod validation + TypeScript types)
@ -40,6 +43,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
- Custom Hooks Template (Data fetching patterns)
### ✅ Architecture Checklists
- Feature-Based Architecture Development Checklist
- BaseController Implementation Checklist
- Domain-Driven Design Checklist
@ -49,7 +53,9 @@ This extension pack provides everything needed to build enterprise-grade Next.js
## 🚀 Quick Start
### Template Base
This extension pack is designed to work with the `nextjs-new-app` template:
```bash
# Clone the base template
git clone https://github.com/marciobarroso/nextjs-new-app.git my-project
@ -60,6 +66,7 @@ pnpm install # or npm install
```
### Extension Pack Usage
```bash
# Use BMAD Method with this extension pack
bmad-fba create-feature "user-management"
@ -88,12 +95,14 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
## 📚 Documentation
### Core Concepts
- [Project Structure](docs/project-structure.md)
- [Component Patterns](docs/component-patterns.md)
- [API Design](docs/api-design.md)
- [State Management](docs/state-management.md)
### Guides
- [Getting Started](docs/getting-started.md)
- [Development Workflow](docs/development-workflow.md)
- [Testing Strategy](docs/testing-strategy.md)
@ -102,6 +111,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
## 🛠️ Technology Stack
### Core Technologies (from nextjs-new-app template)
- **Next.js 15.5.3** - React framework with App Router
- **React 19.1.0** - Latest React with modern features
- **TypeScript 5** - Strict type safety
@ -110,12 +120,14 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
- **pnpm** - Efficient package management
### Development Tools (pre-configured)
- **ESLint 9** - Code linting with Next.js integration
- **Prettier 3.6.2** - Code formatting with import sorting
- **Husky 9.1.7** - Git hooks for code quality
- **Jest** - Testing framework (configured, ready for implementation)
### Feature-Based Architecture Additions
- **Zod** - Schema validation and type generation
- **BaseController Pattern** - Database-agnostic CRUD operations
- **Domain-Driven Design** - Business domain organization
@ -124,6 +136,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
## 🎯 Best Practices
### Code Quality
- Strict TypeScript configuration
- Comprehensive ESLint rules
- Automatic code formatting with Prettier
@ -131,6 +144,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
- API-first design approach
### Performance
- Server Components by default
- Client Components only when needed
- Image optimization with Next.js Image
@ -138,6 +152,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
- Core Web Vitals monitoring
### Security
- Input validation with Zod
- CSRF protection
- Secure headers middleware
@ -195,6 +210,7 @@ This extension pack is part of the BMAD Method project and follows the same MIT
**Current Version:** 1.0.0
**Compatibility:**
- Next.js 14+
- Node.js 18+
- TypeScript 5+

View File

@ -2,7 +2,7 @@
bundle:
name: Next.js Feature-Based Architecture Team
icon: ⚛️
description: Complete Feature-Based Architecture team for Next.js 15+ applications with Domain-Driven Design, TypeScript, Tailwind 4.x, and BaseController patterns
description: Core Feature-Based Architecture team for Next.js 15+ applications with Domain-Driven Design, TypeScript, Tailwind 4.x, and BaseController patterns
agents:
- domain-architect
- nextjs-architect
@ -10,17 +10,9 @@ agents:
- typescript-specialist
- tailwind-designer
- api-developer
- database-specialist
- auth-specialist
- testing-engineer
- deployment-specialist
- performance-optimizer
- security-auditor
workflows:
- feature-based-project-setup
- domain-feature-development
- base-controller-implementation
- cross-feature-integration
- schema-first-development
- testing-pipeline
- deployment-pipeline
- feature-development
- nextjs-project-setup

View File

@ -1,6 +1,7 @@
# BaseController Implementation Checklist
## Abstract Class Setup
- [ ] BaseController abstract class created in `shared/core/`
- [ ] Generic type parameter `<T>` properly defined
- [ ] Database client abstraction implemented
@ -8,6 +9,7 @@
- [ ] Constructor properly initializes dependencies
## CRUD Operations Implementation
- [ ] `getAll` method implemented with pagination
- [ ] `getById` method implemented with proper error handling
- [ ] `create` method implemented with validation
@ -16,6 +18,7 @@
- [ ] All methods return proper HTTP responses
## Search & Filtering
- [ ] Abstract `buildSearchFilter` method defined
- [ ] Search parameter extraction implemented
- [ ] Database-agnostic filter pattern established
@ -24,6 +27,7 @@
- [ ] Search performance considered
## Validation & Schema Integration
- [ ] Zod schema validation on all inputs
- [ ] Create schema validation implemented
- [ ] Update schema validation implemented
@ -32,6 +36,7 @@
- [ ] Validation error messages are user-friendly
## Error Handling
- [ ] Consistent error response format
- [ ] HTTP status codes properly used
- [ ] Validation errors properly formatted
@ -40,6 +45,7 @@
- [ ] Error messages don't expose sensitive data
## Database Abstraction
- [ ] Database client interface defined
- [ ] Connection management abstracted
- [ ] Database-specific operations isolated
@ -48,6 +54,7 @@
- [ ] Connection pooling handled
## Response Formatting
- [ ] Consistent API response structure
- [ ] Success responses properly formatted
- [ ] Error responses standardized
@ -56,6 +63,7 @@
- [ ] Content-Type headers set correctly
## Feature Controller Extension
- [ ] Feature controller extends BaseController
- [ ] Entity-specific `buildSearchFilter` implemented
- [ ] Custom business logic methods added
@ -64,6 +72,7 @@
- [ ] Controller singleton pattern implemented (if needed)
## Type Safety
- [ ] Generic types properly constrained
- [ ] Entity model interfaces defined
- [ ] API response types defined
@ -72,6 +81,7 @@
- [ ] Return types explicitly defined
## Performance Optimization
- [ ] Database queries optimized
- [ ] Proper indexing strategy planned
- [ ] Pagination limits enforced
@ -80,6 +90,7 @@
- [ ] Database connection reuse implemented
## Testing
- [ ] Unit tests for BaseController methods
- [ ] Mock database client created
- [ ] Test data fixtures defined
@ -88,6 +99,7 @@
- [ ] Performance tests implemented
## Documentation
- [ ] BaseController usage documented
- [ ] Extension patterns documented
- [ ] Database integration examples provided
@ -96,6 +108,7 @@
- [ ] Performance considerations documented
## Logging & Monitoring
- [ ] Request/response logging implemented
- [ ] Error logging with stack traces
- [ ] Performance metrics captured
@ -104,6 +117,7 @@
- [ ] Audit trail for data changes
## Security Considerations
- [ ] Input sanitization implemented
- [ ] SQL injection prevention (for SQL databases)
- [ ] NoSQL injection prevention (for NoSQL databases)
@ -112,7 +126,9 @@
- [ ] Sensitive data handling
## Database-Specific Implementations
### For SQL Databases (Prisma/TypeORM)
- [ ] Proper WHERE clause generation
- [ ] JOIN operations handled
- [ ] Transaction support implemented
@ -120,6 +136,7 @@
- [ ] Relationship loading optimized
### For MongoDB (Mongoose)
- [ ] Query object generation
- [ ] Aggregation pipeline support
- [ ] Index utilization optimized
@ -127,6 +144,7 @@
- [ ] Connection string security
### For Serverless Databases
- [ ] Connection pooling optimized
- [ ] Cold start mitigation
- [ ] Query timeout handling
@ -134,6 +152,7 @@
- [ ] Cost optimization considered
## Integration Points
- [ ] Authentication middleware integration
- [ ] Authorization checks implemented
- [ ] Audit logging integrated
@ -142,6 +161,7 @@
- [ ] External API integration patterns
## Production Readiness
- [ ] Environment variable configuration
- [ ] Production database connection
- [ ] Error monitoring integration

View File

@ -1,12 +1,14 @@
# React Component Development Checklist
## Pre-Development
- [ ] Component purpose and requirements clearly defined
- [ ] Component interface (props) designed
- [ ] Accessibility requirements identified
- [ ] Design mockup/wireframe available
## Development
- [ ] TypeScript interface defined for all props
- [ ] Component follows naming conventions (PascalCase)
- [ ] Proper file structure and organization
@ -14,6 +16,7 @@
- [ ] Error boundaries implemented for critical components
## Styling
- [ ] Tailwind CSS classes used consistently
- [ ] Responsive design implemented
- [ ] Dark mode support (if applicable)
@ -21,6 +24,7 @@
- [ ] CSS class conflicts avoided
## Accessibility (a11y)
- [ ] Semantic HTML elements used
- [ ] ARIA labels added where needed
- [ ] Keyboard navigation supported
@ -29,6 +33,7 @@
- [ ] Color contrast meets WCAG guidelines
## Performance
- [ ] Unnecessary re-renders avoided
- [ ] React.memo used where appropriate
- [ ] Heavy computations memoized with useMemo
@ -36,6 +41,7 @@
- [ ] Large lists virtualized (if applicable)
## Testing
- [ ] Unit tests written and passing
- [ ] Component renders without crashing
- [ ] Props validation tested
@ -44,6 +50,7 @@
- [ ] Accessibility testing performed
## Code Quality
- [ ] TypeScript types are strict and accurate
- [ ] ESLint rules pass
- [ ] Prettier formatting applied
@ -52,6 +59,7 @@
- [ ] Comments added for complex logic
## Integration
- [ ] Component integrates well with parent components
- [ ] State management working correctly
- [ ] API calls handled properly (if applicable)
@ -59,12 +67,14 @@
- [ ] Loading states implemented
## Documentation
- [ ] Component documented with JSDoc comments
- [ ] Props interface documented
- [ ] Usage examples provided
- [ ] Storybook story created (if using Storybook)
## Review
- [ ] Code review completed
- [ ] Design review completed
- [ ] Performance review completed

View File

@ -1,6 +1,7 @@
# Feature-Based Architecture Development Checklist
## Domain Analysis & Planning
- [ ] Business domain clearly identified and defined
- [ ] Bounded context boundaries established
- [ ] Domain entities and relationships mapped
@ -9,6 +10,7 @@
- [ ] Business requirements thoroughly documented
## Project Structure
- [ ] Feature organized in `(features)/({feature-name})/` route group
- [ ] API layer structured in `api/{entity-name}/` directory
- [ ] Components organized in `components/` directory within feature
@ -17,6 +19,7 @@
- [ ] Feature pages organized in appropriate subdirectories
## Schema-First Development
- [ ] Zod schema defined for entity validation
- [ ] TypeScript interfaces derived from Zod schemas
- [ ] Create, Update, and Search schemas properly defined
@ -25,6 +28,7 @@
- [ ] Schema validation covers all business rules
## BaseController Implementation
- [ ] Entity controller extends BaseController abstract class
- [ ] Database-agnostic design maintained
- [ ] `buildSearchFilter` method implemented for entity-specific search
@ -33,6 +37,7 @@
- [ ] Controller uses Zod schema for validation
## API Routes Development
- [ ] Collection routes (`/api/{entity}`) implemented
- [ ] Individual entity routes (`/api/{entity}/[id]`) implemented
- [ ] HTTP methods properly implemented (GET, POST, PUT, DELETE)
@ -41,6 +46,7 @@
- [ ] Database connection properly managed
## Custom Hooks Implementation
- [ ] Data fetching hooks follow naming convention (`use{Entities}`)
- [ ] Mutation hooks follow naming convention (`use{Entity}Mutations`)
- [ ] Single entity hooks follow naming convention (`use{Entity}`)
@ -50,6 +56,7 @@
- [ ] Search functionality integrated
## React Components
- [ ] Components follow PascalCase naming convention
- [ ] Form components implemented (`{Entity}Form`)
- [ ] List components implemented (`{Entity}List`)
@ -60,6 +67,7 @@
- [ ] Components follow accessibility guidelines
## Next.js Pages
- [ ] Feature index page implemented (`page.tsx`)
- [ ] Entity detail pages implemented (`[id]/page.tsx`)
- [ ] Create new entity page implemented (`new/page.tsx`)
@ -69,6 +77,7 @@
- [ ] Proper layouts and navigation implemented
## Type Safety
- [ ] Strict TypeScript configuration enforced
- [ ] No `any` types used
- [ ] End-to-end type safety from database to UI
@ -77,6 +86,7 @@
- [ ] Generic types used appropriately
## Code Quality
- [ ] ESLint rules passing without warnings
- [ ] Prettier formatting applied consistently
- [ ] No console statements in production code
@ -85,6 +95,7 @@
- [ ] Code follows established conventions
## Testing
- [ ] Unit tests for controller logic
- [ ] API route integration tests
- [ ] React component tests
@ -93,6 +104,7 @@
- [ ] Test data and mocks properly implemented
## Database Integration
- [ ] Database connection abstracted properly
- [ ] ORM/ODM integration follows patterns
- [ ] Migration strategy considered
@ -101,6 +113,7 @@
- [ ] Data relationships properly modeled
## Performance Considerations
- [ ] Server Components used for data fetching
- [ ] Client Components minimized
- [ ] Database queries optimized
@ -109,6 +122,7 @@
- [ ] Bundle size impact assessed
## Security
- [ ] Input validation on all API endpoints
- [ ] Authentication/authorization considered
- [ ] SQL injection prevention (if using SQL database)
@ -117,6 +131,7 @@
- [ ] Error messages don't leak sensitive information
## Documentation
- [ ] Feature purpose and scope documented
- [ ] API endpoints documented
- [ ] Component usage examples provided
@ -125,6 +140,7 @@
- [ ] Database schema documented
## Integration & Dependencies
- [ ] Shared infrastructure properly utilized
- [ ] Cross-feature dependencies minimized
- [ ] Integration points well-defined
@ -133,6 +149,7 @@
- [ ] Feature can be tested in isolation
## Deployment Readiness
- [ ] Environment variables properly configured
- [ ] Production build successful
- [ ] Database migrations ready (if needed)
@ -141,6 +158,7 @@
- [ ] Health checks implemented
## Review & Quality Assurance
- [ ] Code review completed
- [ ] Architecture review completed
- [ ] Business logic verified

View File

@ -1,9 +1,11 @@
# Create API Endpoint
## Task Overview
Create a new API endpoint in Next.js with proper TypeScript typing, validation, and error handling.
## Prerequisites
- Next.js project with App Router
- TypeScript configured
- Understanding of HTTP methods and status codes
@ -11,9 +13,11 @@ Create a new API endpoint in Next.js with proper TypeScript typing, validation,
## Steps
### 1. Create API Route File
Create `src/app/api/{endpoint}/route.ts`:
```typescript
import { NextRequest, NextResponse } from 'next/server'
import { NextRequest, NextResponse } from 'next/server';
// Define request/response types
interface RequestBody {
@ -29,72 +33,65 @@ export async function GET(request: NextRequest) {
// Handle GET request logic
const data: ResponseData = {
// Your response data
}
};
return NextResponse.json(data, { status: 200 })
return NextResponse.json(data, { status: 200 });
} catch (error) {
console.error('API Error:', error)
return NextResponse.json(
{ error: 'Internal server error' },
{ status: 500 }
)
console.error('API Error:', error);
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
}
}
export async function POST(request: NextRequest) {
try {
const body: RequestBody = await request.json()
const body: RequestBody = await request.json();
// Validate request body
if (!body) {
return NextResponse.json(
{ error: 'Request body is required' },
{ status: 400 }
)
return NextResponse.json({ error: 'Request body is required' }, { status: 400 });
}
// Handle POST request logic
const data: ResponseData = {
// Your response data
}
};
return NextResponse.json(data, { status: 201 })
return NextResponse.json(data, { status: 201 });
} catch (error) {
console.error('API Error:', error)
return NextResponse.json(
{ error: 'Internal server error' },
{ status: 500 }
)
console.error('API Error:', error);
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
}
}
```
### 2. Add Request Validation (Optional)
Install and use Zod for validation:
```bash
npm install zod
```
```typescript
import { z } from 'zod'
import { z } from 'zod';
const requestSchema = z.object({
name: z.string().min(1),
email: z.string().email(),
})
});
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const validatedData = requestSchema.parse(body)
const body = await request.json();
const validatedData = requestSchema.parse(body);
// Use validatedData safely
} catch (error) {
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: 'Invalid request data', details: error.errors },
{ status: 400 }
)
{ status: 400 },
);
}
// Handle other errors
}
@ -102,36 +99,39 @@ export async function POST(request: NextRequest) {
```
### 3. Create API Client Helper
Create `src/lib/api-client.ts`:
```typescript
class ApiError extends Error {
constructor(public status: number, message: string) {
super(message)
this.name = 'ApiError'
constructor(
public status: number,
message: string,
) {
super(message);
this.name = 'ApiError';
}
}
export async function apiCall<T>(
url: string,
options?: RequestInit
): Promise<T> {
export async function apiCall<T>(url: string, options?: RequestInit): Promise<T> {
const response = await fetch(url, {
headers: {
'Content-Type': 'application/json',
...options?.headers,
},
...options,
})
});
if (!response.ok) {
throw new ApiError(response.status, `HTTP error! status: ${response.status}`)
throw new ApiError(response.status, `HTTP error! status: ${response.status}`);
}
return response.json()
return response.json();
}
```
### 4. Use in Components
```typescript
'use client'
@ -164,6 +164,7 @@ export function ExampleComponent() {
```
## Validation Checklist
- [ ] API route file created in correct location
- [ ] Proper TypeScript types defined
- [ ] Error handling implemented
@ -173,6 +174,7 @@ export function ExampleComponent() {
- [ ] Error cases handled gracefully
## Best Practices
- Use proper HTTP status codes
- Implement consistent error response format
- Add request validation for security

View File

@ -1,9 +1,11 @@
# Setup Project from nextjs-new-app Template
## Task Overview
Initialize a new Feature-Based Architecture project using the pre-configured `nextjs-new-app` template with Next.js 15+, TypeScript, Tailwind CSS 4.x, and development tooling.
## Prerequisites
- Node.js 20.10.0+ installed
- pnpm (recommended) or npm package manager
- Git for version control
@ -12,6 +14,7 @@ Initialize a new Feature-Based Architecture project using the pre-configured `ne
## Steps
### 1. Clone Template Repository
```bash
# Clone the nextjs-new-app template
git clone https://github.com/marciobarroso/nextjs-new-app.git {project_name}
@ -25,6 +28,7 @@ git commit -m "Initial commit from nextjs-new-app template"
```
### 2. Install Dependencies
```bash
# Install using pnpm (recommended by template)
pnpm install
@ -34,7 +38,9 @@ pnpm install
```
### 3. Configure Project Details
Update `package.json`:
```json
{
"name": "{project_name}",
@ -45,6 +51,7 @@ Update `package.json`:
```
### 4. Set Up Feature-Based Architecture Structure
```bash
# Create the Feature-Based Architecture directories
mkdir -p app/\(features\)
@ -60,122 +67,134 @@ mkdir -p app/shared/lib
```
### 5. Implement BaseController Foundation
Create `app/shared/core/base-controller.ts`:
```typescript
import { z } from 'zod'
import { NextRequest, NextResponse } from 'next/server'
import { z } from 'zod';
import { NextRequest, NextResponse } from 'next/server';
export abstract class BaseController<T> {
protected dbClient: any
protected schema?: z.ZodSchema
protected dbClient: any;
protected schema?: z.ZodSchema;
constructor(dbClient: any, schema?: z.ZodSchema) {
this.dbClient = dbClient
this.schema = schema
this.dbClient = dbClient;
this.schema = schema;
}
// Standard CRUD operations
async getAll(request: NextRequest): Promise<NextResponse> {
try {
const { searchParams } = new URL(request.url)
const query = searchParams.get('query')
const page = parseInt(searchParams.get('page') || '1')
const limit = parseInt(searchParams.get('limit') || '20')
const { searchParams } = new URL(request.url);
const query = searchParams.get('query');
const page = parseInt(searchParams.get('page') || '1');
const limit = parseInt(searchParams.get('limit') || '20');
const filter = this.buildSearchFilter(query)
const filter = this.buildSearchFilter(query);
// Implement database-specific query here
return NextResponse.json({
data: [],
pagination: { page, limit, total: 0, totalPages: 0 },
success: true
})
success: true,
});
} catch (error) {
return NextResponse.json(
{ error: 'Failed to fetch records', success: false },
{ status: 500 }
)
{ status: 500 },
);
}
}
async getById(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
async getById(
request: NextRequest,
{ params }: { params: { id: string } },
): Promise<NextResponse> {
try {
// Implement database-specific findById here
return NextResponse.json({ data: null, success: true })
return NextResponse.json({ data: null, success: true });
} catch (error) {
return NextResponse.json(
{ error: 'Failed to fetch record', success: false },
{ status: 500 }
)
{ status: 500 },
);
}
}
async create(request: NextRequest): Promise<NextResponse> {
try {
const body = await request.json()
const body = await request.json();
if (this.schema) {
const validatedData = this.schema.parse(body)
const validatedData = this.schema.parse(body);
// Implement database-specific create here
}
return NextResponse.json({ data: null, success: true }, { status: 201 })
return NextResponse.json({ data: null, success: true }, { status: 201 });
} catch (error) {
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: 'Validation failed', details: error.errors, success: false },
{ status: 400 }
)
{ status: 400 },
);
}
return NextResponse.json(
{ error: 'Failed to create record', success: false },
{ status: 500 }
)
{ status: 500 },
);
}
}
async update(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
async update(
request: NextRequest,
{ params }: { params: { id: string } },
): Promise<NextResponse> {
try {
const body = await request.json()
const body = await request.json();
if (this.schema) {
const validatedData = this.schema.partial().parse(body)
const validatedData = this.schema.partial().parse(body);
// Implement database-specific update here
}
return NextResponse.json({ data: null, success: true })
return NextResponse.json({ data: null, success: true });
} catch (error) {
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: 'Validation failed', details: error.errors, success: false },
{ status: 400 }
)
{ status: 400 },
);
}
return NextResponse.json(
{ error: 'Failed to update record', success: false },
{ status: 500 }
)
{ status: 500 },
);
}
}
async delete(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
async delete(
request: NextRequest,
{ params }: { params: { id: string } },
): Promise<NextResponse> {
try {
// Implement database-specific delete here
return NextResponse.json({ success: true, message: 'Record deleted successfully' })
return NextResponse.json({ success: true, message: 'Record deleted successfully' });
} catch (error) {
return NextResponse.json(
{ error: 'Failed to delete record', success: false },
{ status: 500 }
)
{ status: 500 },
);
}
}
// Abstract method for search filtering
protected abstract buildSearchFilter(query: string | null): Record<string, any>
protected abstract buildSearchFilter(query: string | null): Record<string, any>;
}
```
### 6. Add Zod for Schema Validation
```bash
# Install Zod for schema validation
pnpm add zod
@ -183,7 +202,9 @@ pnpm add zod
```
### 7. Configure Environment Variables
Create `.env.local`:
```env
# Database Configuration (customize based on your choice)
DATABASE_URL="your-database-url"
@ -196,7 +217,9 @@ NEXT_PUBLIC_APP_VERSION="1.0.0"
```
### 8. Update TypeScript Configuration
The template already provides optimal TypeScript configuration, but you can extend `tsconfig.json` if needed:
```json
{
"compilerOptions": {
@ -210,6 +233,7 @@ The template already provides optimal TypeScript configuration, but you can exte
```
### 9. Test the Setup
```bash
# Run development server
pnpm dev
@ -229,6 +253,7 @@ pnpm build
```
### 10. Initialize Git Repository
```bash
# Add remote repository (replace with your repository URL)
git remote add origin https://github.com/yourusername/{project_name}.git
@ -249,6 +274,7 @@ git push -u origin main
```
## Validation Checklist
- [ ] Template repository successfully cloned
- [ ] Dependencies installed without errors
- [ ] Development server runs on http://localhost:3000
@ -261,6 +287,7 @@ git push -u origin main
- [ ] Git repository initialized and connected
## Template Features Already Configured
- ✅ Next.js 15.5.3 with App Router
- ✅ React 19.1.0 with latest features
- ✅ TypeScript 5 with strict configuration
@ -274,6 +301,7 @@ git push -u origin main
- ✅ Internationalization setup
## Next Steps After Setup
1. Plan your first business domain feature
2. Implement your chosen database integration (Prisma, TypeORM, Mongoose, etc.)
3. Create your first feature following Feature-Based Architecture
@ -285,6 +313,7 @@ git push -u origin main
## Database Integration Examples
### For Prisma (PostgreSQL)
```bash
pnpm add prisma @prisma/client
pnpm add -D prisma
@ -292,6 +321,7 @@ npx prisma init
```
### For TypeORM (SQL databases)
```bash
pnpm add typeorm reflect-metadata
pnpm add pg # for PostgreSQL
@ -299,6 +329,7 @@ pnpm add pg # for PostgreSQL
```
### For Mongoose (MongoDB)
```bash
pnpm add mongoose
pnpm add -D @types/mongoose

View File

@ -1,9 +1,11 @@
# Setup Next.js Project
## Task Overview
Initialize a new Next.js project with TypeScript, Tailwind CSS, ESLint, and Prettier configuration.
## Prerequisites
- Node.js 18+ installed
- npm or yarn package manager
- Git for version control
@ -11,19 +13,23 @@ Initialize a new Next.js project with TypeScript, Tailwind CSS, ESLint, and Pret
## Steps
### 1. Create Next.js Project
```bash
npx create-next-app@latest {project_name} --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
cd {project_name}
```
### 2. Install Additional Dependencies
```bash
npm install --save-dev prettier prettier-plugin-tailwindcss @types/node
npm install lucide-react clsx tailwind-merge
```
### 3. Configure Prettier
Create `.prettierrc.json`:
```json
{
"semi": false,
@ -36,7 +42,9 @@ Create `.prettierrc.json`:
```
### 4. Update ESLint Configuration
Extend `.eslintrc.json`:
```json
{
"extends": ["next/core-web-vitals", "prettier"],
@ -48,7 +56,9 @@ Extend `.eslintrc.json`:
```
### 5. Configure TypeScript
Update `tsconfig.json` for strict mode:
```json
{
"compilerOptions": {
@ -61,7 +71,9 @@ Update `tsconfig.json` for strict mode:
```
### 6. Set up Scripts
Add to `package.json`:
```json
{
"scripts": {
@ -73,6 +85,7 @@ Add to `package.json`:
```
## Validation Checklist
- [ ] Next.js project created with TypeScript
- [ ] Tailwind CSS configured and working
- [ ] ESLint and Prettier configured
@ -81,6 +94,7 @@ Add to `package.json`:
- [ ] Project builds without errors
## Next Steps
- Set up folder structure
- Configure environment variables
- Create initial components

View File

@ -106,7 +106,7 @@ variables:
required: true
- name: schemaFields
type: textarea
description: Zod schema fields definition (e.g., name: z.string().min(2), email: z.string().email())
description: "Zod schema fields definition (e.g., name: z.string().min(2), email: z.string().email())"
required: true
- name: sortFields
type: string

View File

@ -85,4 +85,12 @@ tasks:
- name: test_suite
description: Comprehensive test suite for the feature
agents: [domain-architect, nextjs-architect, base-controller-specialist, typescript-specialist, api-developer, tailwind-designer]
agents:
[
domain-architect,
nextjs-architect,
base-controller-specialist,
typescript-specialist,
api-developer,
tailwind-designer,
]

View File

@ -53,4 +53,5 @@ tasks:
- name: documentation
description: Feature documentation and usage examples
agents: [nextjs-architect, typescript-specialist, tailwind-designer, api-developer, testing-engineer]
agents:
[nextjs-architect, typescript-specialist, tailwind-designer, api-developer, testing-engineer]

403
package-lock.json generated
View File

@ -16,7 +16,7 @@
"fs-extra": "^11.3.1",
"glob": "^11.0.3",
"ignore": "^7.0.5",
"inquirer": "^8.2.6",
"inquirer": "^10.2.2",
"js-yaml": "^4.1.0",
"ora": "^5.4.1",
"semver": "^7.7.2"
@ -887,20 +887,250 @@
"url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/@inquirer/external-editor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz",
"integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==",
"node_modules/@inquirer/checkbox": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz",
"integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==",
"license": "MIT",
"dependencies": {
"chardet": "^2.1.0",
"iconv-lite": "^0.6.3"
"@inquirer/core": "^9.1.0",
"@inquirer/figures": "^1.0.5",
"@inquirer/type": "^1.5.3",
"ansi-escapes": "^4.3.2",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/confirm": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz",
"integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3"
},
"peerDependencies": {
"@types/node": ">=18"
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/core": {
"version": "9.2.1",
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz",
"integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
"license": "MIT",
"dependencies": {
"@inquirer/figures": "^1.0.6",
"@inquirer/type": "^2.0.0",
"@types/mute-stream": "^0.0.4",
"@types/node": "^22.5.5",
"@types/wrap-ansi": "^3.0.0",
"ansi-escapes": "^4.3.2",
"cli-width": "^4.1.0",
"mute-stream": "^1.0.0",
"signal-exit": "^4.1.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^6.2.0",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/core/node_modules/@inquirer/type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz",
"integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
"license": "MIT",
"dependencies": {
"mute-stream": "^1.0.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/core/node_modules/@types/node": {
"version": "22.18.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz",
"integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/@inquirer/core/node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"license": "ISC",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@inquirer/core/node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
"node_modules/@inquirer/editor": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz",
"integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3",
"external-editor": "^3.1.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/expand": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz",
"integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/figures": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz",
"integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/input": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz",
"integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/number": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz",
"integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/password": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz",
"integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3",
"ansi-escapes": "^4.3.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/prompts": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.5.0.tgz",
"integrity": "sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==",
"license": "MIT",
"dependencies": {
"@inquirer/checkbox": "^2.5.0",
"@inquirer/confirm": "^3.2.0",
"@inquirer/editor": "^2.2.0",
"@inquirer/expand": "^2.3.0",
"@inquirer/input": "^2.3.0",
"@inquirer/number": "^1.1.0",
"@inquirer/password": "^2.2.0",
"@inquirer/rawlist": "^2.3.0",
"@inquirer/search": "^1.1.0",
"@inquirer/select": "^2.5.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/rawlist": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz",
"integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/type": "^1.5.3",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/search": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz",
"integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/figures": "^1.0.5",
"@inquirer/type": "^1.5.3",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/select": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz",
"integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==",
"license": "MIT",
"dependencies": {
"@inquirer/core": "^9.1.0",
"@inquirer/figures": "^1.0.5",
"@inquirer/type": "^1.5.3",
"ansi-escapes": "^4.3.2",
"yoctocolors-cjs": "^2.1.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@inquirer/type": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz",
"integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==",
"license": "MIT",
"dependencies": {
"mute-stream": "^1.0.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@isaacs/balanced-match": {
@ -2485,6 +2715,15 @@
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"license": "MIT"
},
"node_modules/@types/mute-stream": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
"integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/node": {
"version": "24.1.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
@ -2514,6 +2753,12 @@
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT"
},
"node_modules/@types/wrap-ansi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
"integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
"license": "MIT"
},
"node_modules/@types/yargs": {
"version": "17.0.33",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
@ -3335,9 +3580,9 @@
}
},
"node_modules/chardet": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz",
"integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==",
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"license": "MIT"
},
"node_modules/ci-info": {
@ -3579,12 +3824,12 @@
}
},
"node_modules/cli-width": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
"integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
"license": "ISC",
"engines": {
"node": ">= 10"
"node": ">= 12"
}
},
"node_modules/cliui": {
@ -4370,6 +4615,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
@ -4987,6 +5233,20 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
"tmp": "^0.0.33"
},
"engines": {
"node": ">=4"
}
},
"node_modules/fast-content-type-parse": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz",
@ -5062,21 +5322,6 @@
"bser": "2.1.1"
}
},
"node_modules/figures": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@ -5637,12 +5882,12 @@
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
@ -5808,29 +6053,22 @@
"license": "ISC"
},
"node_modules/inquirer": {
"version": "8.2.7",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz",
"integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==",
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-10.2.2.tgz",
"integrity": "sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg==",
"license": "MIT",
"dependencies": {
"@inquirer/external-editor": "^1.0.0",
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.1",
"cli-cursor": "^3.1.0",
"cli-width": "^3.0.0",
"figures": "^3.0.0",
"lodash": "^4.17.21",
"mute-stream": "0.0.8",
"ora": "^5.4.1",
"run-async": "^2.4.0",
"rxjs": "^7.5.5",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0",
"through": "^2.3.6",
"wrap-ansi": "^6.0.1"
"@inquirer/core": "^9.1.0",
"@inquirer/prompts": "^5.5.0",
"@inquirer/type": "^1.5.3",
"@types/mute-stream": "^0.0.4",
"ansi-escapes": "^4.3.2",
"mute-stream": "^1.0.0",
"run-async": "^3.0.0",
"rxjs": "^7.8.1"
},
"engines": {
"node": ">=12.0.0"
"node": ">=18"
}
},
"node_modules/into-stream": {
@ -7205,6 +7443,7 @@
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash-es": {
@ -8264,10 +8503,13 @@
"license": "MIT"
},
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"license": "ISC"
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
"integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/mz": {
"version": "2.7.0",
@ -11288,6 +11530,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/p-each-series": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz",
@ -12164,9 +12415,9 @@
"license": "MIT"
},
"node_modules/run-async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
"integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@ -13314,12 +13565,6 @@
"node": ">=0.8"
}
},
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"license": "MIT"
},
"node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@ -13428,6 +13673,18 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"license": "MIT",
"dependencies": {
"os-tmpdir": "~1.0.2"
},
"engines": {
"node": ">=0.6.0"
}
},
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@ -14179,6 +14436,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/yoctocolors-cjs": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",
"integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zwitch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",

View File

@ -79,7 +79,7 @@
"fs-extra": "^11.3.1",
"glob": "^11.0.3",
"ignore": "^7.0.5",
"inquirer": "^8.2.6",
"inquirer": "^10.2.2",
"js-yaml": "^4.1.0",
"ora": "^5.4.1",
"semver": "^7.7.2"

View File

@ -5,7 +5,7 @@ const path = require('node:path');
const fs = require('node:fs').promises;
const yaml = require('js-yaml');
const chalk = require('chalk').default || require('chalk');
const inquirer = require('inquirer').default || require('inquirer');
const inquirer = require('inquirer').default;
const semver = require('semver');
const https = require('node:https');

View File

@ -2,7 +2,7 @@ const path = require('node:path');
const fs = require('fs-extra');
const yaml = require('js-yaml');
const chalk = require('chalk');
const inquirer = require('inquirer');
const inquirer = require('inquirer').default;
const cjson = require('comment-json');
const fileManager = require('./file-manager');
const configLoader = require('./config-loader');
@ -2369,7 +2369,7 @@ tools: ['changes', 'codebase', 'fetch', 'findTestFiles', 'githubRepo', 'problems
async setupAuggieCLI(installDir, selectedAgent, spinner = null, preConfiguredSettings = null) {
const os = require('node:os');
const inquirer = require('inquirer');
const inquirer = require('inquirer').default;
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
// Get the IDE configuration to access location options

View File

@ -2,7 +2,7 @@ const path = require('node:path');
const fs = require('fs-extra');
const chalk = require('chalk');
const ora = require('ora');
const inquirer = require('inquirer');
const inquirer = require('inquirer').default;
const fileManager = require('./file-manager');
const configLoader = require('./config-loader');
const ideSetup = require('./ide-setup');
@ -1456,14 +1456,25 @@ class Installer {
// Also get existing agents in the expansion pack
const existingAgents = new Set();
const agentFiles = await resourceLocator.findFiles('agents/*.md', {
// Check for .md agents first
const agentFilesMd = await resourceLocator.findFiles('agents/*.md', {
cwd: expansionDotFolder,
});
for (const agentFile of agentFiles) {
for (const agentFile of agentFilesMd) {
const agentName = path.basename(agentFile, '.md');
existingAgents.add(agentName);
}
// Also check for .yaml agents
const agentFilesYaml = await resourceLocator.findFiles('agents/*.yaml', {
cwd: expansionDotFolder,
});
for (const agentFile of agentFilesYaml) {
const agentName = path.basename(agentFile, '.yaml');
existingAgents.add(agentName);
}
// Process each team file
for (const teamFile of teamFiles) {
const teamPath = path.join(expansionDotFolder, teamFile);