forgegit 1.3.0 → 1.4.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.
@@ -0,0 +1,329 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0..\.."
6
+
7
+ REM --- Colores ANSI (con fallback) ---
8
+ for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
9
+ if "!ESC!"=="" (
10
+ set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
11
+ set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
12
+ ) else (
13
+ set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
14
+ set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
15
+ set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
16
+ set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
17
+ )
18
+
19
+ REM --- Args ---
20
+ if /i "%~1"=="ayuda" goto :ayuda
21
+ if /i "%~1"=="--help" goto :ayuda
22
+ if /i "%~1"=="-h" goto :ayuda
23
+ if /i "%~1"=="listar" goto :listar
24
+ if /i "%~1"=="crear" goto :crear
25
+ if /i "%~1"=="volver" goto :volver_arg
26
+ goto :menu
27
+
28
+ REM ============================================================
29
+ REM MENU PRINCIPAL
30
+ REM ============================================================
31
+ :menu
32
+ echo.
33
+ echo !C_CY!============================================!C_RS!
34
+ echo !C_BC! SNAPSHOTS!C_RS! !C_GY!- Copias de seguridad!C_RS!
35
+ echo !C_CY!============================================!C_RS!
36
+ echo.
37
+ echo !C_GY!Un snapshot es una copia completa del proyecto.!C_RS!
38
+ echo !C_GY!Sirve para volver atras si algo se rompe.!C_RS!
39
+ echo.
40
+
41
+ call :count
42
+ if !SNAP_COUNT! EQU 0 (
43
+ echo !C_GY!No hay snapshots todavia.!C_RS!
44
+ ) else (
45
+ echo !C_CY!.!C_RS! !C_GY!Snapshots disponibles:!C_RS! !C_WH!!SNAP_COUNT!!C_RS!
46
+ echo.
47
+ call :list_short
48
+ )
49
+ echo.
50
+
51
+ echo !C_CY!------------------------------------------------------------!C_RS!
52
+ echo !C_BC! QUE QUIERES HACER?!C_RS!
53
+ echo !C_CY!------------------------------------------------------------!C_RS!
54
+ echo !C_YE![c]!C_RS! Crear snapshot
55
+ if !SNAP_COUNT! GTR 0 (
56
+ echo !C_YE![v]!C_RS! Volver a un snapshot
57
+ )
58
+ echo !C_YE![l]!C_RS! Listar con detalles
59
+ echo !C_YE![Enter]!C_RS! Salir
60
+ echo !C_CY!------------------------------------------------------------!C_RS!
61
+ echo.
62
+
63
+ set "ACTION="
64
+ set /p "ACTION= !C_BC!Opcion!C_RS!: "
65
+
66
+ if /i "!ACTION!"=="c" goto :crear
67
+ if /i "!ACTION!"=="v" goto :volver_prompt
68
+ if /i "!ACTION!"=="l" goto :listar
69
+ goto :end
70
+
71
+ REM ============================================================
72
+ REM CREAR SNAPSHOT
73
+ REM ============================================================
74
+ :crear
75
+ echo.
76
+ echo !C_CY!------------------------------------------------------------!C_RS!
77
+ echo !C_BC! CREAR SNAPSHOT!C_RS!
78
+ echo !C_CY!------------------------------------------------------------!C_RS!
79
+ echo.
80
+ echo !C_GY!Copia todo el proyecto en versiones\!C_RS!
81
+ echo !C_GY!Excluye: .git, versiones, node_modules, audits, etc.!C_RS!
82
+ echo.
83
+
84
+ set "SNAP_NAME="
85
+ set /p "SNAP_NAME= !C_BC!Nombre!C_RS! !C_GY![Enter=Sin definir]!C_RS!: "
86
+ if "!SNAP_NAME!"=="" set "SNAP_NAME=Sin definir"
87
+
88
+ for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
89
+ set "DEST=versiones\!TS!_!SNAP_NAME!"
90
+
91
+ if not exist "versiones" mkdir "versiones"
92
+ if not exist "!DEST!" mkdir "!DEST!"
93
+
94
+ echo.
95
+ echo !C_GY!Copiando archivos...!C_RS!
96
+ robocopy "." "!DEST!" /E /XD .git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea audits /XF *.log *.tmp *.bak *.orig Thumbs.db .DS_Store /NFL /NDL /NJH /NJS /NC /NS /NP >nul
97
+ set "RC=!ERRORLEVEL!"
98
+
99
+ echo.
100
+ if !RC! GEQ 8 (
101
+ echo !C_RE![X]!C_RS! Robocopy fallo con codigo !RC!
102
+ goto :end
103
+ )
104
+
105
+ set "FCOUNT=0"
106
+ for /f %%c in ('dir /b /s "!DEST!" 2^>nul ^| find /c /v ""') do set "FCOUNT=%%c"
107
+
108
+ echo !C_GR![OK]!C_RS! Snapshot creado
109
+ echo.
110
+ echo !C_GY!Ubicacion:!C_RS! !C_WH!!DEST!!C_RS!
111
+ echo !C_GY!Archivos:!C_RS! !C_WH!!FCOUNT!!C_RS!
112
+ echo.
113
+
114
+ goto :end
115
+
116
+ REM ============================================================
117
+ REM LISTAR (short, para menu)
118
+ REM ============================================================
119
+ :list_short
120
+ set "IDX=0"
121
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
122
+ if !IDX! LSS 3 (
123
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS!
124
+ )
125
+ set /a IDX+=1
126
+ )
127
+ if !IDX! GTR 3 (
128
+ echo !C_GY!... y !IDX! mas en total!C_RS!
129
+ )
130
+ goto :eof
131
+
132
+ REM ============================================================
133
+ REM LISTAR (full)
134
+ REM ============================================================
135
+ :listar
136
+ call :count
137
+ if !SNAP_COUNT! EQU 0 (
138
+ echo.
139
+ echo !C_GY!No hay snapshots. Crea uno con:!C_RS! !C_WH!snapshots.cmd crear!C_RS!
140
+ goto :end
141
+ )
142
+
143
+ echo.
144
+ echo !C_CY!-------------------------------------------------------------!C_RS!
145
+ echo !C_BC! SNAPSHOTS DISPONIBLES!C_RS!
146
+ echo !C_CY!-------------------------------------------------------------!C_RS!
147
+ echo !C_GY! IDX NOMBRE ARCHIVOS!C_RS!
148
+ echo !C_CY!-------------------------------------------------------------!C_RS!
149
+
150
+ set "IDX=0"
151
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
152
+ set "S_!IDX!=%%D"
153
+ set "FC=0"
154
+ for /f %%c in ('dir /b /s "versiones\%%D" 2^>nul ^| find /c /v ""') do set "FC=%%c"
155
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS! !C_GY!(!FC! archivos)!C_RS!
156
+ set /a IDX+=1
157
+ )
158
+
159
+ echo !C_CY!-------------------------------------------------------------!C_RS!
160
+ echo !C_GY!Total: !SNAP_COUNT! snapshots!C_RS!
161
+ echo.
162
+ goto :end
163
+
164
+ REM ============================================================
165
+ REM VOLVER (prompt)
166
+ REM ============================================================
167
+ :volver_prompt
168
+ call :count
169
+ if !SNAP_COUNT! EQU 0 (
170
+ echo !C_RE![X]!C_RS! No hay snapshots.
171
+ goto :end
172
+ )
173
+
174
+ call :listar_body
175
+
176
+ set "RESTORE_IDX="
177
+ set /p "RESTORE_IDX= !C_BC!Indice a restaurar!C_RS! !C_GY![0-!SNAP_COUNT!-1]!C_RS!: "
178
+ if "!RESTORE_IDX!"=="" goto :end
179
+
180
+ call :do_restore "!RESTORE_IDX!"
181
+ goto :end
182
+
183
+ :volver_arg
184
+ if "%~2"=="" (
185
+ echo !C_RE![X]!C_RS! Falta el indice.
186
+ echo !C_GY!Uso: snapshots.cmd volver <indice>!C_RS!
187
+ goto :end
188
+ )
189
+ call :listar_body
190
+ call :do_restore "%~2"
191
+ goto :end
192
+
193
+ REM Cuerpo compartido de listado
194
+ :listar_body
195
+ echo.
196
+ echo !C_CY!-------------------------------------------------------------!C_RS!
197
+ echo !C_BC! SNAPSHOTS DISPONIBLES!C_RS!
198
+ echo !C_CY!-------------------------------------------------------------!C_RS!
199
+ set "IDX=0"
200
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
201
+ set "S_!IDX!=%%D"
202
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS!
203
+ set /a IDX+=1
204
+ )
205
+ echo !C_CY!-------------------------------------------------------------!C_RS!
206
+ echo.
207
+ goto :eof
208
+
209
+ REM ============================================================
210
+ REM DO RESTORE
211
+ REM ============================================================
212
+ :do_restore
213
+ set "TARGET=%~1"
214
+ set "SNAP_NAME=!S_%TARGET%!"
215
+
216
+ if "!SNAP_NAME!"=="" (
217
+ echo !C_RE![X]!C_RS! Indice !TARGET! no existe.
218
+ goto :eof
219
+ )
220
+
221
+ set "SNAP_PATH=versiones\!SNAP_NAME!"
222
+ if not exist "!SNAP_PATH!" (
223
+ echo !C_RE![X]!C_RS! Snapshot no encontrado: !SNAP_PATH!
224
+ goto :eof
225
+ )
226
+
227
+ echo !C_CY!------------------------------------------------------------!C_RS!
228
+ echo !C_BC! CONFIRMAR RESTAURACION!C_RS!
229
+ echo !C_CY!------------------------------------------------------------!C_RS!
230
+ echo.
231
+ echo !C_GY!Snapshot:!C_RS! !C_WH!!SNAP_NAME!!C_RS!
232
+ echo !C_GY!Modo:!C_RS! !C_WH!overlay (no borra archivos)!C_RS!
233
+ echo.
234
+ echo !C_GY!Se creara un backup automatico antes de restaurar.!C_RS!
235
+ echo !C_YE!ATENCION: los cambios actuales pueden perderse.!C_RS!
236
+ echo.
237
+
238
+ set "CONFIRM="
239
+ set /p "CONFIRM= !C_BC!Escribe SI para confirmar!C_RS!: "
240
+ if /i not "!CONFIRM!"=="SI" (
241
+ echo !C_GY!Cancelado.!C_RS!
242
+ goto :eof
243
+ )
244
+
245
+ REM --- Backup pre-restore ---
246
+ echo.
247
+ echo !C_GY!Creando backup de seguridad...!C_RS!
248
+ for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
249
+ set "PREBK=versiones\!TS!_pre-restore"
250
+
251
+ if not exist "!PREBK!" mkdir "!PREBK!"
252
+ robocopy "." "!PREBK!" /E /XD .git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea audits /XF *.log *.tmp *.bak *.orig Thumbs.db .DS_Store /NFL /NDL /NJH /NJS /NC /NS /NP >nul
253
+ echo !C_GR![OK]!C_RS! Backup: !C_WH!!PREBK!!C_RS!
254
+ echo.
255
+
256
+ REM --- Restore ---
257
+ echo !C_GY!Restaurando archivos...!C_RS!
258
+ robocopy "!SNAP_PATH!" "." /E /XD .git versiones audits /XF *.log *.tmp /NFL /NDL /NJH /NJS /NC /NS /NP >nul
259
+ set "RC=!ERRORLEVEL!"
260
+
261
+ echo.
262
+ if !RC! GEQ 8 (
263
+ echo !C_RE![X]!C_RS! Restauracion fallo con codigo !RC!
264
+ echo !C_GY!Puedes volver al estado previo con:!C_RS! !C_WH!snapshots.cmd volver!C_RS!
265
+ goto :eof
266
+ )
267
+
268
+ echo !C_GR![OK]!C_RS! Snapshot restaurado.
269
+ echo.
270
+ echo !C_GY!Si algo salio mal, tu estado previo esta en:!C_RS!
271
+ echo !C_WH!!PREBK!!C_RS!
272
+ echo.
273
+ goto :eof
274
+
275
+ REM ============================================================
276
+ REM CONTAR
277
+ REM ============================================================
278
+ :count
279
+ set "SNAP_COUNT=0"
280
+ if exist "versiones" (
281
+ for /f %%c in ('dir /b /ad "versiones" 2^>nul ^| find /c /v ""') do set "SNAP_COUNT=%%c"
282
+ )
283
+ goto :eof
284
+
285
+ REM ============================================================
286
+ REM AYUDA
287
+ REM ============================================================
288
+ :ayuda
289
+ echo.
290
+ echo !C_CY!============================================!C_RS!
291
+ echo !C_BC! SNAPSHOTS!C_RS! !C_GY!- Ayuda!C_RS!
292
+ echo !C_CY!============================================!C_RS!
293
+ echo.
294
+ echo !C_BC!USO:!C_RS!
295
+ echo !C_WH!snapshots.cmd!C_RS! Menu interactivo
296
+ echo !C_WH!snapshots.cmd crear!C_RS! Crear snapshot
297
+ echo !C_WH!snapshots.cmd listar!C_RS! Listar snapshots
298
+ echo !C_WH!snapshots.cmd volver <idx>!C_RS! Restaurar por indice
299
+ echo !C_WH!snapshots.cmd --help!C_RS! Esta ayuda
300
+ echo.
301
+ echo !C_BC!FLUJO TIPICO:!C_RS!
302
+ echo !C_GY!1. Antes de un cambio riesgoso:!C_RS!
303
+ echo !C_WH!snapshots.cmd crear!C_RS! !C_GY!(nombre: antes de refactor)!C_RS!
304
+ echo !C_GY!2. Haces los cambios...!C_RS!
305
+ echo !C_GY!3. Si algo se rompe:!C_RS!
306
+ echo !C_WH!snapshots.cmd volver 0!C_RS!
307
+ echo.
308
+ echo !C_BC!SEGURIDAD:!C_RS!
309
+ echo !C_GY!- Preview antes de restaurar!C_RS!
310
+ echo !C_GY!- Confirmacion con "SI" mayusculas!C_RS!
311
+ echo !C_GY!- Backup automatico pre-restore!C_RS!
312
+ echo !C_GY!- Modo overlay (no borra archivos)^^!C_RS!
313
+ echo.
314
+ goto :end
315
+
316
+ :end
317
+ call :shell_if_double_click
318
+ endlocal
319
+ exit /b 0
320
+
321
+ :shell_if_double_click
322
+ if "%NO_PAUSE%"=="1" goto :eof
323
+ echo %cmdcmdline% | find /i "%~nx0" >nul
324
+ if errorlevel 1 goto :eof
325
+ echo.
326
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
327
+ echo.
328
+ cmd /k
329
+ goto :eof
package/MANUAL.md CHANGED
@@ -1,68 +1,61 @@
1
- cd "E:\MASTER\Proyectos\2026\Toolkit\Sys\forgeGit"
2
-
3
- $content = @'
4
- ============================================================
5
- forgeGit - MANUAL PERSONAL
6
- ============================================================
7
-
8
- INSTALAR EN PC NUEVA (una sola vez)
9
- ------------------------------------------------------------
10
- npm install -g forgegit
11
-
12
-
13
- USAR EN UN PROYECTO NUEVO
14
- ------------------------------------------------------------
15
- cd ruta\del\proyecto
16
- forge
17
-
18
- Listo. El proyecto queda con Git + 7 helpers.
19
-
20
-
21
- COMANDOS DEL DIA A DIA
22
- ------------------------------------------------------------
23
- guardar.cmd Commit cambios
24
- subir.cmd Push a GitHub
25
- snapshots.cmd Crear/restaurar copia de seguridad
26
- historial.cmd Ver commits recientes
27
- auditar.cmd Generar reporte diff
28
- abrir.cmd Abrir en VS Code
29
- init.cmd Re-bootstrap (raro, solo si rompes algo)
30
-
31
-
32
- ACTUALIZAR EL KIT (cuando hay version nueva)
33
- ------------------------------------------------------------
34
- npm install -g forgegit@latest
35
-
36
- En cada proyecto existente:
37
- forge update
38
-
39
-
40
- PUBLICAR NUEVA VERSION DEL KIT (yo, autor)
41
- ------------------------------------------------------------
42
- cd E:\MASTER\Proyectos\2026\Toolkit\Sys\forgeGit
43
-
44
- 1. Editar config.cmd y subir version (ej: 1.2.0 -> 1.3.0)
45
- 2. guardar.cmd (mensaje: release 1.3.0)
46
- 3. subir.cmd
47
- 4. npm publish
48
- 5. tools\pack.cmd (regenera dist)
49
- 6. git tag -a v1.3.0 -m "Version 1.3.0"
50
- 7. git push origin --tags
51
- 8. Subir ZIP a GitHub Releases
52
-
53
-
54
- LINKS UTILES
55
- ------------------------------------------------------------
56
- Repo: https://github.com/vloitz/forgeGit
57
- npm: https://www.npmjs.com/package/forgegit
58
- Releases: https://github.com/vloitz/forgeGit/releases
59
-
60
- ============================================================
61
- '@
62
-
63
- $utf8 = New-Object System.Text.UTF8Encoding($false)
64
- [System.IO.File]::WriteAllText("$PWD\MANUAL.txt", $content, $utf8)
65
-
66
- Write-Host " [OK] MANUAL.txt creado" -ForegroundColor Green
67
- Write-Host ""
68
- Get-Item "MANUAL.txt" | Select-Object Name, Length
1
+ # forgeGit - Manual de uso
2
+
3
+ Guia completa de instalacion, uso y mantenimiento.
4
+
5
+ ## Instalacion
6
+
7
+ npm install -g forgegit
8
+
9
+ O descarga el ZIP desde:
10
+ https://github.com/vloitz/forgeGit/releases/latest
11
+
12
+ Requisitos: Windows 10/11, Node.js 18+, Git 2.30+
13
+
14
+ ## Uso en un proyecto nuevo
15
+
16
+ cd ruta\del\proyecto
17
+ forge
18
+
19
+ El proyecto queda con Git, .gitignore, README.md, commit inicial,
20
+ tag v1.0.0 y 7 helpers en .forge/commands/.
21
+
22
+ ## Comandos disponibles
23
+
24
+ | Comando | Descripcion |
25
+ |---------|-------------|
26
+ | forge save | Commit de cambios |
27
+ | forge push | Push a GitHub |
28
+ | forge log | Ver commits recientes |
29
+ | forge snap | Crear/restaurar snapshots |
30
+ | forge audit | Generar reporte diff |
31
+ | forge open | Abrir en VS Code |
32
+ | forge serve | Servidor de desarrollo (auto-detect) |
33
+ | forge help | Ayuda completa |
34
+
35
+ ## Estructura del proyecto
36
+
37
+ MiProyecto/
38
+ ├── forge.cmd Menu + CLI
39
+ ├── init.cmd Bootstrap
40
+ ├── config.cmd Configuracion
41
+ ├── .forge/
42
+ │ ├── commands/ 6 helpers
43
+ │ ├── lib/ Modulos internos
44
+ │ ├── templates/ Fuentes .tpl
45
+ │ └── serve-static.js
46
+ └── (tus archivos)
47
+
48
+ ## Actualizar
49
+
50
+ npm install -g forgegit@latest
51
+ forge update
52
+
53
+ ## Links
54
+
55
+ - Repo: https://github.com/vloitz/forgeGit
56
+ - npm: https://www.npmjs.com/package/forgegit
57
+ - Releases: https://github.com/vloitz/forgeGit/releases
58
+
59
+ ## Licencia
60
+
61
+ MIT
package/config.cmd CHANGED
@@ -1,15 +1,15 @@
1
- REM ============================================================
2
- REM forge-git / config.cmd
3
- REM Configuration - edit these values to customize
4
- REM Called from init.cmd via: call config.cmd
5
- REM ============================================================
6
-
7
- set "FG_VERSION=1.3.0"
8
- set "TAG_INITIAL=v1.0.0"
9
- set "TAG_MESSAGE=Primera version estable"
10
- set "BRANCH_MAIN=main"
11
- set "COMMIT_MESSAGE=chore: initial commit"
12
-
13
- REM --- Exclusions for subir.cmd (robocopy) ---
14
- set "EXCLUDE_DIRS=.git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea"
1
+ REM ============================================================
2
+ REM forge-git / config.cmd
3
+ REM Configuration - edit these values to customize
4
+ REM Called from init.cmd via: call config.cmd
5
+ REM ============================================================
6
+
7
+ set "FG_VERSION=1.4.1"
8
+ set "TAG_INITIAL=v1.0.0"
9
+ set "TAG_MESSAGE=Primera version estable"
10
+ set "BRANCH_MAIN=main"
11
+ set "COMMIT_MESSAGE=chore: initial commit"
12
+
13
+ REM --- Exclusions for subir.cmd (robocopy) ---
14
+ set "EXCLUDE_DIRS=.git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea"
15
15
  set "EXCLUDE_FILES=*.log *.tmp *.bak *.orig Thumbs.db .DS_Store"
