Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

macOS: setStableProcessTitle() runs every 5 s → one LaunchServices check-in per session every 5 s (launchservicesd CPU)

Ouverte Adaptée aux débutants
#1,000 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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: launchservicesd was the #1 CPU consumer of the machine:
    353 % average, 433 % p95
    (≈3.5 cores); 84 of 87 registering 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 % launchservicesd CPU
    (≈12–15 % of a core per session, ≈0.7 s of launchservicesd CPU 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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de CommandCodeAI/command-code

Toutes les issues de CommandCodeAI/command-code

Issues similaires

Plus d'issues CLI

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.