SDK разработчика плагинов
Расширьте 1С Агент OneC своими модулями. Плагин — это маленький исполняемый файл, который агент запускает по защищённому протоколу. Новый плагин на Go — около 150 строк кода. Опубликуйте его в маркетплейсе и получайте выплаты с разделением выручки в вашу пользу.
Быстрый стартМаркетплейсЧто такое плагин
Плагин — отдельный исполняемый файл (нативный Go, кросс-платформенный) рядом с агентом. Агент общается с ним по строкам JSON-RPC через stdin/stdout. Плагин объявляет команды в манифесте plugin.json; агент показывает их в админ-панели и даёт вызывать из браузера, из ИИ-Помощника и из других плагинов — с аудитом каждого вызова по приказу ФСТЭК-117.
Манифест
Один файл plugin.json описывает имя, версию, команды, параметры и категорию данных.
Простой протокол
JSON-RPC по строкам через stdin/stdout. Никаких сетевых портов, никаких сервисов.
Песочница прав
Каждая команда помечена категорией данных; мутации — под подтверждением; всё в аудит-журнал.
Кросс-платформенность
Поле platforms в манифесте: windows / linux / darwin. Один SDK на все ОС.
Потоковый прогресс
SendPartial — отдавать промежуточные результаты долгих операций без блокировки.
Межплагинные вызовы
Плагин может вызвать команду другого плагина через агента (по белому списку).
Структура плагина
my-plugin/
├── plugin.json # манифест: имя, версия, команды, параметры
├── main.go # точка входа на Go SDK
├── go.mod
└── my-plugin.exe # собранный бинарь (GOOS=windows GOARCH=amd64)Манифест plugin.json
Обязательны: name (совпадает с именем каталога), version, entrypoint (относительный путь, без ..), mode (oneshot или persistent) и хотя бы одна команда. Каждая команда указывает data_category: open / internal / confidential / restricted.
{
"name": "my-plugin",
"version": "0.1.0",
"description": "Что делает плагин — одна строка.",
"author": "Ваша команда",
"entrypoint": "my-plugin.exe",
"runtime": "native",
"mode": "oneshot",
"timeout_sec": 30,
"platforms": ["windows", "linux", "darwin"],
"commands": [
{
"name": "greet",
"description": "Возвращает приветствие.",
"data_category": "open",
"params": {
"who": { "type": "string", "default": "world",
"description": "Кого приветствовать" }
}
}
]
}Протокол: handshake → exec
При запуске persistent-плагина агент проводит рукопожатие $plugin.handshake, передавая свой список возможностей; плагин отвечает своим и вычисляет пересечение (capability-модель). Дальше каждая команда — один запрос (stdin) и один терминирующий ответ (stdout). Oneshot-плагин читает один запрос и завершается.
# запрос (stdin):
{"id":"req-1","method":"greet","params":{"who":"Василий"}}
# ответ (stdout):
{"id":"req-1","ok":true,"result":{"greeting":"Привет, Василий"}}
# промежуточный кадр прогресса (опционально, до финального):
{"id":"req-1","partial":{"done":40,"total":100}}Быстрый старт — Go SDK
Минимальный плагин — около 15 строк. SDK берёт на себя протокол, рукопожатие, потоковый прогресс, восстановление после паники и хелперы (PowerShell с UTF-8, контекст агента, форензическая stream-сессия).
package main
import "github.com/neuralgate/onec-plugin-sdk"
func main() {
p := onecplugin.New()
p.Register("greet", func(req *onecplugin.Request) onecplugin.Response {
who, _ := req.Params["who"].(string)
if who == "" { who = "world" }
return onecplugin.OK(map[string]any{"greeting": "Привет, " + who})
})
p.Run()
}Сборка: GOOS=windows GOARCH=amd64 go build -o my-plugin.exe . (на Apple Silicon обязательно указывайте GOARCH=amd64 — иначе соберётся arm64, и агент откажется грузить плагин).
Безопасность и категории данных
- Плагин исполняется с правами агента — относитесь к нему как к доверенному коду. Сторонние плагины проходят ревью перед публикацией.
- Категория данных команды (open / internal / confidential / restricted) определяет уровень аудита и предупреждения оператору.
- Мутации (изменение системы) выполняются только под подтверждением пользователя; читающие команды — без него.
- entrypoint обязан быть относительным и не содержать «..» — защита от выхода из каталога плагина.
- Межплагинные вызовы запрещены по умолчанию: нужен явный allowed_callees у вызывающего и (опц.) allowed_callers у вызываемого.
- Потоковый режим (форензика): плагин ничего не пишет на машину заказчика — результаты передаются на сервер потоком (непрерывная цепочка хранения доказательств).
Публикация в маркетплейс
Три класса плагинов: бесплатные (ядро, для массового распространения), премиум (открываются по тарифу Корпоративный) и маркетплейс — платные дополнения, в том числе от сторонних авторов, с разделением выручки 70/30 в пользу автора.
- Напишите и протестируйте плагин на своей машине (Windows / Linux / macOS).
- Подайте плагин на ревью — мы проверяем безопасность (плагин исполняется с правами агента) и соответствие манифеста.
- После ревью мы подписываем пакет (целостность + привязка к автору) и публикуем в каталоге с ценой.
- Покупка выдаёт аккаунту/машине подписанное сервером право доступа (entitlement); агент проверяет его при запуске команды.
- Выплаты — разделение выручки 70/30 (автор/площадка).
Готовые примеры
Изучите рабочие плагины из каталога — от простого hello до форензических. Все доступны в репозитории как образцы для копирования.
Дальше
Полный гайд по SDK — структура, контракт хоста плагинов, тестирование, кросс-платформенность, безопасность — в документации репозитория (docs/plugin-sdk.md).