summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/session/prompt.ts68
1 files changed, 45 insertions, 23 deletions
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index 144d61d18..f403ef22d 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -286,7 +286,11 @@ export namespace SessionPrompt {
OUTPUT_TOKEN_MAX,
),
abortSignal: abort.signal,
- providerOptions: ProviderTransform.providerOptions(model.npm, model.providerID, params.options),
+ providerOptions: ProviderTransform.providerOptions(
+ model.npm,
+ model.providerID,
+ params.options,
+ ),
stopWhen: stepCountIs(1),
temperature: params.temperature,
topP: params.topP,
@@ -321,7 +325,11 @@ export namespace SessionPrompt {
async transformParams(args) {
if (args.type === "stream") {
// @ts-expect-error
- args.params.prompt = ProviderTransform.message(args.params.prompt, model.providerID, model.modelID)
+ args.params.prompt = ProviderTransform.message(
+ args.params.prompt,
+ model.providerID,
+ model.modelID,
+ )
}
return args.params
},
@@ -504,7 +512,11 @@ export namespace SessionPrompt {
)
for (const item of await ToolRegistry.tools(input.providerID, input.modelID)) {
if (Wildcard.all(item.id, enabledTools) === false) continue
- const schema = ProviderTransform.schema(input.providerID, input.modelID, z.toJSONSchema(item.parameters))
+ const schema = ProviderTransform.schema(
+ input.providerID,
+ input.modelID,
+ z.toJSONSchema(item.parameters),
+ )
tools[item.id] = tool({
id: item.id as any,
description: item.description,
@@ -585,17 +597,7 @@ export namespace SessionPrompt {
args,
},
)
- const result = await execute(args, opts).catch((err: unknown) => {
- log.error("Error executing tool", { error: err, tool: key })
- return {
- content: [
- {
- type: "text",
- text: `Failed to execute tool: ${err instanceof Error ? err.message : String(err)}`,
- },
- ],
- }
- })
+ const result = await execute(args, opts)
await Plugin.trigger(
"tool.execute.after",
@@ -809,7 +811,9 @@ export namespace SessionPrompt {
messageID: info.id,
sessionID: input.sessionID,
type: "file",
- url: `data:${part.mime};base64,` + Buffer.from(await file.bytes()).toString("base64"),
+ url:
+ `data:${part.mime};base64,` +
+ Buffer.from(await file.bytes()).toString("base64"),
mime: part.mime,
filename: part.filename!,
source: part.source,
@@ -883,7 +887,9 @@ export namespace SessionPrompt {
synthetic: true,
})
}
- const wasPlan = input.messages.some((msg) => msg.info.role === "assistant" && msg.info.mode === "plan")
+ const wasPlan = input.messages.some(
+ (msg) => msg.info.role === "assistant" && msg.info.mode === "plan",
+ )
if (wasPlan && input.agent.name === "build") {
userMessage.parts.push({
id: Identifier.ascending("part"),
@@ -963,7 +969,10 @@ export namespace SessionPrompt {
partFromToolCall(toolCallID: string) {
return toolcalls[toolCallID]
},
- async process(stream: StreamTextResult<Record<string, AITool>, never>, retries: { count: number; max: number }) {
+ async process(
+ stream: StreamTextResult<Record<string, AITool>, never>,
+ retries: { count: number; max: number },
+ ) {
log.info("process")
if (!assistantMsg) throw new Error("call next() first before processing")
let shouldRetry = false
@@ -1094,7 +1103,10 @@ export namespace SessionPrompt {
status: "error",
input: value.input,
error: (value.error as any).toString(),
- metadata: value.error instanceof Permission.RejectedError ? value.error.metadata : undefined,
+ metadata:
+ value.error instanceof Permission.RejectedError
+ ? value.error.metadata
+ : undefined,
time: {
start: match.state.time.start,
end: Date.now(),
@@ -1218,7 +1230,11 @@ export namespace SessionPrompt {
error: e,
})
const error = MessageV2.fromError(e, { providerID: input.providerID })
- if (retries.count < retries.max && MessageV2.APIError.isInstance(error) && error.data.isRetryable) {
+ if (
+ retries.count < retries.max &&
+ MessageV2.APIError.isInstance(error) &&
+ error.data.isRetryable
+ ) {
shouldRetry = true
await Session.updatePart({
id: Identifier.ascending("part"),
@@ -1241,7 +1257,11 @@ export namespace SessionPrompt {
}
const p = await Session.getParts(assistantMsg.id)
for (const part of p) {
- if (part.type === "tool" && part.state.status !== "completed" && part.state.status !== "error") {
+ if (
+ part.type === "tool" &&
+ part.state.status !== "completed" &&
+ part.state.status !== "error"
+ ) {
Session.updatePart({
...part,
state: {
@@ -1705,11 +1725,13 @@ export namespace SessionPrompt {
if (input.session.parentID) return
if (!Session.isDefaultTitle(input.session.title)) return
const isFirst =
- input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic))
- .length === 1
+ input.history.filter(
+ (m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic),
+ ).length === 1
if (!isFirst) return
const small =
- (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID))
+ (await Provider.getSmallModel(input.providerID)) ??
+ (await Provider.getModel(input.providerID, input.modelID))
const options = {
...ProviderTransform.options(small.providerID, small.modelID, input.session.id),
...small.info.options,