Files
session-mcp/migrations/seed_components.sql
Christian Gick 4fb557c624 feat: Add impact analysis for component dependency tracking
- New tables: components, component_dependencies, component_files,
  verification_checks, change_impacts, impact_analysis_runs
- 8 new MCP tools: component_register, component_list,
  component_add_dependency, component_add_file, component_add_check,
  impact_analysis, impact_learn, component_graph
- Seed data: 17 components, 9 dependencies, 12 file patterns, 5 checks
- Historical impacts from session 397 issues recorded

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 07:20:00 +02:00

104 lines
6.5 KiB
SQL

-- Seed initial components for impact analysis
-- Run after 009_impact_analysis.sql
-- Docker services on docker-host
INSERT INTO components (id, name, type, path, repo, description, health_check) VALUES
('propertymap-scraper', 'PropertyMap Scraper', 'service', '/opt/docker/propertymap', 'christian/propertymap', 'Scrapes Bazaraki/BuySellCyprus listings', 'docker inspect --format="{{.State.Health.Status}}" propertymap-scraper'),
('propertymap-db', 'PropertyMap Database', 'database', 'litellm-pgvector', NULL, 'PostgreSQL with pgvector for property embeddings', 'docker exec litellm-pgvector pg_isready -U litellm'),
('gridbot-conductor', 'Gridbot Conductor', 'service', '/opt/apps/eToroGridbot', 'christian/eToroGridbot', 'Trading signal processor and order executor', 'curl -s http://localhost:8000/health'),
('litellm', 'LiteLLM Proxy', 'service', '/opt/docker/litellm', NULL, 'LLM API proxy with cost tracking', 'curl -s http://localhost:4000/health'),
('n8n', 'n8n Workflows', 'service', '/opt/docker/n8n', NULL, 'Workflow automation', 'curl -s http://localhost:5678/healthz'),
('gitea', 'Gitea', 'service', '/opt/docker/gitea', NULL, 'Git hosting and CI', 'curl -s http://localhost:3000/api/v1/version')
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
type = EXCLUDED.type,
path = EXCLUDED.path,
repo = EXCLUDED.repo,
description = EXCLUDED.description,
health_check = EXCLUDED.health_check,
updated_at = NOW();
-- Local scripts (AgilitonScripts)
INSERT INTO components (id, name, type, path, repo, description) VALUES
('agiliton-scripts', 'AgilitonScripts', 'library', '~/Development/Infrastructure/AgilitonScripts', 'christian/AgilitonScripts', 'CLI tools and automation scripts'),
('task-cli', 'Task CLI', 'script', '~/Development/Infrastructure/AgilitonScripts/bin/task', 'christian/AgilitonScripts', 'Task management CLI wrapper'),
('backup-restic', 'Backup Restic', 'script', '~/Development/Infrastructure/AgilitonScripts/bin/backup-restic', 'christian/AgilitonScripts', 'Restic backup to Hetzner S3'),
('vault-cli', 'Vault CLI', 'script', '~/Development/Infrastructure/AgilitonScripts/bin/vault', 'christian/AgilitonScripts', 'GPG-encrypted credential vault')
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
path = EXCLUDED.path,
repo = EXCLUDED.repo,
description = EXCLUDED.description,
updated_at = NOW();
-- MCP servers
INSERT INTO components (id, name, type, path, repo, description) VALUES
('task-mcp', 'Task MCP', 'service', '~/Development/Infrastructure/mcp-servers/task-mcp', NULL, 'Task management MCP server'),
('gridbot-mcp', 'Gridbot MCP', 'api', 'docker-host:8000', 'christian/eToroGridbot', 'Trading operations MCP proxy'),
('vault-mcp', 'Vault MCP', 'api', '~/bin/vault-mcp', 'christian/AgilitonScripts', 'Credential vault MCP server'),
('gitea-mcp', 'Gitea MCP', 'api', '~/bin/gitea-mcp', NULL, 'Gitea operations MCP server')
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
path = EXCLUDED.path,
repo = EXCLUDED.repo,
description = EXCLUDED.description,
updated_at = NOW();
-- Configuration files
INSERT INTO components (id, name, type, path, description) VALUES
('claude-config', 'Claude Code Config', 'config', '~/.claude.json', 'MCP server and Claude Code configuration'),
('ssh-tunnel-config', 'SSH Tunnel Config', 'config', '~/Library/LaunchAgents/eu.agiliton.ssh-tunnel.plist', 'autossh tunnels to docker-host'),
('zshrc', 'Zsh Config', 'config', '~/.zshrc', 'Shell configuration and PATH')
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
path = EXCLUDED.path,
description = EXCLUDED.description,
updated_at = NOW();
-- Dependencies
INSERT INTO component_dependencies (component_id, depends_on, dependency_type, description) VALUES
('propertymap-scraper', 'propertymap-db', 'hard', 'Stores scraped properties'),
('propertymap-scraper', 'litellm', 'soft', 'Uses LLM for embeddings'),
('gridbot-conductor', 'gridbot-mcp', 'config', 'MCP exposes API'),
('task-mcp', 'propertymap-db', 'hard', 'Uses litellm-pgvector database'),
('task-mcp', 'ssh-tunnel-config', 'hard', 'Needs port 5435 tunnel'),
('task-cli', 'task-mcp', 'soft', 'CLI can use MCP or direct DB'),
('agiliton-scripts', 'zshrc', 'config', 'PATH configuration'),
('vault-mcp', 'vault-cli', 'hard', 'MCP wraps vault CLI'),
('gitea-mcp', 'ssh-tunnel-config', 'hard', 'Needs port 3000 tunnel')
ON CONFLICT (component_id, depends_on) DO UPDATE SET
dependency_type = EXCLUDED.dependency_type,
description = EXCLUDED.description;
-- File patterns for git diff analysis
INSERT INTO component_files (component_id, file_pattern) VALUES
('propertymap-scraper', 'propertymap/services/*.py'),
('propertymap-scraper', 'propertymap/scraper/*.py'),
('propertymap-scraper', 'propertymap/docker-compose.yml'),
('gridbot-conductor', 'eToroGridbot/conductor/*.py'),
('gridbot-conductor', 'eToroGridbot/docker-compose.yml'),
('task-mcp', 'mcp-servers/task-mcp/src/*.ts'),
('task-mcp', 'mcp-servers/task-mcp/migrations/*.sql'),
('task-cli', 'AgilitonScripts/bin/task'),
('agiliton-scripts', 'AgilitonScripts/bin/*'),
('claude-config', '.claude.json'),
('ssh-tunnel-config', 'Library/LaunchAgents/eu.agiliton.ssh-tunnel.plist'),
('zshrc', '.zshrc')
ON CONFLICT (component_id, file_pattern) DO NOTHING;
-- Verification checks
INSERT INTO verification_checks (component_id, name, check_type, check_command, expected_result) VALUES
('propertymap-scraper', 'container-health', 'command', 'ssh docker-host "docker inspect --format={{.State.Health.Status}} propertymap-scraper"', 'healthy'),
('propertymap-db', 'db-ready', 'command', 'ssh docker-host "docker exec litellm-pgvector pg_isready -U litellm"', 'accepting connections'),
('gridbot-conductor', 'api-health', 'http', 'http://localhost:8000/health', '{"status":"ok"}'),
('task-mcp', 'db-connection', 'tcp', 'localhost:5435', 'connected'),
('ssh-tunnel-config', 'tunnel-active', 'command', 'pgrep -f "ssh.*5435" || pgrep -f autossh', 'running')
ON CONFLICT DO NOTHING;
-- Historical impacts (learned from this session)
INSERT INTO change_impacts (changed_component, affected_component, impact_description, task_id) VALUES
('propertymap-db', 'propertymap-scraper', 'pgvector migration required updating processor.py in services/ directory, not scraper/services/', NULL),
('agiliton-scripts', 'backup-restic', 'Path changed from ~/Development/AgilitonScripts to ~/Development/Infrastructure/AgilitonScripts', NULL),
('task-mcp', 'task-cli', 'CLI uses project name in INSERT but database expects project key - foreign key violation', NULL)
ON CONFLICT DO NOTHING;