| ... | @@ -276,8 +276,10 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => | ... | @@ -276,8 +276,10 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => |
| 276 | yield* upsertSessionBinding(session, threadId); | 276 | yield* upsertSessionBinding(session, threadId); |
| 277 | yield* analytics.record("provider.session.started", { | 277 | yield* analytics.record("provider.session.started", { |
| 278 | provider: session.provider, | 278 | provider: session.provider, |
| 279 | approvalPolicy: input.approvalPolicy, | 279 | runtimeMode: input.runtimeMode, |
| 280 | sandboxMode: input.sandboxMode, | 280 | hasResumeCursor: session.resumeCursor !== undefined, |
| | 281 | hasCwd: typeof input.cwd === "string" && input.cwd.trim().length > 0, |
| | 282 | hasModel: typeof input.model === "string" && input.model.trim().length > 0, |
| 281 | }); | 283 | }); |
| 282 | | 284 | |
| 283 | return session; | 285 | return session; |
| ... | @@ -321,7 +323,9 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => | ... | @@ -321,7 +323,9 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => |
| 321 | yield* analytics.record("provider.turn.sent", { | 323 | yield* analytics.record("provider.turn.sent", { |
| 322 | provider: routed.adapter.provider, | 324 | provider: routed.adapter.provider, |
| 323 | model: input.model, | 325 | model: input.model, |
| 324 | effort: input.effort, | 326 | interactionMode: input.interactionMode, |
| | 327 | attachmentCount: input.attachments.length, |
| | 328 | hasInput: typeof input.input === "string" && input.input.trim().length > 0, |
| 325 | }); | 329 | }); |
| 326 | return turn; | 330 | return turn; |
| 327 | }); | 331 | }); |
| ... | @@ -376,7 +380,6 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => | ... | @@ -376,7 +380,6 @@ const makeProviderService = (options?: ProviderServiceLiveOptions) => |
| 376 | allowRecovery: true, | 380 | allowRecovery: true, |
| 377 | }); | 381 | }); |
| 378 | yield* routed.adapter.respondToUserInput(routed.threadId, input.requestId, input.answers); | 382 | yield* routed.adapter.respondToUserInput(routed.threadId, input.requestId, input.answers); |
| 379 | }); | | |
| 380 | }); | 383 | }); |
| 381 | | 384 | |
| 382 | const stopSession: ProviderServiceShape["stopSession"] = (rawInput) => | 385 | const stopSession: ProviderServiceShape["stopSession"] = (rawInput) => |