Compare commits

..

4 Commits

Author SHA1 Message Date
Tim (via Claude) 661401d964 investor: Overlay-Persona main-voice-investor + skill-index-Eintrag (Stueck 2) 2026-06-14 18:30:04 +02:00
tim f5ec122060 base/style.md aktualisiert 2026-06-03 19:00:52 +02:00
tim 62918a8b96 M4: README — Phase M4 als DONE markiert, Verweis auf skills-Repo-Manifeste
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 15:54:58 +02:00
tim 53f7f99b9d M4: skill-index.md — Stub → populated mit allen 3 Skills
Status: stub → populated.

Skill-Tabelle mit allen drei Initial-Skills:
- main-voice (default-Aktivierung, 17 Tools, hop_budget=6)
- kreuzwort-builder (Trigger keyword, 5 Tools, hop_budget=12)
- lueckentext-builder (Trigger keyword, 4 Tools, hop_budget=8)

Jede Zeile verlinkt auf das Skill-Manifest im Schwester-Repo
parsecapere-skills via absolute Gitea-URL.

Plus Erklaerungs-Sections:
- Aktivierungs-Pfade: default-Skill vs spawn-by-keyword
- Discovery-Flow als Ablauf-Diagramm (User-Wunsch → Tool-Dispatch →
  compose_prompt → Cache-Check → Sub-Agent-Spawn → Erfolgsmeldung)
- Hinweis fuer M5-Implementation: Manifest-required_prompt_modules
  ist Single-Source-of-Truth, kein silent-skip bei fehlenden Modulen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 15:54:35 +02:00
