Saltar al contenido
cd /languages
  • Automatización en Windows
  • Shell
  • Soporte de AST y símbolos

PowerShell en Maguyva: grafos de código para scripts y módulos

Maguyva admite PowerShell con AST, símbolos y grafo, para que los agentes de IA sigan funciones, clases y llamadas a cmdlets en scripts y módulos.

Dónde PowerShell hace tropezar a las herramientas de IA superficiales

Tus funciones y los cmdlets integrados comparten el mismo estilo de nombres. Get-Invoice y Get-ChildItem se ven iguales, así que una herramienta que descarta los comandos “integrados” por su verbo tira también tus propias funciones. Además, los scripts mezclan código a nivel de módulo, funciones, clases y bloques de script en un mismo archivo, lo que dificulta saber a qué función pertenece una línea.

Maguyva conserva ambos tipos de llamada y atribuye cada una a la función en la que está.

Qué extrae Maguyva en PowerShell

Maguyva cubre archivos .ps1, .psm1 y .psd1. Las funciones y los métodos de clase se extraen como invocables, y las clases y los enums como tipos. Se siguen los parámetros de scripts y métodos, y las lecturas y escrituras dentro de una función se atribuyen a esa función y no al módulo.

Las llamadas a cmdlets se quedan en el grafo. PowerShell no aplica el filtro de biblioteca estándar que usan la mayoría de lenguajes, así que Write-Host, Get-ChildItem y Restart-Service aparecen como aristas de llamada junto a tus propias funciones Get-* y Set-*. Un agente puede preguntar qué scripts reinician un servicio, o qué funciones escriben en la consola, y obtener una respuesta estructural.

Ningún tipo de relación está marcado como no aplicable para PowerShell, así que el grafo también registra herencia de clases e implementación de interfaces, instanciación, flujo de control y lecturas y escrituras.

Ejemplos de prompts para agentes

  • “¿Quién llama a Invoke-Backup y desde qué scripts programados?” (find_symbol, luego dependency_search incoming)
  • “¿Qué funciones llaman a Restart-Service?” (dependency_search)
  • “Rastrea lo que hace Deploy-Site de principio a fin.” (get_task_context)

Limitaciones conocidas

  • Como se conservan las llamadas a cmdlets, los muy comunes como Write-Host y Select-Object tienen una enorme cantidad de aristas entrantes. Empieza por tu propia función cuando quieras un grafo de llamadas enfocado.
  • Import-Module y el dot-sourcing son comandos normales, así que el preset imports de structural_search no selecciona nada. Usa text_pattern_search para listarlos.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para el código .NET que llaman tus scripts, lee la guía de C#.

Mejor uso

  • > Equipos de infraestructura y operaciones con grandes conjuntos de `.ps1` y `.psm1` cuyos scripts se llaman funciones entre sí.
  • > Módulos de PowerShell construidos con funciones avanzadas, clases y enums.
  • > Runbooks de automatización donde los agentes necesitan ver qué scripts tocan un servicio, un recurso compartido o una clave del registro antes de un cambio.

Flujos de trabajo del agente

  • > Encontrar todos los llamadores de una función avanzada antes de cambiar sus parámetros.
  • > Listar qué scripts llaman a un cmdlet como `Restart-Service` antes de cambiar un runbook.
  • > Mapear qué funciones escriben en una variable compartida antes de refactorizar un módulo.

Detalles del motor

  • > El soporte de PowerShell cubre `.ps1`, `.psm1` y `.psd1`. Las funciones y los métodos de clase son invocables, y las clases y los enums son tipos.
  • > El filtro de biblioteca estándar está desactivado para PowerShell, así que las llamadas a cmdlets como `Get-ChildItem` se quedan en el grafo junto a tus propias funciones.
  • > Las lecturas y escrituras dentro de una función se atribuyen a esa función y no al módulo.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo para una función avanzada o una clase cuando necesites la definición y los llamadores.

  • dependency_search

    Usa el recorrido incoming sobre un cmdlet como `Restart-Service` para ver qué scripts lo llaman.

  • get_task_context

    Úsalo para prompts como "rastrea lo que hace `Deploy-Site` de principio a fin".