Перейти к содержимому

Разработка плагина

Третьесторонний плагин — это TypeScript плюс декларативный манифест yttri-plugin.json. Код обращается к Yttri только через типизированный YttriHost.

Терминал
# Скаффолд из шаблона
npx @yttri/plugin-cli create my-plugin
cd my-plugin
npm install
# Отредактируйте yttri-plugin.json и src/index.ts, затем:
npm run build
npx yttri-plugin validate
npx yttri-plugin pack

Сборка создаст my-plugin-0.1.0.yttri-plugin. Установите пакет через Настройки → Плагины. Для итераций удобнее Папка разработчика: после npm run build нажмите Обновить — файлы заменятся, а настройки и состояние сохранятся.

src/index.ts
import { definePlugin, type YttriHost } from '@yttri/plugin-api';
export default definePlugin({
async activate(host: YttriHost) {
host.log.info('activated');
},
tools: {
// Ключ совпадает с capabilities.tools[].name в манифесте.
async acme_ping(host: YttriHost) {
const token = await host.secrets.get('api_token');
const res = await host.network.fetch({
url: 'https://api.acme.com/ping',
headers: token ? { authorization: `Bearer ${token}` } : {},
});
return { ok: res.ok, status: res.status };
},
},
jobs: {
async sync(host: YttriHost) {
// Фоновая задача из capabilities.jobs.
},
},
});
  • host.invoke({ capability, operation, payload }) — вызовы в домены данных: notes, tasks, calendar, contacts, projects и search (чтение и создание), documents, mail и meetings (чтение). Write-операции требуют write-гранта.
  • host.secrets.{get,set,delete,list} — секреты в изолированном пространстве плагина; значения шифруются.
  • host.network.fetch(req) — HTTP только к хостам, объявленным в манифесте.
  • host.settings.getAll() — настройки плагина; форму по схеме генерирует Yttri.
  • host.log.{info,warn,error} — лог без чувствительных данных.

Инструменты включённого плагина попадают в реестр AI-агента как plugin_<имя>. По умолчанию каждый изменяющий вызов требует подтверждения пользователя. Доверенному плагину можно разрешить выполнение без подтверждений отдельным переключателем.