4 changed files with 131 additions and 54 deletions
+9 -5
View File
@@ -100,12 +100,16 @@ Module-Extraktion in 13 Commits. Aufteilung der 3 Monolithen in **11 wiederverwe
Jede Persona hat im Frontmatter jetzt eine `required_prompt_modules`-Liste — Vorgriff auf M4.
### Phase M4 — NEXT
- Skill-Manifeste im separaten Repo `parsecapere-skills`.
- `skill-index.md` mit echten Eintraegen befuellen (heute noch Stub).
- Frontmatter-`required_prompt_modules`-Listen in volle Skill-Definitionen ueberfuehren.
### Phase M4 — DONE (2026-06-02)
- Drei Skill-Manifeste im Schwester-Repo
[`parsecapere-skills/composite/`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite)
angelegt: `main-voice.md`, `kreuzwort-builder.md`, `lueckentext-builder.md`.
- `skill-index.md` von Stub → populated. Verlinkt auf alle drei Manifeste.
- Persona-Frontmatter (`required_prompt_modules`) und Skill-Manifest sind heute
noch dupliziert — M5-Composer entscheidet welche Quelle Single-Source-of-Truth ist.
(Default-Plan: Skill-Manifest gewinnt, Persona-Frontmatter ist Backup-Hinweis.)
### Phase M5 — danach
### Phase M5 — NEXT
- `mcp-gitea`-Service auf LLM-VPS (Tools: `load_skill`, `list_skills`, `load_prompt_module`).
- STDB-Cache (`gitea_section_cache`-Tabelle).
- Webhook-Endpoint `/webhook` fuer Cache-Invalidation.
+4
View File
@@ -24,3 +24,7 @@ extracted_by: phase-M3
Persona-spezifische Stil-Regeln (z.B. Plan-Satz vor Tools fuer Main-Voice,
Funktionsnamen-Verbot in User-Antworten) leben im jeweiligen Persona-Modul.
## Test 2026-06-03 — M5.6 Hot-Reload-Beweis
Diese Zeile wurde via Gitea-UI editiert und sollte gleich automatisch im komponierten Prompt auftauchen.
+50
View File
@@ -0,0 +1,50 @@
---
skill_id: main-voice-investor
version: 0.1.0
status: active
extends: personas/main-voice
created: 2026-06-14
note: |
Duenne Overlay-Persona ueber main-voice. Aktiviert wenn Login-Rolle = "investor".
Aendert NICHT die Faehigkeiten (Investor sieht/steuert dieselben Bricks wie ein
normaler User) — sondern nur Begruessung + proaktives Aufzeigen.
---
# main-voice-investor — Overlay fuer Kooperatoren & Firmen-Interessenten
> Diese Persona liegt ALS LETZTES MODUL ueber `personas/main-voice`.
> Alle Faehigkeiten, Tool-Sequenzen und Regeln von main-voice gelten unveraendert.
> Hier kommt NUR die Investor-Rahmung dazu.
## WER vor dir steht
Der eingeloggte User hat die Rolle **investor**. Das sind **potenzielle
Kooperatoren, Firmen-Interessenten, IHK-Vertreter oder Partner**, die
parsecapere.de evaluieren.
## Wie du dich verhaeltst
1. **Begruessung:** Begruesse sie ausdruecklich als **Kooperatoren und
Firmen-Interessenten** — herzlich, professionell, auf Augenhoehe.
2. **Behandle sie wie normale User.** Alle Brick-Faehigkeiten stehen ihnen offen,
genau wie jedem User. Du steuerst die Stream-Box fuer sie exakt wie sonst.
3. **Proaktiv aufzeigen:** Gib zusaetzlich — **absatz- und stichwortartig** — preis,
was du **sonst noch** zeigen kannst. Kein Verkaufsmonolog, sondern ein kurzer
"Was hier noch moeglich ist"-Hinweis, damit sie das Potenzial sehen.
## Form des Aufzeigens
- Erst die normale, hilfreiche Antwort auf ihr Anliegen (wie main-voice).
- Dann ein **kurzer Absatz** + **Stichwort-Liste** mit weiteren Faehigkeiten/
Inhalten, die du auf Wunsch demonstrieren kannst (z.B. Lern-Bricks,
Sprach-Workflows, Live-Visualisierung in der Stream-Box).
- Lade ein, eines davon auszuprobieren ("Sag einfach Bescheid, dann zeige ich …").
## Was gleich bleibt
- Keine Tool-Namen nennen, menschlich sprechen (main-voice-Stilregeln).
- Nichts erfinden was du nicht als Brick zeigen kannst — `wishlist_feature` bei Luecken.
- Plan-Satz -> Tools -> knappes Resultat (main-voice-Workflow).
> Spaeter (F1): Diese Overlay-Persona waechst zu einem gefuehrten Investoren-
> Rundgang (Seiten-Tour-Skill). Heute: Begruessung + proaktives Aufzeigen.
+68 -49
View File
@@ -1,78 +1,97 @@
---
purpose: skill-discovery
status: stub
status: populated
created: 2026-06-02
created_by: phase-M2
populated_in: phase-M4
populated: 2026-06-02
populated_by: phase-M4
---
# Skill Index — parsecapere Prompts
# Skill Index — parsecapere
> **Stub.** Dieser Index wird in **Phase M4** mit Skill-Manifesten gefuellt
> (siehe `2026-06-02 — Master-Synthese — Prompt-Migration-Reihenfolge.md`).
>
> Bis dahin steht hier nur ein Hinweis welche Personas existieren — als
> grober Lageplan fuer Tim's Review.
> Discovery-Index fuer alle Skills die der `mcp-gitea`-Service (Phase M5)
> laden kann. Jeder Eintrag verlinkt auf das Skill-Manifest im Schwester-Repo
> [`parsecapere-skills`](https://gitea.parsecapere.de/tim/parsecapere-skills).
## Vorhandene Personas (nach M2)
---
| Persona | Quelle (Code) | Trigger (geplant) |
|---------------------------------|---------------------------------------------------|---------------------------------|
| `personas/main-voice.md` | `llm-gateway/llm/gemini.js` | (immer — User-Voice-Entry) |
| `personas/kreuzwort-builder.md` | `llm-gateway/orchestrator/kreuzwort-orchestrator.js` | "Kreuzwort", "Crossword" |
| `personas/lueckentext-builder.md` | `llm-gateway/orchestrator/lueckentext-orchestrator.js` | "Lueckentext", "Vokabel-Drill" |
## Skill-Tabelle
## Was nach M4 hier steht
| Skill-ID | Aktivierung | Trigger-Keywords | Tools | Hop-Budget | Manifest |
|--------------------------|----------------------------|-----------------------------------------------|------:|-----------:|---------------------------------------------------------------------------------------------------------|
| `main-voice` | default (Voice-Entry) | _(keine — direkt geladen)_ | 17 | 6 | [`parsecapere-skills/composite/main-voice.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/main-voice.md) |
| `kreuzwort-builder` | spawn-by-keyword | `kreuzwort` · `kreuzwortraetsel` · `crossword`| 5 | 12 | [`parsecapere-skills/composite/kreuzwort-builder.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/kreuzwort-builder.md) |
| `lueckentext-builder` | spawn-by-keyword | `lueckentext` · `vokabel-drill` · `cloze` | 4 | 8 | [`parsecapere-skills/composite/lueckentext-builder.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/lueckentext-builder.md) |
| `main-voice-investor` | role-gated (investor) | _(keine — rollen-gated)_ | 20 | 6 | [`parsecapere-skills/composite/main-voice-investor.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/main-voice-investor.md) |
Pro Skill ein Eintrag mit:
- `skill_id`, `trigger_keywords`, `required_tools`, `required_prompt_modules`
- `max_tokens` (Composition-Limit)
- Link zum Skill-Manifest (separates Repo `parsecapere-skills`)
---
Beispiel-Eintrag (Vorgriff):
## Aktivierungs-Pfade
```yaml
- skill_id: kreuzwort-builder
trigger_keywords: [kreuzwort, kreuzwortraetsel, crossword]
required_tools:
- atomic_validate_crossword_grid
- atomic_create_crossword_grid_brick
- atomic_create_letter_palette_brick
- atomic_create_questions_block_brick
- atomic_finalize_kreuzwort_layer
required_prompt_modules:
- base/identity.md
- base/style.md
- workflows/sub-agent-discipline.md
- workflows/self-correction.md
- tools-context/atomic-finalize.md
- personas/kreuzwort-builder.md
max_tokens: 1500
manifest: parsecapere-skills/composite/kreuzwort-builder.md
### `default` — Voice-Entry-Skill
`main-voice` wird beim Voice-Entry eines Users direkt geladen — kein Discovery,
kein Keyword-Match. Das `llm-gateway` ruft den Composer:
```
const { system_prompt, tools } = await compose_prompt("main-voice");
```
## Discovery-Flow (geplant, siehe Note 2026-06-02 Skill-Discovery+CoT)
und uebergibt das an `GoogleGenerativeAI.startChat()`.
### `spawn-by-keyword` — Sub-Agents
Wenn die Main-Voice ein Dispatch-Tool (`create_kreuzwort_task`,
`create_lueckentext_task`) aufruft, spawn'd der Backend-Code (Orchestrator-JS
oder spaeter ein generischer Spawner) einen Sub-Agent mit dem passenden Skill:
```
const { system_prompt, tools } = await compose_prompt("kreuzwort-builder");
// → eigener Gemini-Call, eigenes Hop-Budget, eigener Trace-callId
```
Die Trigger-Keywords sind heute (M4) noch **dokumentarisch** — sie werden in
M5+ vom Composer als Discovery-Index ausgewertet (Tool `list_skills(trigger="kreuzwort")`).
---
## Discovery-Flow (geplant ab M5)
```
User: "Bau ein Kreuzwort ueber Pflanzen"
main-voice (Main-LLM) ruft Tool: list_skills(trigger="kreuzwort")
main-voice (Main-LLM, schon mit komponiertem Prompt aktiv) erkennt
"kreuzwort" und ruft Tool: create_kreuzwort_task(thema="Pflanzen", lang="de")
mcp-gitea returnt: { skill_id: "kreuzwort-builder", manifest: "..." }
llm-gateway (Tool-Handler) ruft: compose_prompt("kreuzwort-builder")
main-voice ruft Tool: load_skill("kreuzwort-builder")
mcp-gitea (LLM-VPS) checkt STDB-Cache gitea_section_cache:
├── HIT → returnt assembled prompt aus Cache
└── MISS → fetcht alle 8 Module aus parsecapere-prompts,
komponiert in der Compose-Order (base → workflows →
tools-context → persona), cached, returnt
mcp-gitea komponiert Prompt aus skill.required_prompt_modules
und liefert assembled prompt + tool-defs zurueck.
llm-gateway spawn'd Sub-Agent mit komponiertem Prompt + tools
Sub-Agent wird mit assembled prompt + tools gespawnt.
Sub-Agent fuehrt Self-Correction-Loop + Build-Schritte aus,
liefert Erfolgsmeldung zurueck an Main-Voice
Main-Voice erzaehlt User: "Kreuzwort bereit: 7 Woerter ..."
```
→ Heute (M2) ist davon **nichts implementiert**. Es gibt nur die rohen
Personas, die aktuell weiterhin direkt im JS-Code stehen. M3-M5 baut
den Discovery-Layer.
---
## Hinweis fuer M5-Implementation
Die Manifest-`required_prompt_modules`-Listen sind die **Single-Source-of-Truth**
fuer die Compose-Order. Der Composer (`mcp-gitea`) darf nicht selbst entscheiden
welche Module er laed — er liest exakt was im Manifest steht, in der dortigen
Reihenfolge.
Falls ein Modul-Pfad nicht existiert oder ein Modul defekt ist: hart fail'en,
nicht silent-skip. Bei einem fehlenden Persona-Modul macht der Compose keinen Sinn.