# AGENTS.md This file provides guidance to AI coding agents when working with code in this repository. ## Essential Documentation **Primary Reference**: [My Jetpack README.md](./README.md) - Complete architecture, development commands, and project structure **Additional Resources**: - [Data Layer Documentation](./_inc/data/README.md) - API hooks and data management - [Automated Testing Overview](../../../docs/automated-testing.md) - Testing patterns and strategies - [Coding Standards & Guidelines](../../../docs/coding-guidelines.md) - Development best practices - [Jetpack HTTP API Documentation](../../../docs/rest-api.md) - REST API patterns - [Jetpack CLI Documentation](../../../tools/cli/README.md) - CLI commands and workflows ## Project Overview My Jetpack is a centralized WordPress admin page providing a unified interface for managing Jetpack products and services. Key architectural components: - **PHP Backend**: Product management system, REST API endpoints (`jetpack/v4/my-jetpack` namespace) - **React Frontend**: TypeScript application with React Router and TanStack React Query for data management - **Product System**: Standardized `Product` class interface with status constants for lifecycle management ## Code Patterns & Examples ### PHP Patterns #### Product Class Structure ```php is_plugin_installed() ) { return self::STATUS_PLUGIN_ABSENT; } if ( ! $this->is_active() ) { return self::STATUS_INACTIVE; } return self::STATUS_ACTIVE; } // Optional: provide management URL public static function get_manage_url() { return admin_url( 'admin.php?page=my-product' ); } // Override as needed: pricing, features, etc. } ``` #### REST API Endpoint Pattern For comprehensive REST API documentation and patterns, see [Jetpack HTTP API Documentation](../../../docs/rest-api.md). My Jetpack endpoints follow the standard pattern: - **Namespace**: `jetpack/v4/my-jetpack` - **Base**: Extend `WP_REST_Controller` - **Registration**: Via `Initializer::register_rest_endpoints()` #### Product Status Constants ```php // Status constants are defined in class-products.php // Use Products::STATUS_* constants instead of magic strings // Common patterns: active, inactive, needs_plan, plugin_absent, etc. // Check class-products.php for current complete list ``` ### React Patterns #### Component Structure ```jsx import { useState, useEffect } from 'react'; import { __ } from '@wordpress/i18n'; import { useConnection } from '@automattic/jetpack-connection'; import styles from './style.module.scss'; const MyComponent = ({ productSlug, onAction }) => { const [isLoading, setIsLoading] = useState(false); const { isRegistered, isUserConnected } = useConnection(); const handleAction = async () => { setIsLoading(true); try { await onAction(); } finally { setIsLoading(false); } }; return (

{__('My Component', 'jetpack-my-jetpack')}

); }; export default MyComponent; ``` #### Product Component Pattern ```jsx import { useProduct } from '../hooks/use-product'; const ProductCard = ({ slug }) => { const { product, isLoading, error, activate, deactivate } = useProduct(slug); if (isLoading) return ; if (error) return ; return (

{product.title}

{product.description}

); }; ``` ## Development Quick Reference ### Key Technologies Check [package.json](./package.json) for current versions: - **React** with TypeScript - **Data Management**: @tanstack/react-query for server state - **Routing**: react-router - **Charts**: @automattic/charts (workspace package) for data visualization - **Styling**: Sass modules with CSS Modules - **Testing**: Jest with React Testing Library ### TanStack Query Integration **Base Hook**: `useSimpleQuery` - Wrapper around TanStack Query for common patterns ### Styling Architecture **Sass Modules**: `.module.scss` files with CSS Modules **Base Styles**: `@automattic/jetpack-base-styles` for common patterns **Naming Convention**: BEM methodology in SCSS modules **Key Style Files**: - `_inc/style.module.scss`: Main application styles - Component-specific: `component-name/style.module.scss` ### GitHub CLI for PR Management When working with pull requests (e.g., #44191), use the GitHub CLI for efficient review and management: ```bash gh pr view 44191 # View PR details and description gh pr view 44191 --comments # View PR with all comments gh pr diff 44191 # View the diff/changes ``` ### Testing & Integration **Testing**: PHPUnit for PHP, Jest + React Testing Library for JavaScript **Integration**: WordPress.com connection via `@automattic/jetpack-connection`, licensing via `@automattic/jetpack-licensing` **Workflows**: See [README.md](./README.md) for adding products, API development, and feature implementation