12.1 OpenCode SDK

OpenCode SDK 是一組開發工具與函式庫,讓開發者能夠建立自訂工具、外掛以及與 OpenCode 深度整合的應用程式。SDK 封裝了與 OpenCode 核心互動所需的所有底層細節,提供簡潔的 API 介面。

SDK 核心功能

🔧

工具開發

建立自訂工具並註冊到 OpenCode 中,讓代理能呼叫你的程式。

📦

外掛系統

開發完整的外掛套件,包含多個工具、設定面板與生命週期管理。

🌐

Server Mode

將 OpenCode 以伺服器模式執行,提供 HTTP API 供外部應用整合。

🔄

事件系統

訂閱 OpenCode 內部事件,在特定時機觸發自訂邏輯。

快速入門

使用 npm 初始化 SDK 專案:

# 建立新專案
mkdir my-opencode-plugin
cd my-opencode-plugin
npm init -y

# 安裝 OpenCode SDK
npm install @opencode/sdk

# 建立基本工具
touch tools/my-tool.js
💡 語言支援: OpenCode SDK 目前提供 JavaScript/TypeScript API。社群維護的 Python 與 Rust SDK 可以在 GitHub 上找到。

12.2 Server Mode:API 伺服器

OpenCode 可以透過 opencode serve 指令以伺服器模式執行,提供 HTTP API 供外部應用程式呼叫。這使得 OpenCode 可以整合到 CI/CD 管線、Web 應用程式或其他自動化流程中。

啟動伺服器

# 啟動 OpenCode 伺服器(預設埠 3000)
opencode serve

# 指定埠號
opencode serve --port 8080

# 啟用 CORS(跨域請求)
opencode serve --cors

# 指定允許的來源
opencode serve --cors --origin https://myapp.example.com

API 使用範例

// 透過 HTTP API 呼叫 OpenCode
const response = await fetch('http://localhost:3000/api/execute', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    task: 'Explain the architecture of this project',
    context: {
      files: ['src/index.ts', 'src/config.ts'],
      directory: process.cwd()
    }
  })
});

const result = await response.json();
console.log(result.output);

整合 CI/CD

Server Mode 讓 OpenCode 可以無縫整合到 CI/CD 流程中:

# GitHub Actions 範例
jobs:
  code-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 啟動 OpenCode Review
        run: |
          opencode serve --port 3000 &
          sleep 2
          curl -X POST http://localhost:3000/api/execute \
            -H "Content-Type: application/json" \
            -d '{
              "task": "Review this PR diff for bugs",
              "context": { "git_diff": true }
            }'
⚠️ 注意: Server Mode 預設僅監聽本機(localhost)。若需對外開放,請務必設定適當的認證機制與防火牆規則,避免未授權的存取。

12.3 外掛開發

外掛(Plugin)是 OpenCode 生態系統的基礎單元。一個外掛可以包含多個工具、設定面板、生命週期掛鉤與資產檔案。

外掛目錄結構

my-opencode-plugin/
├── package.json          # 套件資訊與相依性
├── index.js              # 外掛入口點
├── tools/                # 自訂工具
│   ├── tool-a.js
│   └── tool-b.js
├── hooks/                # 生命週期掛鉤
│   ├── before-task.js
│   └── on-error.js
├── assets/               # 靜態資源
│   └── icon.svg
├── config/               # 設定範本
│   └── defaults.json
└── README.md             # 外掛文件

建立第一個外掛

// index.js — 外掛入口點
const { Plugin } = require('@opencode/sdk');

class MyPlugin extends Plugin {
  constructor() {
    super({
      name: 'my-plugin',
      version: '1.0.0',
      description: '我的第一個 OpenCode 外掛'
    });
  }

  // 外掛初始化
  async onActivate(context) {
    console.log('外掛已啟動!');
    
    // 註冊工具
    this.registerTool('hello-world', {
      description: '向使用者打招呼',
      schema: {
        type: 'object',
        properties: {
          name: { type: 'string', description: '你的名字' }
        },
        required: ['name']
      },
      handler: async (params) => {
        return { message: `哈囉,${params.name}!歡迎使用 OpenCode!` };
      }
    });

    // 註冊生命週期掛鉤
    this.registerHook('beforeTask', async (task) => {
      console.log(`即將執行任務:${task.name}`);
    });
  }

  // 外掛停用
  async onDeactivate() {
    console.log('外掛已停用');
  }
}

module.exports = MyPlugin;

安裝外掛

外掛可以透過 opencode.json 註冊:

{
  "plugins": [
    {
      "name": "my-plugin",
      "path": "./plugins/my-plugin",
      "enabled": true
    },
    {
      "name": "community-formatter",
      "version": "2.1.0",
      "enabled": false
    }
  ]
}
💡 外掛市場: 社群外掛可以透過 OpenCode 官方網站或 GitHub 組織找到。許多外掛已經涵蓋了程式碼格式化、文件生成、資料庫管理、雲端部署等常見需求。

12.4 OpenCode 生態系統

OpenCode 不僅僅是一個工具——它是一個正在成長的開發者生態系統。以下介紹生態系統的主要組成部分:

🐹

OpenCode Go

由社群維護的 Go 語言版本,保留了 OpenCode 的核心架構與工作流程概念。

🧘

OpenCode Zen

精簡版 OpenCode,聚焦於核心編輯體驗,適合偏好極簡風格的開發者。

🔌

社群外掛

由全球開發者貢獻的外掛生態,涵蓋語言支援、工具整合、主題樣式等。

💬

