← 返回更新日志

OpenCode v1.1.1

2026-01-04 · GitHub 原文
这是一个对 OpenCode 权限系统进行彻底重构的**重大变更**。 ### 工具集成至权限 `tools` 配置已被弃用,并合并到 `permission` 字段中。以前,您可以像这样启用/禁用工具: ```json { "tools": { "bash": true, "edit": false } } ``` 现在,应使用 `permission` 进行配置: ```json { "permission": { "bash": "allow", "edit": "deny" } } ``` 为保持向后兼容,旧的 `tools` 配置仍然受支持,并会自动迁移到新的权限系统。 ### 支持对象语法的细粒度权限 现在,权限支持使用带有模式匹配的对象语法进行细粒度控制。当您将权限指定为对象时,可以为不同的模式设置不同的规则: ```json { "permission": { "bash": { "npm *": "allow", "git *": "allow", "rm *": "deny", "*": "ask" }, "edit": { "*.md": "allow", "*.ts": "ask", "*": "deny" } } } ``` 对象中的每个键都是一个 glob 模式,用于匹配工具的输入,其值是要执行的操作: - `"allow"` - 自动批准 - `"deny"` - 自动拒绝 - `"ask"` - 提示用户批准 您也可以使用简单的字符串设置全局权限: ```json { "permission": { "bash": "allow", "edit": "ask" } } ``` 或者一次性设置所有权限: ```json { "permission": "allow" } ``` ### SDK 用户的重大变更 权限事件发生了显著变化。与旧的 `Permission` 模块 (`permission/index.ts`) 相比,新的 `PermissionNext` 模块 (`permission/next.ts`) 具有不同的事件结构: **旧事件结构 (`Permission.Event`):** - `Updated`: `{ id, type, pattern, sessionID, messageID, callID, message, metadata, time }` - `Replied`: `{ sessionID, permissionID, response }` **新事件结构 (`PermissionNext.Event`):** - `Asked`: `{ id, sessionID, permission, patterns, metadata, always, tool: { messageID, callID } }` - `Replied`: `{ sessionID, requestID, reply }` 主要区别: - 事件名称从 `permission.updated` 更改为 `permission.asked` - `type` 重命名为 `permission` - `pattern` 现在是 `patterns`(字符串数组) - 移除了 `message` 字段 - `response` 重命名为 `reply` - `permissionID` 重命名为 `requestID` - 新增 `always` 字段,包含如果用户选择“始终允许”,则未来请求将被批准的匹配模式 回复值保持不变:`"once"`、`"always"` 或 `"reject"` ### 服务端更改 - 新增端点:`POST /permission/:requestID/reply` 用于响应权限请求 - 旧端点 `POST /session/:sessionID/permissions/:permissionID` 现已弃用 - `GET /permission` 现在返回 `PermissionNext.Request[]` 而非 `Permission.Info[]` - 通过 `server.cors` 配置选项添加了 CORS 白名单支持 - 为代理的静态资源添加了 Content-Type 头 - mDNS 服务名称现在包含端口以确保唯一性 ### 其他更改 - 代理(Agent)的 `tools` 字段已弃用 - 请改用 `permission` - 代理的 `maxSteps` 字段已弃用 - 请改用 `steps` - 未知的代理属性现在被收集到 `options` 中 - 模式和插件 glob 不再搜索子目录(简化为仅限顶层) ## 核心 - 添加开发脚本以改进 TUI 中的调试工作流 - 确保 @opencode-ai/plugin 仅在首次运行时存在 - 添加 MCP 资源支持 (@paoloricciuti) - 在工作树中初始化配置 - 优先在 GitHub Copilot 中使用免费的 GPT-5-mini 作为小型模型 - 移除硬编码的 .env 读取块,改用新的权限模型 - 防止重复的插件函数初始化 (@ShpetimA) - 更新 GitHub Copilot 模型优先级列表 - 为聊天消息输入添加 variant 字段 - 更新 AGENTS.md 文档 (@aryasaatvik) - 修复了依赖安装和 git 工作树分支创建的问题 - 修复了代码库中的一个问题 - 添加对 git 工作树的沙盒支持,允许在每个项目中多个目录下工作 - 为 MCP 客户端连接调用添加超时 (@RhysSullivan) - 添加每个项目的 MCP 配置覆盖 (@jknlsn) - 改进 Kotlin 语言服务器对 Gradle 多项目构建的根目录检测 (@JBou) - 改进插件加载,优雅地处理内置插件失败的情况 - 为权限对话框添加拒绝消息支持,以提供更好的用户反馈 - 包装队列中的用户消息,并附上提醒以保持专注 - 添加托管的 git 工作树 - 使用 GPA 升级 OpenTUI 至 v0.1.68 - 为权限对话框添加退出键处理,以改进键盘导航 - 添加 TUI 会话选择 API 端点以支持导航 (@code-yeongyu) - 添加 Kotlin LSP 集成 (@tjg184) - 跨配置文件合并指令数组,而非覆盖它们 (@elithrar) - 为极简模式添加 variant 支持 - 修复 Cloudflare AI Gateway SDK 聊天未定义错误 (@englishm) - 处理同步中非共享会话的 NotFoundError (@Hona) - 改进插件加载,优雅地处理内置插件失败的情况 - 更新 CI 配置 - 添加重新加载功能并改进带有重置功能的懒加载工具 - 实现后移除内存泄漏修复文档 - 修复会话管理中的内存泄漏并改进权限错误处理 - 修复 TUI 中针对新评估函数签名的权限测试 - 改进 TUI 中的权限错误处理和评估逻辑 - 忽略 - 将会话导出中添加助手元数据 (@dmmulroy) - 确保新的权限变更适用于特殊情况下的 bash 命令,如 rm、cd 等 - 重构权限系统 - 移除 GitHub Copilot 过时的 Haiku 过滤器 (@alcpereira) - 使依赖安装变为非阻塞 - 在代理后使用时使用 --no-cache 标志以防止连接挂起 - 在 finish-step 中检查回合中段的上下文溢出 (@aryasaatvik) - 如果在命令中使用了无效代理,则显示错误 (@Leka74) - 为代理的静态资源添加 Content-Type 头 (@monotykamary) ## TUI - 在 TUI 中添加缺失的主题列表按键绑定 (@aspiers) - 处理代理创建 PR 时的重复 PR 创建问题 (@elithrar) - 修复 TUI 中系统主题差异高亮显示 - 为运行命令添加 --variant 标志 (@shuv1337) - 从优先级列表中移除 OpenRouter 提供商 - 当没有活动的 LSP 时,使 LSP 状态图标变为灰色 (@itsrainingmani) - 当没有启用的 MCP 服务器时,使 MCP 状态图标变为灰色 (@itsrainingmani) - 在 TUI 中将附加目录传递给 SDK 客户端 (@shuv1337) - 处理 actions/checkout v6 凭据存储变更 (@elithrar) - 使用 Bun.sleep 替代带有 setTimeout 的 Promise (@edlsh) - 添加 Osaka Jade 主题 (@st-eez) - 在系统菜单中添加堆快照选项,用于调试内存使用情况 - 修复了会话列表中 "less" 命令在 Windows 上的回退机制 (@itsrainingmani) - 修复导入命令的正则表达式以正确处理文件路径 - 修复统计命令的天数计算和时间过滤 ## 桌面应用 - 修复应用中的滚动位置恢复 - 不在 Windows 上覆盖 Ctrl+A - 改进应用中的自动滚动行为 - 修复在桌面应用中编辑项目的问题 (@dbpolito) - 更新服务器 URL 规范化以保留路径 (@OpeOginni) - 在会话查看器中添加图片预览支持 (@shuv1337) - 添加 /compact 会话命令以压缩对话历史 - 调整桌面应用的窗口拖拽区域布局 - 放宽请求超时时间 - 正确解码桌面应用中权限上下文的会话 ID (@OpeOginni) - 应用功能开发中 - 改进应用启动时间 - 添加桌面功能的开发中内容 - 为应用添加文件上下文功能 - 改进桌面窗口调整大小手柄 (@dbpolito) **感谢 30 位社区贡献者:** - @monotykamary: - fix(server): add Content-Type headers for proxied static assets (#6587) - @Leka74: - fix: display error if invalid agent is used in a command (#6578) - @aryasaatvik: - fix(session): check for context overflow mid-turn in finish-step (#6480) - docs: update AGENTS.md (#6800) - @alcpereira: - fix: remove outdated Haiku filter for GitHub Copilot (#6593) - @dbpolito: - Desktop: Improve Resize Handle (#6608) - Desktop: Edit Project Fix (#6757) - @itsrainingmani: - fix: windows fallback for "less" cmd in `session list` (#6515) - fix(tui): make mcp status icon muted when no mcp servers are enabled (#6745) - fix(tui): make lsp status icon muted when no lsps are active (#6773) - @dmmulroy: - feat: add assistant metadata to session export (#6611) - @Hona: - fix(share): handle NotFoundError for non-shared sessions in sync (#6634) - @OpeOginni: - fix(desktop): Properly decode session id for permission context (#6580) - fix(server): update server URL normalization to retain path (#6647) - @albingroen: - fix(ui): fix slight vertical overflow in project selector (#6589) - @st-eez: - feat(theme): add Osaka Jade theme (#6609) - @edlsh: - refactor: use Bun.sleep instead of Promise setTimeout (#6620) - @englishm: - fix: cloudflare-ai-gateway sdk.chat undefined error (#6407) - @elithrar: - fix: handle actions/checkout v6 credential storage change (#6667) - fix: merge instructions arrays across config files (#6663) - github: handle duplicate PR creation when agent creates PR (#6777) - docs: add logging best practices for plugin authors (#6833) - @spoons-and-mirrors: - docs: add subtask2 to ecosystem page (#6704) - @tjg184: - feat: Add kotlin lsp integration (#6601) - @code-yeongyu: - feat(plugin): add tui.session.select API endpoint for TUI navigation (#6565) - @shuv1337: - fix(tui): pass attach directory to sdk client (#6715) - feat(app): add image preview support in session viewer (#6678) - feat: add --variant flag to run command (#6805) - @JBou: - fix(kotlin-ls): improve root detection for Gradle multi-project builds (#6717) - @jknlsn: - feat: add per-project MCP config overrides (#5406) - @sin4ch: - docs: enhance MCP servers documentation with a tip (#6713) - @RhysSullivan: - fix(mcp): add timeout to client.connect() calls (#6760) - @jerilynzheng: - docs: Add Vercel AI Gateway to provider docs (#6790) - @benjaminshafii: - docs: Add opencode-scheduler plugin to ecosystem (#6804) - @ShpetimA: - fix(plugin): prevent duplicate plugin function initialization (#6787) - @johnconnor-sec: - docs: typo in subtask documentation (#6821) - @felipeorlando: - Remove opencode-skills entry from ecosystem.mdx (#6817) - @jerome-benoit: - feat(nix): preliminary desktop app flake integration (#6135) - @paoloricciuti: - feat: mcp resources (#6542) - @aspiers: - fix(tui): add missing `theme_list` keybind (#6779)