From a84babca737d5ae2bddd5632187a93622abf0eb9 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Fri, 17 Jul 2026 17:13:46 -0500 Subject: [PATCH] refactor(plugin): simplify session request hook --- packages/ai/src/route/transport/websocket.ts | 6 +++--- packages/core/src/session/runner/llm.ts | 5 +++++ packages/plugin/src/v2/session.ts | 11 +++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/ai/src/route/transport/websocket.ts b/packages/ai/src/route/transport/websocket.ts index 4973224c9d..fbe0e483e0 100644 --- a/packages/ai/src/route/transport/websocket.ts +++ b/packages/ai/src/route/transport/websocket.ts @@ -235,14 +235,14 @@ export const json = (input: JsonInput): JsonTransp const transformRequest = prepareInput.transformRequest const transformed = transformRequest ? yield* transformRequest({ headers: parts.headers, body: yield* HttpTransport.decodeRequestBody(message) }) - : { headers: parts.headers, body: yield* HttpTransport.decodeRequestBody(message) } - const bodyText = transformRequest ? encodeJson(transformed.body) : message + : undefined + const bodyText = transformed ? encodeJson(transformed.body) : message const headers = yield* Auth.toEffect(prepareInput.auth)({ request: prepareInput.request, method: "POST", url: parts.url, body: bodyText, - headers: Headers.fromInput(transformed.headers), + headers: Headers.fromInput(transformed?.headers ?? parts.headers), }) return { url: yield* webSocketUrl(parts.url), diff --git a/packages/core/src/session/runner/llm.ts b/packages/core/src/session/runner/llm.ts index f82a29a2ee..2f9baa0be8 100644 --- a/packages/core/src/session/runner/llm.ts +++ b/packages/core/src/session/runner/llm.ts @@ -4,6 +4,7 @@ import { LLMError, LLMEvent, isContextOverflowFailure, type ProviderErrorEvent } import { SessionError } from "@opencode-ai/schema/session-error" import { Cause, Effect, Exit, Fiber, FiberSet, Layer, Option, Semaphore, Stream } from "effect" import { Database } from "../../database/database" +import { AgentV2 } from "../../agent" import { EventV2 } from "../../event" import { PermissionV2 } from "../../permission" import { QuestionTool } from "../../tool/question" @@ -40,6 +41,7 @@ const layer = Layer.effect( const db = (yield* Database.Service).db const compaction = yield* SessionCompaction.Service const title = yield* SessionTitle.Service + const agents = yield* AgentV2.Service // Title generation is a side effect of the first step; it must not delay step continuation. // Tracked per process so repeated wakes before the second user message arrives don't // re-fire a redundant LLM call; `SessionTitle` itself is idempotent based on durable history. @@ -415,8 +417,10 @@ const layer = Layer.effect( Effect.gen(function* () { const compacted = yield* restore( Effect.gen(function* () { + const agent = yield* agents.select(session.agent) return yield* compaction.compactManual({ session, + agent: agent.id, messages: yield* store.context(sessionID), inputID: pending.id, }) @@ -501,6 +505,7 @@ export const node = makeLocationNode({ SessionStore.node, SessionCompaction.node, SessionTitle.node, + AgentV2.node, Snapshot.node, Database.node, ], diff --git a/packages/plugin/src/v2/session.ts b/packages/plugin/src/v2/session.ts index 29873e8a32..0d470263f9 100644 --- a/packages/plugin/src/v2/session.ts +++ b/packages/plugin/src/v2/session.ts @@ -1,16 +1,11 @@ +import type { RequestData } from "@opencode-ai/ai/route" import type { Agent } from "@opencode-ai/schema/agent" import type { Model } from "@opencode-ai/schema/model" import type { Session } from "@opencode-ai/schema/session" -export type RequestValue = - | null - | boolean - | number - | string - | Array - | { [key: string]: RequestValue } +export type RequestValue = RequestData["body"][string] -export type RequestBody = Record +export type RequestBody = RequestData["body"] export interface SessionRequest { readonly sessionID: Session.ID