fix: add npm-global to PATH for codex CLI, clear typing after response

- Enrich spawned process PATH with ~/.npm-global/bin so codex CLI is
  findable when running under launchd
- Clear typing indicator in streaming callback after sending response,
  instead of waiting for runner process to fully exit
This commit is contained in:
Eyejoker
2026-03-10 21:46:36 +09:00
parent 46f560ed67
commit bbe8354bfd
2 changed files with 11 additions and 4 deletions

View File

@@ -133,12 +133,16 @@ function prepareGroupEnvironment(
delete cleanEnv.CLAUDECODE;
delete cleanEnv.CLAUDE_CODE_ENTRYPOINT;
// Ensure node is findable by SDK subprocess (cli.js uses #!/usr/bin/env node)
// Ensure node and npm-global binaries (codex, etc.) are findable
const nodeBin = path.dirname(process.execPath);
const npmGlobalBin = path.join(os.homedir(), '.npm-global', 'bin');
const currentPath = cleanEnv.PATH || '/usr/local/bin:/usr/bin:/bin';
const enrichedPath = currentPath.includes(nodeBin)
? currentPath
: `${nodeBin}:${currentPath}`;
const extraPaths = [nodeBin, npmGlobalBin].filter(
(p) => !currentPath.includes(p) && fs.existsSync(p),
);
const enrichedPath = extraPaths.length > 0
? `${extraPaths.join(':')}:${currentPath}`
: currentPath;
const env: Record<string, string> = {
...cleanEnv,

View File

@@ -257,6 +257,9 @@ async function processGroupMessages(chatJid: string): Promise<boolean> {
await channel.sendMessage(chatJid, text);
outputSentToUser = true;
}
// Clear typing indicator after sending a response — the runner may stay
// alive waiting for IPC messages, but the user shouldn't see "typing..."
await channel.setTyping?.(chatJid, false);
// Only reset idle timer on actual results, not session-update markers (result: null)
resetIdleTimer();
}