diff --git a/src/gateway/ws-log.test.ts b/src/gateway/ws-log.test.ts index 037ccf782..5a748c38e 100644 --- a/src/gateway/ws-log.test.ts +++ b/src/gateway/ws-log.test.ts @@ -29,12 +29,15 @@ describe("gateway ws log helpers", () => { test("summarizeAgentEventForWsLog extracts useful fields", () => { const summary = summarizeAgentEventForWsLog({ runId: "12345678-1234-1234-1234-123456789abc", + sessionKey: "agent:main:main", stream: "assistant", seq: 2, data: { text: "hello world", mediaUrls: ["a", "b"] }, }); expect(summary).toMatchObject({ + agent: "main", run: "12345678…9abc", + session: "main", stream: "assistant", aseq: 2, text: "hello world", diff --git a/src/gateway/ws-log.ts b/src/gateway/ws-log.ts index b95632614..27f86c61a 100644 --- a/src/gateway/ws-log.ts +++ b/src/gateway/ws-log.ts @@ -1,5 +1,6 @@ import chalk from "chalk"; import { isVerbose } from "../globals.js"; +import { parseAgentSessionKey } from "../routing/session-key.js"; import { createSubsystemLogger, shouldLogSubsystemToConsole } from "../logging.js"; import { getDefaultRedactPatterns, redactSensitiveText } from "../logging/redact.js"; import { DEFAULT_WS_SLOW_MS, getGatewayWsLogStyle } from "./ws-logging.js"; @@ -88,11 +89,21 @@ export function summarizeAgentEventForWsLog(payload: unknown): Record) : undefined; const extra: Record = {}; if (runId) extra.run = shortId(runId); + if (sessionKey) { + const parsed = parseAgentSessionKey(sessionKey); + if (parsed) { + extra.agent = parsed.agentId; + extra.session = parsed.rest; + } else { + extra.session = sessionKey; + } + } if (stream) extra.stream = stream; if (seq !== undefined) extra.aseq = seq; diff --git a/src/infra/agent-events.ts b/src/infra/agent-events.ts index 08f44a09e..c11dff8ab 100644 --- a/src/infra/agent-events.ts +++ b/src/infra/agent-events.ts @@ -51,8 +51,14 @@ export function resetAgentRunContextForTest() { export function emitAgentEvent(event: Omit) { const nextSeq = (seqByRun.get(event.runId) ?? 0) + 1; seqByRun.set(event.runId, nextSeq); + const context = runContextById.get(event.runId); + const sessionKey = + typeof event.sessionKey === "string" && event.sessionKey.trim() + ? event.sessionKey + : context?.sessionKey; const enriched: AgentEventPayload = { ...event, + sessionKey, seq: nextSeq, ts: Date.now(), }; diff --git a/src/logging/subsystem.ts b/src/logging/subsystem.ts index c709b3913..578b0ac1c 100644 --- a/src/logging/subsystem.ts +++ b/src/logging/subsystem.ts @@ -148,7 +148,15 @@ function formatConsoleLine(opts: { ? color.gray : color.cyan; const displayMessage = stripRedundantSubsystemPrefixForConsole(opts.message, displaySubsystem); - const time = opts.style === "pretty" ? color.gray(new Date().toISOString().slice(11, 19)) : ""; + const time = (() => { + if (opts.style === "pretty") { + return color.gray(new Date().toISOString().slice(11, 19)); + } + if (loggingState.consoleTimestampPrefix) { + return color.gray(new Date().toISOString()); + } + return ""; + })(); const prefixToken = prefixColor(prefix); const head = [time, prefixToken].filter(Boolean).join(" "); return `${head} ${levelColor(displayMessage)}`; diff --git a/src/macos/gateway-daemon.ts b/src/macos/gateway-daemon.ts index 606c33954..44a2c7a39 100644 --- a/src/macos/gateway-daemon.ts +++ b/src/macos/gateway-daemon.ts @@ -46,14 +46,18 @@ async function main() { { setGatewayWsLogStyle }, { setVerbose }, { defaultRuntime }, + { enableConsoleCapture, setConsoleTimestampPrefix }, ] = await Promise.all([ import("../config/config.js"), import("../gateway/server.js"), import("../gateway/ws-logging.js"), import("../globals.js"), import("../runtime.js"), + import("../logging.js"), ]); + enableConsoleCapture(); + setConsoleTimestampPrefix(true); setVerbose(hasFlag(args, "--verbose")); const wsLogRaw = (hasFlag(args, "--compact") ? "compact" : argValue(args, "--ws-log")) as