본문으로 건너뛰기
cd /languages
  • Windows 자동화
  • 셸
  • AST 및 심볼 지원

Maguyva의 PowerShell 지원: 스크립트와 모듈을 위한 코드 그래프

Maguyva는 AST, 심볼, 그래프로 PowerShell을 지원하여, AI 에이전트가 스크립트와 모듈 전반에서 함수, 클래스, cmdlet 호출을 따라갈 수 있게 합니다.

PowerShell이 얕은 AI 도구를 넘어뜨리는 지점

여러분의 함수와 기본 제공 cmdlet은 같은 이름 짓기 스타일을 씁니다. Get-Invoice와 Get-ChildItem는 똑같아 보이므로, 동사를 기준으로 “기본 제공” 명령을 걸러 내는 도구는 여러분의 함수까지 버리게 됩니다. 스크립트는 모듈 수준 코드, 함수, 클래스, 스크립트 블록을 한 파일에 섞어 두기 때문에, 어떤 줄이 어느 함수에 속하는지 알기도 어렵습니다.

Maguyva는 두 종류의 호출을 모두 유지하고, 각 호출을 그것이 들어 있는 함수에 귀속합니다.

Maguyva가 PowerShell에서 추출하는 것

Maguyva는 .ps1, .psm1, .psd1 파일을 지원합니다. 함수와 클래스 메서드는 호출 가능 항목으로, 클래스와 열거형은 타입으로 추출됩니다. 스크립트 매개변수와 메서드 매개변수가 추적되며, 함수 안의 읽기와 쓰기는 모듈이 아니라 그 함수에 귀속됩니다.

cmdlet 호출은 그래프에 남습니다. PowerShell에는 대부분의 언어가 쓰는 표준 라이브러리 필터가 적용되지 않으므로, Write-Host, Get-ChildItem, Restart-Service는 여러분의 Get-*, Set-* 함수 옆에 호출 엣지로 나타납니다. 에이전트는 어떤 스크립트가 서비스를 다시 시작하는지, 어떤 함수가 콘솔에 쓰는지 물어 구조에 기반한 답을 얻을 수 있습니다.

PowerShell에서는 적용 대상 아님으로 표시된 관계 유형이 없으므로, 그래프에는 클래스 상속과 인터페이스 구현, 인스턴스화, 제어 흐름, 읽기와 쓰기도 기록됩니다.

에이전트 프롬프트 예시

  • “Invoke-Backup를 누가 호출하고, 어떤 예약 스크립트에서 호출하나요?” (find_symbol, 그다음 dependency_search incoming)
  • “Restart-Service를 호출하는 함수는 무엇인가요?” (dependency_search)
  • “Deploy-Site가 처음부터 끝까지 무엇을 하는지 추적해 줘.” (get_task_context)

알려진 한계

  • cmdlet 호출이 유지되므로, Write-Host나 Select-Object처럼 아주 흔한 호출에는 들어오는 엣지가 매우 많습니다. 범위를 좁힌 호출 그래프가 필요하면 여러분의 함수에서 시작하세요.
  • Import-Module와 도트 소싱은 일반 명령이므로, structural_search의 imports 프리셋은 아무것도 선택하지 않습니다. 목록을 보려면 text_pattern_search를 사용하세요.

다음 단계

빠른 시작으로 저장소를 연결한 다음, 호환성 페이지에서 지원 매트릭스를 확인하세요. 스크립트가 호출하는 .NET 코드라면 C# 가이드를 읽어 보세요.

가장 적합한 경우

  • > 스크립트끼리 서로의 함수를 호출하는 대규모 `.ps1`, `.psm1` 자산을 가진 인프라 및 운영 팀.
  • > 고급 함수, 클래스, 열거형으로 구성된 PowerShell 모듈.
  • > 변경 전에 어떤 스크립트가 서비스, 파일 공유, 레지스트리 키를 건드리는지 에이전트가 확인해야 하는 자동화 런북.

에이전트 워크플로

  • > 고급 함수의 매개변수를 바꾸기 전에 모든 호출자를 찾습니다.
  • > 런북을 바꾸기 전에 `Restart-Service` 같은 cmdlet을 호출하는 스크립트를 나열합니다.
  • > 모듈을 리팩터링하기 전에 공유 변수에 쓰는 함수를 매핑합니다.

엔진 세부 정보

  • > PowerShell 지원은 `.ps1`, `.psm1`, `.psd1`을 다룹니다. 함수와 클래스 메서드는 호출 가능 항목이고, 클래스와 열거형은 타입입니다.
  • > PowerShell에서는 표준 라이브러리 필터가 꺼져 있으므로, `Get-ChildItem` 같은 cmdlet 호출이 여러분의 함수와 함께 그래프에 남습니다.
  • > 함수 안의 읽기와 쓰기는 모듈이 아니라 그 함수에 귀속됩니다.

유용한 MCP 진입점

  • find_symbol

    고급 함수나 클래스의 정의와 호출자가 필요할 때 사용하세요.

  • dependency_search

    `Restart-Service` 같은 cmdlet에 incoming 탐색을 사용해 그것을 호출하는 스크립트를 확인하세요.

  • get_task_context

    "`Deploy-Site`가 처음부터 끝까지 무엇을 하는지 추적해 줘" 같은 프롬프트에 사용하세요.