fix(sdk): expose prompt input contract

This commit is contained in:
Dax Raad 2026-07-06 15:05:43 -04:00
commit 36d17c30a7
4 changed files with 11 additions and 9 deletions

View file

@ -176,22 +176,22 @@ export async function resolveCurrentSession(
parts: [ parts: [
...(message.files ?? []).map((file) => ({ ...(message.files ?? []).map((file) => ({
type: "file" as const, type: "file" as const,
url: file.uri, url: file.source.type === "uri" ? file.source.uri : `data:${file.mime};base64,${file.data}`,
mime: file.mime, mime: file.mime,
filename: file.name, filename: file.name,
source: file.source source: file.mention
? { ? {
type: "file" as const, type: "file" as const,
path: file.name ?? file.uri, path: file.name ?? (file.source.type === "uri" ? file.source.uri : "inline attachment"),
text: { start: file.source.start, end: file.source.end, value: file.source.text }, text: { start: file.mention.start, end: file.mention.end, value: file.mention.text },
} }
: undefined, : undefined,
})), })),
...(message.agents ?? []).map((agent) => ({ ...(message.agents ?? []).map((agent) => ({
type: "agent" as const, type: "agent" as const,
name: agent.name, name: agent.name,
source: agent.source source: agent.mention
? { start: agent.source.start, end: agent.source.end, value: agent.source.text } ? { start: agent.mention.start, end: agent.mention.end, value: agent.mention.text }
: undefined, : undefined,
})), })),
], ],

View file

@ -42,5 +42,6 @@ export { SessionInput } from "@opencode-ai/schema/session-input"
export { SessionMessage } from "@opencode-ai/schema/session-message" export { SessionMessage } from "@opencode-ai/schema/session-message"
export { Skill } from "@opencode-ai/schema/skill" export { Skill } from "@opencode-ai/schema/skill"
export { Prompt } from "@opencode-ai/schema/prompt" export { Prompt } from "@opencode-ai/schema/prompt"
export { PromptInput } from "@opencode-ai/schema/prompt-input"
export type { OpenCodeEvent } from "@opencode-ai/protocol/groups/event" export type { OpenCodeEvent } from "@opencode-ai/protocol/groups/event"
export type OpenCodeClient = Effect.Success<ReturnType<typeof import("./generated/client").make>> export type OpenCodeClient = Effect.Success<ReturnType<typeof import("./generated/client").make>>

View file

@ -8,6 +8,7 @@ export {
Location, Location,
Model, Model,
Prompt, Prompt,
PromptInput,
Provider, Provider,
RelativePath, RelativePath,
Session, Session,

View file

@ -181,7 +181,7 @@ it.live(
const active = yield* opencode.sessions.active() const active = yield* opencode.sessions.active()
const admitted = yield* opencode.sessions.prompt({ const admitted = yield* opencode.sessions.prompt({
sessionID: id, sessionID: id,
prompt: fixture.sdk.Prompt.make({ text: "Do not run" }), prompt: fixture.sdk.PromptInput.Prompt.make({ text: "Do not run" }),
resume: false, resume: false,
}) })
const context = yield* opencode.sessions.context({ sessionID: id }) const context = yield* opencode.sessions.context({ sessionID: id })
@ -192,7 +192,7 @@ it.live(
const remainingContextEntries = yield* opencode.sessions.instructions.entry.list({ sessionID: id }) const remainingContextEntries = yield* opencode.sessions.instructions.entry.list({ sessionID: id })
const wake = yield* opencode.sessions.prompt({ const wake = yield* opencode.sessions.prompt({
sessionID: id, sessionID: id,
prompt: fixture.sdk.Prompt.make({ text: "Promote this input" }), prompt: fixture.sdk.PromptInput.Prompt.make({ text: "Promote this input" }),
}) })
const prompted = yield* opencode.sessions.log({ sessionID: id, follow: true }).pipe( const prompted = yield* opencode.sessions.log({ sessionID: id, follow: true }).pipe(
Stream.filter((event) => event.type === "session.prompt.promoted" && event.data.inputID === wake.id), Stream.filter((event) => event.type === "session.prompt.promoted" && event.data.inputID === wake.id),
@ -282,7 +282,7 @@ it.live(
yield* opencode.sessions.create({ id, location: location(fixture) }) yield* opencode.sessions.create({ id, location: location(fixture) })
yield* opencode.sessions.prompt({ yield* opencode.sessions.prompt({
sessionID: id, sessionID: id,
prompt: fixture.sdk.Prompt.make({ text: "Observe this input" }), prompt: fixture.sdk.PromptInput.Prompt.make({ text: "Observe this input" }),
}) })
const event = yield* Deferred.await(prompted).pipe(Effect.timeout("4 seconds")) const event = yield* Deferred.await(prompted).pipe(Effect.timeout("4 seconds"))