feat: 新增 self-config 自配置 MCP 工具(owner 授权下安全编辑运行配置)#269
Conversation
- getConfigPaths() 返回运行实例真实使用的 agents.json/personas/knowledge 路径, 供自配置工具定位 LIVE 配置文件(而非隔离 clone 里的副本) - isOwner 改为 config.security?.ownerUserId,security 缺失时按'未配 owner'处理, 与'空则全员 owner'语义一致,避免调用方在 config 不全时抛错 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
manage_config 工具让 anycode 在 owner 授权下安全编辑自己的运行配置: - 白名单: agents.json / personas/*.md / knowledge/*.md / .env / ~/.claude.json 的 MCP - 防路径穿越、拒 .example 模板、拒非 .md - 写前校验: agents.json 走 Zod schema,.env 走 KEY=VALUE 行校验,非法内容不落盘 - 写前自动备份到 data/config-backups/,可回滚 - agents.json 写后立即 reloadAgentConfig,热加载即时生效;.env/MCP 提示需重启 - set_mcp/remove_mcp 浅合并 mcpServers,保留其它 server 与顶层其它键 工具运行在服务进程内(cwd=部署目录),命中的是运行实例真实读取的 LIVE 配置。 附 29 个单测覆盖白名单/校验/备份/写入/reload/MCP 合并。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 按 sessionKey 解析 userId,仅当 isOwner(userId) 时创建 self-config MCP server (非 owner 完全不可见,fail-closed) - 在 readonly MCP 放行块加入 mcp__self-config__ 分支,否则土豆儿(pm, readonly) 调不了自配置工具 - 附 executor owner 门禁正/反用例 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 3m 32s —— View job Review: self-config 自配置工具 —
|
背景
用户希望土豆儿(chat bot)能编辑 anycode 自己的配置。现状
/edit(owner-only in-place)已能改热加载配置,但需手打前缀、裸 Write/Bash 无校验、易误伤源码。本 PR 加一个专用的、收敛风险的自配置工具。方案
新增
manage_configMCP 工具(serverself-config),让 anycode 在 owner 授权下安全编辑「自己」的运行配置。工具运行在服务进程内(cwd = 部署目录),命中的是运行实例真实读取的 LIVE 配置,天然绕过隔离 clone 副本问题。安全边界(四层)
OWNER_USER_ID可用;非 owner 在 executor 层根本不创建该 server(fail-closed)agents.json/personas/*.md/knowledge/*.md/.env/~/.claude.json的mcpServers段;防路径穿越、拒.example模板、拒非.mdagents.json走 Zod schema、.env走 KEY=VALUE 行校验,非法内容不落盘data/config-backups/,可回滚生效方式
agents.json/ 人设 / 知识 → 写后reloadAgentConfig热加载即时生效,无需重启.env/ MCP → 明确提示需重启(仅启动时加载)Actions
list/read/write/set_mcp/remove_mcp。set_mcp浅合并,保留其它 server 与顶层其它键(不会误删 174KB claude.json 里的历史)。改动
src/config-admin/manager.ts— 纯逻辑:白名单解析 + 校验 + 备份 + 落盘 + MCP 合并src/config-admin/tool.ts—manage_configMCP 工具 + owner 门禁src/agent/config-loader.ts— 导出getConfigPaths()定位 LIVE 配置src/claude/executor.ts— owner 门禁创建 server + readonly 放行(否则 readonly 的土豆儿调不了)src/utils/security.ts—isOwner防御性空值处理(config.security缺失不再抛错)测试
memory/quality.test.ts为既有 flaky,干净基线上同样失败,与本 PR 无关)npm run typecheck通过🤖 Generated with Claude Code