{"owner":"altair-graphql","repo":"altair","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md - Altair GraphQL Client\n\n## Repository Overview\n\nAltair GraphQL Client is a monorepo managed with **pnpm** and **Nx/Turbo**. Key packages:\n\n- `packages/altair-app` - Angular-based frontend application\n- `packages/altair-api` - NestJS backend API\n- `packages/altair-core` - Shared business logic and types\n- `packages/altair-electron` - Electron desktop wrapper\n- `packages/altair-crx` - Browser extension\n\n## Build Commands\n\n### Root Level (monorepo)\n\n```bash\npnpm install              # Install all dependencies\npnpm bootstrap            # Build local packages and link them\npnpm build                # Build all packages\npnpm test                 # Run tests across monorepo\npnpm start:app            # Start web app (localhost:4200)\npnpm start:api:dev        # Start API dev server\npnpm build-ext            # Build browser extension\npnpm build-electron       # Build Electron app\n```\n\n### Altair App (packages/altair-app)\n\n```bash\npnpm vitest run                            # Run all Vitest tests\npnpm vitest                                # Watch mode\npnpm vitest run path/to/file.spec.ts       # Run single test file\npnpm vitest run -t \"name\"                  # Run tests matching name\npnpm test-single-run                       # Single run with coverage\npnpm lint                                  # Run ESLint (ng lint)\npnpm build                                 # Build the app\n```\n\n> **Note:** Always run from the `packages/altair-app` directory. The test suite has 135 suites / ~1133 tests and takes ~3–4 minutes.\n\n## Code Style\n\n### Imports\n\nGroup imports in this order:\n1. External libraries (rxjs, @angular/*)\n2. Internal packages (@altairgraphql/*)\n3. Relative imports (../, ./)\n\n### Angular Components\n\n- Use **OnPush change detection** strategy\n- Use **signal inputs** (`input<T>()`) and **signal outputs** (`output<T>()`)\n- Manage subscriptions (unsubscribe in ngOnDestroy)\n\n### Angular Services\n\n- Return **observables** from data methods\n- Use **selectors** for NgRx state access\n- Dispatch **actions** for state modifications\n\n## Testing Guidelines\n\n### What to Test\n- Component **business logic** and methods\n- **Event emissions** using `wrapper.emitted()`\n- **State management** and property changes\n- **Edge cases** (null values, rapid calls, invalid inputs)\n\n### What NOT to Test\n- UI library component props (ng-zorro, Angular Material)\n- Template rendering details or CSS styling\n\n### Test Pattern (altair-app)\n\n```typescript\nimport { mount } from '../testing';\nimport { ExampleComponent } from './example.component';\n\ndescribe('ExampleComponent', () => {\n  let wrapper: ReturnType<typeof mount>;\n\n  beforeEach(() => {\n    wrapper = mount(ExampleComponent, {\n      props: { initialValue: 'test' },\n      providers: [{ provide: SomeService, useValue: mockSomeService }]\n    });\n  });\n\n  it('should emit event when button is clicked', () => {\n    wrapper.componentInstance.onButtonClick();\n    expect(wrapper.emitted().buttonClicked[0]).toEqual(['test-data']);\n  });\n});\n```\n\n### Test Independence\n\nEach test should be independent. Avoid tracking emission indices across tests.\n\n## Common Issues\n\n- **\"no elements in sequence\"**: Use `take(1)` instead of `first()`\n- **Multiple actions, only one works**: Use `mergeMap` instead of `switchMap` in NgRx effects\n- **Tests failing**: Try deleting the `node_modules/.vite` cache directory\n\n## Additional Resources\n\n- Development setup: `.github/development.md`\n- Angular components: `.github/instructions/angular-components.instructions.md`\n- Angular services: `.github/instructions/angular-services.instructions.md`\n- Angular app testing: `.github/instructions/app-testing.instructions.md`\n- General testing: `.github/instructions/testing.instructions.md`\n- TypeScript: `.github/instructions/typescript.instructions.md`\n- NestJS API: `.github/instructions/nestjs-api.instructions.md`\n- JavaScript: `.github/instructions/javascript.instructions.md`\n- Documentation: `.github/instructions/documentation.instructions.md`\n"},"files":{"AGENTS.md":"# AGENTS.md - Altair GraphQL Client\n\n## Repository Overview\n\nAltair GraphQL Client is a monorepo managed with **pnpm** and **Nx/Turbo**. Key packages:\n\n- `packages/altair-app` - Angular-based frontend application\n- `packages/altair-api` - NestJS backend API\n- `packages/altair-core` - Shared business logic and types\n- `packages/altair-electron` - Electron desktop wrapper\n- `packages/altair-crx` - Browser extension\n\n## Build Commands\n\n### Root Level (monorepo)\n\n```bash\npnpm install              # Install all dependencies\npnpm bootstrap            # Build local packages and link them\npnpm build                # Build all packages\npnpm test                 # Run tests across monorepo\npnpm start:app            # Start web app (localhost:4200)\npnpm start:api:dev        # Start API dev server\npnpm build-ext            # Build browser extension\npnpm build-electron       # Build Electron app\n```\n\n### Altair App (packages/altair-app)\n\n```bash\npnpm vitest run                            # Run all Vitest tests\npnpm vitest                                # Watch mode\npnpm vitest run path/to/file.spec.ts       # Run single test file\npnpm vitest run -t \"name\"                  # Run tests matching name\npnpm test-single-run                       # Single run with coverage\npnpm lint                                  # Run ESLint (ng lint)\npnpm build                                 # Build the app\n```\n\n> **Note:** Always run from the `packages/altair-app` directory. The test suite has 135 suites / ~1133 tests and takes ~3–4 minutes.\n\n## Code Style\n\n### Imports\n\nGroup imports in this order:\n1. External libraries (rxjs, @angular/*)\n2. Internal packages (@altairgraphql/*)\n3. Relative imports (../, ./)\n\n### Angular Components\n\n- Use **OnPush change detection** strategy\n- Use **signal inputs** (`input<T>()`) and **signal outputs** (`output<T>()`)\n- Manage subscriptions (unsubscribe in ngOnDestroy)\n\n### Angular Services\n\n- Return **observables** from data methods\n- Use **selectors** for NgRx state access\n- Dispatch **actions** for state modifications\n\n## Testing Guidelines\n\n### What to Test\n- Component **business logic** and methods\n- **Event emissions** using `wrapper.emitted()`\n- **State management** and property changes\n- **Edge cases** (null values, rapid calls, invalid inputs)\n\n### What NOT to Test\n- UI library component props (ng-zorro, Angular Material)\n- Template rendering details or CSS styling\n\n### Test Pattern (altair-app)\n\n```typescript\nimport { mount } from '../testing';\nimport { ExampleComponent } from './example.component';\n\ndescribe('ExampleComponent', () => {\n  let wrapper: ReturnType<typeof mount>;\n\n  beforeEach(() => {\n    wrapper = mount(ExampleComponent, {\n      props: { initialValue: 'test' },\n      providers: [{ provide: SomeService, useValue: mockSomeService }]\n    });\n  });\n\n  it('should emit event when button is clicked', () => {\n    wrapper.componentInstance.onButtonClick();\n    expect(wrapper.emitted().buttonClicked[0]).toEqual(['test-data']);\n  });\n});\n```\n\n### Test Independence\n\nEach test should be independent. Avoid tracking emission indices across tests.\n\n## Common Issues\n\n- **\"no elements in sequence\"**: Use `take(1)` instead of `first()`\n- **Multiple actions, only one works**: Use `mergeMap` instead of `switchMap` in NgRx effects\n- **Tests failing**: Try deleting the `node_modules/.vite` cache directory\n\n## Additional Resources\n\n- Development setup: `.github/development.md`\n- Angular components: `.github/instructions/angular-components.instructions.md`\n- Angular services: `.github/instructions/angular-services.instructions.md`\n- Angular app testing: `.github/instructions/app-testing.instructions.md`\n- General testing: `.github/instructions/testing.instructions.md`\n- TypeScript: `.github/instructions/typescript.instructions.md`\n- NestJS API: `.github/instructions/nestjs-api.instructions.md`\n- JavaScript: `.github/instructions/javascript.instructions.md`\n- Documentation: `.github/instructions/documentation.instructions.md`\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md - Altair GraphQL Client\n\n## Repository Overview\n\nAltair GraphQL Client is a monorepo managed with **pnpm** and **Nx/Turbo**. Key packages:\n\n- `packages/altair-app` - Angular-based frontend application\n- `packages/altair-api` - NestJS backend API\n- `packages/altair-core` - Shared business logic and types\n- `packages/altair-electron` - Electron desktop wrapper\n- `packages/altair-crx` - Browser extension\n\n## Build Commands\n\n### Root Level (monorepo)\n\n```bash\npnpm install              # Install all dependencies\npnpm bootstrap            # Build local packages and link them\npnpm build                # Build all packages\npnpm test                 # Run tests across monorepo\npnpm start:app            # Start web app (localhost:4200)\npnpm start:api:dev        # Start API dev server\npnpm build-ext            # Build browser extension\npnpm build-electron       # Build Electron app\n```\n\n### Altair App (packages/altair-app)\n\n```bash\npnpm vitest run                            # Run all Vitest tests\npnpm vitest                                # Watch mode\npnpm vitest run path/to/file.spec.ts       # Run single test file\npnpm vitest run -t \"name\"                  # Run tests matching name\npnpm test-single-run                       # Single run with coverage\npnpm lint                                  # Run ESLint (ng lint)\npnpm build                                 # Build the app\n```\n\n> **Note:** Always run from the `packages/altair-app` directory. The test suite has 135 suites / ~1133 tests and takes ~3–4 minutes.\n\n## Code Style\n\n### Imports\n\nGroup imports in this order:\n1. External libraries (rxjs, @angular/*)\n2. Internal packages (@altairgraphql/*)\n3. Relative imports (../, ./)\n\n### Angular Components\n\n- Use **OnPush change detection** strategy\n- Use **signal inputs** (`input<T>()`) and **signal outputs** (`output<T>()`)\n- Manage subscriptions (unsubscribe in ngOnDestroy)\n\n### Angular Services\n\n- Return **observables** from data methods\n- Use **selectors** for NgRx state access\n- Dispatch **actions** for state modifications\n\n## Testing Guidelines\n\n### What to Test\n- Component **business logic** and methods\n- **Event emissions** using `wrapper.emitted()`\n- **State management** and property changes\n- **Edge cases** (null values, rapid calls, invalid inputs)\n\n### What NOT to Test\n- UI library component props (ng-zorro, Angular Material)\n- Template rendering details or CSS styling\n\n### Test Pattern (altair-app)\n\n```typescript\nimport { mount } from '../testing';\nimport { ExampleComponent } from './example.component';\n\ndescribe('ExampleComponent', () => {\n  let wrapper: ReturnType<typeof mount>;\n\n  beforeEach(() => {\n    wrapper = mount(ExampleComponent, {\n      props: { initialValue: 'test' },\n      providers: [{ provide: SomeService, useValue: mockSomeService }]\n    });\n  });\n\n  it('should emit event when button is clicked', () => {\n    wrapper.componentInstance.onButtonClick();\n    expect(wrapper.emitted().buttonClicked[0]).toEqual(['test-data']);\n  });\n});\n```\n\n### Test Independence\n\nEach test should be independent. Avoid tracking emission indices across tests.\n\n## Common Issues\n\n- **\"no elements in sequence\"**: Use `take(1)` instead of `first()`\n- **Multiple actions, only one works**: Use `mergeMap` instead of `switchMap` in NgRx effects\n- **Tests failing**: Try deleting the `node_modules/.vite` cache directory\n\n## Additional Resources\n\n- Development setup: `.github/development.md`\n- Angular components: `.github/instructions/angular-components.instructions.md`\n- Angular services: `.github/instructions/angular-services.instructions.md`\n- Angular app testing: `.github/instructions/app-testing.instructions.md`\n- General testing: `.github/instructions/testing.instructions.md`\n- TypeScript: `.github/instructions/typescript.instructions.md`\n- NestJS API: `.github/instructions/nestjs-api.instructions.md`\n- JavaScript: `.github/instructions/javascript.instructions.md`\n- Documentation: `.github/instructions/documentation.instructions.md`\n","category":"root","tokens":1001}]}