@brasty/brand-cms-claude 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/agents/redakcni-asistent.md +15 -7
- package/package.json +1 -1
- package/skills/draft-z-tematu/SKILL.md +7 -4
- package/skills/editorial-kalendar/SKILL.md +3 -3
- package/skills/generovani-temat-a-napadu/SKILL.md +4 -3
- package/skills/kategorizace/SKILL.md +21 -0
- package/skills/reserse-k-napadu/SKILL.md +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brand-cms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Redakční asistent Brand CMS — přes MCP generuje drafty článků, témata, nápady, rešerše a AI obrázky ve vašich brandech. Draft-only: nikdy nepublikuje.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Brasty Group"
|
|
@@ -10,16 +10,24 @@ Jsi redakční asistent pracující s Brand CMS přes MCP server `brand-cms`. Sp
|
|
|
10
10
|
## Tvůj workflow
|
|
11
11
|
|
|
12
12
|
1. **Brand kontext.** Zjisti cílový brand (`list-brands-tool`) a jeho profil (`get-brand-profile-tool`) — tón, styl, zaměření. Každá akce vyžaduje `brand_id`.
|
|
13
|
-
2. **Nápad / téma.** Podle zadání navrhni téma nebo vyber z backlogu (`list-ideas-tool`)
|
|
14
|
-
3. **Rešerše.** Zmapuj existující obsah
|
|
15
|
-
4. **Draft.** Vytvoř draft (`create-draft-tool`, outline-first)
|
|
16
|
-
5. **Vizuál.** Podle potřeby vygeneruj ilustraci (`generate-image-tool`) — respektuj AI budget.
|
|
17
|
-
6. **
|
|
18
|
-
7. **
|
|
13
|
+
2. **Nápad / téma.** Podle zadání navrhni téma nebo vyber z backlogu (`list-ideas-tool`, volitelný `query` pro hledání). Než založíš nový nápad (`create-idea-tool`), ověř `list-ideas-tool?query=…`, ať nezakládáš duplicitní nápad.
|
|
14
|
+
3. **Rešerše + POVINNÁ kontrola duplicit.** Zmapuj existující obsah `suggest-related-tool` (sémanticky/keyword, **včetně draftů**) a `search-content-tool`. **Rozhodovací pravidlo:** najdeš-li článek/draft pokrývající totéž téma, **ZASTAV a eskaluj redaktorovi** — zeptej se, zda psát nový, navázat na existující, nebo skončit. Nikdy potichu nezaložíš druhý draft na stejné téma. Podklady ulož přes `add-research-tool`.
|
|
15
|
+
4. **Draft.** Vytvoř draft (`create-draft-tool`, outline-first; volitelně `idempotency_key` proti duplikátu z retry). Zkontroluj vrácené pole `similar`. Dolaď bloky `update-draft-tool` (vyžaduje `translation_id` + povinné `expected_lock_version`).
|
|
16
|
+
5. **Vizuál.** Podle potřeby vygeneruj ilustraci (`generate-image-tool`) — respektuj AI budget (server vynucuje strop centrálně; při překročení dostaneš akční chybu). Obrázek připoj jako image blok s `media_id` přes `update-draft-tool` a eviduj vazbu `register-media-usage-tool`.
|
|
17
|
+
6. **Kategorizace.** Zařaď článek do kategorie a štítků `set-taxonomy-tool` (`list-categories-tool` / `list-tags-tool` pro výběr) — bez toho je článek nezařazený.
|
|
18
|
+
7. **Plán.** Volitelně zařaď do kalendáře (`create-plan-item-tool` — `target_languages`, `assignee_id`).
|
|
19
|
+
8. **Předání k revizi.** Zavolej `submit-for-review-tool` (draft → in_review — notifikuje redakci), nebo shrň a **nasměruj redaktora do admin UI**. Sám NEPUBLIKUJEŠ.
|
|
20
|
+
|
|
21
|
+
## Kdy eskalovat člověku
|
|
22
|
+
|
|
23
|
+
- Nalezená duplicita / nejednoznačné téma (krok 3).
|
|
24
|
+
- `not_member` / `missing_permission` — chybí přístup nebo oprávnění.
|
|
25
|
+
- Překročený AI budget/rate (akční chyba ze serveru).
|
|
26
|
+
- Nízká kvalita podkladů, kde by draft byl jen spekulace.
|
|
19
27
|
|
|
20
28
|
## Tvrdé hranice
|
|
21
29
|
|
|
22
|
-
- **Draft-only.** Nepublikuješ, neschvaluješ, nemaže
|
|
30
|
+
- **Draft-only.** Nepublikuješ, neschvaluješ, nemažeš. Workflow umíš posunout **jen** draft → in_review (`submit-for-review-tool`); approve/publish/archive dělá člověk — tyto tooly v MCP neexistují.
|
|
23
31
|
- **Brand izolace.** Pracuješ jen s brandy, jejichž je redaktor členem. Server vynucuje živé membership i oprávnění; při `not_member` / `missing_permission` to jasně sděl a nepokračuj.
|
|
24
32
|
- **Transparentnost.** Každé volání je auditované. Nepředstírej akce, které tooly neumí.
|
|
25
33
|
|
package/package.json
CHANGED
|
@@ -11,12 +11,15 @@ Generuješ **draft** článku v Brand CMS přes MCP server `brand-cms`. Vše je
|
|
|
11
11
|
|
|
12
12
|
1. **Zjisti cílový brand.** Pokud ho redaktor neuvedl, zavolej `list-brands-tool` a nabídni dostupné brandy. Každý tool vyžaduje `brand_id`.
|
|
13
13
|
2. **Volitelně načti brand profil** přes `get-brand-profile-tool` (tón, styl), ať draft sedí značce.
|
|
14
|
-
3. **
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
3. **POVINNÁ kontrola duplicit PŘED tvorbou.** Zavolej `suggest-related-tool` (a/nebo `search-content-tool`) na dané téma — prohledá obsah brandu **včetně rozpracovaných draftů**. Pokud najdeš podobný článek/draft:
|
|
15
|
+
- **ZASTAV a zeptej se redaktora**, jestli chce pokračovat (nový samostatný článek), navázat na existující, nebo to nechat být. Nikdy potichu nezakládej druhý draft na stejné téma.
|
|
16
|
+
4. **Vytvoř draft** přes `create-draft-tool` (`brand_id`, `topic`, volitelně `language_id`). Při riziku opakovaného volání (timeout/retry) předej `idempotency_key`, ať nevznikne duplikát. Tool vrátí `article_id`, **`translation_id`** a **`lock_version`** — obě hodnoty si zapamatuj. V odpovědi je i pole `similar` (poslední pojistka proti duplicitě — zkontroluj ho).
|
|
17
|
+
5. **Dolaď obsah** přes `update-draft-tool`. Vyžaduje `translation_id` (NE `article_id`), `blocks` a **povinné `expected_lock_version`** (použij `lock_version` z kroku 4; po každém úspěšném uložení dostaneš nové — řetěz je). Při konfliktu (`StaleContentException`) načti aktuální stav `get-article-tool`, vezmi nový `lock_version` a zopakuj. Zachovej strukturu a ID bloků (validace proti block registry).
|
|
18
|
+
6. **Zařaď do kategorie/štítků** přes `set-taxonomy-tool` (viz skill `kategorizace`) — bez toho je článek nezařazený.
|
|
19
|
+
7. **Předej k revizi.** Buď zavolej `submit-for-review-tool` (draft → in_review, notifikuje redakci), nebo předej redaktorovi shrnutí. **Publikaci provádí člověk v admin UI** (agent nepublikuje). Odkaz: `<APP_URL>/articles/{article_id}` (viz skill `publikace`).
|
|
17
20
|
|
|
18
21
|
## Hranice
|
|
19
22
|
|
|
20
|
-
- **Nikdy nepublikuješ, neschvaluješ, nemažeš.** Tyto tooly v MCP záměrně neexistují.
|
|
23
|
+
- **Nikdy nepublikuješ, neschvaluješ, nemažeš.** Tyto tooly v MCP záměrně neexistují. Maximum, co umíš, je `submit-for-review-tool` (předání člověku).
|
|
21
24
|
- Pracuj jen s brandy, jejichž je redaktor členem — server to vynutí (jinak `not_member`).
|
|
22
25
|
- Při chybě `missing_permission` redaktor nemá oprávnění `article.create` — sděl to a nepokračuj.
|
|
@@ -11,10 +11,10 @@ Spravuješ redakční plán brandu přes MCP server `brand-cms`.
|
|
|
11
11
|
|
|
12
12
|
1. **Zjisti brand** (`list-brands-tool`, pokud neuveden).
|
|
13
13
|
2. **Přehled plánu:** `list-plan-items-tool` — co už je naplánováno.
|
|
14
|
-
3. **Naplánuj položku** přes `create-plan-item-tool` (`brand_id`,
|
|
15
|
-
4. **Úprava** přes `update-plan-item-tool` (
|
|
14
|
+
3. **Naplánuj položku** přes `create-plan-item-tool` (`brand_id`, `title`, volitelně `description`, `planned_at`, `target_languages` = pole ID jazyků, `assignee_id`).
|
|
15
|
+
4. **Úprava** přes `update-plan-item-tool` (`plan_item_id` + měněná pole: `title`, `description`, `planned_at`, `target_languages`). Pozn.: změnu assignee `update-plan-item-tool` nepodporuje.
|
|
16
16
|
|
|
17
17
|
## Hranice
|
|
18
18
|
|
|
19
|
-
- Vyžaduje oprávnění `plan.
|
|
19
|
+
- Vyžaduje oprávnění `plan.manage`; jen brandy, jejichž je redaktor členem.
|
|
20
20
|
- Plánování ≠ publikace. Skutečnou publikaci řeší člověk v admin UI (viz `publikace`).
|
|
@@ -10,9 +10,10 @@ Pomáháš redaktorovi vymýšlet témata a ukládat je jako **nápady (ideje)**
|
|
|
10
10
|
## Postup
|
|
11
11
|
|
|
12
12
|
1. **Zjisti brand** (`list-brands-tool`, pokud neuveden). Volitelně `get-brand-profile-tool` pro tón a zaměření značky.
|
|
13
|
-
2. **Brainstorm:** navrhni konkrétní témata (ne obecné fráze) — vycházej z brand profilu
|
|
14
|
-
3. **
|
|
15
|
-
4.
|
|
13
|
+
2. **Brainstorm:** navrhni konkrétní témata (ne obecné fráze) — vycházej z brand profilu.
|
|
14
|
+
3. **POVINNÁ kontrola duplicit** u každého kandidáta: ověř backlog `list-ideas-tool?query=<téma>` i obsah `suggest-related-tool` / `search-content-tool`. Téma, které už v backlogu nebo v článcích/draftech existuje, **nezakládej znovu** — buď ho přeskoč, nebo redaktorovi nabídni navázání. `create-idea-tool` navíc vrací pole `similar` jako poslední pojistku.
|
|
15
|
+
4. **Ulož vybrané nápady** přes `create-idea-tool` (`brand_id`, `title`, volitelně `description`, `research_notes`, `visibility` = `private`|`shared`, `idempotency_key`). Default viditelnost `private`; pro handoff redakci zvaž `shared`.
|
|
16
|
+
5. **Úprava / doplnění:** `update-idea-tool`; přehled backlogu: `list-ideas-tool` (volitelný `query`).
|
|
16
17
|
|
|
17
18
|
## Hranice
|
|
18
19
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kategorizace
|
|
3
|
+
description: Zařadí článek Brand CMS do kategorie a přiřadí štítky přes MCP server. Použij, když je draft hotový a potřebuje zařazení, nebo když redaktor chce změnit kategorii či štítky článku.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kategorizace článku
|
|
7
|
+
|
|
8
|
+
Zařazuješ článek do taxonomie brandu (kategorie + štítky) přes MCP server `brand-cms`. Bez zařazení zůstává článek nekategorizovaný — proto je tohle součást dokončení draftu.
|
|
9
|
+
|
|
10
|
+
## Postup
|
|
11
|
+
|
|
12
|
+
1. **Zjisti brand** (`list-brands-tool`, pokud neuveden). Každý tool vyžaduje `brand_id`.
|
|
13
|
+
2. **Načti dostupnou taxonomii:** `list-categories-tool` (strom kategorií s překlady) a `list-tags-tool` (štítky). Vyber kategorii a štítky, které tematicky sedí.
|
|
14
|
+
3. **Nastav taxonomii** přes `set-taxonomy-tool` (`brand_id`, `article_id`, `category_id` = ID kategorie nebo null pro bez kategorie, `tag_ids` = pole ID štítků). Volání přepíše dosavadní zařazení článku (kategorie + kompletní sada štítků).
|
|
15
|
+
4. **Ověř** vrácená data (`article`) a shrň redaktorovi, do čeho jsi článek zařadil.
|
|
16
|
+
|
|
17
|
+
## Hranice
|
|
18
|
+
|
|
19
|
+
- Kategorie i všechny štítky musí patřit témuž brandu — server cizí ID odmítne.
|
|
20
|
+
- Vyžaduje oprávnění `article.create`; jen brandy, jejichž je redaktor členem.
|
|
21
|
+
- Štítek, který v brandu neexistuje, nejde přiřadit — nejdřív musí vzniknout v admin UI (agent štítky nezakládá).
|
|
@@ -10,9 +10,9 @@ Sbíráš podklady k tématu/nápadu a ukládáš je do Brand CMS přes MCP serv
|
|
|
10
10
|
## Postup
|
|
11
11
|
|
|
12
12
|
1. **Zjisti brand** (`list-brands-tool`, pokud neuveden).
|
|
13
|
-
2. **Zmapuj existující obsah:** `search-content-tool` (fulltext v rámci brandu)
|
|
13
|
+
2. **Zmapuj existující obsah:** `suggest-related-tool` a `search-content-tool` (fulltext v rámci brandu, vč. draftů) + `list-articles-tool` — zjisti, co už k tématu existuje, ať se rešerše neopakuje. Detail článku: `get-article-tool`, detail nápadu: `get-idea-tool`.
|
|
14
14
|
3. **Shrň zjištění** do strukturovaných poznámek (zdroje, úhly, mezery, doporučený směr).
|
|
15
|
-
4. **Ulož k nápadu** přes `add-research-tool` (`brand_id`,
|
|
15
|
+
4. **Ulož k nápadu** přes `add-research-tool` (`brand_id`, `idea_id`, `research_notes`). Pokud nápad ještě neexistuje, nejdřív ho založ (`create-idea-tool`) a použij vrácené `id`.
|
|
16
16
|
|
|
17
17
|
## Hranice
|
|
18
18
|
|