(rawEvent: unknown)
| 116 | } |
| 117 | |
| 118 | export function convertCodexEvent(rawEvent: unknown): CodexConversionResult | null { |
| 119 | const parsed = CodexSessionEventSchema.safeParse(rawEvent); |
| 120 | if (!parsed.success) { |
| 121 | return null; |
| 122 | } |
| 123 | |
| 124 | const { type, payload } = parsed.data; |
| 125 | const payloadRecord = asRecord(payload); |
| 126 | |
| 127 | if (type === 'session_meta') { |
| 128 | const sessionId = payloadRecord ? asString(payloadRecord.id) : null; |
| 129 | if (!sessionId) { |
| 130 | return null; |
| 131 | } |
| 132 | return { sessionId }; |
| 133 | } |
| 134 | |
| 135 | if (!payloadRecord) { |
| 136 | return null; |
| 137 | } |
| 138 | |
| 139 | if (type === 'event_msg') { |
| 140 | const eventType = asString(payloadRecord.type); |
| 141 | if (!eventType) { |
| 142 | return null; |
| 143 | } |
| 144 | |
| 145 | if (eventType === 'user_message') { |
| 146 | const message = asString(payloadRecord.message) |
| 147 | ?? asString(payloadRecord.text) |
| 148 | ?? asString(payloadRecord.content); |
| 149 | if (!message) { |
| 150 | return null; |
| 151 | } |
| 152 | return { |
| 153 | userMessage: message |
| 154 | }; |
| 155 | } |
| 156 | |
| 157 | if (eventType === 'agent_message') { |
| 158 | const message = asString(payloadRecord.message); |
| 159 | if (!message) { |
| 160 | return null; |
| 161 | } |
| 162 | return { |
| 163 | message: { |
| 164 | type: 'message', |
| 165 | message, |
| 166 | id: randomUUID() |
| 167 | } |
| 168 | }; |
| 169 | } |
| 170 | |
| 171 | if (eventType === 'agent_reasoning') { |
| 172 | const message = asString(payloadRecord.text) ?? asString(payloadRecord.message); |
| 173 | if (!message) { |
| 174 | return null; |
| 175 | } |
no test coverage detected