From 312c59229c3b471fb77ced4f098dfd229c5c0c06 Mon Sep 17 00:00:00 2001 From: "alex.stanfield" <13949480+chaptersix@users.noreply.github.com> Date: Sun, 29 Mar 2026 14:10:55 -0500 Subject: [PATCH 1/3] feat: add start_activity action to ScheduleAction and completion_callbacks to StartActivityExecutionRequest Add ScheduleActivityAction message and start_activity variant to ScheduleAction oneof. Add activity result fields to ScheduleActionResult, activity_type to ScheduleListInfo, running_activities and ScheduleActivityExecution to ScheduleInfo. Add completion_callbacks field to StartActivityExecutionRequest for scheduler lifecycle tracking. --- temporal/api/schedule/v1/message.proto | 75 +++++++++++++++++++ .../workflowservice/v1/request_response.proto | 4 + 2 files changed, 79 insertions(+) diff --git a/temporal/api/schedule/v1/message.proto b/temporal/api/schedule/v1/message.proto index b35e1f0eb..3521bb4ba 100644 --- a/temporal/api/schedule/v1/message.proto +++ b/temporal/api/schedule/v1/message.proto @@ -20,6 +20,8 @@ import "google/protobuf/timestamp.proto"; import "temporal/api/common/v1/message.proto"; import "temporal/api/enums/v1/schedule.proto"; import "temporal/api/enums/v1/workflow.proto"; +import "temporal/api/sdk/v1/user_metadata.proto"; +import "temporal/api/taskqueue/v1/message.proto"; import "temporal/api/workflow/v1/message.proto"; // CalendarSpec describes an event specification relative to the calendar, @@ -229,6 +231,54 @@ message SchedulePolicies { bool keep_original_workflow_id = 4; } +// ScheduleActivityAction describes a standalone activity to start on each schedule trigger. +message ScheduleActivityAction { + // The activity ID. May have a timestamp appended for uniqueness. + string activity_id = 1; + + // The type of the activity to execute. + temporal.api.common.v1.ActivityType activity_type = 2; + + // Task queue to schedule the activity on. + temporal.api.taskqueue.v1.TaskQueue task_queue = 3; + + // Serialized arguments to the activity. + temporal.api.common.v1.Payloads input = 4; + + // Timeout from schedule to close of the activity. + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: standard name of field --) + google.protobuf.Duration schedule_to_close_timeout = 5; + + // Timeout from schedule to start of the activity. + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: standard name of field --) + google.protobuf.Duration schedule_to_start_timeout = 6; + + // Timeout from start to close of the activity. + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: standard name of field --) + google.protobuf.Duration start_to_close_timeout = 7; + + // Heartbeat timeout. + google.protobuf.Duration heartbeat_timeout = 8; + + // Retry policy for the activity. + temporal.api.common.v1.RetryPolicy retry_policy = 9; + + // Request header for context propagation. + temporal.api.common.v1.Header header = 10; + + // Search attributes for the activity. + temporal.api.common.v1.SearchAttributes search_attributes = 11; + + // Metadata for display purposes. + temporal.api.sdk.v1.UserMetadata user_metadata = 12; + + // Priority metadata. + temporal.api.common.v1.Priority priority = 13; +} + message ScheduleAction { oneof action { // All fields of NewWorkflowExecutionInfo are valid except for: @@ -237,6 +287,11 @@ message ScheduleAction { // The workflow id of the started workflow may not match this exactly, // it may have a timestamp appended for uniqueness. temporal.api.workflow.v1.NewWorkflowExecutionInfo start_workflow = 1; + + // Start a standalone activity execution. + // The activity id of the started activity may not match this exactly, + // it may have a timestamp appended for uniqueness. + ScheduleActivityAction start_activity = 2; } } @@ -253,6 +308,13 @@ message ScheduleActionResult { // If the action was start_workflow, this field will reflect an // eventually-consistent view of the started workflow's status. temporal.api.enums.v1.WorkflowExecutionStatus start_workflow_status = 12; + + // If action was start_activity: + string start_activity_result_activity_id = 21; + string start_activity_result_run_id = 22; + // Uses WorkflowExecutionStatus (not ActivityExecutionStatus) because the + // status values are semantically identical and keeps completion handling uniform. + temporal.api.enums.v1.WorkflowExecutionStatus start_activity_status = 23; } message ScheduleState { @@ -349,6 +411,16 @@ message ScheduleInfo { // Deprecated. string invalid_schedule_error = 8 [deprecated = true]; + + // Currently-running activities started by this schedule (when action is start_activity). + // Only populated for activity schedule actions. + repeated ScheduleActivityExecution running_activities = 12; +} + +// Identifies a running activity started by a schedule. +message ScheduleActivityExecution { + string activity_id = 1; + string run_id = 2; } message Schedule { @@ -370,6 +442,9 @@ message ScheduleListInfo { // well with JSON. If action is start_workflow, this is set: temporal.api.common.v1.WorkflowType workflow_type = 2; + // Set if the schedule action is start_activity. + temporal.api.common.v1.ActivityType activity_type = 10; + // From state: string notes = 3; bool paused = 4; diff --git a/temporal/api/workflowservice/v1/request_response.proto b/temporal/api/workflowservice/v1/request_response.proto index 0924c1aff..caa96a851 100644 --- a/temporal/api/workflowservice/v1/request_response.proto +++ b/temporal/api/workflowservice/v1/request_response.proto @@ -2931,6 +2931,10 @@ message StartActivityExecutionRequest { temporal.api.sdk.v1.UserMetadata user_metadata = 17; // Priority metadata. temporal.api.common.v1.Priority priority = 18; + + // Callbacks to invoke on activity completion. + // Used internally by the scheduler to track activity lifecycle. + repeated temporal.api.common.v1.Callback completion_callbacks = 19; } message StartActivityExecutionResponse { From 9d467d6bb81f717bc3d8391d22d0bd0ab4ca4301 Mon Sep 17 00:00:00 2001 From: "alex.stanfield" <13949480+chaptersix@users.noreply.github.com> Date: Mon, 6 Apr 2026 19:12:54 -0500 Subject: [PATCH 2/3] refactor: extract NewActivityExecutionInfo and remove completion_callbacks Move ScheduleActivityAction fields into NewActivityExecutionInfo in activity/v1/message.proto, mirroring NewWorkflowExecutionInfo pattern. Reference it from ScheduleAction oneof. Remove completion_callbacks from StartActivityExecutionRequest. --- temporal/api/activity/v1/message.proto | 57 +++++++++++++++++++ temporal/api/schedule/v1/message.proto | 56 ++---------------- .../workflowservice/v1/request_response.proto | 4 -- 3 files changed, 61 insertions(+), 56 deletions(-) diff --git a/temporal/api/activity/v1/message.proto b/temporal/api/activity/v1/message.proto index 37eeae33c..81c3f57a9 100644 --- a/temporal/api/activity/v1/message.proto +++ b/temporal/api/activity/v1/message.proto @@ -163,6 +163,63 @@ message ActivityExecutionInfo { string canceled_reason = 32; } +// NewActivityExecutionInfo is a shared message that encapsulates all the +// required arguments to starting a standalone activity in different contexts. +message NewActivityExecutionInfo { + // Identifier for this activity. Must be unique among activities in the same namespace. + string activity_id = 1; + + // The type of the activity to execute. + temporal.api.common.v1.ActivityType activity_type = 2; + + // Task queue to schedule the activity on. + temporal.api.taskqueue.v1.TaskQueue task_queue = 3; + + // Serialized arguments to the activity. + temporal.api.common.v1.Payloads input = 4; + + // Indicates how long the caller is willing to wait for an activity completion. Limits how long + // retries will be attempted. Either this or `start_to_close_timeout` must be specified. + // + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: "to" is used to indicate interval. --) + google.protobuf.Duration schedule_to_close_timeout = 5; + + // Limits time an activity task can stay in a task queue before a worker picks it up. This + // timeout is always non retryable, as all a retry would achieve is to put it back into the same + // queue. Defaults to `schedule_to_close_timeout` if not specified. + // + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: "to" is used to indicate interval. --) + google.protobuf.Duration schedule_to_start_timeout = 6; + + // Maximum time an activity is allowed to execute after being picked up by a worker. This + // timeout is always retryable. Either this or `schedule_to_close_timeout` must be + // specified. + // + // (-- api-linter: core::0140::prepositions=disabled + // aip.dev/not-precedent: "to" is used to indicate interval. --) + google.protobuf.Duration start_to_close_timeout = 7; + + // Maximum permitted time between successful worker heartbeats. + google.protobuf.Duration heartbeat_timeout = 8; + + // The retry policy for the activity. Will never exceed `schedule_to_close_timeout`. + temporal.api.common.v1.RetryPolicy retry_policy = 9; + + // Header for context propagation and tracing purposes. + temporal.api.common.v1.Header header = 10; + + // Search attributes for indexing. + temporal.api.common.v1.SearchAttributes search_attributes = 11; + + // Metadata for use by user interfaces to display the fixed as-of-start summary and details of the activity. + temporal.api.sdk.v1.UserMetadata user_metadata = 12; + + // Priority metadata. + temporal.api.common.v1.Priority priority = 13; +} + // Limited activity information returned in the list response. // When adding fields here, ensure that it is also present in ActivityExecutionInfo (note that it // may already be present in ActivityExecutionInfo but not at the top-level). diff --git a/temporal/api/schedule/v1/message.proto b/temporal/api/schedule/v1/message.proto index 3521bb4ba..07ab4226b 100644 --- a/temporal/api/schedule/v1/message.proto +++ b/temporal/api/schedule/v1/message.proto @@ -17,11 +17,10 @@ option csharp_namespace = "Temporalio.Api.Schedule.V1"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; +import "temporal/api/activity/v1/message.proto"; import "temporal/api/common/v1/message.proto"; import "temporal/api/enums/v1/schedule.proto"; import "temporal/api/enums/v1/workflow.proto"; -import "temporal/api/sdk/v1/user_metadata.proto"; -import "temporal/api/taskqueue/v1/message.proto"; import "temporal/api/workflow/v1/message.proto"; // CalendarSpec describes an event specification relative to the calendar, @@ -231,54 +230,6 @@ message SchedulePolicies { bool keep_original_workflow_id = 4; } -// ScheduleActivityAction describes a standalone activity to start on each schedule trigger. -message ScheduleActivityAction { - // The activity ID. May have a timestamp appended for uniqueness. - string activity_id = 1; - - // The type of the activity to execute. - temporal.api.common.v1.ActivityType activity_type = 2; - - // Task queue to schedule the activity on. - temporal.api.taskqueue.v1.TaskQueue task_queue = 3; - - // Serialized arguments to the activity. - temporal.api.common.v1.Payloads input = 4; - - // Timeout from schedule to close of the activity. - // (-- api-linter: core::0140::prepositions=disabled - // aip.dev/not-precedent: standard name of field --) - google.protobuf.Duration schedule_to_close_timeout = 5; - - // Timeout from schedule to start of the activity. - // (-- api-linter: core::0140::prepositions=disabled - // aip.dev/not-precedent: standard name of field --) - google.protobuf.Duration schedule_to_start_timeout = 6; - - // Timeout from start to close of the activity. - // (-- api-linter: core::0140::prepositions=disabled - // aip.dev/not-precedent: standard name of field --) - google.protobuf.Duration start_to_close_timeout = 7; - - // Heartbeat timeout. - google.protobuf.Duration heartbeat_timeout = 8; - - // Retry policy for the activity. - temporal.api.common.v1.RetryPolicy retry_policy = 9; - - // Request header for context propagation. - temporal.api.common.v1.Header header = 10; - - // Search attributes for the activity. - temporal.api.common.v1.SearchAttributes search_attributes = 11; - - // Metadata for display purposes. - temporal.api.sdk.v1.UserMetadata user_metadata = 12; - - // Priority metadata. - temporal.api.common.v1.Priority priority = 13; -} - message ScheduleAction { oneof action { // All fields of NewWorkflowExecutionInfo are valid except for: @@ -288,10 +239,11 @@ message ScheduleAction { // it may have a timestamp appended for uniqueness. temporal.api.workflow.v1.NewWorkflowExecutionInfo start_workflow = 1; - // Start a standalone activity execution. + // All fields of NewActivityExecutionInfo are valid except for: + // - activity_id (will be set by the server) // The activity id of the started activity may not match this exactly, // it may have a timestamp appended for uniqueness. - ScheduleActivityAction start_activity = 2; + temporal.api.activity.v1.NewActivityExecutionInfo start_activity = 2; } } diff --git a/temporal/api/workflowservice/v1/request_response.proto b/temporal/api/workflowservice/v1/request_response.proto index caa96a851..0924c1aff 100644 --- a/temporal/api/workflowservice/v1/request_response.proto +++ b/temporal/api/workflowservice/v1/request_response.proto @@ -2931,10 +2931,6 @@ message StartActivityExecutionRequest { temporal.api.sdk.v1.UserMetadata user_metadata = 17; // Priority metadata. temporal.api.common.v1.Priority priority = 18; - - // Callbacks to invoke on activity completion. - // Used internally by the scheduler to track activity lifecycle. - repeated temporal.api.common.v1.Callback completion_callbacks = 19; } message StartActivityExecutionResponse { From ad899c55711ad4f4d2af8629c0165e959e45b89e Mon Sep 17 00:00:00 2001 From: "alex.stanfield" <13949480+chaptersix@users.noreply.github.com> Date: Mon, 6 Apr 2026 19:16:24 -0500 Subject: [PATCH 3/3] chore: regenerate openapi docs and update buf.lock --- buf.lock | 5 -- openapi/openapiv2.json | 97 ++++++++++++++++++++++++++++++++ openapi/openapiv3.yaml | 122 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 219 insertions(+), 5 deletions(-) diff --git a/buf.lock b/buf.lock index fccbfb89d..6c4355d41 100644 --- a/buf.lock +++ b/buf.lock @@ -6,8 +6,3 @@ deps: repository: googleapis commit: 28151c0d0a1641bf938a7672c500e01d digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de - - remote: buf.build - owner: grpc-ecosystem - repository: grpc-gateway - commit: 048ae6ff94ca4476b3225904b1078fad - digest: shake256:e5250bf2d999516c02206d757502b902e406f35c099d0e869dc3e4f923f6870fe0805a9974c27df0695462937eae90cd4d9db90bb9a03489412560baa74a87b6 diff --git a/openapi/openapiv2.json b/openapi/openapiv2.json index 74f2dfb28..0a83bc679 100644 --- a/openapi/openapiv2.json +++ b/openapi/openapiv2.json @@ -14420,6 +14420,64 @@ ], "default": "NAMESPACE_STATE_UNSPECIFIED" }, + "v1NewActivityExecutionInfo": { + "type": "object", + "properties": { + "activityId": { + "type": "string", + "description": "Identifier for this activity. Must be unique among activities in the same namespace." + }, + "activityType": { + "$ref": "#/definitions/v1ActivityType", + "description": "The type of the activity to execute." + }, + "taskQueue": { + "$ref": "#/definitions/v1TaskQueue", + "description": "Task queue to schedule the activity on." + }, + "input": { + "$ref": "#/definitions/v1Payloads", + "description": "Serialized arguments to the activity." + }, + "scheduleToCloseTimeout": { + "type": "string", + "description": "Indicates how long the caller is willing to wait for an activity completion. Limits how long\nretries will be attempted. Either this or `start_to_close_timeout` must be specified.\n" + }, + "scheduleToStartTimeout": { + "type": "string", + "description": "Limits time an activity task can stay in a task queue before a worker picks it up. This\ntimeout is always non retryable, as all a retry would achieve is to put it back into the same\nqueue. Defaults to `schedule_to_close_timeout` if not specified.\n" + }, + "startToCloseTimeout": { + "type": "string", + "description": "Maximum time an activity is allowed to execute after being picked up by a worker. This\ntimeout is always retryable. Either this or `schedule_to_close_timeout` must be\nspecified.\n" + }, + "heartbeatTimeout": { + "type": "string", + "description": "Maximum permitted time between successful worker heartbeats." + }, + "retryPolicy": { + "$ref": "#/definitions/v1RetryPolicy", + "description": "The retry policy for the activity. Will never exceed `schedule_to_close_timeout`." + }, + "header": { + "$ref": "#/definitions/v1Header", + "description": "Header for context propagation and tracing purposes." + }, + "searchAttributes": { + "$ref": "#/definitions/v1SearchAttributes", + "description": "Search attributes for indexing." + }, + "userMetadata": { + "$ref": "#/definitions/v1UserMetadata", + "description": "Metadata for use by user interfaces to display the fixed as-of-start summary and details of the activity." + }, + "priority": { + "$ref": "#/definitions/v1Priority", + "description": "Priority metadata." + } + }, + "description": "NewActivityExecutionInfo is a shared message that encapsulates all the\nrequired arguments to starting a standalone activity in different contexts." + }, "v1NewWorkflowExecutionInfo": { "type": "object", "properties": { @@ -15931,6 +15989,10 @@ "startWorkflow": { "$ref": "#/definitions/v1NewWorkflowExecutionInfo", "description": "All fields of NewWorkflowExecutionInfo are valid except for:\n- workflow_id_reuse_policy\n- cron_schedule\nThe workflow id of the started workflow may not match this exactly,\nit may have a timestamp appended for uniqueness." + }, + "startActivity": { + "$ref": "#/definitions/v1NewActivityExecutionInfo", + "description": "All fields of NewActivityExecutionInfo are valid except for:\n- activity_id (will be set by the server)\nThe activity id of the started activity may not match this exactly,\nit may have a timestamp appended for uniqueness." } } }, @@ -15954,9 +16016,32 @@ "startWorkflowStatus": { "$ref": "#/definitions/v1WorkflowExecutionStatus", "description": "If the action was start_workflow, this field will reflect an\neventually-consistent view of the started workflow's status." + }, + "startActivityResultActivityId": { + "type": "string", + "title": "If action was start_activity:" + }, + "startActivityResultRunId": { + "type": "string" + }, + "startActivityStatus": { + "$ref": "#/definitions/v1WorkflowExecutionStatus", + "description": "Uses WorkflowExecutionStatus (not ActivityExecutionStatus) because the\nstatus values are semantically identical and keeps completion handling uniform." } } }, + "v1ScheduleActivityExecution": { + "type": "object", + "properties": { + "activityId": { + "type": "string" + }, + "runId": { + "type": "string" + } + }, + "description": "Identifies a running activity started by a schedule." + }, "v1ScheduleInfo": { "type": "object", "properties": { @@ -16021,6 +16106,14 @@ "invalidScheduleError": { "type": "string", "description": "Deprecated." + }, + "runningActivities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1ScheduleActivityExecution" + }, + "description": "Currently-running activities started by this schedule (when action is start_activity).\nOnly populated for activity schedule actions." } } }, @@ -16053,6 +16146,10 @@ "$ref": "#/definitions/v1WorkflowType", "title": "From action:\nAction is a oneof field, but we need to encode this in JSON and oneof fields don't work\nwell with JSON. If action is start_workflow, this is set:" }, + "activityType": { + "$ref": "#/definitions/v1ActivityType", + "description": "Set if the schedule action is start_activity." + }, "notes": { "type": "string", "title": "From state:" diff --git a/openapi/openapiv3.yaml b/openapi/openapiv3.yaml index 93f3a1075..e0dfb0ba7 100644 --- a/openapi/openapiv3.yaml +++ b/openapi/openapiv3.yaml @@ -11345,6 +11345,80 @@ components: - REPLICATION_STATE_HANDOVER type: string format: enum + NewActivityExecutionInfo: + type: object + properties: + activityId: + type: string + description: Identifier for this activity. Must be unique among activities in the same namespace. + activityType: + allOf: + - $ref: '#/components/schemas/ActivityType' + description: The type of the activity to execute. + taskQueue: + allOf: + - $ref: '#/components/schemas/TaskQueue' + description: Task queue to schedule the activity on. + input: + allOf: + - $ref: '#/components/schemas/Payloads' + description: Serialized arguments to the activity. + scheduleToCloseTimeout: + pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ + type: string + description: |- + Indicates how long the caller is willing to wait for an activity completion. Limits how long + retries will be attempted. Either this or `start_to_close_timeout` must be specified. + + (-- api-linter: core::0140::prepositions=disabled + aip.dev/not-precedent: "to" is used to indicate interval. --) + scheduleToStartTimeout: + pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ + type: string + description: |- + Limits time an activity task can stay in a task queue before a worker picks it up. This + timeout is always non retryable, as all a retry would achieve is to put it back into the same + queue. Defaults to `schedule_to_close_timeout` if not specified. + + (-- api-linter: core::0140::prepositions=disabled + aip.dev/not-precedent: "to" is used to indicate interval. --) + startToCloseTimeout: + pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ + type: string + description: |- + Maximum time an activity is allowed to execute after being picked up by a worker. This + timeout is always retryable. Either this or `schedule_to_close_timeout` must be + specified. + + (-- api-linter: core::0140::prepositions=disabled + aip.dev/not-precedent: "to" is used to indicate interval. --) + heartbeatTimeout: + pattern: ^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$ + type: string + description: Maximum permitted time between successful worker heartbeats. + retryPolicy: + allOf: + - $ref: '#/components/schemas/RetryPolicy' + description: The retry policy for the activity. Will never exceed `schedule_to_close_timeout`. + header: + allOf: + - $ref: '#/components/schemas/Header' + description: Header for context propagation and tracing purposes. + searchAttributes: + allOf: + - $ref: '#/components/schemas/SearchAttributes' + description: Search attributes for indexing. + userMetadata: + allOf: + - $ref: '#/components/schemas/UserMetadata' + description: Metadata for use by user interfaces to display the fixed as-of-start summary and details of the activity. + priority: + allOf: + - $ref: '#/components/schemas/Priority' + description: Priority metadata. + description: |- + NewActivityExecutionInfo is a shared message that encapsulates all the + required arguments to starting a standalone activity in different contexts. NewWorkflowExecutionInfo: type: object properties: @@ -13367,6 +13441,14 @@ components: - cron_schedule The workflow id of the started workflow may not match this exactly, it may have a timestamp appended for uniqueness. + startActivity: + allOf: + - $ref: '#/components/schemas/NewActivityExecutionInfo' + description: |- + All fields of NewActivityExecutionInfo are valid except for: + - activity_id (will be set by the server) + The activity id of the started activity may not match this exactly, + it may have a timestamp appended for uniqueness. ScheduleActionResult: type: object properties: @@ -13398,6 +13480,35 @@ components: If the action was start_workflow, this field will reflect an eventually-consistent view of the started workflow's status. format: enum + startActivityResultActivityId: + type: string + description: 'If action was start_activity:' + startActivityResultRunId: + type: string + startActivityStatus: + enum: + - WORKFLOW_EXECUTION_STATUS_UNSPECIFIED + - WORKFLOW_EXECUTION_STATUS_RUNNING + - WORKFLOW_EXECUTION_STATUS_COMPLETED + - WORKFLOW_EXECUTION_STATUS_FAILED + - WORKFLOW_EXECUTION_STATUS_CANCELED + - WORKFLOW_EXECUTION_STATUS_TERMINATED + - WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW + - WORKFLOW_EXECUTION_STATUS_TIMED_OUT + - WORKFLOW_EXECUTION_STATUS_PAUSED + type: string + description: |- + Uses WorkflowExecutionStatus (not ActivityExecutionStatus) because the + status values are semantically identical and keeps completion handling uniform. + format: enum + ScheduleActivityExecution: + type: object + properties: + activityId: + type: string + runId: + type: string + description: Identifies a running activity started by a schedule. ScheduleInfo: type: object properties: @@ -13450,6 +13561,13 @@ components: invalidScheduleError: type: string description: Deprecated. + runningActivities: + type: array + items: + $ref: '#/components/schemas/ScheduleActivityExecution' + description: |- + Currently-running activities started by this schedule (when action is start_activity). + Only populated for activity schedule actions. ScheduleListEntry: type: object properties: @@ -13478,6 +13596,10 @@ components: From action: Action is a oneof field, but we need to encode this in JSON and oneof fields don't work well with JSON. If action is start_workflow, this is set: + activityType: + allOf: + - $ref: '#/components/schemas/ActivityType' + description: Set if the schedule action is start_activity. notes: type: string description: 'From state:'