ostacky 0.0.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/README.md ADDED
@@ -0,0 +1,258 @@
1
+ # Ostacky
2
+
3
+ Instalador CLI de agentes y commands para [OpenCode](https://opencode.ai). Descarga y gestiona los recursos del directorio `.opencode/` de tu proyecto de forma reproducible y segura.
4
+
5
+ ## ¿Qué es?
6
+
7
+ `Ostacky` es un CLI que instala agentes (`.opencode/agents/`) y commands (`.opencode/commands/`) directamente desde GitHub Releases. Cada instalación queda registrada en un lockfile con versión y checksum, lo que permite actualizaciones controladas y reproducibles.
8
+
9
+ ## ¿Para qué sirve?
10
+
11
+ - Instalar el agente `Ostacky` y el command `install-stack` en cualquier proyecto con un solo comando
12
+ - Mantener un registro de qué versión está instalada (`ostacky-lock.json`)
13
+ - Detectar y aplicar actualizaciones mostrando el diff de versiones antes de confirmar
14
+ - Evitar descargas repetidas gracias al cache local en `~/.opencode/cache/`
15
+
16
+ ## Requisitos
17
+
18
+ - [Node.js](https://nodejs.org/) >= 18 (para usar con `npx`)
19
+ - o [Bun](https://bun.sh/) >= 1.x (para usar con `bunx` o desarrollo)
20
+ - [OpenCode](https://opencode.ai) instalado en tu máquina
21
+
22
+ ## Uso rápido (para usuarios)
23
+
24
+ No requiere instalación global ni clonar el repositorio. Se usa directamente con `npx` o `bunx`:
25
+
26
+ ```bash
27
+ npx ostacky
28
+ ```
29
+
30
+ ```bash
31
+ bunx ostacky
32
+ ```
33
+
34
+ ## Uso
35
+
36
+ ### Menú interactivo
37
+
38
+ ```bash
39
+ npx ostacky
40
+ ```
41
+
42
+ Detecta automáticamente el directorio `.opencode/` del proyecto (o lo crea) y muestra un menú para elegir qué hacer.
43
+
44
+ ### Instalar todo
45
+
46
+ ```bash
47
+ npx ostacky install
48
+ ```
49
+
50
+ Descarga todos los agentes y commands definidos en el manifest y los escribe en `.opencode/`.
51
+
52
+ ### Agregar agentes o commands individualmente
53
+
54
+ ```bash
55
+ npx ostacky add agent
56
+ npx ostacky add command
57
+ ```
58
+
59
+ Muestra un selector múltiple con los recursos disponibles. Indica si ya están instalados y en qué versión.
60
+
61
+ ### Actualizar
62
+
63
+ ```bash
64
+ npx ostacky update
65
+ ```
66
+
67
+ Consulta la última GitHub Release, compara las versiones instaladas contra el manifest remoto y muestra el diff antes de confirmar:
68
+
69
+ ```
70
+ Actualizaciones disponibles
71
+ agente ostacky 0.0.1 → 0.0.2
72
+ command install-stack 0.0.1 → 0.0.2
73
+
74
+ ¿Aplicar 2 actualización(es)? › Sí / No
75
+ ```
76
+
77
+ Solo descarga los items que cambiaron de versión.
78
+
79
+ ### Desinstalar
80
+
81
+ ```bash
82
+ npx ostacky uninstall
83
+ ```
84
+
85
+ Borra todos los archivos instalados (los listados en `.opencode/ostacky-lock.json`). Antes de borrar, muestra un preview con los paths a eliminar y pide confirmación.
86
+
87
+ #### Desinstalar un agente puntual
88
+
89
+ ```bash
90
+ npx ostacky uninstall agent <nombre>
91
+ ```
92
+
93
+ Por ejemplo:
94
+
95
+ ```bash
96
+ npx ostacky uninstall agent ostacky
97
+ ```
98
+
99
+ #### Desinstalar un command puntual
100
+
101
+ ```bash
102
+ npx ostacky uninstall command <nombre>
103
+ ```
104
+
105
+ Por ejemplo:
106
+
107
+ ```bash
108
+ npx ostacky uninstall command install-stack
109
+ ```
110
+
111
+ Si no especificás el nombre, el CLI te muestra un selector con los items instalados para que elijas cuáles desinstalar (puede ser uno o varios).
112
+
113
+ ### Otros
114
+
115
+ ```bash
116
+ npx ostacky --version # muestra la versión del CLI
117
+ npx ostacky --help # muestra la ayuda
118
+ ```
119
+
120
+ ## Estructura generada
121
+
122
+ Tras instalar, el proyecto queda así:
123
+
124
+ ```
125
+ .opencode/
126
+ ├── agents/
127
+ │ └── ostacky.md
128
+ ├── commands/
129
+ │ └── install-stack.md
130
+ └── ostacky-lock.json ← versiones instaladas
131
+ ```
132
+
133
+ ### ostacky-lock.json
134
+
135
+ ```json
136
+ {
137
+ "version": "0.0.1",
138
+ "lockedAt": "2025-01-01T00:00:00.000Z",
139
+ "repo": "JaimeHoracio/Ostacky",
140
+ "tag": "v0.0.1",
141
+ "agents": {
142
+ "ostacky": {
143
+ "version": "0.0.1",
144
+ "installedAt": "2025-01-01T00:00:00.000Z",
145
+ "sha256": "abc123..."
146
+ }
147
+ },
148
+ "commands": {
149
+ "install-stack": {
150
+ "version": "0.0.1",
151
+ "installedAt": "2025-01-01T00:00:00.000Z",
152
+ "sha256": "def456..."
153
+ }
154
+ }
155
+ }
156
+ ```
157
+
158
+ Se recomienda agregar `ostacky-lock.json` al control de versiones para que el equipo instale exactamente las mismas versiones.
159
+
160
+ ## Después de la instalación
161
+
162
+ Al terminar la instalación, el CLI imprime en la terminal un panel con los próximos pasos. Resumidos:
163
+
164
+ 1. **Recargar OpenCode** para que detecte los nuevos archivos en `.opencode/`.
165
+ 2. Ejecutar el command:
166
+ ```
167
+ /install-stack
168
+ ```
169
+ Si el command `/install-stack` no aparece en la terminal, recargá OpenCode (paso 1) y volvé a tipearlo. Es un command de OpenCode — el CLI lo instala pero OpenCode necesita recargarlo para registrarlo.
170
+ 3. **Recargar OpenCode nuevamente** después de que `/install-stack` haya corrido.
171
+ 4. Ya puedes usar el agente:
172
+ ```
173
+ @Ostacky
174
+ ```
175
+ o seleccionarlo desde la interfaz de OpenCode según la configuración del proyecto. `@Ostacky` invoca al agente que el CLI instaló en `.opencode/agents/ostacky.md`.
176
+
177
+ ## Seguridad
178
+
179
+ - Las URLs de descarga usan **tags de GitHub** (ej. `v0.0.1`), nunca `main` — instalaciones reproducibles
180
+ - Cada path de archivo descargado es validado para prevenir **path traversal**
181
+ - Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
182
+ - El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
183
+
184
+ ## Cache
185
+
186
+ Los archivos descargados se guardan en:
187
+
188
+ ```
189
+ ~/.opencode/cache/<repo>/<tag>/<ruta-del-archivo>
190
+ ```
191
+
192
+ Si ya existe un archivo en cache con el hash correcto, no se hace ninguna petición de red.
193
+
194
+ ## Desarrollo
195
+
196
+ > Los pasos de esta sección son **solo para quienes quieran contribuir o modificar el código**. Si eres usuario final, no necesitas ejecutar nada de esto — basta con `npx ostacky`.
197
+
198
+ ### Requisitos adicionales para desarrollo
199
+
200
+ - [Bun](https://bun.sh/) >= 1.x
201
+
202
+ ### 1. Clonar e instalar dependencias
203
+
204
+ ```bash
205
+ git clone https://github.com/JaimeHoracio/Ostacky.git
206
+ cd Ostacky
207
+ bun install
208
+ ```
209
+
210
+ `bun install` descarga todas las dependencias definidas en `package.json` (incluyendo TypeScript y los tipos de Bun).
211
+
212
+ ### 2. Ejecutar en modo desarrollo
213
+
214
+ ```bash
215
+ bun run dev
216
+ # equivalente a: bun run src/cli.ts
217
+ ```
218
+
219
+ ### 3. Compilar la CLI
220
+
221
+ La CLI se distribuye como un ejecutable JavaScript en `dist/cli.js`. Para generarlo:
222
+
223
+ ```bash
224
+ bun run build
225
+ ```
226
+
227
+ Este comando ejecuta internamente:
228
+
229
+ ```bash
230
+ bun build src/cli.ts --target=node --format=esm --outfile dist/cli.js && bun scripts/add-shebang.ts
231
+ ```
232
+
233
+ Tras compilar deberías obtener:
234
+
235
+ ```
236
+ dist/
237
+ └── cli.js
238
+ ```
239
+
240
+ ### 4. Probar el binario compilado
241
+
242
+ ```bash
243
+ node dist/cli.js
244
+ # o
245
+ bun run start
246
+ ```
247
+
248
+ ### Publicar en npm
249
+
250
+ El script `prepublishOnly` ejecuta `bun run build` automáticamente antes de publicar, por lo que `dist/` siempre estará actualizado al publicar.
251
+
252
+ ```bash
253
+ npm publish
254
+ ```
255
+
256
+ ## Licencia
257
+
258
+ MIT