
# Артефакты

Артефакты позволяют надежно сохранять результаты рабочих процессов, не увеличивая объем основного состояния процесса.

Они подходят для черновиков документов, извлеченных планов JSON, цитат, манифестов источников, путей к созданным файлам, а также снимков запросов и ответов, которые нужно просмотреть позже. Это особенно полезно для рабочих процессов агентов: итоговое состояние остается небольшим и понятным, даже если каждый запуск создает большой объем промежуточных результатов.

## Зачем нужны артефакты, а не состояние рабочего процесса

Состояние рабочего процесса лучше всего подходит для небольших общедоступных данных, которые нужны следующему шагу сразу.

Артефакты удобнее, когда результат больше обычных значений состояния, предназначен главным образом для последующей проверки, полезен в интерфейсах проверки или экспорта либо его лучше представить как именованный результат, а не как один большой блок состояния.

## Сохранение артефакта для текущего шага рабочего процесса

Если код уже выполняется внутри шага рабочего процесса, используйте `Queuety::put_current_artifact()`:

```php
use Queuety\Queuety;
use Queuety\Step;

final class DraftBriefStep implements Step
{
    public function handle(array $state): array
    {
        $draft = [
            'title' => 'Pricing brief',
            'body' => '...',
        ];

        Queuety::put_current_artifact(
            'draft',
            $draft,
            'json',
            [ 'source' => 'planner' ],
        );

        return [ 'draft_ready' => true ];
    }

    public function config(): array
    {
        return [];
    }
}
```

Queuety автоматически добавляет текущий ID рабочего процесса и индекс шага.

## Сохранение артефакта вне рабочего процесса

Если вам уже известен ID рабочего процесса, используйте `Queuety::put_artifact()`:

```php
Queuety::put_artifact(
    $workflow_id,
    'research_brief',
    "# Research Brief\n\nDone.",
    'markdown',
    metadata: [ 'reviewed_by' => 'editor@example.com' ],
);
```

## Чтение сохраненных артефактов

```php
$artifact = Queuety::workflow_artifact( $workflow_id, 'draft' );

$artifacts = Queuety::workflow_artifacts( $workflow_id );
```

Каждая запись артефакта содержит поля `key`, `kind`, `content`, `metadata`, `step_index`, `created_at` и `updated_at`. `Queuety::workflow_artifacts()` не включает `content`, если передать его вторым аргументом — `true`.

## Интеграция со статусом рабочего процесса

Теперь `Queuety::workflow_status()` включает краткую сводку по артефактам:

```php
$status = Queuety::workflow_status( $workflow_id );

echo $status->artifact_count; // 2
print_r( $status->artifact_keys ); // ['draft', 'citations']
```

Артефакты остаются видимыми, а их полное содержимое не добавляется в вывод статуса.

## CLI

Вывести список артефактов рабочего процесса:

```bash
wp queuety workflow artifacts 42
```

Показать артефакт вместе с содержимым:

```bash
wp queuety workflow artifact 42 draft
```

Полный справочник команд см. в [CLI](https://queuety.inline0.dev/ru/docs/cli).

## Экспорт и повторный запуск

Артефакты включаются в экспорт рабочих процессов и копируются в повторно запущенные процессы.

Поэтому запуски агентов с артефактами остаются доступными для проверки при переносе между средами или восстановлении запуска из экспортированной истории выполнения.
