import asyncio from typing import Any from langgraph.config import get_config from ..utils.slack import post_slack_thread_reply def slack_thread_reply(message: str) -> dict[str, Any]: """Post a message to the current Slack thread. Format messages using Slack's mrkdwn format, NOT standard Markdown. Key differences: *bold*, _italic_, ~strikethrough~, , bullet lists with "• ", ```code blocks```, > blockquotes. Do NOT use **bold**, [link](url), or other standard Markdown syntax.""" config = get_config() configurable = config.get("configurable", {}) slack_thread = configurable.get("slack_thread", {}) channel_id = slack_thread.get("channel_id") thread_ts = slack_thread.get("thread_ts") if not channel_id or not thread_ts: return { "success": False, "error": "Missing slack_thread.channel_id or slack_thread.thread_ts in config", } if not message.strip(): return {"success": False, "error": "Message cannot be empty"} success = asyncio.run(post_slack_thread_reply(channel_id, thread_ts, message)) return {"success": success}