| 261 | } |
| 262 | |
| 263 | export async function openInteractiveUsageStoresForWrite( |
| 264 | lease: StorageRootLease<'interactive', 'write'>, |
| 265 | ): Promise<InteractiveUsageStoresWriter> { |
| 266 | const existing = writerByLease.get(lease); |
| 267 | if (existing) return existing; |
| 268 | const opening = writerOpeningByLease.get(lease); |
| 269 | if (opening) return opening; |
| 270 | const pending = runWithStorageRootLease(lease, 'interactive', 'write', async (root) => { |
| 271 | const repos = await openRepos(root, true); |
| 272 | const stores = createWriterFacade(lease, repos.telemetry, repos.modelCalls, repos.pricing); |
| 273 | writers.add(stores); |
| 274 | writerByLease.set(lease, stores); |
| 275 | return stores; |
| 276 | }); |
| 277 | writerOpeningByLease.set(lease, pending); |
| 278 | try { |
| 279 | return await pending; |
| 280 | } finally { |
| 281 | if (writerOpeningByLease.get(lease) === pending) writerOpeningByLease.delete(lease); |
| 282 | } |
| 283 | } |
| 284 | |
| 285 | async function openRepos( |
| 286 | root: string, |