myagent-ai 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/version.py CHANGED
@@ -11,7 +11,7 @@ import subprocess
11
11
  from pathlib import Path
12
12
 
13
13
  # ── 基线版本(与 setup.py / package.json 保持一致) ──
14
- BASE_VERSION = "1.1.0"
14
+ BASE_VERSION = "1.2.1"
15
15
 
16
16
 
17
17
  def _version_from_git() -> str:
@@ -0,0 +1,797 @@
1
+ # MyAgent 配置使用说明
2
+
3
+ > **版本**: v1.1.0
4
+ > **最后更新**: 2025年
5
+ > **适用平台**: Windows / macOS / Linux
6
+
7
+ ---
8
+
9
+ ## 目录
10
+
11
+ 1. [项目简介](#1-项目简介)
12
+ 2. [快速开始](#2-快速开始)
13
+ 3. [模型API配置](#3-模型api配置)
14
+ 4. [Agent管理系统](#4-agent管理系统)
15
+ 5. [配置助手使用指南](#5-配置助手使用指南)
16
+ 6. [执行引擎](#6-执行引擎)
17
+ 7. [技能系统](#7-技能系统)
18
+ 8. [记忆系统](#8-记忆系统)
19
+ 9. [群聊功能](#9-群聊功能)
20
+ 10. [Agent间通信](#10-agent间通信)
21
+ 11. [组织功能](#11-组织功能)
22
+ 12. [聊天平台接入](#12-聊天平台接入)
23
+ 13. [自动更新](#13-自动更新)
24
+ 14. [配置热重载](#14-配置热重载)
25
+ 15. [常见问题 FAQ](#15-常见问题-faq)
26
+ 16. [配置文件参考](#16-配置文件参考)
27
+ 17. [命令行使用](#17-命令行使用)
28
+ 18. [Web管理后台](#18-web管理后台)
29
+
30
+ ---
31
+
32
+ ## 1. 项目简介
33
+
34
+ **MyAgent** 是一款面向个人用户的本地桌面端执行型 AI 助手,采用多 Agent 协作架构设计,核心理念是将大语言模型(LLM)的能力直接延伸到用户的本地操作系统环境中。与云端 AI 服务不同,MyAgent 运行在用户的个人电脑上,能够在本地直接执行代码、操作文件、管理系统资源,实现真正的"AI + 本地执行"闭环体验。
35
+
36
+ 项目的核心理念包括三个方面:**多 Agent 架构**——主 Agent、工具 Agent、记忆 Agent 各司其职,通过协调合作完成复杂任务;**本地执行优先**——所有代码和命令在用户本机运行,无需将数据上传到云端,响应速度更快;**隐私优先设计**——用户数据完全存储在本地 `~/.myagent/` 目录中,聊天记录、记忆数据、配置信息均不离开本机。即便接入远程 LLM API,用户的对话历史和本地文件内容也不会被发送到第三方服务。
37
+
38
+ MyAgent 当前版本为 **v1.1.0**,完整支持 **Windows、macOS、Linux** 三大主流操作系统平台,可通过系统托盘在后台常驻运行,也支持命令行交互模式。同时提供 Web 管理后台和多种聊天平台接入能力,满足不同使用场景的需求。
39
+
40
+ ---
41
+
42
+ ## 2. 快速开始
43
+
44
+ ### 安装方式
45
+
46
+ MyAgent 提供两种安装方式,用户可根据自己的偏好选择:
47
+
48
+ **方式一:npm 全局安装(推荐)**
49
+
50
+ ```bash
51
+ npm install -g myagent-ai
52
+ ```
53
+
54
+ 安装完成后,在终端中直接运行 `myagent` 即可启动。
55
+
56
+ **方式二:Git Clone 源码安装**
57
+
58
+ ```bash
59
+ git clone https://github.com/your-org/myagent.git
60
+ cd myagent
61
+ pip install -r requirements.txt
62
+ python main.py
63
+ ```
64
+
65
+ ### 一键安装命令
66
+
67
+ 各平台的一键安装命令如下:
68
+
69
+ ```bash
70
+ # macOS / Linux
71
+ curl -fsSL https://raw.githubusercontent.com/your-org/myagent/main/install/install.sh | bash
72
+
73
+ # Windows (PowerShell)
74
+ irm https://raw.githubusercontent.com/your-org/myagent/main/install/install.ps1 | iex
75
+ ```
76
+
77
+ ### 首次启动引导
78
+
79
+ 首次运行 MyAgent 时,系统会自动进入配置引导流程:
80
+
81
+ 1. **API Key 配置**:系统会提示你选择 LLM 提供商并输入对应的 API Key。支持 OpenAI、Anthropic (Claude)、Ollama(本地模型)、智谱 GLM 以及自定义兼容接口。如果你已经通过环境变量配置了 API Key,系统会自动检测并跳过此步骤。
82
+
83
+ 2. **配置助手激活**:启动完成后,系统会自动激活内置的「配置助手」Agent。配置助手是一个专门设计用于帮助新用户了解软件功能、完成初始设置的智能引导 Agent。它会自动向你介绍 MyAgent 的核心功能,并逐步引导你完成模型选择、技能探索、Agent 创建等关键配置。
84
+
85
+ 3. **默认配置生成**:首次启动时,系统会在 `~/.myagent/` 目录下自动生成默认配置文件 `config.json`,以及必要的数据目录(`data/`、`logs/`、`workspace/`)和权限配置文件(`permissions.json`)。用户可以随时通过 Web 管理后台或直接编辑配置文件来自定义设置。
86
+
87
+ ---
88
+
89
+ ## 3. 模型API配置
90
+
91
+ MyAgent 支持多种大语言模型提供商,用户可以根据自己的需求和预算灵活选择。系统支持以下五类模型接口:
92
+
93
+ ### 支持的提供商
94
+
95
+ | 提供商 | provider 值 | 说明 |
96
+ |--------|------------|------|
97
+ | OpenAI | `openai` | GPT-4o、GPT-4、GPT-3.5 等 |
98
+ | Anthropic | `anthropic` | Claude 3.5 Sonnet、Claude 3 Opus 等 |
99
+ | Ollama | `ollama` | 本地运行的开源模型(Llama、Mistral 等) |
100
+ | 智谱 GLM | `zhipu` | GLM-4、GLM-5 等国产模型 |
101
+ | 自定义接口 | `custom` | 兼容 OpenAI API 格式的任意接口 |
102
+
103
+ ### 配置文件方式
104
+
105
+ 在 `~/.myagent/config.json` 中配置:
106
+
107
+ ```json
108
+ {
109
+ "llm": {
110
+ "provider": "openai",
111
+ "api_key": "sk-your-api-key-here",
112
+ "base_url": "https://api.openai.com/v1",
113
+ "model": "gpt-4o",
114
+ "temperature": 0.1,
115
+ "max_tokens": 4096,
116
+ "timeout": 120,
117
+ "max_retries": 3
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### ModelScope API 配置方式
123
+
124
+ ModelScope 是一个优秀的国内模型托管平台,提供多种高质量模型 API。使用 ModelScope 时,provider 设为 `custom`,并指定 ModelScope 的推理接口地址:
125
+
126
+ ```json
127
+ {
128
+ "llm": {
129
+ "provider": "custom",
130
+ "api_key": "your-modelscope-api-key",
131
+ "base_url": "https://api-inference.modelscope.cn/v1",
132
+ "model": "stepfun-ai/Step-3.5-Flash"
133
+ }
134
+ }
135
+ ```
136
+
137
+ **推荐模型列表**:
138
+
139
+ | 模型名称 | 特点 |
140
+ |---------|------|
141
+ | `stepfun-ai/Step-3.5-Flash` | 阶跃星辰,高性价比,响应速度快 |
142
+ | `ZhipuAI/GLM-5` | 智谱AI,中文能力强,适合复杂任务 |
143
+ | `Minimal/MiniMax-M2.5` | MiniMax,均衡性能,多模态支持 |
144
+ | `moonshotai/Kimi-K2.5` | Moonshot AI,长上下文,适合文档分析 |
145
+
146
+ ### 环境变量方式
147
+
148
+ 所有 LLM 配置项均可通过环境变量设置,优先级高于配置文件:
149
+
150
+ ```bash
151
+ # 基础配置
152
+ export MYAGENT_LLM_PROVIDER="openai"
153
+ export MYAGENT_LLM_API_KEY="sk-your-key"
154
+ export MYAGENT_LLM_BASE_URL="https://api.openai.com/v1"
155
+ export MYAGENT_LLM_MODEL="gpt-4o"
156
+ export MYAGENT_LLM_TEMPERATURE="0.1"
157
+ export MYAGENT_LLM_MAX_TOKENS="4096"
158
+
159
+ # Anthropic 专用
160
+ export MYAGENT_ANTHROPIC_API_KEY="sk-ant-your-key"
161
+
162
+ # Ollama 本地模型
163
+ export MYAGENT_OLLAMA_BASE_URL="http://localhost:11434"
164
+ export MYAGENT_OLLAMA_MODEL="llama3"
165
+ ```
166
+
167
+ ### 模型库功能
168
+
169
+ MyAgent 支持在配置文件中添加多个模型定义,形成"模型库"。你可以为不同的 Agent 绑定不同的模型,实现精细化的模型分配策略。例如,可以让主 Agent 使用强大的 GPT-4o,而让记忆 Agent 使用性价比更高的 GPT-3.5。
170
+
171
+ ```json
172
+ {
173
+ "models_library": [
174
+ {
175
+ "id": "gpt-4o",
176
+ "name": "GPT-4o (主力)",
177
+ "provider": "openai",
178
+ "model": "gpt-4o",
179
+ "max_tokens": 4096,
180
+ "temperature": 0.1,
181
+ "enabled": true
182
+ },
183
+ {
184
+ "id": "step-flash",
185
+ "name": "Step-3.5-Flash (快速)",
186
+ "provider": "custom",
187
+ "base_url": "https://api-inference.modelscope.cn/v1",
188
+ "model": "stepfun-ai/Step-3.5-Flash",
189
+ "api_key": "your-key",
190
+ "max_tokens": 4096,
191
+ "temperature": 0.1,
192
+ "enabled": true
193
+ }
194
+ ]
195
+ }
196
+ ```
197
+
198
+ ### 备用模型链
199
+
200
+ 每个 Agent 可以配置一个主模型和多个备用模型。当主模型请求失败(如超时、API 限流、服务不可用)时,系统会自动切换到备用模型列表中的下一个模型继续执行,确保任务不会因单个模型的故障而中断。这一机制对生产环境和高可靠性需求场景尤为重要。
201
+
202
+ ---
203
+
204
+ ## 4. Agent管理系统
205
+
206
+ MyAgent 采用多 Agent 架构,允许用户创建和管理多个具备不同能力与角色定位的 Agent。系统内置了三个核心 Agent(MainAgent、ToolAgent、MemoryAgent),同时支持用户自定义创建任意数量的 Agent 来满足特定需求。
207
+
208
+ ### Agent 层级结构
209
+
210
+ MyAgent 支持父子 Agent 的树形层级结构。父 Agent 可以向子 Agent 委派任务,子 Agent 完成后将结果返回给父 Agent。这种层级结构使得复杂任务可以被自然地分解为多个子任务,由不同专长的 Agent 协作完成。例如,一个"项目管理"Agent 可以将代码编写任务委派给"编程助手"Agent,将文档撰写任务委派给"写作助手"Agent。
211
+
212
+ ### 创建 Agent
213
+
214
+ 用户可以通过以下两种方式创建新 Agent:
215
+
216
+ - **Web 管理后台**:访问 `http://127.0.0.1:8765/ui/`,在 Agent 管理页面中点击"新建 Agent",填写名称、描述、系统提示词等信息。
217
+ - **聊天界面创建**:直接在对话中告诉配置助手或主 Agent "帮我创建一个新的翻译助手 Agent",系统会引导你完成配置。
218
+
219
+ ### Agent 配置项
220
+
221
+ 每个 Agent 包含以下可配置的核心属性:
222
+
223
+ | 配置项 | 说明 |
224
+ |--------|------|
225
+ | 名称 | Agent 的唯一标识名称 |
226
+ | 描述 | Agent 的功能描述,便于理解和搜索 |
227
+ | 系统提示词 (soul.md) | 定义 Agent 的核心行为模式和人格 |
228
+ | 身份 (identity.md) | 定义 Agent 的角色背景和专业领域 |
229
+ | 用户画像 (user.md) | Agent 对用户的理解(偏好、习惯等) |
230
+
231
+ ### 执行模式
232
+
233
+ MyAgent 支持两种执行模式:
234
+
235
+ - **本机模式 (local)**:代码和命令直接在用户本机执行,拥有完整的系统权限,响应速度快,适合日常使用。
236
+ - **沙盒模式 (sandbox)**:通过 Docker 容器隔离执行代码,具有内存限制(默认 512MB)、CPU 限制(1 核)、进程数限制(64 个),且默认禁止网络访问。适合执行不可信代码或需要额外安全隔离的场景。当 Docker 不可用时,系统会自动回退到本机模式。
237
+
238
+ ### 权限管理
239
+
240
+ 每个 Agent 拥有独立的权限配置,可以精确控制其能力范围:
241
+
242
+ | 权限项 | 默认值 | 说明 |
243
+ |--------|--------|------|
244
+ | execution | 开启 | 代码执行(Shell/PowerShell/CMD/Python) |
245
+ | file_read | 开启 | 文件读取权限 |
246
+ | file_write | 开启 | 文件写入、删除、移动权限 |
247
+ | network | 开启 | 联网功能(搜索、HTTP 请求、API 调用) |
248
+ | local_comm | 开启 | 本机 Agent 间通信 |
249
+ | remote_comm | 关闭 | 跨电脑 Agent 通信(AICQ 中继) |
250
+
251
+ 权限通过 `~/.myagent/data/permissions.json` 文件管理,支持全局默认权限和逐 Agent 覆盖。在 Web 管理后台中也可以直观地查看和修改各 Agent 的权限配置。
252
+
253
+ ### 平台绑定
254
+
255
+ 用户可以将特定 Agent 绑定到某个聊天平台(如 Telegram、Discord 等)。当用户在该平台发送消息时,绑定的 Agent 会自动响应。这允许你在不同平台上部署不同专长的 Agent,例如在 Telegram 上放置一个轻量问答 Agent,在 Discord 上放置一个代码助手 Agent。
256
+
257
+ ### 系统内置 Agent:配置助手
258
+
259
+ 「配置助手」是 MyAgent 的系统内置 Agent,负责新用户引导、配置说明、问题解答等工作。配置助手的核心配置(如系统提示词、权限设置)不可被用户修改,确保其始终能稳定地提供准确的配置指导。它的知识库中包含完整的配置使用说明文档,能够准确回答各种配置相关的问题。
260
+
261
+ ---
262
+
263
+ ## 5. 配置助手使用指南
264
+
265
+ ### 概述
266
+
267
+ 「配置助手」是 MyAgent 系统内置的智能引导 Agent,专为帮助用户快速上手和高效配置而设计。它拥有完整的配置知识库,能够准确回答关于 MyAgent 各项功能和配置的详细问题。与普通 Agent 不同,配置助手的核心配置受到系统保护,不会被用户意外修改,确保其引导功能的可靠性。
268
+
269
+ ### 功能特性
270
+
271
+ 配置助手提供以下核心功能:
272
+
273
+ 1. **功能介绍**:自动或按需向用户介绍 MyAgent 的各项核心功能,包括执行引擎、技能系统、记忆系统、Agent 间通信等模块的能力和使用方法。
274
+
275
+ 2. **配置引导**:在首次启动时自动激活,逐步引导用户完成 API Key 配置、模型选择、执行模式设置、权限管理等关键初始化步骤。对于高级配置项(如沙盒模式、跨电脑通信、组织知识库等),配置助手也会在适当时机向用户介绍和推荐。
276
+
277
+ 3. **Agent 创建辅助**:帮助用户创建新的自定义 Agent,包括编写系统提示词、设置权限、选择模型、绑定聊天平台等。配置助手会根据用户的描述自动生成合适的 Agent 配置。
278
+
279
+ 4. **问题解答**:针对用户在使用过程中遇到的各类问题,配置助手能够基于其内置知识库提供准确的解答。无论是如何更换模型、如何接入聊天平台、还是如何排查执行错误,配置助手都能给出具体的操作指导。
280
+
281
+ ### 知识库
282
+
283
+ 配置助手的知识库包含完整的配置使用说明文档(即本文档),涵盖了 MyAgent 的所有功能模块和配置项。知识库内容与软件版本同步更新,确保用户始终获取到最新、最准确的信息。
284
+
285
+ ### 安全机制
286
+
287
+ 配置助手在帮助用户修改配置时,会自动执行以下安全流程:
288
+
289
+ - **配置备份**:每次修改配置前,自动备份当前配置文件到 `~/.myagent/data/backups/` 目录,备份文件包含时间戳,便于回滚。
290
+ - **配置校验**:修改完成后,自动对配置文件进行格式验证和逻辑校验,确保 JSON 格式正确、必填字段完整、值范围合理。
291
+ - **原子写入**:使用"写入临时文件 → 重命名"的方式确保配置文件写入的原子性,避免写入过程中断导致配置损坏。
292
+ - **回滚机制**:如果校验失败,自动从最近的备份中恢复配置,确保系统始终处于可用状态。
293
+
294
+ 由于以上安全机制的存在,配置助手"永远不会改坏配置"——即使修改过程中出现异常,系统也能安全恢复到之前的工作状态。
295
+
296
+ ---
297
+
298
+ ## 6. 执行引擎
299
+
300
+ ### 支持的语言
301
+
302
+ MyAgent 的执行引擎支持四种编程语言/命令行环境,覆盖了日常自动化的绝大多数场景:
303
+
304
+ | 语言 | 标识 | 适用场景 |
305
+ |------|------|---------|
306
+ | Python | `python` | 数据处理、文件操作、API 调用、自动化脚本 |
307
+ | Shell/Bash | `shell` / `bash` | 系统管理、文件操作、管道处理(Unix/macOS/Linux) |
308
+ | PowerShell | `powershell` | Windows 系统管理、Office 自动化、.NET 交互 |
309
+ | CMD | `cmd` | Windows 基础命令执行 |
310
+
311
+ 系统还支持 `system` 标识,会根据当前操作系统自动选择合适的 Shell 执行命令。
312
+
313
+ ### 安全特性
314
+
315
+ 执行引擎内置了多层安全防护机制:
316
+
317
+ - **危险命令拦截**:通过正则表达式(含词边界匹配)和字符串黑名单双重检测,拦截 `rm -rf /`、`format C:`、`dd if=/dev/zero`、Fork Bomb 等危险操作。覆盖 Unix 和 Windows 两大类破坏性命令。
318
+ - **超时控制**:每个执行任务都有独立的超时设置(默认 300 秒),超时后进程会被强制终止,防止死循环或无限等待耗尽系统资源。
319
+ - **权限检查**:执行前会检查当前 Agent 是否拥有 `execution` 权限,无权限时直接拒绝执行。
320
+ - **输出长度限制**:执行输出最大长度默认为 50000 字符,防止大量输出占用内存。
321
+
322
+ ### 自动修复
323
+
324
+ 当代码执行失败时,执行引擎会尝试自动修复常见错误,大幅减少人工干预的需要:
325
+
326
+ **Python 自动修复(12 种模式)**:ModuleNotFoundError(自动 pip install)、ImportError(建议正确导入路径)、NameError(拼写检查和自动替换)、SyntaxError(自动补全括号)、TypeError(函数签名建议)、FileNotFoundError(路径建议)、PermissionError(权限提示)、ConnectionError(网络诊断)、UnicodeEncodeError(编码修复)、IndentationError(缩进修复)、KeyError(可用 key 建议)、JSONDecodeError(JSON 校验建议)。
327
+
328
+ **Shell 自动修复(4 种模式)**:command not found(跨平台命令别名建议)、No such file or directory(路径纠正)、Permission denied(chmod 提示)、syntax error near unexpected token(引号匹配修复)。
329
+
330
+ ### 超时诊断
331
+
332
+ 当命令执行超时时,系统会向 LLM 发送包含详细诊断信息的结构化消息,包括已产生的输出、标准错误内容、超时时长等。LLM 会分析可能的超时原因(死循环、数据量过大、网络等待、输入阻塞等),并给出具体的改进建议,如增加超时时间、优化算法、分批处理数据等。
333
+
334
+ ### 沙盒模式
335
+
336
+ 在沙盒模式下,所有代码在 Docker 容器中执行,提供额外的隔离保护。容器默认限制为 512MB 内存、1 个 CPU 核心、最多 64 个进程,且禁止网络访问。工作目录以只读方式挂载到容器内。如果需要网络访问,可通过配置 `sandbox_network: true` 开启。当 Docker 不可用时,系统会自动回退到本机执行模式并记录警告日志。
337
+
338
+ ---
339
+
340
+ ## 7. 技能系统
341
+
342
+ ### 内置技能
343
+
344
+ MyAgent 内置了丰富的技能集,覆盖文件操作、网络搜索、系统管理、浏览器自动化等常用场景:
345
+
346
+ - **文件操作技能**:FileRead(文件读取)、FileWrite(文件写入)、FileList(目录列表)、FileDelete(文件删除)、FileSearch(文件搜索)、FileMove(文件移动)
347
+ - **网络搜索技能**:WebSearch(网络搜索)、WebRead(网页内容提取)、URLRead(URL 内容读取)
348
+ - **系统操作技能**:SystemInfo(系统信息)、ProcessList(进程列表)、CommandRun(命令执行)、EnvironmentGet(环境变量读取)、PathExpand(路径展开)
349
+ - **浏览器自动化技能**:BrowserOpen(打开网页)、BrowserClick(点击元素)、BrowserFill(填写表单)
350
+
351
+ ### 外部技能
352
+
353
+ 除了内置技能外,MyAgent 支持从 **OpenClaw 技能市场** 安装外部技能。外部技能可以扩展 MyAgent 的能力边界,例如文档生成(DOCX、PPTX、PDF)、图像处理、金融数据分析、视频理解、语音合成等。每个外部技能都有独立的 SKILL.md 说明文件,定义了技能的输入输出格式和使用方法。
354
+
355
+ ### 技能调度
356
+
357
+ 所有技能的执行由 MainAgent 统一调度。当用户提出需求时,MainAgent 会判断需要调用哪些技能,并将执行指令传递给 ToolAgent。ToolAgent 负责实际调用技能并返回执行结果。如果某个技能执行失败,MainAgent 会根据错误类型决定是重试、换用其他技能,还是向用户报告错误并请求进一步指示。
358
+
359
+ ---
360
+
361
+ ## 8. 记忆系统
362
+
363
+ ### 三层记忆架构
364
+
365
+ MyAgent 的记忆系统采用三层架构设计,模拟人类记忆的工作方式:
366
+
367
+ **短期记忆(Short-term Memory)**:对应当前对话上下文,保存最近 N 轮对话(默认 50 轮)的用户消息和助手回复。短期记忆是 Agent 在对话中保持连贯性的基础,当对话轮数超过阈值时,系统会自动对早期对话进行摘要压缩,保留关键信息。
368
+
369
+ **工作记忆(Working Memory)**:保存当前任务的进度信息、执行步骤、中间结果等动态数据。工作记忆帮助 Agent 在多步骤任务中保持状态一致性,例如在执行一个复杂的数据处理流程时,Agent 需要记住已经完成了哪些步骤、当前正在处理什么、接下来还需要做什么。
370
+
371
+ **长期记忆(Long-term Memory)**:持久化存储用户偏好、技能使用经验、历史任务总结等重要信息。长期记忆跨越会话边界存在,即使用户关闭 MyAgent 后重新打开,之前积累的经验和偏好仍然可用。长期记忆存储在本地 SQLite 数据库中,默认路径为 `~/.myagent/data/memory.db`。
372
+
373
+ ### 语义搜索
374
+
375
+ 记忆系统内置了基于 TF-IDF 的语义搜索能力,支持中英文文本检索。用户或 Agent 可以通过自然语言描述来搜索历史记忆,系统会返回语义最相关的记忆条目。这使得 Agent 能够在长期记忆中快速找到与当前任务相关的历史经验,避免重复犯错或重复工作。
376
+
377
+ ### 记忆管理
378
+
379
+ 记忆系统具备自动管理能力:
380
+
381
+ - **自动淘汰**:当记忆条目数量超过上限(工作记忆默认 100 条)时,系统会根据访问频率和时间衰减策略自动淘汰不常用的记忆条目,确保记忆库的高效运行。
382
+ - **跨会话检索**:在新的对话会话中,Agent 仍然可以检索和引用历史会话中保存的长期记忆,实现经验积累和知识传承。
383
+ - **自动总结**:当对话轮数达到阈值(默认 20 轮)时,系统会自动对对话内容进行总结,将关键信息提取并保存到长期记忆中,防止重要信息在短期记忆滚动时丢失。
384
+
385
+ ---
386
+
387
+ ## 9. 群聊功能
388
+
389
+ MyAgent 支持创建 Agent 群组,实现多个 Agent 之间的群聊协作。群聊功能让多个 Agent 能够像团队成员一样在一个共享对话空间中交流信息和协同工作。
390
+
391
+ ### 创建群组
392
+
393
+ 用户可以通过 Web 管理后台或直接在对话中创建群组。创建时需要指定群组名称,并可以添加初始成员 Agent。创建后,群主(owner)可以随时添加或移除成员。
394
+
395
+ ### 成员角色
396
+
397
+ 群组中的每个成员拥有以下角色之一:
398
+
399
+ | 角色 | 权限 |
400
+ |------|------|
401
+ | owner(群主) | 添加/移除成员、修改群设置、解散群组 |
402
+ | admin(管理员) | 添加/移除成员、管理群消息 |
403
+ | member(普通成员) | 参与群聊、发送消息 |
404
+
405
+ ### 群消息记录
406
+
407
+ 群组中的所有消息都会被完整记录,包括发送者、时间戳、消息内容等。群消息记录支持历史查看和搜索,方便用户回顾 Agent 之间的协作过程和决策依据。群组数据存储在 `~/.myagent/data/` 目录下。
408
+
409
+ ---
410
+
411
+ ## 10. Agent间通信
412
+
413
+ MyAgent 实现了基于 **AICQ 协议** 的端对端加密通信系统,支持本机 Agent 间通信和跨电脑 Agent 间通信两种模式。所有通信内容均经过加密处理,确保消息的机密性和完整性。
414
+
415
+ ### 本地通信(LocalChannel)
416
+
417
+ LocalChannel 用于同一台电脑上运行的 Agent 之间的通信。基于 asyncio.Queue 实现进程内消息传递,消息投递延迟极低(毫秒级别)。每个 Agent 启动时会自动在共享 Broker 中注册消息队列,其他 Agent 可以通过队列 ID 向其发送消息。本地通信默认开启,所有 Agent 均可使用。
418
+
419
+ ### 跨电脑通信(RemoteChannel)
420
+
421
+ RemoteChannel 通过 AICQ 中继服务器实现跨电脑、跨网络的 Agent 通信。基于 WebSocket 长连接与中继服务器保持连接,支持自动重连和心跳检测。当接收方离线时,消息会被自动缓存到本地 SQLite 离线消息队列中,待接收方上线后自动重发。跨电脑通信默认关闭,需要手动启用并配置。
422
+
423
+ ### 端对端加密
424
+
425
+ 通信系统采用以下加密方案确保安全:
426
+
427
+ - **身份认证**:Ed25519 签名密钥对作为 Agent 的唯一身份标识,每条消息都附带签名,接收方可验证消息确实来自声称的发送方。
428
+ - **密钥交换**:X25519 Diffie-Hellman 密钥交换协议,每次与新的 Agent 通信时自动协商共享密钥。
429
+ - **消息加密**:AES-256-GCM 对称加密,确保消息内容在传输过程中的机密性和完整性。
430
+
431
+ ### 通信配置
432
+
433
+ ```json
434
+ {
435
+ "communication": {
436
+ "enabled": false,
437
+ "server_url": "wss://aicq.online/ws",
438
+ "agent_id": "",
439
+ "private_key": "",
440
+ "max_friends": 200,
441
+ "auto_accept": false
442
+ }
443
+ }
444
+ ```
445
+
446
+ 首次启用时,系统会自动生成 Ed25519 密钥对。将公钥分享给其他 Agent 即可建立加密通信通道。
447
+
448
+ ---
449
+
450
+ ## 11. 组织功能
451
+
452
+ MyAgent 支持组织级别的知识管理功能,适合团队或组织内部共享知识和协作使用。
453
+
454
+ ### 组织知识库
455
+
456
+ 组织知识库是面向整个组织的共享知识存储空间,支持上传文档、文本片段等知识内容。知识库中的内容可以被组织内的所有 Agent 检索和引用,为 Agent 提供统一的知识基础。知识库采用 RAG(检索增强生成)技术,在 Agent 回答问题时自动检索相关知识片段,提高回答的准确性和专业性。
457
+
458
+ ### 组织信息
459
+
460
+ 每个组织可以配置一个 `organization.md` 文件,描述组织的基本信息、业务领域、专有术语、协作规范等。Agent 在与组织成员交互时会参考这些信息,确保回复内容符合组织的风格和规范。
461
+
462
+ ### 知识库管理员
463
+
464
+ 组织可以指定一个"知识库管理员"角色(通过 Agent 路径指定,如 `"manager"`)。只有被指定为知识库管理员的 Agent 才有权限修改组织知识库的内容,其他 Agent 只能读取和检索。这一机制防止知识库被不当修改,保证组织知识的可靠性。
465
+
466
+ ### 启用组织功能
467
+
468
+ ```json
469
+ {
470
+ "organization": {
471
+ "enabled": true,
472
+ "knowledge_admin": "manager"
473
+ }
474
+ }
475
+ ```
476
+
477
+ ---
478
+
479
+ ## 12. 聊天平台接入
480
+
481
+ MyAgent 支持将 Agent 接入多种主流聊天平台,使用户可以通过日常使用的通讯工具与 Agent 交互,无需打开专门的应用界面。
482
+
483
+ ### 支持的平台
484
+
485
+ | 平台 | 标识 | 说明 |
486
+ |------|------|------|
487
+ | Telegram | `telegram` | 通过 Bot Token 接入 |
488
+ | Discord | `discord` | 通过 Bot Token 接入 |
489
+ | 飞书 | `feishu` | 通过 App ID + App Secret 接入 |
490
+ | QQ | `qq` | 通过 Bot Token 接入 |
491
+ | 微信 | `wechat` | 通过 Token 接入 |
492
+
493
+ ### 平台绑定
494
+
495
+ 每个聊天平台可以绑定不同的 Agent。例如,你可以将 Telegram 绑定到一个"日常助手"Agent,将 Discord 绑定到一个"编程助手"Agent,将飞书绑定到一个"工作助手"Agent。不同平台上的消息会被路由到对应的 Agent 进行处理。
496
+
497
+ ### Token 配置方式
498
+
499
+ **配置文件方式**:
500
+
501
+ ```json
502
+ {
503
+ "chat_platforms": [
504
+ {
505
+ "enabled": true,
506
+ "platform": "telegram",
507
+ "token": "your-telegram-bot-token",
508
+ "allowed_users": ["user_id_1", "user_id_2"]
509
+ },
510
+ {
511
+ "enabled": true,
512
+ "platform": "feishu",
513
+ "app_id": "your-feishu-app-id",
514
+ "app_secret": "your-feishu-app-secret",
515
+ "webhook_url": "https://your-domain.com/webhook/feishu"
516
+ }
517
+ ]
518
+ }
519
+ ```
520
+
521
+ **环境变量方式**:
522
+
523
+ ```bash
524
+ export MYAGENT_TELEGRAM_TOKEN="your-telegram-bot-token"
525
+ export MYAGENT_DISCORD_TOKEN="your-discord-bot-token"
526
+ export MYAGENT_FEISHU_APP_ID="your-feishu-app-id"
527
+ export MYAGENT_FEISHU_APP_SECRET="your-feishu-app-secret"
528
+ export MYAGENT_QQ_TOKEN="your-qq-bot-token"
529
+ export MYAGENT_WECHAT_TOKEN="your-wechat-token"
530
+ ```
531
+
532
+ 通过环境变量配置的 Token 会自动创建对应的聊天平台配置条目并启用。
533
+
534
+ ### 用户白名单
535
+
536
+ 每个平台支持配置 `allowed_users` 白名单列表。当白名单为空时,所有用户均可与 Agent 交互;当白名单非空时,只有在白名单中的用户才能触发 Agent 响应,其他用户的消息会被忽略。
537
+
538
+ ---
539
+
540
+ ## 13. 自动更新
541
+
542
+ MyAgent 内置了自动更新机制,确保用户始终使用最新版本的软件。
543
+
544
+ ### 版本检查
545
+
546
+ 系统每小时自动检查一次是否有新版本可用(可通过配置调整检查间隔)。检查时会比对当前版本号与远程最新版本号,如果有新版本且当前没有正在执行的任务,会提示用户进行更新。版本号优先从环境变量 `MYAGENT_VERSION` 读取,其次从 git tag 获取,最后使用基线版本号。
547
+
548
+ ### 热更新机制
549
+
550
+ MyAgent 支持多种更新类型,从轻量到重量依次为:
551
+
552
+ | 类型 | 说明 | 是否中断任务 |
553
+ |------|------|------------|
554
+ | CONFIG | 仅配置热重载 | 否(Agent 暂停后恢复) |
555
+ | CODE | 代码模块热重载(importlib.reload) | 否 |
556
+ | DEPENDENCY | 依赖包更新(pip install) | 否 |
557
+ | FULL | 全量更新(含进程重启) | 是(任务完成后重启) |
558
+
559
+ ### 代码热重载
560
+
561
+ 对于代码级别的更新(CODE 类型),系统使用 Python 的 `importlib.reload` 机制在不中断运行中的 Agent 任务的情况下更新代码模块。更新过程通过 ConfigBroadcaster 广播机制通知所有活跃 Agent 暂停,等待代码更新完成后自动恢复继续执行。这确保了长时间运行的任务不会因为代码更新而丢失进度。
562
+
563
+ ### 更新后自动重启
564
+
565
+ 全量更新(FULL 类型)会在所有任务完成后自动重启 MyAgent 进程。重启时通过环境变量标记(`MYAGENT_UPDATED=true`、`MYAGENT_UPDATED_FROM`、`MYAGENT_UPDATED_TO`)传递更新信息,启动后会自动检测并记录更新日志。
566
+
567
+ ---
568
+
569
+ ## 14. 配置热重载
570
+
571
+ ### ConfigBroadcaster 广播机制
572
+
573
+ MyAgent 实现了基于 `asyncio.Event` 的配置热重载广播机制(ConfigBroadcaster),支持在不重启服务和中断任务的情况下动态更新配置。
574
+
575
+ 工作流程如下:
576
+
577
+ 1. **任务注册**:Agent 在开始执行任务时,会向 ConfigBroadcaster 注册自己的任务 ID。
578
+ 2. **暂停检查**:Agent 在每次迭代循环中调用 `check_and_wait()` 方法,检查是否有配置重载请求。
579
+ 3. **暂停等待**:如果有重载请求,Agent 会保存当前上下文状态(checkpoint)并暂停执行,等待配置更新完成。
580
+ 4. **重载执行**:系统从配置文件重新加载配置,更新 LLM 客户端、执行引擎等组件的参数。
581
+ 5. **恢复执行**:配置更新完成后,所有暂停的 Agent 从 checkpoint 恢复继续执行,使用新的配置参数。
582
+
583
+ 整个过程基于异步事件驱动,无需轮询,效率极高。配置版本号(`reload_version`)在每次热重载后递增,Agent 可以根据版本号判断配置是否已更新。
584
+
585
+ ### 确保配置变更不中断任务
586
+
587
+ 配置热重载机制的核心价值在于确保配置变更不会中断正在执行的任务。无论是修改 LLM 参数(如切换模型、调整温度)、更改执行引擎设置(如超时时间、重试次数),还是更新权限配置,所有变更都会在当前迭代完成后安全地应用到下一个迭代中。如果某个任务正在执行代码,系统会等待代码执行完成后再应用配置变更,不会强制中断代码执行。
588
+
589
+ ---
590
+
591
+ ## 15. 常见问题 FAQ
592
+
593
+ ### Q: 如何更换模型?
594
+
595
+ **A:** 有三种方式可以更换模型:
596
+
597
+ 1. **配置文件**:编辑 `~/.myagent/config.json`,修改 `llm` 部分的 `provider`、`model`、`api_key`、`base_url` 等字段。
598
+ 2. **环境变量**:设置 `MYAGENT_LLM_PROVIDER`、`MYAGENT_LLM_MODEL`、`MYAGENT_LLM_API_KEY` 等环境变量,重启 MyAgent 后生效。
599
+ 3. **Web 管理后台**:访问 `http://127.0.0.1:8765/ui/`,在"模型设置"页面中切换模型。
600
+
601
+ 配置支持热重载,修改后无需重启即可生效。如果使用模型库功能,可以为不同 Agent 分配不同模型。
602
+
603
+ ### Q: 如何添加更多 Agent?
604
+
605
+ **A:** 你可以通过以下方式创建新的 Agent:
606
+
607
+ 1. **Web 管理后台**:在 Agent 管理页面点击"新建 Agent",填写名称、描述和系统提示词。
608
+ 2. **对话创建**:直接在聊天中告诉配置助手你的需求,如"帮我创建一个翻译助手",配置助手会引导你完成创建。
609
+ 3. **手动配置**:在 `~/.myagent/data/` 目录下创建 Agent 配置文件,包含 `soul.md`(系统提示词)、`identity.md`(身份)和 `user.md`(用户画像)。
610
+
611
+ 创建后可以为新 Agent 设置独立的权限、模型和聊天平台绑定。
612
+
613
+ ### Q: 如何接入聊天平台?
614
+
615
+ **A:** 在 `~/.myagent/config.json` 的 `chat_platforms` 数组中添加平台配置,或通过环境变量设置 Token。以 Telegram 为例:在 `chat_platforms` 中添加 `{"enabled": true, "platform": "telegram", "token": "your-bot-token"}`,或在终端中执行 `export MYAGENT_TELEGRAM_TOKEN="your-bot-token"`。配置完成后重启 MyAgent,对应的 Bot 即会自动上线。
616
+
617
+ ### Q: 如何导入/导出配置?
618
+
619
+ **A:** 通过 Web 管理后台的"配置导入/导出"功能,可以一键导出完整配置(支持脱敏处理,隐藏 API Key 等敏感信息),也可以从 JSON 文件导入配置。导入时支持"完全覆盖"和"合并模式"两种策略。合并模式下只覆盖有实际差异的字段,保留已有配置不变。此外,系统在每次修改配置前会自动备份到 `~/.myagent/data/backups/` 目录。
620
+
621
+ ### Q: 执行命令超时怎么办?
622
+
623
+ **A:** 执行超时通常有以下几种原因和解决方案:
624
+
625
+ - **死循环或无限等待**:检查代码中是否存在没有退出条件的循环,或是否缺少必要的输入导致程序阻塞。
626
+ - **处理数据量过大**:尝试分批处理数据,或增加超时时间(在配置文件中修改 `executor.timeout`)。
627
+ - **网络请求超时**:检查网络连接状态,或为网络请求添加合理的超时参数。
628
+ - **默认超时时间不足**:通过配置文件将 `executor.timeout` 调大(如从 300 秒调整为 600 秒),或在执行时指定更大的超时值。
629
+
630
+ 当命令超时时,MyAgent 会自动分析超时原因并给出改进建议。
631
+
632
+ ### Q: 如何使用沙盒模式?
633
+
634
+ **A:** 在配置文件中设置 `executor.execution_mode` 为 `"sandbox"` 即可启用沙盒模式。沙盒模式需要预先安装 Docker。系统会在启动时自动检测 Docker 可用性,如果 Docker 不可用会回退到本机模式并记录警告。沙盒配置项包括:`sandbox_image`(Docker 镜像,默认 `python:3.12-slim`)、`sandbox_network`(是否允许网络,默认关闭)、`sandbox_memory`(内存限制,默认 `512m`)。
635
+
636
+ ---
637
+
638
+ ## 16. 配置文件参考
639
+
640
+ ### 文件路径
641
+
642
+ | 类型 | 路径 | 说明 |
643
+ |------|------|------|
644
+ | 配置文件 | `~/.myagent/config.json` | 主配置文件(LLM、执行引擎、记忆系统等) |
645
+ | 数据目录 | `~/.myagent/data/` | Agent 数据、记忆数据库、权限配置等 |
646
+ | 日志目录 | `~/.myagent/logs/` | 运行日志文件 |
647
+ | 工作目录 | `~/.myagent/data/workspace/` | 默认文件操作工作区 |
648
+ | 配置备份 | `~/.myagent/data/backups/` | 配置文件自动备份 |
649
+
650
+ ### 完整配置结构
651
+
652
+ 以下是 `config.json` 的完整结构说明(含默认值):
653
+
654
+ ```json
655
+ {
656
+ "llm": {
657
+ "provider": "openai",
658
+ "api_key": "",
659
+ "base_url": "https://api.openai.com/v1",
660
+ "model": "gpt-4",
661
+ "temperature": 0.1,
662
+ "max_tokens": 4096,
663
+ "timeout": 120,
664
+ "max_retries": 3,
665
+ "anthropic_api_key": "",
666
+ "ollama_base_url": "http://localhost:11434",
667
+ "ollama_model": "llama3"
668
+ },
669
+ "memory": {
670
+ "db_path": "",
671
+ "max_short_term": 50,
672
+ "max_working": 100,
673
+ "auto_summarize": true,
674
+ "summarize_threshold": 20
675
+ },
676
+ "executor": {
677
+ "timeout": 300,
678
+ "max_retries": 2,
679
+ "auto_fix": true,
680
+ "max_output_length": 50000,
681
+ "execution_mode": "local",
682
+ "sandbox_image": "python:3.12-slim",
683
+ "sandbox_network": false,
684
+ "sandbox_memory": "512m",
685
+ "allowed_dirs": [],
686
+ "blocked_commands": ["rm -rf /", "format", "del /f /s /q C:\\", "mkfs", "dd if=/dev/zero"]
687
+ },
688
+ "agent": {
689
+ "max_iterations": 30,
690
+ "max_parallel": 3,
691
+ "verbose": true
692
+ },
693
+ "tray": {
694
+ "auto_start": false,
695
+ "show_notifications": true,
696
+ "icon_path": ""
697
+ },
698
+ "organization": {
699
+ "enabled": false,
700
+ "knowledge_admin": ""
701
+ },
702
+ "communication": {
703
+ "enabled": false,
704
+ "server_url": "wss://aicq.online/ws",
705
+ "agent_id": "",
706
+ "private_key": "",
707
+ "max_friends": 200,
708
+ "auto_accept": false
709
+ },
710
+ "chat_platforms": [],
711
+ "models_library": [],
712
+ "log_level": "INFO",
713
+ "data_dir": "",
714
+ "language": "zh-CN"
715
+ }
716
+ ```
717
+
718
+ ---
719
+
720
+ ## 17. 命令行使用
721
+
722
+ ### 启动参数
723
+
724
+ MyAgent 支持以下命令行启动参数:
725
+
726
+ | 参数 | 说明 | 示例 |
727
+ |------|------|------|
728
+ | `--tray` | 以系统托盘模式运行(后台常驻) | `python main.py --tray` |
729
+ | `--web` | 启动 Web 管理后台(可指定端口) | `python main.py --web 8765` |
730
+ | `--port` | 指定 Web UI 端口(默认 8765) | `python main.py --port 9000` |
731
+ | `--autostart` | 设置开机自启 | `python main.py --autostart` |
732
+ | `--no-autostart` | 取消开机自启 | `python main.py --no-autostart` |
733
+ | `--config` | 指定配置文件路径 | `python main.py --config /path/to/config.json` |
734
+ | `--debug` | 启用调试模式(日志级别 DEBUG) | `python main.py --debug` |
735
+
736
+ ### CLI 交互命令
737
+
738
+ 进入 CLI 模式后,支持以下内置命令(直接在输入框中输入):
739
+
740
+ | 命令 | 说明 |
741
+ |------|------|
742
+ | `help` | 显示帮助信息 |
743
+ | `status` | 查看系统状态(LLM、执行引擎、记忆、任务队列等) |
744
+ | `skills` | 列出所有已注册的技能 |
745
+ | `memory` | 查看记忆系统统计(短期/工作/长期记忆条数) |
746
+ | `permissions` | 查看权限配置(全局默认 + Agent 自定义) |
747
+ | `sessions` | 查看当前会话信息 |
748
+ | `session <id>` | 切换到指定会话 |
749
+ | `clear` | 清除当前会话的对话历史 |
750
+ | `quit` / `exit` | 退出 MyAgent |
751
+
752
+ ### 会话管理
753
+
754
+ MyAgent 支持多会话管理。每个会话拥有独立的对话历史和上下文。通过 `session <名称>` 命令可以在不同会话之间切换。不同的聊天平台消息也会被分配到独立的会话 ID 中,确保各平台之间的对话互不干扰。使用 `clear` 命令可以清除当前会话的对话历史(不影响长期记忆)。
755
+
756
+ ---
757
+
758
+ ## 18. Web管理后台
759
+
760
+ ### 访问方式
761
+
762
+ Web 管理后台默认运行在本地 `http://127.0.0.1:8765/ui/`,可通过以下方式启动:
763
+
764
+ ```bash
765
+ # 方式一:启动时指定 --web 参数
766
+ python main.py --web
767
+
768
+ # 方式二:使用 --tray 模式(默认开启管理后台)
769
+ python main.py --tray
770
+
771
+ # 方式三:自定义端口
772
+ python main.py --web 9000
773
+ ```
774
+
775
+ 启动后也可以通过系统托盘菜单中的"打开管理后台"选项快速访问。
776
+
777
+ ### 功能模块
778
+
779
+ Web 管理后台包含以下功能模块:
780
+
781
+ | 模块 | 功能 |
782
+ |------|------|
783
+ | **仪表盘** | 系统运行状态概览(版本、运行时间、活跃任务数、记忆统计等) |
784
+ | **Agent 管理** | 创建/编辑/删除 Agent,配置系统提示词、权限、模型绑定 |
785
+ | **平台配置** | 管理聊天平台接入(Telegram、Discord、飞书、QQ、微信) |
786
+ | **会话管理** | 查看和清理会话记录 |
787
+ | **记忆管理** | 浏览搜索记忆条目,手动清理长期记忆 |
788
+ | **模型设置** | 配置 LLM 提供商、API Key、模型库管理 |
789
+ | **执行引擎** | 执行模式切换(本机/沙盒)、超时设置、安全配置 |
790
+ | **技能管理** | 查看已注册技能列表,安装外部技能 |
791
+ | **工作目录** | 文件浏览器,查看和管理工作目录中的文件 |
792
+ | **日志查看** | 实时查看运行日志,按级别筛选 |
793
+ | **配置导入/导出** | 一键导出完整配置(支持脱敏),从文件导入配置 |
794
+
795
+ ### 聊天界面
796
+
797
+ 除了管理后台,MyAgent 还提供了一个独立的聊天界面,访问地址为 `http://127.0.0.1:8765/ui/chat.html`。聊天界面提供与 CLI 模式相同的对话功能,但拥有更丰富的界面展示(如 Markdown 渲染、代码高亮、执行结果展示等),适合需要可视化交互的场景。
@@ -21,7 +21,7 @@ NO_DEPS=false
21
21
  DRY_RUN=false
22
22
  SCRIPT_URL="https://raw.githubusercontent.com/ctz168/myagent/main/install/install.sh"
23
23
  PKG_NAME="myagent-ai"
24
- PKG_VERSION="1.1.0"
24
+ PKG_VERSION="1.2.1"
25
25
 
26
26
  for arg in "$@"; do
27
27
  case "$arg" in
package/main.py CHANGED
@@ -586,7 +586,7 @@ class MyAgentApp:
586
586
  # 系统托盘
587
587
  # ==============================================================================
588
588
 
589
- def create_tray_icon(app: MyAgentApp, web_port: int = 8765):
589
+ def create_tray_icon(app: MyAgentApp, web_port: int = 8767):
590
590
  """
591
591
  创建系统托盘图标。
592
592
 
@@ -838,7 +838,7 @@ def create_tray_icon(app: MyAgentApp, web_port: int = 8765):
838
838
  return tray_icon
839
839
 
840
840
 
841
- def run_with_tray(app: MyAgentApp, web_port: int = 8765):
841
+ def run_with_tray(app: MyAgentApp, web_port: int = 8767):
842
842
  """在系统托盘中运行 MyAgent"""
843
843
  tray = create_tray_icon(app, web_port)
844
844
  if tray is None:
@@ -979,9 +979,9 @@ def main():
979
979
 
980
980
  parser = argparse.ArgumentParser(description="MyAgent - 本地桌面端执行型AI助手")
981
981
  parser.add_argument("--tray", action="store_true", help="以系统托盘模式运行")
982
- parser.add_argument("--web", type=int, nargs="?", const=8765, default=None,
983
- help="启动管理后台 Web UI (可选端口,默认8765)")
984
- parser.add_argument("--port", type=int, default=8765, help="Web UI 端口")
982
+ parser.add_argument("--web", type=int, nargs="?", const=8767, default=None,
983
+ help="启动管理后台 Web UI (可选端口,默认8767)")
984
+ parser.add_argument("--port", type=int, default=8767, help="Web UI 端口")
985
985
  parser.add_argument("--autostart", action="store_true", help="设置开机自启")
986
986
  parser.add_argument("--no-autostart", action="store_true", help="取消开机自启")
987
987
  parser.add_argument("--config", type=str, help="指定配置文件路径")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  "start:web": "python main.py --web",
12
12
  "start:tray": "python main.py --tray",
13
13
  "start:server": "python main.py --server",
14
- "install:deps": "pip install -r requirements.txt",
14
+ "install:deps": "pip install -r requirements.txt --break-system-packages 2>/dev/null || pip install -r requirements.txt",
15
15
  "test": "python -m pytest tests/"
16
16
  },
17
17
  "keywords": [
@@ -50,6 +50,7 @@
50
50
  "requirements.txt",
51
51
  "start.sh",
52
52
  "install/",
53
+ "docs/",
53
54
  "core/",
54
55
  "memory/",
55
56
  "executor/",
package/start.sh CHANGED
@@ -1,9 +1,42 @@
1
1
  #!/bin/bash
2
2
  # MyAgent Unix/macOS 启动脚本
3
3
  # 用法: ./start.sh [cli|web|tray|server|setup]
4
+ # 支持 npm 全局安装后从任意目录运行
4
5
 
5
6
  set -euo pipefail
6
7
 
8
+ # ── 解析脚本真实路径(兼容 symlink) ─────────
9
+ # npm 全局安装时 start.sh 会被 symlink 到 /usr/local/bin/myagent-ai
10
+ # 需要解析 symlink 找到实际的包目录
11
+ resolve_script_dir() {
12
+ local src="${BASH_SOURCE[0]}"
13
+ # 循环解析所有 symlink
14
+ while [ -L "$src" ]; do
15
+ local dir="$(cd -P "$(dirname "$src")" && pwd)"
16
+ src="$(readlink "$src")"
17
+ # 如果是相对路径,拼接上目录
18
+ [[ "$src" != /* ]] && src="$dir/$src"
19
+ done
20
+ cd -P "$(dirname "$src")" && pwd
21
+ }
22
+
23
+ SCRIPT_DIR="$(resolve_script_dir)"
24
+ PROJECT_DIR="$SCRIPT_DIR"
25
+
26
+ # 如果 main.py 不在脚本目录(npm link 等场景),向上查找
27
+ if [ ! -f "$PROJECT_DIR/main.py" ]; then
28
+ # 尝试 npm global prefix 方式
29
+ NPM_PKG_DIR="$(npm root -g 2>/dev/null)/myagent-ai"
30
+ if [ -f "$NPM_PKG_DIR/main.py" ]; then
31
+ PROJECT_DIR="$NPM_PKG_DIR"
32
+ else
33
+ echo -e "\033[31m[✗]\033[0m 错误: 找不到 main.py"
34
+ echo " 脚本目录: $SCRIPT_DIR"
35
+ echo " 请确保从正确位置运行,或重新安装: npm install -g myagent-ai"
36
+ exit 1
37
+ fi
38
+ fi
39
+
7
40
  BOLD='\033[1m'
8
41
  ACCENT='\033[36m'
9
42
  INFO='\033[90m'
@@ -38,6 +71,8 @@ if [ -z "$PY" ]; then
38
71
  echo " macOS: brew install python@3.12"
39
72
  echo " Linux: sudo apt install python3.12 python3-pip"
40
73
  echo " Windows: https://www.python.org/downloads/"
74
+ echo ""
75
+ echo " 一键安装: curl -fsSL https://raw.githubusercontent.com/ctz168/myagent/main/install/install.sh | bash"
41
76
  exit 1
42
77
  fi
43
78
 
@@ -55,6 +90,29 @@ check_python_version() {
55
90
  }
56
91
  check_python_version
57
92
 
93
+ # ── pip install (处理 PEP668) ──────────────────────
94
+ pip_install() {
95
+ local req_file="$1"
96
+ $PY -m pip install -r "$req_file" --break-system-packages 2>/dev/null || \
97
+ $PY -m pip install -r "$req_file" 2>/dev/null || \
98
+ {
99
+ warn "pip install 失败 (可能受 PEP668 限制)"
100
+ info "尝试使用 venv 安装..."
101
+ local venv_dir="$HOME/.myagent/venv"
102
+ $PY -m venv "$venv_dir" 2>/dev/null
103
+ if [ -f "$venv_dir/bin/pip" ]; then
104
+ "$venv_dir/bin/pip" install -r "$req_file"
105
+ success "已安装到虚拟环境 $venv_dir"
106
+ info "启动时请使用: $venv_dir/bin/python main.py --web"
107
+ return 0
108
+ fi
109
+ err "所有安装方式均失败"
110
+ info "请手动安装: pip3 install -r $req_file --break-system-packages"
111
+ info "或使用虚拟环境: python3 -m venv venv && source venv/bin/activate && pip install -r $req_file"
112
+ return 1
113
+ }
114
+ }
115
+
58
116
  # ── 检查核心依赖 ─────────────────────────────────
59
117
  check_deps() {
60
118
  local missing=0
@@ -82,18 +140,14 @@ check_deps() {
82
140
  echo ""
83
141
  warn "部分核心依赖缺失,正在自动安装..."
84
142
  local req_file=""
85
- # 优先查找同目录 requirements.txt
86
- if [ -f "$(dirname "$0")/requirements.txt" ]; then
87
- req_file="$(dirname "$0")/requirements.txt"
143
+ # 优先查找项目目录 requirements.txt
144
+ if [ -f "$PROJECT_DIR/requirements.txt" ]; then
145
+ req_file="$PROJECT_DIR/requirements.txt"
88
146
  elif [ -f "requirements.txt" ]; then
89
147
  req_file="requirements.txt"
90
148
  fi
91
149
  if [ -n "$req_file" ]; then
92
- pip3 install -r "$req_file" --break-system-packages 2>/dev/null || \
93
- pip3 install -r "$req_file" 2>/dev/null || \
94
- pip install -r "$req_file" --break-system-packages 2>/dev/null || \
95
- pip install -r "$req_file" 2>/dev/null || \
96
- warn "自动安装失败,请手动运行: pip3 install -r requirements.txt"
150
+ pip_install "$req_file" || warn "依赖安装失败,请手动处理"
97
151
  else
98
152
  warn "未找到 requirements.txt,请手动安装依赖"
99
153
  fi
@@ -134,6 +188,9 @@ if [ -z "$MODE" ]; then
134
188
  esac
135
189
  fi
136
190
 
191
+ # 切换到项目目录(确保 main.py 的相对路径正确)
192
+ cd "$PROJECT_DIR"
193
+
137
194
  case "$MODE" in
138
195
  cli)
139
196
  check_deps
package/web/api_server.py CHANGED
@@ -2804,7 +2804,7 @@ class ApiServer:
2804
2804
  ok = mgr.clear_messages(gid)
2805
2805
  return web.json_response({"ok": ok})
2806
2806
 
2807
- async def start(self, port: int = 8765):
2807
+ async def start(self, port: int = 8767):
2808
2808
  # 加载禁用技能列表
2809
2809
  self._load_disabled_skills()
2810
2810