From 2beadf7ff78a4898f9f53c00a76706ecfd39453b Mon Sep 17 00:00:00 2001 From: Maksim Totmin Date: Tue, 4 Aug 2026 20:30:36 +0700 Subject: [PATCH] chore: add package.json, README, example config and gitignore --- .gitignore | 3 ++ README.md | 108 +++++++++++++++++++++++++++++++++++++++++ examples/opencode.json | 40 +++++++++++++++ package.json | 16 ++++++ 4 files changed, 167 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 examples/opencode.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a27aae --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +*.log \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2b0d8fa --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ +# Opencode Vision Bridge Plugin + +Этот плагин позволяет Opencode работать с изображениями, даже если активная модель не поддерживает мультимодальность. Он перехватывает изображения, отправляет их в указанную vision-модель для анализа, а затем заменяет изображение текстовым описанием в контексте диалога. + +## Требования + +- Доступ к API-эндпоинту Ludmila AI (https://ai.totmin.ru/v1). +- Ключ API Ludmila AI. + +## Установка + +### 1. Добавьте плагин в `~/.config/opencode/opencode.json` + +В секцию `plugin` добавьте следующую запись: + +```json +{ + "plugin": [ + // ... другие плагины + "https://git.totmin.ru/en2zmax/vision-bridge.git" + ] +} +``` + +### 2. Настройте провайдер Ludmila AI + +В секцию `provider` вашего `~/.config/opencode/opencode.json` добавьте или обновите блок `ludmila-ai`: + +```json +{ + "provider": { + "ludmila-ai": { + "npm": "@ai-sdk/openai-compatible", + "name": "Ludmila AI", + "options": { + "baseURL": "https://ai.totmin.ru/v1", + "apiKey": "<ЗАМЕНИТЕ_НА_ВАШ_API_КЛЮЧ>" + }, + "models": { + "gemini/gemini-2.5-flash": { + "attachment": true, + "limit": { + "context": 1048576, + "output": 65536 + } + } + } + } + } +} +``` +**ВАЖНО**: Замените `<ЗАМЕНИТЕ_НА_ВАШ_API_КЛЮЧ>` на ваш реальный API-ключ Ludmila AI. + +### 3. Скопируйте файл субагента + +Субагенты не загружаются из npm-пакетов, поэтому скопируйте файл `vision.md` в соответствующий каталог: + +```bash +cp ~/totmin/opencode/plugins/vision-bridge/agents/vision.md ~/.config/opencode/agents/vision.md +``` + +### 4. Перезапустите Opencode + +Изменения в конфигурации применяются только после перезапуска Opencode. + +## Пример конфигурации (`examples/opencode.json`) + +```json +{ + "$schema": "https://opencode.ai/config.json", + "plugin": [ + "opencode-browser", + "git+ssh://git@git.totmin.ru:en2zmax/vision-bridge.git" + ], + "provider": { + "ludmila-ai": { + "npm": "@ai-sdk/openai-compatible", + "name": "Ludmila AI", + "options": { + "baseURL": "https://ai.totmin.ru/v1", + "apiKey": "<ЗАМЕНИТЕ_НА_ВАШ_API_КЛЮЧ>" + }, + "models": { + "gemini/gemini-2.5-flash": { + "attachment": true, + "limit": { + "context": 1048576, + "output": 65536 + } + } + } + } + }, + "agent": { + "vision": { + "mode": "subagent", + "model": "ludmila-ai/gemini/gemini-2.5-flash", + "description": "Анализ изображений и скриншотов (OCR текста или разбор UI)", + "permission": { + "read": "allow", + "glob": "allow", + "external_directory": "allow", + "edit": "deny", + "bash": "deny" + } + } + } +} diff --git a/examples/opencode.json b/examples/opencode.json new file mode 100644 index 0000000..be92b51 --- /dev/null +++ b/examples/opencode.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://opencode.ai/config.json", + "plugin": [ + "opencode-browser", + "https://git.totmin.ru/en2zmax/vision-bridge.git" + ], + "provider": { + "ludmila-ai": { + "npm": "@ai-sdk/openai-compatible", + "name": "Ludmila AI", + "options": { + "baseURL": "https://ai.totmin.ru/v1", + "apiKey": "<ЗАМЕНИТЕ_НА_ВАШ_API_КЛЮЧ>" + }, + "models": { + "gemini/gemini-2.5-flash": { + "attachment": true, + "limit": { + "context": 1048576, + "output": 65536 + } + } + } + } + }, + "agent": { + "vision": { + "mode": "subagent", + "model": "ludmila-ai/gemini/gemini-2.5-flash", + "description": "Анализ изображений и скриншотов (OCR текста или разбор UI)", + "permission": { + "read": "allow", + "glob": "allow", + "external_directory": "allow", + "edit": "deny", + "bash": "deny" + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..b4ca57a --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "vision-bridge", + "version": "0.1.0", + "type": "module", + "description": "Opencode plugin: bridges images to a vision model when the active model cannot see images.", + "main": "src/vision-bridge.ts", + "exports": { + ".": "./src/vision-bridge.ts" + }, + "files": ["src"], + "keywords": ["opencode", "plugin", "vision"], + "license": "MIT", + "devDependencies": { + "@opencode-ai/plugin": "^1.14.19" + } +} \ No newline at end of file