Eklenti SDK
Bir eklenti tarafından tanımlanır bir manifest.json. Geliştirme sırasında manifesti doğrulayan sözleşme, platformun yükleme sırasında uyguladığı sözleşmeyle aynıdır, bu nedenle geçen bir manifest validate marketplace’in kabul edeceği bir manifestodur. aihummer plugin CLI tüm yaşam döngüsünü kapsar: iskandardan imzalamaya ve yayımlamaya kadar.
Bir manifest, bir sözleşme
Bir eklentinin tam olarak bir doğruluk kaynağı vardır — bu onun manifest.json. Eklenti türünü beyan eder (kind), nasıl yapılandırıldığı (config[]), yetenekleri ve — ana bilgisayar yerel hizmetleri için — install[] adımlar ve başlat komutu SystemdDağıtıcı çalışır. Çünkü geliştirme ve kurulum aynı doğrulama sözleşmesini kullanır, “geçerli manifest” ve “yüklenebilir eklenti” aynı şeyi ifade eder.
[!NOTE] Manifest, bir eklentiyi tanımlar sözleşme, mağaza sayfası adı değil. makine
slugdizin/paket adından (özel yan yükleme) veya şundan gelir doldurduğunuz başvuru «Eklentilerim» bir topluluk eklentisi yayınlarken — görmek Bir eklenti yayımlamak.
CLI
aihummer plugin geliştirme, paketleme ve yayınlama komutlarını bir araya getirir:
# Scaffold a manifest (kind: connector | service | openapi | mcp)
aihummer plugin init <kind> [dir]
# Validate a manifest against the install contract
aihummer plugin validate <manifest.json>
# Generate an ed25519 author key (writes <prefix>.key and <prefix>.pub)
aihummer plugin keygen [--out <prefix>]
# Build and package the plugin into a release tarball + .sha256
aihummer plugin package <dir> [--out <file>] [--slug <slug>] [--build "<cmd>"]
# Sign the release identity (slug\0version\0source_ref); with --manifest the
# signature is embedded into the manifest.signature field
aihummer plugin sign --key <priv> [--manifest <m.json>] <bundle|dir>
# Upload a private plugin into your own instance (side-load)
aihummer plugin publish --private --instance <url> --token <admin> <bundle.tar.gz>
Yayınlamak için topluluk herkes için eklenti, sen yaparsın değil bir CLI komutu kullanın — paketlenmiş, imzalanmış artefaktı kendi sisteminizden yükleyin Eklentilerim kişisel kabinette (yükle → AI inceleme → moderasyon). Bakınız Bir eklenti gönder.
| Komut | Ne yapar |
|---|---|
init <kind> [dir] |
Bir başlangıç yazar manifest.json seçilmiş tür için. |
validate <m.json> |
Yükleme ile aynı sözleşmeyi kullanarak manifesti doğrular. |
keygen |
Yazar anahtar çiftini oluşturur: .key (özel, gizli tut) ve .pub, yazdırır key id. |
package <dir> |
Yapılar (isteğe bağlı) --build) ve paketler içine <slug>-<version>.tar.gz ile bir --strip-components=1 düzen, yazar .sha256. Asla paketlemez .env, *.key, node_modules, .git. |
sign --key <priv> |
Serbest bırakma kimliğini imzalar; imzayı basar ve key id; ile --manifest İmzanın manifestoya gömülmesini sağlar. |
publish --private |
Bir paketi örneğinizin üzerine yükler POST /v1/admin/modules/upload. |
Hem özel yan yükleme hem de kişisel kabine aracılığıyla topluluk yayıncılığı ile ilgili yayın yolları ayrıntılı olarak Bir eklenti yayımlamak.
Manifest alanları
Bir alanın gerekli olup olmadığı şuna bağlıdır nazik ve eklentinin halka açık olup olmadığına. Temel ve kimlik alanları:
| Alan | Tür | Gerekli | Amaç |
|---|---|---|---|
kind |
dizi | her zaman | Tür: connector | service | openapi | mcp. |
version |
dizi | evet | Eklenti sürümü (semver), örn. 1.0.0. |
contract |
dizi | kanallar için | Sözleşme Kimliği, örn. aihummer.channel.v1. |
scope |
dizi | hayır | Erişim modeli: shared (varsayılan) veya personal. |
capabilities |
dizi[] | hayır | Beyan edilen yetenekler. |
config |
nesne[] | hayır | Yapılandırma formu alanları; her biri ihtiyaç duyar key, artı label, secret, required. |
oauth |
nesne | hayır | OAuth2 (authorize_url, token_url, scopes[]) bir kullanıcının hesabını bağlamak için. |
signature |
dizi | imzalandığında | base64 ed25519 imzası sürüm kimliği üzerinde (gömülü olarak sign). |
Türe özgü alanlar — tam olarak bir blok … göre doldurulur kind:
| Alan | Nazik için | Gerekli | Amaç |
|---|---|---|---|
host_native.exec_start |
bağlayıcı, hizmet | evet | Uzun ömürlü servisi çalıştıran komut. |
host_native.runtime |
bağlayıcı, servis, mcp | hayır | node | python | binary. |
host_native.install |
bağlayıcı, servis, mcp | hayır | Kurulum adımları (kabuk komutları dizisi), çıkarma işleminden sonra ana bilgisayarda çalıştırın. |
host_native.port |
bağlayıcı, hizmet | hayır | Tercih edilen TCP bağlantı noktası (kurulum yapan kişi tarafından yeniden atanabilir $PORT). |
host_native.health_path |
bağlayıcı, hizmet | hayır | Sağlık kontrol yolu (varsayılan /healthz). |
openapi.spec_url |
openapi | evet | OpenAPI 3.x spesifikasyonunun URL’si. |
openapi.base_url |
openapi | hayır | Üzerine yazmak servers[0].url. |
openapi.allowed_hosts |
openapi | hayır | Sentezlenmiş araçlar için çıkış izin listesi. |
openapi.auth |
openapi | hayır | Harita securityScheme → gizli isim. |
openapi.tool_prefix |
openapi | hayır | Araç adı öneki. |
mcp.transport |
mcp | evet | stdio veya http. |
mcp.command / mcp.args |
mcp (stdio) | evet stdio için | Sunucu yürütülebilir dosyası ve argümanları. |
mcp.url |
mcp (http) | evet http için | MCP uç noktası URL’si. |
mcp.auth_header / mcp.secret_token_key |
mcp (http) | hayır | Bearer jetonu için başlık ve gizli anahtar. |
Mağaza sayfası ve kimlik alanları (topluluk eklentileri için)
Manifest ayrıca yayıncı kimliği ve mağaza sayfası alanlarını da taşıyabilir. Bir topluluk eklenti bunlar katalogda gösterilenlerdir, ama genellikle onları içine girersiniz «Eklentilerim» gönderim sırasında kişisel kabininizdeki mağaza sayfası (isim, açıklamalar, simge, ekran görüntüleri, kategori, bağış bağlantısı) yerine manifestoda elle. Özel bir yan yükleme bunların hiçbirine ihtiyaç duymaz — böyle bir eklenti örnek seviyesinde güvenilmiştir.
| Alan | Tür | Gerekli | Amaç |
|---|---|---|---|
visibility |
dizi | hayır | public | private | unlisted. Boş = eski/önceden var olan (kimlik gereksinimi yok). |
publisher |
dizi | kamusal | Yayıncı ad alanı, ^[a-z0-9][a-z0-9-]{1,38}$. Genel sümüklüböcekler adlandırılır @publisher/slug. |
publisher_key_id |
dizi | kamusal | key id artifaktın imzalandığı anahtarın. |
description |
dizi | kamusal | Katalogdaki mağaza sayfası açıklaması. |
icon |
dizi | kamusal | Eklenti simgesi: bir https:// URL veya bir data: URI. |
screenshots |
dizi[] | hayır | Mağaza sayfası ekran görüntüleri (dizisi https:// URL’ler; her biri boş olmayan). |
[!TIP] Koş
aihummer plugin validategöndermeden önce. Kurulum ve doğrulama sözleşmeler aynıdır, bu nedenle yerel olarak geçen bir beyan her iki durumda da kabul edilecektir pazar yeri dağıtıcısı tarafından ve kişisel kabininizde pazar yeri incelemesi tarafından.
Minimal tezahürler
A service iskelet (ne aihummer plugin init service yazıyor):
{
"version": "1.0.0",
"kind": "service",
"scope": "shared",
"contract": "aihummer.channel.v1",
"host_native": {
"runtime": "node",
"install": ["npm ci --omit=dev"],
"exec_start": "node dist/main.js",
"port": 8800,
"health_path": "/healthz"
},
"config": [
{ "key": "api_token", "label": "API token", "secret": true, "required": true }
]
}
Sıfır kod openapi manifest daha da kısa — sadece spesifikasyona işaret ediyor:
{
"version": "1.0.0",
"kind": "openapi",
"scope": "shared",
"openapi": {
"spec_url": "https://api.example.com/openapi.json",
"tool_prefix": "example_",
"allowed_hosts": ["api.example.com"],
"auth": { "bearerAuth": "api_token" }
},
"config": [
{ "key": "api_token", "label": "API token", "secret": true, "required": true }
]
}
Bir mcp manifesto (stdio taşımacılığı):
{
"version": "1.0.0",
"kind": "mcp",
"scope": "shared",
"host_native": { "runtime": "node", "install": ["npm ci --omit=dev"] },
"mcp": { "transport": "stdio", "command": "node", "args": ["server.js"] }
}
Manifestten pazara
Doğrulamadan sonra, bir eklenti paketlenir (package), imzalı (sign) ve iki şekilde yayımlanmış:
- Özel (kendin için) — Admin UI üzerinden veya
publish --private. Eser nesne asla örnekten ayrılmaz. - Topluluk (herkes için) — paketlenmiş, imzalanmış eseri şuradan yükleyin Eklentilerim kişisel dolabınızda; Yapay zekâ incelemesi ve insan moderasyonundan sonra imzalanır ve topluluğa yayınlanır. katalog.
Gör Bir eklenti yayımlamak tam rehber için.
Sırada neresi
- Bir eklenti yayımlamak — özel yan yükleme ve kişisel kabinet aracılığıyla topluluk yayıncılığı, inceleme ve moderasyon.
- Sıfır kodlu entegrasyonlar —
openapivemcpçeşitleri detaylı olarak. - Kurulum ve güncellemeler — ne sürer
install[], sağlık kapısı, güven ve imzalı güncellemeler. - Pazar Yeri: genel bakış ve seviyeler — nerede her türün nasıl yaşadığı ve resmi katalogun topluluktan nasıl farklı olduğu.