summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorYihui Khuu <[email protected]>2025-07-24 10:29:59 +1000
committerGitHub <[email protected]>2025-07-23 20:29:59 -0400
commit507c975e929d1d8bd58ae26e7bbcf9537daaf5b6 (patch)
tree5aca2acf9b8714b996cfc563575c5a165c1bc16e /packages
parent3e69d5276b3c08f4f890e2c13a0b14d18a692d08 (diff)
downloadopencode-507c975e929d1d8bd58ae26e7bbcf9537daaf5b6.tar.gz
opencode-507c975e929d1d8bd58ae26e7bbcf9537daaf5b6.zip
feat: pass mode into task tool (#1248)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/session/index.ts7
-rw-r--r--packages/opencode/src/session/message-v2.ts2
-rw-r--r--packages/opencode/src/storage/storage.ts16
-rw-r--r--packages/opencode/src/tool/task.ts1
4 files changed, 24 insertions, 2 deletions
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 5f090137a..e4252b10e 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -370,6 +370,7 @@ export namespace Session {
const l = log.clone().tag("session", input.sessionID)
l.info("chatting")
+ const inputMode = input.mode ?? "build"
const userMsg: MessageV2.Info = {
id: input.messageID ?? Identifier.ascending("message"),
role: "user",
@@ -494,7 +495,7 @@ export namespace Session {
]
}),
).then((x) => x.flat())
- if (input.mode === "plan")
+ if (inputMode === "plan")
userParts.push({
id: Identifier.ascending("part"),
messageID: userMsg.id,
@@ -617,7 +618,7 @@ export namespace Session {
.catch(() => {})
}
- const mode = await Mode.get(input.mode ?? "build")
+ const mode = await Mode.get(inputMode)
let system = input.providerID === "anthropic" ? [PROMPT_ANTHROPIC_SPOOF.trim()] : []
system.push(...(mode.prompt ? [mode.prompt] : SystemPrompt.provider(input.modelID)))
system.push(...(await SystemPrompt.environment()))
@@ -630,6 +631,7 @@ export namespace Session {
id: Identifier.ascending("message"),
role: "assistant",
system,
+ mode: inputMode,
path: {
cwd: app.path.cwd,
root: app.path.root,
@@ -1122,6 +1124,7 @@ export namespace Session {
role: "assistant",
sessionID: input.sessionID,
system,
+ mode: "build",
path: {
cwd: app.path.cwd,
root: app.path.root,
diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts
index 31afdc73e..ebc7483dc 100644
--- a/packages/opencode/src/session/message-v2.ts
+++ b/packages/opencode/src/session/message-v2.ts
@@ -226,6 +226,7 @@ export namespace MessageV2 {
system: z.string().array(),
modelID: z.string(),
providerID: z.string(),
+ mode: z.string(),
path: z.object({
cwd: z.string(),
root: z.string(),
@@ -290,6 +291,7 @@ export namespace MessageV2 {
modelID: v1.metadata.assistant!.modelID,
providerID: v1.metadata.assistant!.providerID,
system: v1.metadata.assistant!.system,
+ mode: "build",
error: v1.metadata.error,
}
const parts = v1.parts.flatMap((part): Part[] => {
diff --git a/packages/opencode/src/storage/storage.ts b/packages/opencode/src/storage/storage.ts
index 97efcef7c..f4efbfdfe 100644
--- a/packages/opencode/src/storage/storage.ts
+++ b/packages/opencode/src/storage/storage.ts
@@ -72,6 +72,22 @@ export namespace Storage {
} catch (e) {}
}
},
+ async (dir: string) => {
+ const files = new Bun.Glob("session/message/*/*.json").scanSync({
+ cwd: dir,
+ absolute: true,
+ })
+ for (const file of files) {
+ try {
+ const content = await Bun.file(file).json()
+ if (content.role === "assistant" && !content.mode) {
+ log.info("adding mode field to message", { file })
+ content.mode = "build"
+ await Bun.write(file, JSON.stringify(content, null, 2))
+ }
+ } catch (e) {}
+ }
+ },
]
const state = App.state("storage", async () => {
diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts
index 02f7a8f42..75ad48d40 100644
--- a/packages/opencode/src/tool/task.ts
+++ b/packages/opencode/src/tool/task.ts
@@ -41,6 +41,7 @@ export const TaskTool = Tool.define({
sessionID: session.id,
modelID: msg.modelID,
providerID: msg.providerID,
+ mode: msg.mode,
tools: {
todoread: false,
todowrite: false,