MCPcopy
hub / github.com/opactorai/Claudable / persistAssistantMessage

Function persistAssistantMessage

lib/services/cli/glm.ts:117–182  ·  view source on GitHub ↗
(
  projectId: string,
  payload: {
    role: Message['role'];
    messageType: Message['messageType'];
    content: string;
    metadata?: Record<string, unknown> | null;
  },
  requestId?: string,
  overrides?: Partial<RealtimeMessage>,
)

Source from the content-addressed store, hash-verified

115}
116
117async function persistAssistantMessage(
118 projectId: string,
119 payload: {
120 role: Message['role'];
121 messageType: Message['messageType'];
122 content: string;
123 metadata?: Record<string, unknown> | null;
124 },
125 requestId?: string,
126 overrides?: Partial<RealtimeMessage>,
127) {
128 let lastError: Error | null = null;
129
130 // Retry logic with exponential backoff
131 for (let attempt = 1; attempt <= 3; attempt++) {
132 try {
133 const saved = await createMessage({
134 projectId,
135 role: payload.role,
136 messageType: payload.messageType,
137 content: payload.content,
138 metadata: payload.metadata ?? null,
139 cliSource: 'glm',
140 requestId,
141 });
142
143 streamManager.publish(projectId, {
144 type: 'message',
145 data: serializeMessage(saved, {
146 ...(requestId ? { requestId } : {}),
147 ...(overrides ?? {}),
148 }),
149 });
150
151 console.log(`[GLMService] Successfully persisted message on attempt ${attempt}`);
152 return; // Success, exit the function
153 } catch (error) {
154 lastError = error as Error;
155 console.error(`[GLMService] Attempt ${attempt} failed to persist assistant message:`, error);
156
157 if (attempt < 3) {
158 // Exponential backoff: 1s, 2s
159 const delayMs = Math.pow(2, attempt - 1) * 1000;
160 console.log(`[GLMService] Retrying in ${delayMs}ms...`);
161 await new Promise(resolve => setTimeout(resolve, delayMs));
162 }
163 }
164 }
165
166 // All retries failed, fallback to realtime emit
167 console.error('[GLMService] All retry attempts failed. Falling back to realtime emit:', lastError);
168 const fallback = createRealtimeMessage({
169 projectId,
170 role: payload.role,
171 messageType: payload.messageType,
172 content: payload.content,
173 metadata: payload.metadata ?? null,
174 cliSource: 'glm',

Callers 2

persistToolMessageFunction · 0.70
executeGLMFunction · 0.70

Calls 4

createMessageFunction · 0.90
serializeMessageFunction · 0.90
createRealtimeMessageFunction · 0.90
publishMethod · 0.80

Tested by

no test coverage detected