Skip to content

Commit bb38e58

Browse files
giodl73-repoCopilot
authored andcommitted
fix(doctor): anchor WhatsApp TUI process matching
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 44c6ad7 commit bb38e58

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

src/commands/doctor-whatsapp-responsiveness.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,17 @@ describe("doctor WhatsApp responsiveness", () => {
2929
" 102 /usr/bin/node /usr/lib/node_modules/openclaw/dist/index.js gateway --port 18789",
3030
" 103 openclaw channels",
3131
" 104 openclaw tui --local",
32+
" 105 /usr/bin/openclaw chat",
33+
" 106 helper --note 'openclaw tui'",
34+
" 107 openclaw-helper openclaw terminal",
35+
" 108 openclaw --flag tui",
3236
].join("\n"),
3337
});
3438

3539
expect(listLocalTuiProcesses()).toEqual([
3640
{ pid: 101, command: "openclaw-tui" },
3741
{ pid: 104, command: "openclaw tui --local" },
42+
{ pid: 105, command: "/usr/bin/openclaw chat" },
3843
]);
3944
});
4045

src/commands/doctor-whatsapp-responsiveness.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { spawnSync } from "node:child_process";
2+
import path from "node:path";
23
import { formatCliCommand } from "../cli/command-format.js";
34
import type { OpenClawConfig } from "../config/types.openclaw.js";
45
import { note } from "../terminal/note.js";
@@ -15,8 +16,24 @@ type ProcessController = {
1516
kill: (pid: number, signal: ProcessSignal | 0) => boolean;
1617
};
1718

18-
const LOCAL_TUI_CMD_RE =
19-
/(?:^|\s)(?:openclaw-tui|openclaw\s+tui|openclaw\s+chat|openclaw\s+terminal)(?:\s|$)/;
19+
const LOCAL_TUI_SUBCOMMANDS = new Set(["chat", "terminal", "tui"]);
20+
21+
function tokenizeCommandLine(command: string): string[] {
22+
return command.trim().split(/\s+/u).filter(Boolean);
23+
}
24+
25+
function normalizeExecutableName(value: string | undefined): string {
26+
return path.basename(value ?? "").replace(/\.exe$/iu, "");
27+
}
28+
29+
function isLocalTuiCommand(command: string): boolean {
30+
const argv = tokenizeCommandLine(command);
31+
const executable = normalizeExecutableName(argv[0]);
32+
if (executable === "openclaw-tui") {
33+
return true;
34+
}
35+
return executable === "openclaw" && LOCAL_TUI_SUBCOMMANDS.has(argv[1] ?? "");
36+
}
2037

2138
function parsePsPidLine(line: string): LocalTuiProcess | null {
2239
const match = line.match(/^\s*(\d+)\s+(.+)$/);
@@ -28,7 +45,7 @@ function parsePsPidLine(line: string): LocalTuiProcess | null {
2845
return null;
2946
}
3047
const command = match[2]?.trim() ?? "";
31-
if (!LOCAL_TUI_CMD_RE.test(command)) {
48+
if (!isLocalTuiCommand(command)) {
3249
return null;
3350
}
3451
return { pid, command };

0 commit comments

Comments
 (0)