@nucleoabierto/teleprompter 0.1.1 → 0.2.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.
@@ -5,11 +5,11 @@ Cómo instalar un paquete Teleprompter en un repositorio, paso a paso.
5
5
  ## Requisitos
6
6
 
7
7
  - Node.js 22 o superior.
8
- - Un paquete: un directorio con un manifiesto `teleprompter.json` en su
9
- raíz. Este repositorio incluye uno de referencia en
10
- `packages/ciclo-tareas/`.
8
+ - Un paquete: un repositorio público de GitHub o un directorio con un
9
+ manifiesto `teleprompter.json` en su raíz. Este repositorio incluye
10
+ uno de referencia en `packages/ciclo-tareas/`.
11
11
  - El directorio del repositorio destino donde se instalarán los
12
- recursos.
12
+ recursos —por defecto, el directorio de trabajo.
13
13
 
14
14
  ## Instalar un paquete
15
15
 
@@ -17,7 +17,18 @@ Desde la raíz del repositorio destino —o dando su ruta como segundo
17
17
  argumento—:
18
18
 
19
19
  ```sh
20
- npx @nucleoabierto/teleprompter install /ruta/al/paquete .
20
+ npx @nucleoabierto/teleprompter nucleoabierto/ciclo-tareas .
21
+ ```
22
+
23
+ `user/repo` descarga el tarball público del repositorio de GitHub y
24
+ usa su raíz como paquete —el `name` del manifiesto debe coincidir con
25
+ el nombre del repositorio, como exige la especificación—;
26
+ `user/repo@v1.0.0` o `--ref v1.0.0` eligen
27
+ la referencia (rama, tag o commit), y sin indicación se usa la rama
28
+ por defecto. Para un paquete en disco se usa `--path`:
29
+
30
+ ```sh
31
+ npx @nucleoabierto/teleprompter --path /ruta/al/paquete .
21
32
  ```
22
33
 
23
34
  El instalador trabaja en cuatro fases: verificación, plan, ejecución y
@@ -28,6 +39,7 @@ registro. Las dos primeras no escriben nada.
28
39
  aborta antes de tocar el disco. Si todo va bien, verás:
29
40
 
30
41
  ```text
42
+ obteniendo: nucleoabierto/ciclo-tareas
31
43
  verificado: ciclo-tareas@1.0.0
32
44
  ```
33
45
 
@@ -60,6 +72,9 @@ resultado:
60
72
  create .agents/skills/crear-tareas/
61
73
  create .agents/skills/ejecutar-tareas/
62
74
  create .agents/skills/commit/
75
+ personalización (.teleprompter/ciclo-tareas/PERSONALIZE.md):
76
+ # Personalización de ciclo-tareas
77
+ …
63
78
  instalado: ciclo-tareas@1.0.0
