# Extension

Extension 是一個程式碼包，在自己的後臺程序裡執行。在 0.1.41 裡，它註冊 **Connector**：在外部渠道和 Cowork 的 Gateway 之間收發訊息的那一端。聲明瞭瀏覽器權限，它還能讀、操作它列出的網站的網頁。

## 怎麼上線

1. 把包放進 `<Cowork 主目錄>/extensions/packages/<name>/`，或者在 **設定 › 擴充套件** 裡用 **從本機目錄安裝** 把一個資料夾複製進去。
2. **設定 › 擴充套件** 裡顯示它在等批准。這時裡面什麼都不會執行。
3. 你批准並開啟開關。Cowork 啟動它的程序，呼叫它的 `activate` 函式。
4. 資料夾裡任何檔案變了，都要重新批准。

## 包裡有什麼

| 檔案或資料夾 | 內容 |
|---|---|
| `package.json` | `name`，必須和資料夾名相同（小寫字母、數字和連字元）；`version`；`description`；`pi.extensions`，只列一個入口檔案；以及 Cowork 段，宣告 `connectors`、`capabilities`、`origins`、`platforms` |
| 入口檔案，比如 `index.mjs` | 匯出 `activate(api)`，對每個宣告的 Connector 調 `api.registerConnector(...)` |
| `<Cowork 主目錄>/extensions/logs/<name>.log` | Extension 寫的日誌；檔案由 Cowork 寫 |
| `<Cowork 主目錄>/extensions/data/<name>/` | Extension 自己的資料資料夾，它的程序就在這個資料夾裡執行 |

## 能宣告什麼

| 項 | 意思 |
|---|---|
| `connectors` | 它要註冊的 Connector ID。註冊沒列出的 ID 會被拒絕 |
| `capabilities` | `browser` 操作網頁；`audio`（需要 `browser`）採集網頁的聲音；`platform-gate-v1` 才能用 `platforms` |
| `origins` | 有 `browser` 時必填：它能用的確切網站，1 到 20 個，比如 `https://example.com` |
| `platforms` | 它支援的電腦：`darwin-arm64`、`darwin-x64`、`win32-x64` |

## Connector

一個 Connector 有一個 `id` 和三個函式。`start(ctx)` 啟動它：連線、定時器在這裡開，不要放在 `activate` 裡；限時 5 秒。`stop()` 調多次也要安全；限時 5 秒。`send(reply)` 把一條回覆送到渠道；限時 30 秒。通過 `ctx`，Connector 把收到的訊息交給 Cowork（`ctx.emit`）、寫日誌（`ctx.log`），有瀏覽器權限時用 `ctx.browser`。

## 限制

- 只有你能批准 Extension，AI 不能。
- 批准只對你批准時的那些檔案有效。改一個位元組就要重新批准。
- 一個包最多 200 個檔案、5 MB。不安裝 npm 包和 `dependencies`。
- 程序崩潰後，Cowork 稍等一會兒自動重啟它。
- 0.1.41 裡 Extension 不能給 AI 加工具或命令。要給 AI 新的做事方法，寫 [Skill](https://docs.micromeet.ai/zh-tw/extend/skills.md)。

## 相關

- [擴充套件](https://docs.micromeet.ai/zh-tw/connections/extensions.md): 安裝、批准、開啟一個 Extension
- [Gateway 外部渠道訊息](https://docs.micromeet.ai/zh-tw/connections/gateway.md): Connector 的訊息去哪
- [Injection](https://docs.micromeet.ai/zh-tw/extend/injections.md): Extension 在網頁裡執行的腳本
