@lamemind/loom-deck 0.38.0 → 0.39.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 +4 -4
- package/dist/cli.js +8 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Regola unica, senza eccezioni — pensata per reggere l'aggiunta di nuove azioni
|
|
|
52
52
|
| minuscola | azione immediata, one-shot | |
|
|
53
53
|
| `CTRL`+lettera | idiomi universali, toggle dentro i modali di testo, varianti di un'azione | `^F` = find, come ovunque · `^K`/`^P`/`^R` = spawn con un altro prompt |
|
|
54
54
|
| `1`…`9` | voce `launch` n-esima del progetto | da `.claude/loom-works.json` |
|
|
55
|
-
| `
|
|
55
|
+
| `esc` | chiude l'overlay aperto | in modalità normale è inerte: **nessun tasto chiude il deck** |
|
|
56
56
|
|
|
57
57
|
`CTRL` è il terzo livello, aggiunto quando è arrivata la ricerca. Serve perché un modale con **campi di testo** mangia ogni lettera nuda: là dentro nessun comando può essere una lettera semplice. `CTRL+X` e `x` nudo condividono lo stesso `input` e si distinguono solo per `key.ctrl`, quindi in modalità normale il ramo `CTRL` è valutato **per primo** e chiude l'intera classe — senza, `CTRL+F` cadrebbe nel ramo `f` e forkerebbe una sessione invece di cercare.
|
|
58
58
|
|
|
@@ -84,8 +84,8 @@ t 💻 · c 🤖 · 1 📝 codium · 2 ☕ idea
|
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
- **tasti** — cosa puoi fare *qui e ora*. Solo le voci attive: quelle contestuali compaiono quando il pane a fuoco le rende possibili e altrimenti spariscono,
|
|
87
|
-
invece di mostrarsi inerti. Fuori navigazione (`↑↓` `←→`)
|
|
88
|
-
|
|
87
|
+
invece di mostrarsi inerti. Fuori navigazione (`↑↓` `←→`) e indicatore `focus:` — la prima è universale in qualunque TUI, il pane a fuoco si vede già dall'evidenziazione.
|
|
88
|
+
Nessuna voce di uscita, perché non esiste un tasto che chiuda il deck.
|
|
89
89
|
- **surface** — *dove* puoi aprire qualcosa: prima le due built-in (`t`/`c`), poi le voci `launch` del progetto. Stanno insieme perché hanno la stessa natura — fire-once, `cwd` = project root, nessuno stato — e differiscono solo per essere universali invece che custom.
|
|
90
90
|
|
|
91
91
|
L'indice da solo è opaco (le `launch` sono custom per-progetto, senza una lettera fissa per app), quindi la riga espone la mappa e non il conteggio. Se non entrano in larghezza, si ferma a voci intere e mostra il contatore di quelle fuori riga — mai un troncamento silenzioso; le celle delle due built-in sono riservate a monte, o le voci sfonderebbero il box di quel tanto. Il cap a `9` è imposto dai tasti-cifra, non dallo schema: un progetto può dichiarare più di 9 voci, quelle oltre la nona sono configurate ma non raggiungibili (e la riga lo dice).
|
|
@@ -283,7 +283,7 @@ La tab porta anche `PTYXIS_PROFILE` forzata al profilo bindato al progetto nel r
|
|
|
283
283
|
|
|
284
284
|
```bash
|
|
285
285
|
npm install
|
|
286
|
-
npm run dev # tsx src/cli.tsx — lista tasks.md reale, ↑↓ naviga · ⏎ detail · ^K/^P/^R spawn ·
|
|
286
|
+
npm run dev # tsx src/cli.tsx — lista tasks.md reale, ↑↓ naviga · ⏎ detail · ^K/^P/^R spawn · ^C chiude
|
|
287
287
|
npm run build # tsc → dist/
|
|
288
288
|
npm test # node:test sul core vista (src/view.ts), senza Ink né terminale
|
|
289
289
|
```
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { render, Box, Text,
|
|
3
|
+
import { render, Box, Text, useInput } from 'ink';
|
|
4
4
|
import { useState, useEffect, useMemo } from 'react';
|
|
5
5
|
import { randomUUID } from 'node:crypto';
|
|
6
6
|
import { resolveTasksPath, resolveTasksDir, loadTasks, loadTaskFileText, } from './tasks.js';
|
|
@@ -32,7 +32,6 @@ import { useAssignOverlay } from './overlays/assign.js';
|
|
|
32
32
|
import { captures } from './input-modes.js';
|
|
33
33
|
import { VERSION } from './version.js';
|
|
34
34
|
function Deck({ cwd, tasksPath, tasksDir }) {
|
|
35
|
-
const { exit } = useApp();
|
|
36
35
|
const { tasks, loadError } = useTasks(tasksPath);
|
|
37
36
|
// `notes` esce dall'indice come `sessionNotes`: in questo componente `note` è
|
|
38
37
|
// già la riga di STATO in fondo al frame (il feedback di un'azione). Due
|
|
@@ -1113,9 +1112,11 @@ function Deck({ cwd, tasksPath, tasksDir }) {
|
|
|
1113
1112
|
setNote(`${input} → ${entry.label} su ${projectName}`);
|
|
1114
1113
|
}
|
|
1115
1114
|
}
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1115
|
+
// Nessun tasto di uscita: il deck non si chiude da dentro. `q` resta libera
|
|
1116
|
+
// per un binding futuro, `esc` in modalità normale è inerte — dentro un
|
|
1117
|
+
// overlay continua a chiuderlo, perché quel ramo esce prima di qui.
|
|
1118
|
+
// Restano le vie di sistema: `^C` (Ink lo intercetta da sé, `exitOnCtrlC`
|
|
1119
|
+
// di default) e la chiusura della tab Ptyxis che ospita il processo.
|
|
1119
1120
|
});
|
|
1120
1121
|
const canSpawn = focus === 'tasks' && selTask !== null;
|
|
1121
1122
|
const canResume = focus === 'sessions' && selSessionObj !== null;
|
|
@@ -1140,9 +1141,10 @@ function Deck({ cwd, tasksPath, tasksDir }) {
|
|
|
1140
1141
|
// Legenda della modalità normale. Elenca SOLO i tasti che fanno qualcosa qui e
|
|
1141
1142
|
// ora: le voci contestuali compaiono quando il pane a fuoco le rende possibili
|
|
1142
1143
|
// e altrimenti spariscono, invece di annunciarsi inerti con un `—`.
|
|
1143
|
-
// Fuori: navigazione (`↑↓` `←→`)
|
|
1144
|
+
// Fuori: la navigazione (`↑↓` `←→`), universale in qualunque TUI, e
|
|
1144
1145
|
// l'indicatore `focus:` — il pane a fuoco si vede già dall'evidenziazione, e
|
|
1145
1146
|
// ridirlo a parole costava colonne su una riga che tronca in silenzio.
|
|
1147
|
+
// Nessuna voce di uscita: non esiste più un tasto che chiuda il deck.
|
|
1146
1148
|
const keyLegend = sanitize([
|
|
1147
1149
|
...(canSpawn ? ['⏎ detail', '^K/^P/^R spawn'] : canResume ? ['⏎ resume'] : []),
|
|
1148
1150
|
// T112 — la voce nomina il BERSAGLIO, che cambia con la vista attiva
|
package/package.json
CHANGED