Kontrak pemaketan kohor
Kontrak yang stabil dan dapat dikonsumsi hilir untuk pemaketan kohor dan manifest plugin — mengenumerasi kohor dan me-resolve target native per-harness-nya tanpa menurunkan ulang pemetaannya.
Kontrak Pemaketan Kohor
Dokumen ini menetapkan kontrak yang stabil dan dapat dikonsumsi hilir untuk pemaketan kohor dan manifest plugin. Konsumen membaca kontrak ini untuk mengenumerasi kohor dan me-resolve target native per-harness-nya tanpa menurunkan ulang pemetaannya.
Artefak
| Artefak | Peran |
|---|---|
src/apothem/schemas/cohort.schema.json | JSON Schema untuk dokumen manifest kohor. |
src/apothem/schemas/cohort-manifest.yaml | Instans manifest kohor — keenam kohor (core, developer, security, research, ai-engineering, full) terisi dengan himpunan anggotanya; full adalah gabungan dari kelima kohor lainnya. |
src/apothem/schemas/plugin.schema.json | JSON Schema untuk manifest plugin per-bundel (plugin.json). |
src/apothem/lib/propagation-manifest.yaml | Sumber kebenaran untuk target native per-harness. |
Bentuk manifest kohor
Manifest kohor adalah objek tingkat atas dengan tiga kunci:
version— string SemVer dari manifest.cohorts[]— satu entri per kohor. Setiap entri memilikiid(dari himpunan tertutupcore | developer | security | research | ai-engineering | full),name,description, danmembers(objek yang mengelompokkan pengenal anggota menurut tipe katalog:skills/agents/commands/rules/hooks).per_harness_targets— kontrak resolusi (di bawah).
Setiap pengenal anggota adalah nama kebab-case yang stabil yang berpadanan
dengan artefak nyata di bawah src/apothem/ (skills/<name>/,
agents/<name>.md, commands/<name>.md, rules/<name>.md, atau entri hooks —
baik hooks/<name>.py yang dapat dieksekusi maupun konteks pesan anjuran di
hooks/messages/<name>.md yang dikirimkan melalui dispatcher).
Mengenumerasi kohor
Konsumen memuat cohort-manifest.yaml, memvalidasinya terhadap
cohort.schema.json, lalu mengiterasi cohorts[]. Untuk setiap kohor, konsumen
membaca members.<type> untuk memperoleh pengenal anggota dari setiap tipe
katalog.
Me-resolve target native per-harness (tanpa penurunan ulang)
Manifest kohor tidak menyatakan ulang pemetaan harness. Sebagai gantinya,
per_harness_targets.source menunjuk ke lib/propagation-manifest.yaml,
satu-satunya sumber kebenaran. Aturan resolusinya:
Untuk anggota kohor bertipe katalog
T(salah satu dariskills,agents,commands,rules,hooks) dan harness targetH(salah satu yang tercantum dalamper_harness_targets.harnesses), target plugin native adalah bidangtargetdari entri dilib/propagation-manifest.yamldi bawahharnesses.H.installyangsource-nya cocok denganT/.
Sebagai contoh, skill kohor core yang dipasang untuk claude_code di-resolve
melalui entri harnesses.claude_code.install dengan source: "skills/" menjadi
target: "${HARNESS_ROOT}/skills/". Skill yang sama untuk opencode di-resolve
menjadi ${HARNESS_ROOT}/skills/; untuk gemini_cli menjadi
${PROJECT_ROOT}/.gemini/skills/. Konsumen tidak pernah mengarang target
harness — mereka mencarinya.
Placeholder ${HARNESS_ROOT} / ${PROJECT_ROOT} di-resolve saat pemasangan oleh
setiap adapter harness; konsumen kohor memperlakukan target yang telah
di-resolve apa adanya.
Peran manifest plugin
plugin.schema.json mendeskripsikan sebuah plugin.json — bundel anggota
katalog yang mendeskripsikan dirinya sendiri (skills / commands / agents /
hooks / rules) dengan bidang wajib name, version SemVer, dan
description. Metadata opsional mencakup displayName (nama yang ditampilkan
sebagai pengganti name) dan bidang daftar direktori plugin:
documentationUrl, supportUrl, privacyPolicyUrl, dan termsOfServiceUrl,
masing-masing berupa URL https://, ditambah jalur icon di dalam plugin.
Paket Claude Code yang dihasilkan menetapkan displayName, documentationUrl,
dan supportUrl. Direktori Anthropic membaca bidang daftar tersebut dan Claude
Code mengabaikannya saat memuat. Sinkronisasi marketplace claude.ai melaporkan
kedua tautan itu sebagai kunci yang tidak dikenali dan menghapusnya, sehingga
marketplace di sana menampilkan "1 with warnings". Peringatan itu memang
diharapkan, dan plugin dimuat tanpa perubahan. Manifest plugin adalah unit yang dimaterialisasikan adapter
harness ke permukaan plugin native-nya; kohor memilih anggota mana yang dibawa
sebuah plugin, dan manifest propagasi me-resolve tempat anggota-anggota itu
mendarat per harness.
Keputusan pemaketan — satu bundel payung, kohor logis
Kohor adalah lapisan seleksi logis (manifest ini), bukan sekumpulan bundel terpisah yang dapat dipasang secara independen. Apothem mengirimkan satu bundel payung yang membawa katalog lengkap; manifest kohor memungkinkan konsumen memilih subhimpunan yang koheren, dan manifest propagasi me-resolve tempat setiap anggota terpilih mendarat per harness.
Memecah katalog menjadi bundel per-kohor yang terpisah (mis. satu bundel per
keluarga developer / security / research) dapat dicapai tanpa duplikasi
di tingkat repositori melalui pola symlink meta-plugin yang
didokumentasikan oleh permukaan distribusi utama: satu katalog marketplace
mencantumkan beberapa plugin kohor, dan setiap direktori plugin kohor menyimpan
symlink ke katalog bersama bersumber-tunggal alih-alih salinan. Ketika
sebuah kohor dipasang, harness mendereferensi setiap symlink di dalam
marketplace — menyalin isi target ke cache kohor tersebut — sehingga kohor
yang terpasang bersifat mandiri, sementara repositori mempertahankan satu
sumber kebenaran yang dirangkai oleh symlink (perangkaian alih-alih
redundansi, persis seperti yang diutamakan disiplin deduplikasi). Pembacaan
sebelumnya bahwa bundel kohor "menduplikasi secara mekanis" katalog
mencampuradukkan duplikasi cache saat pemasangan (salinan per-plugin normal
milik harness) dengan duplikasi repositori; pola symlink menghindari yang
terakhir.
Apothem saat ini mengirimkan satu bundel payung karena itulah permukaan distribusi paling sederhana, bukan karena kohor mustahil secara mekanis. Mengadopsi bentuk per-kohor adalah pertukaran UX dan pemeliharaan yang sesungguhnya, bukan pelanggaran deduplikasi: keuntungannya adalah pengalaman "pasang hanya keluarga ini" yang lebih halus; biayanya adalah memelihara N direktori symlink kohor beserta entri marketplace-nya, permukaan konformitas / pengujian / golden yang lebih besar, dan salinan cache saat pemasangan per kohor. Lapisan kohor logis di atas sudah memberikan hasil seleksi "pasang hanya yang Anda butuhkan" dari bundel tunggal; pemaketan per-kohor adalah langkah berikutnya kapan pun pengalaman pemasangan yang lebih halus diinginkan.