Files
alert-message-center/AGENTS.md

3.7 KiB

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.