auto-sync: 2026-06-29_11:50:01

This commit is contained in:
Floki 2026-06-29 13:50:01 +02:00
parent 0bc554354b
commit 84b59c65f1

45
vault-graph-api.py Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env python3
"""Vault Graph API - extracts wikilinks and returns graph data."""
import json, os, re, sys
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse
VAULT_DIR = '/opt/jarvis-vault'
def build_graph():
files = {}
links = []
for root, dirs, fnames in os.walk(VAULT_DIR):
for f in fnames:
if not f.endswith('.md'): continue
rel = os.path.relpath(os.path.join(root, f), VAULT_DIR)
path_no_ext = rel[:-3]
files[path_no_ext] = {'id': path_no_ext, 'label': os.path.basename(rel)[:-3], 'path': rel, 'group': rel.split('/')[0] if '/' in rel else 'root'}
with open(os.path.join(root, f)) as fp:
content = fp.read()
# Extract [[wikilinks]]
for m in re.finditer(r'\[\[([^\]]+)\]\]', content):
target = m.group(1).split('|')[0].strip()
if target:
links.append({'source': path_no_ext, 'target': target})
return {'nodes': list(files.values()), 'links': links}
class GraphHandler(BaseHTTPRequestHandler):
def _send(self, data):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
self.wfile.write(json.dumps(data).encode())
def do_GET(self):
parsed = urlparse(self.path)
if parsed.path == '/graph':
self._send(build_graph())
else:
self._send({'error': 'not found'})
def do_OPTIONS(self):
self._send({})
if __name__ == '__main__':
HTTPServer(('0.0.0.0', 8802), GraphHandler).serve_forever()