package/forge.cmd ADDED
@@ -0,0 +1,114 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0"
6
+
7
+ REM --- Colores ANSI ---
8
+ for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
9
+ if "!ESC!"=="" (
10
+ set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
11
+ set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
12
+ ) else (
13
+ set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
14
+ set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
15
+ set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
16
+ set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
17
+ )
18
+
19
+ set "CMD_DIR=.forge\commands"
20
+
21
+ REM --- Verificar instalacion ---
22
+ if not exist "%CMD_DIR%\save.cmd" (
23
+ echo.
24
+ echo !C_RE![X]!C_RS! forgeGit no esta instalado aqui.
25
+ echo !C_GY!Ejecuta desde un proyecto nuevo:!C_RS! forge
26
+ echo.
27
+ pause
28
+ exit /b 1
29
+ )
30
+
31
+ REM --- Modo CLI directo ---
32
+ if not "%~1"=="" (
33
+ if /i "%~1"=="save" ( call "%CMD_DIR%\save.cmd" & exit /b 0 )
34
+ if /i "%~1"=="push" ( call "%CMD_DIR%\push.cmd" & exit /b 0 )
35
+ if /i "%~1"=="snap" ( call "%CMD_DIR%\snapshots.cmd" & exit /b 0 )
36
+ if /i "%~1"=="log" ( call "%CMD_DIR%\historial.cmd" & exit /b 0 )
37
+ if /i "%~1"=="audit" ( call "%CMD_DIR%\auditar.cmd" & exit /b 0 )
38
+ if /i "%~1"=="open" ( call "%CMD_DIR%\abrir.cmd" & exit /b 0 )
39
+ if /i "%~1"=="serve" ( call "%CMD_DIR%\serve.cmd" & exit /b 0 )
40
+ if /i "%~1"=="help" goto :help
41
+ if /i "%~1"=="-h" goto :help
42
+ if /i "%~1"=="--help" goto :help
43
+ echo !C_RE![X]!C_RS! Comando desconocido: %~1
44
+ echo !C_GY!Usa: forge help!C_RS!
45
+ exit /b 1
46
+ )
47
+
48
+ REM ============================================================
49
+ REM MENU PRINCIPAL
50
+ REM ============================================================
51
+ :menu
52
+ cls
53
+ echo.
54
+ echo !C_CY!============================================!C_RS!
55
+ echo !C_BC! forgeGit!C_RS! !C_GY!- Menu!C_RS!
56
+ echo !C_CY!============================================!C_RS!
57
+ echo.
58
+ echo !C_BC!Trabajo diario:!C_RS!
59
+ echo !C_YE![1]!C_RS! Guardar cambios !C_GY!(commit)!C_RS!
60
+ echo !C_YE![2]!C_RS! Subir a GitHub !C_GY!(push)!C_RS!
61
+ echo !C_YE![3]!C_RS! Historial !C_GY!(ver commits)!C_RS!
62
+ echo.
63
+ echo !C_BC!Herramientas:!C_RS!
64
+ echo !C_YE![4]!C_RS! Snapshots !C_GY!(backup/restore)!C_RS!
65
+ echo !C_YE![5]!C_RS! Auditar cambios !C_GY!(diff report)!C_RS!
66
+ echo !C_YE![6]!C_RS! Abrir en VS Code
67
+ echo !C_YE![7]!C_RS! Servidor dev !C_GY!(auto-detect)!C_RS!
68
+ echo.
69
+ echo !C_BC!Sistema:!C_RS!
70
+ echo !C_YE![0]!C_RS! Salir
71
+ echo.
72
+ echo !C_CY!--------------------------------------------!C_RS!
73
+ echo.
74
+
75
+ set "OPT="
76
+ set /p "OPT= !C_BC!Opcion!C_RS!: "
77
+
78
+ if "!OPT!"=="1" ( call "%CMD_DIR%\save.cmd" & echo. & pause & goto :menu )
79
+ if "!OPT!"=="2" ( call "%CMD_DIR%\push.cmd" & echo. & pause & goto :menu )
80
+ if "!OPT!"=="3" ( call "%CMD_DIR%\historial.cmd" & echo. & pause & goto :menu )
81
+ if "!OPT!"=="4" ( call "%CMD_DIR%\snapshots.cmd" & echo. & pause & goto :menu )
82
+ if "!OPT!"=="5" ( call "%CMD_DIR%\auditar.cmd" & echo. & pause & goto :menu )
83
+ if "!OPT!"=="6" ( call "%CMD_DIR%\abrir.cmd" & echo. & pause & goto :menu )
84
+ if "!OPT!"=="7" ( call "%CMD_DIR%\serve.cmd" & echo. & pause & goto :menu )
85
+ if "!OPT!"=="0" goto :end
86
+ if /i "!OPT!"=="q" goto :end
87
+
88
+ goto :menu
89
+
90
+ REM ============================================================
91
+ REM HELP
92
+ REM ============================================================
93
+ :help
94
+ echo.
95
+ echo !C_CY!============================================!C_RS!
96
+ echo !C_BC! forgeGit!C_RS! !C_GY!- Ayuda!C_RS!
97
+ echo !C_CY!============================================!C_RS!
98
+ echo.
99
+ echo !C_BC!USO:!C_RS!
100
+ echo !C_WH!forge!C_RS! Menu interactivo
101
+ echo !C_WH!forge save!C_RS! Guardar cambios
102
+ echo !C_WH!forge push!C_RS! Subir a GitHub
103
+ echo !C_WH!forge snap!C_RS! Snapshots
104
+ echo !C_WH!forge log!C_RS! Historial
105
+ echo !C_WH!forge audit!C_RS! Auditar cambios
106
+ echo !C_WH!forge open!C_RS! Abrir en VS Code
107
+ echo !C_WH!forge serve!C_RS! Servidor de desarrollo
108
+ echo !C_WH!forge help!C_RS! Esta ayuda
109
+ echo.
110
+ goto :end
111
+
112
+ :end
113
+ endlocal
114
+ exit /b 0