乐于分享
好东西不私藏

OpenCode源码学习 Day02

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 的配置是”活”的,它会:  

📝 随着你的使用而增长 

🧠 记住你的偏好习惯 

⚙️ 自动管理技术细节 

🔧 只在需要时要求你配置

明天继续!!!