Files
alert-message-center/AGENTS.md

84 lines
3.7 KiB
Markdown

# Agent Guide for Alert Message Center
This document provides instructions for AI agents working on the Alert Message Center codebase.
## 🛠 Commands
### Workspace Operations
- **Install**: `bun install`
- **Root Dev**: `bun run dev` (starts both server and web)
- **Root Build**: `bun run build`
- **Lint & Format**:
- `bun run lint`: Run Biome linter
- `bun run format`: Fix formatting issues
- `bun run check`: Linter + Formatter fix
### Backend (`apps/server`)
- **Dev**: `bun run dev`
- **Migrations**:
- `bun run db:generate`: Generate migration files
- `bun run db:push`: Push schema changes directly (dev only)
- `bun run db:migrate:deploy`: Run migrations in production/Docker
- **Verification**: `bun run src/verify_permissions.ts` (Manual verification script)
### Frontend (`apps/web`)
- **Dev**: `bun run dev`
- **Build**: `bun run build`
### Testing
- No automated tests currently exist in the repository. If adding tests, use **Bun Test**.
- **Run Single Test**: `bun test path/to/file.test.ts`
---
## 📜 Code Style & Conventions
### 1. General
- **Runtime**: Bun is the primary runtime. Use `node:` protocol for built-in modules (e.g., `import fs from "node:fs"`).
- **Formatting**: Enforced by Biome. Use **tabs** for indentation and **double quotes**.
- **Naming**:
- Variables/Functions: `camelCase`
- Components/Classes/Interfaces: `PascalCase`
- Database Tables/Columns: `snake_case` (e.g., `topic_group_chats`)
- URL Slugs: `kebab-case`
### 2. TypeScript & Type Safety
- **Strict Mode**: No `any` allowed. Use explicit interfaces or Zod schemas.
- **Interfaces vs Types**: Prefer `interface` for object definitions and `type` for unions/aliases.
- **RPC**: Use `hono/client` for type-safe communication between frontend and backend.
- **Vite Env**: Always use optional chaining when accessing `import.meta.env?.VITE_...`.
### 3. Backend (Hono + Drizzle)
- **Routing**: Group logic into sub-apps (e.g., `api.ts`, `auth.ts`, `webhook.ts`).
- **Database**: Use Drizzle ORM. Prefer relational queries where possible (`db.query.xxx.findMany`).
- **Validation**: Use `@hono/zod-validator` for request validation.
- **Logging**: Use the structured logger in `src/lib/logger.ts` (Pino).
- **Pattern**: `logger.error({ err, context }, "Message")`.
### 4. Frontend (React + Tailwind)
- **Components**: Functional components with hooks.
- **Styling**: Tailwind CSS utility classes. Avoid custom CSS files.
- **Icons**: Use `lucide-react`.
- **Resilience**:
- Always check `res.ok` before parsing API responses.
- Provide fallback states (e.g., `[]`) for data fetching.
### 5. Error Handling
- **Backend**: Wrap critical logic in `try/catch`. Log errors with context. Return meaningful JSON errors with appropriate HTTP status codes.
- **Frontend**: Use `useState` to track error states and display user-friendly messages.
---
## 🏗 Architecture Context
- **Topic Model**: Alerts are sent to "Topics". Users and Group Chats subscribe to Topics.
- **Personal Inbox**: Each user has a `personalToken` (8-character hex) for direct `/dm` alerts.
- **Feishu Integration**: Uses `@larksuiteoapi/node-sdk`. Supports both Webhook and WebSocket modes for events.
- **Auth**: Feishu SSO (OAuth2). Admin status is assigned via `ADMIN_EMAILS` env var on first login.
## 🤖 Rules for Agents
- **NO `any`**: This is a hard requirement. Research types or define them.
- **Biome First**: Always run `bun run check` before concluding a task.
- **Preserve Patterns**: Follow existing structure in `apps/server/src` and `apps/web/src`.
- **Minimalism**: Fix bugs minimally. Avoid large refactors unless requested.
- **Context**: Agent-specific context is located in `@docs/`. Refer to `docs/copilot-context.md` for additional instructions.