Skip to content

Commit df19931

Browse files
Merge branch 'main' into fix-naive-datetime-timestamp
2 parents 9b07398 + 463c8b3 commit df19931

9 files changed

Lines changed: 817 additions & 94 deletions

File tree

‎.claude/skills/managing-dependencies/SKILL.md‎

Lines changed: 48 additions & 88 deletions
Large diffs are not rendered by default.

‎.github/workflows/ci-build.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ jobs:
152152
pip install -r requirements/databases.txt
153153
- name: Run sync tests (PostgreSQL)
154154
env:
155-
TEST_DATABASE_URL: postgresql://test_user:password@localhost/test
155+
TEST_DATABASE_URL: postgresql+psycopg://test_user:password@localhost/test
156156
run: |
157157
PYTHONPATH=$PWD:$PYTHONPATH pytest -s tests/slack_sdk/oauth/installation_store/test_sqlalchemy.py
158158
PYTHONPATH=$PWD:$PYTHONPATH pytest -s tests/slack_sdk/oauth/state_store/test_sqlalchemy.py

‎requirements/databases.txt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# pip install -r requirements/databases.txt
22
# Database drivers for CI testing.
33

4-
# psycopg2-binary
4+
# psycopg
55
# Note: postgreSQL driver (sync).
6-
psycopg2-binary>=2.9.12,<3
6+
psycopg[binary]>=3.3.6,<4
77

88
# asyncpg
99
# Note: postgreSQL driver (async).

‎slack_sdk/socket_mode/aiohttp/__init__.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,10 @@ async def connect(self):
369369
except Exception as e:
370370
self.logger.exception(f"Failed to close the old session : {e}")
371371

372+
if self.aiohttp_client_session.closed and not self.closed:
373+
self.logger.info("The aiohttp client session is closed; creating a new one")
374+
self.aiohttp_client_session = aiohttp.ClientSession()
375+
372376
if self.wss_uri is None:
373377
# If the underlying WSS URL does not exist,
374378
# acquiring a new active WSS URL from the server-side first

