Plugin SDK
Bir plugin tərəfindən təsvir olunur bir manifest.json. İnkişaf zamanı manifesti təsdiqləyən müqavilə, platformanın quraşdırma zamanı tətbiq etdiyi müqavilə ilə eynidir, beləliklə keçən manifest validate bazarın qəbul edəcəyi bir manifestdir. aihummer plugin CLI bütün həyat dövrünü əhatə edir: skaffolddan imzalamağa və yayımlamaya qədər.
Bir yük siyahısı, bir müqavilə
Bir plagin tam olaraq bir həqiqət mənbəyinə sahibdir — onun manifest.json. Bu plugin növünü elan edir (kind), necə konfiqurasiya olunduğu (config[]), onun imkanları və — ev sahibi yerli xidmətləri üçün — install[] addımlar və başlatma əmri ki SystemdDeployer işlədir. Çünki inkişaf və quraşdırma eyni doğrulama müqaviləsindən istifadə edir, “etibarlı manifest” və “quraşdırıla bilən plagin” eyni şeyi ifadə edir.
[!NOTE] Manifest bir plaqinin müqavilə, onun mağaza səhifəsinin adı deyil. maşın
slugdirektoriya/bağlamanın adından (özəl yan yükləmə) və ya doldurduğunuz təqdimat «Mənim əlavələrim» icma əlavəsini nəşr edərkən — görmək Plugin dərc etmək.
Əmr sətri interfeysi
aihummer plugin inkişaf, paketləmə və yayım əmrlərini birləşdirir:
# 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ımlamaq üçün icma hər kəs üçün plagin, sən edirsən yox CLI əmri istifadə edin — paketlənmiş, imzalanmış artefaktı yükləyirsiniz Mənim Pluginlərim şəxsi kabinetdə (yüklə → AI yoxlaması → moderasiya). Bax Plugin göndərin.
| Əmr | Nə edir |
|---|---|
init <kind> [dir] |
Başlanğıc yazır manifest.json seçilmiş növ üçün. |
validate <m.json> |
Manifesti quraşdırma ilə eyni müqavilə ilə təsdiqləyir. |
keygen |
Müəllif açar cütlüyünü yaradır: .key (şəxsi, gizli saxla) və .pub, çap edir key id. |
package <dir> |
Quruluşlar (əlavə seçim) --build) və qablaşdırır <slug>-<version>.tar.gz ilə --strip-components=1 tərtibat, yazır .sha256. Heç vaxt bağlamır .env, *.key, node_modules, .git. |
sign --key <priv> |
Buraxılış şəxsiyyətini imzalayır; imzanı çap edir və key id; ilə --manifest imzanı manifestə yerləşdirir. |
publish --private |
Paketi instansiyanıza yükləyir POST /v1/admin/modules/upload. |
Hər iki nəşr yolu — şəxsi yükləmə və şəxsi kabinet vasitəsilə icma nəşri — ətraflı şəkildə göstərilmişdir Plugin dərc etmək.
Manifest sahələri
Bir sahənin tələb olunub-olunmaması asılıdır nəcib və plaginin ictimai olub-olmamasından asılı olaraq. Baza və identifikasiya sahələri:
| Sahə | Növ | Tələb olunur | Məqsəd |
|---|---|---|---|
kind |
sətir | həmişə | Növ: connector | service | openapi | mcp. |
version |
sətir | bəli | Plugin versiyası (semver), məsələn 1.0.0. |
contract |
sətir | kanallar üçün | Müqavilə ID-si, məsələn aihummer.channel.v1. |
scope |
sətir | xeyr | Giriş modeli: shared (sayılan) və ya personal. |
capabilities |
sətir[] | xeyr | Bəyən edilmiş imkanlar. |
config |
obyekt[] | xeyr | Konfiqurasiya forma sahələri; hər biri lazımdır key, üstəgəl label, secret, required. |
oauth |
obyekt | xeyr | OAuth2 (authorize_url, token_url, scopes[]) istifadəçinin hesabını qoşmaq üçün. |
signature |
sətir | imzalandıqda | buraxılış şəxsiyyəti üzərində base64 ed25519 imzası (daxil edilmiş sign). |
Növə xas sahələr — dəqiq bir blok doldurulması asılı olaraq kind:
| Sahə | Nəcib üçün | Tələb olunur | Məqsəd |
|---|---|---|---|
host_native.exec_start |
birləşdirici, xidmət | bəli | Uzunömürlü xidməti işlədən əmrdir. |
host_native.runtime |
konektor, xidmət, mcp | xeyr | node | python | binary. |
host_native.install |
konektor, xidmət, mcp | xeyr | Quraşdırma addımları (shell əmrləri massivini), çıxarışdan sonra hostda işlədin. |
host_native.port |
birləşdirici, xidmət | xeyr | Üstünlük verilən TCP portu (yerləşdirən tərəfindən dəyişdirilə bilər $PORT). |
host_native.health_path |
birləşdirici, xidmət | xeyr | Sağlamlıq yoxlaması yolu (əsasən /healthz). |
openapi.spec_url |
openapi | bəli | OpenAPI 3.x spesifikasiyasının URL-i. |
openapi.base_url |
openapi | xeyr | Üstünlük vermək servers[0].url. |
openapi.allowed_hosts |
openapi | xeyr | Sintez edilmiş alətlər üçün çıxış icazə siyahısı. |
openapi.auth |
openapi | xeyr | Xəritə securityScheme → gizli ad. |
openapi.tool_prefix |
openapi | xeyr | Alət adı prefiksi. |
mcp.transport |
mcp | bəli | stdio və ya http. |
mcp.command / mcp.args |
mcp (stdio) | bəli, stdio üçün | Server icra edilə bilən faylı və arqumentlər. |
mcp.url |
mcp (http) | bəli http üçün | MCP son nöqtə URL-i. |
mcp.auth_header / mcp.secret_token_key |
mcp (http) | xeyr | Daşıyıcı token üçün başlıq və gizli açar. |
Mağaza səhifəsi və şəxsiyyət sahələri (icma plaginləri üçün)
Manifest həmçinin nəşriyyatın kimliyini və mağaza səhifəsi sahələrini daşıya bilər. Bir üçün icma plugin bunlar kataloqda göstərilənlərdir, amma siz adətən onları daxil edirsiniz «Mənim əlavələrim» tətbiqi təqdim etdiyiniz zaman şəxsi kabinetinizdəki mağaza səhifəsi (ad, təsvirlər, ikon, ekran şəkilləri, kateqoriya, bağış linki) vasitəsilə, deyil ki, manifestdə əl ilə. Özəl yan yükləmə heç birinə ehtiyac yoxdur — belə bir plagin nümunə səviyyəsində etibarlı sayılır.
| Sahə | Növ | Tələb olunur | Məqsəd |
|---|---|---|---|
visibility |
sətir | xeyr | public | private | unlisted. Boş = irsi/ilk tərəf (şəxsiyyət tələb olunmur). |
publisher |
sətir | ictimaiyyət üçün | Nəşriyyat ad sahəsi, ^[a-z0-9][a-z0-9-]{1,38}$. İctimai salyangozlara ad verilir @publisher/slug. |
publisher_key_id |
sətir | ictimaiyyət üçün | key id artefaktın imzalandığı açarın. |
description |
sətir | ictimaiyyət üçün | Kataloqdakı mağaza səhifəsinin qısa təsviri. |
icon |
sətir | ictimaiyyət üçün | Plugin ikonu: an https:// URL və ya data: URI. |
screenshots |
sətir[] | xeyr | Mağaza səhifəsinin ekran görüntüləri (array of https:// URL-lər; hər biri boş olmayan). |
[!TIP] Qaç
aihummer plugin validatetəqdim etməzdən əvvəl. Quraşdırma və yoxlama müqavilə eynidir, beləliklə, yerli olaraq keçən bir manifest hər ikisi tərəfindən qəbul ediləcək bazar yerinin yerləşdiricisi tərəfindən və şəxsi kabinetinizdə bazar yeri nəzərdən keçirilməsi vasitəsilə.
Minimal təzahürlər
A service dəstək (nə aihummer plugin init service yazır):
{
"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 qısadır — sadəcə spesifikasiyaya işarə edir:
{
"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 manifest (stdio nəqliyyatı):
{
"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"] }
}
Manifestdən bazara
Təsdiqləndikdən sonra, bir plaqin paketlənir (package), imzalanmış (sign) və iki yolla dərc olunmuş:
- Şəxsi (özün üçün) — Admin UI vasitəsilə instansiyanıza yan yük edin və ya
publish --private. Əşya heç vaxt nümunəni tərk etmir. - İcma (hər kəs üçün) — paketlənmiş, imzalanmış faylı yükləyin Mənim Pluginlərim şəxsi kabinetinizdə; Süni intellekt nəzərdən keçirildikdən və insan moderasiyasından sonra imzalanır və icmaya yayımlanır kataloq.
Görmək Plugin dərc etmək tam keçid üçün.
Növbəti haradır
- Plugin dərc etmək — özəl yan yükləmə və şəxsi kabinet vasitəsilə icma nəşri, baxış və moderasiya.
- Sıfır-kod inteqrasiyaları —
openapivəmcpnövləri ətraflı. - Quraşdırma və yeniləmələr — nə hərəkət etdirir
install[], sağlamlıq qapısı, etibar və imzalanmış yeniləmələr. - Bazar yeri: ümumi baxış və səviyyələr — harada hər növ necə yaşayır və rəsmi kataloq icmadan necə fərqlənir.