From 08400299821668658821acda58eaabe9a43a30c5 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 24 Jan 2026 02:05:31 +0000 Subject: [PATCH] fix: stabilize embedded runner queueing --- CHANGELOG.md | 2 ++ src/agents/pi-embedded-runner/run.ts | 4 +++- src/daemon/service-env.ts | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87df0eb66..6943a165c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ Docs: https://docs.clawd.bot - CLI: explain when auth profiles are excluded by auth.order in probe details. - CLI: drop the em dash when the banner tagline wraps to a second line. - CLI: inline auth probe errors in status rows to reduce wrapping. +- Agents: honor enqueue overrides for embedded runs to avoid queue deadlocks in tests. +- Daemon: use platform PATH delimiters when building minimal service paths. - Linux: include env-configured user bin roots in systemd PATH and align PATH audits. (#1512) Thanks @robbyczgw-cla. - TUI: render Gateway slash-command replies as system output (for example, `/context`). - Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla. diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index d0ff32d3f..49c5dc6e0 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -71,6 +71,8 @@ export async function runEmbeddedPiAgent( const globalLane = resolveGlobalLane(params.lane); const enqueueGlobal = params.enqueue ?? ((task, opts) => enqueueCommandInLane(globalLane, task, opts)); + const enqueueSession = + params.enqueue ?? ((task, opts) => enqueueCommandInLane(sessionLane, task, opts)); const channelHint = params.messageChannel ?? params.messageProvider; const resolvedToolResultFormat = params.toolResultFormat ?? @@ -81,7 +83,7 @@ export async function runEmbeddedPiAgent( : "markdown"); const isProbeSession = params.sessionId?.startsWith("probe-") ?? false; - return enqueueCommandInLane(sessionLane, () => + return enqueueSession(() => enqueueGlobal(async () => { const started = Date.now(); const resolvedWorkspace = resolveUserPath(params.workspaceDir); diff --git a/src/daemon/service-env.ts b/src/daemon/service-env.ts index 8c447c273..1f1813d79 100644 --- a/src/daemon/service-env.ts +++ b/src/daemon/service-env.ts @@ -121,7 +121,8 @@ export function buildMinimalServicePath(options: BuildServicePathOptions = {}): return env.PATH ?? ""; } - return getMinimalServicePathPartsFromEnv({ ...options, env }).join(path.delimiter); + const delimiter = platform === "win32" ? path.win32.delimiter : path.posix.delimiter; + return getMinimalServicePathPartsFromEnv({ ...options, env }).join(delimiter); } export function buildServiceEnvironment(params: {