@lamemind/loom-deck 0.18.0 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sessions.js CHANGED
@@ -231,8 +231,15 @@ export function parseTranscript(content, path, mtime, sizeBytes) {
231
231
  sizeBytes,
232
232
  turns,
233
233
  customTitle,
234
- firstPrompt: firstUserText,
235
- lastReply: lastAssistantText,
234
+ // Sanificati come il titolo, e per lo stesso motivo: le due preview del
235
+ // detail pane sono testo di transcript messo NEL FRAME. Erano l'ultimo
236
+ // varco rimasto — un `✅` (BMP largo 2) nell'estratto prende una cella
237
+ // sola nella griglia di Ink e due colonne sul terminale, quindi la riga
238
+ // scivola a destra e si mangia il bordo del pane. Qui il confine è lo
239
+ // stesso di `title`, non il render: `wrapLines` conta le colonne su questo
240
+ // testo, sanificare a valle sposterebbe l'a-capo già calcolato.
241
+ firstPrompt: sanitize(firstUserText),
242
+ lastReply: sanitize(lastAssistantText),
236
243
  bodies,
237
244
  };
238
245
  }
@@ -1,5 +1,6 @@
1
1
  import { appendFileSync, mkdirSync, readFileSync } from 'node:fs';
2
2
  import { dirname, join } from 'node:path';
3
+ import { sanitize } from './width.js';
3
4
  export function taskIndexPath(projectRoot) {
4
5
  return join(projectRoot, '.claude', 'loom', 'session-tasks.jsonl');
5
6
  }
@@ -60,8 +61,14 @@ export function loadSessionIndex(projectRoot) {
60
61
  // nota vuota da mostrare. Il `typeof` esclude i record senza il campo, che
61
62
  // non devono toccare una nota scritta da un record precedente.
62
63
  if (typeof d.note === 'string') {
64
+ // Sanificata in lettura, non solo alla digitazione: `sanitizeTyped`
65
+ // toglie i byte di controllo ma non ripara la larghezza, e il file è
66
+ // editabile a mano — una nota con un `✅` finirebbe nel frame larga il
67
+ // doppio di quanto Ink ha contato. Il round-trip (edit di una nota già
68
+ // sanificata → riscrittura del sostituto) è il prezzo accettato: a
69
+ // schermo il glifo originale non era comunque disegnabile.
63
70
  if (d.note)
64
- notes.set(d.sessionId, d.note);
71
+ notes.set(d.sessionId, sanitize(d.note));
65
72
  else
66
73
  notes.delete(d.sessionId);
67
74
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lamemind/loom-deck",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "Deck TUI Ink per-progetto della famiglia loom: legge tasks.md e spawna sessioni Claude Code bound via LOOM_TASK",
5
5
  "type": "module",
6
6
  "bin": {