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

Артефакты

Артефакты обеспечивают хостинг статического HTML для результатов workflow. Загружайте HTML-контент (отчёты, дашборды, визуализации) и получайте публичные URL для распространения. Каждый артефакт обслуживается с заголовками безопасности и брендингом Moira.

  • Отчёты: Генерация аналитических отчётов с доступом по URL
  • Дашборды: Создание интерактивных HTML-дашбордов
  • Визуализации: Хостинг графиков и визуализаций данных
  • Документация: Публикация сгенерированной документации
  • Превью: Демонстрация промежуточных результатов

MCP tool artifacts предоставляет 6 действий:

artifacts({ action: "upload", name: "report.html", content: "<html>...</html>" })
artifacts({ action: "update", uuid: "abc-123", content: "<html>...</html>" })
artifacts({ action: "delete", uuid: "abc-123" })
artifacts({ action: "list", limit: 10 })
artifacts({ action: "stats" })
artifacts({ action: "token", ttlMinutes: 60 })
ДействиеНазначение
uploadСоздать артефакт, получить URL
updateОбновить содержимое артефакта
deleteУдалить артефакт
listСписок артефактов с пагинацией
statsСтатистика использования квоты
tokenСгенерировать одноразовый токен

Создание нового HTML-артефакта:

artifacts({
action: "upload",
name: "analysis-report.html",
content: "<html><body><h1>Отчёт</h1></body></html>"
})
→ {
uuid: "d0a925d6-7dd8-49ba-b90c-d03b43062d20",
url: "https://static.moiraqq.com/d0a925d6-7dd8-49ba-b90c-d03b43062d20.html",
name: "analysis-report.html",
size: 52,
expiresAt: "2024-03-01T10:00:00Z"
}

Опциональный executionId связывает артефакт с выполнением workflow.

Замена содержимого существующего артефакта:

artifacts({
action: "update",
uuid: "d0a925d6-7dd8-49ba-b90c-d03b43062d20",
content: "<html><body><h1>Обновлённый отчёт</h1></body></html>"
})

Получение списка артефактов с пагинацией:

artifacts({ action: "list", limit: 10, offset: 0 })
→ {
artifacts: [{
uuid: "d0a925d6-...",
url: "https://static.moiraqq.com/...",
name: "report.html",
size: 1024,
createdAt: "2024-01-15T10:00:00Z"
}],
total: 5
}
ЛимитЗначение
Макс. размер файла5 МБ
Всего хранилища100 МБ на юзера
Макс. артефактов50 на юзера
TTL по умолчанию30 дней

Проверка использования квоты через stats:

artifacts({ action: "stats" })
→ {
totalArtifacts: 5,
totalSize: 51200,
storageLimit: 104857600,
countLimit: 50,
storageUsedPercent: 0.05,
countUsedPercent: 10
}

Генерация одноразовых токенов для HTTP API загрузки. Полезно для CI/CD пайплайнов или внешних инструментов, которые не могут использовать MCP напрямую.

artifacts({ action: "token", ttlMinutes: 30 })
→ {
token: "xyz-789",
expiresAt: "2024-01-15T10:30:00Z",
uploadUrl: "https://moiraqq.com/api/public/artifacts/upload/xyz-789"
}

Загрузка через HTTP:

Окно терминала
curl -X POST "https://moiraqq.com/api/public/artifacts/upload/xyz-789" \
-H "Content-Type: application/json" \
-d '{"name": "report.html", "content": "<html>...</html>"}'

Токены одноразовые и истекают после указанного TTL.

Артефакты обслуживаются с заголовками безопасности:

ЗаголовокЗначение
Content-Security-Policyscript-src 'none'
X-Content-Type-Optionsnosniff
Referrer-Policystrict-origin-when-cross-origin
Cache-Controlpublic, max-age=3600

Все артефакты включают футер с брендингом Moira, вставляемый перед </body>:

<div class="moira-branding-footer">
Created with <a href="https://moiraqq.com">Moira</a>
</div>

Используйте артефакты с паттерном workspace для организации результатов workflow:

./project-analysis/
├── step-1/
│ └── data-collection.md
├── step-2/
│ └── analysis.md
└── artifacts/
├── dashboard.html # → загрузить как артефакт
└── summary-report.html # → загрузить как артефакт

Передайте executionId при загрузке для связи артефактов с выполнением workflow:

artifacts({
action: "upload",
name: "execution-report.html",
content: "...",
executionId: "exec-abc-123"
})

Связанные артефакты отображаются в UI инспектора выполнений.

Артефакты управляются через веб-интерфейс на странице /app/artifacts:

  • Просмотр всех артефактов с именем, размером, URL и датой истечения
  • Загрузка новых артефактов с HTML-редактором
  • Редактирование содержимого существующих артефактов
  • Копирование публичного URL в буфер обмена
  • Открытие артефактов в новой вкладке
  • Удаление артефактов
  • Мониторинг использования квоты с визуальным индикатором