{"_id":"@asuarezz/scout","_rev":"3-0327071087a5f6e887e9a4e2c579c576","name":"@asuarezz/scout","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@asuarezz/scout","version":"0.1.0","keywords":["cli","prospecting","sales","ai","gemini","google-places","prd"],"author":{"url":"https://github.com/AndresSuarezz","name":"Andrés Suárez","email":"anfesuguito22@gmail.com"},"license":"MIT","_id":"@asuarezz/scout@0.1.0","maintainers":[{"name":"andressuarezz","email":"anfesuguito22@gmail.com"}],"homepage":"https://github.com/AndresSuarezz/scout","bugs":{"url":"https://github.com/AndresSuarezz/scout/issues"},"bin":{"scout":"dist/cli.js"},"dist":{"shasum":"8de61fc9f03cf5bd7c46f13e652261382456cb74","tarball":"https://registry.npmjs.org/@asuarezz/scout/-/scout-0.1.0.tgz","fileCount":5,"integrity":"sha512-8AcjSj7GvWi+qDVZw80HXm9PGCUyyvP1B9yg33MT1SoHzwnDtfJXH6j80JB73V/CJU8VXRZ/SmCUKeBvNfPCmg==","signatures":[{"sig":"MEUCIFIpB6XPkYefvTF+FoAptQc+vQqXPLc0erlFKUQjttpeAiEAsP1dY7LvyBOW5hFfh1G4hb66ioTIfwVaDOkHkC3FlUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98020},"type":"module","engines":{"node":">=18"},"gitHead":"7348b53048dd148bfd2b21bc16be10238acf15df","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup","start":"node dist/cli.js","format":"prettier --write src","lint:fix":"eslint src --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"andressuarezz","email":"anfesuguito22@gmail.com"},"repository":{"url":"git+https://github.com/AndresSuarezz/scout.git","type":"git"},"_npmVersion":"10.8.2","description":"CLI de prospección técnica: encuentra negocios sin web y genera PRDs asistidos por IA","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ink":"^5.0.0","conf":"^13.0.0","react":"^18.3.1","ink-spinner":"^5.0.0","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@google/generative-ai":"^0.21.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","eslint":"^9.0.0","vitest":"^2.0.0","globals":"^17.5.0","prettier":"^3.3.0","typescript":"^5.5.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@vitest/coverage-v8":"^2.0.0","ink-testing-library":"^3.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/scout_0.1.0_1777580105323_0.2758744199725265","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@asuarezz/scout","version":"0.1.1","keywords":["cli","prospecting","sales","ai","gemini","google-places","prd"],"author":{"url":"https://github.com/AndresSuarezz","name":"Andrés Suárez","email":"anfesuguito22@gmail.com"},"license":"MIT","_id":"@asuarezz/scout@0.1.1","maintainers":[{"name":"andressuarezz","email":"anfesuguito22@gmail.com"}],"homepage":"https://github.com/AndresSuarezz/scout","bugs":{"url":"https://github.com/AndresSuarezz/scout/issues"},"bin":{"scout":"dist/cli.js"},"dist":{"shasum":"1c3e2f516c405810f9ac369cb755d2ea624a8e80","tarball":"https://registry.npmjs.org/@asuarezz/scout/-/scout-0.1.1.tgz","fileCount":5,"integrity":"sha512-svQvk0OOAmwA4WeYXgYvlDCKszRu7XT6oWsRMkIPTnKfAEJ3RlM1cDmxhmXQej4jSrO9npL5r4guI7osoqI2Zg==","signatures":[{"sig":"MEQCIEqGTy8INOOA3Hz/zxuxhUC1Y2UgCudVTQKTXTyHCBMIAiA4DdCjC9nRAAblzZsRiLYUBIXGksH3PIJu+jvsCYoJrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168205},"type":"module","engines":{"node":">=18"},"gitHead":"e6dcd52ca614d1016237a0bdb398c499ece597db","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup","start":"node dist/cli.js","format":"prettier --write src","lint:fix":"eslint src --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"andressuarezz","email":"anfesuguito22@gmail.com"},"repository":{"url":"git+https://github.com/AndresSuarezz/scout.git","type":"git"},"_npmVersion":"10.8.2","description":"CLI de prospección técnica: encuentra negocios sin web y genera PRDs asistidos por IA","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ink":"^5.0.0","conf":"^13.0.0","react":"^18.3.1","exceljs":"^4.4.0","ink-spinner":"^5.0.0","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.0.0","@google/generative-ai":"^0.21.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","eslint":"^9.0.0","vitest":"^2.0.0","globals":"^17.5.0","prettier":"^3.3.0","typescript":"^5.5.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@vitest/coverage-v8":"^2.0.0","ink-testing-library":"^3.0.0","eslint-config-prettier":"^9.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/scout_0.1.1_1778706976231_0.38993415106450624","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@asuarezz/scout","version":"0.1.2","description":"CLI de prospección comercial: encuentra negocios en cualquier parte del mundo y apóyate de un coach para cerrar el deal","keywords":["cli","prospecting","sales","ai","gemini","google-places","prd"],"homepage":"https://github.com/AndresSuarezz/scout","repository":{"type":"git","url":"git+https://github.com/AndresSuarezz/scout.git"},"license":"MIT","author":{"name":"Andrés Suárez","email":"anfesuguito22@gmail.com","url":"https://github.com/AndresSuarezz"},"type":"module","bin":{"scout":"dist/cli.js"},"engines":{"node":">=18"},"scripts":{"build":"tsup","dev":"tsup --watch","start":"node dist/cli.js","typecheck":"tsc --noEmit","lint":"eslint src","lint:fix":"eslint src --fix","format":"prettier --write src","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"dependencies":{"@google/generative-ai":"^0.21.0","conf":"^13.0.0","exceljs":"^4.4.0","ink":"^5.0.0","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.0.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","react":"^18.3.1"},"devDependencies":{"@types/node":"^22.0.0","@types/react":"^18.3.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitest/coverage-v8":"^2.0.0","eslint":"^9.0.0","eslint-config-prettier":"^9.0.0","globals":"^17.5.0","ink-testing-library":"^3.0.0","prettier":"^3.3.0","tsup":"^8.3.0","typescript":"^5.5.0","vitest":"^2.0.0"},"_id":"@asuarezz/scout@0.1.2","gitHead":"4fbd24b1949d7bf6c5f9fa17c7fd4eeca178fc57","bugs":{"url":"https://github.com/AndresSuarezz/scout/issues"},"_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-veTzJYGyqMBv5APU9GV35ZMaXJxD9dc1+5DFp68ZhKM8cNxhlEp9hD/cshmjEpxtaVLB0gFgduWGv25VnqTInQ==","shasum":"ac5c1700fa39ab0e820fb164f92320b837e05de1","tarball":"https://registry.npmjs.org/@asuarezz/scout/-/scout-0.1.2.tgz","fileCount":5,"unpackedSize":176467,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCMN6K9XWgQ0EmKQxeGpi6Bdyqk41ekoe/dvZONq5ZRYAIgFahDSveo30/e62crjSqXDXApU+k75BzHPFed21vRqpY="}]},"_npmUser":{"name":"andressuarezz","email":"anfesuguito22@gmail.com"},"directories":{},"maintainers":[{"name":"andressuarezz","email":"anfesuguito22@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scout_0.1.2_1778708247406_0.8264045450372515"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-30T20:15:05.207Z","modified":"2026-05-13T21:37:27.692Z","0.1.0":"2026-04-30T20:15:05.464Z","0.1.1":"2026-05-13T21:16:16.394Z","0.1.2":"2026-05-13T21:37:27.585Z"},"bugs":{"url":"https://github.com/AndresSuarezz/scout/issues"},"author":{"name":"Andrés Suárez","email":"anfesuguito22@gmail.com","url":"https://github.com/AndresSuarezz"},"license":"MIT","homepage":"https://github.com/AndresSuarezz/scout","keywords":["cli","prospecting","sales","ai","gemini","google-places","prd"],"repository":{"type":"git","url":"git+https://github.com/AndresSuarezz/scout.git"},"description":"CLI de prospección comercial: encuentra negocios en cualquier parte del mundo y apóyate de un coach para cerrar el deal","maintainers":[{"name":"andressuarezz","email":"anfesuguito22@gmail.com"}],"readme":"# Scout CLI\n\nCLI de prospección comercial: encuentra negocios en cualquier parte del mundo y apóyate de un coach para cerrar el deal.\n\n## Instalación\n\n```bash\nnpm install -g @asuarezz/scout\n```\no mejor\n```bash\npnpm install -g @asuarezz/scout\n```\n\n**Requisito:** Node.js ≥ 18. Si no lo tienes:\n```bash\n# macOS / Linux (recomendado vía nvm)\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash\nnvm install --lts\n\n# Windows\nwinget install OpenJS.NodeJS.LTS\n```\n\n## Uso rápido\n\n```bash\n# 1. Configura tus credenciales (solo la primera vez)\nscout init\n\n# 2. Inicia una búsqueda\nscout\n```\n\nEl flujo completo:\n1. Ingresas ciudad y tipo de negocio\n2. Gemini genera un **banco de 5–8 queries optimizados** para Google Places\n3. Scout ejecuta cada query, deduplica y filtra los que **no tienen sitio web** (incluye negocios que solo tienen redes sociales como \"presencia digital\")\n4. Cada prospecto recibe un **Score 0–100** basado en: ausencia de web, rating, número de reseñas, nivel de precio y presencia en redes sociales\n5. En la lista de resultados puedes:\n   - Pulsar `e` para **exportar todos los prospectos a Excel** (10 columnas: Score, Nombre, Teléfono, Redes Sociales, Rating, Reseñas, Precio, Google Maps ↗, Dirección, PlaceId)\n   - Seleccionar un negocio para entrar al **Coach comercial**\n6. El Coach de Gemini te guía en **3 fases** para cerrar el deal:\n   - **Fase 1** — Te pregunta qué servicio quieres ofrecer, si ya tuviste contacto y tu precio en mente\n   - **Fase 2** — Genera un **📞 Script de llamada personalizado** para ese negocio específico: apertura de 15 segundos, preguntas de descubrimiento, manejo de objeciones y cierre para cita\n   - **Fase 3** — Si ya hablaste con el cliente, analiza lo descubierto, define el paquete de servicios y calcula el pricing en USD y COP\n7. Ejecutas `/done` y se genera `propuesta_nombre-del-negocio.md` lista para enviar al prospecto\n\n## Credenciales necesarias\n\nNecesitas dos API keys antes de usar Scout. Ambas tienen plan gratuito suficiente para uso personal.\n\n---\n\n### 1. Google Places API key\n\n**Tiempo estimado: 10 minutos**\n\n#### Paso 1 — Crear el proyecto\n\n1. Ve a [console.cloud.google.com](https://console.cloud.google.com) e inicia sesión con tu cuenta de Google.\n2. En la barra superior, haz click en el **selector de proyectos** (dice \"Select a project\" o el nombre del proyecto actual).\n3. En el modal que aparece, click en **Nuevo proyecto** (esquina superior derecha del modal).\n4. Escribe un nombre, por ejemplo `scout-prospecting`, y click en **Crear**.\n5. Espera unos segundos y selecciona el proyecto recién creado desde el selector.\n\n#### Paso 2 — Activar facturación (obligatorio para usar Places API)\n\n> Google exige una cuenta de facturación activa para usar Places API, aunque tengas crédito gratuito y nunca pagues nada.\n\n1. En el menú lateral izquierdo, click en **Facturación**.\n2. Click en **Vincular una cuenta de facturación** → **Crear cuenta de facturación**.\n3. Completa el formulario con tu país y tarjeta de crédito/débito (no se hace ningún cargo inmediato).\n4. Confirma la vinculación con tu proyecto.\n\n#### Paso 3 — Habilitar la Places API (New)\n\n1. En el menú lateral, click en **APIs y servicios** → **Biblioteca**.\n2. En el buscador escribe `Places API`.\n3. Aparecerán dos opciones: selecciona **Places API (New)**.\n4. Click en **Habilitar**. Espera a que cargue la página de gestión de la API.\n\n#### Paso 4 — Crear la clave de API\n\n1. En el menú lateral, click en **APIs y servicios** → **Credenciales**.\n2. Click en **+ Crear credenciales** (parte superior) → **Clave de API**.\n3. Se genera automáticamente una clave. Cópiala y guárdala en un lugar seguro.\n4. Click en **Cerrar**.\n\n#### Paso 5 — Restringir la clave (recomendado)\n\nEsto evita que alguien que obtenga tu key la use para otros servicios de Google:\n\n1. En la lista de credenciales, click en el nombre de la key que acabas de crear.\n2. En **Restricciones de API**, selecciona **Restringir clave**.\n3. En el desplegable, busca y selecciona **Places API**.\n4. Click en **Guardar**.\n\n> **Crédito gratuito:** Google otorga 200 USD mensuales de crédito a todas las cuentas, lo que equivale a aproximadamente 2.000 búsquedas de texto gratuitas por mes. Para prospección ocasional nunca llegarás al límite.\n\n---\n\n### 2. Google Gemini API key\n\n**Tiempo estimado: 2 minutos**\n\n1. Ve a [aistudio.google.com/app/apikey](https://aistudio.google.com/app/apikey) e inicia sesión.\n2. Click en **Create API key**.\n3. Selecciona el proyecto de Google Cloud donde habilitaste Places (o crea uno nuevo).\n4. Copia la key generada.\n\n> **Plan gratuito:** Los modelos `gemini-2.0-flash` y `gemini-1.5-flash` tienen cuota gratuita generosa (hasta 1.500 requests/día en el tier gratuito). Para generar propuestas de prospección es más que suficiente.\n\n---\n\nUna vez tengas ambas keys, ejecuta:\n\n```bash\nscout init\n```\n\nScout validará cada key en tiempo real y te pedirá elegir el modelo Gemini antes de guardar.\n\n## Comandos\n\n```bash\nscout              # Inicia el flujo de prospección\nscout init         # Reconfigura credenciales o cambia el modelo Gemini\nscout --help       # Muestra la ayuda\nscout --version    # Muestra la versión instalada\nscout --verbose    # Activa logs de debug\n```\n\n**Atajos en la pantalla de resultados:**\n\n| Tecla | Acción |\n|-------|--------|\n| `↑ ↓` | Navegar la lista de prospectos |\n| `Enter` | Iniciar el Coach comercial con el negocio seleccionado |\n| `e` | Exportar todos los prospectos a Excel (`.xlsx`) |\n| `q` | Volver a la búsqueda |\n\n**Comandos dentro del Coach:**\n\nEscribe `/` en el input para ver el menú de comandos disponibles. Navega con `↑ ↓` y confirma con `Enter`. También puedes escribir el comando directamente:\n\n| Comando | Acción |\n|---------|--------|\n| `/done` | Genera la propuesta comercial con la conversación actual |\n| `/save` | Guarda el transcript sin generar propuesta |\n| `/back` | Vuelve a la lista de prospectos |\n| `Esc`   | Cierra el menú `/` o vuelve a la lista de prospectos |\n\n## Selección de modelo Gemini\n\nDurante `scout init`, después de validar tu API key, Scout lista automáticamente los modelos disponibles para tu cuenta y te permite elegir.\n\nGuía rápida de selección:\n\n| Modelo | Velocidad | Cuota gratuita | Recomendado para |\n|--------|-----------|---------------|-----------------|\n| `gemini-2.0-flash` | ★★★★★ | Alta | Uso diario — mejor balance velocidad/calidad |\n| `gemini-2.0-flash-lite` | ★★★★★ | Alta | Búsquedas rápidas, bajo consumo de cuota |\n| `gemini-1.5-flash` | ★★★★☆ | Alta | Alternativa estable y probada |\n| `gemini-1.5-pro` | ★★★☆☆ | Media | Propuestas más detalladas, más lento |\n| `gemini-2.5-flash` | ★★★★☆ | Media | Máxima calidad con buena velocidad |\n\nPara cambiar el modelo sin reconfigurar todo:\n```bash\nscout init\n# → Elige \"No, usar la existente\" y luego cambia el modelo\n```\n\n## Arquitectura\n\nStack: **TypeScript ESM · React + Ink · tsup · Vitest**\n\nLa CLI renderiza interfaces interactivas en la terminal usando [React Ink](https://github.com/vadimdemedes/ink), sin servidor ni bundler de UI. Un único archivo `dist/cli.js` se instala como binario global `scout`.\n\nEl flujo de pantallas sigue una máquina de estados lineal: cada pantalla vive en `src/commands/` como un componente React que recibe `onDone`/`onBack` como props y llama a `navigate(nextScreen)` para avanzar. El estado compartido (config, resultados, negocio seleccionado) vive en el contexto de `App`.\n\n```\ninit → search → loading → results → coach → export\n                    ↑_________|    │\n                                   └─ (tecla e) → export (Excel)\n```\n\nLos servicios externos están encapsulados en `src/services/`:\n\n| Servicio | Responsabilidad |\n|----------|----------------|\n| `places.ts` | Búsqueda en Google Places, deduplicación, filtro de webs y redes sociales |\n| `gemini.ts` | Generación de queries, scoring con IA, streaming del Coach, síntesis de propuesta |\n| `scoring.ts` | Score heurístico (base) + re-ranking con Gemini sobre los top-20 |\n| `excel.ts` | Exportación a `.xlsx` con ExcelJS |\n| `config.ts` | Persistencia de credenciales cifradas con AES-256-CBC vía `conf` |\n\n## Desarrollo local\n\n```bash\ngit clone https://github.com/AndresSuarezz/scout\ncd scout\npnpm install\n\npnpm run dev        # Watch mode: recompila al guardar\nnode dist/cli.js    # Prueba la CLI compilada\n\npnpm test           # Corre todos los tests\npnpm run typecheck  # Verifica tipos sin compilar\npnpm run lint       # ESLint sobre src/\n```\n\nPara probar la API de Google Places en aislado:\n```bash\nPLACES_KEY=tu_key npx tsx scripts/test-places.ts \"Montería\" \"Restaurantes\"\n```\n\n## Troubleshooting\n\n**`API key inválida`** — Verifica que la key tiene permisos para Places API o Generative Language API en Google Cloud Console.\n\n**`Cuota agotada`** — Google Places tiene límite de requests por día en el plan gratuito. Espera 24h o actualiza el plan.\n\n**`Modelo no disponible`** — Ejecuta `scout init` para seleccionar otro modelo Gemini.\n\n**La terminal se ve mal** — Scout usa estilos ANSI. Asegúrate de usar una terminal moderna (Windows Terminal, iTerm2, cualquier terminal en Linux/macOS).\n\n**Sin resultados** — Prueba con un nicho más amplio o una ciudad más grande.\n\n**Advertencia amarilla \"banco de búsqueda con IA falló\"** — Gemini no pudo generar los queries optimizados (cuota, red, parseo). Scout cae al query simple `\"{nicho} en {ciudad}\"` y completa la búsqueda igualmente.\n\n**Advertencia amarilla \"rerank con IA falló\"** — El rerank de Gemini falló. Los scores quedan calculados por la heurística local (sin website, rating y cantidad de reseñas). La lista sigue ordenada y exportable.\n\n**Config no se puede descifrar** — Las credenciales están cifradas con una clave derivada del hostname y usuario actual. Si cambiaste de máquina o usuario, ejecuta `scout init` para reconfigurar.\n\n## Licencia\n\nMIT © [Andrés Suárez](https://github.com/AndresSuarezz)\n","readmeFilename":"README.md"}