Skip to content

Commit a9eb61e

Browse files
feat: use bolt context when possible (#29)
* use BoltContext when possible in pydantic-ai * take the values from the context rather then then event --------- Co-authored-by: Eden Zimbelman <zim@o526.net>
1 parent 0172642 commit a9eb61e

15 files changed

Lines changed: 99 additions & 56 deletions

File tree

claude-agent-sdk/listeners/actions/feedback.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
from logging import Logger
22

33
from slack_bolt import Ack
4+
from slack_bolt.context.async_context import AsyncBoltContext
45
from slack_sdk.web.async_client import AsyncWebClient
56

67

7-
async def handle_feedback(ack: Ack, body: dict, client: AsyncWebClient, logger: Logger):
8+
async def handle_feedback(
9+
ack: Ack,
10+
body: dict,
11+
client: AsyncWebClient,
12+
context: AsyncBoltContext,
13+
logger: Logger,
14+
):
815
"""Handle thumbs up/down feedback on Casey's responses."""
916
await ack()
1017

1118
try:
12-
channel_id = body["channel"]["id"]
13-
user_id = body["user"]["id"]
19+
channel_id = context.channel_id
20+
user_id = context.user_id
1421
message_ts = body["message"]["ts"]
1522
feedback_value = body["actions"][0]["value"]
1623

claude-agent-sdk/listeners/events/app_home_opened.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
from logging import Logger
22

3+
from slack_bolt.context.async_context import AsyncBoltContext
34
from slack_sdk.web.async_client import AsyncWebClient
45

56
from listeners.views.app_home_builder import build_app_home_view
67

78

8-
async def handle_app_home_opened(client: AsyncWebClient, event: dict, logger: Logger):
9+
async def handle_app_home_opened(
10+
client: AsyncWebClient, context: AsyncBoltContext, logger: Logger
11+
):
912
"""Publish the App Home view when a user opens the app's Home tab."""
1013
try:
11-
user_id = event["user"]
14+
user_id = context.user_id
1215
view = build_app_home_view()
1316
await client.views_publish(user_id=user_id, view=view)
1417
except Exception as e:

claude-agent-sdk/listeners/events/app_mentioned.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import re
33
from logging import Logger
44

5+
from slack_bolt.context.async_context import AsyncBoltContext
56
from slack_bolt.context.say.async_say import AsyncSay
67
from slack_sdk.web.async_client import AsyncWebClient
78

@@ -22,15 +23,19 @@
2223

2324

2425
async def handle_app_mentioned(
25-
client: AsyncWebClient, event: dict, logger: Logger, say: AsyncSay
26+
client: AsyncWebClient,
27+
context: AsyncBoltContext,
28+
event: dict,
29+
logger: Logger,
30+
say: AsyncSay,
2631
):
2732
"""Handle @Casey mentions in channels."""
2833
try:
29-
channel_id = event["channel"]
30-
team_id = event.get("team")
34+
channel_id = context.channel_id
35+
team_id = context.team_id
3136
text = event.get("text", "")
3237
thread_ts = event.get("thread_ts") or event["ts"]
33-
user_id = event.get("user")
38+
user_id = context.user_id
3439

3540
# Strip the bot mention from the text
3641
cleaned_text = re.sub(r"<@[A-Z0-9]+>", "", text).strip()

claude-agent-sdk/listeners/events/message.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import random
22
from logging import Logger
33

4+
from slack_bolt.context.async_context import AsyncBoltContext
45
from slack_bolt.context.say.async_say import AsyncSay
56
from slack_sdk.web.async_client import AsyncWebClient
67

@@ -21,7 +22,11 @@
2122

2223

2324
async def handle_message(
24-
client: AsyncWebClient, event: dict, logger: Logger, say: AsyncSay
25+
client: AsyncWebClient,
26+
context: AsyncBoltContext,
27+
event: dict,
28+
logger: Logger,
29+
say: AsyncSay,
2530
):
2631
"""Handle direct messages sent to Casey."""
2732
# Skip bot messages and message subtypes (edits, deletes, etc.)
@@ -33,11 +38,11 @@ async def handle_message(
3338
return
3439

3540
try:
36-
channel_id = event["channel"]
37-
team_id = event.get("team")
41+
channel_id = context.channel_id
42+
team_id = context.team_id
3843
text = event.get("text", "")
3944
thread_ts = event.get("thread_ts") or event["ts"]
40-
user_id = event.get("user")
45+
user_id = context.user_id
4146

4247
# Get session ID for conversation context
4348
existing_session_id = session_store.get_session(channel_id, thread_ts)

claude-agent-sdk/listeners/views/issue_modal.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from logging import Logger
22

33
from slack_bolt import Ack
4+
from slack_bolt.context.async_context import AsyncBoltContext
45
from slack_sdk.web.async_client import AsyncWebClient
56

67
from agent import run_casey_agent
@@ -9,14 +10,18 @@
910

1011

1112
async def handle_issue_submission(
12-
ack: Ack, body: dict, client: AsyncWebClient, logger: Logger
13+
ack: Ack,
14+
body: dict,
15+
client: AsyncWebClient,
16+
context: AsyncBoltContext,
17+
logger: Logger,
1318
):
1419
"""Handle modal submission: open DM, post issue, and run Casey agent."""
1520
await ack()
1621

1722
try:
18-
team_id = body["user"]["team_id"]
19-
user_id = body["user"]["id"]
23+
team_id = context.team_id
24+
user_id = context.user_id
2025
values = body["view"]["state"]["values"]
2126
category = values["category_block"]["category_select"]["selected_option"][
2227
"value"

openai-agents-sdk/listeners/actions/feedback.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
from logging import Logger
22

3-
from slack_bolt import Ack
3+
from slack_bolt import Ack, BoltContext
44
from slack_sdk import WebClient
55

66

7-
def handle_feedback(ack: Ack, body: dict, client: WebClient, logger: Logger):
7+
def handle_feedback(
8+
ack: Ack, body: dict, client: WebClient, context: BoltContext, logger: Logger
9+
):
810
"""Handle thumbs up/down feedback on Casey's responses."""
911
ack()
1012

1113
try:
12-
channel_id = body["channel"]["id"]
13-
user_id = body["user"]["id"]
14+
channel_id = context.channel_id
15+
user_id = context.user_id
1416
message_ts = body["message"]["ts"]
1517
feedback_value = body["actions"][0]["value"]
1618

openai-agents-sdk/listeners/events/app_home_opened.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from logging import Logger
22

3+
from slack_bolt import BoltContext
34
from slack_sdk import WebClient
45

56
from listeners.views.app_home_builder import build_app_home_view
67

78

8-
def handle_app_home_opened(client: WebClient, event: dict, logger: Logger):
9+
def handle_app_home_opened(client: WebClient, context: BoltContext, logger: Logger):
910
"""Publish the App Home view when a user opens the app's Home tab."""
1011
try:
11-
user_id = event["user"]
12+
user_id = context.user_id
1213
view = build_app_home_view()
1314
client.views_publish(user_id=user_id, view=view)
1415
except Exception as e:

openai-agents-sdk/listeners/events/app_mentioned.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from logging import Logger
44

55
from agents import Runner
6-
from slack_bolt import Say
6+
from slack_bolt import BoltContext, Say
77
from slack_sdk import WebClient
88

99
from agent import CaseyDeps, casey_agent
@@ -22,14 +22,16 @@
2222
CONTEXTUAL_EMOJIS = ["+1", "raised_hands", "rocket", "tada", "bulb", "fire"]
2323

2424

25-
def handle_app_mentioned(client: WebClient, event: dict, logger: Logger, say: Say):
25+
def handle_app_mentioned(
26+
client: WebClient, context: BoltContext, event: dict, logger: Logger, say: Say
27+
):
2628
"""Handle @Casey mentions in channels."""
2729
try:
28-
channel_id = event["channel"]
29-
team_id = event.get("team")
30+
channel_id = context.channel_id
31+
team_id = context.team_id
3032
text = event.get("text", "")
3133
thread_ts = event.get("thread_ts") or event["ts"]
32-
user_id = event["user"]
34+
user_id = context.user_id
3335

3436
# Strip the bot mention from the text
3537
cleaned_text = re.sub(r"<@[A-Z0-9]+>", "", text).strip()

openai-agents-sdk/listeners/events/message.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from logging import Logger
33

44
from agents import Runner
5-
from slack_bolt import Say
5+
from slack_bolt import BoltContext, Say
66
from slack_sdk import WebClient
77

88
from agent import CaseyDeps, casey_agent
@@ -21,7 +21,9 @@
2121
CONTEXTUAL_EMOJIS = ["+1", "raised_hands", "rocket", "tada", "bulb", "fire"]
2222

2323

24-
def handle_message(client: WebClient, event: dict, logger: Logger, say: Say):
24+
def handle_message(
25+
client: WebClient, context: BoltContext, event: dict, logger: Logger, say: Say
26+
):
2527
"""Handle direct messages sent to Casey."""
2628
# Skip bot messages and message subtypes (edits, deletes, etc.)
2729
if event.get("bot_id") or event.get("subtype"):
@@ -32,11 +34,11 @@ def handle_message(client: WebClient, event: dict, logger: Logger, say: Say):
3234
return
3335

3436
try:
35-
channel_id = event["channel"]
36-
team_id = event.get("team")
37+
channel_id = context.channel_id
38+
team_id = context.team_id
3739
text = event.get("text", "")
3840
thread_ts = event.get("thread_ts") or event["ts"]
39-
user_id = event["user"]
41+
user_id = context.user_id
4042

4143
# Get conversation history
4244
history = conversation_store.get_history(channel_id, thread_ts)

openai-agents-sdk/listeners/views/issue_modal.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
from logging import Logger
22

33
from agents import Runner
4-
from slack_bolt import Ack
4+
from slack_bolt import Ack, BoltContext
55
from slack_sdk import WebClient
66

77
from agent import CaseyDeps, casey_agent
88
from conversation import conversation_store
99
from listeners.views.feedback_block import create_feedback_block
1010

1111

12-
def handle_issue_submission(ack: Ack, body: dict, client: WebClient, logger: Logger):
12+
def handle_issue_submission(
13+
ack: Ack, body: dict, client: WebClient, context: BoltContext, logger: Logger
14+
):
1315
"""Handle modal submission: open DM, post issue, and run Casey agent."""
1416
ack()
1517

1618
try:
17-
team_id = body["user"]["team_id"]
18-
user_id = body["user"]["id"]
19+
team_id = context.team_id
20+
user_id = context.user_id
1921
values = body["view"]["state"]["values"]
2022
category = values["category_block"]["category_select"]["selected_option"][
2123
"value"

0 commit comments

Comments
 (0)