( params: QueryParams, )
| 268 | } |
| 269 | |
| 270 | export async function* query( |
| 271 | params: QueryParams, |
| 272 | ): AsyncGenerator< |
| 273 | | StreamEvent |
| 274 | | RequestStartEvent |
| 275 | | Message |
| 276 | | TombstoneMessage |
| 277 | | ToolUseSummaryMessage, |
| 278 | Terminal |
| 279 | > { |
| 280 | const consumedCommandUuids: string[] = [] |
| 281 | const terminal = yield* queryLoop(params, consumedCommandUuids) |
| 282 | // Only reached if queryLoop returned normally. Skipped on throw (error |
| 283 | // propagates through yield*) and on .return() (Return completion closes |
| 284 | // both generators). This gives the same asymmetric started-without-completed |
| 285 | // signal as print.ts's drainCommandQueue when the turn fails. |
| 286 | for (const uuid of consumedCommandUuids) { |
| 287 | notifyCommandLifecycle(uuid, 'completed') |
| 288 | } |
| 289 | return terminal |
| 290 | } |
| 291 | |
| 292 | async function* queryLoop( |
| 293 | params: QueryParams, |
no test coverage detected