fix(quartz): send JVM PlatformLog output to stderr
On the JVM, Log.d / .i / .w / .e were printing through \`println()\` which lands on stdout. The amy CLI uses stdout as its JSON contract — any Marmot/MLS command would restore state, emit a burst of DEBUG lines, then emit the JSON object, and every caller piping through jq failed to parse because the first non-empty line was a log line. Switch to \`System.err.println\` inside PlatformLog.jvm.kt. Conventional for CLIs (data on stdout, diagnostics on stderr), and the desktop app already redirects as part of packaging. Callers who want everything mixed can still \`2>&1\` at the shell level. Fixes amy marmot group create / group add / message send etc. when their output is captured by a shell script. https://claude.ai/code/session_01M6dCKAF5Y1VyHGZPjzwDXq
This commit is contained in:
@@ -34,10 +34,14 @@ actual object PlatformLog {
|
|||||||
message: String,
|
message: String,
|
||||||
throwable: Throwable?,
|
throwable: Throwable?,
|
||||||
) {
|
) {
|
||||||
|
// Diagnostics go to stderr so callers that pipe stdout (the CLI uses
|
||||||
|
// stdout for its JSON contract, desktop apps may too) aren't corrupted
|
||||||
|
// by log interleaving. Consumers that prefer stdout can just redirect
|
||||||
|
// 2>&1 at the shell level.
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
println("${time()} $level: [$tag] $message. Throwable: ${throwable.message}")
|
System.err.println("${time()} $level: [$tag] $message. Throwable: ${throwable.message}")
|
||||||
} else {
|
} else {
|
||||||
println("${time()} $level: [$tag] $message")
|
System.err.println("${time()} $level: [$tag] $message")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user