@lamemind/loom-deck 0.66.1 → 0.68.0

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/scripts/deck-run CHANGED
@@ -56,6 +56,9 @@
56
56
  # LOOM_DECK_PROFILE_UUID UUID profilo Ptyxis (default: cc-host)
57
57
  # LOOM_DECK_WORKDIR dir di lavoro della tab (default: $PWD)
58
58
  # LOOM_DECK_ENTER_PROMPT override del prompt iniziale, {TASK}=TaskID (vince sul kind, tranne `none`)
59
+ # T161: inerte sugli spawn che arrivano dal deck TUI —
60
+ # quelli passano SEMPRE `--prompt`, su cui non ha mai
61
+ # vinto. Resta per le invocazioni a mano e per i test.
59
62
  # LOOM_DECK_INTAB_CMD override comando in-tab (default: la sessione CC; usato per i test)
60
63
  # LOOM_DECK_STATE_PROFILE PTYXIS_PROFILE annunciata a compass (default: bindings/claude
61
64
  # del progetto, letto da dconf; settata a vuoto = nessun annuncio)
@@ -269,16 +272,25 @@ WORKDIR="${LOOM_DECK_WORKDIR:-$PWD}"
269
272
  # titolo finisce dentro apici singoli in `bash -lc "claude --name '…'"`, e la
270
273
  # nota è testo digitato a mano — enumerare i caratteri pericolosi significa
271
274
  # sbagliarne uno, enumerare quelli ammessi no. Restano lettere, cifre, accentate
272
- # italiane, spazio, trattino, underscore e quattro emoji (sotto); tutto il resto
275
+ # italiane, spazio, trattino, underscore e sei emoji (sotto); tutto il resto
273
276
  # (apici, backslash, `$`, backtick, `;`, quadre, ogni altra emoji…) cade.
274
277
  #
275
- # T156 — le quattro emoji entrano per il PREFISSO del titolo di fallback che il
276
- # deck genera quando il campo nota è vuoto (`🚀 slug`, `ACTION_EMOJI` in
277
- # `src/spawn.ts`). Senza di loro il prefisso spariva qui e restava nella lista
278
- # del deck, che riceve la nota grezza dal sidecar `session-tasks.jsonl`: la
279
- # stessa conversazione portava due titoli diversi, senza errore. Le quadre che
278
+ # T156 — le emoji entrano per il PREFISSO del titolo che il deck compone
279
+ # (`🚀 slug`). Senza di loro il prefisso spariva qui e restava nella lista del
280
+ # deck, che riceve la nota grezza dal sidecar `session-tasks.jsonl`: la stessa
281
+ # conversazione portava due titoli diversi, senza errore. Le quadre che
280
282
  # delimitavano il prefisso sono cadute col prefisso stesso: l'emoji da sola si
281
283
  # stacca già dallo slug.
284
+ # T161 — le sei stanno tutte nei TEMPLATE di titolo del catalogo delle azioni
285
+ # (`SPAWN_ACTIONS` in `src/spawn-catalog.ts`), che il progetto può riscrivere:
286
+ # quattro nominano un'azione su una task (📐🚀📊🏁), 🧹 il file inbox che si
287
+ # drena, 📏 il path che si srotola.
288
+ # Questa whitelist ha un GEMELLO TypeScript (`saneNote` in `src/sane-note.ts`),
289
+ # che riduce il template al salvataggio perché quello che sta nel file di
290
+ # progetto sia quello che la tab mostrerà. I due lati non si leggono a vicenda e
291
+ # vanno cambiati insieme: il custode è il gate di `test/deck-run.test.ts`, che
292
+ # passa la stessa batteria di input a questa funzione e al gemello e pretende
293
+ # l'uguaglianza.
282
294
  # La whitelist le nomina una per una e NON apre un intervallo di code point. Due
283
295
  # ragioni: un'emoji arriva nella tab solo se il deck la mostra identica in lista,
284
296
  # cioè se `sanitize` (`src/width.ts`) la lascia passare invece di renderla `·`, e
