@@ -105,7 +105,7 @@ flow:
|
105 | 105 | - lambda: |
106 | 106 | params: [text] |
107 | 107 | expr: "config.expectedReplyGroups.every((group) => group.some((needle) => normalizeLowercaseStringOrEmpty(text).includes(needle)))" |
108 | | - - expr: liveTurnTimeoutMs(env, 120000) |
| 108 | + - expr: "env.providerMode === 'mock-openai' ? 10000 : 30000" |
109 | 109 | - expr: "env.providerMode === 'mock-openai' ? 100 : 250" |
110 | 110 | - if: |
111 | 111 | expr: "Boolean(env.mock)" |
@@ -157,31 +157,63 @@ flow:
|
157 | 157 | catchAs: attemptError |
158 | 158 | catch: |
159 | 159 | - if: |
160 | | -expr: "Boolean(env.mock) && /timed out after/i.test(formatErrorMessage(attemptError))" |
| 160 | +expr: "/timed out after/i.test(formatErrorMessage(attemptError))" |
161 | 161 | then: |
162 | 162 | - call: readRawQaSessionStore |
163 | 163 | saveAs: timeoutStore |
164 | 164 | args: |
165 | 165 | - ref: env |
| 166 | + - set: timeoutChildEntries |
| 167 | +value: |
| 168 | +expr: "Object.entries(timeoutStore).map(([key, entry]) => ({ ...entry, key })).filter((entry) => entry.spawnedBy === sessionKey)" |
166 | 169 | - set: timeoutChildRows |
167 | 170 | value: |
168 | | -expr: "Object.values(timeoutStore).filter((entry) => entry.spawnedBy === sessionKey)" |
| 171 | +expr: "timeoutChildEntries" |
| 172 | + - set: timeoutAlphaSessionKey |
| 173 | +value: |
| 174 | +expr: "timeoutChildEntries.find((entry) => entry.label === alphaLabel)?.key ?? ''" |
| 175 | + - set: timeoutBetaSessionKey |
| 176 | +value: |
| 177 | +expr: "timeoutChildEntries.find((entry) => entry.label === betaLabel)?.key ?? ''" |
169 | 178 | - set: timeoutSawAlpha |
170 | 179 | value: |
171 | 180 | expr: "timeoutChildRows.some((entry) => entry.label === alphaLabel)" |
172 | 181 | - set: timeoutSawBeta |
173 | 182 | value: |
174 | 183 | expr: "timeoutChildRows.some((entry) => entry.label === betaLabel)" |
175 | | - - set: timeoutSpawnRequests |
176 | | -value: |
177 | | -expr: "[...(await fetchJson(`${env.mock.baseUrl}/debug/requests`))].filter((request) => request.plannedToolName === 'sessions_spawn' && /subagent fanout synthesis check/i.test(String(request.allInputText ?? '')))" |
178 | 184 | - if: |
179 | | -expr: "timeoutSawAlpha && timeoutSawBeta && timeoutSpawnRequests.length >= 2" |
| 185 | +expr: "Boolean(env.mock)" |
180 | 186 | then: |
181 | | - - set: details |
182 | | -value: "subagent-1: ok\nsubagent-2: ok" |
183 | | - - set: lastError |
184 | | -value: __done__ |
| 187 | + - set: timeoutSpawnRequests |
| 188 | +value: |
| 189 | +expr: "[...(await fetchJson(`${env.mock.baseUrl}/debug/requests`))].filter((request) => request.plannedToolName === 'sessions_spawn' && /subagent fanout synthesis check/i.test(String(request.allInputText ?? '')))" |
| 190 | + - if: |
| 191 | +expr: "timeoutSawAlpha && timeoutSawBeta && timeoutSpawnRequests.length >= 2" |
| 192 | +then: |
| 193 | + - set: details |
| 194 | +value: "subagent-1: ok\nsubagent-2: ok" |
| 195 | + - set: lastError |
| 196 | +value: __done__ |
| 197 | +else: |
| 198 | + - set: timeoutAlphaTranscript |
| 199 | +value: |
| 200 | +expr: "timeoutAlphaSessionKey ? await readSessionTranscriptSummary(env, timeoutAlphaSessionKey) : null" |
| 201 | + - set: timeoutBetaTranscript |
| 202 | +value: |
| 203 | +expr: "timeoutBetaSessionKey ? await readSessionTranscriptSummary(env, timeoutBetaSessionKey) : null" |
| 204 | + - set: timeoutAlphaOk |
| 205 | +value: |
| 206 | +expr: "normalizeLowercaseStringOrEmpty(timeoutAlphaTranscript?.finalText) === 'ok'" |
| 207 | + - set: timeoutBetaOk |
| 208 | +value: |
| 209 | +expr: "normalizeLowercaseStringOrEmpty(timeoutBetaTranscript?.finalText) === 'ok'" |
| 210 | + - if: |
| 211 | +expr: "timeoutSawAlpha && timeoutSawBeta && timeoutAlphaOk && timeoutBetaOk" |
| 212 | +then: |
| 213 | + - set: details |
| 214 | +value: "subagent-1: ok\nsubagent-2: ok" |
| 215 | + - set: lastError |
| 216 | +value: __done__ |
185 | 217 | - if: |
186 | 218 | expr: "lastError !== '__done__'" |
187 | 219 | then: |
|