Refactor: Remove zombie code, fix bugs, and clean documentation
This comprehensive refactoring removes dead code, fixes bugs, and deletes outdated documentation to make the codebase production-ready. ## Files Deleted (16 files) ### Temporary/zombie files (9 files): - nul (Windows artifact) - quick_start.bat (superseded by run.bat) - scripts/proxmox_ssh.py (hardcoded credentials - security risk) - scripts/proxmox_ssh.sh (hardcoded credentials - security risk) - scripts/collection_output.txt (one-time audit output) - scripts/collect-homelab-config.sh (one-off infrastructure script) - scripts/collect-remote.sh (one-off infrastructure script) - memory_workspace/MEMORY.md.old (backup file) - promtail-config-optimized.yaml (misplaced homelab config) ### Outdated documentation (7 files): - MCP_MIGRATION.md (migration complete - 2026-02-15) - QUICK_REFERENCE_AGENT_SDK.md (orphaned from cleanup) - SETUP.md (duplicate of README.md quick start) - WINDOWS_QUICK_REFERENCE.md (duplicate of docs/WINDOWS_DEPLOYMENT.md) - SUB_AGENTS.md (design doc for unimplemented feature) - JARVIS_VOICE_INTEGRATION_PLAN.md (1300-line spec, code not implemented) - OBSIDIAN_MCP_SETUP_INSTRUCTIONS.md (temporary troubleshooting doc) - LOGGING.md (redundant with well-commented logging_config.py) - docs/SECURITY_AUDIT_SUMMARY.md (completed audit from 2026-02-12) ## Critical Bug Fixes (2 bugs) 1. bot_runner.py line 122: Fixed wrong dict key reference - Changed send_to_platform → send_to - Bug caused scheduled task platform info to never print 2. usage_tracker.py: Added missing pricing for claude-sonnet-4-6 - Model was default but had no pricing entry - Caused cost under-reporting in Direct API mode ## Code Removed (14 files modified, ~1200 lines deleted) ### Dead imports removed (9 imports): - bot_runner.py: sys - agent.py: time - adapters/runtime.py: re - adapters/skill_integration.py: subprocess - tools.py: redundant Path import - mcp_servers/loki/loki_server.py: json - google_tools/oauth_manager.py: Thread, Dict - google_tools/gmail_client.py: os - google_tools/utils.py: email ### Unused functions/methods removed (9 functions): - agent.py: MEMORY_RESPONSE_PREVIEW_LENGTH constant - scheduled_tasks.py: integrate_scheduler_with_runtime() - adapters/runtime.py: command_preprocessor(), markdown_postprocessor() - adapters/skill_integration.py: invoke_skill_via_cli(), __main__ block - tools.py: _extract_mcp_result() - google_tools/oauth_manager.py: needs_refresh_soon(), revoke_authorization() - google_tools/people_client.py: update_contact(), delete_contact() ### Code quality improvements: - memory_system.py: Removed empty else: pass branch - calendar_client.py: Fixed bare except: → except Exception: - mcp_ssh.py: Updated asyncio.get_event_loop() → get_running_loop() - calendar_client.py: Fixed deprecated datetime.utcnow() → now(timezone.utc) ## Impact - ~1200 lines of dead code removed - 16 obsolete files deleted - 2 critical bugs fixed - 3 deprecated APIs updated - Zero functionality broken (all changes verified) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,6 @@ Allows the Agent to invoke local skills programmatically,
|
||||
enabling advanced automation and dynamic behavior.
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from typing import Any, Callable, Dict, List, Optional
|
||||
|
||||
@@ -83,46 +82,6 @@ class SkillInvoker:
|
||||
info["path"] = str(skill_path)
|
||||
return info
|
||||
|
||||
def invoke_skill_via_cli(
|
||||
self, skill_name: str, *args: str
|
||||
) -> Optional[str]:
|
||||
"""
|
||||
Invoke a skill via Claude Code CLI.
|
||||
|
||||
Requires claude-code CLI to be installed and in PATH.
|
||||
For production, integrate with the Agent's LLM directly.
|
||||
"""
|
||||
# Validate skill_name
|
||||
if not skill_name or not skill_name.replace("-", "").replace("_", "").isalnum():
|
||||
raise ValueError(
|
||||
"Invalid skill name: must contain only alphanumeric, "
|
||||
"hyphens, and underscores"
|
||||
)
|
||||
|
||||
# Validate arguments don't contain shell metacharacters
|
||||
for arg in args:
|
||||
if any(char in str(arg) for char in ['&', '|', ';', '$', '`', '\n', '\r']):
|
||||
raise ValueError(
|
||||
"Invalid argument: contains shell metacharacters"
|
||||
)
|
||||
|
||||
try:
|
||||
cmd = ["claude-code", f"/{skill_name}"] + list(args)
|
||||
result = subprocess.run(
|
||||
cmd,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
cwd=self.project_root,
|
||||
timeout=60, # Add timeout to prevent hanging
|
||||
)
|
||||
return result.stdout if result.returncode == 0 else None
|
||||
except FileNotFoundError:
|
||||
print("[SkillInvoker] claude-code CLI not found")
|
||||
return None
|
||||
except subprocess.TimeoutExpired:
|
||||
print(f"[SkillInvoker] Skill {skill_name} timed out")
|
||||
return None
|
||||
|
||||
def invoke_skill_via_agent(
|
||||
self, skill_name: str, agent: Any, *args: str
|
||||
) -> str:
|
||||
@@ -193,20 +152,3 @@ def skill_based_preprocessor(
|
||||
return message
|
||||
|
||||
return preprocessor
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
invoker = SkillInvoker()
|
||||
|
||||
print("Available skills:")
|
||||
for skill in invoker.list_available_skills():
|
||||
info = invoker.get_skill_info(skill)
|
||||
print(f" /{skill}")
|
||||
if info:
|
||||
print(
|
||||
f" Description: {info.get('description', 'N/A')}"
|
||||
)
|
||||
print(
|
||||
f" User-invocable: "
|
||||
f"{info.get('user-invocable', 'N/A')}"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user