(messageText: string)
| 1071 | * raw text in attachments and never reach their intended handlers. |
| 1072 | */ |
| 1073 | export function isStructuredProtocolMessage(messageText: string): boolean { |
| 1074 | try { |
| 1075 | const parsed = jsonParse(messageText) |
| 1076 | if (!parsed || typeof parsed !== 'object' || !('type' in parsed)) { |
| 1077 | return false |
| 1078 | } |
| 1079 | const type = (parsed as { type: unknown }).type |
| 1080 | return ( |
| 1081 | type === 'permission_request' || |
| 1082 | type === 'permission_response' || |
| 1083 | type === 'sandbox_permission_request' || |
| 1084 | type === 'sandbox_permission_response' || |
| 1085 | type === 'shutdown_request' || |
| 1086 | type === 'shutdown_approved' || |
| 1087 | type === 'team_permission_update' || |
| 1088 | type === 'mode_set_request' || |
| 1089 | type === 'plan_approval_request' || |
| 1090 | type === 'plan_approval_response' |
| 1091 | ) |
| 1092 | } catch { |
| 1093 | return false |
| 1094 | } |
| 1095 | } |
| 1096 | |
| 1097 | /** |
| 1098 | * Marks only messages matching a predicate as read, leaving others unread. |
no test coverage detected