$meta */ public function appendAgentMessage(string $sessionId, string $runId, string $content, array $meta = [], ?string $dedupeKey = null): Message { $dedupeKey = $dedupeKey ?? "run:{$runId}:agent:message"; return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_AGENT, 'type' => 'agent.message', 'content' => $content, 'payload' => array_merge($meta, ['run_id' => $runId]), 'dedupe_key' => $dedupeKey, ]); } /** * @param array $meta */ public function appendAgentDelta(string $sessionId, string $runId, string $content, int $deltaIndex, array $meta = []): Message { $dedupeKey = "run:{$runId}:agent:delta:{$deltaIndex}"; return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_AGENT, 'type' => 'message.delta', 'content' => $content, 'payload' => array_merge($meta, [ 'run_id' => $runId, 'delta_index' => $deltaIndex, ]), 'dedupe_key' => $dedupeKey, ],$wasDupe,false); } /** * @param array $meta */ public function appendRunStatus(string $sessionId, string $runId, string $status, array $meta = [], ?bool &$wasDeduped = null): Message { $dedupeKey = $meta['dedupe_key'] ?? null; unset($meta['dedupe_key']); return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_SYSTEM, 'type' => 'run.status', 'content' => null, 'payload' => array_merge($meta, [ 'run_id' => $runId, 'status' => $status, ]), 'dedupe_key' => $dedupeKey, ], $wasDeduped); } /** * @param array $meta */ public function appendError(string $sessionId, string $runId, string $code, string $message, array $meta = [], ?string $dedupeKey = null): Message { return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_SYSTEM, 'type' => 'error', 'content' => $code, 'payload' => array_merge($meta, [ 'run_id' => $runId, 'message' => $message, ]), 'dedupe_key' => $dedupeKey, ]); } }