Regelwerk, Agenten, Skills und Werkzeuge veröffentlichen

Erster Stand des öffentlichen Ausschnitts aus dem Vault. Die .gitignore
arbeitet als Positivliste: ausgeschlossen ist alles, eingeschlossen nur,
was ausdrücklich wieder aufgenommen wird. Notizen, Projekte, Finanzen,
das Sitzungsgedächtnis und settings.local.json bleiben damit außen vor.

Der Kundenname in AI/Regelwerk/seo.md ist durch eine neutrale
Bezeichnung ersetzt; die Regeln selbst sind unverändert.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
Pascal MichelandClaude Opus 5 committed 2026-09-17 22:38:15 +02:00
commit c064c729ed
82 files changed
+13428

No files matched your search

@@ -0,0 +1,34 @@
"""Baut den Index bereits hochgeladener Notizen für die Wikilink-Auflösung."""
from __future__ import annotations
from pathlib import Path
from bookstack.notiz import lade_notiz
def permalink(basis_url: str, seiten_id: int) -> str:
"""Stabiler Seitenlink.
BookStack löst `/link/{id}` auf die Seite auf. Das überlebt Umbenennungen,
anders als der Weg über Buch- und Seiten-Slug — und `GET /api/pages/{id}`
liefert `book_slug` ohnehin nicht mit.
"""
return f"{basis_url.rstrip('/')}/link/{seiten_id}"
def baue_index(quelle: Path, basis_url: str) -> dict[str, str]:
"""Dateiname ohne Endung (kleingeschrieben) → Permalink."""
if not quelle.is_dir():
return {}
index: dict[str, str] = {}
for pfad in sorted(quelle.rglob("*.md")):
if pfad.name.startswith((".", "_")):
continue
roh_id = lade_notiz(pfad).frontmatter.get("bookstack_page_id", "").strip()
try:
seiten_id = int(roh_id)
except ValueError:
continue
index[pfad.stem.casefold()] = permalink(basis_url, seiten_id)
return index