# 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/extend/skills.md)。

## 相关

- [扩展](https://docs.micromeet.ai/zh/connections/extensions.md): 安装、批准、打开一个 Extension
- [Gateway 外部渠道消息](https://docs.micromeet.ai/zh/connections/gateway.md): Connector 的消息去哪
- [Injection](https://docs.micromeet.ai/zh/extend/injections.md): Extension 在网页里运行的脚本
