From 2cfe8883ea2adbf4f8fab0cdac3de8182f42db17 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 31 Jul 2026 17:08:33 -0400 Subject: [PATCH] feat(plugin): expose session rename and wait to plugins (#39932) --- packages/core/src/plugin/host.ts | 3 +++ packages/core/src/plugin/runtime.ts | 14 +++++++++++++- packages/core/test/plugin/host.ts | 2 ++ packages/plugin/src/effect/session.ts | 2 +- packages/www/content/docs/build/plugins.mdx | 2 +- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/core/src/plugin/host.ts b/packages/core/src/plugin/host.ts index 6d2aaec6a2..9f525cab99 100644 --- a/packages/core/src/plugin/host.ts +++ b/packages/core/src/plugin/host.ts @@ -341,6 +341,7 @@ export const make = Effect.fn("PluginHost.make")(function* (plugin: import("../p create: (input) => runtime.session.create({ id: input?.id, + title: input?.title, agent: input?.agent, model: input?.model, location: @@ -350,8 +351,10 @@ export const make = Effect.fn("PluginHost.make")(function* (plugin: import("../p prompt: runtime.session.prompt, generate: (input) => runtime.session.generate(input).pipe(Effect.map((text) => ({ text }))), command: runtime.session.command, + rename: runtime.session.rename, synthetic: runtime.session.synthetic, interrupt: (input) => runtime.session.interrupt(input.sessionID), + wait: (input) => runtime.session.wait(input.sessionID), }, } satisfies Plugin.Context }) diff --git a/packages/core/src/plugin/runtime.ts b/packages/core/src/plugin/runtime.ts index cafa5d443e..f5ee1eb899 100644 --- a/packages/core/src/plugin/runtime.ts +++ b/packages/core/src/plugin/runtime.ts @@ -11,7 +11,17 @@ import { Session } from "../session" export interface Interface { readonly session: Pick< Session.Interface, - "get" | "create" | "messages" | "prompt" | "generate" | "command" | "resume" | "interrupt" | "synthetic" + | "get" + | "create" + | "messages" + | "prompt" + | "generate" + | "command" + | "rename" + | "resume" + | "interrupt" + | "synthetic" + | "wait" > readonly job: Pick readonly location: { @@ -52,9 +62,11 @@ export const layerWithCell = (cell: Cell) => prompt: (input) => require(cell, (runtime) => runtime.session.prompt(input)), generate: (input) => require(cell, (runtime) => runtime.session.generate(input)), command: (input) => require(cell, (runtime) => runtime.session.command(input)), + rename: (input) => require(cell, (runtime) => runtime.session.rename(input)), resume: (sessionID) => require(cell, (runtime) => runtime.session.resume(sessionID)), interrupt: (sessionID) => require(cell, (runtime) => runtime.session.interrupt(sessionID)), synthetic: (input) => require(cell, (runtime) => runtime.session.synthetic(input)), + wait: (sessionID) => require(cell, (runtime) => runtime.session.wait(sessionID)), }, job: { start: (input) => require(cell, (runtime) => runtime.job.start(input)), diff --git a/packages/core/test/plugin/host.ts b/packages/core/test/plugin/host.ts index 975845f450..f45364ebdf 100644 --- a/packages/core/test/plugin/host.ts +++ b/packages/core/test/plugin/host.ts @@ -106,8 +106,10 @@ export function host(overrides: Overrides = {}): Plugin.Context { prompt: overrides.session?.prompt ?? (() => Effect.die("unused session.prompt")), generate: overrides.session?.generate ?? (() => Effect.die("unused session.generate")), command: overrides.session?.command ?? (() => Effect.die("unused session.command")), + rename: overrides.session?.rename ?? (() => Effect.die("unused session.rename")), synthetic: overrides.session?.synthetic ?? (() => Effect.die("unused session.synthetic")), interrupt: overrides.session?.interrupt ?? (() => Effect.die("unused session.interrupt")), + wait: overrides.session?.wait ?? (() => Effect.die("unused session.wait")), }, } } diff --git a/packages/plugin/src/effect/session.ts b/packages/plugin/src/effect/session.ts index 886490060a..e4206b6df2 100644 --- a/packages/plugin/src/effect/session.ts +++ b/packages/plugin/src/effect/session.ts @@ -29,7 +29,7 @@ export interface SessionHooks { export type SessionDomain = Pick< SessionApi, - "create" | "get" | "prompt" | "generate" | "command" | "synthetic" | "interrupt" + "create" | "get" | "prompt" | "generate" | "command" | "synthetic" | "interrupt" | "rename" | "wait" > & { readonly hook: Hooks } diff --git a/packages/www/content/docs/build/plugins.mdx b/packages/www/content/docs/build/plugins.mdx index 7d36320556..fd9331c880 100644 --- a/packages/www/content/docs/build/plugins.mdx +++ b/packages/www/content/docs/build/plugins.mdx @@ -177,7 +177,7 @@ and plugin options. | `ctx.integration` | `list`, `get`, `connect`, `attempt`, `transform`, `reload`, and connection lookup/resolution | | `ctx.plugin` | `list` currently active plugin IDs | | `ctx.reference` | `list`, `transform`, `reload` | -| `ctx.session` | `create`, `get`, `prompt`, `command`, `synthetic`, `interrupt`, and `hook` | +| `ctx.session` | `create`, `get`, `prompt`, `command`, `rename`, `synthetic`, `interrupt`, `wait`, and `hook` | | `ctx.skill` | `list`, `transform`, `reload` | | `ctx.tool` | `transform` and `hook` | | `ctx.aisdk` | `hook` |