64
79
  ```
65
80
 
@@ -67,13 +82,76 @@ instalado: ciclo-tareas@1.0.0
67
82
  repositorio: es lo que permite a Teleprompter distinguir lo que él
68
83
  instaló de lo que ya existía.
69
84
 
85
+ Si el paquete declara instrucciones de personalización, su
86
+ contenido se entrega tal cual al final del resultado —el bloque
87
+ `personalización` anterior— y queda copiado en
88
+ `.teleprompter/<paquete>/` dentro del destino.
89
+
90
+ ## Consultar la guía de personalización
91
+
92
+ Las instrucciones que la instalación entregó se releen después con
93
+ `guide`, ejecutado desde la raíz del repositorio destino:
94
+
95
+ ```sh
96
+ npx @nucleoabierto/teleprompter guide
97
+ npx @nucleoabierto/teleprompter guide ciclo-tareas # solo ese paquete
98
+ ```
99
+
100
+ Muestra el mismo contenido del archivo materializado —no reinstala ni
101
+ descarga nada—. Véase la [referencia de `guide`](referencia-guide.md).
102
+
103
+ ## Listar los paquetes instalados
104
+
105
+ Desde la raíz del repositorio destino, `list` muestra qué paquetes
106
+ instaló Teleprompter —nombre, versión, fecha y recursos escritos—
107
+ leyendo el registro:
108
+
109
+ ```sh
110
+ npx @nucleoabierto/teleprompter list
111
+ ```
112
+
113
+ Véase la [referencia de `list`](referencia-list.md).
114
+
115
+ ## Verificar el estado de los recursos instalados
116
+
117
+ Desde la raíz del repositorio destino, `check` confronta el registro
118
+ con el disco y muestra por cada recurso instalado si sigue `intacto`,
119
+ fue `modificado`, está `ausente` o es `no verificable`:
120
+
121
+ ```sh
122
+ npx @nucleoabierto/teleprompter check
123
+ ```
124
+
125
+ Véase la [referencia de `check`](referencia-check.md).
126
+
127
+ ## Actualizar un paquete
128
+
129
+ Desde la raíz del repositorio destino, `update` lleva un paquete
130
+ instalado a la versión que publica su origen —el registrado al
131
+ instalarlo, salvo que se indique otro—:
132
+
133
+ ```sh
134
+ npx @nucleoabierto/teleprompter update ciclo-tareas
135
+ npx @nucleoabierto/teleprompter update ciclo-tareas --ref v2.0.0
136
+ npx @nucleoabierto/teleprompter update ciclo-tareas otra/repo@main
137
+ ```
138
+
139
+ El plan de actualización decide recurso a recurso: lo intacto que la
140
+ versión cambió se sobrescribe (`update`), lo nuevo se crea, lo que la
141
+ versión ya no trae se retira si sigue intacto (`retire`), y las
142
+ ediciones locales se resuelven como las colisiones de `install` —
143
+ interactiva, `--force`, `--skip` o aborto sin consola—. Si la versión
144
+ ya es la registrada, responde que ya está en esa versión.
145
+
146
+ Véase la [referencia de `update`](referencia-update.md).
147
+
70
148
  ## Inspeccionar sin instalar
71
149
 
72
150
  `--dry-run` ejecuta solo la verificación y el plan, y termina sin
73
151
  escribir ni registrar nada:
74
152
 
75
153
  ```sh
