@temporalio/core-bridge 1.13.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/Cargo.lock +135 -100
  2. package/Cargo.toml +3 -2
  3. package/{sdk-core/fsm/rustfsm_trait/LICENSE.txt → LICENSE} +5 -5
  4. package/README.md +0 -1
  5. package/bridge-macros/Cargo.toml +16 -0
  6. package/bridge-macros/src/derive_js_function.rs +126 -0
  7. package/bridge-macros/src/derive_tryfromjs.rs +138 -0
  8. package/bridge-macros/src/derive_tryintojs.rs +151 -0
  9. package/bridge-macros/src/lib.rs +42 -0
  10. package/lib/native.d.ts +13 -6
  11. package/package.json +6 -5
  12. package/releases/aarch64-apple-darwin/index.node +0 -0
  13. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  14. package/releases/x86_64-apple-darwin/index.node +0 -0
  15. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  16. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  17. package/sdk-core/.cargo/config.toml +9 -3
  18. package/sdk-core/.github/workflows/per-pr.yml +42 -5
  19. package/sdk-core/AGENTS.md +17 -19
  20. package/sdk-core/Cargo.toml +6 -7
  21. package/sdk-core/README.md +12 -15
  22. package/sdk-core/arch_docs/diagrams/deps.svg +102 -0
  23. package/sdk-core/{client → crates/client}/Cargo.toml +7 -9
  24. package/sdk-core/{client → crates/client}/src/lib.rs +110 -159
  25. package/sdk-core/{client → crates/client}/src/metrics.rs +1 -1
  26. package/sdk-core/{client → crates/client}/src/raw.rs +73 -44
  27. package/sdk-core/crates/client/src/request_extensions.rs +40 -0
  28. package/sdk-core/{client → crates/client}/src/retry.rs +24 -17
  29. package/sdk-core/crates/client/src/worker/mod.rs +1468 -0
  30. package/sdk-core/{client → crates/client}/src/workflow_handle/mod.rs +4 -4
  31. package/sdk-core/{core-api → crates/common}/Cargo.toml +17 -8
  32. package/sdk-core/crates/common/protos/api_cloud_upstream/VERSION +1 -0
  33. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/account/v1/message.proto +18 -0
  34. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +38 -11
  35. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +21 -4
  36. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +6 -6
  37. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/sink/v1/message.proto +22 -0
  38. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/create-release.yml +5 -0
  39. package/sdk-core/{core-api → crates/common}/src/envconfig.rs +2 -2
  40. package/sdk-core/{core-api → crates/common}/src/errors.rs +8 -1
  41. package/sdk-core/{fsm/rustfsm_trait/src/lib.rs → crates/common/src/fsm_trait.rs} +1 -27
  42. package/sdk-core/{core-api → crates/common}/src/lib.rs +24 -9
  43. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/canned_histories.rs +1 -1
  44. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_builder.rs +1 -1
  45. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_info.rs +2 -2
  46. package/sdk-core/{sdk-core-protos/src/lib.rs → crates/common/src/protos/mod.rs} +18 -17
  47. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/test_utils.rs +1 -1
  48. package/sdk-core/{core-api → crates/common}/src/telemetry/metrics.rs +447 -50
  49. package/sdk-core/{core-api → crates/common}/src/telemetry.rs +3 -1
  50. package/sdk-core/{core-api → crates/common}/src/worker.rs +112 -18
  51. package/sdk-core/crates/common/tests/worker_task_types_test.rs +129 -0
  52. package/sdk-core/crates/macros/Cargo.toml +23 -0
  53. package/sdk-core/{fsm/rustfsm_procmacro → crates/macros}/src/lib.rs +6 -11
  54. package/sdk-core/{sdk → crates/sdk}/Cargo.toml +10 -10
  55. package/sdk-core/{sdk → crates/sdk}/src/activity_context.rs +8 -6
  56. package/sdk-core/{sdk → crates/sdk}/src/interceptors.rs +1 -1
  57. package/sdk-core/{sdk → crates/sdk}/src/lib.rs +42 -37
  58. package/sdk-core/{sdk → crates/sdk}/src/workflow_context/options.rs +2 -2
  59. package/sdk-core/{sdk → crates/sdk}/src/workflow_context.rs +21 -19
  60. package/sdk-core/{sdk → crates/sdk}/src/workflow_future.rs +1 -1
  61. package/sdk-core/{core → crates/sdk-core}/Cargo.toml +32 -25
  62. package/sdk-core/{tests → crates/sdk-core/benches}/workflow_replay_bench.rs +10 -10
  63. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +32 -0
  64. package/sdk-core/crates/sdk-core/machine_coverage/CancelExternalMachine_Coverage.puml +9 -0
  65. package/sdk-core/crates/sdk-core/machine_coverage/CancelWorkflowMachine_Coverage.puml +6 -0
  66. package/sdk-core/crates/sdk-core/machine_coverage/ChildWorkflowMachine_Coverage.puml +27 -0
  67. package/sdk-core/crates/sdk-core/machine_coverage/CompleteWorkflowMachine_Coverage.puml +6 -0
  68. package/sdk-core/crates/sdk-core/machine_coverage/ContinueAsNewWorkflowMachine_Coverage.puml +6 -0
  69. package/sdk-core/crates/sdk-core/machine_coverage/FailWorkflowMachine_Coverage.puml +6 -0
  70. package/sdk-core/crates/sdk-core/machine_coverage/LocalActivityMachine_Coverage.puml +23 -0
  71. package/sdk-core/crates/sdk-core/machine_coverage/ModifyWorkflowPropertiesMachine_Coverage.puml +5 -0
  72. package/sdk-core/crates/sdk-core/machine_coverage/PatchMachine_Coverage.puml +8 -0
  73. package/sdk-core/crates/sdk-core/machine_coverage/SignalExternalMachine_Coverage.puml +12 -0
  74. package/sdk-core/crates/sdk-core/machine_coverage/TimerMachine_Coverage.puml +13 -0
  75. package/sdk-core/crates/sdk-core/machine_coverage/UpdateMachine_Coverage.puml +19 -0
  76. package/sdk-core/crates/sdk-core/machine_coverage/UpsertSearchAttributesMachine_Coverage.puml +5 -0
  77. package/sdk-core/crates/sdk-core/machine_coverage/WorkflowTaskMachine_Coverage.puml +11 -0
  78. package/sdk-core/{core → crates/sdk-core}/src/abstractions.rs +62 -6
  79. package/sdk-core/crates/sdk-core/src/antithesis.rs +60 -0
  80. package/sdk-core/{core → crates/sdk-core}/src/core_tests/activity_tasks.rs +36 -31
  81. package/sdk-core/{core → crates/sdk-core}/src/core_tests/mod.rs +12 -9
  82. package/sdk-core/{core → crates/sdk-core}/src/core_tests/queries.rs +24 -21
  83. package/sdk-core/{core → crates/sdk-core}/src/core_tests/replay_flag.rs +10 -8
  84. package/sdk-core/{core → crates/sdk-core}/src/core_tests/updates.rs +17 -15
  85. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workers.rs +242 -17
  86. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_cancels.rs +1 -1
  87. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_tasks.rs +126 -39
  88. package/sdk-core/{core → crates/sdk-core}/src/debug_client.rs +1 -1
  89. package/sdk-core/{core → crates/sdk-core}/src/ephemeral_server/mod.rs +3 -3
  90. package/sdk-core/crates/sdk-core/src/histfetch.rs +33 -0
  91. package/sdk-core/{core → crates/sdk-core}/src/internal_flags.rs +4 -3
  92. package/sdk-core/{core → crates/sdk-core}/src/lib.rs +85 -43
  93. package/sdk-core/{core → crates/sdk-core}/src/pollers/mod.rs +8 -6
  94. package/sdk-core/{core → crates/sdk-core}/src/pollers/poll_buffer.rs +51 -16
  95. package/sdk-core/{core → crates/sdk-core}/src/protosext/mod.rs +1 -1
  96. package/sdk-core/{core → crates/sdk-core}/src/protosext/protocol_messages.rs +1 -1
  97. package/sdk-core/{core → crates/sdk-core}/src/replay/mod.rs +14 -11
  98. package/sdk-core/{core → crates/sdk-core}/src/retry_logic.rs +19 -1
  99. package/sdk-core/{core → crates/sdk-core}/src/telemetry/log_export.rs +2 -2
  100. package/sdk-core/{core → crates/sdk-core}/src/telemetry/metrics.rs +80 -34
  101. package/sdk-core/{core → crates/sdk-core}/src/telemetry/mod.rs +4 -4
  102. package/sdk-core/{core → crates/sdk-core}/src/telemetry/otel.rs +1 -1
  103. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_meter.rs +13 -13
  104. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_server.rs +2 -2
  105. package/sdk-core/{core → crates/sdk-core}/src/test_help/integ_helpers.rs +127 -40
  106. package/sdk-core/{core → crates/sdk-core}/src/test_help/unit_helpers.rs +13 -11
  107. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/activity_heartbeat_manager.rs +2 -2
  108. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/local_activities.rs +14 -12
  109. package/sdk-core/{core → crates/sdk-core}/src/worker/activities.rs +21 -12
  110. package/sdk-core/{core → crates/sdk-core}/src/worker/client/mocks.rs +25 -12
  111. package/sdk-core/{core → crates/sdk-core}/src/worker/client.rs +164 -71
  112. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +246 -0
  113. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1462 -0
  114. package/sdk-core/{core → crates/sdk-core}/src/worker/nexus.rs +15 -14
  115. package/sdk-core/{core → crates/sdk-core}/src/worker/slot_provider.rs +12 -13
  116. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/fixed_size.rs +5 -1
  117. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/resource_based.rs +453 -57
  118. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner.rs +21 -4
  119. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/driven_workflow.rs +1 -1
  120. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/history_update.rs +2 -2
  121. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/activity_state_machine.rs +147 -37
  122. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -9
  123. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_nexus_op_state_machine.rs +14 -12
  124. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -7
  125. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/child_workflow_state_machine.rs +31 -37
  126. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/complete_workflow_state_machine.rs +13 -8
  127. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +6 -7
  128. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -7
  129. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/local_activity_state_machine.rs +33 -30
  130. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/mod.rs +22 -17
  131. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +4 -3
  132. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/nexus_operation_state_machine.rs +20 -22
  133. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/patch_state_machine.rs +12 -11
  134. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/signal_external_state_machine.rs +9 -12
  135. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/timer_state_machine.rs +26 -13
  136. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/transition_coverage.rs +1 -2
  137. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/update_state_machine.rs +19 -13
  138. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +20 -18
  139. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
  140. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines.rs +61 -70
  141. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_task_state_machine.rs +13 -15
  142. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/managed_run.rs +55 -37
  143. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/mod.rs +166 -60
  144. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/run_cache.rs +10 -7
  145. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_extraction.rs +4 -2
  146. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_poller.rs +15 -4
  147. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/workflow_stream.rs +30 -16
  148. package/sdk-core/{tests → crates/sdk-core/tests}/c_bridge_smoke_test.c +1 -1
  149. package/sdk-core/{tests → crates/sdk-core/tests}/cloud_tests.rs +1 -1
  150. package/sdk-core/crates/sdk-core/tests/common/fake_grpc_server.rs +106 -0
  151. package/sdk-core/{tests → crates/sdk-core/tests}/common/http_proxy.rs +1 -1
  152. package/sdk-core/{tests → crates/sdk-core/tests}/common/mod.rs +93 -74
  153. package/sdk-core/{tests → crates/sdk-core/tests}/common/workflows.rs +4 -3
  154. package/sdk-core/crates/sdk-core/tests/fsm_procmacro.rs +6 -0
  155. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dupe_transitions_fail.rs +1 -3
  156. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/dupe_transitions_fail.stderr +12 -0
  157. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dynamic_dest_pass.rs +2 -4
  158. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.rs +1 -3
  159. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.stderr +4 -4
  160. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_arg_pass.rs +2 -4
  161. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_pass.rs +2 -4
  162. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/medium_complex_pass.rs +2 -4
  163. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/no_handle_conversions_require_into_fail.rs +2 -4
  164. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/no_handle_conversions_require_into_fail.stderr +15 -0
  165. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/simple_pass.rs +2 -4
  166. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/struct_event_variant_fail.rs +1 -3
  167. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/struct_event_variant_fail.stderr +5 -0
  168. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_more_item_event_variant_fail.rs +1 -3
  169. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  170. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_zero_item_event_variant_fail.rs +1 -3
  171. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  172. package/sdk-core/{tests → crates/sdk-core/tests}/global_metric_tests.rs +14 -15
  173. package/sdk-core/{tests → crates/sdk-core/tests/heavy_tests}/fuzzy_workflow.rs +3 -3
  174. package/sdk-core/{tests → crates/sdk-core/tests}/heavy_tests.rs +19 -12
  175. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/activity_functions.rs +1 -1
  176. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/client_tests.rs +16 -111
  177. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/ephemeral_server_tests.rs +5 -6
  178. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/heartbeat_tests.rs +23 -19
  179. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/metrics_tests.rs +134 -60
  180. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/pagination_tests.rs +4 -4
  181. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/polling_tests.rs +37 -36
  182. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/queries_tests.rs +12 -10
  183. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/update_tests.rs +41 -29
  184. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/visibility_tests.rs +24 -19
  185. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +1061 -0
  186. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/worker_tests.rs +113 -51
  187. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/worker_versioning_tests.rs +19 -17
  188. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/activities.rs +35 -30
  189. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/appdata_propagation.rs +3 -3
  190. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/cancel_external.rs +14 -9
  191. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/cancel_wf.rs +13 -8
  192. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/child_workflows.rs +48 -35
  193. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/continue_as_new.rs +14 -9
  194. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/determinism.rs +24 -15
  195. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/eager.rs +9 -4
  196. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/local_activities.rs +47 -47
  197. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/modify_wf_properties.rs +16 -11
  198. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/nexus.rs +51 -23
  199. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/patches.rs +22 -10
  200. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/replay.rs +19 -17
  201. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/resets.rs +14 -5
  202. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/signals.rs +24 -15
  203. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/stickyness.rs +8 -6
  204. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/timers.rs +28 -18
  205. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/upsert_search_attrs.rs +18 -13
  206. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests.rs +46 -41
  207. package/sdk-core/{tests → crates/sdk-core/tests}/main.rs +15 -9
  208. package/sdk-core/{tests → crates/sdk-core/tests}/manual_tests.rs +20 -14
  209. package/sdk-core/{tests → crates/sdk-core/tests}/runner.rs +2 -2
  210. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/mod.rs +10 -5
  211. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/priority.rs +5 -5
  212. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/Cargo.toml +13 -10
  213. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/include/temporal-sdk-core-c-bridge.h +32 -23
  214. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/client.rs +55 -32
  215. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/envconfig.rs +1 -1
  216. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/lib.rs +1 -1
  217. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/metric.rs +1 -1
  218. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/runtime.rs +24 -9
  219. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/testing.rs +1 -1
  220. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/context.rs +11 -10
  221. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/mod.rs +7 -7
  222. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/utils.rs +3 -4
  223. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/worker.rs +111 -58
  224. package/sdk-core/docker-cgroup-tests.sh +24 -0
  225. package/sdk-core/{docker → etc/docker}/docker-compose-ci.yaml +9 -9
  226. package/sdk-core/{docker → etc/docker}/docker-compose-telem.yaml +11 -11
  227. package/sdk-core/{docker → etc/docker}/docker-compose.yaml +8 -8
  228. package/sdk-core/{integ-with-otel.sh → etc/integ-with-otel.sh} +1 -1
  229. package/sdk-core/etc/regen-depgraph.sh +2 -2
  230. package/src/client.rs +24 -33
  231. package/src/helpers/try_from_js.rs +1 -1
  232. package/src/logs.rs +1 -1
  233. package/src/metrics.rs +3 -3
  234. package/src/runtime.rs +42 -28
  235. package/src/testing.rs +3 -3
  236. package/src/worker.rs +70 -36
  237. package/ts/native.ts +13 -6
  238. package/LICENSE.md +0 -23
  239. package/sdk-core/client/src/worker_registry/mod.rs +0 -282
  240. package/sdk-core/core/src/worker/heartbeat.rs +0 -230
  241. package/sdk-core/core/src/worker/mod.rs +0 -990
  242. package/sdk-core/etc/deps.svg +0 -162
  243. package/sdk-core/fsm/Cargo.toml +0 -21
  244. package/sdk-core/fsm/README.md +0 -3
  245. package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  246. package/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -21
  247. package/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  248. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  249. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -15
  250. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  251. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  252. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  253. package/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  254. package/sdk-core/fsm/src/lib.rs +0 -2
  255. package/sdk-core/sdk-core-protos/Cargo.toml +0 -37
  256. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +0 -1
  257. /package/sdk-core/{client → crates/client}/src/callback_based.rs +0 -0
  258. /package/sdk-core/{client → crates/client}/src/proxy.rs +0 -0
  259. /package/sdk-core/{client → crates/client}/src/replaceable.rs +0 -0
  260. /package/sdk-core/{sdk-core-protos → crates/common}/build.rs +0 -0
  261. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/build.yaml +0 -0
  262. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/push-to-buf.yml +0 -0
  263. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/CODEOWNERS +0 -0
  264. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/LICENSE +0 -0
  265. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/Makefile +0 -0
  266. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/README.md +0 -0
  267. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.gen.yaml +0 -0
  268. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.lock +0 -0
  269. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.yaml +0 -0
  270. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/connectivityrule/v1/message.proto +0 -0
  271. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +0 -0
  272. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +0 -0
  273. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/nexus/v1/message.proto +0 -0
  274. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/region/v1/message.proto +0 -0
  275. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/resource/v1/message.proto +0 -0
  276. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/usage/v1/message.proto +0 -0
  277. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/CODEOWNERS +0 -0
  278. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  279. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/ci.yml +0 -0
  280. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/publish-docs.yml +0 -0
  281. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/push-to-buf.yml +0 -0
  282. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-delete-release.yml +0 -0
  283. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-publish-release.yml +0 -0
  284. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-update.yml +0 -0
  285. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/LICENSE +0 -0
  286. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/Makefile +0 -0
  287. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/README.md +0 -0
  288. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/api-linter.yaml +0 -0
  289. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.gen.yaml +0 -0
  290. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.lock +0 -0
  291. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.yaml +0 -0
  292. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/annotations.proto +0 -0
  293. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/http.proto +0 -0
  294. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/any.proto +0 -0
  295. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/descriptor.proto +0 -0
  296. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/duration.proto +0 -0
  297. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/empty.proto +0 -0
  298. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/struct.proto +0 -0
  299. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/timestamp.proto +0 -0
  300. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/wrappers.proto +0 -0
  301. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv2.json +0 -0
  302. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv3.yaml +0 -0
  303. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/payload_description.txt +0 -0
  304. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/activity/v1/message.proto +0 -0
  305. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -0
  306. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/command/v1/message.proto +0 -0
  307. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/common/v1/message.proto +0 -0
  308. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/deployment/v1/message.proto +0 -0
  309. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -0
  310. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -0
  311. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -0
  312. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/deployment.proto +0 -0
  313. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -0
  314. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -0
  315. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -0
  316. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/nexus.proto +0 -0
  317. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -0
  318. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -0
  319. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -0
  320. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -0
  321. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -0
  322. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -0
  323. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -0
  324. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/export/v1/message.proto +0 -0
  325. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -0
  326. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -0
  327. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/history/v1/message.proto +0 -0
  328. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -0
  329. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/nexus/v1/message.proto +0 -0
  330. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -0
  331. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -0
  332. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -0
  333. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/query/v1/message.proto +0 -0
  334. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -0
  335. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/rules/v1/message.proto +0 -0
  336. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -0
  337. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/enhanced_stack_trace.proto +0 -0
  338. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -0
  339. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/user_metadata.proto +0 -0
  340. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/worker_config.proto +0 -0
  341. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/workflow_metadata.proto +0 -0
  342. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -0
  343. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/update/v1/message.proto +0 -0
  344. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/version/v1/message.proto +0 -0
  345. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/worker/v1/message.proto +0 -0
  346. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -0
  347. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -0
  348. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -0
  349. /package/sdk-core/{sdk-core-protos → crates/common}/protos/google/rpc/status.proto +0 -0
  350. /package/sdk-core/{sdk-core-protos → crates/common}/protos/grpc/health/v1/health.proto +0 -0
  351. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -0
  352. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -0
  353. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -0
  354. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/common/common.proto +0 -0
  355. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/core_interface.proto +0 -0
  356. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -0
  357. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/nexus/nexus.proto +0 -0
  358. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -0
  359. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -0
  360. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -0
  361. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/Makefile +0 -0
  362. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/api-linter.yaml +0 -0
  363. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/buf.yaml +0 -0
  364. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -0
  365. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -0
  366. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/constants.rs +0 -0
  367. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/task_token.rs +0 -0
  368. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/utilities.rs +0 -0
  369. /package/sdk-core/{fsm → crates/macros}/LICENSE.txt +0 -0
  370. /package/sdk-core/{sdk → crates/sdk}/src/app_data.rs +0 -0
  371. /package/sdk-core/{core → crates/sdk-core}/src/abstractions/take_cell.rs +0 -0
  372. /package/sdk-core/{core → crates/sdk-core}/src/test_help/mod.rs +0 -0
  373. /package/sdk-core/{core → crates/sdk-core}/src/worker/slot_supplier.rs +0 -0
  374. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/ends_empty_wft_complete.bin +0 -0
  375. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-16_history.bin +0 -0
  376. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-23_history.bin +0 -0
  377. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-85_history.bin +0 -0
  378. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/fail_wf_task.bin +0 -0
  379. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-0_history.bin +0 -0
  380. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-1_history.bin +0 -0
  381. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-2_history.bin +0 -0
  382. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-3_history.bin +0 -0
  383. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/old_change_marker_format.bin +0 -0
  384. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/timer_workflow_history.bin +0 -0
  385. /package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/priority.rs +0 -0
  386. /package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/build.rs +0 -0
  387. /package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/random.rs +0 -0
  388. /package/sdk-core/{cargo-tokio-console.sh → etc/cargo-tokio-console.sh} +0 -0