@@ -305,7 +317,7 @@ _sane_note() { # <raw> → nota ridotta, spazi collassati, cap 60 char
305
317
  # `tr` non ne ha bisogno: squeeza uno spazio ASCII, e 0x20 non compare mai
306
318
  # come byte di continuazione di una sequenza UTF-8.
307
319
  s="$(printf '%s' "$1" \
308
- | LC_ALL=C.UTF-8 sed 's/[^A-Za-z0-9 _àèéìòùÀÈÉÌÒÙ📐🚀📊🏁-]//g' \
320
+ | LC_ALL=C.UTF-8 sed 's/[^A-Za-z0-9 _àèéìòùÀÈÉÌÒÙ📐🚀📊🏁🧹📏-]//g' \
309
321
  | tr -s ' ')"
310
322
  s="${s# }"; s="${s% }"
311
323
  printf '%s' "${s:0:60}"
@@ -382,7 +394,15 @@ MODE_FLAG="--permission-mode ${PERM_MODE} "
382
394
 
383
395
  # ── modello (T108 + T152) ────────────────────────────────────────────────────
384
396
  # Precedenza: --model > env LOOM_DECK_MODEL > modello del kind nel catalogo >
385
- # 'fable'. L'ultimo gradino è il gemello bash di `MODEL_DEFAULT` in spawn.ts e
397
+ # 'fable'.
398
+ #
399
+ # T161 — questa cascata vale per chi invoca deck-run A MANO. Il deck TUI passa
400
+ # SEMPRE `--model` già risolto (default del deck ← override di progetto nel
401
+ # blocco `spawn` di `.claude/loom-works.json`), quindi dal deck si ferma al primo
402
+ # gradino e i tre sotto non intervengono mai. Il blocco di progetto qui non si
403
+ # legge di proposito: `jq` è dipendenza opzionale di questo script, e dargli un
404
+ # JSON da consultare la renderebbe obbligatoria su un percorso che oggi degrada
405
+ # senza. L'ultimo gradino è il gemello bash di `MODEL_DEFAULT` in spawn.ts e
386
406
  # va tenuto allineato a mano: i due lati non si leggono a vicenda (il deck deve
387
407
  # poter MOSTRARE la selezione iniziale prima che deck-run esista come processo),
388
408
  # quindi un cambio qui senza l'altro fa partire dalla lista un modello diverso
@@ -8,9 +8,23 @@
8
8
  #
9
9
  # Perché un file dati e non un `case` dentro deck-run: due lati hanno bisogno
10
10
  # dello stesso testo — deck-run per comporre il comando in-tab, il deck TUI per
11
- # pre-riempire il campo prompt (e ora anche il modello) del detail con ciò che
12
- # sta per essere eseguito. Come codice, il secondo lato dovrebbe riscriverlo, e
13
- # le due copie divergono alla prima voce aggiunta da una parte sola.
11
+ # pre-riempire i campi del detail con ciò che sta per essere eseguito. Come
12
+ # codice, il secondo lato dovrebbe riscriverlo, e le due copie divergono alla
13
+ # prima voce aggiunta da una parte sola.
14
+ #
15
+ # T161 — questo file resta la FONTE UNICA dei sette kind, e non è diventato un
16
+ # blocco JSON nel file di progetto per una ragione precisa: `jq` è dipendenza
17
+ # OPZIONALE di deck-run, e un JSON da consultare la renderebbe obbligatoria su
18
+ # un percorso che oggi degrada senza. Le sue righe sono il primo gradino del
19
+ # default di un'azione su task; il secondo è la riga di catalogo in
20
+ # `src/spawn-catalog.ts`, e sopra entrambi sta l'override di progetto nel blocco
21
+ # `spawn` di `.claude/loom-works.json`, che legge il solo deck.
22
+ #
23
+ # Le azioni SENZA kind (la sessione nuda, il drain di un file inbox, lo
24
+ # srotolamento dell'hard-wrap, il project status) non hanno una riga qui e non
25
+ # devono averla: le chiavi di questo file sono i valori di `--prompt-kind`, e
26
+ # quelle quattro non ne passano nessuno — una riga qui sarebbe irraggiungibile
27
+ # da ogni chiamante. I loro default vivono in `src/spawn-catalog.ts`.
14
28
  #
15
29
  # `none` non compare: nessun prompt non è un template vuoto, è l'assenza della
16
30
  # voce. Chi chiede un kind fuori da questo file riceve un prompt vuoto e nessun