@lamemind/loom-deck 0.12.0 → 0.14.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/README.md +60 -0
- package/dist/cli.js +446 -38
- package/dist/search.js +250 -0
- package/dist/session-list.js +80 -0
- package/dist/sessions.js +110 -1
- package/dist/task-index.js +16 -2
- package/dist/viewport.js +97 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,9 +51,17 @@ senza collisioni:
|
|
|
51
51
|
| `⏎` | azione primaria del pane | Tasks → spawna la task selezionata · Sessions → riprende (`claude --resume`) la sessione selezionata |
|
|
52
52
|
| **MAIUSCOLA** | **apre un modale** | cattura tutti i tasti; `esc` annulla, non esce |
|
|
53
53
|
| minuscola | azione immediata, one-shot | |
|
|
54
|
+
| `CTRL`+lettera | idiomi universali e toggle dentro i modali di testo | `^F` = find, come ovunque |
|
|
54
55
|
| `1`…`9` | voce `launch` n-esima del progetto | da `.claude/loom-works.json` |
|
|
55
56
|
| `q` `esc` | esce dal deck | in un modale `esc` annulla soltanto |
|
|
56
57
|
|
|
58
|
+
`CTRL` è il terzo livello, aggiunto quando è arrivata la ricerca. Serve perché
|
|
59
|
+
un modale con **campi di testo** mangia ogni lettera nuda: là dentro nessun
|
|
60
|
+
comando può essere una lettera semplice. `CTRL+X` e `x` nudo condividono lo
|
|
61
|
+
stesso `input` e si distinguono solo per `key.ctrl`, quindi in modalità normale
|
|
62
|
+
il ramo `CTRL` è valutato **per primo** e chiude l'intera classe — senza,
|
|
63
|
+
`CTRL+F` cadrebbe nel ramo `f` e forkerebbe una sessione invece di cercare.
|
|
64
|
+
|
|
57
65
|
Assegnazioni correnti:
|
|
58
66
|
|
|
59
67
|
| | Tasto | Cosa fa |
|
|
@@ -62,6 +70,7 @@ Assegnazioni correnti:
|
|
|
62
70
|
| modale | `E` | edit priorità/stato della task selezionata (salva + commit) |
|
|
63
71
|
| modale | `S` | sort chain |
|
|
64
72
|
| modale | `F` | filtri |
|
|
73
|
+
| modale | `^F` | **ricerca full-text** nelle conversazioni del progetto |
|
|
65
74
|
| immediata | `f` | **forka** la sessione selezionata (solo col focus sul pane Sessions) |
|
|
66
75
|
| immediata | `t` | terminale @project-root (surface standard launch) |
|
|
67
76
|
| immediata | `c` | sessione Claude **nuda**: nessuna task, nessun prompt iniziale |
|
|
@@ -107,6 +116,57 @@ pannello di dettaglio; la sua tab Ptyxis titola `<label> · <task> · fork`.
|
|
|
107
116
|
> `codium`/`idea` non hanno più una lettera dedicata (erano `C`/`I` hardcoded):
|
|
108
117
|
> ora sono voci `launch` del file config, raggiunte per indice `1`…`9`.
|
|
109
118
|
|
|
119
|
+
### `^F` — cercare dentro le conversazioni
|
|
120
|
+
|
|
121
|
+
Il navigator trova una conversazione per **metadati** (titolo, data, turni). `^F`
|
|
122
|
+
la trova per **contenuto**: «l'IA me l'ha detto 150k di testo fa, ricordo mezza
|
|
123
|
+
parola». Claude Code non ha un find-in-conversation, ma i transcript sono tutti
|
|
124
|
+
su disco e il deck li legge già.
|
|
125
|
+
|
|
126
|
+
Due campi, `tab` per passare dall'uno all'altro:
|
|
127
|
+
|
|
128
|
+
- **hash** — prefisso del `sessionId` (gli 8 char della statusline bastano),
|
|
129
|
+
restringe a una conversazione. Vuoto = **tutte** quelle del progetto.
|
|
130
|
+
- **chiave** — il termine cercato. La ricerca è **eager**: si aggiorna a ogni
|
|
131
|
+
carattere, da 3 in su.
|
|
132
|
+
|
|
133
|
+
Sei toggle, tutti su `CTRL` perché i campi di testo occupano le lettere nude.
|
|
134
|
+
Lo stato si legge da `[x]`/`[ ]`, non dal solo colore:
|
|
135
|
+
|
|
136
|
+
| Tasto | Toggle | Default |
|
|
137
|
+
|---|---|---|
|
|
138
|
+
| `^R` | la chiave è una **regex** invece che testo letterale | off |
|
|
139
|
+
| `^A` | **case-sensitive** | off |
|
|
140
|
+
| `^W` | solo **parole intere** | off |
|
|
141
|
+
| `^B` | cerca nel testo **dell'IA** | **on** |
|
|
142
|
+
| `^T` | cerca nei **tool** (`tool_use` / `tool_result`) | off |
|
|
143
|
+
| `^U` | cerca nei prompt **umani** | off |
|
|
144
|
+
|
|
145
|
+
Non esiste un toggle *thinking*: quei blocchi sono persistiti **senza testo**
|
|
146
|
+
(il transcript porta la sola firma crittografica), quindi sarebbe una casella
|
|
147
|
+
che non può mai produrre un risultato.
|
|
148
|
+
|
|
149
|
+
Con l'hash vuoto la lista è **raggruppata per conversazione**; `⏎` è contestuale
|
|
150
|
+
alla riga selezionata — su una riga-conversazione **riprende** la sessione
|
|
151
|
+
(come dal pane Sessions), su una riga-occorrenza apre il **reader**.
|
|
152
|
+
|
|
153
|
+
Il reader mostra il messaggio intero, aperto già **posizionato sull'occorrenza**
|
|
154
|
+
col match evidenziato: `↑↓` riga, `PgUp`/`PgDn` pagina, `g`/`G` estremi, `esc`
|
|
155
|
+
torna alla lista senza perdere query, toggle e selezione. (Gli estremi stanno su
|
|
156
|
+
lettera e non su `Home`/`End` perché Ink non espone quei due tasti: arrivano
|
|
157
|
+
indistinguibili da qualunque tasto ignoto.)
|
|
158
|
+
|
|
159
|
+
I toggle e la query sono **volatili**: sopravvivono alla chiusura del modale,
|
|
160
|
+
non al riavvio del deck — comporre una ricerca non tocca il disco.
|
|
161
|
+
|
|
162
|
+
**Come fa a essere istantanea.** I corpi dei messaggi restano in RAM dentro la
|
|
163
|
+
cache mtime-keyed che il deck usa già per la lista sessioni: quei file venivano
|
|
164
|
+
comunque deserializzati per turni e titoli, e i corpi buttati. Trattenerli non
|
|
165
|
+
aggiunge I/O, aggiunge memoria — e ne aggiunge poca, perché un JSONL è per l'85%
|
|
166
|
+
overhead (misurato su un progetto reale: 57 MB su disco = 9,8 MB di testo
|
|
167
|
+
cercabile). Cercarci dentro costa 1-9 ms; un prefiltro `grep` sugli stessi file
|
|
168
|
+
ne costerebbe 26, perché rileggerebbe il volume pieno a ogni battuta.
|
|
169
|
+
|
|
110
170
|
## Vista: filtri e ordinamenti
|
|
111
171
|
|
|
112
172
|
La lista è una **vista** sulla `tasks.md`: si filtra e si ordina senza toccare il file.
|