WS Slack-UX Feature 2. When the inbound listener acts on an answer in a task thread, it adds a 👍 reaction to that reply so the human sees the machine received it. - SlackListener gains an optional reactor seam; handle_event reacts to the inbound reply message (channel + event ts) AFTER the AUTHZ-01 owner check passes — a non-owner message is rejected and never reacted to. Best-effort: any reaction failure (notably a missing scope) is swallowed and never breaks handle_event or the listen loop. - /new-task is NOT reacted to (a slash command has no reactable message); its "📥 Task received" root post is the acknowledgement. - build_slack_reactor wraps WebClient.reactions_add(name="thumbsup"); the default listener factory wires it best-effort from SLACK_BOT_TOKEN. - Adds reactions:write to the bot scopes in agent-team-manifest.json. NOTE: the new reactions:write scope requires Adam to re-apply the manifest to app A0BCC7TTU66 and reinstall the app. Until then reactions.add returns missing_scope, which the listener swallows (the reaction silently no-ops) — answer handling is unaffected. AUTHZ-01 and the first-answer-wins CAS remain unchanged.
50 lines
1.1 KiB
JSON
50 lines
1.1 KiB
JSON
{
|
|
"display_information": {
|
|
"name": "Sea Haven agent-team",
|
|
"description": "Human-gated clarifier for the R720 agent-team SDLC pipeline (Plane-2 coordinator).",
|
|
"background_color": "#0c4f6f"
|
|
},
|
|
"features": {
|
|
"bot_user": {
|
|
"display_name": "agent-team",
|
|
"always_online": true
|
|
},
|
|
"slash_commands": [
|
|
{
|
|
"command": "/new-task",
|
|
"description": "Start a new agent-team task (clarify -> plan -> review)",
|
|
"usage_hint": "<task description>",
|
|
"should_escape": false
|
|
}
|
|
]
|
|
},
|
|
"oauth_config": {
|
|
"scopes": {
|
|
"bot": [
|
|
"chat:write",
|
|
"channels:history",
|
|
"groups:history",
|
|
"im:history",
|
|
"app_mentions:read",
|
|
"commands",
|
|
"reactions:write"
|
|
]
|
|
}
|
|
},
|
|
"settings": {
|
|
"event_subscriptions": {
|
|
"bot_events": [
|
|
"message.channels",
|
|
"message.groups",
|
|
"message.im",
|
|
"app_mention"
|
|
]
|
|
},
|
|
"interactivity": {
|
|
"is_enabled": true
|
|
},
|
|
"socket_mode_enabled": true,
|
|
"org_deploy_enabled": false,
|
|
"token_rotation_enabled": false
|
|
}
|
|
}
|