timedomain/skill-library
0
1import os2import json3from datetime import datetime4import re5 6def get_skill_files():7 skill_files = []8 skill_doc_files = []9 for root, dirs, files in os.walk("."):10 if "skill.json" in files:11 skill_files.append(os.path.join(root, "skill.json"))12 if "skill_doc.md" in files:13 skill_doc_files.append(os.path.join(root, "skill_doc.md"))14 return skill_files, skill_doc_files15 16def get_skill_data(file_path):17 with open(file_path, 'r', encoding='utf-8') as f:18 data = json.load(f)19 return data20 21def get_skill_doc_data(file_path):22 if not os.path.exists(file_path):23 return None24 with open(file_path, 'r', encoding='utf-8') as file:25 lines = file.readlines()26 title = lines[0].strip().replace("# ", "") if lines else None27 content = "".join(lines)28 29 # Regular expressions to extract the desired sections30 usage_pattern = r"# Usage:\n(.*?)\n\n"31 parameters_pattern = r"# Parameters:\n(.*?)\n\n"32 returns_pattern = r"# Returns:\n(.*?)(\n\n|$|#)"33 34 usage = re.search(usage_pattern, content, re.DOTALL)35 parameters = re.search(parameters_pattern, content, re.DOTALL)36 returns_ = re.search(returns_pattern, content, re.DOTALL)37 38 # Extract the matched content or set to None if not found39 usage_content = usage.group(1).strip() if usage else None40 parameters_content = parameters.group(1).strip() if parameters else None41 returns_content = returns_.group(1).strip() if returns_ else None42 43 return {44 "Title": title,45 "Usage": usage_content,46 "Parameters": parameters_content,47 "Returns": returns_content48 }49 50def get_skill_datas():51 skill_files, skill_doc_files = get_skill_files()52 skills_datas=[]53 for i, file in enumerate(skill_files):54 skill_doc_file = skill_doc_files[i]55 skill = get_skill_data(file)56 skill_doc = get_skill_doc_data(skill_doc_file)57 if skill_doc:58 skill.update(skill_doc)59 skills_datas.append(skill)60 return skills_datas61 62 63def time_ago(updated_at_str):64 now = datetime.now()65 updated_at = datetime.strptime(updated_at_str, '%Y-%m-%d %H:%M:%S')66 delta = now - updated_at67 68 minutes = delta.total_seconds() / 6069 hours = minutes / 6070 days = hours / 2471 months = days / 30.44 # An average month length72 years = days / 365.25 # Account for leap years73 74 if minutes < 60:75 return f"{int(minutes)} minutes ago"76 elif hours < 24:77 return f"{int(hours)} hours ago"78 elif days < 30.44:79 return f"{int(days)} days ago"80 elif months < 12:81 return f"{int(months)} months ago"82 else:83 return f"{int(years)} years ago"84 