Skip to main content
Glama
README.md
# Hindsight

为 AI 编程助手提供持久化记忆的开源 MCP 服务器。

## 功能特性

- **持久化记忆**:记录对话内容,追踪文件变更,提取用户偏好与决策
- **自动画像生成**:根据交互数据构建用户画像,自动注入 AGENTS.md
- **上下文感知**:新的 AI 会话启动时即可获取你的编码风格和项目历史
- **多项目隔离**:每个项目独立存储记忆,同时支持全局用户偏好
- **文件监控**:自动追踪文件的创建、修改和删除操作

## 架构概览

```
┌──────────────────────────────────────────────────────┐
│                   MCP Server (std io)                │
│  ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│  │  index.ts    │ │  profiler.ts │ │ fileWatcher  │ │
│  │  (工具路由)   │ │  (画像生成)   │ │  (文件监控)  │ │
│  └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│         └────────────────┼────────────────┼─────────┘ │
│                    ┌─────▼─────┐          │
│                    │  store.ts │ ◄────────┘
│                    │ (SQLite)  │
│                    └─────┬─────┘
└──────────────────────────┼───────────────────────────┘
                           │
              ┌────────────▼────────────┐
              │  ~/.hindsight/hindsight.db │
              │  ~/.config/opencode/AGENTS.md │
              └─────────────────────────┘
```

### 核心模块

- **`src/index.ts`** — MCP 服务器入口,定义 19 个工具并处理请求路由
- **`src/store.ts`** — SQLite 存储层,管理对话、文件事件和记忆的 CRUD、搜索、批量写入、导出与清理
- **`src/profiler.ts`** — 画像生成器,从对话和文件事件中提取偏好、模式与决策
- **`src/fileWatcher.ts`** — 基于 chokidar 的文件监控,过滤构建目录和临时文件
- **`src/types.ts`** — TypeScript 类型定义(对话事件、文件事件、记忆、用户画像)

## 安装

```bash
npm install
npm run build
```

## 配置

将以下配置添加到 OpenCode 配置文件(`~/.config/opencode/opencode.json`):

```json
{
  "mcpServers": {
    "hindsight": {
      "command": "node",
      "args": ["path/to/hindsight/dist/index.js"]
    }
  }
}
```

## MCP 工具

| 工具名 | 说明 | 必需参数 |
|--------|------|----------|
| 工具名 | 说明 | 必需参数 |
|--------|------|----------|
| `record_conversation` | 记录用户与 AI 的对话内容 | `role`, `content` |
| `batch_record_conversations` | 批量记录多条对话内容 | `messages` |
| `start_file_watching` | 开始监控指定目录的文件变化 | `path` |
| `stop_file_watching` | 停止文件监控 | 无 |
| `get_user_context` | 获取当前用户画像和上下文 | 无 |
| `get_memories` | 查询已存储的记忆(支持类型过滤) | 无 |
| `get_memory_by_id` | 根据 ID 获取单条记忆详情 | `id` |
| `add_memory` | 手动添加一条记忆 | `type`, `content` |
| `update_memory` | 更新记忆的内容、置信度或类型 | `id` |
| `delete_memory` | 按 ID 删除指定记忆 | `id` |
| `search_memories` | 按关键词搜索记忆内容 | `query` |
| `get_recent_conversations` | 获取最近记录的对话内容 | 无 |
| `get_file_events` | 获取最近的文件变更事件 | 无 |
| `list_projects` | 列出所有有数据的项目及记录数量 | 无 |
| `refresh_profile` | 基于最新数据刷新用户画像 | 无 |
| `get_stats` | 获取数据库统计信息 | 无 |
| `export_data` | 导出全部数据为 JSON | 无 |
| `clear_old_data` | 清理指定天数之前的历史数据 | `olderThanDays` |
| `health_check` | 检查服务器运行状态 | 无 |

### 记忆类型

- **preference** — 用户偏好(如技术选型偏好、编码习惯)
- **pattern** — 编码模式(如常用的文件结构、设计模式)
- **decision** — 项目决策(架构选择、技术取舍)
- **context** — 上下文信息(当前活跃目录、文件类型分布)

## 工作原理

1. **记录交互**:捕获对话内容和文件变更事件
2. **提取模式**:通过关键词匹配识别用户偏好、决策和编码模式
3. **生成画像**:将提取的信息聚合为结构化用户画像,写入 AGENTS.md
4. **提供上下文**:AI 助手在启动时读取画像,获得完整的用户上下文

## 数据存储

- **数据库**:`~/.hindsight/hindsight.db`(SQLite,通过 sql.js 运行)
- **用户画像**:`~/.config/opencode/AGENTS.md`(HINDSIGHT 标记区间自动更新)
- **自动清理**:30 天前的记录自动删除,文件事件上限 10,000 条
- **自动保存**:数据库变更每 500ms 异步刷盘

## 开发

```bash
npm run dev      # 监听模式编译
npm run test     # 运行集成测试
```

## 许可证

MIT