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

[Bug]: bare /loopx renders the whole command-pack preview as a persistent widget — TUI truncates it and it covers the working indicator

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

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
typescript

Piste de recherche

Le widget est défini dans inspectLoopx() dans loopx/pi_goal_mode/loopx-goal.ts, qui appelle ctx.ui.setWidget("loopx", ...) avec packet.message brut tronqué à 24 lignes. Lis docs/tui.md pour setWidget et le placement, puis remplace le texte brut par un résumé de trois lignes construit à partir de goal_id, project_connection.connection_state et recommended_next_step.summary. C'est terminé lorsque un simple /loopx affiche un widget belowEditor court, que le texte complet arrive toujours dans l'entrée loopx-packet et que le widget est effacé à session_shutdown.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Bare /loopx dumps the whole command-pack preview into a persistent widget — the TUI truncates it and it covers the working indicator

Affected version: Pi surface installed from release 20261010T034436Z (loopx/pi_goal_mode/loopx-goal.ts, installed as ~/.pi/agent/extensions/loopx/index.ts).
Host surface: pi
Impact: running bare /loopx (or /loopx status) paints a large block of raw packet text above the editor. The widget area can only render a few lines, so it ends mid-sentence with … (Widget truncated) and overlaps the working indicator, which looks like a rendering bug to the user. The same text is already persisted as a session entry, so the widget adds noise rather than information.

Code

// loopx/pi_goal_mode/loopx-goal.ts — inspectLoopx()
const display = typeof packet?.message === "string" ? packet.message : stdout
ctx.ui.setWidget("loopx", display.split("\n").slice(0, 24))
ctx.ui.notify("LoopX packet ready (widget above the editor).", "info")
pi.appendEntry("loopx-packet", { text: display })
  • packet.message for bootstrap-command-pack is the full multi-section preview (project / goal id / detected state / a Rules: list with several long bullet lines) — dozens of lines, and individual lines are wider than a terminal.
  • setWidget is documented as "Persistent content near the editor" (docs/tui.md), i.e. a fixed-height area; slicing at 24 lines does not make the content fit, it just chops it.
  • The widget is never cleared: it stays through subsequent turns and only disappears at session end, so a stale packet preview keeps floating over the editor.

Reproduction

  1. Connect a project to a goal (registry + active state file present).
  2. Run bare /loopx (status/inspect path).
  3. Observe the truncated multi-line block above the editor and the working indicator behind it.

Suggested fix

  • Render a compact status summary from the structured packet fields instead of the raw message, e.g.
    goal_id, project_connection.connection_state, recommended_next_step.summary — three short lines with a width clamp.
  • Use placement: "belowEditor" (or ctx.ui.setStatus() for a single line) so it cannot cover the working indicator.
  • Keep the full text in the existing loopx-packet session entry (already done via appendEntry).
  • Clear the widget with setWidget("loopx", undefined) on session_shutdown and when a goal start packet is rendered, so a stale preview cannot linger.

Local interim patch

I already patched the installed copy: the widget now renders three clamped lines (LoopX · <goal_id> / state: <connection_state> · <project basename> / next: <summary>) with placement: "belowEditor", the full packet still lands in the loopx-packet entry, and the widget is cleared on session_shutdown and on /loopx <goal>. Verification harness (same jiti loader Pi uses, mock pi API):

4) widget lines: 3 | placement: belowEditor | max width 96
   "LoopX · dfc-ai-knowledge-goal"
   "state: connected · dfc-ai-knowledge"
   "next: Project is connected; show status, then generate the heartbeat prompt only if the user wa…"
Langage dominant
Python
Étoiles
6.2k
Forks
596
Merge moyen
6 h 9 min
PR mergées (30 j)
940

Préparer son environnement

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 loopx-project/loopx

Toutes les issues de loopx-project/loopx

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

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