macOS: setStableProcessTitle() runs every 5 s → one LaunchServices check-in per session every 5 s (launchservicesd CPU)
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 74/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- javascript, macos, node.js
- Domaine
- cli, performance
Piste de recherche
Lisez le code de writeTitle() et setStableProcessTitle() présenté dans l’issue, puis repérez où useTerminalTitle planifie reassertTerminalTitle(). Vérifiez la reproduction minimale avec Node sur macOS pour confirmer que les affectations répétées déclenchent des check-ins. Le travail est terminé lorsque le titre du terminal peut toujours être réaffirmé toutes les 5 secondes sans affectations répétées du titre du processus, et que la reproduction ne montre aucun check-in récurrent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
Since the fix for #764 (v1.50.1), the process title is stable (command-code) — thanks.
But writeTitle() calls setStableProcessTitle() on every call, and
useTerminalTitle re-asserts the terminal title every 5 s:
function setStableProcessTitle(){process.title="command-code"}
function writeTitle(e){setStableProcessTitle(),process.stderr.isTTY&&process.stderr.write(SN(e))}
function reassertTerminalTitle(){null!==wN&&writeTitle(wN)}
// useTerminalTitle:
const e=setInterval(reassertTerminalTitle,5e3)
On macOS, every process.title assignment goes through libuv's darwin
proctitle code, which checks the process in with LaunchServices. lsd logs
pid N registering self and the check-in is rejected with -10811
(kLSNotAnApplicationErr), but launchservicesd still does the work (code
signature validation) each time. So every interactive session costs one
LaunchServices check-in every 5 s, forever, idle or not, even though the
value never changes.
Impact (measured)
macOS 26.6 (25G72), Apple Silicon (M5 Max, 18 cores), Node v24.21.0 arm64,
Command Code 1.79.1, ~20–30 interactive sessions open in a terminal multiplexer:
- 12 check-ins / min per session, constant (10-min idle window: 119–120 per session).
- 45-min audit:
launchservicesdwas the #1 CPU consumer of the machine:
353 % average, 433 % p95 (≈3.5 cores); 84 of 87registering self
events per probe window came from Command Code processes. - Controlled experiment with throw-away sessions (
--no-session, no prompt sent):
baseline 257 % → +4 sessions 316 % → +8 sessions 362 %launchservicesdCPU
(≈12–15 % of a core per session, ≈0.7 s oflaunchservicesdCPU per check-in).
Those throw-away sessions ran Node x86_64 under Rosetta; arm64 sessions show
the same 12 / min cadence.
Minimal repro (no Command Code needed)
node -e 'setInterval(()=>{process.title="command-code"},5000)' & A=$! # rewrite every 5 s
node -e 'process.title="command-code"; setInterval(()=>{},5000)' & B=$! # write once
sleep 42
log show --last 40s --style compact \
--predicate 'process == "lsd" AND eventMessage CONTAINS "registering self"' > lsd.txt
grep -c "pid $A registering self" lsd.txt # → 8
grep -c "pid $B registering self" lsd.txt # → 0
kill $A $B
With Command Code itself: start one session in a terminal, then
log stream --predicate 'process == "lsd" AND eventMessage CONTAINS "registering self"'
shows its pid every 5.000 s.
Suggested fix
Only write the process title when it changes, e.g.
function setStableProcessTitle(){ if (process.title !== "command-code") process.title = "command-code" }
or call it once at startup instead of inside writeTitle(). The OSC terminal
title write can stay on the 5 s interval — it does not touch LaunchServices.
Local workaround (until a release)
A user mod in ~/.commandcode/mods/ that performs the native write once and
then backs process.title with a plain JS property removes the check-ins
(same loop: 8 → 0 per 40 s; ps still shows command-code). It only takes
effect after a session's first message (mods load with the harness).
- Langage dominant
- Aucune donnée de langage
- Étoiles
- 4.1k
- Forks
- 363
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de CommandCodeAI/command-code
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
CommandCodeAI/command-code#992 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
CommandCodeAI/command-code#933 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
CommandCodeAI/command-code#855 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CommandCodeAI/command-code#841 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
CommandCodeAI/command-code#655 · 1 commentaire ·
Toutes les issues de CommandCodeAI/command-code
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
[Linux] --calibrate combined with --model silently falls through to plain re-setup (setup.py:4958)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
apache/rocketmq-dashboard#6318 ·
Les mainteneurs répondent en général sous 5 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
vllm-project/speculators#1223 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
lundybernard/battodo#105 ·
Les mainteneurs répondent en général sous 2 jours