diff --git a/apps/memos-local-plugin/bridge.cts b/apps/memos-local-plugin/bridge.cts index acc1ccb29..9a2373e57 100644 --- a/apps/memos-local-plugin/bridge.cts +++ b/apps/memos-local-plugin/bridge.cts @@ -29,6 +29,8 @@ const path = require("node:path") as typeof import("node:path"); // eslint-disable-next-line @typescript-eslint/no-require-imports const fs = require("node:fs") as typeof import("node:fs"); // eslint-disable-next-line @typescript-eslint/no-require-imports +const { homedir } = require("node:os") as typeof import("node:os"); +// eslint-disable-next-line @typescript-eslint/no-require-imports const childProcess = require("node:child_process") as typeof import("node:child_process"); // eslint-disable-next-line @typescript-eslint/no-require-imports const url = require("node:url") as typeof import("node:url"); @@ -95,7 +97,7 @@ const STDIO_PID_FILENAME = "bridge-stdio.pid"; function pidFilePath(agent: string, filename: string = PID_FILENAME): string { const agentHome = agent === "hermes" ? ".hermes" : ".openclaw"; return path.join( - process.env.HOME ?? "/tmp", + homedir(), agentHome, "memos-plugin", "daemon", diff --git a/apps/memos-local-plugin/bridge.mts b/apps/memos-local-plugin/bridge.mts index 2d967c597..217c8b904 100644 --- a/apps/memos-local-plugin/bridge.mts +++ b/apps/memos-local-plugin/bridge.mts @@ -30,6 +30,7 @@ */ import * as childProcess from "node:child_process"; import * as fs from "node:fs"; +import { homedir } from "node:os"; import * as path from "node:path"; import { fileURLToPath } from "node:url"; @@ -81,7 +82,7 @@ const PID_FILENAME = "bridge.pid"; function pidFilePath(agent: string): string { const agentHome = agent === "hermes" ? ".hermes" : ".openclaw"; return path.join( - process.env.HOME ?? "/tmp", + homedir(), agentHome, "memos-plugin", "daemon", diff --git a/apps/memos-local-plugin/tests/unit/bridge/pid-file-path.test.ts b/apps/memos-local-plugin/tests/unit/bridge/pid-file-path.test.ts new file mode 100644 index 000000000..4224ba067 --- /dev/null +++ b/apps/memos-local-plugin/tests/unit/bridge/pid-file-path.test.ts @@ -0,0 +1,21 @@ +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; + +import { describe, expect, it } from "vitest"; + +describe("bridge PID file path", () => { + for (const entry of ["bridge.cts", "bridge.mts"]) { + it(`${entry} resolves the PID directory from the OS home`, () => { + const source = readFileSync(resolve(entry), "utf8"); + const start = source.indexOf("function pidFilePath"); + const end = source.indexOf("function readPidFile", start); + + expect(start, `${entry}: pidFilePath() not found`).toBeGreaterThanOrEqual(0); + expect(end, `${entry}: readPidFile() not found`).toBeGreaterThan(start); + + const pidFilePathSource = source.slice(start, end); + expect(pidFilePathSource).toMatch(/\bhomedir\(\)/); + expect(pidFilePathSource).not.toMatch(/process\.env\.HOME|["']\/tmp["']/); + }); + } +});