Task 1 — Базовый цикл агента
Phase: 1
Status: done
Owner: —
Slug: core-agent-loop
Goal
AgentCore обрабатывает запрос: определяет применимый навык, опционально планирует ограниченные шаги инструментов, обновляет память, логирует исход.
Acceptance criteria
Loop/LoopState.cs— определения типов:LoopStepenum (SkillRoute, LlmCall, ToolExecute, MemoryUpdate, LogInteraction),LoopContextrecord (шаг, итерация, lastTool, cancellationRequested),StepResultunionAgentCoreиспользуетLoopContext— явная передача состояния черезRunWithToolsAsyncAgentCore.HandleAsyncлогирует начало/конец каждого шага черезILogger<AgentCore>(LogLevel.Debug) с тегом[Loop]AgentCore.ShouldReflectByCount()— возвращает true когда CommandCount % ReflectionEveryNCommands == 0 (и порог > 0)AgentCore.EndSessionAsync()вызывает_memory.PersistSessionAsyncс текущим transcript (syncEndSession()сохранён для обратной совместимости)- Константа
MaxToolIterations = 3задокументирована и не вынесена в конфиг ( явное ограничение в рамках task 001; task 008 — bounded execution — вынесет в конфиг) - Все acceptance criteria покрыты unit-тестами в
tests/Hercules.Agent.Tests/AgentCoreTests/ dotnet buildпроходит без warningsdotnet testпроходит (158/159; 1 flaky WASM timing test — pre-existing, unrelated)
Scope / Likely files
src/agent/AgentCore.cs, src/agent/Loop/
Dependencies
- нет (стартовая)
Risks / Rollback
Неопределённый цикл при плохих skill matches; нужен явный max-steps + cancellation.
Implementation notes
2026-08-11
Основной цикл уже реализован в AgentCore.cs. Задача — добавить явную типизацию состояния цикла
(Loop/ subfolder) и улучшить observability: логирование шагов, связывание EndSession с PersistSessionAsync.
Что сделано:
src/agent/Loop/LoopState.cs—LoopStepenum,LoopContextrecord,StepResultstructAgentCore.HandleAsync— логирование каждого шага с[Loop]тегом, Stopwatch timing для SkillRouteAgentCore.RunWithToolsAsync— принимаетLoopContext, обновляет после каждого tool executionAgentCore.EndSessionAsync()— вызываетPersistSessionAsync(Transcript)перед закрытием сессииConsoleUI.ShutdownAsync— используетEndSessionAsync()вместо ручногоPersistSessionAsync + EndSession- 11 новых unit-тестов в
AgentCoreLoopTests.cs(LoopContext transitions, ShouldReflectByCount, EndSessionAsync) - Фикс pre-existing ILogger-совместимости во всех тестовых файлах (
NullLogger<T>.Instance)
Links
- Backlog: ../backlog.md
- Roadmap (EN): ../../ROADMAP-EN.md
- Roadmap (RU): ../../ROADMAP-RU.md