feat(crossplatform): add Python 3 ports for all 58 PS1 skill scripts

Add cross-platform Python alternatives alongside existing PowerShell
scripts. PS1 remains the default runtime; Python is opt-in via switch
scripts. All parameters are identical between runtimes.

New files:
- 58 Python scripts in .claude/skills/*/scripts/*.py
- scripts/switch-to-python.py and switch-to-powershell.py
- docs/python-porting-guide.md
- __pycache__/ added to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-02-25 16:16:07 +03:00
parent 6b5992de34
commit 86a959a354
63 changed files with 31223 additions and 2 deletions
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env python3
# switch-to-python v1.1 — Switch skill .md files to use Python scripts
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
"""Replaces powershell.exe invocations with python in all .md files under .claude/skills/."""
import os, re, glob, sys
def main():
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'powershell\.exe\s+(?:-NoProfile\s+)?-File\s+(.+?)\.ps1')
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 .py files exist
for m in matches:
clean_path = m.lstrip("'")
py_path = clean_path + '.py'
py_full = os.path.join(repo_root, py_path)
if not os.path.isfile(py_full):
skill_name = os.path.basename(os.path.dirname(md_path))
md_name = os.path.basename(md_path)
warnings.append(f" WARN: {py_path} not found (referenced in {skill_name}/{md_name})")
new_content = rx.sub(r'python \1.py', 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 Python.")
if warnings:
print("\nWarnings (missing .py files):")
for w in warnings:
print(w)
if __name__ == '__main__':
main()