#!/usr/bin/env python3 import json, os, sys os.environ.setdefault('MCP_DB','/data/loogle_mcp.db') os.environ.setdefault('MCP_VECTOR_FALLBACK','/data/vector_fallback.db') from app.db import init_db, get_conn from app.knowledge import gitea_indexer from app.mcp import tools init_db() print('table_ok', bool(get_conn().execute("SELECT 1 FROM sqlite_master WHERE name='indexed_gitea_files'").fetchone()), flush=True) files=gitea_indexer.list_indexed_files(limit=10, repo='daniele/rete') print('indexed', [f['path'] for f in files], flush=True) if not files: print('WARN: nessun file indicizzato — indicizzo stacks.conf (piccolo)', flush=True) r=gitea_indexer.index_file('daniele/rete','ha/stacks.conf', username='daniele', private=True, force=True) print('new_index', r, flush=True) files=gitea_indexer.list_indexed_files(limit=10, repo='daniele/rete') for q in ('failover','censimento','tier-b'): hits=gitea_indexer.search_gitea_knowledge('daniele', q, limit=3, is_admin=True) print('search', q, hits[0]['path'] if hits else 'NONE', round(float(hits[0]['score']),3) if hits else None, flush=True) if not hits and q=='failover': sys.exit(1) claims={'sub':'daniele','scope':'knowledge:read gitea:read admin'} sg=tools.call_tool('search_gitea_knowledge',{'query':'failover tier-b','limit':5},claims) assert json.loads(sg['content'][0]['text'])['results'] print('tool search_gitea_knowledge ok', flush=True) li=tools.call_tool('list_gitea_indexed_files',{'repo':'daniele/rete','limit':10},claims) print('tool list', json.loads(li['content'][0]['text'])['count'], flush=True) ri=tools.call_tool('reindex_gitea_repo',{'repo':'daniele/rete','max_files':1},claims) print('tool reindex', json.loads(ri['content'][0]['text']).get('files_indexed'), flush=True) sk=tools.call_tool('search_knowledge',{'query':'failover keepalived','limit':8},claims) src=sorted({r.get('source') for r in json.loads(sk['content'][0]['text'])['results']}) print('tool search_knowledge sources', src, flush=True) assert 'gitea' in src print('OK P3 SEARCH VERIFIED', flush=True)