# Spesifikasi Paket <Badge type="warning" text="Belum dirilis" />

Aturan yang harus dipenuhi paket Mini App agar Micromeet menandatanganinya dan Cowork membukanya: apa aturannya, siapa yang memeriksa, dan apa yang terjadi jika tidak dipenuhi. Cara membuat paketnya ada di [Pengemasan dan Tanda Tangan](https://docs.micromeet.ai/id/miniapp-sdk/build.md); `micromeet-miniapp verify` menjalankan pemeriksaan ini lebih dulu di komputer Anda. Halaman ini tentang paket Mini App bertanda tangan, bukan paket Cowork pada modul [Paket](https://docs.micromeet.ai/id/miniapp-sdk/package.md).

| Diperiksa oleh | Kapan |
|---|---|
| **Alat** | `micromeet-miniapp` (`pack`, `verify`, `zip`) dan plugin Vite, di komputer Anda |
| **Micromeet** | Saat Micromeet mendaftarkan dan menandatangani sebuah versi |
| **Pasang** | Saat Cowork memasang paket |
| **Buka** | Setiap kali Cowork membuka Mini App, dan setiap kali halaman membaca file |

## File

```text
ai.example.app-1.0.0.zip
  manifest.json
  app.asar
  app.asar.unpacked/    opsional: media besar
  INSTALL.md            opsional: langkah untuk agent yang memasangnya
```

| Aturan | Diperiksa oleh | Jika tidak dipenuhi |
|---|---|---|
| Keempat entri ada di akar zip (atau folder); Cowork hanya menyimpan ini | Pasang | File lain tidak dipasang |
| Zip: paling banyak 100.000 entri dan 8 GB setelah dibuka; tanpa enkripsi, path absolut, `..`, backslash, atau symbolic link | Alat, Pasang | Tidak dipasang |
| Tidak ada file atau folder bernama `.DS_Store`, `__MACOSX`, `.git`, atau `node_modules` | Alat | `pack` melewatinya; `verify` menolak jika ada di `app.asar.unpacked/` |

## manifest.json

| Field | Aturan | Diperiksa oleh | Jika tidak dipenuhi |
|---|---|---|---|
| `appId` | AppID yang didaftarkan Micromeet: domain terbalik huruf kecil seperti `ai.example.app`, paling banyak 128 karakter | Alat, Micromeet, Pasang | Ditolak |
| `name` | String, atau `{ zh, en }` dengan setidaknya salah satunya; 1–60 karakter. Tidak ditandatangani: kartu persetujuan masuk menampilkan nama yang didaftarkan Micromeet | Alat, Pasang | Ditolak |
| `version` | Diawali huruf atau angka; huruf, angka, `.`, `+`, `-`; paling banyak 32 | Alat, Micromeet | Ditolak |
| `version_code` | String 12 digit, waktu build `YYMMDDHHmmss` | Alat, Pasang | Ditolak |
| `entry` | File yang dikemas di dalam `app.asar`, bukan unpacked; path relatif, paling banyak 256 karakter, tanpa `..`, backslash, atau karakter kontrol. Default `index.html` | Alat, Micromeet, Pasang | Ditolak |
| `asar` | Nama file arsip: huruf, angka, `.`, `_`, `-`, diakhiri `.asar`. Default `app.asar` | Alat, Pasang | Ditolak |
| `domains` | Opsional; hanya untuk Mini App yang memasukkan pengguna dengan Micromeet ([Domain server](https://docs.micromeet.ai/id/miniapp-sdk/build.md#domain-server)). `https://host[:port]` huruf kecil, tanpa path atau alamat IP; atau `http(s)://localhost[:port]` / `127.0.0.1[:port]`. Tanpa duplikat, paling banyak 20 | Alat, Micromeet, Pasang | Ditolak. Micromeet mendaftarkan versi hanya jika setiap domainnya sudah diverifikasi untuk AppID itu |
| `asarHeaderSha256` | SHA-256 dari 8 + panjang-header byte pertama `app.asar`; ditulis oleh alat | Alat, Micromeet, Buka | Dianggap tidak bertanda tangan: Cowork tidak membukanya |
| `signature` | `{ kid, alg: "Ed25519", value }`, ditulis dari jawaban Micromeet | Alat, Buka | Dianggap tidak bertanda tangan: Cowork tidak membukanya |
| `extension` | Tidak boleh ada di paket bertanda tangan | Alat, Pasang | Ditolak |

## app.asar

| Aturan | Diperiksa oleh | Jika tidak dipenuhi |
|---|---|---|
| Dibuat dengan `@electron/asar` 3.x; header persis seperti yang ditulisnya, paling besar 64 MB | Alat, Micromeet, Pasang | Ditolak |
| Setiap file, dikemas maupun unpacked, punya `integrity`: SHA-256 per blok 4 MB | Alat, Micromeet, Buka | Ditolak; Cowork menganggapnya tidak bertanda tangan |
| Tanpa symbolic link, di dalam `app.asar` maupun di `app.asar.unpacked/` | Alat, Micromeet, Pasang | Ditolak |
| Nama file dan folder tidak kosong, bukan `.` atau `..`, dan tidak berisi `/`, backslash, atau NUL | Alat, Micromeet | Ditolak |
| `app.asar` paling besar 512 MB; taruh video dan audio di `app.asar.unpacked/` | Alat, Micromeet | Ditolak |
| `app.asar.unpacked/` paling banyak 100.000 file dan 8 GB; ukuran setiap file sesuai catatan header | Alat, Pasang | Ditolak |
| Byte setiap file cocok dengan digest-nya | Alat, Micromeet, Buka | Micromeet menolak menandatangani; Cowork menutup Mini App dan memberi tahu bahwa file-nya diubah |
| Tanpa `<script>` inline di HTML: halaman disajikan dengan kebijakan konten `script-src 'self'` | Alat (`pack`) | Ditolak oleh `pack`; di halaman skrip itu juga tidak akan berjalan |

Cowork menyajikan file dari `miniapp://<appId>/`, jadi path absolut seperti `/assets/app.js` bisa dipakai. Request ke layanan lain tidak dibatasi.

## Tanda tangan

Micromeet menandatangani byte berikut dengan Ed25519. `domains` diurutkan dan digabung dengan satu spasi; baris terakhir kosong jika tidak ada domain. `name` dan ikon tidak ditandatangani.

```text
miniapp-sig-v2
<appId>
<version>
<entry>
<asarHeaderSha256>
<domains>
```

Versi yang didaftarkan sebelum 2026-11-10 memakai `miniapp-sig-v1` (lima baris pertama, tanpa domain) dan tetap berlaku untuk manifest tanpa `domains`.

| Cowork | Dianggap bertanda tangan |
|---|---|
| Cowork rilis | `cowork-prod-1`: versi yang ditandatangani Micromeet produksi |
| Cowork Preview | `cowork-preview-1` |
| Jalankan untuk pengembangan (belum dikemas) | Kunci kanalnya sendiri, `cowork-preview-1`, dan `cowork-test-1` |

## Versi dan pengiriman

| Aturan | Diperiksa oleh | Jika tidak dipenuhi |
|---|---|---|
| Sebuah versi hanya didaftarkan sekali: ubah `version` untuk setiap build yang Anda serahkan | Micromeet | Ditolak |
| Mengubah file apa pun, `entry`, atau `domains` perlu versi dan tanda tangan baru | Buka | Dianggap tidak bertanda tangan: Cowork tidak membukanya |
| Dipasang sendiri dari zip atau folder (`miniapp_install`): setiap `version_code` di foldernya sendiri, versi lama dihapus setelah tab-nya ditutup | Pasang | — |
| Atau di dalam paket Cowork, disalin atau di-link; paket yang disalin paling banyak 2.000 file dan 50 MB, termasuk `app.asar` | Pasang | Paketnya ditolak |

## Saat Cowork membukanya

- Tidak bertanda tangan, ditandatangani dengan kunci yang tidak dipercaya Cowork ini, atau tidak bisa dibaca: Cowork tidak membukanya dan memberi tahu pengguna bahwa Mini App itu belum tersertifikasi.
- File yang berbeda dari digest-nya saat halaman membacanya: Cowork menutup Mini App dan memberi tahu bahwa file-nya diubah.
- Setiap akun Cowork punya penyimpanan sendiri untuk Mini App; seseorang tidak pernah melihat milik orang lain.
- Halaman tetap di `miniapp://<appId>/`; tautan `http(s)` dibuka di browser sistem.
- Memasukkan pengguna juga memerlukan AppID dan versi yang aktif di Micromeet serta setidaknya satu domain server terverifikasi di `domains` (lihat [Masuk](https://docs.micromeet.ai/id/miniapp-sdk/auth.md)).

## Terkait

- [Pengemasan dan Tanda Tangan](https://docs.micromeet.ai/id/miniapp-sdk/build.md): Membuat paket dan meminta Micromeet menandatanganinya
- [Masuk](https://docs.micromeet.ai/id/miniapp-sdk/auth.md): Memasukkan pengguna dari Mini App
- [Ikhtisar](https://docs.micromeet.ai/id/miniapp-sdk/overview.md): Semua modul Mini App SDK
