Плагин SDK
Плагин бір manifest.json арқылы сипатталады. Әзірлеу кезінде манифестті тексеретін
келісімшарт — платформа орнату кезінде мәжбүрлейтін дәл сол келісімшарт, сондықтан
validate-тен өткен манифест — маркетплейс қабылдайтын манифест. aihummer plugin
CLI бүкіл өмірлік циклді қамтиды: қаңқадан бастап қол қоюға және жариялауға дейін.
Бір манифест, бір келісімшарт
Плагиннің дәл бір ақиқат көзі бар — оның manifest.json-ы. Ол плагин түрін
(kind), оның қалай бапталатынын (config[]), оның мүмкіндіктерін, және —
хост-нативті қызметтер үшін — SystemdDeployer
орындайтын install[] қадамдары мен бастау командасын жариялайды. Әзірлеу мен орнату
бір тексеру келісімшартын пайдаланатындықтан, “жарамды манифест” және
“орнатуға жарамды плагин” бір нәрсені білдіреді.
[!NOTE] Манифест плагиннің келісімшартын сипаттайды, оның дүкен-беті атауын емес. Машина
slug-ы каталог/бума атауынан (жеке бүйірден жүктеу) немесе жіберілім өрісінен (қоғамдық) келеді — Плагинді жариялау бөлімін қараңыз.
CLI
aihummer plugin әзірлеу, буып-түю және жариялау командаларын біріктіреді:
# 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>
# Open a PR to the public AiHummer/marketplace-catalog
aihummer plugin publish --public --dir <dir> --key <priv> \
--artifact-url <url> --publisher <name> \
--description <text> --icon <url> [--screenshot <url> ...] \
[--channel stable|beta] [--register-key <pub>]
| Команда | Не істейді |
|---|---|
init <kind> [dir] |
Таңдалған түр үшін бастапқы manifest.json жазады. |
validate <m.json> |
Манифестті орнату сияқты дәл сол келісімшартпен тексереді. |
keygen |
Автор кілт жұбын жасайды: .key (жеке, құпия сақтаңыз) және .pub, key id-ді басып шығарады. |
package <dir> |
Құрады (опц. --build) және --strip-components=1 орналасуымен <slug>-<version>.tar.gz-ке буады, .sha256 жазады. Ешқашан .env, *.key, node_modules, .git бумаламайды. |
sign --key <priv> |
Релиз сәйкестігіне қол қояды; қолтаңба мен key id-ді басып шығарады; --manifest арқылы қолтаңбаны манифестке ендіреді. |
publish --private |
Буманы данаңыздың POST /v1/admin/modules/upload-ына жүктейді. |
publish --public |
AiHummer/marketplace-catalog-қа PR ашады. |
Екі жариялау режимі де Плагинді жариялау бетінде егжей-тегжейлі баяндалған.
Манифест өрістері
Өрістің талап етілетіні-етілмейтіні түрге (kind) және плагиннің қоғамдық екеніне байланысты. Базалық және сәйкестік өрістері:
| Өріс | Түр | Қажет | Мақсаты |
|---|---|---|---|
kind |
string | әрқашан | Түрі: connector | service | openapi | mcp. |
version |
string | иә | Плагин нұсқасы (semver), мысалы 1.0.0. |
contract |
string | арналар үшін | Келісімшарт ID, мысалы aihummer.channel.v1. |
scope |
string | жоқ | Қол жеткізу моделі: shared (әдепкі) немесе personal. |
capabilities |
string[] | жоқ | Жарияланған мүмкіндіктер. |
config |
object[] | жоқ | Конфигурация форма өрістері; әрқайсысына key, плюс label, secret, required қажет. |
oauth |
object | жоқ | Пайдаланушы тіркелгісін жалғау үшін OAuth2 (authorize_url, token_url, scopes[]). |
signature |
string | қол қойылғанда | релиз сәйкестігі бойынша base64 ed25519 қолтаңба (sign ендіреді). |
Түрге тән өрістер — kind-ке байланысты дәл бір блок толтырылады:
| Өріс | Қай түр үшін | Қажет | Мақсаты |
|---|---|---|---|
host_native.exec_start |
connector, service | иә | Ұзақ өмір сүретін қызметті іске қосатын команда. |
host_native.runtime |
connector, service, mcp | жоқ | node | python | binary. |
host_native.install |
connector, service, mcp | жоқ | Орнату қадамдары (shell командаларының массиві), экстракциядан кейін хостта орындалады. |
host_native.port |
connector, service | жоқ | Қалаулы TCP порты (деплойер $PORT арқылы қайта тағайындай алады). |
host_native.health_path |
connector, service | жоқ | Денсаулық тексеру жолы (әдепкі /healthz). |
openapi.spec_url |
openapi | иә | OpenAPI 3.x спецификациясының URL-і. |
openapi.base_url |
openapi | жоқ | servers[0].url-ды басып озу. |
openapi.allowed_hosts |
openapi | жоқ | Синтезделген құралдар үшін шығыс рұқсат тізімі. |
openapi.auth |
openapi | жоқ | securityScheme → құпия атауын салыстыру. |
openapi.tool_prefix |
openapi | жоқ | Құрал-атауы префиксі. |
mcp.transport |
mcp | иә | stdio немесе http. |
mcp.command / mcp.args |
mcp (stdio) | stdio үшін иә | Сервер орындалатын файлы және аргументтер. |
mcp.url |
mcp (http) | http үшін иә | MCP соңғы нүкте URL-і. |
mcp.auth_header / mcp.secret_token_key |
mcp (http) | жоқ | Bearer токені үшін тақырып және құпия кілт. |
Дүкен-беті және сәйкестік өрістері (қоғамдық плагиндерге)
Қоғамдық каталогқа кіру үшін манифест жариялаушы сәйкестігін және дүкен-беті өрістерін тасуы тиіс. Жеке бүйірден жүктеуге олардың ешқайсысы қажет емес — мұндай плагинге дана деңгейінде сенеді.
| Өріс | Түр | Қажет | Мақсаты |
|---|---|---|---|
visibility |
string | жоқ | public | private | unlisted. Бос = ескі/бірінші-тарап (сәйкестік талабы жоқ). |
publisher |
string | қоғамдық үшін | Жариялаушы кеңістігі, ^[a-z0-9][a-z0-9-]{1,38}$. Қоғамдық slug-тар @publisher/slug деп аталады. |
publisher_key_id |
string | қоғамдық үшін | Артефакт қол қойылған кілттің key id-і. |
description |
string | қоғамдық үшін | Каталогтағы дүкен-беті сипаттамасы. |
icon |
string | қоғамдық үшін | Плагин белгішесі: https:// URL немесе data: URI. |
screenshots |
string[] | жоқ | Дүкен-беті скриншоттары (https:// URL массиві; әрқайсысы бос емес). |
[!TIP] Әр жариялаудан бұрын
aihummer plugin validateорындаңыз. Орнату мен тексеру келісімшарты бірдей, сондықтан жергілікті жерде өткен манифестті маркетплейс деплойері де, қоғамдық каталог валидаторы да қабылдайды.
Минималды манифестер
service қаңқасы (aihummer plugin init service нені жазады):
{
"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 }
]
}
Кодсыз openapi манифесті одан да қысқа — ол жай ғана спецификацияға бағыттайды:
{
"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 }
]
}
mcp манифесті (stdio тасымалы):
{
"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"] }
}
Манифестен маркетплейске
Тексеруден кейін плагин буып-түйіледі (package), қол қойылады (sign) және
екі режимнің бірінде жарияланады:
- Жеке (өзіңіз үшін) — әкімші интерфейсі немесе
publish --privateарқылы данаңызға бүйірден жүктеу. Артефакт данадан ешқашан шықпайды. - Қоғамдық (барлығы үшін) —
publish --publicқоғамдық каталогқа PR ашады; шолудан кейін AiHummer релизге қарсы қол қояды және оны қауымдастық каталогына жариялайды.
Толық нұсқаулықты Плагинді жариялау бөлімінен қараңыз.
Әрі қарай қайда
- Плагинді жариялау — жеке бүйірден жүктеу және қоғамдық тіркеу, жіберілім келісімшарты, модерация.
- Кодсыз интеграциялар —
openapiжәнеmcpтүрлері егжей-тегжейлі. - Орнату және жаңартулар —
install[]-ты не жүргізеді, денсаулық қақпасы, сенім және қол қойылған жаңартулар. - Маркетплейс: шолу және дәрежелер — әр түр қайда орналасады және ресми каталог қауымдастықтан немен ерекшеленеді.