76
- npx @nucleoabierto/teleprompter install /ruta/al/paquete . --dry-run
154
+ npx @nucleoabierto/teleprompter nucleoabierto/ciclo-tareas . --dry-run
77
155
  ```
78
156
 
79
157
  Es la forma de ver qué haría una instalación —incluidas las colisiones
package/manual/index.md CHANGED
@@ -15,8 +15,24 @@ colisiones con lo que ya existe y registra la instalación en
15
15
  - [Referencia de `install`](referencia-install.md) — la operación
16
16
  completa: fases, marcas del plan, resolución de colisiones, registro
17
17
  y códigos de salida.
18
+ - [Referencia de `guide`](referencia-guide.md) — consultar las
19
+ instrucciones de personalización de los paquetes instalados.
20
+ - [Referencia de `list`](referencia-list.md) — listar los paquetes
21
+ instalados con su versión, fecha y recursos.
22
+ - [Referencia de `check`](referencia-check.md) — verificar el estado
23
+ de los recursos instalados.
24
+ - [Referencia de `update`](referencia-update.md) — actualizar un
25
+ paquete instalado a la versión que publica su origen.
18
26
  - [Instalar un paquete](001-instalar-un-paquete.md) — la funcionalidad
19
27
  y los escenarios que la suite de pruebas verifica.
28
+ - [Listar los paquetes instalados](002-listar-paquetes-instalados.md)
29
+ — la consulta del registro y los escenarios que la suite verifica.
30
+ - [Verificar el estado de los recursos instalados](003-verificar-recursos-instalados.md)
31
+ — la verificación de la instalación y los escenarios que la suite
32
+ verifica.
33
+ - [Actualizar un paquete](004-actualizar-un-paquete.md) — la
34
+ actualización consciente de la deriva y los escenarios que la
35
+ suite verifica.
20
36
 
21
37
  ## En el repositorio
22
38
 
@@ -0,0 +1,47 @@
1
+ # Referencia de `check`
2
+
3
+ ```text
4
+ teleprompter check
5
+ ```
6
+
7
+ Verifica el estado de los recursos que Teleprompter instaló en el
8
+ repositorio destino. Se ejecuta desde la raíz del destino —no acepta
9
+ argumentos ni opciones— y contrasta `teleprompter-lock.json` con lo
10
+ que el disco contiene: no reinstala ni vuelve a descargar nada.
11
+
12
+ Por cada paquete instalado muestra su `nombre@version` y una línea
13
+ por recurso registrado con una marca de estado:
14
+
15
+ ```text
16
+ estado de los recursos:
17
+ ciclo-tareas@1.0.0
18
+ intacto .agents/skills/crear-tareas/SKILL.md
19
+ modificado .agents/skills/ejecutar-tareas/SKILL.md
20
+ ausente .agents/skills/commit/SKILL.md
21
+ no verificable .teleprompter/ciclo-tareas/PERSONALIZE.md
22
+ ```
23
+
24
+ - `intacto` — el recurso sigue conteniendo lo que la instalación
25
+ escribió.
26
+ - `modificado` — el recurso existe pero su contenido difiere de lo
27
+ registrado.
28
+ - `ausente` — la ruta registrada ya no existe en el destino.
29
+ - `no verificable` — el registro no guardó una referencia con la que
30
+ comparar, el recurso no se puede leer, o la ruta registrada no es
31
+ segura —sale del destino por un `..` o un enlace—.
32
+
33
+ Los recursos que la instalación omitió por colisión no se verifican
34
+ —la herramienta no escribió nada ahí— y el informe no muestra hashes
35
+ ni acciones internas. Encontrar deriva no es un fallo: el informe
36
+ termina con código `0` haya o no recursos modificados o ausentes.
37
+
38
+ Sin instalaciones registradas responde `no hay paquetes
39
+ instalados`: es una respuesta, no un fallo. Un registro ilegible o
40
+ corrupto añade un `aviso:` y responde lo mismo —como el resto de
41
+ lecturas del lock, la corrupción degrada a «sin historia»—.
42
+
43
+ ## Errores
44
+
45
+ | Situación | Código |
46
+ |-----------------------------------------|--------|
47
+ | Argumentos u opciones de cualquier tipo | `4` |
@@ -0,0 +1,33 @@
1
+ # Referencia de `guide`
2
+
3
+ ```text
4
+ teleprompter guide [<paquete>]
5
+ ```
6
+
7
+ Muestra las instrucciones de personalización que los paquetes
8
+ instalados declararon. Se ejecuta desde la raíz del repositorio
9
+ destino —no acepta un argumento de destino ni ninguna opción de
10
+ instalación— y lee el archivo que la instalación materializó en
11
+ `.teleprompter/<paquete>/<archivo>`: no reinstala ni vuelve a
12
+ descargar nada.
13
+
14
+ - Sin `<paquete>`: muestra la guía de cada paquete instalado que la
15
+ declara, un bloque por paquete.
16
+ - Con `<paquete>`: muestra solo la de ese paquete.
17
+
18
+ La salida es el mismo bloque que la instalación entregó al final de
19
+ su resultado —`personalización (<ruta>):` seguido del contenido del
20
+ archivo tal cual, que es texto libre del mantenedor: nunca se valida
21
+ ni se ejecuta—. La ruta que cada bloque muestra es la registrada en
22
+ `teleprompter-lock.json` bajo `personalization`.
23
+
24
+ ## Errores
25
+
26
+ | Situación | Código |
27
+ |-------------------------------------------------------------|--------|
28
+ | Ningún paquete instalado declara guía, o no hay instalaciones | `4` |
29
+ | `<paquete>` no está instalado en el directorio de trabajo | `4` |
30
+ | `<paquete>` está instalado pero no declaró guía | `4` |
31
+ | Argumentos de más u opciones de instalación | `4` |
32
+ | El archivo registrado no existe o no se puede leer | `3` |
33
+ | La ruta registrada escapa del destino (`..` o enlaces) | `3` |
@@ -1,11 +1,32 @@
1
1
  # Referencia de `install`
2
2
 
3
3
  ```text
