diff --git a/packages/core/src/session.ts b/packages/core/src/session.ts index 03a66db99a..366d954d9e 100644 --- a/packages/core/src/session.ts +++ b/packages/core/src/session.ts @@ -964,7 +964,8 @@ const resolvePrompt = Effect.fn("Session.resolvePrompt")(function* ( const requested = input.skills const selected = yield* Effect.gen(function* () { if (!requested?.length) return undefined - const available = yield* (yield* skills).list() + const skillService = yield* skills + const available = yield* skillService.list() return yield* Effect.forEach(requested, (attachment) => { const skill = available.find((item) => item.id === attachment.id) if (!skill) return Effect.fail(new SkillNotFoundError({ skill: attachment.id })) diff --git a/packages/core/src/session/compaction.ts b/packages/core/src/session/compaction.ts index 69e4be9472..381a52822a 100644 --- a/packages/core/src/session/compaction.ts +++ b/packages/core/src/session/compaction.ts @@ -346,11 +346,10 @@ const make = (dependencies: Dependencies) => { reason: "auto", ...content, }) - const error = { type: "compaction.unavailable" as const, message: "Nothing to compact yet" } return yield* failed({ sessionID: input.session.id, reason: "auto", - error, + error: { type: "compaction.unavailable", message: "Nothing to compact yet" }, }) }) const required = (input: RequiredInput) => { diff --git a/packages/core/src/session/model-transport.ts b/packages/core/src/session/model-transport.ts index a4d6ba2b18..600f067256 100644 --- a/packages/core/src/session/model-transport.ts +++ b/packages/core/src/session/model-transport.ts @@ -319,7 +319,7 @@ export const makeLayer = (connector: WebSocketConnector) => }).pipe( Effect.andThen(metric("connect_failure")), Effect.andThen(metric("fallback")), - Effect.andThen(Effect.succeed(undefined)), + Effect.asVoid, ), ), ) diff --git a/packages/core/src/session/run-coordinator.ts b/packages/core/src/session/run-coordinator.ts index 75d81557a1..548e715879 100644 --- a/packages/core/src/session/run-coordinator.ts +++ b/packages/core/src/session/run-coordinator.ts @@ -71,7 +71,7 @@ export const make = (options: { const loop = (key: Key, execution: Execution, force: boolean): Effect.Effect => Effect.suspend(() => options.drain(key, force, execution.scope)).pipe( - Effect.flatMap(() => + Effect.andThen( Effect.suspend(() => { if (execution.stopping || execution.pendingWake === undefined) return Effect.void execution.scope = execution.pendingWake diff --git a/packages/core/src/session/runner/llm.ts b/packages/core/src/session/runner/llm.ts index 658872c3a9..8f73761c81 100644 --- a/packages/core/src/session/runner/llm.ts +++ b/packages/core/src/session/runner/llm.ts @@ -405,7 +405,7 @@ const layer = Layer.effect( ? [] : yield* snapshots .files({ from: startSnapshot, to: snapshot }) - .pipe(Effect.catch(() => Effect.succeed(undefined))) + .pipe(Effect.orElseSucceed(() => undefined)) : undefined return { snapshot, files } }) @@ -440,11 +440,13 @@ const layer = Layer.effect( Stream.runForEach((event) => Effect.gen(function* () { if (overflowFailure || publisher.hasProviderError()) return - if (LLMEvent.is.providerError(event)) { - if (isContextOverflowFailure(event) && !publisher.record().outputStarted) { - overflowFailure = event - return - } + if ( + LLMEvent.is.providerError(event) && + isContextOverflowFailure(event) && + !publisher.record().outputStarted + ) { + overflowFailure = event + return } yield* publisher.publish(event) if (event.type !== "tool-call" || event.providerExecuted) return diff --git a/packages/core/src/session/runner/publish-llm-event.ts b/packages/core/src/session/runner/publish-llm-event.ts index 30cd003bcc..8fa3e70da0 100644 --- a/packages/core/src/session/runner/publish-llm-event.ts +++ b/packages/core/src/session/runner/publish-llm-event.ts @@ -316,9 +316,7 @@ export const createLLMEventPublisher = (bus: Pick, inp }) }) - const flush = Effect.fn("SessionRunner.flush")(function* () { - yield* flushFragments() - }) + const flush = Effect.fn("SessionRunner.flush")(flushFragments) const failTool = Effect.fnUntraced(function* (id: string, error: SessionError.Error, metadata?: Tool.Metadata) { const tool = tools.get(id) @@ -372,12 +370,9 @@ export const createLLMEventPublisher = (bus: Pick, inp }) }) - const failUnsettledTools = Effect.fn("SessionRunner.failUnsettledTools")(function* ( - error: SessionError.Error, - scope: "hosted" | "all" = "all", - ) { - return yield* failTools(error, scope) - }) + const failUnsettledTools = Effect.fn("SessionRunner.failUnsettledTools")( + (error: SessionError.Error, scope: "hosted" | "all" = "all") => failTools(error, scope), + ) const assistantMessageIDForTool = (id: string) => { const tool = tools.get(id) diff --git a/packages/core/src/session/title.ts b/packages/core/src/session/title.ts index fec348d1a3..fc256e2049 100644 --- a/packages/core/src/session/title.ts +++ b/packages/core/src/session/title.ts @@ -117,7 +117,7 @@ const make = (dependencies: Dependencies) => { if (!firstUser) return const agent = yield* dependencies.agents.get(Agent.ID.make("title")) if (!agent) return - const primary = yield* dependencies.models.resolve(session).pipe(Effect.catch(() => Effect.succeed(undefined))) + const primary = yield* dependencies.models.resolve(session).pipe(Effect.orElseSucceed(() => undefined)) const info = yield* Effect.gen(function* () { if (agent.model) return yield* dependencies.catalog.model.get(agent.model.providerID, agent.model.id) if (!primary) return @@ -136,7 +136,7 @@ const make = (dependencies: Dependencies) => { ...(variant ? { variant } : {}), }), }) - .pipe(Effect.catch(() => Effect.succeed(undefined)))) + .pipe(Effect.orElseSucceed(() => undefined))) const selected = preferred ?? primary if (!selected) return const title =