agent/php/Services
Snider 677d890308 feat(brain): make BrainService::remember() async via EmbedMemory job
remember() now writes the brain_memories row with indexed_at=null and
dispatches EmbedMemory::dispatch($memory->id) for async Qdrant + ES
indexing, instead of calling qdrantUpsert() synchronously. Response shape
matches the row state — caller gets the memory immediately, the Job
flips indexed_at once the Qdrant write succeeds.

Superseded rows still soft-delete synchronously (part of the remember
contract, not the indexing path).

php/tests/Feature/Services/BrainServiceRememberTest.php uses Queue::fake()
to assert EmbedMemory is dispatched and BrainService::qdrantUpsert() is
NOT called directly (subclass probe).

Co-authored-by: Codex <noreply@openai.com>

Closes tasks.lthn.sh/view.php?id=55
2026-04-23 13:29:30 +01:00
..
Concerns revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgentApiKeyService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgentDetection.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgenticManager.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgenticProviderInterface.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgenticResponse.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgentSessionService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
AgentToolRegistry.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
BrainService.php feat(brain): make BrainService::remember() async via EmbedMemory job 2026-04-23 13:29:30 +01:00
ClaudeService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
ContentService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
ForgejoService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
GeminiService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
IpRestrictionService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
OpenAIService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00
PlanTemplateService.php revert fcb9c189e5 2026-04-23 12:32:57 +01:00