Среды и упаковка
Поддерживаемые среды
runtime | Точка входа | Примечание |
|---|---|---|
java | .jar | Нужна Java 8+ |
python | .py | python3 / python в PATH |
node | .js | node в PATH |
c / cpp | бинарник | Нативный |
go | бинарник | Результат go build |
rust | бинарник | cargo build --release |
zig | бинарник | zig build-exe |
native | бинарник | Универсальный вариант |
Нативным средам не нужен интерпретатор на машине пользователя, но собирать нужно под каждую платформу.
manifest.json
{
"id": "hello-go",
"name": "Hello Go",
"version": "1.0.0",
"runtime": "go",
"entry": "bin/hello-go.exe",
"permissions": ["ui"],
"description": "Пример расширения"
}| Поле | Обязательно | Описание |
|---|---|---|
id | да | [a-z0-9-], нельзя менять после установки |
name | да | Отображаемое имя |
version | да | Semver |
runtime | да | Из таблицы выше |
entry | да | Относительный путь внутри пакета |
author / description / homepage | нет | |
permissions | нет | Массив |
minHost | нет | Минимальная версия лаунчера |
args / env | нет | Аргументы и переменные окружения |
В entry используйте /, запрещены .. и абсолютные пути.
Упаковка
python extensions/pack.py extensions/examples/hello-go -o dist/hello-go.zipЧто делает:
- Проверяет
manifest.json. - Собирает нативные среды (
go build -ldflags "-s -w",cargo build --release). - Приводит права в zip к
0644; при распаковке хост добавляет0755точке входа. - Проверяет лимиты размера.
- Пишет zip.
Примеры и SDK
| Путь | Среда | Что показывает |
|---|---|---|
extensions/examples/hello-java | java | Минимальное расширение |
extensions/examples/hello-go | go | Нативный бинарник + API |
extensions/examples/hello-rust | rust | JSON без зависимостей |
| Язык | SDK |
|---|---|
| Go | extensions/sdk/go (package tmlext, только stdlib) |
| Rust | extensions/sdk/rust (crate tml-ext, без зависимостей) |
SDK и шаблоны
У протокола один источник — extensions/schema в этом репозитории. SDK бывает двух видов: Go и Rust подключают extensions/sdk отсюда как зависимость (без копирования), а шаблоны Java / Python / Node / C несут собственную реализацию без зависимостей:
| Язык | Шаблон | Как подключается SDK |
|---|---|---|
| Java | https://github.com/TYWStudio/template-tml-extension-java | Встроенный Json.java, без внешних зависимостей |
| Python | https://github.com/TYWStudio/template-tml-extension-python | Встроенный tml.py |
| Node.js | https://github.com/TYWStudio/template-tml-extension-node | Встроенный tml.js |
| C | https://github.com/TYWStudio/template-tml-extension-c | Встроенная реализация без зависимостей |
| Rust | https://github.com/TYWStudio/template-tml-extension-rust | tml-ext = { git = "https://github.com/TYWStudio/TML", tag = "sdk-rust-v1.0.0" } |
| Go | https://github.com/TYWStudio/template-tml-extension-go | require github.com/TYWStudio/TML/extensions/sdk/go v1.0.0 |
Пошагово для каждого языка: Шаблоны по языкам.
Порядок при изменении протокола: сначала правим extensions/sdk/* и schema/ здесь, ставим новый тег (extensions/sdk/go/vX.Y.Z для Go, sdk-rust-vX.Y.Z для Rust), затем поднимаем версию зависимости в шаблонах. Обратный порядок порождает две реализации.
Отладка
cd extensions/my-ext
./bin/hello-goПосле изменений нажмите «Обновить» в настройках. Логи: logs/ext-*.log. Об импорте и включении см. Импорт и управление.
| Симптом | Причина |
|---|---|
| Не появляется в списке | Ошибка JSON или повтор id |
| «Пакет изменён» | Содержимое изменили, запись доверия не обновили |
| «Среда недоступна» | Нет интерпретатора, нет прав на запуск, другая архитектура |
| Сразу завершается | Точка входа не читает stdin или упала |
