(entry: Entry, sessionId: UUID = getSessionId() as UUID)
| 1172 | } |
| 1173 | |
| 1174 | async appendEntry(entry: Entry, sessionId: UUID = getSessionId() as UUID) { |
| 1175 | if (this.shouldSkipPersistence()) { |
| 1176 | return |
| 1177 | } |
| 1178 | |
| 1179 | const currentSessionId = getSessionId() as UUID |
| 1180 | const isCurrentSession = sessionId === currentSessionId |
| 1181 | |
| 1182 | let sessionFile: string |
| 1183 | if (isCurrentSession) { |
| 1184 | // Buffer until materializeSessionFile runs (first user/assistant message). |
| 1185 | if (this.sessionFile === null) { |
| 1186 | this.pendingEntries.push(entry) |
| 1187 | return |
| 1188 | } |
| 1189 | sessionFile = this.sessionFile |
| 1190 | } else { |
| 1191 | const existing = await this.getExistingSessionFile(sessionId) |
| 1192 | if (!existing) { |
| 1193 | logError( |
| 1194 | new Error( |
| 1195 | `appendEntry: session file not found for other session ${sessionId}`, |
| 1196 | ), |
| 1197 | ) |
| 1198 | return |
| 1199 | } |
| 1200 | sessionFile = existing |
| 1201 | } |
| 1202 | |
| 1203 | // Only load current session messages if needed |
| 1204 | if (entry.type === 'summary') { |
| 1205 | // Summaries can always be appended |
| 1206 | void this.enqueueWrite(sessionFile, entry) |
| 1207 | } else if (entry.type === 'custom-title') { |
| 1208 | // Custom titles can always be appended |
| 1209 | void this.enqueueWrite(sessionFile, entry) |
| 1210 | } else if (entry.type === 'ai-title') { |
| 1211 | // AI titles can always be appended |
| 1212 | void this.enqueueWrite(sessionFile, entry) |
| 1213 | } else if (entry.type === 'last-prompt') { |
| 1214 | void this.enqueueWrite(sessionFile, entry) |
| 1215 | } else if (entry.type === 'task-summary') { |
| 1216 | void this.enqueueWrite(sessionFile, entry) |
| 1217 | } else if (entry.type === 'tag') { |
| 1218 | // Tags can always be appended |
| 1219 | void this.enqueueWrite(sessionFile, entry) |
| 1220 | } else if (entry.type === 'agent-name') { |
| 1221 | // Agent names can always be appended |
| 1222 | void this.enqueueWrite(sessionFile, entry) |
| 1223 | } else if (entry.type === 'agent-color') { |
| 1224 | // Agent colors can always be appended |
| 1225 | void this.enqueueWrite(sessionFile, entry) |
| 1226 | } else if (entry.type === 'agent-setting') { |
| 1227 | // Agent settings can always be appended |
| 1228 | void this.enqueueWrite(sessionFile, entry) |
| 1229 | } else if (entry.type === 'pr-link') { |
| 1230 | // PR links can always be appended |
| 1231 | void this.enqueueWrite(sessionFile, entry) |
no test coverage detected