@@ -90,6 +90,7 @@ public static function supportedWorkflowTaskCommands(): array
9090 * query_tasks: bool,
9191 * activity_retry_policy: bool,
9292 * activity_timeouts: bool,
93+ * local_activities: array<string, mixed>,
9394 * worker_session_verbs: list<string>,
9495 * worker_sessions: array<string, mixed>,
9596 * child_workflow_retry_policy: bool,
@@ -126,6 +127,7 @@ public static function serverCapabilities(): array
126127 'query_tasks ' => true ,
127128 'activity_retry_policy ' => true ,
128129 'activity_timeouts ' => true ,
130+ 'local_activities ' => self ::localActivitySemantics (),
129131 'worker_session_verbs ' => method_exists (WorkerProtocolVersion::class, 'workerSessionVerbs ' )
130132 ? WorkerProtocolVersion::workerSessionVerbs ()
131133 : ['create ' , 'heartbeat ' , 'close ' ],
@@ -176,6 +178,52 @@ public static function serverCapabilities(): array
176178 ];
177179 }
178180
181+ /**
182+ * @return array<string, mixed>
183+ */
184+ private static function localActivitySemantics (): array
185+ {
186+ if (method_exists (WorkerProtocolVersion::class, 'localActivitySemantics ' )) {
187+ return WorkerProtocolVersion::localActivitySemantics ();
188+ }
189+
190+ return [
191+ 'schema ' => 'durable-workflow.v2.local-activity.contract ' ,
192+ 'version ' => 1 ,
193+ 'supported ' => false ,
194+ 'api ' => [
195+ 'functions ' => ['Workflow \\V2 \\localActivity ' ],
196+ 'workflow_facade ' => [
197+ 'Workflow \\V2 \\Workflow::localActivity ' ,
198+ 'Workflow \\V2 \\Workflow::executeLocalActivity ' ,
199+ ],
200+ 'options ' => 'Workflow \\V2 \\Support \\LocalActivityOptions ' ,
201+ ],
202+ 'execution ' => [
203+ 'mode ' => 'local ' ,
204+ 'same_process ' => true ,
205+ 'ordinary_activity_task_created ' => false ,
206+ 'history_marker ' => [
207+ 'execution_mode ' => 'local ' ,
208+ 'local_activity ' => true ,
209+ ],
210+ ],
211+ 'routing ' => [
212+ 'admission ' => 'activity_class_must_resolve_in_the_workflow_worker_process ' ,
213+ 'queue_bypassed ' => true ,
214+ 'rejected_options ' => ['connection ' , 'queue ' , 'worker_session ' , 'schedule_to_start_timeout ' ],
215+ ],
216+ 'retry ' => [
217+ 'cold_replay_reason ' => 'cold_replay ' ,
218+ ],
219+ 'visibility ' => [
220+ 'activity_execution_marker ' => 'activity_options.execution_mode ' ,
221+ 'history_marker ' => 'payload.execution_mode ' ,
222+ 'metrics_marker ' => 'activities.local_* ' ,
223+ ],
224+ ];
225+ }
226+
179227 /**
180228 * @return array{
181229 * version: string,
0 commit comments