OpenCode源码学习 Day02
今日安排
具体任务:
1. 深入研究~/.opencode/目录结构
2. 学习全局配置config.json和项目级配置
预期成果:
能够根据不同项目需求灵活配置 OpenCode
1. 深入研究opencode目录结构
OpenCode 遵循 XDG 标准,分为三个独立目录:
配置目录:~/.config/opencode/(全局配置、Agent 定义)数据目录:~/.local/share/opencode/(会话、消息、认证、二进制文件)状态目录:~/.local/state/opencode/(最近使用的模型记录)
配置目录
~/.config/opencode/├── opencode.json[c] # 主配置├── agents/ # 自定义 Agent├── skills/ # 全局 Skills└── presets/ # 预设模板
数据目录
~/.local/share/opencode/├── auth.json # 模型提供商认证凭证├── opencode.db # SQLite 数据库(主存储,含完整会话/消息)├── bin/ # 下载的二进制文件├── log/ # 日志文件└── storage/ # JSON 格式的冗余存储(与 SQLite 同步)├── session/<projectID>/<sessionID>.json # 会话元数据├── message/<sessionID>/<messageID>.json # 消息内容├── part/<messageID>/<partID>.json # 消息片段(工具调用等)└── project/<projectID>.json # 项目元数据
状态目录
~/.local/state/opencode/├── last-used-model.json # 最近使用记录├── last-used-agent.json├── cache/ # 缓存└── lock/ # 进程锁
2. 学习全局配置config.json和项目级配置
全局配置是~/.config/opencode/ 下的 opencode.json
OpenCode 采用 “渐进式配置” 设计:
-
✅ 默认配置 : 开箱即用的合理默认值 -
✅ 按需生成 : 只在需要时才生成配置项 -
✅ 自动管理 : 系统会自动维护配置完整性
配置是如何”生长”的?
初始状态(刚安装)
{"$schema": "https://opencode.ai/config.json","disabled_providers": ["test"],"provider": {"test": { /* 示例配置,但被禁用 */ }}}
当你开始使用功能后使用 GitHub 集成后 :
{"provider": {"github": { // 自动添加的GitHub配置"apiKey": "${env:GITHUB_TOKEN}","models": { /* 自动发现的模型 */ }}}}
安装插件后 :
{"plugin": [ // 自动记录安装的插件"@opencode-ai/github","@opencode-ai/aws"]}
自定义AI代理后 :
{"agent": { // 你创建的代理配置"my-custom-agent": {"model": "anthropic/claude-3-sonnet","temperature": 0.3}}}
3. OpenCode 的配置管理系统 自动发现机制
当你使用新功能时,OpenCode会自动:
1. 检测功能使用
2. 生成相应配置
3. 保存到配置文件
4. 应用新配置
4. 配置的”记忆”功能
1. 用户显式配置 (手动编辑的配置)
2. 自动生成配置 (系统根据使用情况生成)
3. 默认内置配置 (代码中的默认值)
4. 环境变量 (最高优先级覆盖)
OpenCode 会记住你的偏好: 会话偏好记忆 :
{"model": "anthropic/claude-3-sonnet", // 你最后使用的模型"agent": {"build": { // 你调整过的代理设置"temperature": 0.2 // 你设置的温度}}}
工具使用习惯 :
{"permission": { // 根据你的授权决定记忆"bash": "allow", // 你经常允许执行命令"webfetch": "deny" // 你总是拒绝网页抓取}}
5. 最佳实践建议 不要手动配置所有东西
❌ 不需要一开始就配置所有内容
✅ 让系统根据你的使用习惯自动配置
{// 只需要配置你真正关心的选项"model": "anthropic/claude-3-sonnet", // 明确指定偏好模型"logLevel": "info" // 设置日志级别// 其他让系统自动管理}
OpenCode 会自动:
1. 发现可用的AI提供商
2. 配置合适的默认参数
3. 记住你的使用偏好
4. 保持配置简洁有效
6. 什么时候需要手动配置?
需要手动干预的情况 :
1. 特定需求 : 自定义模型参数、特殊代理设置
2. 安全限制 : 明确禁用某些功能
3. 网络配置 : 自定义API端点、代理设置
4. 集成配置 : 第三方服务认证信息
总结 OpenCode 的配置是”活”的,它会:
📝 随着你的使用而增长
🧠 记住你的偏好习惯
⚙️ 自动管理技术细节
🔧 只在需要时要求你配置
明天继续!!!
夜雨聆风