@arela/uploader 1.0.24 → 1.1.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.
Files changed (79) hide show
  1. package/docs/AUTO_PROCESSING_PIPELINE.md +258 -0
  2. package/docs/COMPLETE_USAGE_GUIDE.md +1363 -0
  3. package/docs/DATABASESERVICE_IMPROVEMENTS.md +546 -0
  4. package/docs/PASO_2_TEST_RESULTS.md +298 -0
  5. package/docs/PASO_3_PLAN.md +385 -0
  6. package/docs/PHASE_1_FILE_DETECTION.md +366 -0
  7. package/docs/PHASE_2_API_INTEGRATION.md +426 -0
  8. package/docs/PHASE_3_DATABASE_MANAGEMENT.md +480 -0
  9. package/docs/PHASE_4_FILE_OPERATIONS.md +448 -0
  10. package/docs/PHASE_5_WATCH_MODE.md +450 -0
  11. package/docs/PHASE_6_SIGNAL_HANDLING.md +472 -0
  12. package/docs/PHASE_7_ADVANCED_FEATURES.md +560 -0
  13. package/docs/PLAN_WATCH_FEATURE.md +417 -0
  14. package/docs/README.md +480 -0
  15. package/docs/SCHEMA_ALIGNMENT_SUMMARY.md +301 -0
  16. package/docs/SMARTWATCH_DATABASE_REFACTORING.md +181 -0
  17. package/docs/SMART_WATCH_DATABASE_CHANGES.md +502 -0
  18. package/docs/TESTING_WATCH_MODE.md +212 -0
  19. package/docs/WATCHER_API_IMPLEMENTATION.md +520 -0
  20. package/docs/WATCHER_API_INTEGRATION.md +562 -0
  21. package/docs/WATCHER_SETUP_GUIDE.md +614 -0
  22. package/docs/WATCH_ARCHITECTURE.md +395 -0
  23. package/docs/WATCH_AUTO_PIPELINE.md +334 -0
  24. package/docs/WATCH_CONFIGURATION.md +267 -0
  25. package/docs/WATCH_USAGE_GUIDE.md +567 -0
  26. package/docs/commands.md +14 -0
  27. package/package.json +1 -1
  28. package/src/commands/IdentifyCommand.js +8 -0
  29. package/src/config/config.js +2 -2
  30. package/src/file-detection.js +42 -1
  31. package/src/scoring/scoring-engine.js +35 -7
  32. package/.vscode/settings.json +0 -1
  33. package/coverage/IdentifyCommand.js.html +0 -1462
  34. package/coverage/PropagateCommand.js.html +0 -1507
  35. package/coverage/PushCommand.js.html +0 -1504
  36. package/coverage/ScanCommand.js.html +0 -1654
  37. package/coverage/UploadCommand.js.html +0 -1846
  38. package/coverage/WatchCommand.js.html +0 -4111
  39. package/coverage/base.css +0 -224
  40. package/coverage/block-navigation.js +0 -87
  41. package/coverage/favicon.png +0 -0
  42. package/coverage/index.html +0 -191
  43. package/coverage/lcov-report/IdentifyCommand.js.html +0 -1462
  44. package/coverage/lcov-report/PropagateCommand.js.html +0 -1507
  45. package/coverage/lcov-report/PushCommand.js.html +0 -1504
  46. package/coverage/lcov-report/ScanCommand.js.html +0 -1654
  47. package/coverage/lcov-report/UploadCommand.js.html +0 -1846
  48. package/coverage/lcov-report/WatchCommand.js.html +0 -4111
  49. package/coverage/lcov-report/base.css +0 -224
  50. package/coverage/lcov-report/block-navigation.js +0 -87
  51. package/coverage/lcov-report/favicon.png +0 -0
  52. package/coverage/lcov-report/index.html +0 -191
  53. package/coverage/lcov-report/prettify.css +0 -1
  54. package/coverage/lcov-report/prettify.js +0 -2
  55. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  56. package/coverage/lcov-report/sorter.js +0 -210
  57. package/coverage/lcov.info +0 -1937
  58. package/coverage/prettify.css +0 -1
  59. package/coverage/prettify.js +0 -2
  60. package/coverage/sort-arrow-sprite.png +0 -0
  61. package/coverage/sorter.js +0 -210
  62. package/docs/API_ENDPOINTS_FOR_DETECTION.md +0 -647
  63. package/docs/API_RETRY_MECHANISM.md +0 -338
  64. package/docs/ARELA_IDENTIFY_IMPLEMENTATION.md +0 -489
  65. package/docs/ARELA_IDENTIFY_QUICKREF.md +0 -186
  66. package/docs/ARELA_PROPAGATE_IMPLEMENTATION.md +0 -581
  67. package/docs/ARELA_PROPAGATE_QUICKREF.md +0 -272
  68. package/docs/ARELA_PUSH_IMPLEMENTATION.md +0 -577
  69. package/docs/ARELA_PUSH_QUICKREF.md +0 -322
  70. package/docs/ARELA_SCAN_IMPLEMENTATION.md +0 -373
  71. package/docs/ARELA_SCAN_QUICKREF.md +0 -139
  72. package/docs/CROSS_PLATFORM_PATH_HANDLING.md +0 -597
  73. package/docs/DETECTION_ATTEMPT_TRACKING.md +0 -414
  74. package/docs/MIGRATION_UPLOADER_TO_FILE_STATS.md +0 -1020
  75. package/docs/MULTI_LEVEL_DIRECTORY_SCANNING.md +0 -494
  76. package/docs/QUICK_REFERENCE_API_DETECTION.md +0 -264
  77. package/docs/REFACTORING_SUMMARY_DETECT_PEDIMENTOS.md +0 -200
  78. package/docs/STATS_COMMAND_SEQUENCE_DIAGRAM.md +0 -287
  79. package/docs/STATS_COMMAND_SIMPLE.md +0 -93
