$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, ], $wasDeduped); } /** * @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, ]); } public function appendToolCall(string $sessionId, ToolCall $toolCall): Message { return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_AGENT, 'type' => 'tool.call', 'content' => $toolCall->rawArguments ?: json_encode($toolCall->arguments, JSON_UNESCAPED_UNICODE), 'payload' => [ 'run_id' => $toolCall->parentRunId, 'tool_run_id' => $toolCall->runId, 'tool_call_id' => $toolCall->toolCallId, 'name' => $toolCall->name, 'arguments' => $toolCall->arguments, ], 'dedupe_key' => "run:{$toolCall->parentRunId}:tool_call:{$toolCall->toolCallId}", ]); } public function appendToolResult(string $sessionId, ToolResult $result): Message { return $this->chatService->appendMessage([ 'session_id' => $sessionId, 'role' => Message::ROLE_TOOL, 'type' => 'tool.result', 'content' => $result->output, 'payload' => [ 'run_id' => $result->runId, 'parent_run_id' => $result->parentRunId, 'tool_call_id' => $result->toolCallId, 'name' => $result->name, 'status' => $result->status, 'error' => $result->error, 'truncated' => $result->truncated, ], 'dedupe_key' => "run:{$result->runId}:tool_result", ]); } }