5.0 KiB
5.0 KiB
Instructions for coding assistants
Project Overview
This is a dual-architecture project with two separate parts:
- Core Library (
src/) - Pure JavaScript/TypeScript AI agent library for browser DOM automation - Demo&docs Website (
pages/) - React documentation and landing page
Development Commands
Core Commands
npm start # Start React website development server
npm run build # Build both library AND website
npm run build:lib # Build pure JS library only (src/ → dist/lib/)
npm run build:lib:watch # Library development with auto-rebuild
npm run lint # ESLint with TypeScript strict rules
Architecture & Critical Patterns
Dual Build System
- Website build:
vite.config.ts→ React SPA with hash routing →dist/ - Library build:
vite.lib.config.ts→ UMD/ES modules →dist/lib/ - Entry points:
src/entry.ts(library),pages/main.tsx(website)
Module Boundaries (Critical)
- Core library (
src/): NEVER import frompages/- must remain pure JavaScript - Website (
pages/): CAN import fromsrc/via@/alias for demos - Import aliases:
@/→src/,@pages/→pages/
DOM Pipeline
- DOM Extraction: Convert live DOM to
FlatDomTreeviasrc/dom/dom_tree/ - Dehydration: DOM tree → simplified text for LLM processing
- LLM Processing: AI model returns action plans
- Indexed Operations: Map LLM responses back to specific DOM elements
Event Bus Communication
Use src/utils/bus.ts for decoupled PageAgent ↔ UI communication:
// Emit from PageAgent
getEventBus().emit('panel:show')
getEventBus().emit('panel:update', { status: 'thinking' })
// Listen in UI components
getEventBus().on('panel:show', () => panel.show())
Hash Routing Requirement
Uses wouter with useHashLocation for static hosting:
<Router hook={useHashLocation}> // Always hash-based routes
CDN Auto-Injection Pattern
Library auto-initializes when injected via script tag:
<script src="page-agent.js?model=gpt-4"></script>
Query params configure PageAgentConfig automatically in src/entry.ts.
File Organization
Core Library (src/)
entry.ts- CDN/UMD entry point with auto-initializationPageAgent.ts- Main AI agent class orchestrating DOM operationstools/- Agent tool implementations for web actionsui/- UI components (Panel, SimulatorMask) with CSS modulesutils/bus.ts- Type-safe event bus for decoupled communicationpatches/- Framework-specific optimizations (React, Antd compatibility)llms/- LLM integration and communication layerdom/- HTML serialization and page analysis utilitiesconfig/- Configuration constants and settings
Website (pages/)
main.tsx- Site entry with hash routing setuprouter.tsx- Manual route definitions (requires explicit registration)components/DocsLayout.tsx- Navigation structure (hardcoded nav items)docs/[section]/[topic]/page.tsx- Documentation pagestest-pages/- Library integration test pages
Adding New Features
New Documentation Page
- Create
pages/docs/<section>/<slug>/page.tsx - Add route to
pages/router.tsxwith<Header /> + <DocsLayout>wrapper - Add navigation item to
DocsLayout.tsx
New Agent Tool
- Implement under
src/tools/ - Export via
src/tools/index.ts - Wire into
PageAgent.tsif needed
New UI Component
- Create in
src/ui/with colocated CSS modules - Use event bus for PageAgent communication
- Test via
pages/test-pages/
Code Standards
TypeScript
- Explicit typing for exported/public APIs
- ESLint relaxes some unsafe rules for rapid iteration
CSS & Styling
- Prefer Tailwind CSS over custom CSS
- Custom CSS variables for theme gradients in
src/index.css - Dark mode support via
dark:classes - CSS modules for component-specific styles
Import Organization
- External libraries first
- Internal modules (
@/,@pages/) - Relative imports last
- Blank lines between groups
Critical Files to Understand
pages/router.tsx- Central routing definition (manual registration required)pages/components/DocsLayout.tsx- Navigation structuresrc/PageAgent.ts- Core AI agent class with DOM manipulationsrc/dom/dom_tree/index.js- DOM extraction enginesrc/utils/bus.ts- Type-safe event bus systemsrc/entry.ts- Library entry point for CDN usagevite.config.ts/vite.lib.config.ts- Dual build configuration
Debugging Common Issues
Blank Documentation Pages
- Verify route exists in
pages/router.tsx - Check component import path
- Verify CSS isn't hiding content (check dark mode classes)
- Test with minimal component first
Library Integration Issues
- Check
dist/lib/page-agent.umd.jsbuilds correctly - Test CDN injection with query params
- Verify event bus communications are properly typed
- Use
pages/test-pages/for isolated testing