# Project Intake & PRD Agent

> SF-01 — Automated Requirement-to-PRD Pipeline

## Overview

The Project Intake Agent converts a **one-sentence requirement** into a **structured PRD** suitable for downstream consumption by other agents (design, development, testing).

It uses a domain-knowledge-driven approach: keyword matching against a curated domain base (12 domains), platform detection, and feature-aware template assembly.

## Quick Start

```bash
# Direct text input
node scripts/project-intake-agent.mjs --input "做一个宠物管理 App" --pretty

# From file
node scripts/project-intake-agent.mjs --input-file test/fixtures/project-intake/pet-management.json --pretty

# Output to file
node scripts/project-intake-agent.mjs --input "做一个电商小程序" --output prd-output.json
```

## Architecture

```
                 ┌─────────────────────────────┐
  One-Sentence   │   Project Intake Agent       │
  Requirement ──▶│                              │
                 │  1. Input Parser             │
                 │     - Platform detection     │
                 │     - Feature extraction      │
                 │     - Constraint hints        │
                 │                              │
                 │  2. Domain Matcher           │
                 │     - 12 domain KB            │
                 │     - Keyword match scoring   │
                 │     - Fallback to generic     │
                 │                              │
                 │  3. PRD Generator             │
                 │     - Persona templates       │
                 │     - Feature catalog         │
                 │     - Page blueprint          │
                 │     - API design              │
                 │     - User story assembly     │
                 │                              │
                 │  4. Task Decomposer           │
                 │     - Foundation phase        │
                 │     - UI + Backend tasks       │
                 │     - Integration + Testing    │
                 │     - Hour estimation          │
                 │                              │
                 └──────────┬──────────────────┘
                            ▼
                 ┌─────────────────────────────┐
                 │   Structured PRD (JSON)      │
                 │  - projectName, summary      │
                 │  - personas, userStories     │
                 │  - features (P0/P1/P2)       │
                 │  - pages (with routes)       │
                 │  - apiRequirements           │
                 │  - mvpScope + estimatedWeeks │
                 │  - techConstraints           │
                 │  - devTasks (with hours)     │
                 └─────────────────────────────┘
```

## Supported Domains

| Domain | Key | Triggers (examples) |
|--------|-----|---------------------|
| 🐱 宠物管理 | `pet` | 宠物, 猫, 狗, 动物, 领养 |
| 🛒 电商平台 | `ecommerce` | 电商, 商城, 购物, 订单, 小程序 |
| 📚 在线教育 | `education` | 教育, 课程, 学习, 培训, 题库 |
| 🏢 企业OA | `enterprise` | 企业, OA, 审批, 考勤, 部门 |
| 💪 健身打卡 | `fitness` | 健身, 运动, 打卡, 跑步, 训练 |
| 📝 笔记应用 | `note` | 笔记, 备忘录, 日记, 写作 |
| 👥 社交平台 | `social` | 社交, 社区, 朋友圈, 动态 |
| 🍔 美食应用 | `food` | 外卖, 点餐, 美食, 餐厅 |
| ✈️ 旅游应用 | `travel` | 旅游, 旅行, 酒店, 攻略 |
| 🔧 通用 | `generic` | 未匹配时降级 |

## PRD Output Schema

```json
{
  "projectName": "PetCare",
  "chineseName": "宠物管理",
  "domain": "pet",
  "matchConfidence": "high",
  "summary": "一款帮助宠物主人管理...",
  "personas": [
    {
      "name": "宠物主人",
      "description": "...",
      "painPoints": ["...", "..."]
    }
  ],
  "userStories": [
    {
      "id": "US-001",
      "as": "宠物主人",
      "want": "记录宠物的基本信息、品种、年龄、体重",
      "soThat": "解决痛点：忘记打疫苗时间",
      "priority": "P0"
    }
  ],
  "mvpScope": {
    "description": "MVP 聚焦 宠物档案、健康日程...",
    "features": ["宠物档案", "健康日程", "..."],
    "pages": ["首页", "宠物档案", "..."],
    "estimatedWeeks": 3
  },
  "features": [
    { "name": "宠物档案", "description": "...", "priority": "P0" }
  ],
  "pages": [
    { "name": "首页", "route": "/home", "description": "..." }
  ],
  "apiRequirements": [
    { "method": "POST", "path": "/api/pets", "description": "添加宠物档案" }
  ],
  "techConstraints": {
    "platforms": ["mobile", "web"],
    "recommendedStack": "React Native / Flutter（跨平台）",
    "considerations": ["...", "..."]
  },
  "extraFeatures": ["wechat-pay", "logistics-tracking"],
  "devTasks": [
    {
      "id": "T-001",
      "title": "项目脚手架搭建",
      "description": "...",
      "phase": "Foundation",
      "estimatedHours": 8,
      "priority": "P0"
    }
  ],
  "meta": {
    "generatedAt": "2026-06-05T00:00:00.000Z",
    "inputLength": 10,
    "domainMatchCount": 2
  }
}
```

## Feature Detection

The agent automatically detects special requirements from keywords:

| Keyword | Flag | Effect |
|---------|------|--------|
| 微信支付 | `wechat-pay` | Adds payment API, compliance notes |
| 支付宝 | `alipay` | Adds alipay integration notes |
| 物流/快递 | `logistics-tracking` | Adds logistics API endpoints |
| 推送/通知 | `push-notification` | Adds push service integration |
| AI/智能 | `ai-powered` | Adds AI service dependency note |
| 离线 | `offline-mode` | Adds offline sync strategy |
| 多语言/国际化 | `i18n` | Adds i18n integration note |
| 实时 | `real-time` | Adds WebSocket recommendation |
| iOS/Android/小程序/Web | Platform flags | Determines recommended stack |

## Platform Detection

| Input | Detected Platforms |
|-------|-------------------|
| (no mention) | `mobile`, `web` |
| iOS | `ios` |
| 安卓/Android | `android` |
| 小程序 | `miniapp`, `wechat-miniapp` |
| Web/网页 | `web` |
| 桌面/PC | `desktop` |

## Downstream Integration

The structured PRD JSON is designed for consumption by:

- **SF-02 (Architecture Agent)**: Reads `features`, `apiRequirements`, `techConstraints` → produces architecture
- **SF-03 (Design Agent)**: Reads `pages`, `personas` → produces UI wireframes
- **SF-04 (Dev Agent)**: Reads `devTasks` → scaffolds project
- **SF-05 (QA Agent)**: Reads `userStories`, `features` → generates test cases

## Test Coverage

58 tests across 15 suites:

| Suite | Tests |
|-------|-------|
| 1 — 宠物管理 App | 4 |
| 2 — 电商小程序 | 5 |
| 3 — 在线教育平台 | 3 |
| 4 — 企业 OA 系统 | 5 |
| 5 — 极简输入 | 2 |
| 6 — 健身打卡 + 平台偏好 | 4 |
| 7 — 空输入与错误处理 | 3 |
| 8 — 通用领域降级 | 2 |
| 9 — PRD 结构完整性 | 7 |
| 10 — 任务拆解 | 5 |
| 11 — File I/O | 3 |
| 12 — 领域匹配引擎 | 3 |
| 13 — 平台检测 | 3 |
| 14 — 额外特性检测 | 4 |
| 15 — CLI 端到端 | 5 |

Run with:

```bash
node --test test/project-intake-agent.test.mjs
```
