#!/usr/bin/env python3 # switch-to-powershell v1.1 — Switch skill .md files back to PowerShell scripts # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Replaces python invocations with powershell.exe in all .md files under .claude/skills/.""" import os, re, glob, sys def main(): print("Совет: используйте 'python scripts/switch.py --runtime powershell' (новый интерфейс)\n") repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) skills_dir = os.path.join(repo_root, '.claude', 'skills') # Collect all .md files in skill directories (SKILL.md, json-dsl.md, etc.) md_files = sorted(glob.glob(os.path.join(skills_dir, '*', '*.md'))) if not md_files: print(f"Error: no .md files found in {skills_dir}", file=sys.stderr) sys.exit(1) rx = re.compile(r'python\s+(\'?\.claude/skills/[^\s\']+?)\.py') switched = 0 warnings = [] for md_path in md_files: with open(md_path, 'r', encoding='utf-8') as f: content = f.read() matches = rx.findall(content) if not matches: continue # Check that .ps1 files exist for all matches all_exist = True for m in matches: ps1_path = m.lstrip("'") + '.ps1' ps1_full = os.path.join(repo_root, ps1_path) if not os.path.isfile(ps1_full): skill_name = os.path.basename(os.path.dirname(md_path)) md_name = os.path.basename(md_path) warnings.append(f" SKIP: {ps1_path} not found (referenced in {skill_name}/{md_name})") all_exist = False if not all_exist: continue new_content = rx.sub(r'powershell.exe -NoProfile -File \1.ps1', content) if new_content != content: with open(md_path, 'w', encoding='utf-8') as f: f.write(new_content) skill_name = os.path.basename(os.path.dirname(md_path)) md_name = os.path.basename(md_path) print(f" [OK] {skill_name}/{md_name}") switched += 1 print(f"\nSwitched {switched} file(s) to PowerShell.") if warnings: print("\nSkipped (missing .ps1 files):") for w in warnings: print(w) if __name__ == '__main__': main()