Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
7.1 KiB
JSON
1 line
7.1 KiB
JSON
{"repo": "andresperez0401/taskai-manager", "files": {"README.md": {"cbfb238c8571dfaec1a9c07da7c7a770824d0318": {"t": 1786068120.825946, "n": 6616, "h": "1d4da53742e94391", "c": "# Task Manager AI\n\nAplicación full-stack de gestión de tareas con chat IA, tool-calling real sobre CRUD y resumen diario asistido por IA.\n\n## Stack\n\n- Backend: FastAPI, SQLAlchemy async, Alembic, PostgreSQL (Neon), Pydantic, OpenAI SDK (compatible con DeepSeek)\n- Frontend: React, Vite, TypeScript, Tailwind\n- AI: provider compatible con OpenAI API (DeepSeek), con fallback controlado\n\n## Requisitos previos\n\nInstala lo siguiente en tu máquina:\n\n1. Python 3.14\n2. Pipenv\n3. Node.js 20+ y npm\n4. PostgreSQL o cuenta Neon\n\nComandos (PowerShell) para verificar:\n\n```powershell\npython --version\npipenv --version\nnode --version\nnpm --version\n```\n\n## Estructura de proyecto\n\n- Root: scripts de orquestación y documentación\n- backend: API, modelos, migraciones, integración IA\n- frontend: UI y cliente HTTP\n\n## Variables de entorno\n\nNunca hardcodees secretos. Usa archivos .env locales y no subas claves reales al repositorio.\n\n### Backend: archivo backend/.env\n\nEjemplo completo:\n\n```ini\nAPP_NAME=task-ai-manager\nAPP_ENV=development\nAPP_DEBUG=true\nAPP_CORS_ALLOW_ALL_DEV=true\nAPI_PREFIX=/api\nAPP_HOST=0.0.0.0\nAPP_PORT=8010\nBACKEND_CORS_ORIGINS=http://localhost:5173,http://localhost:5174,http://localhost:8010\nFRONTEND_URL=http://localhost:5174\nBACKEND_URL=http://localhost:8010\n\n# Database\nDATABASE_URL=postgresql://user:pass@host-pooler/db?sslmode=require&channel_binding=require\n# Opcional para migraciones (directa, no pooler)\nDIRECT_DATABASE_URL=postgresql://user:pass@host-direct/db?sslmode=require&channel_binding=require\n\n# AI Provider\nAI_ENABLED=true\n\n# Provider: openai | deepseek \nAI_PROVIDER=deepseek\n\n# Model name (examples: gpt-4.1-mini, deepseek-chat)\nAI_MODEL=deepseek-chat\n\n# key \nAI_API_KEY=replace_me\n\n\nAI_BASE_URL=https://api.deepseek.com\nAI_TIMEOUT_SECONDS=30\nAI_ALLOW_FALLBACK=true\n\n# Compat Anthropic opcional\nANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic\nANTHROPIC_API_KEY=replace_me\nANTHROPIC_MODEL=deepseek-chat\n```\n\n### Frontend: archivo frontend/.env\n\n```ini\nVITE_API_BASE_URL=http://127.0.0.1:8010\n```\n\n### Root: archivo .env (opcional)\n\nSolo si quieres centralizar algunas variables de referencia para scripts/documentación.\n\n## Instalación completa\n\n### 1) Instalar dependencias de root\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus\nnpm install\n```\n\n### 2) Instalar backend\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/backend\npipenv install\n```\n\n### 3) Instalar frontend\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/frontend\nnpm install\n```\n\n## Inicialización de base de datos\n\nCon backend/.env configurado:\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/backend\npipenv run migrate\n```\n\nNotas:\n\n- DATABASE_URL se usa en runtime de API\n- DIRECT_DATABASE_URL se usa para migraciones si está definido\n\n## Arranque en desarrollo\n\nRecomendado en terminales separadas.\n\n### Backend\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/backend\npipenv run start\n```\n\n### Frontend\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/frontend\nnpm run dev -- --host 0.0.0.0 --port 5174\n```\n\n### Opción desde root\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus\nnpm run dev\n```\n\n## Endpoints principales\n\nHealth:\n\n- GET /health\n- GET /api/health\n- GET /ai/health\n- GET /api/ai/health\n- GET /db/health\n- GET /api/db/health\n\nChat:\n\n- POST /ai/chat\n- POST /api/ai/chat\n- POST /api/ai/test (prueba real de provider)\n\nTasks:\n\n- GET /api/tasks\n- POST /api/tasks\n- GET /api/tasks/:id\n- PATCH /api/tasks/:id\n- PATCH /api/tasks/:id/complete\n- DELETE /api/tasks/:id\n\nSummary:\n\n- GET /api/summary/today\n\n## Verificación rápida (smoke test)\n\n### 1) Health general\n\n```powershell\nInvoke-RestMethod -Method GET -Uri http://127.0.0.1:8010/health\n```\n\n### 2) Health IA real\n\n```powershell\nInvoke-RestMethod -Method GET -Uri http://127.0.0.1:8010/ai/health?probe=true | ConvertTo-Json -Depth 8\n```\n\n### 3) Health DB\n\n```powershell\nInvoke-RestMethod -Method GET -Uri http://127.0.0.1:8010/db/health | ConvertTo-Json -Depth 8\n```\n\n### 4) Prueba real de DeepSeek\n\n```powershell\nInvoke-RestMethod -Method POST -Uri http://127.0.0.1:8010/api/ai/test -ContentType \"application/json\" -Body '{\"message\":\"responde solo OK\"}' | ConvertTo-Json -Depth 8\n```\n\n### 5) Crear tarea por chat (tool-calling)\n\n```powershell\n$payload = '{\"message\":\"crea una tarea llamada demo desde chat para 2099-06-01T09:00:00Z con prioridad high\",\"session_id\":\"smoke-chat\"}'\nInvoke-RestMethod -Method POST -Uri http://127.0.0.1:8010/api/ai/chat -ContentType \"application/json\" -Body $payload | ConvertTo-Json -Depth 12\n```\n\n## Contrato de respuesta del chat\n\nEjemplo de éxito:\n\n```json\n{\n \"data\": {\n \"success\": true,\n \"provider_available\": true,\n \"fallback_mode\": false,\n \"answer\": \"Task created successfully...\",\n \"actions\": [\n {\n \"tool_name\": \"create_task\",\n \"arguments\": { \"title\": \"...\" },\n \"result\": { \"task\": { \"id\": 123, \"status\": \"pending\" } }\n }\n ],\n \"tasks_changed\": [\n { \"id\": 123, \"operation\": \"create_task\" }\n ],\n \"history\": [],\n \"error\": null\n },\n \"meta\": {}\n}\n```\n\nEjemplo de error de acción (sin romper chat):\n\n```json\n{\n \"data\": {\n \"success\": true,\n \"provider_available\": true,\n \"fallback_mode\": false,\n \"answer\": \"I cannot create a task with a due date in the past...\",\n \"actions\": [\n {\n \"tool_name\": \"create_task\",\n \"result\": { \"error\": \"400: Due date cannot be in the past\", \"tool\": \"create_task\" }\n }\n ]\n }\n}\n```\n\n## Tests\n\nBackend:\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/backend\npipenv run pytest -q\n```\n\nFrontend build:\n\n```powershell\ncd c:/Proyectos/Prueba_Projectus/frontend\nnpm run build\n```\n\n## Troubleshooting\n\n### Si aparece \"modo degradado\" pero DeepSeek tiene saldo\n\n1. Asegúrate de que frontend apunte al puerto correcto:\n - frontend/.env debe tener VITE_API_BASE_URL=http://127.0.0.1:8010\n2. Verifica que no haya múltiples backends activos en puertos distintos.\n3. Haz hard refresh del navegador (Ctrl+F5).\n\n### Limpiar procesos en Windows\n\n```powershell\nGet-Process -Name uvicorn,python,node -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue\n```\n\n### Validar puertos ocupados\n\n```powershell\nnetstat -ano | Select-String ':8010'\nnetstat -ano | Select-String ':5174'\n```\n\n### Errores comunes\n\n- AI_AUTH_ERROR: API key inválida\n- AI_BILLING_ERROR: saldo/créditos insuficientes\n- AI_TIMEOUT: timeout de provider\n- AI_CONFIG_ERROR: variables incompletas o payload inválido\n\n## Seguridad\n\n1. No subas llaves reales ni cadenas de conexión en .env.example.\n2. Si una key fue expuesta, rótala de inmediato.\n3. Usa placeholders replace_me en archivos versionados.\n"}}}} |