{"id":11943,"plugin_id":"plugin_asdk_app_6a40990507688191998eb06419bfbad7","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:00:35.207Z","digest":"ea5e0727c21df76248b03082b66b336d5c4e407f8048ef71e08e3a44e07d485c","against":null,"payload":{"description":"Speakers and sessions — bulk creation, breaks, sub-sessions, speaker roles, ordering, photos.","included_files":[],"name":"eventhex-agenda","skill_md_contents":"---\nname: eventhex-agenda\ndescription: Speakers and sessions — bulk creation, breaks, sub-sessions, speaker roles, ordering, photos.\n---\n\n# Agenda — speakers & sessions\n\n## Speakers\n\n- `create_speakers(eventId, speakers:[{name, designation, company, about, photo}])` — always an array; one item for a single speaker, many for a lineup. Each item is created independently; report per-item results.\n- Photos from third-party URLs: pass the URL as `photo` — it is copied onto EventHex CDN and the internal key is saved. `upload_speaker_photo_from_url` does the same for an existing speaker.\n- `update_speaker` / `delete_speaker` / `listSpeakers`.\n- Ordering: `reorder_speakers(eventId, speakers:[{speakerId, position}])` — lower positions first.\n- `generateSpeakerProfile` writes AI bio copy for a speaker.\n\n## Sessions\n\n`create_sessions(eventId, sessions:[{title, start, end, stage, description, …}])` — always an array. Supports:\n\n- Breaks: `isBreak:true`.\n- Nested sub-sessions: `isSubSession:true` + `parentSession`.\n- Role-aware speakers: `sessionSpeakers:[{speakerId, role, order}]` for roles like Moderator or Keynote Speaker; the plain `speakers` id array is filled automatically for compatibility.\n\nAlso: `updateSession`, `deleteSession` (destructive — explicit request only), `listSessions`, `assignSpeakerToSession`, `removeSpeakerFromSession`, `createAgendaBatch` (speakers + sessions in one call), `checkConflicts(eventId)` to catch overlapping times/stages after bulk edits.\n\n## Flow for \"here is my full schedule\"\n\n1. `create_speakers` with the whole lineup (dedupe against `listSpeakers` first).\n2. `create_sessions` with the whole schedule, wiring `sessionSpeakers` by the returned speaker ids.\n3. `checkConflicts`, then report per-item successes and any failures.\n\nSession times use the event's timezone.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}