chore: generate

This commit is contained in:
opencode-agent[bot]
2026-05-20 07:10:40 +00:00
parent 539b118690
commit 13006d6d7c
2 changed files with 98 additions and 91 deletions
@@ -283,9 +283,7 @@ export function createPromptState(input: PromptInput): PromptState {
const [shell, setShell] = createSignal(false) const [shell, setShell] = createSignal(false)
const placeholder = createMemo(() => { const placeholder = createMemo(() => {
if (shell()) { if (shell()) {
return new StyledText([ return new StyledText([bg(input.theme().surface)(fg(input.theme().muted)('Run a command... "git status"'))])
bg(input.theme().surface)(fg(input.theme().muted)('Run a command... "git status"')),
])
} }
if (!input.state().first) { if (!input.state().first) {
@@ -1087,7 +1085,8 @@ export function createPromptState(input: PromptInput): PromptState {
return return
} }
const parsed = next.mode === "shell" || isNewCommand(next.text) ? undefined : parseSlashCommand(next.text, input.commands()) const parsed =
next.mode === "shell" || isNewCommand(next.text) ? undefined : parseSlashCommand(next.text, input.commands())
if (parsed?.type === "pending") { if (parsed?.type === "pending") {
input.onStatus("loading commands") input.onStatus("loading commands")
return return
@@ -515,14 +515,19 @@ function createLayer(input: StreamInput) {
state.footerView = current state.footerView = current
} }
const resolveShellAgent = Effect.fn("RunStreamTransport.resolveShellAgent")(function* (agent: string | undefined) { const resolveShellAgent = Effect.fn("RunStreamTransport.resolveShellAgent")(function* (
agent: string | undefined,
) {
if (agent) { if (agent) {
return agent return agent
} }
const list = yield* Effect.promise(() => const list = yield* Effect.promise(() =>
input.sdk.app.agents(input.directory ? { directory: input.directory } : undefined, { throwOnError: true }), input.sdk.app.agents(input.directory ? { directory: input.directory } : undefined, { throwOnError: true }),
).pipe(Effect.map((item) => item.data ?? []), Effect.orElseSucceed(() => [])) ).pipe(
Effect.map((item) => item.data ?? []),
Effect.orElseSucceed(() => []),
)
const next = list.find((item) => item.mode !== "subagent" && item.hidden !== true)?.name const next = list.find((item) => item.mode !== "subagent" && item.hidden !== true)?.name
if (next) { if (next) {
return next return next
@@ -1023,105 +1028,108 @@ function createLayer(input: StreamInput) {
], ],
} }
const command = next.prompt.command const command = next.prompt.command
const send = next.prompt.mode === "shell" const send =
? Effect.sync(() => { next.prompt.mode === "shell"
input.trace?.write("send.shell", { ? Effect.sync(() => {
sessionID: input.sessionID, input.trace?.write("send.shell", {
command: next.prompt.text, sessionID: input.sessionID,
}) command: next.prompt.text,
}).pipe( })
Effect.andThen( }).pipe(
resolveShellAgent(next.agent).pipe( Effect.andThen(
Effect.flatMap((agent) => resolveShellAgent(next.agent)
.pipe(
Effect.flatMap((agent) =>
Effect.promise(() =>
input.sdk.session.shell(
{
sessionID: input.sessionID,
agent,
model: next.model,
command: next.prompt.text,
},
{ signal: turn.signal, throwOnError: true },
),
),
),
)
.pipe(
Effect.tap(() =>
Effect.sync(() => {
input.trace?.write("send.shell.ok", {
sessionID: input.sessionID,
})
item.armed = true
item.live = true
}),
),
Effect.flatMap(() => Deferred.succeed(item.done, undefined).pipe(Effect.ignore)),
Effect.catch((error) => Deferred.fail(item.done, error).pipe(Effect.ignore)),
Effect.forkIn(scope, { startImmediately: true }),
Effect.asVoid,
),
),
)
: command
? Effect.sync(() => {
input.trace?.write("send.command", { sessionID: input.sessionID, command: command.name })
}).pipe(
Effect.andThen(
Effect.promise(() => Effect.promise(() =>
input.sdk.session.shell( input.sdk.session.command(
{ {
sessionID: input.sessionID, sessionID: input.sessionID,
agent, agent: next.agent,
model: next.model, model: next.model ? `${next.model.providerID}/${next.model.modelID}` : undefined,
command: next.prompt.text, variant: next.variant,
command: command.name,
arguments: command.arguments,
parts: [
...(next.includeFiles ? next.files : []),
...next.prompt.parts.filter(
(item): item is Extract<RunPromptPart, { type: "file" }> => item.type === "file",
),
],
}, },
{ signal: turn.signal, throwOnError: true }, { signal: turn.signal },
), ),
).pipe(
Effect.tap(() =>
Effect.sync(() => {
input.trace?.write("send.command.ok", {
sessionID: input.sessionID,
command: command.name,
})
item.armed = true
item.live = true
}),
),
Effect.flatMap(() => Deferred.succeed(item.done, undefined).pipe(Effect.ignore)),
Effect.catch((error) => Deferred.fail(item.done, error).pipe(Effect.ignore)),
Effect.forkIn(scope, { startImmediately: true }),
Effect.asVoid,
),
),
)
: Effect.sync(() => {
input.trace?.write("send.prompt", req)
}).pipe(
Effect.andThen(
Effect.promise(() =>
input.sdk.session.promptAsync(req, {
signal: turn.signal,
}),
), ),
), ),
).pipe(
Effect.tap(() => Effect.tap(() =>
Effect.sync(() => { Effect.sync(() => {
input.trace?.write("send.shell.ok", { input.trace?.write("send.prompt.ok", {
sessionID: input.sessionID, sessionID: input.sessionID,
}) })
item.armed = true item.armed = true
item.live = true
}), }),
), ),
Effect.flatMap(() => Deferred.succeed(item.done, undefined).pipe(Effect.ignore)), )
Effect.catch((error) => Deferred.fail(item.done, error).pipe(Effect.ignore)),
Effect.forkIn(scope, { startImmediately: true }),
Effect.asVoid,
),
),
)
: command
? Effect.sync(() => {
input.trace?.write("send.command", { sessionID: input.sessionID, command: command.name })
}).pipe(
Effect.andThen(
Effect.promise(() =>
input.sdk.session.command(
{
sessionID: input.sessionID,
agent: next.agent,
model: next.model ? `${next.model.providerID}/${next.model.modelID}` : undefined,
variant: next.variant,
command: command.name,
arguments: command.arguments,
parts: [
...(next.includeFiles ? next.files : []),
...next.prompt.parts.filter(
(item): item is Extract<RunPromptPart, { type: "file" }> => item.type === "file",
),
],
},
{ signal: turn.signal },
),
).pipe(
Effect.tap(() =>
Effect.sync(() => {
input.trace?.write("send.command.ok", {
sessionID: input.sessionID,
command: command.name,
})
item.armed = true
item.live = true
}),
),
Effect.flatMap(() => Deferred.succeed(item.done, undefined).pipe(Effect.ignore)),
Effect.catch((error) => Deferred.fail(item.done, error).pipe(Effect.ignore)),
Effect.forkIn(scope, { startImmediately: true }),
Effect.asVoid,
),
),
)
: Effect.sync(() => {
input.trace?.write("send.prompt", req)
}).pipe(
Effect.andThen(
Effect.promise(() =>
input.sdk.session.promptAsync(req, {
signal: turn.signal,
}),
),
),
Effect.tap(() =>
Effect.sync(() => {
input.trace?.write("send.prompt.ok", {
sessionID: input.sessionID,
})
item.armed = true
}),
),
)
yield* send.pipe( yield* send.pipe(
Effect.flatMap(() => { Effect.flatMap(() => {