Files
archived-ai/AGENTS.md

148 lines
5.5 KiB
Markdown

# AGENTS.md
This file provides guidance to AI agents when working with code in this repository.
## Project Overview
This is the Symfony AI monorepo containing multiple components and bundles that integrate AI capabilities into PHP applications. The project is organized as a collection of independent packages under the `src/` directory, each with their own composer.json, tests, and dependencies.
## Architecture
### Core Components
- **Platform** (`src/platform/`): Unified interface to AI platforms (OpenAI, Anthropic, Azure, Gemini, VertexAI, etc.)
- **Agent** (`src/agent/`): Framework for building AI agents that interact with users and perform tasks
- **Chat** (`src/chat/`): Chat interface components for building conversational AI applications
- **Store** (`src/store/`): Data storage abstraction with indexing and retrieval for vector databases
- **Mate** (`src/mate/`): AI-powered coding assistant for PHP development
### Bridges
Each core component has bridges in `src/<component>/src/Bridge/` that provide integrations with specific third-party services. Bridges are dedicated Composer packages with their own dependencies and can be installed independently.
### Integration Bundles
- **AI Bundle** (`src/ai-bundle/`): Symfony integration for Platform, Store, and Agent components
- **MCP Bundle** (`src/mcp-bundle/`): Symfony integration for official MCP SDK
### Supporting Directories
- **Examples** (`examples/`): Standalone examples demonstrating component usage across different AI platforms
- **Demo** (`demo/`): Full Symfony web application showcasing components working together
- **Fixtures** (`fixtures/`): Shared test fixtures for multi-modal testing (images, audio, PDFs)
## Development Commands
### Testing
Each component has its own test suite. Run tests for specific components:
```bash
# Platform component
cd src/platform && vendor/bin/phpunit
# Agent component
cd src/agent && vendor/bin/phpunit
# AI Bundle
cd src/ai-bundle && vendor/bin/phpunit
# Demo application
cd demo && vendor/bin/phpunit
```
### Code Quality
The project uses PHP CS Fixer with Symfony coding standards. Always run from the repository root:
```bash
# Fix code style issues
vendor/bin/php-cs-fixer fix
# Fix specific directories
vendor/bin/php-cs-fixer fix src/platform/
```
Static analysis with PHPStan (component-specific):
```bash
cd src/platform && vendor/bin/phpstan analyse
```
### Development Linking
Use the `./link` script to symlink local development versions:
```bash
# Link components to external project
./link /path/to/project
# Copy instead of symlink
./link --copy /path/to/project
# Rollback changes
./link --rollback /path/to/project
```
### Running Examples
Examples are self-contained and can be run individually:
```bash
cd examples
php anthropic/chat.php
php openai/function-calling.php
```
Many examples require environment variables (see `.env` files in example directories).
### Demo Application
The demo is a full Symfony application:
```bash
cd demo
composer install
symfony server:start
```
## Component Dependencies
Components are designed to work independently but have these relationships:
- Agent depends on Platform for AI communication
- AI Bundle integrates Platform, Agent, and Store
- MCP Bundle provides official MCP SDK integration
- Store is standalone but often used with Agent for RAG applications
## Testing Architecture
Each component uses:
- **PHPUnit 11+** for testing framework
- Component-specific `phpunit.xml.dist` configurations
- Shared fixtures in `/fixtures` for multi-modal content
- MockHttpClient pattern preferred over response mocking
## Development Notes
- Each component in `src/` is a separate Composer package with its own dependencies
- Components follow Symfony coding standards and use `@Symfony` PHP CS Fixer rules
- The monorepo structure allows independent versioning while maintaining shared development workflow
- Do not use void return type for testcase methods
- Always run PHP-CS-Fixer to ensure proper code style
- Always add a newline at the end of the file
- Prefer $this->assert* over self::assert* in tests
- Never add Claude as co-author in the commits
- Add @author tags to newly introduced classes by the user
- Prefer classic if statements over short-circuit evaluation when possible
- Define array shapes for parameters and return types
- Use project specific exceptions instead of global exception classes like \RuntimeException, \InvalidArgumentException etc.
- NEVER mention Claude as co-author in commits
- Avoid using the `empty()` function; prefer explicit checks like `[] === $array`, `'' === $string`, or `null === $value`
## Version Documentation
### UPGRADE.md
- Document breaking changes in the root `UPGRADE.md` file
- Format: Use version headers like `UPGRADE FROM 0.X to 0.Y` with sections per component
- Include code examples showing before/after changes with diff syntax
### CHANGELOG.md
- Each component has its own `CHANGELOG.md` in its root directory
- Add entries for new features, and deprecations under the appropriate version heading
- Format entries as bullet points starting with "Add", "Fix", "Deprecate", etc.
### Pull Requests
- Always use the PR template from `.github/PULL_REQUEST_TEMPLATE.md`
- Fill in the table at the top of the PR description with appropriate values:
- Bug fix?: yes/no
- New feature?: yes/no (update CHANGELOG.md files for new features)
- Docs?: yes/no (required for new features)
- Issues: Fix #... (prefix each issue number with "Fix #")
- License: MIT
- Provide a clear description of the changes below the table