diff --git a/profile/README.md b/profile/README.md index 78768c8..2753c18 100644 --- a/profile/README.md +++ b/profile/README.md @@ -57,71 +57,9 @@ -## Repositories - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SDKwuji-sdkAutomatic device discovery and real-time data streaming for all Wuji devices
wujihandpyPython/C++ SDK for Wuji Hand device control
wujihandros2ROS 2 driver with 1 kHz joint state publishing
Toolswuji-studioDesktop application for all Wuji devices
wujihand-upgraderFirmware upgrade tool for Wuji Hand
wujihand-hmiReal-time monitoring, calibration, and debugging for Wuji Hand
Simulationwuji-hand-descriptionURDF, MuJoCo MJCF, and mesh models
mujoco-simMuJoCo simulation demo
isaaclab-simIsaac Lab simulation demo
Teleoperationwuji-retargetingHand pose retargeting with Vision Pro support
wuji-hand-teleopROS 2 teleoperation for Wuji Hand and robot arm with multiple input devices
Hardwarewujihand-hardware-designCAD files (STEP) for adapters, frames, and softgoods
Educationrobotics-rigid-body-mechanicsLecture notes on rotation, screw theory, dynamics, and multibody systems
- -## Get Involved +## Resources +- robotics-rigid-body-mechanics — Lecture notes on rotation, screw theory, dynamics, and multibody systems - **Technical support** — [support@wuji.tech](mailto:support@wuji.tech) or open an issue in the relevant repo - **Sales & partnerships** — [sales@wuji.tech](mailto:sales@wuji.tech) - **Join us** (we hire internationally) — [hr@wuji.tech](mailto:hr@wuji.tech) diff --git a/repos-config.yml b/repos-config.yml deleted file mode 100644 index f4148d2..0000000 --- a/repos-config.yml +++ /dev/null @@ -1,23 +0,0 @@ -categories: - - name: SDK - repos: - - wujihandpy - - wujihandros2 - - name: Simulation - repos: - - wuji-hand-description - - mujoco-sim - - isaaclab-sim - - name: HMI - repos: - - wujihand-upgrader - - wujihand-hmi - - name: Teleoperation - repos: - - wuji-retargeting - - name: Hardware Info - repos: - - wujihand-hardware-design - - name: Lecture Notes - repos: - - robotics-rigid-body-mechanics diff --git a/scripts/update-readme.py b/scripts/update-readme.py deleted file mode 100644 index 1f540fd..0000000 --- a/scripts/update-readme.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python3 -""" -Fetch repository descriptions from GitHub API and update profile/README.md. -""" - -import os -import re -import yaml -import requests - -GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN") -ORG_NAME = "wuji-technology" -CONFIG_PATH = "repos-config.yml" -README_PATH = "profile/README.md" - - -def load_config(): - """Load repository configuration from YAML file.""" - with open(CONFIG_PATH, "r", encoding="utf-8") as f: - return yaml.safe_load(f) - - -def get_repo_description(repo_name: str) -> str: - """Fetch repository description from GitHub API.""" - url = f"https://api.github.com/repos/{ORG_NAME}/{repo_name}" - headers = {"Accept": "application/vnd.github.v3+json"} - if GITHUB_TOKEN: - headers["Authorization"] = f"Bearer {GITHUB_TOKEN}" - - response = requests.get(url, headers=headers, timeout=10) - response.raise_for_status() - - data = response.json() - return data.get("description") or "" - - -def update_readme(descriptions: dict[str, str]) -> int: - """Update README.md with new descriptions. Returns number of replacements made.""" - with open(README_PATH, "r", encoding="utf-8") as f: - content = f.read() - - replacements_made = 0 - for repo_name, description in descriptions.items(): - # Match pattern: repo_name
OLD_DESCRIPTION - # Replace OLD_DESCRIPTION with new description - pattern = ( - rf'(\s*' - rf'{re.escape(repo_name)}\s*\s*
\s*)' - rf'(.*?)' - rf'(\s*)' - ) - - replacement = rf'\g<1>{description} \g<3>' - new_content, count = re.subn(pattern, replacement, content, flags=re.DOTALL | re.IGNORECASE) - if count > 0: - content = new_content - replacements_made += count - else: - print(f" Warning: No match found for {repo_name} in README") - - print(f"\nMade {replacements_made} replacements out of {len(descriptions)} repositories") - with open(README_PATH, "w", encoding="utf-8") as f: - f.write(content) - - return replacements_made - - -def main(): - """Main entry point: fetch descriptions and update README.""" - config = load_config() - descriptions = {} - - # Collect all repos from config - all_repos = [] - for category in config.get("categories", []): - all_repos.extend(category.get("repos", [])) - - print(f"Fetching descriptions for {len(all_repos)} repositories...") - - for repo_name in all_repos: - try: - desc = get_repo_description(repo_name) - descriptions[repo_name] = desc - print(f" {repo_name}: {desc[:60]}..." if len(desc) > 60 else f" {repo_name}: {desc}") - except requests.RequestException as e: - print(f" {repo_name}: Failed to fetch - {e}") - continue - - print(f"\nUpdating {README_PATH}...") - update_readme(descriptions) - print("Done!") - - -if __name__ == "__main__": - main()