summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-11-05 18:35:59 -0500
committerDax Raad <[email protected]>2025-11-05 18:36:06 -0500
commit2a9b6a85dee84d974c3808488b5b4ea3eb93abed (patch)
tree48866d9b2b48d20ce3ccf6e01a5b9fc6b055b306
parentc9ae89a38b3330456c1349c40b757248eba00c43 (diff)
downloadopencode-2a9b6a85dee84d974c3808488b5b4ea3eb93abed.tar.gz
opencode-2a9b6a85dee84d974c3808488b5b4ea3eb93abed.zip
core: ensure export command output can be piped without UI interference
-rw-r--r--packages/opencode/src/cli/cmd/export.ts18
-rw-r--r--packages/opencode/src/util/log.ts21
2 files changed, 28 insertions, 11 deletions
diff --git a/packages/opencode/src/cli/cmd/export.ts b/packages/opencode/src/cli/cmd/export.ts
index 82952f1f6..4e040abd1 100644
--- a/packages/opencode/src/cli/cmd/export.ts
+++ b/packages/opencode/src/cli/cmd/export.ts
@@ -18,10 +18,13 @@ export const ExportCommand = cmd({
handler: async (args) => {
await bootstrap(process.cwd(), async () => {
let sessionID = args.sessionID
+ process.stderr.write(`Exporting session: ${sessionID ?? "latest"}`)
if (!sessionID) {
UI.empty()
- prompts.intro("Export session")
+ prompts.intro("Export session", {
+ output: process.stderr,
+ })
const sessions = []
for await (const session of Session.list()) {
@@ -29,8 +32,12 @@ export const ExportCommand = cmd({
}
if (sessions.length === 0) {
- prompts.log.error("No sessions found")
- prompts.outro("Done")
+ prompts.log.error("No sessions found", {
+ output: process.stderr,
+ })
+ prompts.outro("Done", {
+ output: process.stderr,
+ })
return
}
@@ -44,6 +51,7 @@ export const ExportCommand = cmd({
value: session.id,
hint: `${new Date(session.time.updated).toLocaleString()} • ${session.id.slice(-8)}`,
})),
+ output: process.stderr,
})
if (prompts.isCancel(selectedSession)) {
@@ -52,7 +60,9 @@ export const ExportCommand = cmd({
sessionID = selectedSession as string
- prompts.outro("Exporting session...")
+ prompts.outro("Exporting session...", {
+ output: process.stderr,
+ })
}
try {
diff --git a/packages/opencode/src/util/log.ts b/packages/opencode/src/util/log.ts
index 463069562..6b31952fe 100644
--- a/packages/opencode/src/util/log.ts
+++ b/packages/opencode/src/util/log.ts
@@ -4,7 +4,9 @@ import { Global } from "../global"
import z from "zod"
export namespace Log {
- export const Level = z.enum(["DEBUG", "INFO", "WARN", "ERROR"]).meta({ ref: "LogLevel", description: "Log level" })
+ export const Level = z
+ .enum(["DEBUG", "INFO", "WARN", "ERROR"])
+ .meta({ ref: "LogLevel", description: "Log level" })
export type Level = z.infer<typeof Level>
const levelPriority: Record<Level, number> = {
@@ -50,6 +52,7 @@ export namespace Log {
export function file() {
return logpath
}
+ let write: (msg: string) => void
export async function init(options: Options) {
if (options.level) level = options.level
@@ -62,7 +65,7 @@ export namespace Log {
const logfile = Bun.file(logpath)
await fs.truncate(logpath).catch(() => {})
const writer = logfile.writer()
- process.stderr.write = (msg) => {
+ write = (msg) => {
writer.write(msg)
writer.flush()
return true
@@ -118,27 +121,31 @@ export namespace Log {
const next = new Date()
const diff = next.getTime() - last
last = next.getTime()
- return [next.toISOString().split(".")[0], "+" + diff + "ms", prefix, message].filter(Boolean).join(" ") + "\n"
+ return (
+ [next.toISOString().split(".")[0], "+" + diff + "ms", prefix, message]
+ .filter(Boolean)
+ .join(" ") + "\n"
+ )
}
const result: Logger = {
debug(message?: any, extra?: Record<string, any>) {
if (shouldLog("DEBUG")) {
- process.stderr.write("DEBUG " + build(message, extra))
+ write("DEBUG " + build(message, extra))
}
},
info(message?: any, extra?: Record<string, any>) {
if (shouldLog("INFO")) {
- process.stderr.write("INFO " + build(message, extra))
+ write("INFO " + build(message, extra))
}
},
error(message?: any, extra?: Record<string, any>) {
if (shouldLog("ERROR")) {
- process.stderr.write("ERROR " + build(message, extra))
+ write("ERROR " + build(message, extra))
}
},
warn(message?: any, extra?: Record<string, any>) {
if (shouldLog("WARN")) {
- process.stderr.write("WARN " + build(message, extra))
+ write("WARN " + build(message, extra))
}
},
tag(key: string, value: string) {