manuais-e-documentacao-itguys/.gemini/register_knowledge.py

83 lines
2.7 KiB
Python

import json
import os
import sys
import argparse
from datetime import datetime
# Configuration
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
KB_FILE = os.path.join(BASE_DIR, "knowledge_base.json")
def load_kb():
if not os.path.exists(KB_FILE):
return []
try:
with open(KB_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
print(f"Error loading KB: {e}")
return []
def save_kb(data):
try:
with open(KB_FILE, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
except Exception as e:
print(f"Error saving KB: {e}")
sys.exit(1)
def register_source(url, description, category, tags):
kb = load_kb()
# Check for duplicates
for entry in kb:
if entry.get("url") == url:
print(f"URL already registered: {url}")
return
new_entry = {
"url": url,
"description": description,
"category": category,
"tags": tags,
"added_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
kb.append(new_entry)
save_kb(kb)
print("SUCCESS: Knowledge Source Registered")
print(json.dumps(new_entry, indent=2, ensure_ascii=False))
def list_sources(filter_text=None):
kb = load_kb()
print(f"Total Sources: {len(kb)}")
for entry in kb:
if filter_text:
search_content = (entry['url'] + entry['description'] + entry['category']).lower()
if filter_text.lower() not in search_content:
continue
print(f"[{entry['category']}] {entry['description']} ({entry['url']})")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Register knowledge sources for iT Guys.")
subparsers = parser.add_subparsers(dest="command", required=True)
# Add command
add_parser = subparsers.add_parser("add", help="Add a new source")
add_parser.add_argument("--url", required=True, help="URL of the source")
add_parser.add_argument("--description", required=True, help="Short description")
add_parser.add_argument("--category", default="General", help="Category (Docs, Tool, Reference)")
add_parser.add_argument("--tags", nargs="*", default=[], help="Tags provided as space-separated list")
# List command
list_parser = subparsers.add_parser("list", help="List sources")
list_parser.add_argument("filter", nargs="?", help="Optional filter text")
args = parser.parse_args()
if args.command == "add":
register_source(args.url, args.description, args.category, args.tags)
elif args.command == "list":
list_sources(args.filter)