=== 记忆系统 === - 新增 remember(记录)和 recall(搜索)工具,持久化到 ~/Library/Application Support/VoiceInput/memory/memory.json - 新增 set_identity 工具,独立管理助手名字/用户称呼/语气 - prompt 重写为个人助手身份,注入 macOS 能力 + 记忆规则 - prompt 中积极调用记忆工具,按需搜索、自然融入回答 - 禁止相对时间,待办必须绝对日期 === 对话持久化 === - 集成 conversation_store,done 前自动写入对话文件 - token 记录:prompt/completion 累加,total 覆盖为最新上下文长度 - 启动时加载最新对话继续(使用 eagent /resume 逻辑) - 去重:末尾连续 assistant 消息自动合并 - 修复消息加载顺序 bug(旧对话覆盖用户新消息) === 新建对话 === - 手动/自动两种模式(设置窗口可切换) - 自动模式:total > 阈值时隐藏按钮,下次输入自动新建 - 自动阈值在设置窗口可配置(默认 40000) === 弹窗 UI 统一 === - 语音输入按 Fn 即显示刘海弹窗(和打字输入统一) - 语音识别内容自动填入并发送(可关闭自动发送) - 工作期间(thinking/running)隐藏输入框,idle/done 时显示 - 工具显示三种模式:全部显示/最后隐藏/一直不显示 === 设置窗口增强 === - 助手名字 / 用户称呼 / 语气可配置 - 工具显示模式 / 新建对话模式 / 自动阈值 - 语音输入后自动发送开关(默认开) - 记忆管理窗口可视化编辑(Dock 可访问) - 窗口高度 840→860 === 菜单增强 === - Agent LLM 二级菜单切换语音/打字输入 - 助手设置和记忆管理入口(Dock 可访问) === 修复 === - Fn 按下时停止正在进行的朗读 - 弹窗已存在时不再覆盖 isTextInputMode - voiceInputText 加 @Published 以触发 UI 更新
178 lines
2.3 KiB
Markdown
178 lines
2.3 KiB
Markdown
# 工具返回格式(高信息密度文本,非 JSON)
|
||
|
||
> 说明:工具真实执行会产生完整 JSON 结果,仅用于存储/审计;**返回给模型的内容必须是高信息密度文本**。参考项目中的“JSON -> 文本摘要”逻辑,但按 easyagent 需求进一步压缩。
|
||
|
||
---
|
||
|
||
## read_file
|
||
|
||
### type=read
|
||
**仅返回 content 原文**(不加标题、不加行号、不加路径)。
|
||
|
||
返回示例:
|
||
```
|
||
<文件内容原文>
|
||
```
|
||
|
||
### type=search
|
||
返回“命中片段拼接文本”,每个片段用极简头标识(保留行号对定位有价值),不返回其他噪声。
|
||
|
||
返回示例:
|
||
```
|
||
[match_1] L10-14 hits:12
|
||
<片段内容>
|
||
|
||
[match_2] L88-92 hits:90,91
|
||
<片段内容>
|
||
```
|
||
|
||
### type=extract
|
||
返回“抽取片段拼接文本”,每个片段带 label/行号(若有)。
|
||
|
||
返回示例:
|
||
```
|
||
[segment_init] L10-20
|
||
<片段内容>
|
||
|
||
[segment_2] L40-45
|
||
<片段内容>
|
||
```
|
||
|
||
### error
|
||
```
|
||
失败: <错误信息>
|
||
```
|
||
|
||
---
|
||
|
||
## edit_file
|
||
|
||
成功:
|
||
```
|
||
已替换 <N> 处: <path>
|
||
```
|
||
|
||
失败:
|
||
```
|
||
失败: <错误信息>
|
||
```
|
||
|
||
---
|
||
|
||
## web_search
|
||
|
||
仅返回搜索摘要文本(来自 search_with_summary 的 summary),不返回 JSON 结果。
|
||
|
||
返回示例:
|
||
```
|
||
🔍 搜索查询: xxx
|
||
📅 搜索时间: 2025-01-01T12:00:00
|
||
|
||
📝 AI摘要:
|
||
...
|
||
|
||
---
|
||
|
||
📊 搜索结果:
|
||
1. 标题...
|
||
🔗 URL
|
||
📄 摘要...
|
||
```
|
||
|
||
失败:
|
||
```
|
||
失败: <错误信息>
|
||
```
|
||
|
||
---
|
||
|
||
## extract_webpage
|
||
|
||
### mode=read
|
||
返回网页正文为主,保留最小必要标识(URL)。
|
||
|
||
返回示例:
|
||
```
|
||
URL: https://example.com/...
|
||
<网页正文>
|
||
```
|
||
|
||
### mode=save
|
||
返回保存结果的简短确认信息。
|
||
|
||
成功:
|
||
```
|
||
已保存: <path> (chars=<N>, bytes=<N>)
|
||
```
|
||
|
||
失败:
|
||
```
|
||
失败: <错误信息>
|
||
```
|
||
|
||
---
|
||
|
||
## run_command
|
||
|
||
仅返回命令输出;如超时/错误则在前缀标注状态。
|
||
|
||
成功:
|
||
```
|
||
<stdout/stderr 合并输出>
|
||
```
|
||
|
||
超时:
|
||
```
|
||
[timeout after <Ns>]
|
||
<已捕获输出>
|
||
```
|
||
|
||
失败:
|
||
```
|
||
[error rc=<code>] <错误信息或输出>
|
||
```
|
||
|
||
---
|
||
|
||
## read_mediafile
|
||
|
||
成功(文字提示 + 附加媒体 payload):
|
||
```
|
||
已附加图片: <path>
|
||
```
|
||
或
|
||
```
|
||
已附加视频: <path>
|
||
```
|
||
|
||
失败:
|
||
```
|
||
失败: <错误信息>
|
||
```
|
||
|
||
---
|
||
|
||
## search_workspace
|
||
|
||
### mode=file
|
||
```
|
||
命中文件(<N>):
|
||
1) <path>
|
||
2) <path>
|
||
```
|
||
|
||
### mode=content
|
||
```
|
||
<path>
|
||
- L12: <snippet>
|
||
- L30: <snippet>
|
||
|
||
<path>
|
||
- L5: <snippet>
|
||
```
|
||
|
||
失败:
|
||
```
|
||
失败: <错误信息>
|
||
```
|