Плагинная архитектура JavaScript: как Cordis превращает каждый компонент в плагин
Плагинная архитектура в JavaScript давно вышла за пределы сборщиков и редакторов: фреймворк Cordis и проект DeepSeek Harness превращают плагин из дополнения в основную единицу, из которой собирается всё приложение, и эта модель уже работает с ИИ-агентами.

Когда каждый компонент, включая адаптеры моделей, агентный цикл и интерфейс, становится плагином с явным жизненным циклом, приложение можно расширять без правки ядра. Для команд, работающих с ИИ-компонентами, это прямой способ снизить хрупкость системы.
Обычно плагины расширяют инструмент снаружи: Webpack, Vite, Fastify предоставляют точки подключения, но внутри приложения компоненты по-прежнему связаны прямыми импортами и ручной инициализацией. Cordis предлагает следующий шаг: сделать плагинную систему не механизмом расширения, а основным способом композиции самого приложения. DeepSeek Harness (далее DSH) реализует этот принцип на практике, заявляя «Everything is a Plugin» для адаптеров моделей, инструментов, логов сессий и агентного цикла. Именно этот сдвиг делает тему актуальной для JS/TS-разработчиков, которые проектируют модульные продукты или подключают ИИ-компоненты динамически.
Чем композиция из плагинов отличается от расширяемого приложения?
В классической схеме есть привилегированное ядро и дополнения вокруг него. Ядро определяет поведение, плагины подключаются к заранее выделенным точкам. Это работает для CMS, редакторов, сборщиков, но сохраняет жёсткую границу между «настоящим приложением» и «надстройками».
Плагинная архитектура JavaScript в модели Cordis устроена иначе. Значительная часть того, что прежде считалось ядром, становится обычными компонентами, подчинёнными общей модели. Вместо большого функционального ядра появляется небольшой composition runtime (среда композиции, которая управляет правилами подключения, зависимостями и жизненным циклом). Бизнес-логика остаётся внутри плагинов. Runtime не знает, как работает поиск или как вызывается модель, он знает, как эти возможности входят в систему и что происходит при изменении композиции.
Каждый компонент в такой среде описывается набором свойств:
- Предоставляемые возможности и требования к окружению
- Конфигурация и принадлежащие компоненту эффекты (побочные действия при запуске или остановке)
- Жизненный цикл (lifecycle), определяющий порядок запуска, обновления и очистки
Что понадобится
- Node.js версии 18+ и менеджер пакетов npm или yarn
- TypeScript (Cordis типизирован, без TS теряется основная выгода проверок на этапе компиляции)
- Базовое понимание, что такое плагин: модуль, который регистрирует свои возможности в общей среде и получает доступ к возможностям других модулей
- Около 40 минут на первый рабочий пример
Пошаговая инструкция
- Установите Cordis и создайте пустой проект
mkdir my-plugin-app && cd my-plugin-app
npm init -y
npm install cordis typescript
npx tsc --init
- Создайте файл среды композиции
// src/app.ts
import { Context } from 'cordis'
const app = new Context()
Context здесь играет роль composition runtime: он управляет деревом плагинов, их зависимостями и жизненным циклом.
- Опишите первый плагин как функцию, принимающую контекст
// src/plugins/greeter.ts
import { Context } from 'cordis'
export function greeter(ctx: Context) {
ctx.on('ready', () => {
console.log('Greeter plugin started')
})
ctx.on('dispose', () => {
console.log('Greeter plugin stopped')
})
}
Плагин не знает о других плагинах напрямую. Он объявляет, что делает при старте и при остановке, а среда решает, когда это произойдёт.
- Подключите плагин к дереву и запустите приложение
// src/app.ts
import { Context } from 'cordis'
import { greeter } from './plugins/greeter'
const app = new Context()
app.plugin(greeter)
app.start()
- Добавьте второй плагин, который зависит от первого
В Cordis зависимости выражаются через сервисы. Плагин объявляет, какой сервис он предоставляет, а другой плагин указывает, какой сервис ему нужен. Runtime запускает зависимый плагин только тогда, когда нужный сервис доступен.
// src/plugins/logger.ts
import { Context } from 'cordis'
export function logger(ctx: Context) {
// этот плагин активируется, только когда сервис 'database' доступен
ctx.inject(['database'], (ctx) => {
ctx.on('ready', () => {
console.log('Logger: database service is available')
})
})
}
- Проверьте горячее подключение: удалите плагин без перезапуска
const fork = app.plugin(greeter)
// позже:
fork.dispose() // плагин корректно остановлен, эффекты очищены
Именно этот механизм делает плагинную архитектуру JavaScript в Cordis пригодной для динамической загрузки ИИ-компонентов: адаптер модели или инструмент агента можно подключить и отключить на лету.
Три способа доставки плагинов на клиент
Cordis работает одинаково на сервере и в браузере, но механизм загрузки кода различается. Источник описывает три подхода:
- Виртуальные модули в общем графе сборки. Плагины включаются в единый бандл на этапе сборки. Просто, но не позволяет подключать плагины после деплоя.
- Module Federation. Технология Webpack 5, позволяющая связывать независимые сборки во время выполнения. Каждый плагин собирается отдельно и загружается браузером по запросу.
- Собственная модульная система DSH. DeepSeek Harness использует специализированный механизм загрузки, при котором браузер запускает собственное Cordis-дерево. UI-возможности представлены динамически загружаемыми плагинами, как и серверные компоненты.
В архитектуре DeepSeek Harness адаптер модели (model adapter) является обычным плагином. Допустим, нужно подключить новый адаптер без перезапуска:
// Регистрация нового адаптера модели как плагина
app.plugin(deepseekAdapter, {
model: 'deepseek-v3',
endpoint: 'https://api.deepseek.com/v1'
})
Среда композиции сама определит, что появился новый сервис model adapter, и плагины, зависящие от него (агентный цикл, логирование сессий), активируются автоматически. Удаление адаптера через fork.dispose() корректно остановит зависимые компоненты.
На выходе: ИИ-агент (программа, которая сама решает, какие действия предпринять для достижения цели) получает новую модель без простоя системы.
Cordis и Kubernetes: похожая идея, другой масштаб
Источник проводит аналогию между Cordis и микросервисами. Kubernetes (система оркестрации контейнеров, управляющая тем, какие сервисы где запущены) решает похожую задачу на уровне инфраструктуры: декларативное описание, управление зависимостями, контроль жизненного цикла. Cordis делает то же самое, но внутри одного JS/TS-процесса и на уровне плагинов, а не контейнеров.
Для разработчика это означает: если вы привыкли думать о системе как о наборе независимо деплоящихся сервисов, Cordis даёт похожую модель мышления внутри приложения.
Что делать с этим прямо сейчас?
JS/TS-разработчику и архитектору. Попробуйте собрать один модуль существующего проекта как Cordis-плагин. Если у вас есть компонент, который инициализируется вручную и требует очистки при отключении, это первый кандидат. Выигрыш: явный жизненный цикл и автоматическая очистка эффектов.
Тем, кто работает с ИИ-агентами. Модель DSH, где адаптеры моделей и агентные циклы являются плагинами, решает конкретную проблему: переключение между моделями или добавление инструментов без перезапуска и без правки ядра. Из доступных в РФ моделей для экспериментов подойдут те, что предоставляют API-эндпоинт: GigaChat, YandexGPT.
Техлиду, управляющему несколькими командами. Cordis полезен там, где независимые команды (или ИИ-агенты) развивают разные части продукта. Каждая команда владеет своим набором плагинов, а composition runtime гарантирует, что подключение нового плагина не сломает чужие компоненты.
Плагин без очистки эффектов. Если плагин создаёт подписку, таймер или соединение, но не описывает поведение при dispose, горячее отключение оставит «мусор». Всегда реализуйте обработчик события dispose.
Циклические зависимости между сервисами. Cordis управляет порядком запуска автоматически, но если плагин A требует сервис B, а B требует A, среда не сможет запустить ни один из них. Решение: выделите общую часть в третий плагин.
Попытка применить Cordis к простому проекту. Если у вас три файла и один разработчик, composition runtime добавит сложность без выгоды. Плагинная архитектура JavaScript в стиле Cordis оправдана, когда модулей больше десятка или когда состав компонентов меняется динамически.
Cordis строит архитектуру на формальной основе: за ним стоит научная работа «A Programming Paradigm for Spatiotemporal Composability» (парадигма программирования для пространственно-временной композируемости), которая формализует свойства, необходимые такой системе. На практике это означает, что правила композиции не «договорённости в команде», а проверяемые инварианты на уровне типов TypeScript.
По моим наблюдениям, главная ценность не в самом API, а в смене мышления: вы начинаете проектировать приложение как набор независимых возможностей с явными границами, а не как монолит с точками расширения. Для тех, кто работает с ИИ-компонентами, это особенно актуально: модели и инструменты меняются быстрее, чем успеваешь обновлять жёстко связанный код.
Честная оговорка: Cordis остаётся нишевым инструментом, экосистема плагинов пока невелика по сравнению с тем же Fastify. DSH также не является массовым продуктом. Документация Cordis компактна, но не избыточна, будьте готовы читать исходники.
Попробуйте AI-ассистент dzen.guru
Генерируйте структуру плагинов и код инициализации для JS/TS-проектов с помощью нашего ИИ-помощника
Попробовать бесплатноЕсли вы строите продукт, в котором состав возможностей меняется чаще, чем выходят релизы, стоит потратить час на эксперимент с Cordis: соберите один реальный модуль как плагин и убедитесь, что dispose работает чисто. Это минимальная проверка, которая покажет, подходит ли модель вашему проекту.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Вред переживаний ИИ: избыточные рассуждения Qwen3.8 ухудшают код вместо улучшения
Нейросеть Qwen3.8-27B на Mac Studio второго июня 2025 года прошла локальный бенчмарк из 84 задач на C# и SwiftUI, и квантизованная (сжатая) 4-bit версия…

Google и Cathay Pacific снизили тепловой след авиации на 40%: что значит для авиации и окружающей среды
Google и Cathay Pacific провели первые в Азии лётные испытания ИИ-системы, которая прокладывает маршруты в обход зон образования инверсионных следов, и на…
Токеномика нейросетей получила свой Big-O: Linux Foundation учит считать расходы на токены
Под крылом Linux Foundation появилось новое направление, Tokenomics Foundation, и его первый проект уже позволяет оценить, во сколько на самом деле обходятся…
Комментарии