diff --git a/.megamemory/knowledge.db b/.megamemory/knowledge.db new file mode 100644 index 0000000..0a06b00 Binary files /dev/null and b/.megamemory/knowledge.db differ diff --git a/.megamemory/knowledge.db-shm b/.megamemory/knowledge.db-shm new file mode 100644 index 0000000..24376d4 Binary files /dev/null and b/.megamemory/knowledge.db-shm differ diff --git a/.megamemory/knowledge.db-wal b/.megamemory/knowledge.db-wal new file mode 100644 index 0000000..af8d9fe Binary files /dev/null and b/.megamemory/knowledge.db-wal differ diff --git a/setup.py b/setup.py index 7441f8e..2964a1a 100644 --- a/setup.py +++ b/setup.py @@ -50,6 +50,8 @@ class Colors: "security", "exploit", "encryption", + "vibesec", + "vibe-security", ], "code-review": [ "code-review", @@ -336,6 +338,29 @@ class Colors: "data-", "etl", ], + "debug": [ + "debug", + "debugging", + "breakpoint", + "logger", + "logging", + "trace", + "profiler", + "profiling", + "devtools", + "inspector", + "monitor", + "troubleshoot", + "diagnostic", + "error-tracking", + "sentry", + "datadog", + "newrelic", + "bugtracking", + "bug", + "bug-hunter", + "hunter", + ], "education": [ "learning", "course", @@ -391,6 +416,7 @@ class Colors: "kotlin", "algorithm", "data-structure", + "mago", ], "prompt-engineering": [ "system-prompt", @@ -440,6 +466,30 @@ class Colors: "pip", "extension", "plugin", + "find-skills", + ], + "documentation": [ + "documentation", + "docstring", + "doc-", + "code-documenter", + "documenter", + "readme", + "api-docs", + "swagger", + "openapi", + "jsdoc", + "sphinx", + ], + "wordpress": [ + "wordpress", + "wp-", + "generatepress", + "generateblocks", + "gutenberg", + "woocommerce", + "acf", + "wp-cli", ], } @@ -454,7 +504,9 @@ def get_category_for_skill(skill_name: str) -> str: exact_match = False if skill_name.startswith('"') and skill_name.endswith('"'): exact_match = True - name_lower = skill_name[1:-1].strip().lower().replace("_", "-").replace(" ", "-") + name_lower = ( + skill_name[1:-1].strip().lower().replace("_", "-").replace(" ", "-") + ) else: name_lower = skill_name.lower().replace("_", "-") @@ -523,9 +575,12 @@ def migrate_skills(): dest = cat_dir / folder.name if dest.exists(): - shutil.rmtree(dest) + if dest.is_symlink() or dest.is_file(): + dest.unlink() + else: + shutil.rmtree(dest) - shutil.move(str(folder), str(cat_dir)) + shutil.move(str(folder), str(dest)) category_counts[category] = category_counts.get(category, 0) + 1 moved_count += 1 @@ -625,9 +680,26 @@ def generate_pointers(category_counts): def main(): import argparse - parser = argparse.ArgumentParser(description="SkillPointer Setup - Infinite Context. Zero Token Tax.") - parser.add_argument("--agent", choices=["opencode", "claude"], default="opencode", - help="Target AI agent (opencode or claude)") + + parser = argparse.ArgumentParser( + description="SkillPointer Setup - Infinite Context. Zero Token Tax." + ) + parser.add_argument( + "--agent", + choices=["opencode", "claude"], + default="opencode", + help="Target AI agent (opencode or claude)", + ) + parser.add_argument( + "--skill-dir", + type=str, + help="Directory to search for skills (overrides --agent default)", + ) + parser.add_argument( + "--vault-dir", + type=str, + help="Directory to move skills to when creating pointers (overrides --agent default)", + ) args, unknown = parser.parse_known_args() if args.agent == "claude": @@ -635,6 +707,11 @@ def main(): CONFIG["active_skills_dir"] = Path.home() / ".claude" / "skills" CONFIG["hidden_library_dir"] = Path.home() / ".skillpointer-vault" + if args.skill_dir: + CONFIG["active_skills_dir"] = Path(args.skill_dir).expanduser().resolve() + if args.vault_dir: + CONFIG["hidden_library_dir"] = Path(args.vault_dir).expanduser().resolve() + # Handle 'install' argument for compatibility with Install.bat/vbs if unknown and unknown[0] == "install": pass