diff --git a/src/daemon/program-args.ts b/src/daemon/program-args.ts index 080398b47..56891f5b2 100644 --- a/src/daemon/program-args.ts +++ b/src/daemon/program-args.ts @@ -68,6 +68,20 @@ async function resolveRealpathSafe(inputPath: string): Promise { } } +/** + * Derive working directory from a dist entrypoint path. + * E.g., /path/to/moltbot/dist/entry.js -> /path/to/moltbot + */ +function resolveWorkingDirectoryFromEntrypoint(entrypointPath: string): string | undefined { + const dir = path.dirname(entrypointPath); + const parts = dir.split(path.sep); + const distIndex = parts.lastIndexOf("dist"); + if (distIndex > 0) { + return parts.slice(0, distIndex).join(path.sep); + } + return undefined; +} + function buildDistCandidates(...inputs: string[]): string[] { const candidates: string[] = []; const seen = new Set(); @@ -167,6 +181,7 @@ async function resolveCliProgramArguments(params: { const cliEntrypointPath = await resolveCliEntrypointPathForService(); return { programArguments: [nodePath, cliEntrypointPath, ...params.args], + workingDirectory: resolveWorkingDirectoryFromEntrypoint(cliEntrypointPath), }; } @@ -186,6 +201,7 @@ async function resolveCliProgramArguments(params: { const cliEntrypointPath = await resolveCliEntrypointPathForService(); return { programArguments: [bunPath, cliEntrypointPath, ...params.args], + workingDirectory: resolveWorkingDirectoryFromEntrypoint(cliEntrypointPath), }; } @@ -194,6 +210,7 @@ async function resolveCliProgramArguments(params: { const cliEntrypointPath = await resolveCliEntrypointPathForService(); return { programArguments: [execPath, cliEntrypointPath, ...params.args], + workingDirectory: resolveWorkingDirectoryFromEntrypoint(cliEntrypointPath), }; } catch (error) { // If running under bun or another runtime that can execute TS directly