4
- teleprompter install <paquete> <destino> [--force|--skip] [--dry-run]
4
+ teleprompter [install] <user/repo[@ref]> [destino] [--ref <ref>]
5
+ teleprompter [install] --path <paquete> [destino]
6
+
7
+ Opciones comunes: [--force|--skip] [--dry-run]
5
8
  ```
6
9
 
7
- Instala el paquete del directorio `<paquete>` en el repositorio cuya
8
- raíz es `<destino>`. Ambos argumentos deben ser directorios existentes.
10
+ Instala un paquete en el repositorio cuya raíz es `destino` —por
11
+ defecto, el directorio de trabajo—. `install` es un alias opcional de
12
+ la forma corta.
13
+
14
+ ## El origen
15
+
16
+ - `<user/repo>`: descarga el tarball público del repositorio de
17
+ GitHub por HTTP —sin git ni credenciales—, lo extrae en un
18
+ directorio temporal y usa la raíz del árbol como paquete. El
19
+ temporal se elimina al terminar, también en error y en `--dry-run`.
20
+ La referencia se elige con `@ref` o `--ref` —declarar ambas es un
21
+ error de invocación—; sin indicación se descarga la rama por
22
+ defecto. Un repositorio inaccesible o una referencia inexistente
23
+ abortan con código `5`.
24
+ - `--path <paquete>`: usa el directorio local como origen y el
25
+ argumento posicional `user/repo` no se procesa —de declararse, se
26
+ interpreta como `destino`.
27
+
28
+ `destino` y el directorio de `--path` deben ser directorios
29
+ existentes.
9
30
 
10
31
  ## Fases
11
32
 
@@ -86,7 +107,8 @@ destino: un JSON pensado para versionarse con el repositorio:
86
107
  "action": "create",
87
108
  "sha256": "…"
88
109
  }
89
- ]
110
+ ],
111
+ "origin": { "type": "github", "repo": "nucleoabierto/ciclo-tareas" }
90
112
  }
91
113
  }
92
114
  }
@@ -95,7 +117,11 @@ destino: un JSON pensado para versionarse con el repositorio:
95
117
  `packages` se indexa por el `name` del manifiesto y cada entrada
96
118
  contiene `version`, `installedAt` y `files`: una entrada por recurso
97
119
  con su `target`, la acción realizada (`create`, `overwrite`, `skip`) y
98
- el SHA-256 del contenido escrito —las entradas `skip` no llevan hash.
120
+ el SHA-256 del contenido escrito —las entradas `skip` no llevan hash—.
121
+ La entrada registra además el `origin` de la instalación: el
122
+ repositorio `owner/name` con el ref usado —o sin él, si se obtuvo la
123
+ rama por defecto— o la ruta absoluta de `--path`; los registros
124
+ escritos antes de este campo carecen de él.
99
125
  Los registros de otros paquetes instalados en el mismo destino se
100
126
  conservan. Un registro ausente no bloquea la operación: se ignora en
101
127
  silencio y se trata como si no hubiera instalaciones previas; un
@@ -104,10 +130,19 @@ un aviso.
104
130
 
105
131
  ## Personalización
106
132
 
107
- Si el manifiesto declara `personalization`, la salida final informa de
108
- la ubicación de las instrucciones dentro del paquete. La instalación
109
- las entrega y presenta; no decide su contenido ni las instala salvo que
110
- también figuren en `install`.
133
+ Si el manifiesto declara `personalization`, el instalador copia el
134
+ archivo de instrucciones a `.teleprompter/<paquete>/<archivo>` dentro
135
+ del destino —un espacio gestionado por la herramienta, igual que el
136
+ registro—, recuerda su ubicación en `teleprompter-lock.json` y entrega
137
+ su contenido tal cual al final del resultado, bajo el encabezado
138
+ `personalización (<ruta>):`. El contenido es texto libre del
139
+ mantenedor: nunca se valida ni se ejecuta. Ningún `target` de
140
+ `install` ni ninguna ruta de `requires` puede apuntar dentro de
141
+ `.teleprompter/`.
142
+
143
+ El mismo contenido se consulta después con
144
+ [`teleprompter guide`](referencia-guide.md), ejecutado dentro del
145
+ repositorio destino.
111
146
 
112
147
  ## Códigos de salida
113
148
 
@@ -118,3 +153,4 @@ también figuren en `install`.
118
153
  | `2` | Plan no ejecutable: precondiciones incumplidas o colisiones |
119
154
  | `3` | Error de ejecución (informa de lo ya aplicado antes de fallar) |
120
155
  | `4` | Error de invocación: argumentos ausentes o rutas que no existen |
156
+ | `5` | Error de obtención: repositorio inaccesible, referencia inexistente o archivo corrupto |
@@ -0,0 +1,42 @@
1
+ # Referencia de `list`
2
+
3
+ ```text
4
+ teleprompter list
5
+ ```
6
+
7
+ Muestra los paquetes instalados en el repositorio destino. Se
8
+ ejecuta desde la raíz del destino —no acepta argumentos ni
9
+ opciones— y lee `teleprompter-lock.json`: no reinstala ni vuelve a
10
+ descargar nada.
11
+
12
+ Por cada paquete instalado muestra una entrada con su
13
+ `nombre@version`, el instante en que se instaló y una línea por
14
+ recurso que la instalación escribió:
15
+
16
+ ```text
17
+ paquetes instalados:
18
+ ciclo-tareas@1.0.0 — instalado 2026-09-28T10:00:00.000Z
19
+ guía: teleprompter guide ciclo-tareas
20
+ .agents/skills/crear-tareas/SKILL.md
21
+ .agents/skills/ejecutar-tareas/SKILL.md
22
+ .agents/skills/commit/SKILL.md
23
+ .teleprompter/ciclo-tareas/PERSONALIZE.md
24
+ ```
25
+
26
+ La línea `guía:` solo aparece cuando el paquete declaró
27
+ instrucciones de personalización, consultables con
28
+ [`guide`](referencia-guide.md). Los recursos que la instalación
29
+ omitió por colisión no se listan —el registro anota la decisión,
30
+ pero la herramienta no escribió nada ahí— y tampoco se muestran los
31
+ hashes ni las acciones internas del registro.
32
+
33
+ Sin instalaciones registradas responde `no hay paquetes
34
+ instalados`: es una respuesta, no un fallo. Un registro ilegible o
35
+ corrupto añade un `aviso:` y responde lo mismo —como el resto de
36
+ lecturas del lock, la corrupción degrada a «sin historia»—.
37
+
38
+ ## Errores
39
+
40
+ | Situación | Código |
41
+ |-----------------------------------------|--------|
42
+ | Argumentos u opciones de cualquier tipo | `4` |
@@ -0,0 +1,49 @@
1
+ # Referencia de `update`
2
+
3
+ ```text
4
+ teleprompter update <paquete> [<user/repo[@ref]>] [--ref <ref>]
5
+ teleprompter update <paquete> --path <paquete>
6
+ teleprompter update <paquete> [--force | --skip] [--dry-run]
7
+ ```
8
+
9
+ Lleva un paquete instalado a la versión que publica su origen. Se
10
+ ejecuta desde la raíz del repositorio destino —no acepta destino— y
11
+ nombra el paquete por su `name` en `teleprompter-lock.json`.
12
+
13
+ ## El origen
14
+
15
+ - Sin indicación, reobtiene el paquete desde el origen que la
16
+ instalación registró: el repositorio con su `ref` —o la rama por
17
+ defecto— o el directorio de `--path`.
18
+ - Un posicional `user/repo[@ref]` o `--path <dir>` lo sobrescribe y
19
+ queda registrado como nuevo origen.
20
+ - `--ref` sobrescribe el ref de un origen de repositorio; con un
21
+ origen local es un error de invocación.
22
+
23
+ ## Qué hace
24
+
25
+ Verifica la versión entrante y presenta el plan de actualización
26
+ completo antes de escribir nada: `create`, `identical`, `update`
27
+ —la versión cambió el recurso y el destino sigue intacto— y
28
+ `retire` —la versión retira un recurso intacto—. Lo que la versión
29
+ cambió sobre una edición local, y los retirados modificados, se
30
+ resuelven como las colisiones de `install`: pregunta interactiva,
31
+ `--force`, `--skip` o aborto sin consola —para un retirado la
32
+ pregunta es quitarlo, no sobrescribirlo—.
33
+
34
+ Si el paquete ya está en la versión que publica el origen, responde
35
+ `ya está en esa versión` sin escribir nada. Terminada la ejecución,
36
+ el registro queda a la versión nueva con el origen efectivo.
37
+
38
+ ## Errores
39
+
40
+ | Situación | Código |
41
+ |--------------------------------------------------------|--------|
42
+ | El paquete no está instalado | `4` |
43
+ | No hay origen registrado ni se indica uno | `4` |
44
+ | El origen obtenido publica otro paquete | `4` |
45
+ | `--ref` con un origen local, `--ref` con `--path`, o argumentos de más | `4` |
46
+ | Manifiesto del origen inválido | `1` |
47
+ | Precondición incumplida o decisiones pendientes sin consola | `2` |
48
+ | Error de ejecución | `3` |
49
+ | Origen remoto inaccesible | `5` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nucleoabierto/teleprompter",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Instalador de paquetes de configuración Teleprompter",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -24,5 +24,8 @@
24
24
  },
25
25
  "scripts": {
26
26
  "test": "node --test --experimental-test-coverage --test-coverage-include='**/src/**' --test-coverage-lines=100 --test-coverage-functions=100 --test-coverage-branches=100"
27
+ },
28
+ "dependencies": {
29
+ "tar": "^7.5.22"
27
30
  }
28
31
  }