You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rozšířit skill analyze-problem (a sdílené tracker gatherery) tak, aby uměl spolehlivě stáhnout všechny přílohy a screenshoty k analyzovanému issue (JIRA,
GitHub, Bugsnag) a předat je analýze. Stažení musí proběhnout až poté, co nad
každým souborem proběhne povinná bezpečnostní kontrola — agent nesmí otevřít,
renderovat ani „přečíst" přílohu, která je bezpečnostní riziko (spustitelný obsah,
polyglot, HTML/SVG s aktivním obsahem, mime mismatch, archivní bomba).
Motivace: dnes gatherer přílohy jen vylistuje (název, mime, velikost, contentUrl)
a agent je fakticky nestáhne — acli stahování neumí a agent nemá doloženou
auth cestu k binárnímu obsahu. Analýza tak běží naslepo bez screenshotů.
Současný stav
skills/analyze-problem/SKILL.md v sekci Issue-tracker context (mandatory pre-flight)
říká: „Read the inventoried attachments … with your own tools" — ale žádný nástroj
ani auth mechanismus pro stažení binárního obsahu neexistuje.
skills/code-review-jira/scripts/gather-issue-context.sh přílohy pouze inventarizuje
(### Přílohy, řádky ~94–99) a na řádku 211 explicitně píše: „Obsah příloh není v tomto dokumentu — acli přílohy nestahuje. Načti je sám přes contentUrl (autentizovaně) vlastními nástroji."
skills/code-review-jira/scripts/load-issue.sh má v JSON kontraktu attachments[] = { id, name, size, mimeType, contentUrl, ... } (řádky ~341–346) —
data tedy máme, chybí jen download + security gate.
Auth profil acli je OAuth (token v keychainu) — pro download nepoužitelný bez
scrapování keychainu (nepřijatelné). Reálně ověřeno: bez API tokenu nelze přílohu stáhnout.
Žádný bezpečnostní krok nad přílohami neexistuje.
Cílový stav
Nový download skript per tracker (sdílí společný helper):
společná logika v skills/_shared/attachments.sh (nebo per-skill _lib.sh jako u bugsnag).
Skript načte inventář příloh (z gathereru / load-issue.sh), pro každou stáhne obsah
do karanténního adresáře (<dest>/_quarantine/, default pod scratchpadem),
s TLS validací ON, autentizovaně, a vypíše manifest (attachments-manifest.json)
s id, name, declaredMime, size, sha256, localPath, status.
JIRA auth: Basic auth email:token z dokumentovaného zdroje v tomto pořadí: --token-file, pak env JIRA_API_TOKEN, pak ~/.config/acli/jira_api_token (chmod 600).
Endpoint https://<site>/rest/api/3/attachment/content/<id>. Token se nikdy
neobjeví v argv ani v logu.
GitHub: přes gh api / autentizovaný curl s gh auth token.
Bugsnag: přes dokumentovaný API token (env), TLS on.
Povinná bezpečnostní brána PŘED analýzou — skills/_shared/scan-attachments.sh
(volaná download skriptem nebo SKILL.md hned po stažení), která nad každým souborem
v karanténě provede deterministické kontroly a teprve bezpečné soubory promuje do <dest>/safe/:
detekce typu z magic bytes (file), porovnání s declaredMime → mismatch = blok;
allowlist typů určených k analýze: png, jpg/jpeg, gif, webp, pdf, txt, log, csv, json;
blok: spustitelné (ELF/Mach-O/PE), skripty, archivy (zip/gz/tar) bez explicitního opt-inu, HTML, SVG s aktivním obsahem (<script>, on*, <foreignObject>), polyglot
(soubor validní jako obrázek i jako HTML/JS), Office s makry;
limity: max velikost na soubor (např. 25 MB) a max počet (např. 25);
každému souboru přiřadí verdikt pass | block + důvod do manifestu.
U čehokoli podezřelého / nejednoznačného předá nález existujícímu security skillu
(security-review, příp. security-threat-analysis) a teprve jeho verdikt rozhodne. Critical → soubor se neanalyzuje, jen se reportuje.
SKILL.md analyze-problem — aktualizace pre-flightu: po inventarizaci příloh
gathererem agent musí spustit download-attachments.sh → scan-attachments.sh
(security gate) → a číst/renderovat pouze soubory z safe/. Doplnit dokumentaci
auth setupu (token soubor / env) a chování při zablokované příloze (uvést do Assumptions / Sources, nikdy ji neotvírat).
Acceptance Criteria
Existuje download-attachments.sh pro všechny tři trackery + sdílený helper; každý
stáhne všechny přílohy daného issue do karantény a vypíše attachments-manifest.json.
JIRA download funguje přes Basic auth z --token-file / JIRA_API_TOKEN / ~/.config/acli/jira_api_token; bez tokenu skončí čistou chybou s návodem
(exit code ≠ 0), nikdy ne tichým selháním.
TLS validace je vždy zapnutá (žádné -k / --insecure / verify=false).
Token se nikdy neobjeví v argv, ve výpisu ani v manifestu.
scan-attachments.sh zablokuje (nepromuje do safe/): spustitelné, polyglot,
HTML, SVG s aktivním obsahem, mime mismatch, soubor nad limit velikosti, typ mimo allowlist.
Bezpečné obrázky (PNG/JPEG) a PDF projdou do safe/ a jsou dostupné analýze.
Podezřelé soubory jsou předány security skillu; Critical verdikt = blok + report,
žádné otevření.
SKILL.md skillu analyze-problem popisuje povinné pořadí inventář → download → security gate → analýza pouze nad safe/ a auth setup.
Skripty mají korektní exit kódy a set -euo pipefail; README/usage v hlavičce skriptu.
Testovací scénář (fixture) doloží, že škodlivá SVG/HTML/polyglot příloha je zablokována
a benigní PNG projde.
Co NEMĚNIT / bezpečnostní mantinely (z rules/security/*)
Nikdycurl … | sh, žádné stažení napojené přímo na interpret.
Nikdy nevypínat TLS (-k, --insecure, --no-check-certificate, verify=false).
Neotvírat přílohu před proběhnutím security gate; blokovaný soubor se jen reportuje.
Karanténní soubory psát s 0600, do dedikovaného adresáře (scratchpad), ne do repa.
Neměnit kontrakt attachments[] v load-issue.sh — jen ho číst.
Nezavádět nové runtime závislosti bez dohody (vystačit s curl, jq, file, gh, acli).
Tipy a inspirace
Inventář příloh: skills/code-review-jira/scripts/gather-issue-context.sh:94,
poznámka :211; JSON kontrakt skills/code-review-jira/scripts/load-issue.sh:341.
Bezpečnostní pravidla pro obsah příloh: rules/security/backend.md a frontend.md,
sekce Malicious File Upload Content (SVG/HTML/polyglot/nosniff) a Malicious Code & Supply-Chain Indicators (tichý curl, TLS, potlačení chyb).
Security skilly k zapojení: security-review, security-threat-analysis.
JIRA attachment endpoint: GET /rest/api/3/attachment/content/{id} (Basic auth email:token).
Out of scope
Sanitizace a oprava nebezpečných příloh (jen blok + report, ne čištění SVG).
OCR / extrakce textu z obrázků.
Centrální správa/rotace API tokenů.
Změny v logice analýzy samotné (framework 10 kroků zůstává).
Cachování stažených příloh mezi běhy.
Definition of Done
PR proti master v pekral/cursor-rules, CI green.
Nové skripty + úprava SKILL.md dle AC, fixture test prokazuje blok škodlivé / průchod benigní přílohy.
Cíl
Rozšířit skill
analyze-problem(a sdílené tracker gatherery) tak, aby umělspolehlivě stáhnout všechny přílohy a screenshoty k analyzovanému issue (JIRA,
GitHub, Bugsnag) a předat je analýze. Stažení musí proběhnout až poté, co nad
každým souborem proběhne povinná bezpečnostní kontrola — agent nesmí otevřít,
renderovat ani „přečíst" přílohu, která je bezpečnostní riziko (spustitelný obsah,
polyglot, HTML/SVG s aktivním obsahem, mime mismatch, archivní bomba).
Motivace: dnes gatherer přílohy jen vylistuje (název, mime, velikost,
contentUrl)a agent je fakticky nestáhne —
aclistahování neumí a agent nemá doloženouauth cestu k binárnímu obsahu. Analýza tak běží naslepo bez screenshotů.
Současný stav
skills/analyze-problem/SKILL.mdv sekci Issue-tracker context (mandatory pre-flight)říká: „Read the inventoried attachments … with your own tools" — ale žádný nástroj
ani auth mechanismus pro stažení binárního obsahu neexistuje.
skills/code-review-jira/scripts/gather-issue-context.shpřílohy pouze inventarizuje(
### Přílohy, řádky ~94–99) a na řádku 211 explicitně píše:„Obsah příloh není v tomto dokumentu —
aclipřílohy nestahuje. Načti je sám přescontentUrl(autentizovaně) vlastními nástroji."skills/code-review-jira/scripts/load-issue.shmá v JSON kontraktuattachments[] = { id, name, size, mimeType, contentUrl, ... }(řádky ~341–346) —data tedy máme, chybí jen download + security gate.
aclije OAuth (token v keychainu) — pro download nepoužitelný bezscrapování keychainu (nepřijatelné). Reálně ověřeno: bez API tokenu nelze přílohu stáhnout.
Cílový stav
Nový download skript per tracker (sdílí společný helper):
skills/code-review-jira/scripts/download-attachments.sh <KEY|URL> [--dest DIR]skills/code-review-github/scripts/download-attachments.sh <NUMBER|URL> [--dest DIR]skills/code-review-bugsnag/scripts/download-attachments.sh <URL|TRIPLE> [--dest DIR]skills/_shared/attachments.sh(nebo per-skill_lib.shjako u bugsnag).Skript načte inventář příloh (z gathereru /
load-issue.sh), pro každou stáhne obsahdo karanténního adresáře (
<dest>/_quarantine/, default pod scratchpadem),s TLS validací ON, autentizovaně, a vypíše manifest (
attachments-manifest.json)s
id, name, declaredMime, size, sha256, localPath, status.email:tokenz dokumentovaného zdroje v tomto pořadí:--token-file, pak envJIRA_API_TOKEN, pak~/.config/acli/jira_api_token(chmod 600).Endpoint
https://<site>/rest/api/3/attachment/content/<id>. Token se nikdyneobjeví v argv ani v logu.
gh api/ autentizovanýcurlsgh auth token.Povinná bezpečnostní brána PŘED analýzou —
skills/_shared/scan-attachments.sh(volaná download skriptem nebo SKILL.md hned po stažení), která nad každým souborem
v karanténě provede deterministické kontroly a teprve bezpečné soubory promuje do
<dest>/safe/:file), porovnání sdeclaredMime→ mismatch = blok;png, jpg/jpeg, gif, webp, pdf, txt, log, csv, json;HTML, SVG s aktivním obsahem (
<script>,on*,<foreignObject>), polyglot(soubor validní jako obrázek i jako HTML/JS), Office s makry;
pass | block+ důvod do manifestu.(
security-review, příp.security-threat-analysis) a teprve jeho verdikt rozhodne.Critical → soubor se neanalyzuje, jen se reportuje.
SKILL.md
analyze-problem— aktualizace pre-flightu: po inventarizaci přílohgathererem agent musí spustit
download-attachments.sh→scan-attachments.sh(security gate) → a číst/renderovat pouze soubory z
safe/. Doplnit dokumentaciauth setupu (token soubor / env) a chování při zablokované příloze (uvést do
Assumptions / Sources, nikdy ji neotvírat).
Acceptance Criteria
download-attachments.shpro všechny tři trackery + sdílený helper; každýstáhne všechny přílohy daného issue do karantény a vypíše
attachments-manifest.json.--token-file/JIRA_API_TOKEN/~/.config/acli/jira_api_token; bez tokenu skončí čistou chybou s návodem(exit code ≠ 0), nikdy ne tichým selháním.
-k/--insecure/verify=false).scan-attachments.shzablokuje (nepromuje dosafe/): spustitelné, polyglot,HTML, SVG s aktivním obsahem, mime mismatch, soubor nad limit velikosti, typ mimo allowlist.
safe/a jsou dostupné analýze.žádné otevření.
SKILL.mdskilluanalyze-problempopisuje povinné pořadíinventář → download → security gate → analýza pouze nad
safe/a auth setup.set -euo pipefail; README/usage v hlavičce skriptu.a benigní PNG projde.
Co NEMĚNIT / bezpečnostní mantinely (z
rules/security/*)curl … | sh, žádné stažení napojené přímo na interpret.-k,--insecure,--no-check-certificate,verify=false).0600, do dedikovaného adresáře (scratchpad), ne do repa.attachments[]vload-issue.sh— jen ho číst.curl,jq,file,gh,acli).Tipy a inspirace
skills/code-review-jira/scripts/gather-issue-context.sh:94,poznámka
:211; JSON kontraktskills/code-review-jira/scripts/load-issue.sh:341.skills/code-review-bugsnag/scripts/_lib.sh.rules/security/backend.mdafrontend.md,sekce Malicious File Upload Content (SVG/HTML/polyglot/nosniff) a
Malicious Code & Supply-Chain Indicators (tichý curl, TLS, potlačení chyb).
security-review,security-threat-analysis.GET /rest/api/3/attachment/content/{id}(Basic auth email:token).Out of scope
Definition of Done
mastervpekral/cursor-rules, CI green.SKILL.mddle AC, fixture test prokazuje blok škodlivé / průchod benigní přílohy.