update-plugin
Stáhne do nainstalovaného pluginu poslední stav větve, na které stojí, a vypíše, co se změnilo — které skilly přibyly, změnily se nebo zmizely. Poradí, jestli stačí reload, nebo je nutný restart. Relo
SKILL.mdskills/update-plugin/SKILL.md
GitHubUpdate Plugin
Cílem je dostat instalaci na poslední stav větve, na které stojí, a hlavně říct, co se změnilo — bez toho uživatel neví, jestli mu stačí reload, nebo musí restartovat. Větev se nikdy nepřepíná; instalace pořízená z jiné větve zůstane na ní.
Reload skill nespouští a spustit ho nemůže: /reload-plugins i /reload-skills
jsou příkazy klienta, ne spustitelné programy. Skill končí tím, že řekne, který
z nich zadat.
Závazným kontraktem jsou hlavičky skriptů — scripts/update.sh a install.sh
v kořeni pluginu. Popisují klíče výstupu i návratové kódy a při rozporu s tímto
textem platí ony. Narazíš-li ve výstupu na klíč nebo návratový kód, který kroky
2 a 3 neuvádějí, otevři hlavičku scripts/update.sh a řiď se jí — nedomýšlej
si význam.
Postup
1. Stáhni změny
bash "${CLAUDE_PLUGIN_ROOT}/skills/update-plugin/scripts/update.sh"
Skript sám nic nemerguje napřeskáčku — deleguje na install.sh v kořeni
pluginu, který ověří remote a udělá merge --ff-only. Git proto nevolej přímo
ani tehdy, když se to zdá rychlejší; obejdeš tím kontroly, kvůli kterým skript
vznikl.
Návratové kódy vyhodnoť dřív, než začneš cokoli hlásit:
| Kód | Co znamená | Co s tím |
|---|---|---|
| 0 | Hotovo — i když nebylo co stáhnout | Pokračuj krokem 2 |
| 1 | Poškozená instalace (error=installer_missing, error=not_a_git_installation, error=detached_head) |
Přečti ${CLAUDE_PLUGIN_ROOT}/README.md a nabídni z něj konkrétní krok nápravy. Neodpovídá-li README na to, co se stalo, poraď sám: u detached_head stačí přepnout instalaci na větev a spustit skill znovu. Neopravuj to za uživatele |
| 2 | Cíl obsazený cizím obsahem nebo cizím remotem | Ohlas doslova, co skript vypsal na chybový výstup; úklid patří uživateli |
| jiný | Selhání propuštěné z gitu, typicky 128 u nedostupného remotu nebo chybějícího klíče |
Ohlas doslova stderr; je to stav prostředí, ne něco, co má skill obcházet |
Rozhoduj podle návratového kódu, ne podle klíče — error=update_failed
uvozuje každé selhání propuštěné z install.sh, tedy i kód 2.
2. Přečti výstup
Skript píše key=value a sekce uvozené hlavičkou v []. Klíče, na kterých
záleží:
| Klíč | Význam |
|---|---|
branch= |
Větev, na které instalace stojí a která se stahovala. Uvnitř [dev_copy] je jako dev_branch= větev vývojové kopie — nezaměň je |
install_dirty=true |
Instalace má necommitnuté změny, stažení se přeskočilo — ne že nebylo co stáhnout |
updated=false |
Instalace už byla na posledním stavu |
reason=branch_not_on_remote |
Instalace stojí na čistě lokální větvi — není odkud stahovat, což není chyba |
commits=N |
Kolik commitů přibylo |
[commits] |
Jejich --oneline výpis; čerpej z něj, když [skills] mlčí a je potřeba říct, co se tedy změnilo |
[skills] |
added=, modified=, removed= podle skillů; (rozcestník) je kořenový SKILL.md |
[files] |
Všechny změněné soubory, i mimo skills/ |
[dev_copy] |
Zda stojíš v odděleném klonu téhož repozitáře, a co v něm zůstalo — dev_branch, dirty, unpushed, unmerged. Hodnoty no_upstream a unknown znamenají „nedalo se určit", ne „nic tam není" |
install_dirty=true nikdy nezaměňuj za „nic nového" — jsou to opačné situace
a uživatel v té první přijde o změny, které čeká.
3. Poraď, co dál
Větve ber v tomhle pořadí; první dvě se snadno zamění a záměna stojí uživatele změny, na které čeká.
install_dirty=true→ řeš jako první, ještě předupdated. Stažení se vůbec nespustilo, protože instalace má lokální změny. Ohlas to a řekni, že je potřeba je uložit nebo zahodit; teprve pak má smysl skill spustit znovu.reason=branch_not_on_remote→ řekni, na které větvi instalace stojí (branch=) a že na ní není odkud stahovat. Není to porucha; instalace prostě sedí na větvi, která nikdy neodešla na remote.updated=false(ainstall_dirty=false) → neposílej uživatele nic mačkat. Reload bez změn na disku nic neudělá a jen ho zdrží.updated=true→ doporuč/reload-plugins. Instalace běží jako plugin (sagittaras@skills-dir), takže plugin-level reload je ta správná úroveň;/reload-skillszmiň jako lehčí variantu.[skills]obsahujeadded=neboremoved=→ připoj, že po přibylém nebo zaniklém skillu je jistotou restart Claude Code. Reload je stavěný na změny na disku, ale u nově vzniklého skillu se na něj nespoléhej.[dev_copy] detected=true→ varuj, jakmile platí cokoli zdirty=true,unpushedjeno_upstreamnebo větší než nula,unmergedje větší než nula nebounknown. Instalace táhne jen svou větev z remotu, takže neuložená, neodeslaná i odeslaná ale nezamergovaná práce jsou pro ni stejně neviditelné.no_upstreamje z nich ta nejjistější — větev nikdy nikam neodešla.unknownber jako důvod k varování, ne k mlčení: znamená, že se nedala určit základna pro porovnání, a mlčet na nejistotu je tady horší chyba než varovat zbytečně. Vždy uveď, ve které větvi ta práce leží (dev_branch=).
/reload-plugins nefunguje v neinteraktivním běhu. Běžíš-li bez uživatele
u klávesnice, ohlas to jako čekající krok, ne jako hotovo.
Formát výstupu
Po úspěšné aktualizaci:
Plugin aktualizován: [before] → [after] ([N] commitů).
Skilly: [výčet z [skills] přeložený do lidské řeči — co přibylo, co se změnilo,
co zmizelo. Když se skilly nezměnily, řekni to a uveď, co se změnilo místo nich.]
Aby se změny projevily: `/reload-plugins`
[Restart, jde-li o přibylý nebo zaniklý skill.]
[Varování o vývojové kopii, je-li na co upozornit.]
Když nebylo co stáhnout:
Instalace je aktuální ([after]). Nic ke stažení, reload není potřeba.
[Varování o vývojové kopii, je-li na co upozornit.]
Když větev nemá protějšek na remotu (reason=branch_not_on_remote):
Instalace stojí na větvi `[branch]`, která na remotu není — není odkud stahovat.
Není to porucha; přepni instalaci na sledovanou větev, pokud čekáš novinky.
[Varování o vývojové kopii, je-li na co upozornit.]
Když se stažení přeskočilo nebo selhalo:
Aktualizace neproběhla: [příčina — lokální změny v instalaci, cizí remote,
poškozená instalace].
[Co s tím: konkrétní krok pro uživatele, doslova to, co vypsal skript.]
Zásady
- Git jen přes skript. Přímé volání
gitobchází ověření remotu aff-only, kvůli kterým skript existuje. - Reload nespouštěj a nepředstírej. Je to příkaz klienta; skill ho může jen doporučit. Hlásit „změny jsou aktivní" je nepravda, dokud ho uživatel nezadá.
- Nic neopravuj. Lokální změny v instalaci ani cizí remote skill neřeší — ohlásí je a skončí. Automatický úklid cizí složky je nevratný.
install_dirtyaupdated=falsedrž oddělené. Splynou-li v reportu, uživatel uvěří, že je aktuální, zatímco stažení se vůbec nespustilo.