| ... | ... | @@ -948,16 +948,35 @@ export const subscribeOrchestrationV2Shell = Effect.fn("ws.orchestrationV2.subsc |
| 948 | 948 | const enrichmentRefreshes = Stream.fromSubscription(enrichmentChanges).pipe( |
| 949 | 949 | Stream.filter((change) => change.repositoryIdentityResolved), |
| 950 | 950 | Stream.groupedWithin(64, Duration.millis(25)), |
| 951 | // Build the refresh from the identities the changes carry. Re-enriching |
| 952 | // every project here re-requested each expired root, whose resolution |
| 953 | // published again, so one expiry kept every subscriber reloading every |
| 954 | // project's metadata once a minute. |
| 951 | 955 | Stream.mapEffect((changes) => |
| 952 | | applicationEvents.latestApplicationSequence.pipe( |
| 953 | | Effect.flatMap(loadProjectMetadataSnapshot), |
| 954 | | Effect.map(({ snapshot }) => |
| 955 | | shellStreamItemFromEnrichmentRefresh({ |
| 956 | | snapshot, |
| 957 | | changes: Array.from(changes), |
| 958 | | }), |
| 959 | | ), |
| 960 | | ), |
| 956 | Effect.gen(function* () { |
| 957 | const identities = new Map( |
| 958 | Array.from(changes, (change) => [ |
| 959 | change.workspaceRoot, |
| 960 | change.enrichment.repositoryIdentity, |
| 961 | ]), |
| 962 | ); |
| 963 | const snapshotSequence = yield* applicationEvents.latestApplicationSequence; |
| 964 | const changedProjects = (yield* projects.listShells()).flatMap((project) => |
| 965 | identities.has(project.workspaceRoot) |
| 966 | ? [{ ...project, repositoryIdentity: identities.get(project.workspaceRoot) ?? null }] |
| 967 | : [], |
| 968 | ); |
| 969 | return shellStreamItemFromEnrichmentRefresh({ |
| 970 | snapshot: { |
| 971 | schemaVersion: ORCHESTRATION_V2_PROJECTION_SCHEMA_VERSION, |
| 972 | snapshotSequence, |
| 973 | projects: changedProjects, |
| 974 | threads: [], |
| 975 | archivedThreads: [], |
| 976 | } as OrchestrationV2ShellSnapshot, |
| 977 | changes: Array.from(changes), |
| 978 | }); |
| 979 | }), |
| 961 | 980 | ), |
| 962 | 981 | ); |
| 963 | 982 | |