Discord 社群

最活躍的 OpenCode 討論區,提供技術支援、功能討論與專案展示。

📖

官方文件

完整的 API 文件、教學指南與最佳實踐,涵蓋從入門到進階的所有主題。

🐙

GitHub

原始碼託管在 GitHub,歡迎提交 Issue、功能請求與 Pull Request。

第三方整合

服務 整合方式 用途
GitHub MCP 伺服器 / CLI 整合 程式碼審查、Issue 管理、PR 建立
GitLab MCP 伺服器 Merge Request、CI/CD 觸發
Slack 自訂工具 / Webhook 通知發送、命令執行
Jira MCP 伺服器 Issue 查詢、狀態更新
Vercel CLI 整合 部署觸發、環境管理
Docker bash 工具 容器管理、映像建構

12.5 分享會話

OpenCode 提供了 opencode share 命令,讓開發者可以分享當前的會話狀態給團隊成員或社群:

# 分享當前會話
opencode share

# 分享並包含檔案變更
opencode share --include-diff

# 分享到特定平台
opencode share --platform discord

# 輸出為可攜式檔案
opencode share --output session.json

分享的會話包含:完整的對話歷史、所有工具呼叫記錄、檔案變更摘要與執行結果。這對於團隊協作、問題除錯與知識分享非常有價值。

📘 使用場景: 當遇到難以重現的 bug 時,可以將 OpenCode 的除錯會話分享給同事,對方可以直接看到代理的完整思考過程與嘗試過的所有解決方案,大幅減少溝通成本。

12.6 如何貢獻 OpenCode

OpenCode 是一個開源專案,歡迎各種形式的貢獻:

🐛

回報問題

在 GitHub 提交 Issue,描述你遇到的問題、重現步驟與預期行為。附上日誌與設定檔會非常有幫助。

🛠️

提交程式碼

Fork 專案、建立功能分支、撰寫測試,然後提交 Pull Request。請務必遵循專案的程式碼風格與提交規範。

📖

改善文件

文件是專案與使用者之間的橋樑。修正錯字、補充範例、撰寫教學都是非常有價值的貢獻。

🌍

在地化

協助將 OpenCode 的使用者介面與文件翻譯成更多語言,讓全球開發者都能受益。

💡

功能建議

有新功能的點子?在 Discord 社群中討論,或在 GitHub 上提交功能請求。我們非常重視社群的意見。

🔌

開發外掛

透過 OpenCode SDK 開發外掛,解決特定領域的問題,並分享給整個社群使用。

💡 從哪裡開始: 不確定如何開始貢獻?可以先從 GitHub 上的 good first issue 標籤開始,這些是特別為新手設計的入門任務。Discord 社群中也有 #contributors 頻道專門協助新貢獻者。

12.7 社群資源總覽

以下是參與 OpenCode 生態系統的重要連結與資源:

資源 網址 說明
官方網站 opencode.dev 最新消息、文件與下載
GitHub github.com/opencode 原始碼、Issue 追蹤、討論
Discord discord.gg/opencode 即時討論、技術支援、社群活動
SDK 文件 docs.opencode.dev/sdk 完整的 SDK API 參考與教學
外掛市場 plugins.opencode.dev 瀏覽與發布社群外掛
部落格 blog.opencode.dev 技術文章、版本發布、案例研究
🎉 恭喜你完成所有章節! 從第 1 章到第 12 章,你已經掌握了 OpenCode 的核心概念、進階功能與生態系統。我們先從基礎概念開始,逐步深入到代理編排、權限管理、MCP 擴充,一直到 SDK 開發與外掛生態。現在你已經準備好將 OpenCode 整合到你的日常工作流程中,充分發揮 AI 驅動開發的潛力。期待你在社群中分享你的學習經驗與創作!

📝 本章測驗

1. 若想將 OpenCode 整合到 CI/CD 流程中,應該使用哪個功能?
2. OpenCode 外掛的入口檔案通常命名為什麼?

❓ 常見問題

SDK 開發需要使用特定的程式語言嗎? ▼

官方 SDK 目前提供 JavaScript/TypeScript 支援,因為 OpenCode 本身是以 Node.js 為基礎。不過,由於 MCP 協定是語言無關的,你可以使用任何語言開發工具與外掛——只要它們能夠透過標準輸入輸出或 HTTP 與 OpenCode 通訊即可。社群已經貢獻了 Python、Rust 與 Go 的非官方 SDK,可以在 GitHub 上找到。

開發的外掛如何發布給其他人使用? ▼

發布外掛有幾種方式:(1) 上傳到 npm——SDK 建立的外掛可以發布為 npm 套件,使用者透過 npm install 安裝後在 opencode.json 中啟用即可。(2) 發布到 OpenCode 外掛市場——透過官方網站提交你的外掛,讓更多人發現它。(3) 直接分享 GitHub 倉庫——對於開源外掛,這是最常見的方式。發布前建議確認外掛有完整的 README 說明、使用範例與測試覆蓋。

Server Mode 的 API 有認證機制嗎? ▼

是的,Server Mode 支援多種認證方式:(1) API Key——在啟動伺服器時指定,客戶端需要在請求標頭中帶入 X-API-Key。(2) Bearer Token——支援 JWT 格式的授權令牌。(3) 自訂認證——透過設定檔註冊認證處理器,實現與現有身分系統的整合。預設情況下,伺服器僅監聽本機位址(127.0.0.1),這本身已經提供了基本的網路隔離。

課程總進度
第 1~12 章 12/12 章完成 (100%)