Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 62918a8b96 | |||
| 53f7f99b9d |
@@ -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.
|
Jede Persona hat im Frontmatter jetzt eine `required_prompt_modules`-Liste — Vorgriff auf M4.
|
||||||
|
|
||||||
### Phase M4 — NEXT
|
### Phase M4 — DONE (2026-06-02)
|
||||||
- Skill-Manifeste im separaten Repo `parsecapere-skills`.
|
- Drei Skill-Manifeste im Schwester-Repo
|
||||||
- `skill-index.md` mit echten Eintraegen befuellen (heute noch Stub).
|
[`parsecapere-skills/composite/`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite)
|
||||||
- Frontmatter-`required_prompt_modules`-Listen in volle Skill-Definitionen ueberfuehren.
|
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`).
|
- `mcp-gitea`-Service auf LLM-VPS (Tools: `load_skill`, `list_skills`, `load_prompt_module`).
|
||||||
- STDB-Cache (`gitea_section_cache`-Tabelle).
|
- STDB-Cache (`gitea_section_cache`-Tabelle).
|
||||||
- Webhook-Endpoint `/webhook` fuer Cache-Invalidation.
|
- Webhook-Endpoint `/webhook` fuer Cache-Invalidation.
|
||||||
|
|||||||
+67
-49
@@ -1,78 +1,96 @@
|
|||||||
---
|
---
|
||||||
purpose: skill-discovery
|
purpose: skill-discovery
|
||||||
status: stub
|
status: populated
|
||||||
created: 2026-06-02
|
created: 2026-06-02
|
||||||
created_by: phase-M2
|
populated: 2026-06-02
|
||||||
populated_in: phase-M4
|
populated_by: phase-M4
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill Index — parsecapere Prompts
|
# Skill Index — parsecapere
|
||||||
|
|
||||||
> **Stub.** Dieser Index wird in **Phase M4** mit Skill-Manifesten gefuellt
|
> Discovery-Index fuer alle Skills die der `mcp-gitea`-Service (Phase M5)
|
||||||
> (siehe `2026-06-02 — Master-Synthese — Prompt-Migration-Reihenfolge.md`).
|
> laden kann. Jeder Eintrag verlinkt auf das Skill-Manifest im Schwester-Repo
|
||||||
>
|
> [`parsecapere-skills`](https://gitea.parsecapere.de/tim/parsecapere-skills).
|
||||||
> Bis dahin steht hier nur ein Hinweis welche Personas existieren — als
|
|
||||||
> grober Lageplan fuer Tim's Review.
|
|
||||||
|
|
||||||
## Vorhandene Personas (nach M2)
|
---
|
||||||
|
|
||||||
| Persona | Quelle (Code) | Trigger (geplant) |
|
## Skill-Tabelle
|
||||||
|---------------------------------|---------------------------------------------------|---------------------------------|
|
|
||||||
| `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" |
|
|
||||||
|
|
||||||
## 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) |
|
||||||
|
|
||||||
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
|
### `default` — Voice-Entry-Skill
|
||||||
- skill_id: kreuzwort-builder
|
|
||||||
trigger_keywords: [kreuzwort, kreuzwortraetsel, crossword]
|
`main-voice` wird beim Voice-Entry eines Users direkt geladen — kein Discovery,
|
||||||
required_tools:
|
kein Keyword-Match. Das `llm-gateway` ruft den Composer:
|
||||||
- atomic_validate_crossword_grid
|
|
||||||
- atomic_create_crossword_grid_brick
|
```
|
||||||
- atomic_create_letter_palette_brick
|
const { system_prompt, tools } = await compose_prompt("main-voice");
|
||||||
- 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 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"
|
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
|
llm-gateway spawn'd Sub-Agent mit komponiertem Prompt + tools
|
||||||
und liefert assembled prompt + tool-defs zurueck.
|
|
||||||
│
|
│
|
||||||
▼
|
▼
|
||||||
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user