@@ -0,0 +1,417 @@
1
+ # Plan de Implementación: Feature de Observación de Directorios (Watch)
2
+
3
+ ## 📋 Resumen Ejecutivo
4
+
5
+ Implementar una funcionalidad de **observación de directorios (Watch Mode)** que permita monitorear uno o varios directorios en tiempo real y ejecutar automáticamente la subida de archivos nuevos o cambios en la estructura de carpetas.
6
+
7
+ ---
8
+
9
+ ## 🎯 Objetivos
10
+
11
+ 1. Monitorear uno o múltiples directorios especificados
12
+ 2. Detectar cambios: archivos nuevos, modificados o eliminados
13
+ 3. Ejecutar automáticamente el pipeline de upload al detectar cambios
14
+ 4. Permitir diferentes estrategias de subida (archivo individual, estructura completa, etc.)
15
+ 5. Mantener logging detallado de eventos de watch
16
+ 6. Proporcionar opciones de configuración flexible
17
+
18
+ ---
19
+
20
+ ## 📐 Arquitectura Propuesta
21
+
22
+ ### 1. **WatchService** (Nuevo Servicio Principal)
23
+ **Ubicación**: `src/services/WatchService.js`
24
+
25
+ ```
26
+ WatchService
27
+ ├── Configuración de directorios a observar
28
+ ├── Inicialización de watchers
29
+ ├── Manejo de eventos (add, change, unlink)
30
+ ├── Debouncing de eventos
31
+ ├── Gestión de estado
32
+ └── Integración con UploadCommand
33
+ ```
34
+
35
+ **Responsabilidades**:
36
+ - Usar librería `chokidar` para observar cambios del filesystem
37
+ - Configurar watchers para múltiples directorios
38
+ - Implementar debouncing para evitar múltiples triggers rápidos
39
+ - Ejecutar callbacks de upload cuando se detecten cambios
40
+ - Mantener estadísticas de cambios detectados
41
+
42
+ ### 2. **WatchCommand** (Nuevo Comando CLI)
43
+ **Ubicación**: `src/commands/WatchCommand.js`
44
+
45
+ ```
46
+ WatchCommand
47
+ ├── Parsear opciones CLI
48
+ ├── Inicializar WatchService
49
+ ├── Manejar señales (SIGINT, SIGTERM)
50
+ ├── Mostrar estado en tiempo real
51
+ └── Manejo de errores
52
+ ```
53
+
54
+ **Responsabilidades**:
55
+ - Ejecutar el servicio de watch
56
+ - Mantener proceso activo
57
+ - Manejo graceful shutdown
58
+ - Mostrar feedback visual al usuario
59
+
60
+ ### 3. **Opciones de Configuración**
61
+
62
+ #### En `config.js`:
63
+ ```javascript
64
+ watch: {
65
+ enabled: boolean,
66
+ directories: string[], // Directorios a observar
67
+ usePolling: boolean, // Usar polling en lugar de eventos nativos
68
+ interval: number, // Intervalo de polling en ms
69
+ awaitWriteFinish: {
70
+ stabilityThreshold: number, // Esperar ms antes de trigger
71
+ pollInterval: number
72
+ },
73
+ debounceMs: number, // Debouncing de eventos
74
+ ignorePatterns: string[], // Patrones a ignorar (node_modules, .git, etc)
75
+ autoUploadOnChange: boolean, // Subir automáticamente
76
+ uploadStrategy: 'individual' | 'batch' | 'full-structure'
77
+ }
78
+ ```
79
+
80
+ #### En `.env`:
81
+ ```
82
+ WATCH_ENABLED=true
83
+ WATCH_DIRECTORIES=/path/to/dir1,/path/to/dir2
84
+ WATCH_DEBOUNCE_MS=1000
85
+ WATCH_AUTO_UPLOAD=true
86
+ WATCH_STRATEGY=batch
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 🏗️ Estructura de Archivos a Crear/Modificar
92
+
93
+ ### ✨ Nuevos Archivos
94
+
95
+ ```
96
+ src/
97
+ ├── services/
98
+ │ └── WatchService.js # Servicio principal de watch
99
+ ├── commands/
100
+ │ └── WatchCommand.js # Comando CLI para watch
101
+ └── utils/
102
+ └── WatchEventHandler.js # Manejador de eventos de watch
103
+ ```
104
+
105
+ ### 📝 Archivos a Modificar
106
+
107
+ ```
108
+ src/
109
+ ├── index.js # Agregar comando 'watch'
110
+ ├── config/config.js # Agregar configuración de watch
111
+ └── services/LoggingService.js # Mejorar logging para eventos de watch
112
+ ```
113
+
114
+ ### 📦 Dependencias a Agregar
115
+
116
+ ```json
117
+ {
118
+ "chokidar": "^3.6.0" // Observador de filesystem multiplataforma
119
+ }
120
+ ```
121
+
122
+ ---
123
+
124
+ ## 🔄 Flujo de Funcionamiento
125
+
126
+ ### 1. Inicio del Watch Mode
127
+ ```
128
+ Usuario ejecuta: arela watch --directories /path/to/folder
129
+
130
+ Validar configuración y directorios
131
+
132
+ Inicializar WatchService
133
+
134
+ Crear watchers para cada directorio
135
+
136
+ Mostrar mensaje "Watching directories..."
137
+
138
+ Mantener proceso activo (Ctrl+C para salir)
139
+ ```
140
+
141
+ ### 2. Detección de Cambios
142
+ ```
143
+ Chokidar detecta cambio
144
+
145
+ WatchEventHandler procesa evento
146
+
147
+ Aplicar debouncing (esperar eventos adicionales)
148
+
149
+ Determinar archivos afectados
150
+
151
+ Ejecutar estrategia de upload:
152
+ - individual: subir solo el archivo nuevo/modificado
153
+ - batch: subir grupo de cambios recientes
154
+ - full-structure: subir estructura completa afectada
155
+
156
+ Logging de resultado
157
+ ```
158
+
159
+ ### 3. Manejo de Errores
160
+ ```
161
+ Error detectado durante watch
162
+
163
+ Loguear error con contexto
164
+
165
+ Continuar observando (no salir)
166
+
167
+ Opcionalmente notificar usuario
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 🛠️ Interfaces de Comando CLI
173
+
174
+ ### Comando Principal
175
+ ```bash
176
+ # Watch modo básico (usa config)
177
+ arela watch
178
+
179
+ # Especificar directorios
180
+ arela watch --directories ./uploads,./documents
181
+
182
+ # Con opciones adicionales
183
+ arela watch \
184
+ --directories ./uploads \
185
+ --strategy batch \
186
+ --debounce 2000 \
187
+ --batch-size 10 \
188
+ --auto-detect \
189
+ --verbose
190
+
191
+ # Watch con configuración personalizada
192
+ arela watch --config ./watch-config.json
193
+ ```
194
+
195
+ ### Opciones Disponibles
196
+ ```
197
+ --directories <paths> Directorios a observar (separados por coma)
198
+ --strategy <strategy> batch|individual|full-structure (default: batch)
199
+ --debounce <ms> Debounce en milisegundos (default: 1000)
200
+ --batch-size <size> Tamaño de batch para upload (default: 10)
201
+ --poll <ms> Usar polling cada N ms
202
+ --ignore <patterns> Patrones a ignorar
203
+ --auto-detect Detección automática de documentos
204
+ --auto-organize Organización automática
205
+ --verbose Modo verbose
206
+ --dry-run Simular cambios sin subir
207
+ --config <path> Cargar configuración de archivo
208
+ ```
209
+
210
+ ---
211
+
212
+ ## 📊 Estados y Transiciones
213
+
214
+ ```
215
+ ┌─────────────────┐
216
+ │ STOPPED │
217
+ └────────┬────────┘
218
+ │ arela watch
219
+
220
+ ┌─────────────────┐
221
+ │ INITIALIZING │◄───────────────────────┐
222
+ └────────┬────────┘ │
223
+ │ │
224
+ ↓ Watchers listos │
225
+ ┌─────────────────┐ │
226
+ │ WATCHING │ │
227
+ │ │ │
228
+ │ (detectando) │ │
229
+ └────────┬────────┘ │
230
+ │ │
231
+ ├─► Archivo nuevo/modificado │
232
+ │ ↓ │
233
+ │ ┌──────────────┐ │
234
+ │ │ PROCESSING │ │
235
+ │ └──────┬───────┘ │
236
+ │ │ Upload completado │
237
+ │ ↓ │
238
+ │ ┌──────────────┐ │
239
+ │ │ UPLOADED │────────────────┤
240
+ │ └──────────────┘ │
241
+ │ │
242
+ ├─► Ctrl+C │
243
+ ↓ │
244
+ ┌─────────────────┐ │
245
+ │ STOPPING │────────────────────────┤
246
+ └────────┬────────┘ │
247
+ │ Cleanup completado │
248
+ ↓ │
249
+ ┌─────────────────┐ │
250
+ │ STOPPED │────────────────────────┘
251
+ └─────────────────┘
252
+ ```
253
+
254
+ ---
255
+
256
+ ## 📋 Checkpoints de Implementación
257
+
258
+ ### **Fase 1: Fundaciones** ✅
259
+ - [ ] Agregar dependencia `chokidar` a `package.json`
260
+ - [ ] Crear `WatchService.js` con estructura básica
261
+ - [ ] Implementar métodos de inicialización y limpieza
262
+ - [ ] Crear `WatchCommand.js` básico
263
+ - [ ] Agregar comando `watch` a `index.js`
264
+
265
+ ### **Fase 2: Funcionalidad Core** 🔧
266
+ - [ ] Implementar manejo de eventos (add, change, unlink)
267
+ - [ ] Agregar debouncing de eventos
268
+ - [ ] Implementar detección de cambios
269
+ - [ ] Crear `WatchEventHandler.js`
270
+ - [ ] Integrar con `UploadCommand`
271
+
272
+ ### **Fase 3: Configuración** ⚙️
273
+ - [ ] Agregar opciones de watch a `config.js`
274
+ - [ ] Implementar parseo de variables de ambiente
275
+ - [ ] Crear validador de configuración
276
+ - [ ] Agregar opciones CLI al comando `watch`
277
+
278
+ ### **Fase 4: Estrategias de Upload** 🎯
279
+ - [ ] Implementar estrategia `individual`
280
+ - [ ] Implementar estrategia `batch`
281
+ - [ ] Implementar estrategia `full-structure`
282
+ - [ ] Sistema de selección de estrategia
283
+
284
+ ### **Fase 5: Logging y Monitoreo** 📊
285
+ - [ ] Mejorar logging de eventos de watch
286
+ - [ ] Agregar estadísticas en tiempo real
287
+ - [ ] Mostrar progress bars para uploads
288
+ - [ ] Sistema de notificaciones de error
289
+
290
+ ### **Fase 6: Manejo de Señales y Cleanup** 🛑
291
+ - [ ] Implementar manejo de SIGINT/SIGTERM
292
+ - [ ] Graceful shutdown de watchers
293
+ - [ ] Finalización de uploads en progreso
294
+ - [ ] Reporte final de sesión
295
+
296
+ ### **Fase 7: Testing y Documentación** 📚
297
+ - [ ] Crear ejemplos de uso
298
+ - [ ] Actualizar README.md
299
+ - [ ] Documentar opciones CLI
300
+ - [ ] Crear guía de troubleshooting
301
+
302
+ ---
303
+
304
+ ## 🔍 Consideraciones Técnicas
305
+
306
+ ### 1. **Rendimiento**
307
+ - Usar debouncing para evitar múltiples triggers
308
+ - Implementar `awaitWriteFinish` para esperar escritura completa
309
+ - Considerar `usePolling` para sistemas de archivos remotos
310
+ - Limitar batch size para evitar sobrecargar sistema
311
+
312
+ ### 2. **Compatibilidad Multiplataforma**
313
+ - `chokidar` maneja diferencias entre Windows, macOS, Linux
314
+ - Usar rutas con `/` (chokidar normaliza automáticamente)
315
+ - Probar con UNC paths en Windows
316
+
317
+ ### 3. **Manejo de Errores**
318
+ - No detener watch si falla un upload
319
+ - Loguear errores para debugging
320
+ - Reintentar según configuración
321
+
322
+ ### 4. **Seguridad**
323
+ - Validar directorios especificados existen y son legibles
324
+ - Respetar permisos del filesystem
325
+ - No escalar privilegios automáticamente
326
+
327
+ ### 5. **Consumo de Recursos**
328
+ - Limitar número de watchers simultáneos
329
+ - Implementar cleanup apropiado de listeners
330
+ - Monitorear memoria en watches de larga duración
331
+
332
+ ---
333
+
334
+ ## 📌 Variables de Ambiente Nuevas
335
+
336
+ ```bash
337
+ # Habilitar/deshabilitar watch mode
338
+ WATCH_ENABLED=true
339
+
340
+ # Directorios a observar (separados por coma)
341
+ WATCH_DIRECTORIES=/ruta/a/carpeta1,/ruta/a/carpeta2
342
+
343
+ # Estrategia de upload
344
+ WATCH_STRATEGY=batch # Options: individual|batch|full-structure
345
+
346
+ # Debouncing en milisegundos
347
+ WATCH_DEBOUNCE_MS=1000
348
+
349
+ # Polling interval (en lugar de eventos nativos)
350
+ WATCH_POLL_INTERVAL=100
351
+
352
+ # Auto upload cuando se detecten cambios
353
+ WATCH_AUTO_UPLOAD=true
354
+
355
+ # Tamaño de batch para uploads
356
+ WATCH_BATCH_SIZE=10
357
+
358
+ # Patrones a ignorar
359
+ WATCH_IGNORE_PATTERNS=node_modules,\.git,\.env
360
+
361
+ # Detectar tipos de documento automáticamente
362
+ WATCH_AUTO_DETECT=false
363
+
364
+ # Organizar automáticamente
365
+ WATCH_AUTO_ORGANIZE=false
366
+ ```
367
+
368
+ ---
369
+
370
+ ## 🧪 Plan de Testing Manual
371
+
372
+ ```bash
373
+ # Test 1: Watch básico
374
+ arela watch --directories ./test-folder --verbose
375
+
376
+ # Test 2: Crear archivo en carpeta observada
377
+ touch ./test-folder/test-file.pdf
378
+
379
+ # Test 3: Modificar archivo
380
+ echo "test content" >> ./test-folder/test-file.pdf
381
+
382
+ # Test 4: Eliminar archivo
383
+ rm ./test-folder/test-file.pdf
384
+
385
+ # Test 5: Múltiples directorios
386
+ arela watch --directories ./folder1,./folder2
387
+
388
+ # Test 6: Dry run
389
+ arela watch --directories ./test-folder --dry-run
390
+
391
+ # Test 7: Configuración desde archivo
392
+ arela watch --config ./watch-config.json
393
+ ```
394
+
395
+ ---
396
+
397
+ ## 🚀 Próximos Pasos
398
+
399
+ 1. ✅ **Revisar y ajustar este plan** con feedback del equipo
400
+ 2. **Crear estructura de archivos** base
401
+ 3. **Implementar Fase 1** (Fundaciones)
402
+ 4. **Testing incremental** después de cada fase
403
+ 5. **Documentación** mientras se avanza
404
+
405
+ ---
406
+
407
+ ## 📚 Referencias Útiles
408
+
409
+ - **Chokidar Docs**: https://github.com/paulmillr/chokidar
410
+ - **Node.js fs.watch vs fs.watchFile**: Node.js official docs
411
+ - **Debouncing**: https://github.com/lodash/lodash/blob/master/debounce.js
412
+
413
+ ---
414
+
415
+ **Versión del Plan**: 1.0
416
+ **Fecha**: Hoy
417
+ **Estado**: 🟢 Listo para Implementación