Skip to content

Commit 78ff202

Browse files
chore(lint): enforce flatMapConditionalToFilterOrFail
1 parent ce22859 commit 78ff202

11 files changed

Lines changed: 137 additions & 129 deletions

File tree

‎apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2912,15 +2912,15 @@ export const makeCodexAdapterV2 = Effect.fn("makeCodexAdapterV2")(function* (
29122912
: null,
29132913
),
29142914
Effect.orElseSucceed(() => null),
2915-
Effect.flatMap((response) =>
2916-
response === null
2917-
? client.raw
2918-
.request("thread/resume", {
2919-
threadId: input.nativeThreadId,
2920-
excludeTurns: true,
2921-
})
2922-
.pipe(Effect.flatMap(decodeCodexChildModel))
2923-
: Effect.succeed(response),
2915+
Effect.filterOrElse(
2916+
(response) => !(response === null),
2917+
(_response) =>
2918+
client.raw
2919+
.request("thread/resume", {
2920+
threadId: input.nativeThreadId,
2921+
excludeTurns: true,
2922+
})
2923+
.pipe(Effect.flatMap(decodeCodexChildModel)),
29242924
),
29252925
Effect.timeout("5 seconds"),
29262926
Effect.flatMap((response) =>

‎apps/server/src/orchestration-v2/CommandOutputHub.test.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ const subscribeFrames = (threadId: ThreadId) =>
163163

164164
const takeFrame = (frames: Queue.Queue<OrchestrationV2CommandOutputFrame | "ended">) =>
165165
Queue.take(frames).pipe(
166-
Effect.flatMap((frame) =>
167-
frame === "ended" ? Effect.die("command output stream ended early") : Effect.succeed(frame),
166+
Effect.filterOrElse(
167+
(frame) => !(frame === "ended"),
168+
(_frame) => Effect.die("command output stream ended early"),
168169
),
169170
);
170171

‎apps/server/src/orchestration-v2/Orchestrator.ts‎

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11981,21 +11981,20 @@ const makeOrchestrator = Effect.fn("orchestrationV2.Orchestrator.layer")(functio
1198111981
}
1198211982

1198311983
const plan = yield* dispatchOnce(command).pipe(
11984-
Effect.flatMap((planned) =>
11985-
planned.events.length > 0 ||
11986-
command.type === "thread.background-work.settle" ||
11987-
command.type === "thread.stop" ||
11988-
command.type === "subagent.stop" ||
11989-
// A second Stop sharing, or one after the share already ended, is not an error.
11990-
command.type === "thread.guest-share.close"
11991-
? Effect.succeed(planned)
11992-
: Effect.fail(
11993-
new OrchestratorDispatchError({
11994-
commandId: command.commandId,
11995-
commandType: command.type,
11996-
cause: "Command produced no domain events.",
11997-
}),
11998-
),
11984+
Effect.filterOrFail(
11985+
(planned) =>
11986+
planned.events.length > 0 ||
11987+
command.type === "thread.background-work.settle" ||
11988+
command.type === "thread.stop" ||
11989+
command.type === "subagent.stop" ||
11990+
// Closing a share again, or after it ended, is not an error.
11991+
command.type === "thread.guest-share.close",
11992+
(_planned) =>
11993+
new OrchestratorDispatchError({
11994+
commandId: command.commandId,
11995+
commandType: command.type,
11996+
cause: "Command produced no domain events.",
11997+
}),
1199911998
),
1200011999
Effect.catch((cause) =>
1200112000
Effect.gen(function* () {

‎apps/server/src/orchestration-v2/ProviderEventIngestor.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,7 @@ export const layer: Layer.Layer<
830830
),
831831
),
832832
),
833+
// @effect-diagnostics-next-line flatMapConditionalToFilterOrFail:off - The predicate narrows the captured event for the subagent update.
833834
Effect.flatMap((storedEvents) =>
834835
storedEvents.length === 0 || input.event.type !== "subagent.updated"
835836
? Effect.succeed(storedEvents)

‎apps/server/src/orchestration-v2/ThreadManagementService.ts‎

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -707,15 +707,14 @@ const make = Effect.gen(function* () {
707707
cause,
708708
}),
709709
),
710-
Effect.flatMap((projection) =>
711-
projection.thread.projectId === input.projectId && projection.thread.deletedAt === null
712-
? Effect.succeed(projection)
713-
: Effect.fail(
714-
new ThreadManagementThreadNotFoundError({
715-
projectId: input.projectId,
716-
threadId: input.threadId,
717-
}),
718-
),
710+
Effect.filterOrFail(
711+
(projection) =>
712+
projection.thread.projectId === input.projectId && projection.thread.deletedAt === null,
713+
(_projection) =>
714+
new ThreadManagementThreadNotFoundError({
715+
projectId: input.projectId,
716+
threadId: input.threadId,
717+
}),
719718
),
720719
);
721720

@@ -734,15 +733,14 @@ const make = Effect.gen(function* () {
734733
cause,
735734
}),
736735
),
737-
Effect.flatMap((projection) =>
738-
projection.thread.projectId === input.projectId && projection.thread.deletedAt === null
739-
? Effect.succeed(projection)
740-
: Effect.fail(
741-
new ThreadManagementThreadNotFoundError({
742-
projectId: input.projectId,
743-
threadId: input.threadId,
744-
}),
745-
),
736+
Effect.filterOrFail(
737+
(projection) =>
738+
projection.thread.projectId === input.projectId && projection.thread.deletedAt === null,
739+
(_projection) =>
740+
new ThreadManagementThreadNotFoundError({
741+
projectId: input.projectId,
742+
threadId: input.threadId,
743+
}),
746744
),
747745
);
748746

‎apps/server/src/vcs/GitVcsDriverCore.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3961,8 +3961,9 @@ export const makeGitVcsDriverCore = Effect.fn("makeGitVcsDriverCore")(function*
39613961
},
39623962
);
39633963
return run.pipe(
3964-
Effect.flatMap((result) =>
3965-
result.exitCode !== 0 && isRefLockFailure(result.stderr) ? run : Effect.succeed(result),
3964+
Effect.filterOrElse(
3965+
(result) => !(result.exitCode !== 0 && isRefLockFailure(result.stderr)),
3966+
(_result) => run,
39663967
),
39673968
);
39683969
};

‎packages/client-runtime/src/state/server.ts‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,20 +1275,20 @@ export function createServerEnvironmentAtoms<R, E>(
12751275
refreshTrigger: ({ environmentId }) => usageScanSettingsAtom(environmentId),
12761276
execute: (input, emit) =>
12771277
request(WS_METHODS.serverGetUsageSummary, input).pipe(
1278-
Effect.flatMap((summary) =>
1279-
summary.sources.some((source) => source.refreshing === true)
1280-
? emit(summary).pipe(
1281-
Effect.andThen(
1282-
request(WS_METHODS.serverGetUsageSummary, { ...input, awaitRefresh: true }),
1283-
),
1284-
Effect.catch((error) =>
1285-
Effect.logWarning("Could not refresh slow usage sources.").pipe(
1286-
Effect.annotateLogs({ ...safeErrorLogAttributes(error) }),
1287-
Effect.as(summary),
1288-
),
1278+
Effect.filterOrElse(
1279+
(summary) => !summary.sources.some((source) => source.refreshing === true),
1280+
(summary) =>
1281+
emit(summary).pipe(
1282+
Effect.andThen(
1283+
request(WS_METHODS.serverGetUsageSummary, { ...input, awaitRefresh: true }),
1284+
),
1285+
Effect.catch((error) =>
1286+
Effect.logWarning("Could not refresh slow usage sources.").pipe(
1287+
Effect.annotateLogs({ ...safeErrorLogAttributes(error) }),
1288+
Effect.as(summary),
12891289
),
1290-
)
1291-
: Effect.succeed(summary),
1290+
),
1291+
),
12921292
),
12931293
),
12941294
}),

‎packages/provider-cursor/src/server/driver.ts‎

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -225,21 +225,24 @@ export const CursorDriver: ProviderDriver<
225225
},
226226
auth.usesApiKey ? "api-key" : "browser",
227227
).pipe(
228-
Effect.flatMap((snapshot) =>
229-
effectiveConfig.enabled &&
230-
snapshot.installed &&
231-
snapshot.auth.status === "authenticated"
232-
? host.settings.get.pipe(
233-
Effect.flatMap((settings) =>
234-
readCursorUsageLimits(
235-
effectiveConfig,
236-
{ ...processEnv, CURSOR_API_KEY: apiKey },
237-
settings.cursorKeychainUsageEnabled,
238-
),
228+
Effect.filterOrElse(
229+
(snapshot) =>
230+
!(
231+
effectiveConfig.enabled &&
232+
snapshot.installed &&
233+
snapshot.auth.status === "authenticated"
234+
),
235+
(snapshot) =>
236+
host.settings.get.pipe(
237+
Effect.flatMap((settings) =>
238+
readCursorUsageLimits(
239+
effectiveConfig,
240+
{ ...processEnv, CURSOR_API_KEY: apiKey },
241+
settings.cursorKeychainUsageEnabled,
239242
),
240-
Effect.map((usageLimits) => ({ ...snapshot, usageLimits })),
241-
)
242-
: Effect.succeed(snapshot),
243+
),
244+
Effect.map((usageLimits) => ({ ...snapshot, usageLimits })),
245+
),
243246
),
244247
),
245248
),

‎packages/provider-grok/src/server/driver.ts‎

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,21 @@ export const GrokDriver: ProviderDriver<GrokSettings, GrokDriverEnv, Path.Path>
168168
const textGeneration = yield* makeGrokTextGeneration(effectiveConfig, processEnv);
169169

170170
const checkProvider = checkGrokProviderStatus(effectiveConfig, processEnv, cwd).pipe(
171-
Effect.flatMap((snapshot) =>
172-
effectiveConfig.enabled && snapshot.installed && snapshot.auth.status === "authenticated"
173-
? readGrokAccount(processEnv).pipe(
174-
Effect.map(({ email, usageLimits }) => ({
175-
...snapshot,
176-
auth: email ? { ...snapshot.auth, email } : snapshot.auth,
177-
usageLimits,
178-
})),
179-
)
180-
: Effect.succeed(snapshot),
171+
Effect.filterOrElse(
172+
(snapshot) =>
173+
!(
174+
effectiveConfig.enabled &&
175+
snapshot.installed &&
176+
snapshot.auth.status === "authenticated"
177+
),
178+
(snapshot) =>
179+
readGrokAccount(processEnv).pipe(
180+
Effect.map(({ email, usageLimits }) => ({
181+
...snapshot,
182+
auth: email ? { ...snapshot.auth, email } : snapshot.auth,
183+
usageLimits,
184+
})),
185+
),
181186
),
182187
Effect.map(stampIdentity),
183188
Effect.provideService(HttpClient.HttpClient, httpClient),

‎packages/source-control-github/src/server/GitHubPullRequestApi.ts‎

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,18 +1578,16 @@ export const make = Effect.gen(function* () {
15781578
),
15791579
),
15801580
listActionRequiredRuns(input).pipe(
1581-
Effect.flatMap((runs) =>
1582-
runs.length > workflowApprovalLimit
1583-
? Effect.fail(
1584-
new GitHubWorkflowApprovalRefusedError({
1585-
cwd: input.cwd,
1586-
number: input.number,
1587-
reason: "run-list-truncated",
1588-
observedCount: runs.length,
1589-
limit: workflowApprovalLimit,
1590-
}),
1591-
)
1592-
: Effect.succeed(runs),
1581+
Effect.filterOrFail(
1582+
(runs) => !(runs.length > workflowApprovalLimit),
1583+
(runs) =>
1584+
new GitHubWorkflowApprovalRefusedError({
1585+
cwd: input.cwd,
1586+
number: input.number,
1587+
reason: "run-list-truncated",
1588+
observedCount: runs.length,
1589+
limit: workflowApprovalLimit,
1590+
}),
15931591
),
15941592
),
15951593
],
@@ -1836,40 +1834,41 @@ export const make = Effect.gen(function* () {
18361834
(batch) => batch.items.length > 0 || input.cursor !== undefined || hasQuery,
18371835
() => read(false),
18381836
),
1839-
Effect.flatMap((batch) => {
1840-
if (!stacks || batch.items.length === 0) return Effect.succeed(batch);
1841-
return Effect.forEach(
1842-
batch.items,
1843-
(item) => {
1844-
const lookup = pullRequestLookup({
1845-
repository: input.repository,
1846-
number: item.number,
1847-
});
1848-
if (lookup === null) return Effect.succeed(item);
1849-
return GraphQLResolver.request(lookup, stackMembershipResolver).pipe(
1850-
Effect.map((result) => {
1851-
const pullRequest = result.repository?.pullRequest;
1852-
const stack = pullRequest == null ? undefined : toStackMembership(pullRequest);
1853-
return stack === undefined ? item : { ...item, stack };
1854-
}),
1855-
Effect.catch((error) =>
1856-
Effect.logWarning("Pull request stack membership enrichment failed", {
1857-
operation: "listPullRequestStackMemberships",
1858-
host: input.host,
1859-
error: error._tag,
1860-
}).pipe(Effect.as(item)),
1861-
),
1862-
);
1863-
},
1864-
{ concurrency: "unbounded" },
1865-
).pipe(
1866-
Effect.provideService(GitHubGraphQlClient.GitHubGraphQlTarget, {
1867-
host: input.host,
1868-
operation: "listPullRequestStackMemberships",
1869-
}),
1870-
Effect.map((items) => ({ ...batch, items })),
1871-
);
1872-
}),
1837+
Effect.filterOrElse(
1838+
(batch) => !stacks || batch.items.length === 0,
1839+
(batch) =>
1840+
Effect.forEach(
1841+
batch.items,
1842+
(item) => {
1843+
const lookup = pullRequestLookup({
1844+
repository: input.repository,
1845+
number: item.number,
1846+
});
1847+
if (lookup === null) return Effect.succeed(item);
1848+
return GraphQLResolver.request(lookup, stackMembershipResolver).pipe(
1849+
Effect.map((result) => {
1850+
const pullRequest = result.repository?.pullRequest;
1851+
const stack = pullRequest == null ? undefined : toStackMembership(pullRequest);
1852+
return stack === undefined ? item : { ...item, stack };
1853+
}),
1854+
Effect.catch((error) =>
1855+
Effect.logWarning("Pull request stack membership enrichment failed", {
1856+
operation: "listPullRequestStackMemberships",
1857+
host: input.host,
1858+
error: error._tag,
1859+
}).pipe(Effect.as(item)),
1860+
),
1861+
);
1862+
},
1863+
{ concurrency: "unbounded" },
1864+
).pipe(
1865+
Effect.provideService(GitHubGraphQlClient.GitHubGraphQlTarget, {
1866+
host: input.host,
1867+
operation: "listPullRequestStackMemberships",
1868+
}),
1869+
Effect.map((items) => ({ ...batch, items })),
1870+
),
1871+
),
18731872
);
18741873
},
18751874

0 commit comments

Comments
 (0)