chore: generate
This commit is contained in:
@@ -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(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user