123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338{"id":"com.lattice.codeinbox","name":"Code Inbox","icon":"\u2318","color":"#4f46e5","description":"Organize code notification threads in GitHub notifications format.","provenance":"GitHub REST notifications thread response, verified 2026-10-14: https://example.invalid/resource . Adopted id, reason, unread, updated_at, last_read_at, url, subscription_url; repository.full_name/html_url -> repository_full_name/repository_html_url; subject.title/type/url/latest_comment_url -> subject_title/subject_type/subject_url/subject_latest_comment_url. unread is projected from boolean to SQLite 0/1. Thread IDs stay strings; subject URLs remain API URLs. Reason is open text because GitHub adds reasons. Local receive/read/update events and the receive listener are fixture conventions, not GitHub webhooks.","requested_permissions":{"storage":["sql"],"network":{"allowlist":[]},"events":{"thread-received":{"description":"A notification thread was received.","schema":{"type":"object","properties":{"id":{"type":"string","description":"Notification thread ID."},"repository_full_name":{"type":"string","description":"Repository as owner/repository."},"repository_html_url":{"type":["string","null"],"description":"Repository browser URL; null means unspecified."},"subject_title":{"type":"string","description":"Discussion title."},"subject_type":{"type":"string","description":"GitHub subject type, e.g. Issue, PullRequest, Commit or Release."},"subject_url":{"type":["string","null"],"description":"Subject API URL; null means unspecified."},"subject_latest_comment_url":{"type":["string","null"],"description":"Latest comment API URL; null means unspecified."},"reason":{"type":"string","description":"Notification reason, e.g. mention, review_requested, assign or subscribed."},"unread":{"type":"integer","description":"Unread flag: 0=read, 1=unread.","enum":[0,1]},"updated_at":{"type":"string","description":"Thread update timestamp, ISO 8601 with timezone."},"last_read_at":{"type":["string","null"],"description":"Last-read timestamp, ISO 8601 with timezone; null means never read."},"url":{"type":"string","description":"Notification thread API URL."},"subscription_url":{"type":["string","null"],"description":"Thread subscription API URL; null means unspecified."}},"required":["id","repository_full_name","subject_title","subject_type","reason","unread","updated_at","url"],"additionalProperties":false}},"thread-updated":{"description":"A thread received new activity or a changed reason.","schema":{"type":"object","properties":{"id":{"type":"string","description":"Notification thread ID."},"repository_full_name":{"type":"string","description":"Repository as owner/repository."},"repository_html_url":{"type":["string","null"],"description":"Repository browser URL; null means unspecified."},"subject_title":{"type":"string","description":"Discussion title."},"subject_type":{"type":"string","description":"GitHub subject type, e.g. Issue, PullRequest, Commit or Release."},"subject_url":{"type":["string","null"],"description":"Subject API URL; null means unspecified."},"subject_latest_comment_url":{"type":["string","null"],"description":"Latest comment API URL; null means unspecified."},"reason":{"type":"string","description":"Notification reason, e.g. mention, review_requested, assign or subscribed."},"unread":{"type":"integer","description":"Unread flag: 0=read, 1=unread.","enum":[0,1]},"updated_at":{"type":"string","description":"Thread update timestamp, ISO 8601 with timezone."},"last_read_at":{"type":["string","null"],"description":"Last-read timestamp, ISO 8601 with timezone; null means never read."},"url":{"type":"string","description":"Notification thread API URL."},"subscription_url":{"type":["string","null"],"description":"Thread subscription API URL; null means unspecified."}},"required":["id","repository_full_name","subject_title","subject_type","reason","unread","updated_at","url"],"additionalProperties":false}},"thread-read":{"description":"A thread was marked read.","schema":{"type":"object","properties":{"id":{"type":"string","description":"Notification thread ID."},"repository_full_name":{"type":"string","description":"Repository as owner/repository."},"subject_title":{"type":"string","description":"Discussion title."},"last_read_at":{"type":["string","null"],"description":"Last-read timestamp, ISO 8601 with timezone; null means never read."},"unread":{"type":"integer","description":"Unread flag: 0=read, 1=unread.","enum":[0,1],"const":0}},"required":["id","subject_title","unread","last_read_at"],"additionalProperties":false}}},"listeners":{"receive-thread":{"description":"Import a notification thread if its ID is absent.","schema":{"type":"object","properties":{"id":{"type":"string","description":"Notification thread ID."},"repository_full_name":{"type":"string","description":"Repository as owner/repository."},"repository_html_url":{"type":["string","null"],"description":"Repository browser URL; omitted or null means unspecified."},"subject_title":{"type":"string","description":"Discussion title."},"subject_type":{"type":"string","description":"GitHub subject type, e.g. Issue, PullRequest, Commit or Release."},"subject_url":{"type":["string","null"],"description":"Subject API URL; omitted or null means unspecified."},"subject_latest_comment_url":{"type":["string","null"],"description":"Latest comment API URL; omitted or null means unspecified."},"reason":{"type":"string","description":"Notification reason, e.g. mention, review_requested, assign or subscribed."},"unread":{"type":"integer","description":"Unread flag: 0=read, 1=unread; omitted defaults to 1.","enum":[0,1]},"updated_at":{"type":"string","description":"Thread update timestamp, ISO 8601 with timezone."},"last_read_at":{"type":["string","null"],"description":"Last-read timestamp, ISO 8601 with timezone; omitted or null means never read."},"url":{"type":"string","description":"Notification thread API URL."},"subscription_url":{"type":["string","null"],"description":"Thread subscription API URL; omitted or null means unspecified."}},"required":["id","repository_full_name","subject_title","subject_type","reason","updated_at","url"],"additionalProperties":false}}}},"x-effects":{"receive-thread":{"table":"threads","emits":"thread-received"}}}