leuffen / shiller-lib
Typed access layer and template automation for Jekyll/Shiller website sources
Requires
- php: >=8.5
- ext-json: *
- ext-yaml: *
- phore/ai-harness: dev-main
- phore/cli2: dev-main
- phore/filesystem: *
- phore/log: dev-master
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^12.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- dev-docs/adjust-existing-image-references
- dev-fix/compact-ai-usage-output
- dev-fix/default-gpt-6-1-sol-model-logging-20261015
- dev-fix/adjust-no-new-html-20261015
- dev-docs/adapt-skill-priority-style-20261015
- dev-fix/strict-no-new-sections-20261015
- dev-fix/preserve-content-sections-20261015
- dev-feature/live-task-logging-20261015
- dev-ai-adjust-improvements-20261015
- dev-fix/preserve-shiller-install-metadata-20261015
- dev-feat/shiller-source-remove-instructions
- dev-docs/cli-ai-usage-shiller-theme-setup
- dev-fix/restore-context-cli-command
- dev-feature/configurable-init-hooks
- dev-docs/cli-command-descriptions
- dev-docs/schiller-seiten-api
This package is auto-updated.
Last update: 2026-10-16 01:36:08 UTC
README
CLI: Neue Website anlegen
Vor dem ersten Shiller-Aufruf muss im neuen Website-Projekt das
PHP-/Composer-Paket leuffen/shiller-lib installiert sein
(./vendor/bin/shiller ist dann vorhanden). Das ThemeJS2-Paket
muss unter node_modules/@leuffen/themejs2/ liegen;
es kann per npm bereitgestellt oder bewusst im Website-Repository
mitversioniert werden. Die Befehle werden im Website-Projektverzeichnis
ausgeführt, nicht im Theme-Paket.
# 1. Neues Website-Projektverzeichnis vorbereiten und hineinwechseln. mkdir meine-website cd meine-website # 2. Nach Bereitstellung von Composer-CLI und Theme: Startstruktur kopieren. ./vendor/bin/shiller init --template-dir ./node_modules/@leuffen/themejs2/_tpl --tags base # 3. Optional: zusätzliche Theme-Variante installieren. ./vendor/bin/shiller install --tags "theme:osman" # 4. Projektfakten in .shiller-context.d/project.md eintragen. # Nur bei neuen Rohdaten in .shiller-context.d/raw/ zusätzlich: ./vendor/bin/shiller context build # 5. Installierte Startseite aus dem Projektkontext anpassen. ./vendor/bin/shiller adapt --select index.md
Nach init liegen die Website-Dateien in docs/
(Standard-Document-Root). _tpl/_root/docs/ wird dorthin kopiert;
andere Dateien aus _tpl/_root/ gehen in die Projektwurzel.
_tpl/_root/.shiller.yml wird so zur Projektkonfiguration
.shiller.yml mit template_dir und skills_dir.
Die anderen Dateien unter _tpl/ werden anhand ihrer
shiller.tags installiert; skills/ bleibt im npm-Paket.
Die Reihenfolge lautet: init → optional install → Kontext pflegen
bzw. context build → adapt. Installationsbefehle überschreiben
vorhandene Zielinhalte, daher Varianten vor der AI-Anpassung wählen.
CLI: Eine bestehende Datei bearbeiten
Bei bereits initialisierter Website aus der Projektwurzel ausführen:
# Eine Datei relativ zu docs/ bearbeiten: ./vendor/bin/shiller adapt --select index.md # Mehrere Dateien aus derselben Website in einem Lauf: ./vendor/bin/shiller adapt --select "index.md,_data/general.yml" # Eine Datei oder eine Template-Tag-Gruppe auswählen: ./vendor/bin/shiller adapt --select "tag:base" # Eine geänderte Datei auf die installierte Vorlage zurücksetzen: ./vendor/bin/shiller revert index.md
adapt nutzt die Projektfakten aus
.shiller-context.d/project.md und die Skills des Theme-Pakets.
Mit --root public kann der Document Root statt docs/
public/ sein; der Selektor bleibt relativ zu diesem Verzeichnis.
revert verwirft individuelle Änderungen an der ausgewählten
Datei und ist deshalb nur bewusst zu verwenden.
Damit die Theme-Vorlagen und Skills auch ohne erneutes npm install
bereitstehen, kann das Website-Repository ausschließlich
node_modules/@leuffen/themejs2/ vom sonst ignorierten
node_modules/ ausnehmen. Die konkrete .gitignore-Regel
und Git-Prüfung zeigt der
Shiller Theme Setup Skill.
Die Library enthält den Seitenzugriff über ShillerDir und getrennt davon die
Installation von Theme-Vorlagen über Leuffen\Shiller\Automation\ShillerAutomation.
Projekt-, Document-Root- und Template-Konfiguration werden über
Leuffen\Shiller\Automation\ShillerAutomationFactory aufgelöst.
Website aus _tpl anlegen
Das Theme-Paket liefert _tpl/_root/ für die bedingungslose Grundstruktur und
weitere Vorlagen unter _tpl/. init() kopiert _root in das Projekt und
installiert danach Vorlagen mit mindestens einem ausgewählten Tag im gewählten Document Root. install()
installiert nur markierte Vorlagen. Bereits vorhandene Zieldateien werden
überschrieben; zwei gleichzeitig ausgewählte Vorlagen für dasselbe Ziel sind
ein Fehler. Vor dem Kopieren werden sämtliche Ziele geprüft.
Für normale Nutzung erhält die Factory ein Startverzeichnis und übernimmt die
gesamte Auflösung von Projektwurzel, Document Root, .shiller.yml und
template_dir:
<?php use Leuffen\Shiller\Automation\ShillerAutomationFactory; $automation = (new ShillerAutomationFactory('/srv/site'))->create( documentRoot: 'docs', templateDir: './node_modules/@leuffen/themejs2/_tpl', ); $written = $automation->init(['raven']); // $written enthält Pfade relativ zur Projektwurzel, z. B. docs/index.md.
Wird templateDir weggelassen, liest die Factory template_dir aus
<projekt>/.shiller.yml. Damit kann dieselbe Auflösung unabhängig vom
CLI auch aus Anwendungen, Jobs oder Tests verwendet werden.
Markdown-Dateien unter _tpl werden ausgewählt, wenn ihr YAML Front Matter
einen shiller-Block enthält. Dieser Block bleibt in der installierten Datei
für spätere Bearbeitung erhalten:
--- shiller: tags: [base, seem2] target: index.md layout: website ---
Andere Textdateien können als .template geliefert werden. Ihr erstes YAML
Front Matter enthält denselben shiller-Block; dieser Header wird bei der
Installation entfernt, ebenso die Dateiendung .template. Eine Vorlage
navbar.osman.html.template kann so docs/_includes/navbar.html erzeugen, wenn docs der Document Root ist:
--- shiller: tags: [theme:osman] target: _includes/navbar.html --- <nav>...</nav>
In kopierten Markdown-Dateien wird der Shiller-Block auf
source: pages/index.base.md reduziert. Der Pfad ist relativ
zum konfigurierten _tpl/-Verzeichnis; so bleibt die Originalvorlage
auffindbar und revert kann sie direkt wiederherstellen.
Installierte Inhalte an neuen Kontext anpassen
Nach init/install bearbeitet shiller ai adjust Markdown und YAML unter
_data/ mit dem neuen AiContext aus phore/ai-harness. Der Selector
unterstuetzt Dateien, Globs und tag:<name>.
shiller ai adjust index.md shiller ai adjust index.md _data/general.yml shiller ai adjust "leistungen/**/*.md" "tag:arzt" shiller ai --debug --context "context/zusatz.md" adjust index.md shiller revert index.md "_data/*.yml"
Internetrecherche ist bei ai adjust standardmaessig deaktiviert.
In .shiller.yml kann sie gezielt aktiviert werden:
ai: reasoning_effort: medium web_access: true
Die Factory liest skills_dir aus der .shiller.yml; ohne Angabe gilt
node_modules/@leuffen/themejs2/skills relativ zur Projektwurzel.
Konfigurierte relative Skill-Pfade beziehen sich auf die .shiller.yml.
Die SkillCollection erkennt die darin publizierten ThemeJS2-Skills und
laedt deren Instructions und References nach Bedarf. Ein optionaler
Basis-Skill aus resources/skills/adapt-content/SKILL.md ergaenzt sie.
Projektkontext wird zuerst aus .shiller-context.d/project.md, danach
den weiteren Markdown-Dateien direkt in .shiller-context.d/ geladen;
*.rules.md und raw/ bleiben davon ausgenommen. --context kann
weitere Quellen ergaenzen. AiContext analysiert den gemeinsamen Kontext
zuerst und setzt danach einen Checkpoint. Von diesem Ausgangspunkt wird
jede ausgewaehlte Datei separat angepasst; erst nach erfolgreichen
AI-Aufrufen werden alle Ergebnisinhalte geschrieben.
Sidecars <zieldatei>.d.* werden ebenfalls beruecksichtigt.
--debug ergaenzt Skill- und Datei-Logging. Der bisherige Einstieg
shiller adapt --select "index.md" bleibt verfuegbar; Rule-Prioritaeten,
--event und --mode werden nicht mehr verwendet.
Projektkontext aus Rohdaten aufbauen
shiller context build aktualisiert
.shiller-context.d/project.md mit phore/ai-harness. Ohne Quelle wird
.shiller-context.d/raw/ rekursiv verarbeitet. Bereits erfolgreich
verarbeitete und unveränderte Dateien werden anhand ihres Content-Hashes in
.shiller-context.d/.raw-state.json übersprungen.
Eine explizit angegebene Datei oder ein Verzeichnis wird bewusst erneut
analysiert. Damit kann derselbe Input mit einem neuen --focus noch einmal
ausgewertet werden:
shiller context build
shiller context build kundendaten.pdf
shiller context build imports/kunde --focus "Nur Leistungen und Kontaktdaten"
Der mitgelieferte Build-Skill liegt unter
resources/skills/build-context/SKILL.md. Optionale projektspezifische\nZusatzregeln stehen in .shiller-context.d/project.rules.md; sie gelten nur\nfür context build und werden getrennt vom normalen Kontext geladen. Die\nvorhandene project.md ist
zugleich Vorlage und bestehender, manuell pflegbarer Kontext. Informationen,
die in neuen Quellen nicht vorkommen, bleiben erhalten. Eindeutige
Aktualisierungen dürfen bestehende Fakten ändern; unklare Widersprüche werden
als offene Punkte festgehalten statt stillschweigend überschrieben zu werden.
Sidecars wie _data/general.yml.d.json liefern Feldbedeutung und
Strukturhinweise. Markdown-Front-Matter und bestehende Layouts bleiben
grundsaetzlich erhalten; fuer _data-YAML gelten die vorhandenen
Keys und Strukturen.
Document Root und mehrere Websites
shiller.target ist immer relativ zum Document Root: index.md schreibt
docs/index.md, _includes/navbar.html schreibt
docs/_includes/navbar.html. Dateien aus _tpl/_root/docs/ werden ebenfalls
dorthin kopiert. Andere Dateien aus _tpl/_root/ bleiben relativ zur
Projektwurzel, zum Beispiel package.json.
Die Installation nutzt .shiller.yml in der Projektwurzel. Pfade in
template_dir werden relativ dazu aufgelöst; beim mitgelieferten ThemeJS2
ist das node_modules/@leuffen/themejs2/_tpl.
Ein expliziter relativer templateDir-Wert der Factory wird dagegen relativ
zur Projektwurzel aufgelöst. So kann jede Website in einem eigenen
Projektverzeichnis neben anderen Websites liegen.
Weitere Aufrufe
Die ausführliche CLI-Reihenfolge steht am Anfang dieser README; der verbindliche Template-Vertrag in AGENTS.md und die AI Usage Info liefern Layout und Beispiele.
Der bisherige Seiten-API-Entwurf
und die Seitenbeispiele beschreiben den separaten
ShillerDir-Bereich.
Vollstaendiges Demo-Projekt
Unter demo/ stehen Template und installierte Website getrennt.
Die Beispiele zeigen den zentralen Projektkontext, konfigurierbares
skills_dir, Markdown-Zieldateien und YAML-Sidecars. Bearbeitungsregeln
werden ausschliesslich durch die ThemeJS2-Skills bereitgestellt.