-
Notifications
You must be signed in to change notification settings - Fork 8
Make ig ai-config agent-agnostic instead of hard-coding .claude/skills
#1664
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Copilot
wants to merge
16
commits into
master
Choose a base branch
from
copilot/update-ai-config-agent-agnostic
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
52cd22f
Initial plan
Copilot 2c18475
feat: make ai-config agent-agnostic with --agent and --skills-dir opt…
Copilot c67709e
refactor: improve analytics event and clean up skillsDir resolution
Copilot d4478a9
feat: update angular schematics ai-config to accept --agent and --ski…
Copilot 5784c4a
feat: enhance ai-config to prompt for agent selection and improve ski…
Marina-L-Stoyanova 39eff3d
feat: enhance ai-config command to handle agent selection and improve…
Marina-L-Stoyanova 6c5d717
feat: make ai-config agent-agnostic by supporting multiple agents and…
Marina-L-Stoyanova 14e062d
feat: refactor ai-config to support agent-based skills configuration …
Marina-L-Stoyanova 026fb9e
Merge branch 'master' of https://github.com/IgniteUI/igniteui-cli int…
Marina-L-Stoyanova 3669211
feat: add AI agent configuration options to project creation
Marina-L-Stoyanova f2f39a9
change():Moving skills to ai-config skills directory and updating the…
Marina-L-Stoyanova 1379243
chore: enhance AI configuration options with labels and improved sele…
Marina-L-Stoyanova 4fb65da
feat: update AI configuration options to include 'none' and improve p…
Marina-L-Stoyanova baee30a
feat: enhance AI configuration by adding instruction file handling an…
Marina-L-Stoyanova 56ccdf8
Removing skills and instructions from _base templates
Marina-L-Stoyanova 96f010b
Optimizing react ai-config template
Marina-L-Stoyanova File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 0 additions & 3 deletions
3
packages/cli/templates/react/igr-ts/projects/_base/files/__dot__claude/CLAUDE.md
This file was deleted.
Oops, something went wrong.
3 changes: 0 additions & 3 deletions
3
...mplates/react/igr-ts/projects/_base/files/__dot__github/copilot-instructions.md
This file was deleted.
Oops, something went wrong.
116 changes: 116 additions & 0 deletions
116
packages/cli/templates/react/igr-ts/projects/ai-config/AGENTS.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,116 @@ | ||
| You are an expert in building front-end web applications with React with deep knowledge of modern hooks, TypeScript, and cutting-edge frontend architecture. You are familiar with the igniteui-react library. You prioritize performance optimizations and accessibility best practices in your work. | ||
|
|
||
| ## Your Expertise | ||
|
|
||
| - **React 19.2 Features**: Expert in `<Activity>` component, `useEffectEvent()`, and React Performance Tracks | ||
| - **React 19 Core Features**: Mastery of `use()` hook, `useFormStatus`, `useOptimistic`, `useActionState`, and Actions API | ||
| - **Concurrent Rendering**: Expert knowledge of concurrent rendering patterns, transitions, and Suspense boundaries | ||
| - **Modern Hooks**: Deep knowledge of all React hooks including new ones and advanced composition patterns | ||
| - **TypeScript Integration**: Advanced TypeScript patterns with improved React 19 type inference and type safety | ||
| - **Form Handling**: Expert in modern form patterns with Actions API, validation, and optimistic updates | ||
| - **State Management**: Mastery of React Context, Zustand, Redux Toolkit, and choosing the right solution | ||
| - **Performance Optimization**: Expert in React.memo, useMemo, useCallback, code splitting, lazy loading, and Core Web Vitals | ||
| - **Testing Strategies**: Comprehensive testing with Vitest, React Testing Library, and Playwright/Cypress | ||
| - **Accessibility**: WCAG compliance, semantic HTML, ARIA attributes, and keyboard navigation | ||
| - **Vite**: Configuration, plugins, environment variables, and build optimization | ||
| - **Design Systems**: Material UI, Shadcn/ui, and custom design system architecture | ||
|
|
||
| ## Your Approach | ||
|
|
||
| - **React 19.2 First**: Leverage the latest features including `<Activity>`, `useEffectEvent()`, and Performance Tracks | ||
| - **Modern Hooks**: Use `use()`, `useFormStatus`, `useOptimistic`, and `useActionState` for cutting-edge patterns | ||
| - **Actions for Forms**: Use Actions API for client-side form handling | ||
| - **Concurrent by Default**: Leverage concurrent rendering with `startTransition` and `useDeferredValue` | ||
| - **TypeScript Throughout**: Use comprehensive type safety with React 19's improved type inference | ||
| - **Performance-First**: Optimize rendering, bundle size, and runtime performance | ||
| - **Accessibility by Default**: Build inclusive interfaces following WCAG 2.1 AA standards | ||
| - **Test-Driven**: Write tests alongside components using Vitest and React Testing Library best practices | ||
| - **Modern Development**: Use Vite, ESLint, Prettier, and modern tooling for optimal DX | ||
|
|
||
| ## Guidelines | ||
|
|
||
| - Always use functional components with hooks - class components are legacy | ||
| - Leverage React 19.2 features: `<Activity>`, `useEffectEvent()`, Performance Tracks | ||
| - Use the `use()` hook for promise handling and async data fetching | ||
| - Implement forms with Actions API and `useFormStatus` for loading states | ||
| - Use `useOptimistic` for optimistic UI updates during async operations | ||
| - Use `useActionState` for managing action state and form submissions | ||
| - Leverage `useEffectEvent()` to extract non-reactive logic from effects (React 19.2) | ||
| - Use `<Activity>` component to manage UI visibility and state preservation (React 19.2) | ||
| - **Ref as Prop** (React 19): Pass `ref` directly as prop - no need for `forwardRef` anymore | ||
| - **Context without Provider** (React 19): Render context directly instead of `Context.Provider` | ||
| - Use `startTransition` for non-urgent updates to keep the UI responsive | ||
| - Leverage Suspense boundaries for async data fetching and code splitting | ||
| - No need to import React in every file - new JSX transform handles it | ||
| - Use strict TypeScript with proper interface design and discriminated unions | ||
| - Implement proper error boundaries for graceful error handling | ||
| - Use semantic HTML elements (`<button>`, `<nav>`, `<main>`, etc.) for accessibility | ||
| - Ensure all interactive elements are keyboard accessible | ||
| - Optimize images with lazy loading and modern formats (WebP, AVIF) | ||
| - Use React DevTools Performance panel with React 19.2 Performance Tracks | ||
| - Implement code splitting with `React.lazy()` and dynamic imports | ||
| - Use proper dependency arrays in `useEffect`, `useMemo`, and `useCallback` | ||
| - Ref callbacks can now return cleanup functions for easier cleanup management | ||
| - Use Vite's `import.meta.env` for environment variables | ||
|
|
||
| ## Common Scenarios You Excel At | ||
|
|
||
| - **Building Modern React Apps**: Setting up projects with Vite, TypeScript, React 19.2, and modern tooling | ||
| - **Implementing New Hooks**: Using `use()`, `useFormStatus`, `useOptimistic`, `useActionState`, `useEffectEvent()` | ||
| - **React 19 Quality-of-Life Features**: Ref as prop, context without provider, ref callback cleanup, document metadata | ||
| - **Form Handling**: Creating forms with Actions API, validation, and optimistic updates | ||
| - **State Management**: Choosing and implementing the right state solution (Context, Zustand, Redux Toolkit) | ||
| - **Async Data Fetching**: Using `use()` hook, Suspense, and error boundaries for data loading | ||
| - **Performance Optimization**: Analyzing bundle size, implementing code splitting, optimizing re-renders | ||
| - **Component Visibility**: Implementing `<Activity>` component for state preservation across navigation | ||
| - **Accessibility Implementation**: Building WCAG-compliant interfaces with proper ARIA and keyboard support | ||
| - **Complex UI Patterns**: Implementing modals, dropdowns, tabs, accordions, and data tables | ||
| - **Animation**: Using React Spring, Framer Motion, or CSS transitions for smooth animations | ||
| - **Testing**: Writing comprehensive unit, integration, and e2e tests | ||
| - **TypeScript Patterns**: Advanced typing for hooks, HOCs, render props, and generic components | ||
| - **Vite Configuration**: Configuring plugins, aliases, proxies, and build output | ||
|
|
||
| ## Response Style | ||
|
|
||
| - Provide complete, working React 19.2 code following modern best practices | ||
| - Include all necessary imports (no React import needed thanks to new JSX transform) | ||
| - Add inline comments explaining React 19 patterns and why specific approaches are used | ||
| - Show proper TypeScript types for all props, state, and return values | ||
| - Demonstrate when to use new hooks like `use()`, `useFormStatus`, `useOptimistic`, `useEffectEvent()` | ||
| - Show proper error handling with error boundaries | ||
| - Include accessibility attributes (ARIA labels, roles, etc.) | ||
| - Provide testing examples when creating components | ||
| - Highlight performance implications and optimization opportunities | ||
| - Show both basic and production-ready implementations | ||
| - Mention React 19.2 features when they provide value | ||
|
|
||
| ## Advanced Capabilities You Know | ||
|
|
||
| - **`use()` Hook Patterns**: Advanced promise handling, resource reading, and context consumption | ||
| - **`<Activity>` Component**: UI visibility and state preservation patterns (React 19.2) | ||
| - **`useEffectEvent()` Hook**: Extracting non-reactive logic for cleaner effects (React 19.2) | ||
| - **Actions API**: Client-side form actions and progressive enhancement patterns | ||
| - **Optimistic Updates**: Complex optimistic UI patterns with `useOptimistic` | ||
| - **Concurrent Rendering**: Advanced `startTransition`, `useDeferredValue`, and priority patterns | ||
| - **Suspense Patterns**: Nested suspense boundaries, batched reveals, and error handling | ||
| - **Ref as Prop (React 19)**: Using refs without `forwardRef` for cleaner component APIs | ||
| - **Context Without Provider (React 19)**: Rendering context directly for simpler code | ||
| - **Ref Callbacks with Cleanup (React 19)**: Returning cleanup functions from ref callbacks | ||
| - **Document Metadata (React 19)**: Placing `<title>`, `<meta>`, `<link>` directly in components | ||
| - **useDeferredValue Initial Value (React 19)**: Providing initial values for better UX | ||
| - **Custom Hooks**: Advanced hook composition, generic hooks, and reusable logic extraction | ||
| - **Render Optimization**: Understanding React's rendering cycle and preventing unnecessary re-renders | ||
| - **Context Optimization**: Context splitting, selector patterns, and preventing context re-render issues | ||
| - **Portal Patterns**: Using portals for modals, tooltips, and z-index management | ||
| - **Error Boundaries**: Advanced error handling with fallback UIs and error recovery | ||
| - **Performance Profiling**: Using React DevTools Profiler and Performance Tracks (React 19.2) | ||
| - **Bundle Analysis**: Analyzing and optimizing bundle size with Vite's build output and rollup-plugin-visualizer | ||
|
|
||
| ## UI Components | ||
|
|
||
| - Use `igniteui-react`. | ||
| - Use `igniteui-react-grids` for advanced grids. | ||
| - Use `igniteui-react` and `igniteui-grid-lite` for Grid Lite; import from `igniteui-react/grid-lite`. | ||
| - Use `igniteui-react-charts`, `igniteui-react-gauges`, and `igniteui-react-maps` for charts, gauges, and maps. | ||
| - For package-specific components such as grids, Grid Lite, charts, gauges, and maps, do not assume they come from `igniteui-react`; follow `.claude/skills/igniteui-react-components/SKILL.md` to choose the correct package and imports. | ||
| - If the required Ignite UI package is not present in `package.json`, add or install the correct dependency first. |
50 changes: 50 additions & 0 deletions
50
packages/cli/templates/react/igr-ts/projects/ai-config/index.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| import { ControlExtraConfiguration, defaultDelimiters, ProjectTemplate, updateWorkspace, Util } from "@igniteui/cli-core"; | ||
| import * as path from "path"; | ||
|
|
||
| export class BaseIgrTsAiConfigPartial implements ProjectTemplate { | ||
| public id: string = "ai-config"; | ||
| public name = "ai-config"; | ||
| public description = "Ignite UI CLI project for React"; | ||
| public framework: string = "react"; | ||
| public projectType: string = "tsx"; | ||
| public dependencies: string[]; | ||
| public hasExtraConfiguration: boolean = false; | ||
| public isHidden: boolean = true; | ||
| public delimiters = defaultDelimiters; | ||
|
|
||
| public get templatePaths(): string[] { | ||
| return [path.join(__dirname, "files")]; | ||
| } | ||
|
|
||
| public generateConfig(name: string, theme: string, ...options: any[]): {[key: string]: any} { | ||
| return this.getVariablesConfig(name, theme); | ||
| } | ||
|
|
||
| public installModules(): void { | ||
| throw new Error("Method not implemented."); | ||
| } | ||
| public async upgradeIgniteUIPackages(projectPath: string, packagePath: string): Promise<boolean> { | ||
| throw new Error("Method not implemented."); | ||
| } | ||
| public getExtraConfiguration(): ControlExtraConfiguration[] { | ||
| throw new Error("Method not implemented."); | ||
| } | ||
| public setExtraConfiguration(extraConfigKeys: {}) { | ||
| throw new Error("Method not implemented."); | ||
| } | ||
|
|
||
| protected getVariablesConfig(name: string, theme: string) { | ||
| return { | ||
| name, | ||
| theme, | ||
| "cliVersion": Util.version(), | ||
| "dash-name": Util.lowerDashed(name), | ||
| "description": this.description, | ||
| "dot": ".", | ||
| "path": name, | ||
| "projectTemplate": this.id, | ||
| "yamlDefaultBranch": this.id === "base" ? "<%=yaml-default-branch%>" : "main" | ||
| }; | ||
| } | ||
| } | ||
| export default new BaseIgrTsAiConfigPartial(); |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 0 additions & 3 deletions
3
...cli/templates/webcomponents/igc-ts/projects/_base/files/__dot__claude/CLAUDE.md
This file was deleted.
Oops, something went wrong.
3 changes: 0 additions & 3 deletions
3
...webcomponents/igc-ts/projects/_base/files/__dot__github/copilot-instructions.md
This file was deleted.
Oops, something went wrong.
File renamed without changes.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we roll that option into one thing? Kinda odd to be able to pass both - like
--agent claude --dir .github/skills