‎slack_sdk/web/async_client.py‎

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,6 +2029,220 @@ async def admin_workflows_unpublish(
20292029
kwargs.update({"workflow_ids": workflow_ids})
20302030
return await self.api_call("admin.workflows.unpublish", params=kwargs)
20312031

2032+
async def agents_conversations_archive(
2033+
self,
2034+
*,
2035+
channel_id: str,
2036+
summary_message_ts: Optional[str] = None,
2037+
**kwargs,
2038+
) -> AsyncSlackResponse:
2039+
"""Archive a code channel.
2040+
2041+
https://docs.slack.dev/reference/methods/agents.conversations.archive
2042+
"""
2043+
kwargs.update(
2044+
{
2045+
"channel_id": channel_id,
2046+
"summary_message_ts": summary_message_ts,
2047+
}
2048+
)
2049+
kwargs = _remove_none_values(kwargs)
2050+
return await self.api_call("agents.conversations.archive", json=kwargs)
2051+
2052+
async def agents_conversations_create(
2053+
self,
2054+
*,
2055+
name: str,
2056+
team_id: Optional[str] = None,
2057+
session_id: Optional[str] = None,
2058+
is_private: Optional[bool] = None,
2059+
origin_channel_id: Optional[str] = None,
2060+
origin_message_ts: Optional[str] = None,
2061+
**kwargs,
2062+
) -> AsyncSlackResponse:
2063+
"""Create a dedicated code channel for an agent session.
2064+
2065+
https://docs.slack.dev/reference/methods/agents.conversations.create
2066+
"""
2067+
kwargs.update(
2068+
{
2069+
"team_id": team_id,
2070+
"session_id": session_id,
2071+
"name": name,
2072+
"is_private": is_private,
2073+
"origin_channel_id": origin_channel_id,
2074+
"origin_message_ts": origin_message_ts,
2075+
}
2076+
)
2077+
kwargs = _remove_none_values(kwargs)
2078+
return await self.api_call("agents.conversations.create", json=kwargs)
2079+
2080+
async def agents_conversations_getCanvas(
2081+
self,
2082+
*,
2083+
channel: str,
2084+
canvas_id: str,
2085+
content_format: Optional[str] = None,
2086+
include_resolved: Optional[bool] = None,
2087+
**kwargs,
2088+
) -> AsyncSlackResponse:
2089+
"""Fetch a canvas attached to a code channel.
2090+
2091+
https://docs.slack.dev/reference/methods/agents.conversations.getCanvas
2092+
"""
2093+
kwargs.update(
2094+
{
2095+
"channel": channel,
2096+
"canvas_id": canvas_id,
2097+
"content_format": content_format,
2098+
"include_resolved": include_resolved,
2099+
}
2100+
)
2101+
kwargs = _remove_none_values(kwargs)
2102+
return await self.api_call("agents.conversations.getCanvas", json=kwargs)
2103+
2104+
async def agents_conversations_listViews(
2105+
self,
2106+
*,
2107+
channel_id: str,
2108+
**kwargs,
2109+
) -> AsyncSlackResponse:
2110+
"""List the views currently attached to a code channel.
2111+
2112+
https://docs.slack.dev/reference/methods/agents.conversations.listViews
2113+
"""
2114+
kwargs.update({"channel_id": channel_id})
2115+
kwargs = _remove_none_values(kwargs)
2116+
return await self.api_call("agents.conversations.listViews", json=kwargs)
2117+
2118+
async def agents_conversations_removeView(
2119+
self,
2120+
*,
2121+
channel_id: str,
2122+
view_key: Optional[str] = None,
2123+
view_id: Optional[str] = None,
2124+
**kwargs,
2125+
) -> AsyncSlackResponse:
2126+
"""Remove a view from a code channel.
2127+
2128+
https://docs.slack.dev/reference/methods/agents.conversations.removeView
2129+
"""
2130+
kwargs.update(
2131+
{
2132+
"channel_id": channel_id,
2133+
"view_key": view_key,
2134+
"view_id": view_id,
2135+
}
2136+
)
2137+
kwargs = _remove_none_values(kwargs)
2138+
return await self.api_call("agents.conversations.removeView", json=kwargs)
2139+
2140+
async def agents_conversations_setCanvasContent(
2141+
self,
2142+
*,
2143+
channel: str,
2144+
canvas_id: str,
2145+
content: str,
2146+
**kwargs,
2147+
) -> AsyncSlackResponse:
2148+
"""Replace the full markdown content of a plan canvas attached to a code channel.
2149+
2150+
https://docs.slack.dev/reference/methods/agents.conversations.setCanvasContent
2151+
"""
2152+
kwargs.update(
2153+
{
2154+
"channel": channel,
2155+
"canvas_id": canvas_id,
2156+
"content": content,
2157+
}
2158+
)
2159+
kwargs = _remove_none_values(kwargs)
2160+
return await self.api_call("agents.conversations.setCanvasContent", json=kwargs)
2161+
2162+
async def agents_conversations_setCommands(
2163+
self,
2164+
*,
2165+
channel_id: str,
2166+
commands: Sequence[Dict],
2167+
**kwargs,
2168+
) -> AsyncSlackResponse:
2169+
"""Register the set of agent-defined slash commands for the calling agent in a code channel.
2170+
2171+
https://docs.slack.dev/reference/methods/agents.conversations.setCommands
2172+
"""
2173+
kwargs.update(
2174+
{
2175+
"commands": commands,
2176+
"channel_id": channel_id,
2177+
}
2178+
)
2179+
kwargs = _remove_none_values(kwargs)
2180+
return await self.api_call("agents.conversations.setCommands", json=kwargs)
2181+
2182+
async def agents_conversations_setProperties(
2183+
self,
2184+
*,
2185+
channel_id: str,
2186+
code_channel: Optional[Dict] = None,
2187+
agent_resource: Optional[Dict] = None,
2188+
**kwargs,
2189+
) -> AsyncSlackResponse:
2190+
"""Set properties on a code channel.
2191+
2192+
https://docs.slack.dev/reference/methods/agents.conversations.setProperties
2193+
"""
2194+
kwargs.update(
2195+
{
2196+
"channel_id": channel_id,
2197+
"code_channel": code_channel,
2198+
"agent_resource": agent_resource,
2199+
}
2200+
)
2201+
kwargs = _remove_none_values(kwargs)
2202+
return await self.api_call("agents.conversations.setProperties", json=kwargs)
2203+
2204+
async def agents_conversations_setView(
2205+
self,
2206+
*,
2207+
channel_id: str,
2208+
type: Optional[str] = None,
2209+
view_key: Optional[str] = None,
2210+
content: Optional[str] = None,
2211+
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
2212+
canvas_id: Optional[str] = None,
2213+
access_level: Optional[str] = None,
2214+
agent_content_hash: Optional[str] = None,
2215+
pr_url: Optional[str] = None,
2216+
base_branch: Optional[str] = None,
2217+
head_branch: Optional[str] = None,
2218+
name: Optional[str] = None,
2219+
csp: Optional[Dict] = None,
2220+
**kwargs,
2221+
) -> AsyncSlackResponse:
2222+
"""Create or update a view in a code channel.
2223+
2224+
https://docs.slack.dev/reference/methods/agents.conversations.setView
2225+
"""
2226+
kwargs.update(
2227+
{
2228+
"channel_id": channel_id,
2229+
"type": type,
2230+
"view_key": view_key,
2231+
"content": content,
2232+
"blocks": blocks,
2233+
"canvas_id": canvas_id,
2234+
"access_level": access_level,
2235+
"agent_content_hash": agent_content_hash,
2236+
"pr_url": pr_url,
2237+
"base_branch": base_branch,
2238+
"head_branch": head_branch,
2239+
"name": name,
2240+
"csp": csp,
2241+
}
2242+
)
2243+
kwargs = _remove_none_values(kwargs)
2244+
return await self.api_call("agents.conversations.setView", json=kwargs)
2245+
20322246
async def agents_sessions_rename(
20332247
self,
20342248
*,

0 commit comments

Comments
 (0)