Skip to content
2.12.0

Jira Widgets ​

Карточка собрана автоматически из манифеста пакета. Так же пакет выглядит во вкладке «Обзор» в Студии.
Фоновый сервисjira-widgetsверсия 1.0.6agent

Фоновый сервис + виджеты Jira: «Задачи» (канбан «Сегодня» + бэклог, локальная доска в sqlite по пользователю) и «Ворклоги» (календарь). Читает Jira REST API по PAT.

Фоновый сервис

Пакет запускается платформой как долгоживущий процесс. Отдельные навыки в каталоге чата он не регистрирует, зато отдаёт виджеты и HTTP-интерфейс.

Виджеты · 2

  • Задачи/

    Добавляется на доску виджетов и в панель виджетов EVA Desktop.

  • Ворклоги/logs

    Добавляется на доску виджетов и в панель виджетов EVA Desktop.

Настройки пакета · 5

Подключение

  • URL Jirajira_urlобязательнообщее

    Базовый URL Jira Server/DC, напр. https://jira.example.com

  • Проверять TLS-сертификатjira_verify_tlsобщее

    Отключите только для самоподписанного сертификата.

Учётные данные

  • Personal Access Tokenjira_patобязательносекретна пользователя

    Личный PAT Jira (Profile → Personal Access Tokens). Передаётся как Authorization: Bearer. В фоне не виден: попадает только в запросы этого пользователя.

Отображение

  • Часовой поясtimezoneобщее

    IANA-пояс для расчёта дат, напр. Europe/Moscow.

  • Максимум задач за запросjira_max_resultsобщее

Зависит от SDK

@eva/skill-sdk@eva/agent-sdk@eva/agent-chat-sdk@eva/widget-sdk@eva/context@eva/artifacts

README

# Jira Widgets

Фоновый сервис + виджеты Jira (Server/DC) через REST API. Чтение из Jira + локальная
доска задач в sqlite (`ctx.db`) с привязкой к пользователю.

## Виджеты

- **Задачи** (`path=/`): две вкладки:
  - **Сегодня**: канбан из трёх колонок (К работе / В работе / Готово) по локальному
    плану: drag&drop и кнопки ‹/›, «убрать» из плана, счётчик и мягкий лимит «в работе»
    (WIP=2), прогресс плана к дневной норме 8 ч.
  - **Бэклог**: мои открытые задачи Jira (`assignee = currentUser() AND
    statusCategory != Done`) с поиском, фильтром по проекту, сменой статуса и переключателем
    «+ сегодня». Задача берётся из бэклога в локальный план, двигается по канбану и
    убирается из плана, оставаясь в бэклоге.
- **Ворклоги** (`path=/logs`): календарь worklog-ов текущего пользователя
  (недели × дни) с переходом по неделям.

## Локальное хранилище (sqlite)

`ctx.db` доступен в фоновом сервисе с виджетами. API асинхронный:
`await db.exec(sql)`, `await db.run(sql, ...params)` → `{ rowsAffected }`,
`await db.get(sql, ...params)` → строка, `await db.all(sql, ...params)` → массив.

Таблица `board_tasks`, PK `(user_id, issue_key)`, где `user_id`: id/login пользователя
запроса. Хранится только состояние доски (`status`, `in_today`, `position`) и кэш
метаданных; свежие поля задачи приходят из Jira при чтении. Нет БД: виджет работает
только на данных Jira (без плана).

## Учётные данные

Личный PAT приходит **в HTTP-обработчики** после авторизации (`req.ctx.settings` /
`getContext().settings`); в `main(ctx)` доступны только global-ключи.

| значение | ключ и scope | как читается |
|---|---|---|
| PAT | `jira_pat`, scope `user`, `format: password` | `req.ctx.settings.jira_pat` |
| URL | `jira_url`, `global` (default `https://jira.example.com`) | корневой `ctx.settings` в `main` |
| прочее | `jira_verify_tls`, `jira_max_results`, `timezone`: `global` | корневой `ctx.settings` |

PAT передаётся заголовком `Authorization: Bearer <token>`. Токен нигде не логируется
и в ответах API не возвращается.

## HTTP API

Корень пакета: `/internal/bg-service/jira-widgets/`.

| метод | путь | описание |
|---|---|---|
| GET | `/api/health` | конфиг без секретов, пользователь, полнота настроек |
| GET | `/api/me` | кто пользователь и хватает ли PAT |
| GET | `/api/diagnose` | serverInfo + myself + пробный JQL |
| GET | `/api/tasks?max=&jql=` | мои открытые задачи Jira + локальное состояние доски |
| GET | `/api/board` | локальная доска текущего пользователя |
| POST | `/api/board` | добавить в план: `{ key, status?, in_today? }` |
| PATCH | `/api/board` | сменить статус/«сегодня»: `{ key, status?, in_today?, position? }` |
| DELETE | `/api/board?key=KEY-1` | убрать задачу из локальной доски |
| GET | `/api/logs?start=YYYY-MM-DD&end=&tz=` | worklog-и за период |
| GET | `/api/search?jql=&max=` | произвольный JQL |

Ошибки: `401 need_settings` (нет PAT) · `502` + `error.code`
(`unauthorized` | `forbidden` | `timeout` | `dns` | `tls` | `jira_error`).

## Настройки

| ключ | scope | назначение |
|---|---|---|
| `jira_url` | global | базовый URL Jira |
| `jira_pat` | user | Personal Access Token (Bearer) |
| `jira_verify_tls` | global | проверка TLS-сертификата |
| `jira_max_results` | global | лимит задач за запрос (1-1000) |
| `timezone` | global | IANA-пояс для дат |

Как подключить ​

Администратор загружает пакет в разделе Админ → Пакеты или публикует его из Студии. После публикации пакет появляется у пользователей: навыки в каталоге Навыки, а виджеты фоновых сервисов на доске виджетов. Настройки с меткой «общее» задаёт администратор, с меткой «на пользователя» каждый пользователь заполняет у себя.

Подробнее о жизненном цикле пакета: Студия: публикация и версии. Весь каталог: Пакеты EVA.

Документация экосистемы EVA 2.1