docs: 更新 AGENTS.md 和 README.md,反映 Better Siri 改造
AGENTS.md: - 新增记忆系统、对话持久化、新建对话、弹窗统一等架构说明 - 更新项目结构(MemoryWindow.swift、recall/remember/set_identity.js) - 新增配置项速查表(助手名字/语气/阈值/自动发送等) - 新增注意事项 8-10(消息顺序、弹窗状态、去重) - 更新录音调度流程(Agent 走 handleTextInput) README.md: - Agent 重新定位为 Better Siri 个人助手 - 新增记忆系统、统一弹窗、Mac 原生集成等功能亮点 - 新增三种模式详解中的 Agent 记忆系统描述
This commit is contained in:
parent
9f3ea09b06
commit
76fcda7210
96
AGENTS.md
96
AGENTS.md
@ -53,15 +53,16 @@ Sources/
|
|||||||
├── UI/
|
├── UI/
|
||||||
│ ├── RecordingPanel.swift # 胶囊浮动窗:无边框、底部居中、弹簧动画
|
│ ├── RecordingPanel.swift # 胶囊浮动窗:无边框、底部居中、弹簧动画
|
||||||
│ ├── WaveformView.swift # 5 条球形波动画:RMS 驱动实时跳动
|
│ ├── WaveformView.swift # 5 条球形波动画:RMS 驱动实时跳动
|
||||||
│ ├── SettingsWindow.swift # LLM 设置面板(Input/Assist/Agent 三合一)
|
│ ├── SettingsWindow.swift # LLM 设置面板(Input/Assist/Agent 三合一 + 助手个性化)
|
||||||
|
│ ├── MemoryWindow.swift # 记忆管理窗口(NSTableView 查看/搜索/编辑记忆)
|
||||||
│ ├── AgentNotchView.swift # Agent 刘海弹窗视图(SwiftUI)
|
│ ├── AgentNotchView.swift # Agent 刘海弹窗视图(SwiftUI)
|
||||||
│ ├── AgentProgressTracker.swift # Agent 任务进度追踪(工具调用/流式输出)
|
│ ├── AgentProgressTracker.swift # Agent 任务进度追踪(工具调用/流式输出/自动新建)
|
||||||
│ ├── AgentModelEditor.swift # Agent 模型添加/编辑弹窗
|
│ ├── AgentModelEditor.swift # Agent 模型添加/编辑弹窗
|
||||||
│ ├── AppKitTextField.swift # 支持快捷键的 NSTextField 包装
|
│ ├── AppKitTextField.swift # 支持快捷键的 NSTextField 包装
|
||||||
│ ├── KeyEquivalentSecureTextField.swift # 支持快捷键的安全文本框
|
│ ├── KeyEquivalentSecureTextField.swift # 支持快捷键的安全文本框
|
||||||
│ └── KeyEquivalentPanel.swift # 支持快捷键的 NSPanel 基类
|
│ └── KeyEquivalentPanel.swift # 支持快捷键的 NSPanel 基类
|
||||||
├── Utils/
|
├── Utils/
|
||||||
│ └── Config.swift # UserDefaults 持久化:语言、LLM、触发模式、朗读等
|
│ └── Config.swift # UserDefaults 持久化:语言、LLM、触发模式、朗读、助手个性化等
|
||||||
└── Resources/
|
└── Resources/
|
||||||
├── AppIcon.icns # 应用图标
|
├── AppIcon.icns # 应用图标
|
||||||
├── AppIcon-macOS.png # 图标源文件
|
├── AppIcon-macOS.png # 图标源文件
|
||||||
@ -71,16 +72,22 @@ Agent/
|
|||||||
├── models.json # Agent 模型配置(API URL/Key/Model)
|
├── models.json # Agent 模型配置(API URL/Key/Model)
|
||||||
├── models.example.json # 模型配置模板(分发包用)
|
├── models.example.json # 模型配置模板(分发包用)
|
||||||
├── prompts/
|
├── prompts/
|
||||||
│ └── system.txt # Agent system prompt(含 {current_time} 等占位符)
|
│ └── system.txt # Agent system prompt(含 {assistant_name}/{user_name} 等占位符)
|
||||||
|
├── doc/
|
||||||
|
│ └── tools.json # 工具声明(remember/recall/set_identity 等)
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── bridge.js # Node.js 桥接入口(stdin/stdout JSON 通信)
|
│ ├── bridge.js # Node.js 桥接入口(stdin/stdout JSON 通信 + 对话持久化)
|
||||||
│ ├── config.js # 配置加载
|
│ ├── config.js # 配置加载
|
||||||
│ ├── cli/ # CLI 命令处理
|
│ ├── cli/ # CLI 命令处理
|
||||||
│ ├── core/ # 上下文构建、状态管理
|
│ ├── core/ # 上下文构建(含 user_profile/identity 注入)、状态管理
|
||||||
│ ├── model/ # LLM 客户端、模型配置
|
│ ├── model/ # LLM 客户端、模型配置
|
||||||
│ ├── storage/ # 对话历史存储
|
│ ├── storage/ # 对话历史存储(conversation_store)
|
||||||
│ ├── tools/ # 工具实现(文件读写、命令执行、搜索等)
|
│ ├── tools/ # 工具实现
|
||||||
│ └── ui/ # CLI 终端 UI(Agent 内部使用)
|
│ │ ├── remember.js # 记忆记录(add/update/delete)
|
||||||
|
│ │ ├── recall.js # 记忆搜索(按类型/关键词/时间过滤)
|
||||||
|
│ │ ├── set_identity.js # 身份设置(助手名字/用户称呼/语气)
|
||||||
|
│ │ └── ... # 文件读写、命令执行、搜索等
|
||||||
|
│ └── ui/ # 工具友好展示(记住/回忆/设置身份)
|
||||||
└── node_modules/ # npm 依赖
|
└── node_modules/ # npm 依赖
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -106,6 +113,8 @@ Agent/
|
|||||||
```
|
```
|
||||||
Fn Down(长按 > 200ms)
|
Fn Down(长按 > 200ms)
|
||||||
→ AppDelegate.startRecording()
|
→ AppDelegate.startRecording()
|
||||||
|
→ 停止正在进行的朗读(避免冲突)
|
||||||
|
→ Agent 模式 → 统一显示刘海弹窗
|
||||||
→ AudioLevelMonitor.start() // 音频电平
|
→ AudioLevelMonitor.start() // 音频电平
|
||||||
→ SpeechRecognizer.start() // 语音识别
|
→ SpeechRecognizer.start() // 语音识别
|
||||||
→ RecordingPanel.showAnimated() // 显示胶囊窗
|
→ RecordingPanel.showAnimated() // 显示胶囊窗
|
||||||
@ -115,7 +124,7 @@ Fn Up
|
|||||||
→ 根据 triggerMode 分发:
|
→ 根据 triggerMode 分发:
|
||||||
├── input → handleInputMode() → LLMRefiner.refine() → TextInjector.inject()
|
├── input → handleInputMode() → LLMRefiner.refine() → TextInjector.inject()
|
||||||
├── assist → handleAssistMode() → LLMRefiner.chat() → inject 或 Notch弹窗
|
├── assist → handleAssistMode() → LLMRefiner.chat() → inject 或 Notch弹窗
|
||||||
└── agent → handleAgentMode() → AgentBridge 子进程 → AgentNotch 弹窗
|
└── agent → handleTextInput() → AgentBridge 子进程 → AgentNotch 弹窗
|
||||||
```
|
```
|
||||||
|
|
||||||
### Fn 键交互
|
### Fn 键交互
|
||||||
@ -140,12 +149,25 @@ Fn Up
|
|||||||
- 朗读开关(`Config.shared.assistSpeakEnabled`):弹窗模式下朗读 AI 回复
|
- 朗读开关(`Config.shared.assistSpeakEnabled`):弹窗模式下朗读 AI 回复
|
||||||
- LLM 配置:`Config.shared.assistLLM`(菜单栏 `💬 Assist LLM` → Settings)
|
- LLM 配置:`Config.shared.assistLLM`(菜单栏 `💬 Assist LLM` → Settings)
|
||||||
|
|
||||||
#### Agent 模式(智能体)
|
#### Agent 模式(Better Siri 个人助手)
|
||||||
- 流程:语音/文字输入 → Node.js CLI 子进程 → 工具调用 → 流式输出
|
|
||||||
- 通过 `AgentBridge` 与 `Agent/src/bridge.js` 通信(stdin/stdout JSON 行协议)
|
Agent 被设计为个人 Mac 助手,而非纯代码开发工具:
|
||||||
- 结果在 `AgentNotchView`(刘海弹窗)展示,支持复制/停止/新对话
|
|
||||||
- 朗读开关(`Config.shared.agentSpeakEnabled`):任务完成时朗读最终输出
|
- **身份定位**:友好自然的个人助手,充分利用 macOS 原生能力(osascript、系统命令)
|
||||||
- 配置通过 `Agent/models.json` 管理(菜单栏 `🤖 Agent LLM` → Settings)
|
- **记忆系统**:`remember`(记录)+ `recall`(搜索),自动记住用户偏好/习惯/待办;
|
||||||
|
记忆存储在 `~/Library/Application Support/VoiceInput/memory/memory.json`,跨对话持久化
|
||||||
|
- **身份设置**:`set_identity` 工具独立管理助手名字、用户称呼、语气,与记忆分开
|
||||||
|
- **对话持久化**:对话自动保存到 `~/.easyagent/conversations/`,启动时恢复最新对话;
|
||||||
|
token 计数(prompt/completion 累加,total 覆盖)
|
||||||
|
- **新建对话**:手动/自动两种模式;自动模式下 total > 阈值时下次输入自动新建
|
||||||
|
- **弹窗统一**:语音和打字输入使用同一刘海弹窗,按 Fn 即弹出;
|
||||||
|
语音识别内容自动填入发送(可关闭自动发送开关)
|
||||||
|
- **工作状态**:thinking/running 期间隐藏输入框,完成/空闲时显示
|
||||||
|
- **工具显示**:三种模式(全部显示 / 最后隐藏 / 一直不显示),在设置中配置
|
||||||
|
|
||||||
|
流程:
|
||||||
|
- 语音输入:Fn Down → 显示弹窗 + 录音 → Fn Up → 自动填入文本 → 发送 → 工具调用 → 流式输出
|
||||||
|
- 打字输入:Fn → 弹窗显示 → 用户输入 → 手动发送 → 工具调用 → 流式输出
|
||||||
|
|
||||||
### Agent JSON 通信协议
|
### Agent JSON 通信协议
|
||||||
|
|
||||||
@ -163,7 +185,7 @@ Fn Up
|
|||||||
| `tool_start` | 工具开始 `{"tool":"run_command","display":"ls -la"}` |
|
| `tool_start` | 工具开始 `{"tool":"run_command","display":"ls -la"}` |
|
||||||
| `tool_end` | 工具结束 `{"tool":"run_command","result":["line1","line2"]}` |
|
| `tool_end` | 工具结束 `{"tool":"run_command","result":["line1","line2"]}` |
|
||||||
| `assistant_chunk` | 流式文本 `{"content":"部分回复..."}` |
|
| `assistant_chunk` | 流式文本 `{"content":"部分回复..."}` |
|
||||||
| `done` | 任务完成 `{"content":"完整回复","elapsed_ms":1234}` |
|
| `done` | 任务完成 `{"content":"完整回复","elapsed_ms":1234,"total_tokens":5000}` |
|
||||||
| `error` | 错误 `{"message":"错误描述"}` |
|
| `error` | 错误 `{"message":"错误描述"}` |
|
||||||
|
|
||||||
### 语音朗读
|
### 语音朗读
|
||||||
@ -176,11 +198,11 @@ Fn Up
|
|||||||
| Agent | 任务完成 `.done` 事件时(需开启开关) | 朗读完成 + 5s 带动画关闭 |
|
| Agent | 任务完成 `.done` 事件时(需开启开关) | 朗读完成 + 5s 带动画关闭 |
|
||||||
|
|
||||||
朗读开关关闭时,弹窗按固定时间关闭(Assist 15s / Agent 20s)。
|
朗读开关关闭时,弹窗按固定时间关闭(Assist 15s / Agent 20s)。
|
||||||
用户手动停止/关闭弹窗或开始新对话时立即停止朗读。
|
用户按 Fn 开始新录音时立即停止朗读。
|
||||||
|
|
||||||
### DMG 安全
|
### DMG 安全
|
||||||
|
|
||||||
`make dmg` 打包时会自动将 `models.json` 替换为空配置 `{"models":[],"default_model":"","tavily_api_key":""}`,防止 API Key 泄露。本地开发构建不受影响。
|
`make dmg` 打包时会自动将 `models.json` 替换为空配置 `{"models":[],"default_model":"","tavily_api_key":""}`,防止 API Key 泄露。`user_profile.json` 和 `memory.json`(存储在系统目录,不在 bundle 内)无需额外处理。
|
||||||
|
|
||||||
## 代码约定
|
## 代码约定
|
||||||
|
|
||||||
@ -218,6 +240,34 @@ Entitlements 文件 `Sources/Resources/VoiceInput.entitlements`:
|
|||||||
|
|
||||||
Agent CLI 使用 Node.js,入口为 `Agent/src/bridge.js`。Node.js 运行时已打包在 `Agent/bin/node`(arm64),构建时自动进入 `.app` bundle。用户无需额外安装 Node.js。
|
Agent CLI 使用 Node.js,入口为 `Agent/src/bridge.js`。Node.js 运行时已打包在 `Agent/bin/node`(arm64),构建时自动进入 `.app` bundle。用户无需额外安装 Node.js。
|
||||||
|
|
||||||
|
## 配置项速查
|
||||||
|
|
||||||
|
### Agent 设置窗口可配置项
|
||||||
|
|
||||||
|
| 配置项 | 说明 | 默认值 |
|
||||||
|
|--------|------|--------|
|
||||||
|
| 默认模型 | Agent 使用的 LLM | - |
|
||||||
|
| 运行模式 | Read Only / Full Access | Full Access |
|
||||||
|
| 输入方式 | 语音 / 打字 | 语音 |
|
||||||
|
| 思考模式 | 快速 / 思考 | 快速 |
|
||||||
|
| 工具显示 | 全部显示 / 最后隐藏 / 一直不显示 | 全部显示 |
|
||||||
|
| 新建对话 | 手动 / 自动 | 手动 |
|
||||||
|
| 自动新建阈值 | total tokens 超过此值时自动新建对话 | 40000 |
|
||||||
|
| 朗读 | 任务完成时朗读最终输出 | 关 |
|
||||||
|
| 语音自动发送 | 语音识别后自动发送还是等待手动 | 开 |
|
||||||
|
| 助手名字 | 出现在 prompt 中 | 空 |
|
||||||
|
| 我的称呼 | 出现在 prompt 中 | 空 |
|
||||||
|
| 助手语气 | 友好/专业/幽默/简洁/温暖/正式 | 友好 |
|
||||||
|
|
||||||
|
### 用户数据存储位置
|
||||||
|
|
||||||
|
| 数据 | 路径 |
|
||||||
|
|------|------|
|
||||||
|
| Agent 模型配置 | `~/Library/Application Support/VoiceInput/models.json` |
|
||||||
|
| 用户身份配置 | `~/Library/Application Support/VoiceInput/user_profile.json` |
|
||||||
|
| 记忆数据 | `~/Library/Application Support/VoiceInput/memory/memory.json` |
|
||||||
|
| 对话历史 | `~/.easyagent/conversations/` |
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
1. **ARC 陷阱**:`NSApplication.delegate` 是 weak 引用,`main.swift` 中的 `AppDelegate` 会被 ARC 释放。解决方案:`AppDelegate` 内部使用 `static retainedInstance` 自持 + `main.swift` 使用 `withExtendedLifetime` 双重保险。
|
1. **ARC 陷阱**:`NSApplication.delegate` 是 weak 引用,`main.swift` 中的 `AppDelegate` 会被 ARC 释放。解决方案:`AppDelegate` 内部使用 `static retainedInstance` 自持 + `main.swift` 使用 `withExtendedLifetime` 双重保险。
|
||||||
@ -230,6 +280,12 @@ Agent CLI 使用 Node.js,入口为 `Agent/src/bridge.js`。Node.js 运行时
|
|||||||
|
|
||||||
5. **DMG 构建**:`make dmg` 依赖 `make sign` → `make release`,需要 `hdiutil`(系统自带)。打包时自动清空 `models.json` 中的 API Key。
|
5. **DMG 构建**:`make dmg` 依赖 `make sign` → `make release`,需要 `hdiutil`(系统自带)。打包时自动清空 `models.json` 中的 API Key。
|
||||||
|
|
||||||
6. **Agent prompt 维护**:Agent 的 system prompt 在 `Agent/prompts/system.txt`,包含 `{current_time}`、`{model_id}` 等占位符,由 `context.js` 的 `buildSystemPrompt()` 在运行时替换。
|
6. **Agent prompt 维护**:Agent 的 system prompt 在 `Agent/prompts/system.txt`,包含 `{current_time}`、`{model_id}`、`{assistant_name}`、`{assistant_tone}`、`{user_name}` 等占位符,由 `context.js` 的 `buildSystemPrompt()` 在运行时替换。
|
||||||
|
|
||||||
7. **NSSpeechSynthesizer 弃用警告**:macOS 14 标记 `NSSpeechSynthesizer` 为 deprecated(建议用 `AVSpeechSynthesizer`),但功能正常。编译时仅有 warning,无 error。
|
7. **NSSpeechSynthesizer 弃用警告**:macOS 14 标记 `NSSpeechSynthesizer` 为 deprecated(建议用 `AVSpeechSynthesizer`),但功能正常。编译时仅有 warning,无 error。
|
||||||
|
|
||||||
|
8. **消息加载顺序**:bridge.js 中必须先加载旧对话再 push 用户消息,否则新消息会被覆盖。
|
||||||
|
|
||||||
|
9. **弹窗状态覆盖**:`showAgentNotchInternal` 在弹窗已存在时只执行 `show()`,不覆盖 `isTextInputMode` 等状态,避免语音输入时输入框被错误隐藏。
|
||||||
|
|
||||||
|
10. **连续 assistant 消息**:bridge.js 在 done 前自动去重/合并末尾连续 assistant 消息,防止 API 偶发重复返回导致上下文污染。
|
||||||
|
|||||||
40
README.md
40
README.md
@ -10,18 +10,27 @@ macOS 菜单栏语音输入应用 —— 按住 Fn 键录音,AI 帮你处理
|
|||||||
|------|------|------|
|
|------|------|------|
|
||||||
| **Input** 语音输入 | 🎤 | 语音转文字 + LLM 纠错 → 注入光标 |
|
| **Input** 语音输入 | 🎤 | 语音转文字 + LLM 纠错 → 注入光标 |
|
||||||
| **Assist** AI 助手 | 💬 | 语音提问 → AI 回复(弹窗 + 可选朗读) |
|
| **Assist** AI 助手 | 💬 | 语音提问 → AI 回复(弹窗 + 可选朗读) |
|
||||||
| **Agent** 智能体 | 🤖 | 多轮对话 + 工具调用(文件读写/命令执行/搜索) |
|
| **Agent** 个人助手 | 🤖 | Better Siri — 多轮对话 + 记忆系统 + 工具调用 + 流式输出 |
|
||||||
|
|
||||||
|
### Agent 个人助手亮点
|
||||||
|
|
||||||
|
- 🧠 **记忆系统**:自动记住你的偏好、习惯、待办,跨对话持久化
|
||||||
|
- 🖥 **Mac 原生集成**:充分利用 osascript、系统命令等 macOS 能力
|
||||||
|
- 🎤⌨️ **统一弹窗**:语音/打字输入使用同一刘海界面,按 Fn 即弹出
|
||||||
|
- 📝 **语音自动发送**:说话内容自动填入输入框并发送(可关闭)
|
||||||
|
- 💬 **对话持久化**:对话自动保存,启动时恢复;token 计数跟踪
|
||||||
|
- 🔄 **自动新建对话**:token 超限时自动开启新对话(阈值可配)
|
||||||
|
- ⚙️ **可定制身份**:设置 AI 助手名字、语气、对你的称呼
|
||||||
|
- 🔧 **工具调用**:读写文件、执行命令、网络搜索等
|
||||||
|
|
||||||
### 其他亮点
|
### 其他亮点
|
||||||
|
|
||||||
- 🎤 **按住 Fn 说话**:全局监听,长按录音松开注入
|
- 🎤 **按住 Fn 说话**:全局监听,长按录音松开注入
|
||||||
- 📝 **流式识别**:Apple Speech Recognition 实时转录
|
- 📝 **流式识别**:Apple Speech Recognition 实时转录
|
||||||
- 🌐 **多语言**:简中 / 繁中 / English / 日本語 / 한국어
|
- 🌐 **多语言**:简中 / 繁中 / English / 日本語 / 한국어
|
||||||
- 🪟 **刘海弹窗**:AI 回复在 DynamicNotch 弹窗展示,支持复制
|
- 🪟 **刘海弹窗**:AI 回复在 DynamicNotch 弹窗展示,支持复制和继续对话
|
||||||
- 🔊 **语音朗读**:macOS 原生 TTS 朗读 AI 回复(Assist/Agent 可独立开关)
|
- 🔊 **语音朗读**:macOS 原生 TTS 朗读 AI 回复(Assist/Agent 可独立开关)
|
||||||
- 🎚 **实时波形**:5 条 RMS 驱动的球形波动画
|
- 🎚 **实时波形**:5 条 RMS 驱动的球形波动画
|
||||||
- 📋 **智能注入**:自动检测并切换 CJK 输入法
|
|
||||||
- 🔧 **Agent 工具**:读写文件、执行命令、搜索文件、网络搜索等
|
|
||||||
|
|
||||||
## 系统要求
|
## 系统要求
|
||||||
|
|
||||||
@ -49,7 +58,7 @@ make dmg # 生成分发包(自动清空 API Key)
|
|||||||
4. 说话,胶囊窗口显示实时转录
|
4. 说话,胶囊窗口显示实时转录
|
||||||
5. 松开 Fn → 文本注入(Input)/AI 回复弹窗(Assist/Agent)
|
5. 松开 Fn → 文本注入(Input)/AI 回复弹窗(Assist/Agent)
|
||||||
|
|
||||||
点击菜单栏图标可切换语言、模式或配置 LLM。
|
点击菜单栏图标可切换语言、模式或配置 LLM。Agent 模式下可从菜单进入**助手设置**和**记忆管理**。
|
||||||
|
|
||||||
## 三种模式详解
|
## 三种模式详解
|
||||||
|
|
||||||
@ -60,9 +69,17 @@ make dmg # 生成分发包(自动清空 API Key)
|
|||||||
语音提问 → LLM 回复。可选择**直接注入**或**刘海弹窗**展示。
|
语音提问 → LLM 回复。可选择**直接注入**或**刘海弹窗**展示。
|
||||||
弹窗模式下可开启**朗读**,AI 回复自动语音播报。
|
弹窗模式下可开启**朗读**,AI 回复自动语音播报。
|
||||||
|
|
||||||
### Agent(智能体)
|
### Agent(个人助手 / Better Siri)
|
||||||
语音/文字 → 多轮对话 → 工具调用(文件读写、命令执行、搜索等)→ 流式输出。
|
语音或打字输入 → 多轮对话 → 工具调用 → 流式输出。
|
||||||
任务完成后可选**朗读**最终结果。内置 Node.js 运行时,无需额外安装。
|
Agent 被设计为**个人 Mac 助手**,会自动记住你的偏好、习惯和待办,
|
||||||
|
熟练使用 macOS 原生能力(如 osascript、系统命令)帮你完成任务。
|
||||||
|
|
||||||
|
**记忆系统**自动工作,跨对话持久化:
|
||||||
|
- 你说"记住明天下午3点开会"→ Agent 记下待办
|
||||||
|
- 你说"我不喜欢蓝色"→ Agent 记下偏好
|
||||||
|
- 你下次问"给我推荐一个壁纸"→ Agent 自动避开蓝色
|
||||||
|
|
||||||
|
内置 Node.js 运行时,无需额外安装。
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
|
|
||||||
@ -70,7 +87,8 @@ make dmg # 生成分发包(自动清空 API Key)
|
|||||||
|------|---------|---------|
|
|------|---------|---------|
|
||||||
| Input LLM | 菜单栏 `🎤 Input LLM` → Settings | UserDefaults |
|
| Input LLM | 菜单栏 `🎤 Input LLM` → Settings | UserDefaults |
|
||||||
| Assist LLM | 菜单栏 `💬 Assist LLM` → Settings | UserDefaults |
|
| Assist LLM | 菜单栏 `💬 Assist LLM` → Settings | UserDefaults |
|
||||||
| Agent LLM | 菜单栏 `🤖 Agent LLM` → Settings | `~/Library/Application Support/VoiceInput/models.json` |
|
| Agent LLM + 助手设置 | 菜单栏 `🤖 Agent LLM` → Settings / `⚙️ 助手设置` | `~/Library/Application Support/VoiceInput/` |
|
||||||
|
| 记忆管理 | 菜单栏 `🧠 记忆管理` | `~/Library/Application Support/VoiceInput/memory/` |
|
||||||
|
|
||||||
Agent 支持多模型配置,在 Settings 中添加/编辑/删除。覆盖安装不会丢失配置。
|
Agent 支持多模型配置,在 Settings 中添加/编辑/删除。覆盖安装不会丢失配置。
|
||||||
|
|
||||||
@ -91,13 +109,13 @@ make clean # 清理
|
|||||||
Sources/
|
Sources/
|
||||||
├── App/ # AppDelegate + 菜单栏控制器
|
├── App/ # AppDelegate + 菜单栏控制器
|
||||||
├── Core/ # 按键监听、语音识别、LLM、Agent 桥接、弹窗管理
|
├── Core/ # 按键监听、语音识别、LLM、Agent 桥接、弹窗管理
|
||||||
├── UI/ # 浮动窗口、波形、设置面板、Agent 弹窗
|
├── UI/ # 浮动窗口、波形、设置面板、Agent 弹窗、记忆管理窗口
|
||||||
└── Utils/ # 配置持久化
|
└── Utils/ # 配置持久化
|
||||||
|
|
||||||
Agent/ # Node.js CLI(智能体运行时)
|
Agent/ # Node.js CLI(智能体运行时)
|
||||||
├── bin/node # 内置 Node.js(arm64)
|
├── bin/node # 内置 Node.js(arm64)
|
||||||
├── prompts/ # System prompt
|
├── prompts/ # System prompt
|
||||||
├── src/ # bridge.js + 工具实现
|
├── src/ # bridge.js + 工具实现(记忆/身份/文件/命令/搜索等)
|
||||||
└── node_modules/ # npm 依赖
|
└── node_modules/ # npm 依赖
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user