@@ -23,7 +23,11 @@ use crate::{
23
23
  internal_flags::InternalFlags,
24
24
  pollers::TrackedPermittedTqResp,
25
25
  protosext::{ValidPollWFTQResponse, protocol_messages::IncomingProtocolMessage},
26
- telemetry::{TelemetryInstance, VecDisplayer, set_trace_subscriber_for_current_thread},
26
+ telemetry::{
27
+ VecDisplayer,
28
+ metrics::{self, FailureReason},
29
+ set_trace_subscriber_for_current_thread,
30
+ },
27
31
  worker::{
28
32
  LocalActRequest, LocalActivityExecutionResult, LocalActivityResolution,
29
33
  PostActivateHookData,
@@ -31,6 +35,7 @@ use crate::{
31
35
  client::{LegacyQueryResult, WorkerClient, WorkflowTaskCompletion},
32
36
  workflow::{
33
37
  history_update::HistoryPaginator,
38
+ machines::MachineError,
34
39
  managed_run::RunUpdateAct,
35
40
  wft_extraction::{HistoryFetchReq, WFTExtractor, WFTStreamIn},
36
41
  wft_poller::validate_wft,
@@ -42,7 +47,6 @@ use anyhow::anyhow;
42
47
  use futures_util::{Stream, StreamExt, future::abortable, stream, stream::BoxStream};
43
48
  use itertools::Itertools;
44
49
  use prost_types::TimestampError;
45
- use rustfsm::MachineError;
46
50
  use std::{
47
51
  cell::RefCell,
48
52
  collections::VecDeque,
@@ -55,35 +59,36 @@ use std::{
55
59
  thread,
56
60
  time::{Duration, Instant},
57
61
  };
58
- use temporal_client::MESSAGE_TOO_LARGE_KEY;
59
- use temporal_sdk_core_api::{
62
+ use temporalio_client::MESSAGE_TOO_LARGE_KEY;
63
+ use temporalio_common::{
60
64
  errors::{CompleteWfError, PollError},
61
- worker::{ActivitySlotKind, WorkerConfig, WorkflowSlotKind},
62
- };
63
- use temporal_sdk_core_protos::{
64
- TaskToken,
65
- coresdk::{
66
- workflow_activation::{
67
- QueryWorkflow, WorkflowActivation, WorkflowActivationJob,
68
- remove_from_cache::EvictionReason, workflow_activation_job,
65
+ protos::{
66
+ TaskToken,
67
+ coresdk::{
68
+ workflow_activation::{
69
+ QueryWorkflow, WorkflowActivation, WorkflowActivationJob,
70
+ remove_from_cache::EvictionReason, workflow_activation_job,
71
+ },
72
+ workflow_commands::*,
73
+ workflow_completion::{
74
+ self, Failure, WorkflowActivationCompletion, workflow_activation_completion,
75
+ },
69
76
  },
70
- workflow_commands::*,
71
- workflow_completion,
72
- workflow_completion::{
73
- Failure, WorkflowActivationCompletion, workflow_activation_completion,
77
+ temporal::api::{
78
+ command::v1::{Command as ProtoCommand, Command, command::Attributes},
79
+ common::v1::{
80
+ Memo, MeteringMetadata, RetryPolicy, SearchAttributes, WorkflowExecution,
81
+ },
82
+ enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
83
+ failure::v1::{ApplicationFailureInfo, failure::FailureInfo},
84
+ protocol::v1::Message as ProtocolMessage,
85
+ query::v1::WorkflowQuery,
86
+ sdk::v1::{UserMetadata, WorkflowTaskCompletedMetadata},
87
+ taskqueue::v1::StickyExecutionAttributes,
88
+ workflowservice::v1::{PollActivityTaskQueueResponse, get_system_info_response},
74
89
  },
75
90
  },
76
- temporal::api::{
77
- command::v1::{Command as ProtoCommand, Command, command::Attributes},
78
- common::v1::{Memo, MeteringMetadata, RetryPolicy, SearchAttributes, WorkflowExecution},
79
- enums::v1::{VersioningBehavior, WorkflowTaskFailedCause},
80
- failure::v1::{ApplicationFailureInfo, failure::FailureInfo},
81
- protocol::v1::Message as ProtocolMessage,
82
- query::v1::WorkflowQuery,
83
- sdk::v1::{UserMetadata, WorkflowTaskCompletedMetadata},
84
- taskqueue::v1::StickyExecutionAttributes,
85
- workflowservice::v1::{PollActivityTaskQueueResponse, get_system_info_response},
86
- },
91
+ worker::{ActivitySlotKind, WorkerConfig, WorkflowSlotKind},
87
92
  };
88
93
  use tokio::{
89
94
  sync::{
@@ -93,8 +98,9 @@ use tokio::{
93
98
  task::{LocalSet, spawn_blocking},
94
99
  };
95
100
  use tokio_stream::wrappers::UnboundedReceiverStream;
101
+ use tokio_util::either::Either;
96
102
  use tokio_util::sync::CancellationToken;
97
- use tracing::Span;
103
+ use tracing::{Span, Subscriber};
98
104
 
99
105
  /// Id used by server for "legacy" queries. IE: Queries that come in the `query` rather than
100
106
  /// `queries` field of a WFT, and are responded to on the separate `respond_query_task_completed`
@@ -128,9 +134,10 @@ pub(crate) struct Workflows {
128
134
  activity_tasks_handle: Option<ActivitiesFromWFTsHandle>,
129
135
  /// Ensures we stay at or below this worker's maximum concurrent workflow task limit
130
136
  wft_semaphore: MeteredPermitDealer<WorkflowSlotKind>,
131
- local_act_mgr: Arc<LocalActivityManager>,
137
+ local_act_mgr: Option<Arc<LocalActivityManager>>,
132
138
  ever_polled: AtomicBool,
133
139
  default_versioning_behavior: Option<VersioningBehavior>,
140
+ metrics: MetricsContext,
134
141
  }
135
142
 
136
143
  pub(crate) struct WorkflowBasics {
@@ -163,16 +170,17 @@ impl Workflows {
163
170
  client: Arc<dyn WorkerClient>,
164
171
  wft_semaphore: MeteredPermitDealer<WorkflowSlotKind>,
165
172
  wft_stream: impl Stream<Item = WFTStreamIn> + Send + 'static,
166
- local_activity_request_sink: impl LocalActivityRequestSink,
167
- local_act_mgr: Arc<LocalActivityManager>,
168
- heartbeat_timeout_rx: UnboundedReceiver<HeartbeatTimeoutMsg>,
173
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
174
+ local_act_mgr: Option<Arc<LocalActivityManager>>,
175
+ heartbeat_timeout_rx: Option<UnboundedReceiver<HeartbeatTimeoutMsg>>,
169
176
  activity_tasks_handle: Option<ActivitiesFromWFTsHandle>,
170
- telem_instance: Option<&TelemetryInstance>,
177
+ tracing_sub: Option<Arc<dyn Subscriber + Send + Sync>>,
171
178
  ) -> Self {
172
179
  let (local_tx, local_rx) = unbounded_channel();
173
180
  let (fetch_tx, fetch_rx) = unbounded_channel();
174
181
  let shutdown_tok = basics.shutdown_token.clone();
175
182
  let task_queue = basics.worker_config.task_queue.clone();
183
+ let metrics = basics.metrics.clone();
176
184
  let default_versioning_behavior = basics.default_versioning_behavior;
177
185
  let extracted_wft_stream = WFTExtractor::build(
178
186
  client.clone(),
@@ -180,15 +188,18 @@ impl Workflows {
180
188
  wft_stream,
181
189
  UnboundedReceiverStream::new(fetch_rx),
182
190
  );
183
- let locals_stream = stream::select(
184
- UnboundedReceiverStream::new(local_rx),
185
- UnboundedReceiverStream::new(heartbeat_timeout_rx).map(Into::into),
186
- );
191
+ let locals_stream = if let Some(hb_rx) = heartbeat_timeout_rx {
192
+ Either::Left(stream::select(
193
+ UnboundedReceiverStream::new(local_rx),
194
+ UnboundedReceiverStream::new(hb_rx).map(Into::into),
195
+ ))
196
+ } else {
197
+ Either::Right(UnboundedReceiverStream::new(local_rx))
198
+ };
187
199
  let (activation_tx, activation_rx) = unbounded_channel();
188
200
  let (start_polling_tx, start_polling_rx) = oneshot::channel();
189
201
  // We must spawn a task to constantly poll the activation stream, because otherwise
190
202
  // activation completions would not cause anything to happen until the next poll.
191
- let tracing_sub = telem_instance.and_then(|ti| ti.trace_subscriber());
192
203
  let processing_task = thread::Builder::new()
193
204
  .name("workflow-processing".to_string())
194
205
  .spawn(move || {
@@ -201,13 +212,6 @@ impl Workflows {
201
212
  .unwrap();
202
213
  let local = LocalSet::new();
203
214
  local.block_on(&rt, async move {
204
- let mut stream = WFStream::build(
205
- basics,
206
- extracted_wft_stream,
207
- locals_stream,
208
- local_activity_request_sink,
209
- );
210
-
211
215
  // However, we want to avoid plowing ahead until we've been asked to poll at
212
216
  // least once. This supports activity-only workers.
213
217
  let do_poll = tokio::select! {
@@ -221,6 +225,14 @@ impl Workflows {
221
225
  if !do_poll {
222
226
  return;
223
227
  }
228
+
229
+ let mut stream = WFStream::build(
230
+ basics,
231
+ extracted_wft_stream,
232
+ locals_stream,
233
+ local_activity_request_sink,
234
+ );
235
+
224
236
  while let Some(output) = stream.next().await {
225
237
  match output {
226
238
  Ok(o) => {
@@ -260,6 +272,7 @@ impl Workflows {
260
272
  local_act_mgr,
261
273
  ever_polled: AtomicBool::new(false),
262
274
  default_versioning_behavior,
275
+ metrics,
263
276
  }
264
277
  }
265
278
 
@@ -340,18 +353,25 @@ impl Workflows {
340
353
  force_new_wft,
341
354
  sdk_metadata,
342
355
  mut versioning_behavior,
356
+ attempt,
343
357
  },
344
358
  } => {
345
359
  let reserved_act_permits =
346
360
  self.reserve_activity_slots_for_outgoing_commands(commands.as_mut_slice());
347
361
  debug!(commands=%commands.display(), query_responses=%query_responses.display(),
348
- messages=%messages.display(), force_new_wft,
349
- "Sending responses to server");
362
+ messages=%messages.display(), force_new_wft,
363
+ "Sending responses to server");
350
364
  if let Some(default_vb) = self.default_versioning_behavior.as_ref()
351
365
  && versioning_behavior == VersioningBehavior::Unspecified
352
366
  {
353
367
  versioning_behavior = *default_vb;
354
368
  }
369
+ let nonfirst_local_activity_execution_attempts =
370
+ if let Some(ref la_mgr) = self.local_act_mgr {
371
+ la_mgr.get_nonfirst_attempt_count(run_id) as u32
372
+ } else {
373
+ 0
374
+ };
355
375
  let mut completion = WorkflowTaskCompletion {
356
376
  task_token: task_token.clone(),
357
377
  commands,
@@ -362,10 +382,7 @@ impl Workflows {
362
382
  force_create_new_workflow_task: force_new_wft,
363
383
  sdk_metadata,
364
384
  metering_metadata: MeteringMetadata {
365
- nonfirst_local_activity_execution_attempts: self
366
- .local_act_mgr
367
- .get_nonfirst_attempt_count(run_id)
368
- as u32,
385
+ nonfirst_local_activity_execution_attempts,
369
386
  },
370
387
  versioning_behavior,
371
388
  };
@@ -392,10 +409,14 @@ impl Workflows {
392
409
  response.activity_tasks,
393
410
  );
394
411
  }
395
- Err(e) if e.metadata().contains_key(MESSAGE_TOO_LARGE_KEY) => {
412
+ // Reply with a task failure if we got grpc too large from server, but
413
+ // not if this is a nonfirst attempt to avoid spamming.
414
+ Err(e)
415
+ if e.metadata().contains_key(MESSAGE_TOO_LARGE_KEY) && attempt < 2 =>
416
+ {
396
417
  let failure = Failure {
397
418
  failure: Some(
398
- temporal_sdk_core_protos::temporal::api::failure::v1::Failure {
419
+ temporalio_common::protos::temporal::api::failure::v1::Failure {
399
420
  message: "GRPC Message too large".to_string(),
400
421
  failure_info: Some(FailureInfo::ApplicationFailureInfo(
401
422
  ApplicationFailureInfo {
@@ -416,6 +437,12 @@ impl Workflows {
416
437
  );
417
438
  self.handle_activation_failed(run_id, completion_time, new_outcome)
418
439
  .await;
440
+ self.metrics
441
+ .with_new_attrs([metrics::failure_reason(
442
+ FailureReason::GrpcMessageTooLarge,
443
+ )])
444
+ .wf_task_failed();
445
+ return Err(e);
419
446
  }
420
447
  e => {
421
448
  e?;
@@ -618,6 +645,12 @@ impl Workflows {
618
645
  rx
619
646
  }
620
647
 
648
+ /// Send a `BumpStream` message to the workflow stream. This ensures that any pending
649
+ /// workflow activation polls will resolve, like during shutdown, even if there are no other inputs.
650
+ pub(super) fn bump_stream(&self) {
651
+ self.send_local(LocalInputs::BumpStream);
652
+ }
653
+
621
654
  /// Query the state of workflow management. Can return `None` if workflow state is shut down.
622
655
  pub(super) fn get_state_info(&self) -> impl Future<Output = Option<WorkflowStateInfo>> {
623
656
  let rx = self.send_get_state_info_msg();
@@ -640,7 +673,7 @@ impl Workflows {
640
673
  let mut interval = tokio::time::interval(Duration::from_millis(10));
641
674
  loop {
642
675
  interval.tick().await;
643
- let _ = self.get_state_info().await;
676
+ self.bump_stream();
644
677
  }
645
678
  });
646
679
  let (_, jh_res) = tokio::join!(
@@ -703,7 +736,7 @@ impl Workflows {
703
736
  fn send_local(&self, msg: impl Into<LocalInputs>) -> bool {
704
737
  let msg = msg.into();
705
738
  let print_err = match &msg {
706
- LocalInputs::GetStateInfo(_) => false,
739
+ LocalInputs::GetStateInfo(_) | LocalInputs::BumpStream => false,
707
740
  LocalInputs::LocalResolution(lr) if lr.res.is_la_cancel_confirmation() => false,
708
741
  _ => true,
709
742
  };
@@ -991,6 +1024,7 @@ pub(crate) enum ActivationAction {
991
1024
  force_new_wft: bool,
992
1025
  sdk_metadata: WorkflowTaskCompletedMetadata,
993
1026
  versioning_behavior: VersioningBehavior,
1027
+ attempt: u32,
994
1028
  },
995
1029
  /// We should respond to a legacy query request
996
1030
  RespondLegacyQuery { result: Box<QueryResult> },
@@ -1418,7 +1452,79 @@ pub(crate) enum WFMachinesError {
1418
1452
  Fatal(String),
1419
1453
  }
1420
1454
 
1455
+ /// Helper macro to create Nondeterminism errors with automatic assertion
1456
+ ///
1457
+ /// Usage: `nondeterminism!("Activity id mismatch: {} vs {}", id1, id2)`
1458
+ macro_rules! nondeterminism {
1459
+ ($($arg:tt)*) => {{
1460
+ let msg = format!($($arg)*);
1461
+ #[cfg(feature = "antithesis_assertions")]
1462
+ $crate::antithesis::assert_unreachable!(
1463
+ "Nondeterminism error detected",
1464
+ ::serde_json::json!({
1465
+ "error_message": &msg,
1466
+ "error_type": "Nondeterminism",
1467
+ "location": format!("{}:{}", file!(), line!())
1468
+ })
1469
+ );
1470
+ WFMachinesError::Nondeterminism(msg)
1471
+ }};
1472
+ }
1473
+ pub(crate) use nondeterminism;
1474
+
1475
+ /// Helper macro to create Fatal errors with automatic assertion
1476
+ ///
1477
+ /// Usage: `fatal!("Invalid state transition: {:?}", state)`
1478
+ macro_rules! fatal {
1479
+ ($($arg:tt)*) => {{
1480
+ let msg = format!($($arg)*);
1481
+ #[cfg(feature = "antithesis_assertions")]
1482
+ $crate::antithesis::assert_unreachable!(
1483
+ "Fatal error detected",
1484
+ ::serde_json::json!({
1485
+ "error_message": &msg,
1486
+ "error_type": "Fatal",
1487
+ "location": format!("{}:{}", file!(), line!())
1488
+ })
1489
+ );
1490
+ WFMachinesError::Fatal(msg)
1491
+ }};
1492
+ }
1493
+ pub(crate) use fatal;
1494
+
1421
1495
  impl WFMachinesError {
1496
+ /// Create a new Nondeterminism error with assertion instrumentation
1497
+ pub(crate) fn nondeterminism(message: impl Into<String>) -> Self {
1498
+ let msg = message.into();
1499
+
1500
+ #[cfg(feature = "antithesis_assertions")]
1501
+ crate::antithesis::assert_unreachable!(
1502
+ "Nondeterminism error detected",
1503
+ ::serde_json::json!({
1504
+ "error_message": msg,
1505
+ "error_type": "Nondeterminism"
1506
+ })
1507
+ );
1508
+
1509
+ WFMachinesError::Nondeterminism(msg)
1510
+ }
1511
+
1512
+ /// Create a new Fatal error with assertion instrumentation
1513
+ pub(crate) fn fatal(message: impl Into<String>) -> Self {
1514
+ let msg = message.into();
1515
+
1516
+ #[cfg(feature = "antithesis_assertions")]
1517
+ crate::antithesis::assert_unreachable!(
1518
+ "Fatal error detected",
1519
+ ::serde_json::json!({
1520
+ "error_message": msg,
1521
+ "error_type": "Fatal"
1522
+ })
1523
+ );
1524
+
1525
+ WFMachinesError::Fatal(msg)
1526
+ }
1527
+
1422
1528
  fn evict_reason(&self) -> EvictionReason {
1423
1529
  match self {
1424
1530
  WFMachinesError::Nondeterminism(_) => EvictionReason::Nondeterminism,
@@ -1429,7 +1535,7 @@ impl WFMachinesError {
1429
1535
  fn as_failure(&self) -> Failure {
1430
1536
  Failure {
1431
1537
  failure: Some(
1432
- temporal_sdk_core_protos::temporal::api::failure::v1::Failure::application_failure(
1538
+ temporalio_common::protos::temporal::api::failure::v1::Failure::application_failure(
1433
1539
  self.to_string(),
1434
1540
  false,
1435
1541
  ),
@@ -1444,7 +1550,7 @@ impl From<MachineError<WFMachinesError>> for WFMachinesError {
1444
1550
  match v {
1445
1551
  MachineError::InvalidTransition => {
1446
1552
  // TODO: Get states back
1447
- WFMachinesError::Nondeterminism("Invalid transition in state machine".to_string())
1553
+ WFMachinesError::nondeterminism("Invalid transition in state machine")
1448
1554
  }
1449
1555
  MachineError::Underlying(e) => e,
1450
1556
  }
@@ -1453,13 +1559,13 @@ impl From<MachineError<WFMachinesError>> for WFMachinesError {
1453
1559
 
1454
1560
  impl From<TimestampError> for WFMachinesError {
1455
1561
  fn from(_: TimestampError) -> Self {
1456
- Self::Fatal("Could not decode timestamp".to_string())
1562
+ Self::fatal("Could not decode timestamp")
1457
1563
  }
1458
1564
  }
1459
1565
 
1460
1566
  impl From<anyhow::Error> for WFMachinesError {
1461
1567
  fn from(value: anyhow::Error) -> Self {
1462
- WFMachinesError::Fatal(value.to_string())
1568
+ WFMachinesError::fatal(value.to_string())
1463
1569
  }
1464
1570
  }
1465
1571
 
@@ -1547,7 +1653,7 @@ fn prepare_to_ship_activation(wfa: &mut WorkflowActivation) {
1547
1653
  mod tests {
1548
1654
  use super::*;
1549
1655
  use itertools::Itertools;
1550
- use temporal_sdk_core_protos::coresdk::workflow_activation::SignalWorkflow;
1656
+ use temporalio_common::protos::coresdk::workflow_activation::SignalWorkflow;
1551
1657
 
1552
1658
  #[test]
1553
1659
  fn jobs_sort() {
@@ -8,10 +8,12 @@ use crate::{
8
8
  };
9
9
  use lru::LruCache;
10
10
  use std::{num::NonZeroUsize, rc::Rc, sync::Arc};
11
- use temporal_sdk_core_api::worker::WorkerConfig;
12
- use temporal_sdk_core_protos::{
13
- coresdk::workflow_activation::remove_from_cache::EvictionReason,
14
- temporal::api::workflowservice::v1::get_system_info_response,
11
+ use temporalio_common::{
12
+ protos::{
13
+ coresdk::workflow_activation::remove_from_cache::EvictionReason,
14
+ temporal::api::workflowservice::v1::get_system_info_response,
15
+ },
16
+ worker::WorkerConfig,
15
17
  };
16
18
 
17
19
  pub(super) struct RunCache {
@@ -20,7 +22,7 @@ pub(super) struct RunCache {
20
22
  server_capabilities: get_system_info_response::Capabilities,
21
23
  /// Run id -> Data
22
24
  runs: LruCache<String, ManagedRun>,
23
- local_activity_request_sink: Rc<dyn LocalActivityRequestSink>,
25
+ local_activity_request_sink: Option<Rc<dyn LocalActivityRequestSink>>,
24
26
 
25
27
  metrics: MetricsContext,
26
28
  }
@@ -30,7 +32,7 @@ impl RunCache {
30
32
  worker_config: Arc<WorkerConfig>,
31
33
  sdk_name_and_version: (String, String),
32
34
  server_capabilities: get_system_info_response::Capabilities,
33
- local_activity_request_sink: impl LocalActivityRequestSink,
35
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
34
36
  metrics: MetricsContext,
35
37
  ) -> Self {
36
38
  // The cache needs room for at least one run, otherwise we couldn't do anything. In
@@ -47,7 +49,8 @@ impl RunCache {
47
49
  runs: LruCache::new(
48
50
  NonZeroUsize::new(lru_size).expect("LRU size is guaranteed positive"),
49
51
  ),
50
- local_activity_request_sink: Rc::new(local_activity_request_sink),
52
+ local_activity_request_sink: local_activity_request_sink
53
+ .map(|s| Rc::new(s) as Rc<dyn LocalActivityRequestSink>),
51
54
  metrics,
52
55
  }
53
56
  }
@@ -11,8 +11,10 @@ use crate::{
11
11
  };
12
12
  use futures_util::{FutureExt, Stream, StreamExt, stream, stream::PollNext};
13
13
  use std::{future, sync::Arc};
14
- use temporal_sdk_core_api::worker::WorkflowSlotKind;
15
- use temporal_sdk_core_protos::{TaskToken, coresdk::WorkflowSlotInfo};
14
+ use temporalio_common::{
15
+ protos::{TaskToken, coresdk::WorkflowSlotInfo},
16
+ worker::WorkflowSlotKind,
17
+ };
16
18
  use tracing::Span;
17
19
 
18
20
  /// Transforms incoming validated WFTs and history fetching requests into [PermittedWFT]s ready
@@ -6,13 +6,20 @@ use crate::{
6
6
  telemetry::metrics::{workflow_poller, workflow_sticky_poller},
7
7
  worker::{client::WorkerClient, wft_poller_behavior},
8
8
  };
9
+ use crossbeam_utils::atomic::AtomicCell;
9
10
  use futures_util::{Stream, stream};
10
- use std::sync::{Arc, OnceLock};
11
- use temporal_sdk_core_api::worker::{WorkerConfig, WorkflowSlotKind};
12
- use temporal_sdk_core_protos::temporal::api::workflowservice::v1::PollWorkflowTaskQueueResponse;
11
+ use std::{
12
+ sync::{Arc, OnceLock},
13
+ time::SystemTime,
14
+ };
15
+ use temporalio_common::{
16
+ protos::temporal::api::workflowservice::v1::PollWorkflowTaskQueueResponse,
17
+ worker::{WorkerConfig, WorkflowSlotKind},
18
+ };
13
19
  use tokio::sync::watch;
14
20
  use tokio_util::sync::CancellationToken;
15
21
 
22
+ #[allow(clippy::too_many_arguments)]
16
23
  pub(crate) fn make_wft_poller(
17
24
  config: &WorkerConfig,
18
25
  sticky_queue_name: &Option<String>,
@@ -20,6 +27,8 @@ pub(crate) fn make_wft_poller(
20
27
  metrics: &MetricsContext,
21
28
  shutdown_token: &CancellationToken,
22
29
  wft_slots: &MeteredPermitDealer<WorkflowSlotKind>,
30
+ last_successful_poll_time: Arc<AtomicCell<Option<SystemTime>>>,
31
+ sticky_last_successful_poll_time: Arc<AtomicCell<Option<SystemTime>>>,
23
32
  ) -> impl Stream<
24
33
  Item = Result<
25
34
  (
@@ -52,6 +61,7 @@ pub(crate) fn make_wft_poller(
52
61
  WorkflowTaskOptions {
53
62
  wft_poller_shared: wft_poller_shared.clone(),
54
63
  },
64
+ last_successful_poll_time,
55
65
  );
56
66
  let sticky_queue_poller = sticky_queue_name.as_ref().map(|sqn| {
57
67
  let sticky_metrics = metrics.with_new_attrs([workflow_sticky_poller()]);
@@ -66,6 +76,7 @@ pub(crate) fn make_wft_poller(
66
76
  sticky_metrics.record_num_pollers(np);
67
77
  }),
68
78
  WorkflowTaskOptions { wft_poller_shared },
79
+ sticky_last_successful_poll_time,
69
80
  )
70
81
  });
71
82
  let wf_task_poll_buffer = Box::new(WorkflowTaskPoller::new(
@@ -251,7 +262,7 @@ mod tests {
251
262
  };
252
263
  use futures_util::{StreamExt, pin_mut};
253
264
  use std::sync::Arc;
254
- use temporal_sdk_core_api::worker::WorkflowSlotKind;
265
+ use temporalio_common::worker::WorkflowSlotKind;
255
266
 
256
267
  #[tokio::test]
257
268
  async fn poll_timeouts_do_not_produce_responses() {
@@ -10,8 +10,9 @@ use crate::{
10
10
  };
11
11
  use futures_util::{Stream, StreamExt, stream, stream::PollNext};
12
12
  use std::{collections::VecDeque, fmt::Debug, future, sync::Arc};
13
- use temporal_sdk_core_api::errors::PollError;
14
- use temporal_sdk_core_protos::coresdk::workflow_activation::remove_from_cache::EvictionReason;
13
+ use temporalio_common::{
14
+ errors::PollError, protos::coresdk::workflow_activation::remove_from_cache::EvictionReason,
15
+ };
15
16
  use tokio_util::sync::CancellationToken;
16
17
  use tracing::{Level, Span};
17
18
 
@@ -63,7 +64,7 @@ impl WFStream {
63
64
  basics: WorkflowBasics,
64
65
  wft_stream: impl Stream<Item = Result<WFTExtractorOutput, tonic::Status>> + Send + 'static,
65
66
  local_rx: impl Stream<Item = LocalInput> + Send + 'static,
66
- local_activity_request_sink: impl LocalActivityRequestSink,
67
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
67
68
  ) -> impl Stream<Item = Result<WFStreamOutput, PollError>> {
68
69
  let all_inputs = stream::select_with_strategy(
69
70
  local_rx.map(Into::into),
@@ -81,7 +82,7 @@ impl WFStream {
81
82
  fn build_internal(
82
83
  all_inputs: impl Stream<Item = WFStreamInput>,
83
84
  basics: WorkflowBasics,
84
- local_activity_request_sink: impl LocalActivityRequestSink,
85
+ local_activity_request_sink: Option<impl LocalActivityRequestSink>,
85
86
  ) -> impl Stream<Item = Result<WFStreamOutput, PollError>> {
86
87
  let mut state = WFStream {
87
88
  buffered_polls_need_cache_slot: Default::default(),
@@ -146,6 +147,11 @@ impl WFStream {
146
147
  });
147
148
  None
148
149
  }
150
+ LocalInputs::BumpStream => {
151
+ // Ensures pending workflow activation polls resolve for
152
+ // scenarios like during shutdown
153
+ None
154
+ }
149
155
  }
150
156
  }
151
157
  WFStreamInput::FailedFetch {
@@ -287,17 +293,24 @@ impl WFStream {
287
293
  failure,
288
294
  is_autocomplete,
289
295
  ..
290
- } => rh.failed_completion(
291
- failure.force_cause(),
292
- if is_autocomplete {
293
- EvictionReason::Unspecified
294
- } else {
295
- EvictionReason::LangFail
296
- },
297
- failure,
298
- is_autocomplete,
299
- complete.response_tx,
300
- ),
296
+ } => {
297
+ let forced_cause = failure.force_cause();
298
+ rh.failed_completion(
299
+ if forced_cause == WorkflowTaskFailedCause::Unspecified {
300
+ WorkflowTaskFailedCause::WorkflowWorkerUnhandledFailure
301
+ } else {
302
+ forced_cause
303
+ },
304
+ if is_autocomplete {
305
+ EvictionReason::Unspecified
306
+ } else {
307
+ EvictionReason::LangFail
308
+ },
309
+ failure,
310
+ is_autocomplete,
311
+ complete.response_tx,
312
+ )
313
+ }
301
314
  },
302
315
  NewOrFetchedComplete::Fetched(update, paginator) => {
303
316
  rh.fetched_page_completion(update, *paginator)
@@ -625,6 +638,7 @@ pub(super) enum LocalInputs {
625
638
  RequestEviction(RequestEvictMsg),
626
639
  HeartbeatTimeout(String),
627
640
  GetStateInfo(GetStateInfoMsg),
641
+ BumpStream,
628
642
  }
629
643
  impl LocalInputs {
630
644
  fn run_id(&self) -> Option<&str> {
@@ -635,7 +649,7 @@ impl LocalInputs {
635
649
  LocalInputs::PostActivation(pa) => &pa.run_id,
636
650
  LocalInputs::RequestEviction(re) => &re.run_id,
637
651
  LocalInputs::HeartbeatTimeout(hb) => hb,
638
- LocalInputs::GetStateInfo(_) => return None,
652
+ LocalInputs::GetStateInfo(_) | LocalInputs::BumpStream => return None,
639
653
  })
640
654
  }
641
655
  }
@@ -7,4 +7,4 @@ int main(void) {
7
7
  temporal_core_cancellation_token_free(tok);
8
8
  printf("C bridge smoke test passed!\n");
9
9
  return 0;
10
- }
10
+ }
@@ -4,7 +4,7 @@ mod common;
4
4
  mod shared_tests;
5
5
 
6
6
  use common::get_cloud_client;
7
- use temporal_client::WorkflowClientTrait;
7
+ use temporalio_client::WorkflowClientTrait;
8
8
 
9
9
  #[tokio::test]
10
10
  async fn tls_test() {