Skip to content

Среды и упаковка ​

Поддерживаемые среды ​

runtimeТочка входаПримечание
java.jarНужна Java 8+
python.pypython3 / python в PATH
node.jsnode в PATH
c / cppбинарникНативный
goбинарникРезультат go build
rustбинарникcargo build --release
zigбинарникzig build-exe
nativeбинарникУниверсальный вариант

Нативным средам не нужен интерпретатор на машине пользователя, но собирать нужно под каждую платформу.

manifest.json ​

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 используйте /, запрещены .. и абсолютные пути.

Упаковка ​

bash
python extensions/pack.py extensions/examples/hello-go -o dist/hello-go.zip

Что делает:

  1. Проверяет manifest.json.
  2. Собирает нативные среды (go build -ldflags "-s -w", cargo build --release).
  3. Приводит права в zip к 0644; при распаковке хост добавляет 0755 точке входа.
  4. Проверяет лимиты размера.
  5. Пишет zip.

Примеры и SDK ​

ПутьСредаЧто показывает
extensions/examples/hello-javajavaМинимальное расширение
extensions/examples/hello-gogoНативный бинарник + API
extensions/examples/hello-rustrustJSON без зависимостей
ЯзыкSDK
Goextensions/sdk/go (package tmlext, только stdlib)
Rustextensions/sdk/rust (crate tml-ext, без зависимостей)

SDK и шаблоны ​

У протокола один источник — extensions/schema в этом репозитории. SDK бывает двух видов: Go и Rust подключают extensions/sdk отсюда как зависимость (без копирования), а шаблоны Java / Python / Node / C несут собственную реализацию без зависимостей:

ЯзыкШаблонКак подключается SDK
Javahttps://github.com/TYWStudio/template-tml-extension-javaВстроенный Json.java, без внешних зависимостей
Pythonhttps://github.com/TYWStudio/template-tml-extension-pythonВстроенный tml.py
Node.jshttps://github.com/TYWStudio/template-tml-extension-nodeВстроенный tml.js
Chttps://github.com/TYWStudio/template-tml-extension-cВстроенная реализация без зависимостей
Rusthttps://github.com/TYWStudio/template-tml-extension-rusttml-ext = { git = "https://github.com/TYWStudio/TML", tag = "sdk-rust-v1.0.0" }
Gohttps://github.com/TYWStudio/template-tml-extension-gorequire 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), затем поднимаем версию зависимости в шаблонах. Обратный порядок порождает две реализации.

Отладка ​

bash
cd extensions/my-ext
./bin/hello-go

После изменений нажмите «Обновить» в настройках. Логи: logs/ext-*.log. Об импорте и включении см. Импорт и управление.

СимптомПричина
Не появляется в спискеОшибка JSON или повтор id
«Пакет изменён»Содержимое изменили, запись доверия не обновили
«Среда недоступна»Нет интерпретатора, нет прав на запуск, другая архитектура
Сразу завершаетсяТочка входа не читает stdin или упала