# VoiceInput

macOS 菜单栏语音输入应用 —— 按住 Fn 键录音，AI 帮你处理。

## 功能

### 三种模式（双击 Control 切换）

| 模式 | 图标 | 功能 |
|------|------|------|
| **Input** 语音输入 | 🎤 | 语音转文字 + LLM 纠错 → 注入光标 |
| **Assist** AI 助手 | 💬 | 语音提问 → AI 回复（弹窗 + 可选朗读） |
| **Agent** 个人助手 | 🤖 | Better Siri — 多轮对话 + 记忆系统 + 工具调用 + 流式输出 |

### Agent 个人助手亮点

- 🧠 **记忆系统**：自动记住你的偏好、习惯、待办，跨对话持久化
- 🖥 **Mac 原生集成**：充分利用 osascript、系统命令等 macOS 能力
- 🎤⌨️ **统一弹窗**：语音/打字输入使用同一刘海界面，按 Fn 即弹出
- 📝 **语音自动发送**：说话内容自动填入输入框并发送（可关闭）
- 💬 **对话持久化**：对话自动保存，启动时恢复；token 计数跟踪
- 🔄 **自动新建对话**：token 超限时自动开启新对话（阈值可配）
- ⚙️ **可定制身份**：设置 AI 助手名字、语气、对你的称呼
- 🔧 **工具调用**：读写文件、执行命令、网络搜索等

### 其他亮点

- 🎤 **按住 Fn 说话**：全局监听，长按录音松开注入
- 📝 **流式识别**：Apple Speech Recognition 实时转录
- 🌐 **多语言**：简中 / 繁中 / English / 日本語 / 한국어
- 🪟 **刘海弹窗**：AI 回复在 DynamicNotch 弹窗展示，支持复制和继续对话
- 🔊 **语音朗读**：macOS 原生 TTS 朗读 AI 回复（Assist/Agent 可独立开关）
- 🎚 **实时波形**：5 条 RMS 驱动的球形波动画

## 系统要求

- macOS 14+
- 辅助功能权限（监听 Fn 键）
- 输入监控权限（Fn 键长按检测）
- 麦克风权限
- 语音识别权限

## 快速开始

```bash
make build   # 编译 + 生成 .app
make run     # 构建并启动
make dmg     # 生成分发包（自动清空 API Key）
```

首次运行需授权**辅助功能**和**输入监控**两个系统权限。

## 使用

1. 点击任意文本输入框
2. 双击 **Control** 切换到想要模式
3. 按住键盘左下角 **Fn / 🌐 键**
4. 说话，胶囊窗口显示实时转录
5. 松开 Fn → 文本注入（Input）/AI 回复弹窗（Assist/Agent）

点击菜单栏图标可切换语言、模式或配置 LLM。Agent 模式下可从菜单进入**助手设置**和**记忆管理**。

## 三种模式详解

### Input（语音输入）
语音转文字 → LLM 纠错（可选）→ 注入光标。适合日常输入。

### Assist（AI 助手）
语音提问 → LLM 回复。可选择**直接注入**或**刘海弹窗**展示。
弹窗模式下可开启**朗读**，AI 回复自动语音播报。

### Agent（个人助手 / Better Siri）
语音或打字输入 → 多轮对话 → 工具调用 → 流式输出。
Agent 被设计为**个人 Mac 助手**，会自动记住你的偏好、习惯和待办，
熟练使用 macOS 原生能力（如 osascript、系统命令）帮你完成任务。

**记忆系统**自动工作，跨对话持久化：
- 你说"记住明天下午3点开会"→ Agent 记下待办
- 你说"我不喜欢蓝色"→ Agent 记下偏好
- 你下次问"给我推荐一个壁纸"→ Agent 自动避开蓝色

内置 Node.js 运行时，无需额外安装。

## 配置

| 模块 | 配置方式 | 存储位置 |
|------|---------|---------|
| Input LLM | 菜单栏 `🎤 Input LLM` → Settings | UserDefaults |
| Assist LLM | 菜单栏 `💬 Assist LLM` → Settings | UserDefaults |
| Agent LLM + 助手设置 | 菜单栏 `🤖 Agent LLM` → Settings / `⚙️ 助手设置` | `~/Library/Application Support/VoiceInput/` |
| 记忆管理 | 菜单栏 `🧠 记忆管理` | `~/Library/Application Support/VoiceInput/memory/` |

Agent 支持多模型配置，在 Settings 中添加/编辑/删除。覆盖安装不会丢失配置。

## 构建

```bash
make build      # Debug 构建
make release    # Release 构建
make run        # 构建并启动
make install    # 安装到 /Applications
make dmg        # 签名 + 创建 DMG（自动清空 API Key）
make clean      # 清理
```

## 项目结构

```
Sources/
├── App/           # AppDelegate + 菜单栏控制器
├── Core/          # 按键监听、语音识别、LLM、Agent 桥接、弹窗管理
├── UI/            # 浮动窗口、波形、设置面板、Agent 弹窗、记忆管理窗口
└── Utils/         # 配置持久化

Agent/              # Node.js CLI（智能体运行时）
├── bin/node        # 内置 Node.js（arm64）
├── prompts/        # System prompt
├── src/            # bridge.js + 工具实现（记忆/身份/文件/命令/搜索等）
└── node_modules/   # npm 依赖
```

## 许可

MIT
