{"id":"3df70880-cb10-4c33-b543-23bf6ad3ab8f","shortId":"Rwv9nA","kind":"skill","title":"progress-event-state-bridge","tagline":"Bridge reconciliation progress events into shared UI state so the install surface reflects installing, installed, and failed transitions.","description":"# SKILL: Progress Event State Bridge\n**Domain:** plugin-installation\n**Trigger:** Use when background reconciliation emits per-source progress updates and shared UI state must reflect each source's lifecycle (`installing`, `installed`, `failed`).\n**Source Pattern:** Distilled from reviewed install-progress callbacks and immutable UI-state bridge implementations.\n\n## Core Method\nLet the reconciler emit progress events for each marketplace or extension source, then bridge those events into shared UI state through one immutable update path. Each event should update only the matching source entry, carrying both the new status and any error payload, while leaving unrelated entries untouched. This makes the install UI responsive without forcing broad rerenders or duplicating install logic in the view layer.\n\n## Key Rules\n- Use one immutable helper or reducer path so only the target entry changes and unrelated UI state keeps structural sharing.\n- Preserve the event’s status semantics directly: `installing`, `installed`, and `failed` should remain distinct in the UI state.\n- If the event carries an error payload, preserve it so the UI can surface meaningful diagnostics.\n- Progress events should update previously seeded entries, not silently invent new rows that were never declared to the user.\n\n## Example Application\nWhen a background source sync starts, the UI row for that source flips from `pending` to `installing`. If the fetch succeeds, it moves to `installed`; if it fails, it moves to `failed` and stores the error text for display.\n\n## Anti-Patterns (What NOT to do)\n- Do not mutate the source list in place or reorder entries when mapping events; unaffected rows should retain reference stability.\n- Do not drop the `error` payload when a `failed` event fires; without it, the UI cannot explain why manual intervention is required.\n- Do not rebuild unrelated state slices while handling these events; keep the bridge scoped to the installation-status surface.","tags":["progress","event","state","bridge","cskill","agents","ychampion","agent-skills","ai-agents","cli","coding-agents","context-engineering"],"capabilities":["skill","source-ychampion","skill-progress-event-state-bridge","topic-agent-skills","topic-ai-agents","topic-cli","topic-coding-agents","topic-context-engineering","topic-developer-tools","topic-mcp","topic-multi-agent","topic-terminal-ui"],"categories":["cskill-agents"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/ychampion/cskill-agents/progress-event-state-bridge","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add ychampion/cskill-agents","source_repo":"https://github.com/ychampion/cskill-agents","install_from":"skills.sh"}},"qualityScore":"0.467","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 34 github stars · SKILL.md body (1,983 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:56:54.466Z","embedding":null,"createdAt":"2026-04-18T22:21:00.985Z","updatedAt":"2026-04-22T00:56:54.466Z","lastSeenAt":"2026-04-22T00:56:54.466Z","tsv":"'anti':258 'anti-pattern':257 'applic':217 'background':36,220 'bridg':5,6,28,71,88,318 'broad':131 'callback':65 'cannot':299 'carri':109,184 'chang':155 'core':73 'declar':212 'diagnost':196 'direct':169 'display':256 'distil':59 'distinct':176 'domain':29 'drop':286 'duplic':134 'emit':38,78 'entri':108,121,154,203,274 'error':116,186,253,288 'event':3,9,26,80,90,101,165,183,198,277,293,315 'exampl':216 'explain':300 'extens':85 'fail':22,56,173,245,249,292 'fetch':237 'fire':294 'flip':230 'forc':130 'handl':313 'helper':146 'immut':67,97,145 'implement':72 'instal':16,19,20,32,54,55,63,126,135,170,171,234,242,323 'install-progress':62 'installation-status':322 'intervent':303 'invent':206 'keep':160,316 'key':141 'layer':140 'leav':119 'let':75 'lifecycl':53 'list':269 'logic':136 'make':124 'manual':302 'map':276 'marketplac':83 'match':106 'meaning':195 'method':74 'move':240,247 'must':48 'mutat':266 'never':211 'new':112,207 'one':96,144 'path':99,149 'pattern':58,259 'payload':117,187,289 'pend':232 'per':40 'per-sourc':39 'place':271 'plugin':31 'plugin-instal':30 'preserv':163,188 'previous':201 'progress':2,8,25,42,64,79,197 'progress-event-state-bridg':1 'rebuild':308 'reconcil':77 'reconcili':7,37 'reduc':148 'refer':282 'reflect':18,49 'remain':175 'reorder':273 'requir':305 'rerend':132 'respons':128 'retain':281 'review':61 'row':208,226,279 'rule':142 'scope':319 'seed':202 'semant':168 'share':11,45,92,162 'silent':205 'skill':24 'skill-progress-event-state-bridge' 'slice':311 'sourc':41,51,57,86,107,221,229,268 'source-ychampion' 'stabil':283 'start':223 'state':4,13,27,47,70,94,159,180,310 'status':113,167,324 'store':251 'structur':161 'succeed':238 'surfac':17,194,325 'sync':222 'target':153 'text':254 'topic-agent-skills' 'topic-ai-agents' 'topic-cli' 'topic-coding-agents' 'topic-context-engineering' 'topic-developer-tools' 'topic-mcp' 'topic-multi-agent' 'topic-terminal-ui' 'transit':23 'trigger':33 'ui':12,46,69,93,127,158,179,192,225,298 'ui-stat':68 'unaffect':278 'unrel':120,157,309 'untouch':122 'updat':43,98,103,200 'use':34,143 'user':215 'view':139 'without':129,295","prices":[{"id":"9dc40380-a386-4f64-b5a9-9f1d4ce6c8c3","listingId":"3df70880-cb10-4c33-b543-23bf6ad3ab8f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"ychampion","category":"cskill-agents","install_from":"skills.sh"},"createdAt":"2026-04-18T22:21:00.985Z"}],"sources":[{"listingId":"3df70880-cb10-4c33-b543-23bf6ad3ab8f","source":"github","sourceId":"ychampion/cskill-agents/progress-event-state-bridge","sourceUrl":"https://github.com/ychampion/cskill-agents/tree/main/skills/progress-event-state-bridge","isPrimary":false,"firstSeenAt":"2026-04-18T22:21:00.985Z","lastSeenAt":"2026-04-22T00:56:54.466Z"}],"details":{"listingId":"3df70880-cb10-4c33-b543-23bf6ad3ab8f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ychampion","slug":"progress-event-state-bridge","github":{"repo":"ychampion/cskill-agents","stars":34,"topics":["agent-skills","ai-agents","cli","coding-agents","context-engineering","developer-tools","mcp","multi-agent","terminal-ui"],"license":"mit","html_url":"https://github.com/ychampion/cskill-agents","pushed_at":"2026-04-04T14:13:23Z","description":"Agent skills for coding CLIs, multi-agent runtimes, context engines, MCP extensions, and terminal tooling. Instead of using claude code's source code, give your agent skills to create your own!","skill_md_sha":"76de927f3f2869b1b3157b194bc1b115fefe4efe","skill_md_path":"skills/progress-event-state-bridge/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ychampion/cskill-agents/tree/main/skills/progress-event-state-bridge"},"layout":"multi","source":"github","category":"cskill-agents","frontmatter":{"name":"progress-event-state-bridge","description":"Bridge reconciliation progress events into shared UI state so the install surface reflects installing, installed, and failed transitions."},"skills_sh_url":"https://skills.sh/ychampion/cskill-agents/progress-event-state-bridge"},"updatedAt":"2026-04-22T00:56:54.466Z"}}