Skip to content

Commit 56f41aa

Browse files
feat(api): add schedule resume
1 parent c1e7db8 commit 56f41aa

7 files changed

Lines changed: 355 additions & 4 deletions

File tree

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 64
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-ebf2fa494f7a5d48ae4f9634d6cf0b963f6df38a34d8971af032a9b26549fe55.yml
1+
configured_endpoints: 65
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sgp/agentex-sdk-9c05120db888b0cb0d18336b5ae10d0abb2ea0b3d553907c47ffb21b94f84297.yml
33
openapi_spec_hash: cdea9763ef58e87c5486cb9e026b6fc9
4-
config_hash: 3b6725755e95a0dca3a1fee0a778c6ba
4+
config_hash: 7ca6c24d238deb860f1ddeb5913ca235

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ from agentex.types.agents import (
7171
ScheduleRetrieveResponse,
7272
ScheduleListResponse,
7373
SchedulePauseResponse,
74+
ScheduleResumeResponse,
7475
ScheduleTriggerResponse,
7576
)
7677
```
@@ -82,6 +83,7 @@ Methods:
8283
- <code title="get /agents/{agent_id}/schedules">client.agents.schedules.<a href="./src/agentex/resources/agents/schedules.py">list</a>(agent_id, \*\*<a href="src/agentex/types/agents/schedule_list_params.py">params</a>) -> <a href="./src/agentex/types/agents/schedule_list_response.py">ScheduleListResponse</a></code>
8384
- <code title="delete /agents/{agent_id}/schedules/name/{name}">client.agents.schedules.<a href="./src/agentex/resources/agents/schedules.py">delete</a>(name, \*, agent_id) -> <a href="./src/agentex/types/shared/delete_response.py">DeleteResponse</a></code>
8485
- <code title="post /agents/{agent_id}/schedules/name/{name}/pause">client.agents.schedules.<a href="./src/agentex/resources/agents/schedules.py">pause</a>(name, \*, agent_id, \*\*<a href="src/agentex/types/agents/schedule_pause_params.py">params</a>) -> <a href="./src/agentex/types/agents/schedule_pause_response.py">SchedulePauseResponse</a></code>
86+
- <code title="post /agents/{agent_id}/schedules/name/{name}/resume">client.agents.schedules.<a href="./src/agentex/resources/agents/schedules.py">resume</a>(name, \*, agent_id, \*\*<a href="src/agentex/types/agents/schedule_resume_params.py">params</a>) -> <a href="./src/agentex/types/agents/schedule_resume_response.py">ScheduleResumeResponse</a></code>
8587
- <code title="post /agents/{agent_id}/schedules/name/{name}/trigger">client.agents.schedules.<a href="./src/agentex/resources/agents/schedules.py">trigger</a>(name, \*, agent_id) -> <a href="./src/agentex/types/agents/schedule_trigger_response.py">ScheduleTriggerResponse</a></code>
8688

8789
# Tasks

src/agentex/resources/agents/schedules.py

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818
async_to_streamed_response_wrapper,
1919
)
2020
from ..._base_client import make_request_options
21-
from ...types.agents import schedule_list_params, schedule_pause_params, schedule_create_params
21+
from ...types.agents import schedule_list_params, schedule_pause_params, schedule_create_params, schedule_resume_params
2222
from ...types.shared.delete_response import DeleteResponse
2323
from ...types.agents.schedule_list_response import ScheduleListResponse
2424
from ...types.agents.schedule_pause_response import SchedulePauseResponse
2525
from ...types.agents.schedule_create_response import ScheduleCreateResponse
26+
from ...types.agents.schedule_resume_response import ScheduleResumeResponse
2627
from ...types.agents.schedule_trigger_response import ScheduleTriggerResponse
2728
from ...types.agents.schedule_retrieve_response import ScheduleRetrieveResponse
2829

@@ -282,6 +283,46 @@ def pause(
282283
cast_to=SchedulePauseResponse,
283284
)
284285

286+
def resume(
287+
self,
288+
name: str,
289+
*,
290+
agent_id: str,
291+
note: Optional[str] | Omit = omit,
292+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
293+
# The extra values given here take precedence over values defined on the client or passed to this method.
294+
extra_headers: Headers | None = None,
295+
extra_query: Query | None = None,
296+
extra_body: Body | None = None,
297+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
298+
) -> ScheduleResumeResponse:
299+
"""
300+
Resume a paused run schedule by its active name.
301+
302+
Args:
303+
note: Optional note explaining the resume.
304+
305+
extra_headers: Send extra headers
306+
307+
extra_query: Add additional query parameters to the request
308+
309+
extra_body: Add additional JSON properties to the request
310+
311+
timeout: Override the client-level default timeout for this request, in seconds
312+
"""
313+
if not agent_id:
314+
raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
315+
if not name:
316+
raise ValueError(f"Expected a non-empty value for `name` but received {name!r}")
317+
return self._post(
318+
path_template("/agents/{agent_id}/schedules/name/{name}/resume", agent_id=agent_id, name=name),
319+
body=maybe_transform({"note": note}, schedule_resume_params.ScheduleResumeParams),
320+
options=make_request_options(
321+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
322+
),
323+
cast_to=ScheduleResumeResponse,
324+
)
325+
285326
def trigger(
286327
self,
287328
name: str,
@@ -572,6 +613,46 @@ async def pause(
572613
cast_to=SchedulePauseResponse,
573614
)
574615

616+
async def resume(
617+
self,
618+
name: str,
619+
*,
620+
agent_id: str,
621+
note: Optional[str] | Omit = omit,
622+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
623+
# The extra values given here take precedence over values defined on the client or passed to this method.
624+
extra_headers: Headers | None = None,
625+
extra_query: Query | None = None,
626+
extra_body: Body | None = None,
627+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
628+
) -> ScheduleResumeResponse:
629+
"""
630+
Resume a paused run schedule by its active name.
631+
632+
Args:
633+
note: Optional note explaining the resume.
634+
635+
extra_headers: Send extra headers
636+
637+
extra_query: Add additional query parameters to the request
638+
639+
extra_body: Add additional JSON properties to the request
640+
641+
timeout: Override the client-level default timeout for this request, in seconds
642+
"""
643+
if not agent_id:
644+
raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
645+
if not name:
646+
raise ValueError(f"Expected a non-empty value for `name` but received {name!r}")
647+
return await self._post(
648+
path_template("/agents/{agent_id}/schedules/name/{name}/resume", agent_id=agent_id, name=name),
649+
body=await async_maybe_transform({"note": note}, schedule_resume_params.ScheduleResumeParams),
650+
options=make_request_options(
651+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
652+
),
653+
cast_to=ScheduleResumeResponse,
654+
)
655+
575656
async def trigger(
576657
self,
577658
name: str,
@@ -628,6 +709,9 @@ def __init__(self, schedules: SchedulesResource) -> None:
628709
self.pause = to_raw_response_wrapper(
629710
schedules.pause,
630711
)
712+
self.resume = to_raw_response_wrapper(
713+
schedules.resume,
714+
)
631715
self.trigger = to_raw_response_wrapper(
632716
schedules.trigger,
633717
)
@@ -652,6 +736,9 @@ def __init__(self, schedules: AsyncSchedulesResource) -> None:
652736
self.pause = async_to_raw_response_wrapper(
653737
schedules.pause,
654738
)
739+
self.resume = async_to_raw_response_wrapper(
740+
schedules.resume,
741+
)
655742
self.trigger = async_to_raw_response_wrapper(
656743
schedules.trigger,
657744
)
@@ -676,6 +763,9 @@ def __init__(self, schedules: SchedulesResource) -> None:
676763
self.pause = to_streamed_response_wrapper(
677764
schedules.pause,
678765
)
766+
self.resume = to_streamed_response_wrapper(
767+
schedules.resume,
768+
)
679769
self.trigger = to_streamed_response_wrapper(
680770
schedules.trigger,
681771
)
@@ -700,6 +790,9 @@ def __init__(self, schedules: AsyncSchedulesResource) -> None:
700790
self.pause = async_to_streamed_response_wrapper(
701791
schedules.pause,
702792
)
793+
self.resume = async_to_streamed_response_wrapper(
794+
schedules.resume,
795+
)
703796
self.trigger = async_to_streamed_response_wrapper(
704797
schedules.trigger,
705798
)

src/agentex/types/agents/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
from .deployment_list_params import DeploymentListParams as DeploymentListParams
88
from .schedule_create_params import ScheduleCreateParams as ScheduleCreateParams
99
from .schedule_list_response import ScheduleListResponse as ScheduleListResponse
10+
from .schedule_resume_params import ScheduleResumeParams as ScheduleResumeParams
1011
from .schedule_pause_response import SchedulePauseResponse as SchedulePauseResponse
1112
from .deployment_create_params import DeploymentCreateParams as DeploymentCreateParams
1213
from .deployment_list_response import DeploymentListResponse as DeploymentListResponse
1314
from .schedule_create_response import ScheduleCreateResponse as ScheduleCreateResponse
15+
from .schedule_resume_response import ScheduleResumeResponse as ScheduleResumeResponse
1416
from .schedule_trigger_response import ScheduleTriggerResponse as ScheduleTriggerResponse
1517
from .deployment_create_response import DeploymentCreateResponse as DeploymentCreateResponse
1618
from .schedule_retrieve_response import ScheduleRetrieveResponse as ScheduleRetrieveResponse
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing import Optional
6+
from typing_extensions import Required, TypedDict
7+
8+
__all__ = ["ScheduleResumeParams"]
9+
10+
11+
class ScheduleResumeParams(TypedDict, total=False):
12+
agent_id: Required[str]
13+
14+
note: Optional[str]
15+
"""Optional note explaining the resume."""
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from typing import Dict, List, Optional
4+
from datetime import datetime
5+
from typing_extensions import Literal
6+
7+
from ..._models import BaseModel
8+
from ..message_author import MessageAuthor
9+
10+
__all__ = ["ScheduleResumeResponse", "InitialInput", "CreatorPrincipal"]
11+
12+
13+
class InitialInput(BaseModel):
14+
"""The initial input."""
15+
16+
content: str
17+
"""The initial prompt delivered to the task."""
18+
19+
author: Optional[MessageAuthor] = None
20+
"""The author attributed to the initial input."""
21+
22+
type: Optional[Literal["text"]] = None
23+
"""Input content type."""
24+
25+
26+
class CreatorPrincipal(BaseModel):
27+
"""Credential-free creator identity stored with the schedule.
28+
29+
Never carries cookies, JWTs, API keys, OAuth tokens, or request headers — it
30+
is creator *context* used only for AuthZ and ownership at fire time.
31+
"""
32+
33+
account_id: Optional[str] = None
34+
"""Account/workspace id of the creator."""
35+
36+
principal_type: Optional[str] = None
37+
"""e.g. 'user' or 'service_account'."""
38+
39+
service_account_id: Optional[str] = None
40+
"""Creator service-account id, if a service principal."""
41+
42+
user_id: Optional[str] = None
43+
"""Creator user id, if a user principal."""
44+
45+
46+
class ScheduleResumeResponse(BaseModel):
47+
"""Response model describing a scheduled agent run."""
48+
49+
id: str
50+
"""The unique identifier of the run schedule."""
51+
52+
agent_id: str
53+
"""The agent this schedule belongs to."""
54+
55+
initial_input: InitialInput
56+
"""The initial input."""
57+
58+
initial_input_method: str
59+
"""Delivery method, inferred from the agent's ACP type."""
60+
61+
name: str
62+
"""Human-readable schedule name."""
63+
64+
created_at: Optional[datetime] = None
65+
"""When the schedule was created."""
66+
67+
creator_principal: Optional[CreatorPrincipal] = None
68+
"""Credential-free creator identity stored with the schedule.
69+
70+
Never carries cookies, JWTs, API keys, OAuth tokens, or request headers — it is
71+
creator _context_ used only for AuthZ and ownership at fire time.
72+
"""
73+
74+
cron_expression: Optional[str] = None
75+
"""Cron cadence, if cron-based."""
76+
77+
description: Optional[str] = None
78+
"""Optional description."""
79+
80+
end_at: Optional[datetime] = None
81+
"""Schedule deactivation time."""
82+
83+
interval_seconds: Optional[int] = None
84+
"""Interval cadence in seconds, if interval-based."""
85+
86+
last_action_time: Optional[datetime] = None
87+
"""When the schedule last fired."""
88+
89+
next_action_times: Optional[List[datetime]] = None
90+
"""Upcoming scheduled fire times."""
91+
92+
num_actions_taken: Optional[int] = None
93+
"""Number of times the schedule has fired."""
94+
95+
paused: Optional[bool] = None
96+
"""Whether the schedule is paused."""
97+
98+
start_at: Optional[datetime] = None
99+
"""Schedule activation time."""
100+
101+
state: Optional[Literal["ACTIVE", "PAUSED"]] = None
102+
"""Live schedule state from Temporal."""
103+
104+
task_metadata: Optional[Dict[str, object]] = None
105+
"""Task metadata at fire time."""
106+
107+
task_params: Optional[Dict[str, object]] = None
108+
"""Task params at fire time."""
109+
110+
timezone: Optional[str] = None
111+
"""Timezone the cron expression is evaluated in."""
112+
113+
updated_at: Optional[datetime] = None
114+
"""When the schedule was updated."""

0 commit comments

Comments
 (0)