# 个人规则功能需求文档（方案 A：本地 `.md` 注入）

## 1. 文档目标

在不改动现有核心对话模式的前提下，实现“个人规则（Personal Rules）”能力：  
用户可在插件内维护个人规则文本，插件保存到本地 `.md` 文件；每次发起对话时自动读取并随请求传递给后端，由后端注入模型上下文，影响回答风格与行为。

## 2. 范围定义

### 2.1 本期范围（MVP）

1. 支持用户编辑、保存、启用/停用个人规则。
2. 本地落盘为 `.md` 文件。
3. 发消息时自动加载规则并传给后端。
4. 后端接收结构化字段并注入提示词。
5. 基础异常处理和可观测提示。

### 2.2 非本期范围

1. 云端同步、多设备同步。
2. 规则版本历史/回滚。
3. 多规则集合管理（仅单份个人规则文本）。
4. 团队共享规则。

## 3. 术语与核心概念

1. `Personal Rules`：用户个人偏好与约束文本。
2. `Rules File`：本地规则文件，Markdown 格式。
3. `Rules Enabled`：规则开关；关闭时不注入。
4. `Rules Injection`：请求时将规则传后端并参与模型上下文构建。

## 4. 用户故事

1. 作为用户，我希望在插件里写下“回答风格、代码习惯、语言偏好”等个人规则。
2. 作为用户，我希望规则保存在本地可见文件中。
3. 作为用户，我希望发消息时自动生效，无需每次重复输入。
4. 作为用户，我希望可以一键关闭规则，临时不生效。

## 5. 功能需求（前端/Webview + 扩展端）

### 5.1 规则管理界面

1. 提供“个人规则”入口。
2. 提供多行编辑框（显示当前规则内容）。
3. 提供“保存”按钮。
4. 提供“启用/停用”开关。
5. 显示当前状态：
6. 规则是否启用。
7. 规则字数/长度。
8. 最近保存时间（可选）。

### 5.2 本地文件存储

1. 规则内容保存到本地 `.md`。
2. 推荐文件名：`personal-rules.md`。
3. 推荐路径（优先）：插件全局存储目录下固定子路径。
4. 文件不存在时可自动创建。
5. 用户可通过“打开规则文件”查看（可选）。

### 5.3 对话发送前处理

1. 用户点击发送消息。
2. 扩展端检查规则开关：
3. 关闭：不读取规则，不传后端。
4. 开启：读取 `.md` 内容。
5. 读取成功且非空时，将规则文本附加到对话请求结构化字段。
6. 读取失败时：提示告警，但不阻断正常对话。

### 5.4 限制与防护

1. 规则长度上限（例如 4000 字符，可配置）。
2. 超限时保存被拒绝，提示用户缩短。
3. 空白内容视为“无规则”。
4. 不允许二进制或非文本写入。

## 6. 功能需求（后端）

### 6.1 请求协议扩展

在现有对话请求结构中增加字段：

1. `personalRules`：字符串，可选。
2. `rulesEnabled`：布尔，可选（便于追踪）。
3. `rulesMeta`：可选元信息（长度、来源）。

### 6.2 注入策略

1. 后端收到 `personalRules` 后，将其注入系统提示层（而非用户消息层）。
2. 注入顺序建议：
3. 系统安全与平台策略。
4. 产品默认系统提示。
5. 用户个人规则。
6. 用户输入。
7. 若 `personalRules` 为空或开关关闭，则跳过注入。

### 6.3 风险控制

1. 规则文本不允许覆盖平台安全策略。
2. 记录本次是否注入规则（日志字段即可）。
3. 异常不应导致整次对话失败（可降级为无规则对话）。

## 7. 前后端对接设计

### 7.1 消息链路

1. Webview 触发 `sendMessage`。
2. 扩展端 `messageHandler` 统一处理发送。
3. `messageHandler` 在调用 `dialogService.sendMessage` 前读取个人规则。
4. `dialogService` 组装 `DialogRequest`，带上 `personalRules`。
5. `sseHandler` 发起流式请求。
6. 后端注入规则后进入模型推理。
7. 正常走现有 SSE 回传流程。

### 7.2 职责边界

1. Webview：展示与编辑，不直接拼接最终请求。
2. 扩展端：规则文件读写、开关状态管理、请求组装。
3. 后端：规则注入、优先级控制、审计日志。

## 8. 数据与状态设计

### 8.1 本地文件

1. 文件格式：Markdown 纯文本。
2. 内容约定：无强制模板，允许自由文本。
3. 编码：UTF-8。

### 8.2 本地配置状态

1. `personalRulesEnabled`：是否启用。
2. `personalRulesPath`：规则文件路径（可固定也可配置）。
3. `lastSavedAt`：最近保存时间（可选）。

## 9. 异常与降级

1. 文件不存在：自动创建空文件，视为无规则。
2. 文件读取失败：弹出提示，继续无规则发送。
3. 文件写入失败：保存失败提示，不更新状态。
4. 后端字段不识别：请求兼容，后端忽略新字段。
5. 后端注入失败：降级为普通对话，记录日志。

## 10. 安全与合规要求

1. 个人规则属于用户本地数据，不主动上传除非发起对话。
2. 日志中避免完整打印规则正文（最多打印长度和哈希）。
3. 后端注入时必须确保平台安全策略优先级更高。

## 11. 验收标准（UAT）

1. 用户保存规则后，本地存在 `personal-rules.md` 且内容一致。
2. 开启规则发送消息时，请求中可观测到 `personalRules` 字段。
3. 关闭规则发送消息时，请求中不含该字段或为空。
4. 规则文件损坏/读取失败时，不影响正常聊天。
5. 超过长度上限时，前端保存被拒绝且提示明确。
6. 后端日志可确认“本次是否注入个人规则”。

## 12. 迭代建议（下一阶段）

1. 规则模板（代码风格、语言风格、测试偏好）。
2. 项目规则与个人规则合并策略。
3. 云端同步（按 `userId`），多端一致。
