diff --git a/README.md b/README.md index 74b4bca..d84bb9a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # 简介 -> 该项目既是一个可以开箱即用的超级AI助理,也是一个支持高度扩展的Agent框架,可以通过为项目扩展大模型接口、接入渠道、内置工具、Skills系统来灵活实现各种定制需求。核心能力如下: +> 该项目既是一个可以开箱即用的超级AI助理,也是一个支持高FTS5 not available, using LIKE-based keyword searc度扩展的Agent框架,可以通过为项目扩展大模型接口、接入渠道、内置工具、Skills系统来灵活实现各种定制需求。核心能力如下: - ✅ **复杂任务规划**:能够理解复杂任务并自主规划执行,持续思考和调用工具直到完成目标,支持通过工具操作访问文件、终端、浏览器、定时任务等系统资源 - ✅ **长期记忆:** 自动将对话记忆持久化至本地文件和数据库中,包括全局记忆和天级记忆,支持关键词及向量检索 @@ -65,7 +65,7 @@ DEMO视频(对话模式):https://cdn.link-ai.tech/doc/cow_demo.mp4 >**2024.10.31:** [1.7.3版本](https://github.com/zhayujie/chatgpt-on-wechat/releases/tag/1.7.3) 程序稳定性提升、数据库功能、Claude模型优化、linkai插件优化、离线通知 -更多更新历史请查看: [更新日志](/docs/version/release-notes.md) +更多更新历史请查看: [更新日志](/docs/release/history.md)
diff --git a/agent/memory/storage.py b/agent/memory/storage.py index 8518e81..539aea1 100644 --- a/agent/memory/storage.py +++ b/agent/memory/storage.py @@ -71,7 +71,7 @@ class MemoryStorage: self.fts5_available = self._check_fts5_support() if not self.fts5_available: from common.log import logger - logger.warning("[MemoryStorage] FTS5 not available, using LIKE-based keyword search") + logger.debug("[MemoryStorage] FTS5 not available, using LIKE-based keyword search") # Check database integrity try: diff --git a/agent/prompt/builder.py b/agent/prompt/builder.py index 1a01520..d8f8401 100644 --- a/agent/prompt/builder.py +++ b/agent/prompt/builder.py @@ -49,10 +49,10 @@ class PromptBuilder: 构建完整的系统提示词 Args: - base_persona: 基础人格描述(会被context_files中的SOUL.md覆盖) + base_persona: 基础人格描述(会被context_files中的AGENT.md覆盖) user_identity: 用户身份信息 tools: 工具列表 - context_files: 上下文文件列表(SOUL.md, USER.md, README.md等) + context_files: 上下文文件列表(AGENT.md, USER.md, RULE.md等) skill_manager: 技能管理器 memory_manager: 记忆管理器 runtime_info: 运行时信息 @@ -99,13 +99,13 @@ def build_agent_system_prompt( 3. 记忆系统 - 独立的记忆能力 4. 工作空间 - 工作环境说明 5. 用户身份 - 用户信息(可选) - 6. 项目上下文 - SOUL.md, USER.md, AGENTS.md(定义人格和身份) + 6. 项目上下文 - AGENT.md, USER.md, RULE.md(定义人格、身份、规则) 7. 运行时信息 - 元信息(时间、模型等) Args: workspace_dir: 工作空间目录 language: 语言 ("zh" 或 "en") - base_persona: 基础人格描述(已废弃,由SOUL.md定义) + base_persona: 基础人格描述(已废弃,由AGENT.md定义) user_identity: 用户身份信息 tools: 工具列表 context_files: 上下文文件列表 @@ -139,7 +139,7 @@ def build_agent_system_prompt( if user_identity: sections.extend(_build_user_identity_section(user_identity, language)) - # 6. 项目上下文文件(SOUL.md, USER.md, AGENTS.md - 定义人格) + # 6. 项目上下文文件(AGENT.md, USER.md, RULE.md - 定义人格) if context_files: sections.extend(_build_context_files_section(context_files, language)) @@ -151,8 +151,8 @@ def build_agent_system_prompt( def _build_identity_section(base_persona: Optional[str], language: str) -> List[str]: - """构建基础身份section - 不再需要,身份由SOUL.md定义""" - # 不再生成基础身份section,完全由SOUL.md定义 + """构建基础身份section - 不再需要,身份由AGENT.md定义""" + # 不再生成基础身份section,完全由AGENT.md定义 return [] @@ -374,7 +374,7 @@ def _build_workspace_section(workspace_dir: str, language: str, is_first_convers "**路径使用规则** (非常重要):", "", f"1. **相对路径的基准目录**: 所有相对路径都是相对于 `{workspace_dir}` 而言的", - f" - ✅ 正确: 访问工作空间内的文件用相对路径,如 `SOUL.md`", + f" - ✅ 正确: 访问工作空间内的文件用相对路径,如 `AGENT.md`", f" - ❌ 错误: 用相对路径访问其他目录的文件 (如果它不在 `{workspace_dir}` 内)", "", "2. **访问其他目录**: 如果要访问工作空间之外的目录(如项目代码、系统文件),**必须使用绝对路径**", @@ -391,13 +391,13 @@ def _build_workspace_section(workspace_dir: str, language: str, is_first_convers "", "以下文件在会话启动时**已经自动加载**到系统提示词的「项目上下文」section 中,你**无需再用 read 工具读取它们**:", "", - "- ✅ `SOUL.md`: 已加载 - Agent的人格设定", + "- ✅ `AGENT.md`: 已加载 - 你的人格和灵魂设定", "- ✅ `USER.md`: 已加载 - 用户的身份信息", - "- ✅ `AGENTS.md`: 已加载 - 工作空间使用指南", + "- ✅ `RULE.md`: 已加载 - 工作空间使用指南和规则", "", "**交流规范**:", "", - "- 在对话中,不要直接输出工作空间中的技术细节,特别是不要输出 SOUL.md、USER.md、MEMORY.md 等文件名称", + "- 在对话中,不要直接输出工作空间中的技术细节,特别是不要输出 AGENT.md、USER.md、MEMORY.md 等文件名称", "- 例如用自然表达例如「我已记住」而不是「已更新 MEMORY.md」", "", ] @@ -416,10 +416,10 @@ def _build_workspace_section(workspace_dir: str, language: str, is_first_convers " - 我该怎么称呼你?", " - 你希望我们是什么样的交流风格?(一行列举选项:如专业严谨、轻松幽默、温暖友好、简洁高效等)", "4. **风格要求**:温暖自然、简洁清晰,整体控制在 100 字以内", - "5. 收到回复后,用 `write` 工具保存到 USER.md 和 SOUL.md", + "5. 收到回复后,用 `write` 工具保存到 USER.md 和 AGENT.md", "", "**重要提醒**:", - "- SOUL.md 和 USER.md 已经在系统提示词中加载,无需再次读取", + "- AGENT.md、USER.md、RULE.md 已经在系统提示词中加载,无需再次读取。不要将这些文件名直接发送给用户", "- 能力介绍和交流风格选项都只要一行,保持精简", "- 不要问太多其他信息(职业、时区等可以后续自然了解)", "", @@ -433,9 +433,9 @@ def _build_context_files_section(context_files: List[ContextFile], language: str if not context_files: return [] - # 检查是否有SOUL.md - has_soul = any( - f.path.lower().endswith('soul.md') or 'soul.md' in f.path.lower() + # 检查是否有AGENT.md + has_agent = any( + f.path.lower().endswith('agent.md') or 'agent.md' in f.path.lower() for f in context_files ) @@ -446,8 +446,8 @@ def _build_context_files_section(context_files: List[ContextFile], language: str "", ] - if has_soul: - lines.append("如果存在 `SOUL.md`,请体现其中定义的人格和语气。避免僵硬、模板化的回复;遵循其指导,除非有更高优先级的指令覆盖它。") + if has_agent: + lines.append("如果存在 `AGENT.md`,请体现其中定义的人格和语气。避免僵硬、模板化的回复;遵循其指导,除非有更高优先级的指令覆盖它。") lines.append("") # 添加每个文件的内容 diff --git a/agent/prompt/workspace.py b/agent/prompt/workspace.py index 47d2e33..714632c 100644 --- a/agent/prompt/workspace.py +++ b/agent/prompt/workspace.py @@ -15,9 +15,9 @@ from .builder import ContextFile # 默认文件名常量 -DEFAULT_SOUL_FILENAME = "SOUL.md" +DEFAULT_AGENT_FILENAME = "AGENT.md" DEFAULT_USER_FILENAME = "USER.md" -DEFAULT_AGENTS_FILENAME = "AGENTS.md" +DEFAULT_RULE_FILENAME = "RULE.md" DEFAULT_MEMORY_FILENAME = "MEMORY.md" DEFAULT_STATE_FILENAME = ".agent_state.json" @@ -25,9 +25,9 @@ DEFAULT_STATE_FILENAME = ".agent_state.json" @dataclass class WorkspaceFiles: """工作空间文件路径""" - soul_path: str + agent_path: str user_path: str - agents_path: str + rule_path: str memory_path: str memory_dir: str state_path: str @@ -48,9 +48,9 @@ def ensure_workspace(workspace_dir: str, create_templates: bool = True) -> Works os.makedirs(workspace_dir, exist_ok=True) # 定义文件路径 - soul_path = os.path.join(workspace_dir, DEFAULT_SOUL_FILENAME) + agent_path = os.path.join(workspace_dir, DEFAULT_AGENT_FILENAME) user_path = os.path.join(workspace_dir, DEFAULT_USER_FILENAME) - agents_path = os.path.join(workspace_dir, DEFAULT_AGENTS_FILENAME) + rule_path = os.path.join(workspace_dir, DEFAULT_RULE_FILENAME) memory_path = os.path.join(workspace_dir, DEFAULT_MEMORY_FILENAME) # MEMORY.md 在根目录 memory_dir = os.path.join(workspace_dir, "memory") # 每日记忆子目录 state_path = os.path.join(workspace_dir, DEFAULT_STATE_FILENAME) # 状态文件 @@ -60,17 +60,17 @@ def ensure_workspace(workspace_dir: str, create_templates: bool = True) -> Works # 如果需要,创建模板文件 if create_templates: - _create_template_if_missing(soul_path, _get_soul_template()) + _create_template_if_missing(agent_path, _get_agent_template()) _create_template_if_missing(user_path, _get_user_template()) - _create_template_if_missing(agents_path, _get_agents_template()) + _create_template_if_missing(rule_path, _get_rule_template()) _create_template_if_missing(memory_path, _get_memory_template()) logger.debug(f"[Workspace] Initialized workspace at: {workspace_dir}") return WorkspaceFiles( - soul_path=soul_path, + agent_path=agent_path, user_path=user_path, - agents_path=agents_path, + rule_path=rule_path, memory_path=memory_path, memory_dir=memory_dir, state_path=state_path @@ -91,9 +91,9 @@ def load_context_files(workspace_dir: str, files_to_load: Optional[List[str]] = if files_to_load is None: # 默认加载的文件(按优先级排序) files_to_load = [ - DEFAULT_SOUL_FILENAME, + DEFAULT_AGENT_FILENAME, DEFAULT_USER_FILENAME, - DEFAULT_AGENTS_FILENAME, + DEFAULT_RULE_FILENAME, ] context_files = [] @@ -160,9 +160,9 @@ def _is_template_placeholder(content: str) -> bool: # ============= 模板内容 ============= -def _get_soul_template() -> str: +def _get_agent_template() -> str: """Agent人格设定模板""" - return """# SOUL.md - 我是谁? + return """# AGENT.md - 我是谁? *在首次对话时与用户一起填写这个文件,定义你的身份和性格。* @@ -231,9 +231,9 @@ def _get_user_template() -> str: """ -def _get_agents_template() -> str: - """工作空间指南模板""" - return """# AGENTS.md - 工作空间指南 +def _get_rule_template() -> str: + """工作空间规则模板""" + return """# RULE.md - 工作空间规则 这个文件夹是你的家。好好对待它。 @@ -259,9 +259,8 @@ def _get_agents_template() -> str: - **记忆是有限的** - 如果你想记住某事,写入文件 - "记在心里"不会在会话重启后保留,文件才会 - 当有人说"记住这个" → 更新 `MEMORY.md` 或 `memory/YYYY-MM-DD.md` -- 当你学到教训 → 更新 AGENTS.md 或相关技能 -- 当你犯错 → 记录下来,这样未来的你不会重复 -- **文字 > 大脑** 📝 +- 当你学到教训 → 更新 RULE.md 或相关技能 +- 当你犯错 → 记录下来,这样未来的你不会重复,**文字 > 大脑** 📝 ### 存储规则 @@ -279,7 +278,7 @@ def _get_agents_template() -> str: ## 工作空间演化 -这个工作空间会随着你的使用而不断成长。当你学到新东西、发现更好的方式,或者犯错后改正时,记录下来。 +这个工作空间会随着你的使用而不断成长。当你学到新东西、发现更好的方式,或者犯错后改正时,记录下来。你可以随时更新这个规则文件。 """ diff --git a/channel/web/chat.html b/channel/web/chat.html index 3134f3d..2ad5474 100644 --- a/channel/web/chat.html +++ b/channel/web/chat.html @@ -3,7 +3,7 @@ - AI Assistant + CowAgent - Personal AI Agent diff --git a/docs/agent.md b/docs/agent.md index 1d337b3..929afe0 100644 --- a/docs/agent.md +++ b/docs/agent.md @@ -2,13 +2,12 @@ ## 概述 -Cow项目从简单的聊天机器人全面升级为超级智能助理 **CowAgent**,能够主动思考和规划任务、拥有长期记忆、操作计算机和外部资源、创造和执行Skill,真正理解你并和你一起成长。CowAgent能够长期运行在个人电脑或服务器中,通过飞书、钉钉、企业微信、网页等多种方式进行交互。核心能力如下: - +Cow项目从简单的聊天机器人全面升级为超级智能助理 **CowAgent**,能够主动规思考和规划任务、拥有长期记忆、操作计算机和外部资源、创造和执行Skill,真正理解你并和你一起成长。CowAgent能够长期运行在个人电脑或服务器中,通过飞书、钉钉、企业微信、网页等多种方式进行交互。核心能力如下: - **复杂任务规划**:能够理解复杂任务并自主规划执行,持续思考和调用工具直到完成目标,支持多轮推理和上下文理解 -- **工具系统**:内置 10+ 种工具,包括文件操作、bash终端、浏览器、文件发送、定时任务、记忆管理等 -- **长期记忆**:持久化记忆自动保存到本地,通过文件存储和向量数据库实现智能检索,分为核心记忆、每日记忆、用户记忆三个层次 -- **Skills系统**:可无限扩展的技能系统,内置技能创造器、网络搜索、图像识别等技能,支持通过自然语言完成技能创造 +- **工具系统**:内置实现10+种工具,包括文件操作、bash终端、浏览器、文件发送、定时任务、记忆管理等 +- **长期记忆**:自动将对话记忆持久化至本地文件和数据库中,包括全局记忆和天级记忆,支持关键词及向量检索 +- **Skills系统**:新增Skill运行引擎,内置多种技能,并支持通过自然语言对话完成自定义Skills开发 - **多渠道和多模型支持**:支持在Web、飞书、钉钉、企微等多渠道与Agent交互,支持Claude、Gemini、OpenAI、GLM、MiniMax、Qwen 等多种国内外主流模型 - **安全和成本**:通过秘钥管理工具、提示词控制、系统权限等手段控制Agent的访问安全;通过最大记忆轮次、最大上下文token、工具执行步数对token成本进行限制 @@ -27,6 +26,7 @@ Cow项目从简单的聊天机器人全面升级为超级智能助理 **CowAgent + ### 2. 任务规划和工具调用 工具是Agent访问操作系统资源的核心,Agent会根据任务需求智能选择和调用工具,完成文件读写、命令执行、定时任务等各类操作。内置工具的视线在项目的 `tools` 目录下。 @@ -43,7 +43,8 @@ Cow项目从简单的聊天机器人全面升级为超级智能助理 **CowAgent 基于编程能力和系统访问能力,Agent可以实现从信息搜索、图片等素材生成、编码、测试、部署、Nginx配置修改、发布的 Vibecoding 全流程,通过手机端简单的一句命令完成应用的快速demo: -[TODO] + + @@ -117,4 +118,63 @@ Agent可根据智能体的名称和描述进行决策,并通过 app_code 调 注:需通过 `env_config` 配置 `LINKAI_API_KEY`,或在config.json中添加 `linkai_api_key` 配置。 +## 使用方式 +> 详细使用方式参考项目README.md文档进行 + +### 1.项目运行 + +在命令行中执行: + +```bash +bash <(curl -sS https://cdn.link-ai.tech/code/cow/run.sh) +``` + +详细说明及后续程序管理参考:[项目启动脚本](https://github.com/zhayujie/chatgpt-on-wechat/wiki/CowAgentQuickStart) + + +### 2.模型选择 + +Agent模式推荐使用以下模型,可根据效果及成本综合选择: + +- **Claude**: `claude-sonnet-4-5`、`claude-sonnet-4-0` +- **Gemini**: `gemini-3-flash-preview`、`gemini-3-pro-preview` +- **GLM**: `glm-4.7` +- **MiniMax**: `MiniMax-M2.1` +- **Qwen**: `qwen3-max` + +详细模型配置方式参考 [README.md 模型说明](../README.md#模型说明) + +### 3.Agent核心配置 + +Agent模式的核心配置项如下,在 `config.json` 中配置: + +```json +{ + "agent": true, // 是否启用Agent模式 + "agent_workspace": "~/cow", // Agent工作空间路径 + "agent_max_context_tokens": 40000, // 最大上下文tokens + "agent_max_context_turns": 30, // 最大上下文记忆轮次 + "agent_max_steps": 15 // 单次任务最大决策步数 +} +``` + +**配置说明:** + +- `agent`: 设为 `true` 启用Agent模式,获得多轮工具决策、长期记忆、Skills等能力 +- `agent_workspace`: 工作空间路径,用于存储 memory、skills、其他系统设定提示词 +- `agent_max_context_tokens`: 上下文token上限,超出将自动丢弃最早的对话 +- `agent_max_context_turns`: 上下文记忆轮次,每轮包括一次提问和回复 +- `agent_max_steps`: 单次任务最大工具调用步数,防止无限循环 + + +### 4.渠道接入 + +Agent支持在多种渠道中使用,只需修改 `config.json` 中的 `channel_type` 配置即可切换。 + +- **Web网页**:默认使用该渠道,运行后监听本地端口,通过浏览器访问 +- **飞书接入**:[飞书接入文档](https://docs.link-ai.tech/cow/multi-platform/feishu) +- **钉钉接入**:[钉钉接入文档](https://docs.link-ai.tech/cow/multi-platform/dingtalk) +- **企业微信应用接入**:[企微应用文档](https://docs.link-ai.tech/cow/multi-platform/wechat-com) + +更多渠道配置参考:[通道说明](../README.md#通道说明) diff --git a/docs/release/2.0.0.md b/docs/release/2.0.0.md new file mode 100644 index 0000000..469a1c5 --- /dev/null +++ b/docs/release/2.0.0.md @@ -0,0 +1,121 @@ +# CowAgent 2.0 + +🚀 CowAgent 2.0 实现了从聊天机器人到**超级智能助理**的全面升级!现在它能够主动思考和规划任务、拥有长期记忆、操作计算机和外部资源、创造和执行技能,真正理解你并和你一起成长。 + +### ✨ 重点更新 + +- Agent核心能力: + - **复杂任务规划**:能够理解复杂任务并自主规划执行,持续思考和调用工具直到完成目标,支持多轮推理和上下文理解。 + - **长期记忆**:自动将对话记忆持久化至本地文件和数据库中,包括全局记忆和天级记忆,支持关键词及向量检索。 + - **内置系统工具**:内置实现10+种工具,包括文件操作、bash终端、浏览器、文件发送、定时任务、记忆管理等。 + - **Skills**:新增Skill运行引擎,内置多种技能,并支持通过自然语言对话完成自定义Skills开发。 + - **安全和成本**:通过秘钥管理工具、提示词控制、系统权限等手段控制Agent的访问安全;通过最大记忆轮次、最大上下文token、工具执行步数对token成本进行限制。 +- 其他更新: + - 渠道优化:飞书及钉钉接入渠道支持长连接接入(无需公网IP)、支持图片/文件消息的接收和发送。 + - 模型更新:新增claude-sonnet-4-5、gemini-3-pro-preview、glm-4.7、MiniMax-M2.1、qwen3-max等最新模型。 + - 部署优化:增加一键安装、配置、运行、管理的脚本,简化部署流程。 + +## 一、长期记忆系统 + +Agent 会在用户分享重要信息时主动存储,也会在对话达到一定长度时自动提取摘要。支持语义搜索和向量检索的混合检索模式。 + +**首次启动**时,Agent 会主动询问关键信息,并记录至工作空间(默认 `~/cow`)中的智能体设定、用户身份、记忆文件中。 + +**长期对话**中,Agent 会智能记录或检索记忆,不断更新自身设定、用户偏好,总结经验和教训,真正实现自主思考和持续成长。 + + + + +## 二、任务规划与工具调用 + +Agent 根据任务需求智能选择和调用工具,完成各类复杂操作。 + +### 1. 终端和文件访问 + +最基础和核心的工具能力,用户可通过手机端与 Agent 交互,操作个人电脑或服务器上的资源: + + + +### 2. 应用编程能力 + +基于编程能力和系统访问能力,Agent 可实现从信息搜索、素材生成、编码、测试、部署、Nginx配置、发布的 **Vibecoding 全流程**,通过手机端一句命令完成应用快速 demo。 + + + +### 3. 定时任务 + +支持 **一次性任务、固定时间间隔、Cron表达式** 三种形式,任务触发可选择 **固定消息发送** 或 **Agent动态任务执行** 两种模式: + + + +### 4. 环境变量管理 + +通过 `env_config` 工具管理技能所需秘钥,支持对话式更新,内置安全保护和脱敏策略: + + + +## 三、技能系统 + +每个 Skill 由说明文件、运行脚本(可选)、资源(可选)组成,为 Agent 提供无限扩展性。 + +### 1. 技能创造器 + +通过对话方式快速创建技能,将工作流程固化或对接任意第三方接口: + + + +### 2. 搜索和图像识别 + +- **搜索技能**:内置 `bocha-search`(博查搜索),配置 `BOCHA_SEARCH_API_KEY` 即可使用。 +- **图像识别**:支持 `gpt-4.1-mini`、`gpt-4.1` 等模型,配置 `OPENAI_API_KEY` 即可使用。 + + + +### 3. 三方知识库和插件 + +`linkai-agent` 技能可将 [LinkAI](https://link-ai.tech/) 上的所有智能体作为 skill 使用,实现多智能体决策: + + + + +## 四、快速开始 + +### 一键启动 + +本次新增了一键下载、配置、运行和管理的脚本,只需命令行中执行: + +```bash +bash <(curl -sS https://cdn.link-ai.tech/code/cow/run.sh) +``` + +详细说明参考:[项目启动脚本](https://github.com/zhayujie/chatgpt-on-wechat/wiki/CowAgentQuickStart) + +### 模型选择 + +Agent 模式推荐使用以下模型: + +- **Claude**: `claude-sonnet-4-5`、`claude-sonnet-4-0` +- **Gemini**: `gemini-3-flash-preview`、`gemini-3-pro-preview` +- **GLM**: `glm-4.7` +- **MiniMax**: `MiniMax-M2.1` +- **Qwen**: `qwen3-max` + +详细配置方式参考 [README.md 模型说明](../README.md#模型说明) + + +### 渠道接入 + +支持在 Web、飞书、钉钉、企业微信 等多渠道与 Agent 交互,随时随地使用超级助理,只需修改 `config.json` 中的 `channel_type` 配置即可切换: + +- **Web网页**:默认使用该渠道,运行后监听本地端口,通过浏览器访问。 +- **飞书接入**:[飞书接入文档](https://docs.link-ai.tech/cow/multi-platform/feishu) +- **钉钉接入**:[钉钉接入文档](https://docs.link-ai.tech/cow/multi-platform/dingtalk) +- **企业微信应用接入**:[企微应用文档](https://docs.link-ai.tech/cow/multi-platform/wechat-com) + +更多渠道配置参考:[通道说明](../README.md#通道说明) + +## 五、参与共建 + +2.0版本后,项目将持续升级Agent能力、拓展接入渠道、内置工具、技能系统,降低模型成本和提升安全性。欢迎 [提出反馈](https://github.com/zhayujie/chatgpt-on-wechat/issues) 和 [贡献代码](https://github.com/zhayujie/chatgpt-on-wechat/pulls)。 + +**🤖立即体验 CowAgent 2.0,开启你的超级AI助理之旅!** diff --git a/docs/version/release-notes.md b/docs/release/history.md similarity index 100% rename from docs/version/release-notes.md rename to docs/release/history.md