# Feishu Channel Adapter Checklist

**Date:** 2026-02-16  
**Scope:** Implement Feishu/Lark adapter as the second item in the LINE/Feishu/Zalo channel gap set.

## Goal

Add a Feishu channel adapter with webhook ingress, outbound send path, mention/allowlist gating, and runtime wiring through daemon + gateway.

## Implemented

- Added Feishu adapter:
  - `src/channels/feishu/adapter.ts`
  - `src/channels/feishu/index.ts`
- Inbound webhook handling:
  - endpoint: `POST /feishu/events`
  - supports Feishu URL verification challenge flow.
  - validates `header.token` when `webhook_token` is configured.
- Message normalization:
  - handles `im.message.receive_v1` text messages.
  - parses `message.content` JSON `{ "text": "..." }`.
  - emits normalized `InboundMessage` with `metadata.replyPeerId`.
- Outbound messaging:
  - obtains tenant access token via internal app credentials.
  - sends text messages via Feishu IM v1 messages API.
- Gating:
  - optional chat allowlist (`allowed_chat_ids`).
  - mention policy (`require_mention`, `mention_name`) with DM bypass.
- Runtime integration:
  - config schema + defaults for `feishu`.
  - daemon registration and gateway handler binding.
  - gateway route wiring + services discovery visibility.

## Tests

- `src/channels/feishu/adapter.test.ts`
  - name/status
  - outbound token + send path
  - url verification handling
  - inbound event normalization
  - webhook token enforcement
- `src/daemon/channels.test.ts`
  - adapter registration + gateway `setFeishuHandler` binding
- `src/config/schema.test.ts`
  - feishu config parsing/defaults
- `src/gateway/handlers/services.test.ts`
  - `feishu` service presence

## Validation Run

```bash
pnpm test:run src/channels/feishu/adapter.test.ts src/daemon/channels.test.ts src/config/schema.test.ts src/gateway/handlers/services.test.ts
pnpm typecheck
pnpm build
```
