Summary
The embedded Pi orchestrator (OpenClaw's in-process LLM runner) was gutted but its call sites remain with undefined-returning stubs. These stubs silently no-op code paths that should either be removed or replaced with RemoteClaw's CLI runtime equivalents.
Production stubs (10 across 6 files)
src/auto-reply/reply/agent-runner.ts
- Line 7 —
queueEmbeddedPiMessage stub (always returns false)
- Line 221 — call site:
queueEmbeddedPiMessage(...) — dead steering logic (stub returns falsy, so steered is always false)
src/auto-reply/reply/get-reply-run.ts
- Line 5 —
abortEmbeddedPiRun stub (always returns false)
- Line 6 —
isEmbeddedPiRunActive stub (always returns false)
- Line 7 —
isEmbeddedPiRunStreaming stub (always returns false)
- Line 8 —
resolveEmbeddedSessionLane stub (formats a session lane key)
- Lines 441–450 — call sites:
abortEmbeddedPiRun, isEmbeddedPiRunActive, isEmbeddedPiRunStreaming, resolveEmbeddedSessionLane
src/agents/tools/subagents-tool.ts
- Line 30 —
abortEmbeddedPiRun stub (returns undefined)
- Line 250 — call site:
abortEmbeddedPiRun(sessionId)
- Line 617 — call site:
abortEmbeddedPiRun(sessionId)
src/auto-reply/reply/commands-session.ts
- Line 21 —
handleAbortTrigger stub (async no-op)
- Line 23 —
handleStopCommand stub (async no-op)
- Line 474 — exports:
handleAbortTrigger, handleStopCommand
src/gateway/server-reload-handlers.ts
- Line 2 —
getActiveEmbeddedRunCount stub (always returns 0)
- Line 167 — call site:
getActiveEmbeddedRunCount()
src/gateway/server.impl.ts
- Line 4 —
getActiveEmbeddedRunCount stub (always returns 0)
- Line 434 — call site:
getActiveEmbeddedRunCount()
src/auto-reply/reply/queue/cleanup.ts
- Line 2 —
resolveEmbeddedSessionLane stub (duplicate of the one in get-reply-run.ts)
- Line 28 — call site:
resolveEmbeddedSessionLane(cleaned)
Config schema entries (4 files)
src/config/types.agent-defaults.ts:182 — embeddedPi? type field
src/config/zod-schema.agent-defaults.ts:116 — embeddedPi Zod schema
src/config/schema.help.ts:954–956 — help text for agents.defaults.embeddedPi and agents.defaults.embeddedPi.projectSettingsPolicy
src/config/schema.labels.ts:430–431 — labels for agents.defaults.embeddedPi and agents.defaults.embeddedPi.projectSettingsPolicy
Test files (8 files with embeddedPi mocks)
src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts — runEmbeddedPiAgentMock (41 references)
src/auto-reply/reply.directive.directive-behavior.e2e-harness.ts — runEmbeddedPiAgent mock export
src/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.test.ts — runEmbeddedPiAgent assertions
src/auto-reply/reply.triggers.trigger-handling.targets-active-session-native-stop.e2e.test.ts — getCompactEmbeddedPiSessionMock, getAbortEmbeddedPiRunMock, runEmbeddedPiAgentMock (26 references)
src/auto-reply/reply.heartbeat-typing.test.ts — runEmbeddedPiAgentMock import and usage
src/agents/subagent-announce.format.e2e.test.ts — isEmbeddedPiRunActive, isEmbeddedPiRunStreaming, queueEmbeddedPiMessage, waitForEmbeddedPiRunEnd mocks (46 references)
src/cron/isolated-agent/run.test-harness.ts — runEmbeddedPiAgentMock (3 references)
extensions/test-utils/plugin-runtime-mock.ts — runEmbeddedPiAgent: noopAsync
What to do
Remove each stub and its surrounding call site. The queueEmbeddedPiMessage call in agent-runner.ts:221 is a dead code block (stub returns false, so steered is always falsy). The abort/stop stubs disable those commands entirely. The getActiveEmbeddedRunCount stubs always return 0, making them no-ops in the busy-wait and drain logic. Clean up config schema entries and rename test mocks to reflect the CLI runtime bridge.
Files NOT in scope (verified: zero embeddedPi references)
src/auto-reply/reply/abort.ts — no embeddedPi refs
src/gateway/server-methods/sessions.ts — no embeddedPi refs
Acceptance Criteria
grep -ri "embeddedPi" src/ extensions/ returns zero matches
pnpm check passes
Summary
The embedded Pi orchestrator (OpenClaw's in-process LLM runner) was gutted but its call sites remain with
undefined-returning stubs. These stubs silently no-op code paths that should either be removed or replaced with RemoteClaw's CLI runtime equivalents.Production stubs (10 across 6 files)
src/auto-reply/reply/agent-runner.tsqueueEmbeddedPiMessagestub (always returnsfalse)queueEmbeddedPiMessage(...)— dead steering logic (stub returns falsy, sosteeredis alwaysfalse)src/auto-reply/reply/get-reply-run.tsabortEmbeddedPiRunstub (always returnsfalse)isEmbeddedPiRunActivestub (always returnsfalse)isEmbeddedPiRunStreamingstub (always returnsfalse)resolveEmbeddedSessionLanestub (formats a session lane key)abortEmbeddedPiRun,isEmbeddedPiRunActive,isEmbeddedPiRunStreaming,resolveEmbeddedSessionLanesrc/agents/tools/subagents-tool.tsabortEmbeddedPiRunstub (returnsundefined)abortEmbeddedPiRun(sessionId)abortEmbeddedPiRun(sessionId)src/auto-reply/reply/commands-session.tshandleAbortTriggerstub (async no-op)handleStopCommandstub (async no-op)handleAbortTrigger,handleStopCommandsrc/gateway/server-reload-handlers.tsgetActiveEmbeddedRunCountstub (always returns0)getActiveEmbeddedRunCount()src/gateway/server.impl.tsgetActiveEmbeddedRunCountstub (always returns0)getActiveEmbeddedRunCount()src/auto-reply/reply/queue/cleanup.tsresolveEmbeddedSessionLanestub (duplicate of the one in get-reply-run.ts)resolveEmbeddedSessionLane(cleaned)Config schema entries (4 files)
src/config/types.agent-defaults.ts:182—embeddedPi?type fieldsrc/config/zod-schema.agent-defaults.ts:116—embeddedPiZod schemasrc/config/schema.help.ts:954–956— help text foragents.defaults.embeddedPiandagents.defaults.embeddedPi.projectSettingsPolicysrc/config/schema.labels.ts:430–431— labels foragents.defaults.embeddedPiandagents.defaults.embeddedPi.projectSettingsPolicyTest files (8 files with embeddedPi mocks)
src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts—runEmbeddedPiAgentMock(41 references)src/auto-reply/reply.directive.directive-behavior.e2e-harness.ts—runEmbeddedPiAgentmock exportsrc/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.test.ts—runEmbeddedPiAgentassertionssrc/auto-reply/reply.triggers.trigger-handling.targets-active-session-native-stop.e2e.test.ts—getCompactEmbeddedPiSessionMock,getAbortEmbeddedPiRunMock,runEmbeddedPiAgentMock(26 references)src/auto-reply/reply.heartbeat-typing.test.ts—runEmbeddedPiAgentMockimport and usagesrc/agents/subagent-announce.format.e2e.test.ts—isEmbeddedPiRunActive,isEmbeddedPiRunStreaming,queueEmbeddedPiMessage,waitForEmbeddedPiRunEndmocks (46 references)src/cron/isolated-agent/run.test-harness.ts—runEmbeddedPiAgentMock(3 references)extensions/test-utils/plugin-runtime-mock.ts—runEmbeddedPiAgent: noopAsyncWhat to do
Remove each stub and its surrounding call site. The
queueEmbeddedPiMessagecall in agent-runner.ts:221 is a dead code block (stub returnsfalse, sosteeredis always falsy). The abort/stop stubs disable those commands entirely. ThegetActiveEmbeddedRunCountstubs always return0, making them no-ops in the busy-wait and drain logic. Clean up config schema entries and rename test mocks to reflect the CLI runtime bridge.Files NOT in scope (verified: zero embeddedPi references)
— no embeddedPi refssrc/auto-reply/reply/abort.ts— no embeddedPi refssrc/gateway/server-methods/sessions.tsAcceptance Criteria
grep -ri "embeddedPi" src/ extensions/returns zero matchespnpm checkpasses