# SDK Extension

Extension adalah kode yang berjalan di proses latar belakangnya sendiri. Cowork memuat file entrinya dan memanggil `activate(api)` sekali. Semua yang bisa dilakukan Extension melewati objek `api` itu, dan objek `ctx` yang diberikan Cowork kepada apa yang didaftarkannya. Bab ini mencantumkan setiap modul dan fungsi.

> **Status rilis**
> Fungsi yang ditandai <Badge type="warning" text="Belum dirilis" /> sudah ada di kode sumber Cowork tetapi belum ada di versi yang dirilis.

## Modul

| Modul | Fungsi | Memerlukan |
|---|---|---|
| [Entri dan Pendaftaran](https://docs.micromeet.ai/id/extension-sdk/entry.md) | `activate(api)` · `api.registerConnector` · `api.registerService` · `api.log` | — |
| [Connector](https://docs.micromeet.ai/id/extension-sdk/connector.md) | `start(ctx)` · `stop()` · `send(reply)` · `ctx.emit` · `ctx.log` | — (di 0.1.41: tercantum di `connectors`) |
| [Tugas Latar Belakang](https://docs.micromeet.ai/id/extension-sdk/service.md) | `run(ctx)` · `ctx.status` · `ctx.log` · `ctx.readJson` · `ctx.writeJson` · `ctx.env` · `ctx.dataDir` · `ctx.signal` | capability `service` |
| [Permintaan Situs](https://docs.micromeet.ai/id/extension-sdk/site.md) | `ctx.site.request` · `ctx.site.session` | `service` + `sites` |
| [Percakapan Layanan](https://docs.micromeet.ai/id/extension-sdk/agent.md) | `ctx.agent.handoff` | `service` + `agent` |
| [Browser](https://docs.micromeet.ai/id/extension-sdk/browser.md) | `ctx.browser.adoptTab` · `releaseTab` · `evaluate` · `inject` · `uninject` · `captureAudio` · `stopAudio` · `onEvent` | capability `browser` (`audio` untuk suara) |

## package.json

Contoh ini memakai `service` dan `sites` yang belum dirilis; di 0.1.41 contoh ini ditolak.

```json
{
  "name": "janeapp-operator",
  "version": "0.1.0",
  "pi": { "extensions": ["./index.mjs"] },
  "dozin": {
    "capabilities": ["service"],
    "sites": [{ "host": "welladjustedhk.janeapp.com", "methods": ["GET"], "pathPrefixes": ["/admin/api/v2/"], "minIntervalMs": 1000 }]
  }
}
```

| Field | Deskripsi |
|---|---|
| `name` | Huruf kecil, angka, dan tanda hubung; sama dengan nama folder |
| `version` | Versi yang ditampilkan di **Pengaturan › Ekstensi**. Wajib di 0.1.41; mulai versi berikutnya default-nya `0.0.0` |
| `pi.extensions` | Tepat satu file entri. Wajib di 0.1.41. <Badge type="warning" text="Belum dirilis" />: boleh tidak dicantumkan, lalu `main` yang dipakai; jika tidak ada, yang pertama dari `index.mjs`, `index.js`, `index.ts` |
| `dozin.connectors` | ID Connector yang didaftarkannya. Jika dicantumkan, hanya ID ini yang bisa didaftarkan. Di 0.1.41, Connector hanya bisa didaftarkan jika ID-nya tercantum di sini |
| `dozin.capabilities` | `browser`, `audio` (perlu `browser`), `platform-gate-v1`, dan `service` <Badge type="warning" text="Belum dirilis" /> |
| `dozin.origins` | Dengan `browser`: 1 sampai 20 situs web persis (`https://example.com`) yang boleh dipakai. Wajib bersama `browser` di 0.1.41; mulai versi berikutnya boleh tidak dicantumkan, lalu situs http(s) apa pun diizinkan, tetap hanya di tab yang diserahkan pengguna |
| `dozin.platforms` | `darwin-arm64`, `darwin-x64`, `win32-x64`; memerlukan tepat satu `platform-gate-v1` di `capabilities` |
| `dozin.secrets` <Badge type="warning" text="Belum dirilis" /> | Dengan `service`: hingga 8 nilai yang diisi pengguna, `{ env, label }`; `env` cocok dengan `^[A-Z][A-Z0-9_]{0,63}$` |
| `dozin.sites` <Badge type="warning" text="Belum dirilis" /> | Dengan `service`: hingga 8 situs untuk `ctx.site`, `{ host, methods, pathPrefixes, minIntervalMs }` |
| `dozin.agent` <Badge type="warning" text="Belum dirilis" /> | Dengan `service`: `{ brief, model?, tools?, secret? }` untuk percakapan layanan |

Nama tipenya `DozinAPI` di Cowork maupun Dozin, sehingga satu Extension bisa dipasang tanpa perubahan di keduanya.

## Aturan yang berlaku untuk setiap modul

- Tidak ada yang berjalan sampai pengguna menyetujui file-file persisnya di **Pengaturan › Ekstensi**. Mengubah satu file berarti harus disetujui lagi.
- Satu paket paling banyak 200 file dan 5 MB; `dependencies` tidak dipasang.
- Extension tidak bisa membaca cookie, token, atau data ekstensi lain.

## Terkait

- [Extension](https://docs.micromeet.ai/id/extend/extensions.md): Apa itu Extension dan bagaimana ia mulai berjalan
- [SDK Mini App](https://docs.micromeet.ai/id/miniapp-sdk/overview.md): Apa yang bisa dipanggil oleh Mini App dari paket yang sama
- [Pengaturan Ekstensi](https://docs.micromeet.ai/id/connections/extensions.md): Memasang, menyetujui, dan menyalakan
