refactor(plugin): rename session HTTP hook

This commit is contained in:
Aiden Cline 2026-08-01 21:54:49 -05:00
commit a21598901d
6 changed files with 13 additions and 12 deletions

View file

@ -225,7 +225,7 @@ export const OpenAIPlugin = define({
}) })
} }
}) })
yield* ctx.session.hook("request", (evt) => yield* ctx.session.hook("http", (evt) =>
Effect.sync(() => { Effect.sync(() => {
if (!chatgpt || evt.model.providerID !== Provider.ID.openai) return if (!chatgpt || evt.model.providerID !== Provider.ID.openai) return
const url = new URL(evt.url) const url = new URL(evt.url)

View file

@ -222,7 +222,7 @@ export const layer = Layer.effect(
const options: StreamOptions = { const options: StreamOptions = {
transform: (request) => transform: (request) =>
hooks hooks
.trigger("session", "request", { .trigger("session", "http", {
sessionID: session.id, sessionID: session.id,
agent: agent.id, agent: agent.id,
model: resolved.ref, model: resolved.ref,

View file

@ -100,7 +100,7 @@ describe("OpenAIPlugin", () => {
}) })
yield* addPlugin() yield* addPlugin()
const request = yield* (yield* PluginHooks.Service).trigger("session", "request", { const request = yield* (yield* PluginHooks.Service).trigger("session", "http", {
sessionID: Session.ID.make("ses_test"), sessionID: Session.ID.make("ses_test"),
agent: Agent.ID.make("build"), agent: Agent.ID.make("build"),
model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }), model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }),
@ -109,7 +109,7 @@ describe("OpenAIPlugin", () => {
headers: {}, headers: {},
body: "{}", body: "{}",
}) })
const custom = yield* (yield* PluginHooks.Service).trigger("session", "request", { const custom = yield* (yield* PluginHooks.Service).trigger("session", "http", {
sessionID: Session.ID.make("ses_test"), sessionID: Session.ID.make("ses_test"),
agent: Agent.ID.make("build"), agent: Agent.ID.make("build"),
model: Model.Ref.make({ providerID: Provider.ID.make("custom-openai"), id: Model.ID.make("gpt-5.5") }), model: Model.Ref.make({ providerID: Provider.ID.make("custom-openai"), id: Model.ID.make("gpt-5.5") }),
@ -118,7 +118,7 @@ describe("OpenAIPlugin", () => {
headers: {}, headers: {},
body: "{}", body: "{}",
}) })
const proxy = yield* (yield* PluginHooks.Service).trigger("session", "request", { const proxy = yield* (yield* PluginHooks.Service).trigger("session", "http", {
sessionID: Session.ID.make("ses_test"), sessionID: Session.ID.make("ses_test"),
agent: Agent.ID.make("build"), agent: Agent.ID.make("build"),
model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }), model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }),
@ -184,7 +184,7 @@ describe("OpenAIPlugin", () => {
}) })
yield* addPlugin() yield* addPlugin()
const request = yield* (yield* PluginHooks.Service).trigger("session", "request", { const request = yield* (yield* PluginHooks.Service).trigger("session", "http", {
sessionID: Session.ID.make("ses_test"), sessionID: Session.ID.make("ses_test"),
agent: Agent.ID.make("build"), agent: Agent.ID.make("build"),
model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }), model: Model.Ref.make({ providerID: Provider.ID.openai, id: Model.ID.make("gpt-5.5") }),

View file

@ -16,7 +16,7 @@ export interface SessionContext {
tools: Record<string, { description: string; input: JsonSchema.JsonSchema }> tools: Record<string, { description: string; input: JsonSchema.JsonSchema }>
} }
export interface SessionRequest extends HttpRequest { export interface SessionHttp extends HttpRequest {
readonly sessionID: Session.ID readonly sessionID: Session.ID
readonly agent: Agent.ID readonly agent: Agent.ID
readonly model: Model.Ref readonly model: Model.Ref
@ -24,7 +24,7 @@ export interface SessionRequest extends HttpRequest {
export interface SessionHooks { export interface SessionHooks {
readonly context: SessionContext readonly context: SessionContext
readonly request: SessionRequest readonly http: SessionHttp
} }
export type SessionDomain = Pick< export type SessionDomain = Pick<

View file

@ -16,7 +16,7 @@ export interface SessionContext {
tools: Record<string, { description: string; input: JsonSchema.JsonSchema }> tools: Record<string, { description: string; input: JsonSchema.JsonSchema }>
} }
export interface SessionRequest extends HttpRequest { export interface SessionHttp extends HttpRequest {
readonly sessionID: Session.ID readonly sessionID: Session.ID
readonly agent: Agent.ID readonly agent: Agent.ID
readonly model: Model.Ref readonly model: Model.Ref
@ -24,7 +24,7 @@ export interface SessionRequest extends HttpRequest {
export interface SessionHooks { export interface SessionHooks {
readonly context: SessionContext readonly context: SessionContext
readonly request: SessionRequest readonly http: SessionHttp
} }
export type SessionDomain = Pick< export type SessionDomain = Pick<

View file

@ -246,7 +246,8 @@ mutable fields:
| ------------------------------------------- | ------------------------------------------------------------------------------ | | ------------------------------------------- | ------------------------------------------------------------------------------ |
| `ctx.aisdk.hook("sdk", callback)` | `sdk`, after inspecting `model`, `package`, and `options` | | `ctx.aisdk.hook("sdk", callback)` | `sdk`, after inspecting `model`, `package`, and `options` |
| `ctx.aisdk.hook("language", callback)` | `language`, after inspecting `model`, `sdk`, and `options` | | `ctx.aisdk.hook("language", callback)` | `language`, after inspecting `model`, `sdk`, and `options` |
| `ctx.session.hook("request", callback)` | `system`, `messages`, and the `tools` record immediately before model dispatch | | `ctx.session.hook("context", callback)` | `system`, `messages`, and the `tools` record immediately before model dispatch |
| `ctx.session.hook("http", callback)` | `url`, `headers`, and `body` before the model request is sent |
| `ctx.tool.hook("execute.before", callback)` | `input`, before the selected tool executes | | `ctx.tool.hook("execute.before", callback)` | `input`, before the selected tool executes |
| `ctx.tool.hook("execute.after", callback)` | Terminal `result` on success or `error` on failure | | `ctx.tool.hook("execute.after", callback)` | Terminal `result` on success or `error` on failure |
@ -259,7 +260,7 @@ import { Plugin } from "@opencode-ai/plugin"
export default Plugin.define({ export default Plugin.define({
id: "acme.guards", id: "acme.guards",
setup: async (ctx) => { setup: async (ctx) => {
await ctx.session.hook("request", (event) => { await ctx.session.hook("context", (event) => {
delete event.tools.write delete event.tools.write
}) })