# Добавить свой runtime в ZeroExternal

Исходный код ZeroExternal распространяется под MIT. Лицензии наборов данных,
сторонних библиотек и авторских работ задаются отдельно. Можно развернуть
собственную копию, добавить исследование и передавать переносимый JSON.

## 1. Формула или вариант встроенной модели

На `/experiments/new/` выберите формулу или численную модель, задайте параметры,
допущения, источник и лицензию. «Проверить манифест» проверяет формат и границы
параметров. «Открыть расчёт» запускает существующий ограниченный вычислитель.
«Скачать JSON» сохраняет конфигурацию. Файл можно открыть через «Импорт JSON»
или вставить текст; ограничение — 45 000 байт. Импорт не публикует и не запускает
эксперимент. Без аккаунта доступны черновик, расчёт и экспорт.

Для публикации нужен постоянный аккаунт. Авторские записи помечаются как
работы без независимой рецензии. Успешная проверка JSON не подтверждает гипотезу.

## 2. Собственная программа или внешний runtime

В полном исходном ZIP находится **`examples/runtimes/oscillator/`**: работающий
статический пример с расчётом аналитического осциллятора, анимацией, паузой,
перезапуском и экспортом результата. В нём нет внешних зависимостей, ключей,
сбора данных или платного сервиса. Визуализация использует Canvas 2D и не требует
GPU; пример показывает переносимость runtime, а не ускорение вычислений.

Запуск примера из корня распакованного проекта:

```sh
python3 -m http.server 8080 --directory examples/runtimes/oscillator
```

Откройте `http://localhost:8080`. Для общедоступной карточки разместите эти файлы
на HTTPS-хостинге. Затем заполните «Свой runtime»: адрес запуска, адрес исходного
кода, требования, лицензию и границы модели. Проверка манифеста откроет явную
ссылку для запуска; доступность сервера проверяется при переходе, а не выдаётся
за уже установленное подключение.

Манифест можно также создать из исходников, передав **свои реальные адреса**:

```sh
node examples/runtimes/create-manifest.mjs --help
node examples/runtimes/create-manifest.mjs \
  --launch https://YOUR-PUBLIC-HOST/runtime/ \
  --source https://YOUR-SOURCE-HOST/owner/repository \
  --output my-runtime.json
```

Адреса в команде замените перед запуском. Генератор не запрашивает эти адреса,
не публикует карточку и не перезаписывает существующий файл. Внешний runtime
выполняется у его владельца. Каталог ZeroExternal хранит описание и ссылку;
импорт манифеста не устанавливает пакеты и не даёт доступ к серверному shell.
В карточку нельзя помещать токены, приватные IP-адреса или секретные URL.

## 3. Агент, который выполняет разрешённую задачу

Ссылка на внешний runtime и подключённый вычислительный ресурс — разные
возможности. Для выполнения сетевой задачи владелец регистрирует ресурс в
`/network/`, выбирает возможности и выдаёт ограниченный ключ. Ключ хранится
в окружении агента, отдельно от манифеста, ZIP и Git.

Пошаговый протокол: `/network/PROTOCOL.md`. Рабочий клиент находится в
`external-agents/network/`; клиент поиска метаданных — `/network/data-agent.mjs`.
Агент получает фиксированную задачу, вычисляет результат и возвращает
свидетельства. Серверная проверка может отклонить результат. Подключение Zift
или другого планировщика должно вызывать тот же разрешённый протокол;
публикация карточки сама по себе не авторизует планировщик.

## 4. Собственные данные и новые вычислители

В `/data/` есть каталог источников и ограниченные адаптеры метаданных.
Проверяйте лицензию конкретной записи: открытая карточка не всегда означает
открытый файл. Сохраняйте URL/DOI, дату получения, версию, лицензию и SHA-256
каждого использованного артефакта. Не публикуйте персональные или закрытые данные.

Для нового адаптера разработчик добавляет фиксированный профиль источника,
ограничения запроса, нормализацию метаданных и тесты ошибочных ответов. Сетевой
агент получает отдельную возможность `data_search`. Произвольный URL из
пользовательского JSON не становится разрешённым серверным адресом.

Для нового встроенного вычислителя нужны ограниченная схема входов, реализация,
описание области применимости, проверяющая функция и отрицательные тесты.
Порядок описан в `CONTRIBUTING.md`. Сначала проверка и сборка, затем включение
рецепта в реестр. Собственный runtime можно сразу распространять независимо
и публиковать его карточку, не меняя общий сервер.
