Spaces:
Running
Running
Commit History
Today
-
fix(byok): inyectar Depends(get_user_keys) en endpoints y aislar credenciales en produccion
c601882 -
feat(ui): credenciales guiadas por credencial con DATABASE_URL y auto-conexión BYOK
Fase 10: CredentialsModal.astro y AjustesPerfil.astro incluyen el campo Supabase Database URI (DATABASE_URL — Direct / Transaction o Session Pooler) con ids #cred-db-url y #cfg-db-url, más bloques <details> clic por clic con ejemplos de formato para Supabase (Connect -> Connection String -> URI -> Session pooler 5432 / Transaction pooler 6543), Copernicus CDSE y Groq, alineados con .env.example de la Fase 8. En app.js: creds.dbUrl se envía como X-User-Database-Url en authHeaders(), updateStatus() consulta ./api/credentials/status con authHeaders(), y al guardar credenciales o ajustes la función compartida connectUserDatabase() invoca POST /api/credentials/connect-db notificando si se inicializó el esquema PostGIS o cuántas parcelas existentes se detectaron, recargando loadParcels() y el perfil; logout() limpia ambos campos. Se añade test dedicado en tests/e2e/test_ui_smoke.py que verifica campos, guías y flujo en el bundle compilado. Verificado: cd frontend && pnpm run check (0 errores…5a160ef -
feat: F10 UI credentials guided BYOK connection flow
- Add DATABASE_URL field in CredentialsModal.astro (#cred-db-url) and AjustesPerfil.astro (#cfg-db-url) with step-by-step <details> blocks for Supabase (Connect→Connection String→Transaction/Session Pooler), Copernicus and Groq - Update authHeaders() in app.js to send X-User-Database-Url - Add POST /api/credentials/connect-db on save with schema init notification and loadParcels() reload - Update updateStatus() to include authHeaders() when calling ./api/credentials/status - Update tests/e2e/test_ui_smoke.py with #cred-db-url and #cfg-db-url checks - Clean build: pnpm run check && ./scripts/build.sh pass189ebbe
Yesterday
-
feat(ui): agregar selección y expansión de variables satelitales
Se incorpora el selector de variables satelitales Sentinel-2 en la creación de parcelas, con preselección por cultivo, validación de al menos un índice y envío de selected_indices en POST/PATCH /api/fields. En parcelas existentes se sincronizan los checkboxes de Ajustes y Reproceso con la parcela activa, se muestran chips de variables activas y se permite agregar o reprocesar índices desde Teledetección, enviando selected_indices e indices a la API. Co-Authored-By: DeepSeek <noreply@deepseek.com>91bd285
9 days ago
-
refactor(frontend): modulariza las vistas de dominio y reduce index.astro
Se extraen los paneles de negocio (resumen, ajustes, creación, teledetección, meteorología, análisis, dron, datos y perfil) a componentes bajo components/modules, y el modal de reproceso a components/ui. Se añade Layout.astro con el shell HTML, los estilos inline y la carga del script cliente, y ControlPanel.astro para el panel central. El script cliente se conserva íntegro como script clásico inline mediante una importación ?raw, preservando los handlers globales y la Regla de Oro. index.astro queda en 39 líneas y se corrige el handler onsubmit obsoleto. Co-Authored-By: DeepSeek <noreply@deepseek.com>227a41a -
refactor(frontend): extrae sidebar, cabecera y modales base
Se desacoplan la barra lateral, la cabecera del panel central, el panel de credenciales BYOK y el modal de telemetría en componentes Astro dedicados bajo components/layout y components/ui. El markup conserva todos los IDs y clases originales para no alterar los selectores del script cliente ni los estilos Tailwind. Co-Authored-By: DeepSeek <noreply@deepseek.com>c76c615
-
fix(weather): fix hourly 0 degrees chart bug due to timezone and end timestamp query limit
1599ae4 -
feat(weather): map database weather fields to mockup vocab and add detailed backend logging
14a00e1 -
feat(weather): implement client-side controller logic, indicators computation, and interactive charts
8c10540 -
feat(frontend): refactor weather tab layout to multi-resolution mockup dashboard
e343575 -
style(frontend): estiliza bordes, fuentes tipográficas y elementos de interfaz de usuario
fe9136b
-
fix(frontend): repara activacion del modo dibujo y unifica formulario de creacion en Seccion 2
Se eliminó el panel redundante farm-view-creator del dropdown del mapa en la Sección 3 para evitar conflictos de oyentes de eventos. Se implementó la reubicación de eventos para la creación guiada de parcelas, donde el botón del widget flotante de 'Agregar Nueva Parcela' y el de Ajustes de Parcela en Sección 2 inician correctamente el modo de dibujo (enableDrawingMode). Adicionalmente, se actualizaron los oyentes de eventos CREATED, DRAWSTART y DRAWVERTEX en initMap para calcular el área geodésica, preestablecer el nombre sugerido del lote y cambiar dinámicamente la Sección 2 al Paso B (Detalles de Lote) y Paso C (Carga/Procesamiento).8fffa2a -
feat(frontend): implementa asistente guiado de creacion de parcelas en tres pasos
Se integró el flujo interactivo de creación de parcelas: Paso A (Instrucciones en Sección 2 y dibujo en mapa), Paso B (Formulario de nombre sugerido y variedad de cultivo en Sección 2 tras finalizar dibujo) y Paso C (Pantalla de carga con procesamiento simulado de 3s). Se agregó un banner de dibujo superior en el mapa con botón Deshacer (deleteLastVertex). Tras la creación del lote, se disparan tres notificaciones Toast escalonadas e independientes (Meteorología, Satélite y Asistente) y se abre el chat para la nueva parcela.7fa3158 -
feat(frontend): rediseña vista resumen con mapa a pantalla completa y selector flotante
Se modificó 'tab-resumen' para que la Sección 3 muestre el mapa a pantalla completa sin los KPIs y gráficos inferiores. Se implementó un widget flotante en la esquina superior izquierda del mapa que incluye información del perfil y permite seleccionar parcelas activas, ver sus ajustes en la Sección 2 (mediante el botón de engranaje) o agregar nuevas parcelas (cambiando internamente al formulario de creación/demo). Adicionalmente, al hacer clic en 'Resumen', la Sección 2 se activa por defecto con el chat RAG.e6710ac -
fix(frontend): corrige posicionamiento del dropdown de perfil en sidebar colapsado
Se agregaron reglas de CSS inline para detectar cuando el sidebar no está expandido y reubicar de forma absoluta el dropdown a la derecha del mismo (#sidebar:not(.expanded) #profile-dropdown), estableciendo un ancho fijo de 14rem (w-56) y evitando el desbordamiento de texto sobre el panel de visualización principal.4b4563c -
feat(frontend): rediseño de UI en tres secciones y formulario de ajustes de parcelas
Reestructuración de index.astro en tres secciones: sidebar colapsable de iconos (Sección 1), panel central fijo con alternador de Ajustes y Chat RAG vía logo de branding (Sección 2), y panel derecho dinámico de visualizaciones de mapas, satélite, clima y análisis cruzado con botón de regreso al mapa principal (Sección 3). Implementado autoguardado (autosave on blur) para los 10 atributos de la parcela.8d11f69
-
feat(chat): añade contexto de chat por parcela y sincroniza tareas
Se integró el parámetro 'field_id' en la base de datos (chat_messages) y APIs para acotar el historial y las respuestas del asistente agéntico según la parcela activa. Además, se reestructuró 'docs/task/tareas.md' documentando las fases 13, 14 y 15 como finalizadas y se corrigieron advertencias de longitud de línea (Ruff) en todo el backend.3aee0ae -
feat(ui): añadir weather_data al explorador de datos
6d27062 -
feat(weather): migrar consulta de open-meteo de on-demand a persistencia horaria en base de datos
784f348
-
feat(db): elimina tabla ndvi_timeseries (legacy)
Migración 0006 DROP TABLE ndvi_timeseries y sus políticas RLS. Elimina la tabla del ALLOWED_TABLES en data.py, remueve funciones deprecated (upsert_ndvi_points, get_ndvi_series) de repositories.py, actualiza frontend ER diagram y tests de integración.29437e9 -
fix(ui): elimina ndvi_timeseries de tablas del Explorador
Quita ndvi_timeseries de TABLES (deprecated) y añade plant_counts. Refresca el navegador para probar.069ae1f -
fix(ui): corrige parseo de tipos SQL en diagrama ER mermaid
Usa shortType() con includes() para mapear timestamp/double/USER-DEFINED a tipos sin espacios que mermaid entienda. Corrige error 'Expecting ATTRIBUTE_WORD got BLOCK_STOP'.58b972e -
fix(ui): corrige renderizado de diagrama ER y reposiciona layout
Inicializa mermaid con securityLevel loose antes de renderizar. Diagrama ER ahora es un card full-width debajo del título de Explorador de Datos. Tablas disponibles permanecen solo en el sidebar. Tabla names sin comillas en mermaid.483e546 -
feat(ui): añade modal reprocess, diagrama ER y telemetría en frontend
Agrega botón ámbar Reprocesar con modal de 3 modos (indices/weather/all) y progreso. Añade diagrama ER interactivo (Mermaid JS) en Explorador de Datos mediante GET /api/data/schema. Añade Mermaid CDN. Incluye vegetation_indices en TABLES. Añade logging de telemetría (agrovision.*) al console del navegador.39b233c -
feat(teledeteccion): añade índices espectrales EVI, SAVI, NDWI, NDRE (Fase 13)
Nuevos 4 índices sobre Sentinel-2: core/indices.py (funciones puras), remote_sensing.py (evalscripts genéricos + index_series_monthly/index_heatmap_png), api/vegetation.py (router parametrizado), migración 0004_indices.sql, repositorios upsert/get, selector UI con rangos dinámicos, y 14 tests unitarios.8f8389b
-
feat(fase-11-12): explorador de datos y visor de telemetría en UI
Fase 11: Pestaña Explorador de Datos con GET /api/data/{table} y POST /api/data/query (solo SELECT, máx 1000 filas). Fase 12: Endpoint GET /api/events/all para eventos persistidos, modal de telemetría con fallback a buffer en memoria, y status dinámico (verde/ámbar/rojo) según credenciales disponibles vía /api/credentials/status.50b8a66 -
feat: add data explorer tab, enforce BYOK in production, detect env
df71cfc -
feat(ui): instrumenta telemetria en la UI con track() y handler de errores (Fase 9)
a1bd836 -
feat(ui): click en parcela vuela a su polígono + dibuja parcelas en el mapa
- /api/fields incluye geojson (ST_AsGeoJSON) por parcela. - Mapa de Creación de Parcelas dibuja los polígonos guardados (capa verde) y hace fitBounds al cargar; click en un item de la lista -> flyToBounds del polígono. - Verificado con Playwright (click en 'Lote NDVI' vuela a su polígono; 0 errores).d17e4f4 -
fix(ui): sidebar responsive robusto + mapa (satélite/relieve) + parcela demo + botón .env
- Sidebar: estado por CSS propio (is-open móvil / is-collapsed desktop) porque Tailwind v4 usa la propiedad 'translate' y el transform inline no la cancelaba; plegar/reabrir en desktop, drawer + backdrop en móvil (backdrop md:hidden para no interceptar en desktop). - Mapa de parcelas: capas Satélite (Esri) / Normal (OSM) / Relieve (OpenTopoMap), centrado en Lomas de Lachay; botón 'Cargar parcela demo (Lomas de Lachay)'. - Credenciales: botón 'Revisar .env del servidor' + endpoint GET /api/credentials/status (solo presencia, sin valores) para usar las llaves del .env sin reescribirlas. - Verificado con Playwright (desktop plegado, móvil drawer, satélite, .env detectado).ef1afea -
feat(ui): UI Astro completa servida por el gateway (Fase 8 — vistas, responsive, plegable)
- index.astro: SPA hash-routing con los 6 módulos (look del mockup), responsive + sidebar/footer plegables; Leaflet+Leaflet-draw (parcelas), Chart.js (NDVI/clima), heatmap, chat, credenciales efímeras (X-User-* en memoria), API por fetch relativo. - main.py: monta StaticFiles(html=True) en / (tras /api y /shiny) -> sirve la UI Astro. - scripts/build_ui.ps1: pnpm build -> backend/static. backend/Dockerfile: etapa Node compila Astro y la copia. docker-compose: sin servicio ui; frontend/Dockerfile eliminado. - ejecucion.md: flujo de UI Astro (gateway en / · dev :4321 · Shiny legacy :8001). - Verificado en vivo con Playwright (capturas en .playwright-mcp/).26161c7
-
feat(ui): Shiny -> backend/dashboard.py (legacy) + scaffold Astro+Tailwind (Fase 8, SF8.1)
- Reubica la UI Shiny a backend/dashboard.py (montable en /shiny, legacy); frontend/ queda para Astro. Ajusta run_ui.ps1 y README al nuevo path. - Scaffold Astro 5 + Tailwind v4 (plugin @tailwindcss/vite, NO @astrojs/tailwind): package.json, astro.config.mjs (output static + inlineStylesheets 'always' = Regla de Oro + proxy /api y /shiny en dev), tsconfig, src/pages/index.astro, src/styles/global.css. - pnpm-workspace.yaml (allowBuilds) para que pnpm 11 corra esbuild/sharp; build verificado.68ec720