hatchet-sdk 0.7.0 → 0.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3266af1a5777c5440854059fd1862765a09bbff72ad322fcfa35c768ca29dc15
4
- data.tar.gz: eceb7946b36c7018a1b61ce635e3014b8e5ab39fafc3a1517e46b4a299d89acc
3
+ metadata.gz: 2e70af6a8a498aa205cbd60dfeda2777cbdcc66a1b7062605050e2ded013459c
4
+ data.tar.gz: fee0bf38bc650c7c92f1eae39f594732e2433d959a74264ab1f726a4ef9e6dea
5
5
  SHA512:
6
- metadata.gz: 96f70ac193f0fde8dd4616c5dc78548e4296a5cfc89f37d50f71dbbd5737996977f63007e14b7b83641253433d29c24af7283ee3e755211d909965c81fea5ff5
7
- data.tar.gz: 7763183e5e3ff4933b643ea0c9086e8a063b6c885ae3ff981e58598c501541bfe6910b7242745a830947117d92697c5d775e79adbe94799d9752d15e20631eba
6
+ metadata.gz: b0e09fdbad439ad82823517f8e568c71d326c93dca0b20ba14fdfbd7d7fadb43a00456db2b0a05b90b3b8d4f9f0d23dc80ec1489eaeeb70b9198ceb371cb5f46
7
+ data.tar.gz: 382c9b1dd855932d272ed724ab0cc04bb0a58e4251bc0a5f1170aad7ab2955b3c33f6d846cb0ff9d2d9e9f50fdc94b60ab845da950fc5c15f3fcd3e07497bd5d
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to Hatchet's Ruby SDK will be documented in this changelog.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.8.0] - 2026-09-02
9
+
10
+ ### Added
11
+
12
+ - Added support for tenant-scoped shared concurrency strategies: declare a `ConcurrencyExpression` with `is_tenant_scoped: true` and a `name`, and every task declaring the same name (across workflows) consumes the same concurrency limit. Re-declaring a name updates the strategy in place, and tenant-scoped entries mix freely with workflow-scoped entries in one chain.
13
+ - `max_runs` on `ConcurrencyExpression` now accepts an `Integer` or a `String`: a string is a CEL expression over task input computing the max runs for each concurrency group, so different groups (e.g. pricing tiers) can have different limits.
14
+
15
+
8
16
  ## [0.7.0] - 2026-08-26
9
17
 
10
18
  ### Changed
data/README.md CHANGED
@@ -10,6 +10,51 @@
10
10
 
11
11
  This is the official Ruby SDK for [Hatchet](https://hatchet.run), a distributed, fault-tolerant task queue. The SDK allows you to easily integrate Hatchet's task scheduling and workflow orchestration capabilities into your Ruby applications.
12
12
 
13
+ <!-- hatchet-agent-docs:start -->
14
+ <!-- Generated by the SDK docs pipeline from frontend/docs/reference-map.json. Do not edit by hand. -->
15
+
16
+ ## Documentation for agents
17
+
18
+ The linked pages serve plain markdown for tools and agents. Full docs index: https://docs.hatchet.run/llms.txt
19
+
20
+ Setup and local development:
21
+
22
+ - Quickstart: https://docs.hatchet.run/v1/quickstart.md
23
+ - Running Hatchet locally: https://docs.hatchet.run/v1/running-locally.md
24
+
25
+ Core concepts:
26
+
27
+ - Tasks: https://docs.hatchet.run/v1/tasks.md
28
+ - Workers: https://docs.hatchet.run/v1/workers.md
29
+ - Running tasks: https://docs.hatchet.run/v1/running-your-task.md
30
+ - DAGs: https://docs.hatchet.run/v1/directed-acyclic-graphs.md
31
+ - Durable execution: https://docs.hatchet.run/v1/durable-execution.md
32
+
33
+ Flow control:
34
+
35
+ - Concurrency: https://docs.hatchet.run/v1/concurrency.md
36
+ - Rate limits: https://docs.hatchet.run/v1/rate-limits.md
37
+ - Retries: https://docs.hatchet.run/v1/retry-policies.md
38
+ - Idempotency: https://docs.hatchet.run/v1/idempotency.md
39
+ - CEL expressions: https://docs.hatchet.run/v1/cel-expressions.md
40
+
41
+ Ruby SDK reference (overview: https://docs.hatchet.run/reference/ruby.md):
42
+
43
+ - CEL: https://docs.hatchet.run/reference/ruby/feature-clients/cel.md (guide: https://docs.hatchet.run/v1/cel-expressions.md)
44
+ - Crons: https://docs.hatchet.run/reference/ruby/feature-clients/cron.md (guide: https://docs.hatchet.run/v1/cron-runs.md)
45
+ - Events: https://docs.hatchet.run/reference/ruby/feature-clients/events.md (guide: https://docs.hatchet.run/v1/events.md)
46
+ - Filters: https://docs.hatchet.run/reference/ruby/feature-clients/filters.md (guide: https://docs.hatchet.run/v1/events.md)
47
+ - Logs: https://docs.hatchet.run/reference/ruby/feature-clients/logs.md (guide: https://docs.hatchet.run/v1/logging.md)
48
+ - Metrics: https://docs.hatchet.run/reference/ruby/feature-clients/metrics.md (guide: https://docs.hatchet.run/v1/prometheus-metrics.md)
49
+ - Rate Limits: https://docs.hatchet.run/reference/ruby/feature-clients/rate_limits.md (guide: https://docs.hatchet.run/v1/rate-limits.md)
50
+ - Runs: https://docs.hatchet.run/reference/ruby/feature-clients/runs.md (guide: https://docs.hatchet.run/v1/running-your-task.md)
51
+ - Scheduled Runs: https://docs.hatchet.run/reference/ruby/feature-clients/scheduled.md (guide: https://docs.hatchet.run/v1/scheduled-runs.md)
52
+ - Tenant: https://docs.hatchet.run/reference/ruby/feature-clients/tenant.md
53
+ - Workers: https://docs.hatchet.run/reference/ruby/feature-clients/workers.md (guide: https://docs.hatchet.run/v1/workers.md)
54
+ - Workflows: https://docs.hatchet.run/reference/ruby/feature-clients/workflows.md (guide: https://docs.hatchet.run/v1/tasks.md)
55
+
56
+ <!-- hatchet-agent-docs:end -->
57
+
13
58
  ## Installation
14
59
 
15
60
  Add this line to your application's Gemfile:
@@ -98,6 +98,7 @@ module HatchetSdkRest
98
98
  # @option opts [Integer] :limit The number to limit by
99
99
  # @option opts [Array<WorkerStatus>] :statuses Filter by worker status
100
100
  # @option opts [Array<String>] :labels Filter by worker labels
101
+ # @option opts [Boolean] :include_operators Whether to include engine-managed operator workers, which are hidden by default
101
102
  # @return [WorkerList]
102
103
  def worker_list(tenant, opts = {})
103
104
  data, _status_code, _headers = worker_list_with_http_info(tenant, opts)
@@ -112,6 +113,7 @@ module HatchetSdkRest
112
113
  # @option opts [Integer] :limit The number to limit by
113
114
  # @option opts [Array<WorkerStatus>] :statuses Filter by worker status
114
115
  # @option opts [Array<String>] :labels Filter by worker labels
116
+ # @option opts [Boolean] :include_operators Whether to include engine-managed operator workers, which are hidden by default
115
117
  # @return [Array<(WorkerList, Integer, Hash)>] WorkerList data, response status code and response headers
116
118
  def worker_list_with_http_info(tenant, opts = {})
117
119
  if @api_client.config.debugging
@@ -138,6 +140,7 @@ module HatchetSdkRest
138
140
  query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
139
141
  query_params[:'statuses'] = @api_client.build_collection_param(opts[:'statuses'], :multi) if !opts[:'statuses'].nil?
140
142
  query_params[:'labels'] = @api_client.build_collection_param(opts[:'labels'], :multi) if !opts[:'labels'].nil?
143
+ query_params[:'includeOperators'] = opts[:'include_operators'] if !opts[:'include_operators'].nil?
141
144
 
142
145
  # header parameters
143
146
  header_params = opts[:header_params] || {}
@@ -358,6 +358,7 @@ module HatchetSdkRest
358
358
  # Get a workflow run and its metadata to display on the \"detail\" page
359
359
  # @param v1_workflow_run [String] The workflow run id to get
360
360
  # @param [Hash] opts the optional parameters
361
+ # @option opts [Boolean] :include_orchestrator_events Whether to include the DAG orchestrator&#39;s task events, which are hidden by default
361
362
  # @return [V1WorkflowRunDetails]
362
363
  def v1_workflow_run_get(v1_workflow_run, opts = {})
363
364
  data, _status_code, _headers = v1_workflow_run_get_with_http_info(v1_workflow_run, opts)
@@ -368,6 +369,7 @@ module HatchetSdkRest
368
369
  # Get a workflow run and its metadata to display on the \&quot;detail\&quot; page
369
370
  # @param v1_workflow_run [String] The workflow run id to get
370
371
  # @param [Hash] opts the optional parameters
372
+ # @option opts [Boolean] :include_orchestrator_events Whether to include the DAG orchestrator&#39;s task events, which are hidden by default
371
373
  # @return [Array<(V1WorkflowRunDetails, Integer, Hash)>] V1WorkflowRunDetails data, response status code and response headers
372
374
  def v1_workflow_run_get_with_http_info(v1_workflow_run, opts = {})
373
375
  if @api_client.config.debugging
@@ -390,6 +392,7 @@ module HatchetSdkRest
390
392
 
391
393
  # query parameters
392
394
  query_params = opts[:query_params] || {}
395
+ query_params[:'includeOrchestratorEvents'] = opts[:'include_orchestrator_events'] if !opts[:'include_orchestrator_events'].nil?
393
396
 
394
397
  # header parameters
395
398
  header_params = opts[:header_params] || {}
@@ -18,9 +18,10 @@ module HatchetSdkRest
18
18
  TENANT_LOG_WORKFLOW_FILTER_ENABLED = "tenant-log-workflow-filter-enabled".freeze
19
19
  TRACE_MINIMAP_ENABLED = "trace-minimap-enabled".freeze
20
20
  ORGANIZATION_SSO_ENABLED = "organization-sso-enabled".freeze
21
+ OPERATOR_DETAILS_ENABLED = "operator-details-enabled".freeze
21
22
 
22
23
  def self.all_vars
23
- @all_vars ||= [TENANT_LOG_WORKFLOW_FILTER_ENABLED, TRACE_MINIMAP_ENABLED, ORGANIZATION_SSO_ENABLED].freeze
24
+ @all_vars ||= [TENANT_LOG_WORKFLOW_FILTER_ENABLED, TRACE_MINIMAP_ENABLED, ORGANIZATION_SSO_ENABLED, OPERATOR_DETAILS_ENABLED].freeze
24
25
  end
25
26
 
26
27
  # Builds the enum from string
@@ -60,6 +60,12 @@ module HatchetSdkRest
60
60
 
61
61
  attr_accessor :runtime_info
62
62
 
63
+ # The id of the operator that owns this worker, if it is an engine-managed operator worker.
64
+ attr_accessor :operator_id
65
+
66
+ # The number of durable task runs owned by this operator that are currently evicted while waiting on durable events. Evicted runs hold no slots. Only set for operator workers.
67
+ attr_accessor :evicted_durable_task_count
68
+
63
69
  class EnumAttributeValidator
64
70
  attr_reader :datatype
65
71
  attr_reader :allowable_values
@@ -100,7 +106,9 @@ module HatchetSdkRest
100
106
  :'labels' => :'labels',
101
107
  :'webhook_url' => :'webhookUrl',
102
108
  :'webhook_id' => :'webhookId',
103
- :'runtime_info' => :'runtimeInfo'
109
+ :'runtime_info' => :'runtimeInfo',
110
+ :'operator_id' => :'operatorId',
111
+ :'evicted_durable_task_count' => :'evictedDurableTaskCount'
104
112
  }
105
113
  end
106
114
 
@@ -132,7 +140,9 @@ module HatchetSdkRest
132
140
  :'labels' => :'Array<WorkerLabel>',
133
141
  :'webhook_url' => :'String',
134
142
  :'webhook_id' => :'String',
135
- :'runtime_info' => :'WorkerRuntimeInfo'
143
+ :'runtime_info' => :'WorkerRuntimeInfo',
144
+ :'operator_id' => :'String',
145
+ :'evicted_durable_task_count' => :'Integer'
136
146
  }
137
147
  end
138
148
 
@@ -239,6 +249,14 @@ module HatchetSdkRest
239
249
  if attributes.key?(:'runtime_info')
240
250
  self.runtime_info = attributes[:'runtime_info']
241
251
  end
252
+
253
+ if attributes.key?(:'operator_id')
254
+ self.operator_id = attributes[:'operator_id']
255
+ end
256
+
257
+ if attributes.key?(:'evicted_durable_task_count')
258
+ self.evicted_durable_task_count = attributes[:'evicted_durable_task_count']
259
+ end
242
260
  end
243
261
 
244
262
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -349,7 +367,9 @@ module HatchetSdkRest
349
367
  labels == o.labels &&
350
368
  webhook_url == o.webhook_url &&
351
369
  webhook_id == o.webhook_id &&
352
- runtime_info == o.runtime_info
370
+ runtime_info == o.runtime_info &&
371
+ operator_id == o.operator_id &&
372
+ evicted_durable_task_count == o.evicted_durable_task_count
353
373
  end
354
374
 
355
375
  # @see the `==` method
@@ -361,7 +381,7 @@ module HatchetSdkRest
361
381
  # Calculates hash code according to all attributes.
362
382
  # @return [Integer] Hash code
363
383
  def hash
364
- [metadata, name, type, last_heartbeat_at, last_listener_established, actions, registered_workflows, slots, recent_step_runs, status, slot_config, dispatcher_id, labels, webhook_url, webhook_id, runtime_info].hash
384
+ [metadata, name, type, last_heartbeat_at, last_listener_established, actions, registered_workflows, slots, recent_step_runs, status, slot_config, dispatcher_id, labels, webhook_url, webhook_id, runtime_info, operator_id, evicted_durable_task_count].hash
365
385
  end
366
386
 
367
387
  # Builds the object from hash
@@ -11,6 +11,33 @@ module Hatchet
11
11
  CANCEL_QUEUED_EXCEPT_OLDEST = :cancel_queued_except_oldest
12
12
  end
13
13
 
14
+ # Shared serialization helpers for concurrency entries
15
+ # @api private
16
+ module ConcurrencyProto
17
+ # Map Ruby symbol to v1 proto enum symbol
18
+ LIMIT_STRATEGY_MAP = {
19
+ cancel_in_progress: :CANCEL_IN_PROGRESS,
20
+ cancel_newest: :CANCEL_NEWEST,
21
+ group_round_robin: :GROUP_ROUND_ROBIN,
22
+ queue: :QUEUE_NEWEST,
23
+ drop_newest: :DROP_NEWEST,
24
+ cancel_queued_except_newest: :CANCEL_QUEUED_EXCEPT_NEWEST,
25
+ cancel_queued_except_oldest: :CANCEL_QUEUED_EXCEPT_OLDEST,
26
+ }.freeze
27
+
28
+ # Split the max_runs union onto the proto's static/expression field pair. A String is
29
+ # a CEL expression over task input; the static field then carries the default of 1,
30
+ # which only governs slots created before the expression existed (each new task's
31
+ # slot carries its own evaluated value).
32
+ # @param max_runs [Integer, String]
33
+ # @return [Array(Integer, String, nil)]
34
+ def self.split_max_runs(max_runs)
35
+ return [1, max_runs] if max_runs.is_a?(String)
36
+
37
+ [max_runs, nil]
38
+ end
39
+ end
40
+
14
41
  # Defines a concurrency expression for workflow or task-level concurrency control
15
42
  #
16
43
  # @example Workflow-level concurrency
@@ -20,6 +47,22 @@ module Hatchet
20
47
  # limit_strategy: :cancel_in_progress
21
48
  # )
22
49
  #
50
+ # @example Dynamic per-group limits via a CEL expression
51
+ # Hatchet::ConcurrencyExpression.new(
52
+ # expression: "input.tier",
53
+ # max_runs: "input.tier == 'premium' ? 10 : 1",
54
+ # limit_strategy: :group_round_robin
55
+ # )
56
+ #
57
+ # @example Tenant-scoped, shared across workflows
58
+ # Hatchet::ConcurrencyExpression.new(
59
+ # expression: "input.group",
60
+ # max_runs: 1,
61
+ # limit_strategy: :group_round_robin,
62
+ # name: "tenant-wide-limit",
63
+ # is_tenant_scoped: true
64
+ # )
65
+ #
23
66
  # @example Task-level concurrency with multiple keys
24
67
  # [
25
68
  # Hatchet::ConcurrencyExpression.new(expression: "input.digit", max_runs: 8, limit_strategy: :group_round_robin),
@@ -29,52 +72,72 @@ module Hatchet
29
72
  # @return [String] CEL expression evaluated against the workflow input
30
73
  attr_reader :expression
31
74
 
32
- # @return [Integer] Maximum concurrent runs for this key
75
+ # @return [Integer, String] Maximum concurrent runs for this key: a fixed number, or
76
+ # a CEL expression over task input computing the max runs for that task's
77
+ # concurrency group. With an expression, a group's effective limit is the value
78
+ # from its most recently created task.
33
79
  attr_reader :max_runs
34
80
 
35
81
  # @return [Symbol] Strategy when limit is exceeded (:cancel_in_progress, :cancel_newest, :group_round_robin, :queue, :cancel_queued_except_newest, :cancel_queued_except_oldest)
36
82
  attr_reader :limit_strategy
37
83
 
84
+ # @return [String, nil] Unique (per tenant) strategy name; required when tenant-scoped
85
+ attr_reader :name
86
+
87
+ # @return [Boolean] When true, the entry defines (or updates in place) a tenant-scoped
88
+ # strategy shared across workflows, keyed by name: every task declaring the same
89
+ # name consumes the same concurrency limit. The position in the concurrency list is
90
+ # the chain order, and chains sharing tenant-scoped strategies must order them
91
+ # consistently.
92
+ attr_reader :is_tenant_scoped
93
+
38
94
  # @param expression [String] CEL expression evaluated against input
39
- # @param max_runs [Integer] Maximum concurrent runs
95
+ # @param max_runs [Integer, String] Maximum concurrent runs, or a CEL expression computing them per group
40
96
  # @param limit_strategy [Symbol] Strategy when limit is reached
41
- def initialize(expression:, max_runs: 1, limit_strategy: :cancel_in_progress)
97
+ # @param name [String, nil] Unique (per tenant) strategy name; required when tenant-scoped
98
+ # @param is_tenant_scoped [Boolean] Share this strategy across workflows, keyed by name
99
+ def initialize(expression:, max_runs: 1, limit_strategy: :cancel_in_progress, name: nil, is_tenant_scoped: false)
100
+ raise ArgumentError, "a name is required for tenant-scoped concurrency" if is_tenant_scoped && (name.nil? || name.empty?)
101
+
42
102
  @expression = expression
43
103
  @max_runs = max_runs
44
104
  @limit_strategy = limit_strategy
105
+ @name = name
106
+ @is_tenant_scoped = is_tenant_scoped
45
107
  end
46
108
 
109
+ # @deprecated kept for backwards compatibility; use {ConcurrencyProto::LIMIT_STRATEGY_MAP}
110
+ LIMIT_STRATEGY_MAP = ConcurrencyProto::LIMIT_STRATEGY_MAP
111
+
47
112
  # Convert to a hash for API serialization
48
113
  # @return [Hash]
49
114
  def to_h
50
- {
115
+ h = {
51
116
  expression: @expression,
52
117
  max_runs: @max_runs,
53
118
  limit_strategy: @limit_strategy.to_s.upcase,
54
119
  }
120
+ h[:name] = @name if @name
121
+ h[:is_tenant_scoped] = true if @is_tenant_scoped
122
+ h
55
123
  end
56
124
 
57
- # Map Ruby symbol to v1 proto enum symbol
58
- LIMIT_STRATEGY_MAP = {
59
- cancel_in_progress: :CANCEL_IN_PROGRESS,
60
- cancel_newest: :CANCEL_NEWEST,
61
- group_round_robin: :GROUP_ROUND_ROBIN,
62
- queue: :QUEUE_NEWEST,
63
- drop_newest: :DROP_NEWEST,
64
- cancel_queued_except_newest: :CANCEL_QUEUED_EXCEPT_NEWEST,
65
- cancel_queued_except_oldest: :CANCEL_QUEUED_EXCEPT_OLDEST,
66
- }.freeze
67
-
68
125
  # Convert to a V1::Concurrency protobuf message
69
126
  # @return [V1::Concurrency]
70
127
  def to_proto
71
- proto_strategy = LIMIT_STRATEGY_MAP[@limit_strategy] || :CANCEL_IN_PROGRESS
128
+ proto_strategy = ConcurrencyProto::LIMIT_STRATEGY_MAP[@limit_strategy] || :CANCEL_IN_PROGRESS
129
+ static_max, max_runs_expression = ConcurrencyProto.split_max_runs(@max_runs)
72
130
 
73
- ::V1::Concurrency.new(
131
+ args = {
74
132
  expression: @expression,
75
- max_runs: @max_runs,
133
+ max_runs: static_max,
76
134
  limit_strategy: proto_strategy,
77
- )
135
+ }
136
+ args[:max_runs_expression] = max_runs_expression if max_runs_expression
137
+ args[:name] = @name if @name
138
+ args[:is_tenant_scoped] = true if @is_tenant_scoped
139
+
140
+ ::V1::Concurrency.new(**args)
78
141
  end
79
142
  end
80
143
  end
@@ -9,7 +9,7 @@ require 'v1/shared/condition_pb'
9
9
  require 'v1/shared/trigger_pb'
10
10
 
11
11
 
12
- descriptor_data = "\n\x12v1/workflows.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19v1/shared/condition.proto\x1a\x17v1/shared/trigger.proto\"[\n\x12\x43\x61ncelTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"[\n\x12ReplayTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"\xb7\x01\n\x0bTasksFilter\x12\x10\n\x08statuses\x18\x01 \x03(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x05until\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x0cworkflow_ids\x18\x04 \x03(\t\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x03(\tB\x08\n\x06_until\".\n\x13\x43\x61ncelTasksResponse\x12\x17\n\x0f\x63\x61ncelled_tasks\x18\x01 \x03(\t\"-\n\x13ReplayTasksResponse\x12\x16\n\x0ereplayed_tasks\x18\x01 \x03(\t\"\xae\x02\n\x19TriggerWorkflowRunRequest\x12\x15\n\rworkflow_name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\x0c\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x03 \x01(\x0c\x12\x15\n\x08priority\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12U\n\x15\x64\x65sired_worker_labels\x18\x05 \x03(\x0b\x32\x36.v1.TriggerWorkflowRunRequest.DesiredWorkerLabelsEntry\x1aS\n\x18\x44\x65siredWorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x42\x0b\n\t_priority\"1\n\x1aTriggerWorkflowRunResponse\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"X\n\x18\x42ranchDurableTaskRequest\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"Y\n\x19\x42ranchDurableTaskResponse\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"\xed\x04\n\x1c\x43reateWorkflowVersionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12!\n\x05tasks\x18\x06 \x03(\x0b\x32\x12.v1.CreateTaskOpts\x12$\n\x0b\x63oncurrency\x18\x07 \x01(\x0b\x32\x0f.v1.Concurrency\x12\x17\n\ncron_input\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x30\n\x0fon_failure_task\x18\t \x01(\x0b\x32\x12.v1.CreateTaskOptsH\x01\x88\x01\x01\x12\'\n\x06sticky\x18\n \x01(\x0e\x32\x12.v1.StickyStrategyH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0b \x01(\x05H\x03\x88\x01\x01\x12(\n\x0f\x63oncurrency_arr\x18\x0c \x03(\x0b\x32\x0f.v1.Concurrency\x12*\n\x0f\x64\x65\x66\x61ult_filters\x18\r \x03(\x0b\x32\x11.v1.DefaultFilter\x12\x1e\n\x11input_json_schema\x18\x0e \x01(\x0cH\x04\x88\x01\x01\x12/\n\x0bidempotency\x18\x0f \x01(\x0b\x32\x15.v1.IdempotencyConfigH\x05\x88\x01\x01\x42\r\n\x0b_cron_inputB\x12\n\x10_on_failure_taskB\t\n\x07_stickyB\x13\n\x11_default_priorityB\x14\n\x12_input_json_schemaB\x0e\n\x0c_idempotency\"n\n\x11IdempotencyConfig\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x0e\n\x06ttl_ms\x18\x02 \x01(\x03\x12*\n\x06method\x18\x03 \x01(\x0e\x32\x15.v1.IdempotencyMethodH\x00\x88\x01\x01\x42\t\n\x07_method\"`\n\x19IdempotencyCollisionError\x12 \n\x18\x65xisting_run_external_id\x18\x01 \x01(\t\x12!\n\x19\x63olliding_run_external_id\x18\x02 \x01(\t\"\x87\x01\n$BulkTriggerIdempotencyCollisionError\x12,\n$successful_workflow_run_external_ids\x18\x01 \x03(\t\x12\x31\n\ncollisions\x18\x02 \x03(\x0b\x32\x1d.v1.IdempotencyCollisionError\"T\n\rDefaultFilter\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\r\n\x05scope\x18\x02 \x01(\t\x12\x14\n\x07payload\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\n\n\x08_payload\"\x93\x01\n\x0b\x43oncurrency\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x15\n\x08max_runs\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x39\n\x0elimit_strategy\x18\x03 \x01(\x0e\x32\x1c.v1.ConcurrencyLimitStrategyH\x01\x88\x01\x01\x42\x0b\n\t_max_runsB\x11\n\x0f_limit_strategy\"\x89\x02\n\x0fTaskBatchConfig\x12\x16\n\x0e\x62\x61tch_max_size\x18\x01 \x01(\x05\x12\"\n\x15\x62\x61tch_max_interval_ms\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x0f\x62\x61tch_group_key\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x62\x61tch_group_max_runs\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1d\n\x10\x62roadcast_output\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x18\n\x16_batch_max_interval_msB\x12\n\x10_batch_group_keyB\x17\n\x15_batch_group_max_runsB\x13\n\x11_broadcast_output\"\xea\x05\n\x0e\x43reateTaskOpts\x12\x13\n\x0breadable_id\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\t\x12\x0e\n\x06inputs\x18\x04 \x01(\t\x12\x0f\n\x07parents\x18\x05 \x03(\t\x12\x0f\n\x07retries\x18\x06 \x01(\x05\x12,\n\x0brate_limits\x18\x07 \x03(\x0b\x32\x17.v1.CreateTaskRateLimit\x12;\n\rworker_labels\x18\x08 \x03(\x0b\x32$.v1.CreateTaskOpts.WorkerLabelsEntry\x12\x1b\n\x0e\x62\x61\x63koff_factor\x18\t \x01(\x02H\x00\x88\x01\x01\x12 \n\x13\x62\x61\x63koff_max_seconds\x18\n \x01(\x05H\x01\x88\x01\x01\x12$\n\x0b\x63oncurrency\x18\x0b \x03(\x0b\x32\x0f.v1.Concurrency\x12+\n\nconditions\x18\x0c \x01(\x0b\x32\x12.v1.TaskConditionsH\x02\x88\x01\x01\x12\x1d\n\x10schedule_timeout\x18\r \x01(\tH\x03\x88\x01\x01\x12\x12\n\nis_durable\x18\x0e \x01(\x08\x12;\n\rslot_requests\x18\x0f \x03(\x0b\x32$.v1.CreateTaskOpts.SlotRequestsEntry\x12\'\n\x05\x62\x61tch\x18\x10 \x01(\x0b\x32\x13.v1.TaskBatchConfigH\x04\x88\x01\x01\x1aL\n\x11WorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x1a\x33\n\x11SlotRequestsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x42\x11\n\x0f_backoff_factorB\x16\n\x14_backoff_max_secondsB\r\n\x0b_conditionsB\x13\n\x11_schedule_timeoutB\x08\n\x06_batch\"\xfd\x01\n\x13\x43reateTaskRateLimit\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\x05units\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08key_expr\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nunits_expr\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11limit_values_expr\x18\x05 \x01(\tH\x03\x88\x01\x01\x12,\n\x08\x64uration\x18\x06 \x01(\x0e\x32\x15.v1.RateLimitDurationH\x04\x88\x01\x01\x42\x08\n\x06_unitsB\x0b\n\t_key_exprB\r\n\x0b_units_exprB\x14\n\x12_limit_values_exprB\x0b\n\t_duration\"@\n\x1d\x43reateWorkflowVersionResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\"+\n\x14GetRunDetailsRequest\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"\xaa\x01\n\rTaskRunDetail\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12\x12\n\x05\x65rror\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06output\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x0breadable_id\x18\x05 \x01(\t\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x42\x08\n\x06_errorB\t\n\x07_output\"\x84\x02\n\x15GetRunDetailsResponse\x12\r\n\x05input\x18\x01 \x01(\x0c\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12:\n\ttask_runs\x18\x03 \x03(\x0b\x32\'.v1.GetRunDetailsResponse.TaskRunsEntry\x12\x0c\n\x04\x64one\x18\x04 \x01(\x08\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x01(\x0c\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x1a\x42\n\rTaskRunsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.v1.TaskRunDetail:\x02\x38\x01*$\n\x0eStickyStrategy\x12\x08\n\x04SOFT\x10\x00\x12\x08\n\x04HARD\x10\x01*]\n\x11RateLimitDuration\x12\n\n\x06SECOND\x10\x00\x12\n\n\x06MINUTE\x10\x01\x12\x08\n\x04HOUR\x10\x02\x12\x07\n\x03\x44\x41Y\x10\x03\x12\x08\n\x04WEEK\x10\x04\x12\t\n\x05MONTH\x10\x05\x12\x08\n\x04YEAR\x10\x06*[\n\tRunStatus\x12\n\n\x06QUEUED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tCOMPLETED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\r\n\tCANCELLED\x10\x04\x12\x0b\n\x07\x45VICTED\x10\x05*(\n\x11IdempotencyMethod\x12\x07\n\x03TTL\x10\x00\x12\n\n\x06STATUS\x10\x01*\xc1\x01\n\x18\x43oncurrencyLimitStrategy\x12\x16\n\x12\x43\x41NCEL_IN_PROGRESS\x10\x00\x12\x0f\n\x0b\x44ROP_NEWEST\x10\x01\x12\x10\n\x0cQUEUE_NEWEST\x10\x02\x12\x15\n\x11GROUP_ROUND_ROBIN\x10\x03\x12\x11\n\rCANCEL_NEWEST\x10\x04\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_NEWEST\x10\x05\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_OLDEST\x10\x06\x32\xcf\x03\n\x0c\x41\x64minService\x12R\n\x0bPutWorkflow\x12 .v1.CreateWorkflowVersionRequest\x1a!.v1.CreateWorkflowVersionResponse\x12>\n\x0b\x43\x61ncelTasks\x12\x16.v1.CancelTasksRequest\x1a\x17.v1.CancelTasksResponse\x12>\n\x0bReplayTasks\x12\x16.v1.ReplayTasksRequest\x1a\x17.v1.ReplayTasksResponse\x12S\n\x12TriggerWorkflowRun\x12\x1d.v1.TriggerWorkflowRunRequest\x1a\x1e.v1.TriggerWorkflowRunResponse\x12\x44\n\rGetRunDetails\x12\x18.v1.GetRunDetailsRequest\x1a\x19.v1.GetRunDetailsResponse\x12P\n\x11\x42ranchDurableTask\x12\x1c.v1.BranchDurableTaskRequest\x1a\x1d.v1.BranchDurableTaskResponseBBZ@github.com/hatchet-dev/hatchet/internal/services/shared/proto/v1b\x06proto3"
12
+ descriptor_data = "\n\x12v1/workflows.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19v1/shared/condition.proto\x1a\x17v1/shared/trigger.proto\"[\n\x12\x43\x61ncelTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"[\n\x12ReplayTasksRequest\x12\x14\n\x0c\x65xternal_ids\x18\x01 \x03(\t\x12$\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x0f.v1.TasksFilterH\x00\x88\x01\x01\x42\t\n\x07_filter\"\xb7\x01\n\x0bTasksFilter\x12\x10\n\x08statuses\x18\x01 \x03(\t\x12)\n\x05since\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x05until\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x0cworkflow_ids\x18\x04 \x03(\t\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x03(\tB\x08\n\x06_until\".\n\x13\x43\x61ncelTasksResponse\x12\x17\n\x0f\x63\x61ncelled_tasks\x18\x01 \x03(\t\"-\n\x13ReplayTasksResponse\x12\x16\n\x0ereplayed_tasks\x18\x01 \x03(\t\"\xae\x02\n\x19TriggerWorkflowRunRequest\x12\x15\n\rworkflow_name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\x0c\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x03 \x01(\x0c\x12\x15\n\x08priority\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12U\n\x15\x64\x65sired_worker_labels\x18\x05 \x03(\x0b\x32\x36.v1.TriggerWorkflowRunRequest.DesiredWorkerLabelsEntry\x1aS\n\x18\x44\x65siredWorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x42\x0b\n\t_priority\"1\n\x1aTriggerWorkflowRunResponse\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"X\n\x18\x42ranchDurableTaskRequest\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"Y\n\x19\x42ranchDurableTaskResponse\x12\x18\n\x10task_external_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\x03\x12\x11\n\tbranch_id\x18\x03 \x01(\x03\"\xed\x04\n\x1c\x43reateWorkflowVersionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12!\n\x05tasks\x18\x06 \x03(\x0b\x32\x12.v1.CreateTaskOpts\x12$\n\x0b\x63oncurrency\x18\x07 \x01(\x0b\x32\x0f.v1.Concurrency\x12\x17\n\ncron_input\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x30\n\x0fon_failure_task\x18\t \x01(\x0b\x32\x12.v1.CreateTaskOptsH\x01\x88\x01\x01\x12\'\n\x06sticky\x18\n \x01(\x0e\x32\x12.v1.StickyStrategyH\x02\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0b \x01(\x05H\x03\x88\x01\x01\x12(\n\x0f\x63oncurrency_arr\x18\x0c \x03(\x0b\x32\x0f.v1.Concurrency\x12*\n\x0f\x64\x65\x66\x61ult_filters\x18\r \x03(\x0b\x32\x11.v1.DefaultFilter\x12\x1e\n\x11input_json_schema\x18\x0e \x01(\x0cH\x04\x88\x01\x01\x12/\n\x0bidempotency\x18\x0f \x01(\x0b\x32\x15.v1.IdempotencyConfigH\x05\x88\x01\x01\x42\r\n\x0b_cron_inputB\x12\n\x10_on_failure_taskB\t\n\x07_stickyB\x13\n\x11_default_priorityB\x14\n\x12_input_json_schemaB\x0e\n\x0c_idempotency\"n\n\x11IdempotencyConfig\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x0e\n\x06ttl_ms\x18\x02 \x01(\x03\x12*\n\x06method\x18\x03 \x01(\x0e\x32\x15.v1.IdempotencyMethodH\x00\x88\x01\x01\x42\t\n\x07_method\"`\n\x19IdempotencyCollisionError\x12 \n\x18\x65xisting_run_external_id\x18\x01 \x01(\t\x12!\n\x19\x63olliding_run_external_id\x18\x02 \x01(\t\"\x87\x01\n$BulkTriggerIdempotencyCollisionError\x12,\n$successful_workflow_run_external_ids\x18\x01 \x03(\t\x12\x31\n\ncollisions\x18\x02 \x03(\x0b\x32\x1d.v1.IdempotencyCollisionError\"T\n\rDefaultFilter\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\r\n\x05scope\x18\x02 \x01(\t\x12\x14\n\x07payload\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\n\n\x08_payload\"\x9d\x02\n\x0b\x43oncurrency\x12\x12\n\nexpression\x18\x01 \x01(\t\x12\x15\n\x08max_runs\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x39\n\x0elimit_strategy\x18\x03 \x01(\x0e\x32\x1c.v1.ConcurrencyLimitStrategyH\x01\x88\x01\x01\x12\x11\n\x04name\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10is_tenant_scoped\x18\x05 \x01(\x08H\x03\x88\x01\x01\x12 \n\x13max_runs_expression\x18\x06 \x01(\tH\x04\x88\x01\x01\x42\x0b\n\t_max_runsB\x11\n\x0f_limit_strategyB\x07\n\x05_nameB\x13\n\x11_is_tenant_scopedB\x16\n\x14_max_runs_expression\"\x89\x02\n\x0fTaskBatchConfig\x12\x16\n\x0e\x62\x61tch_max_size\x18\x01 \x01(\x05\x12\"\n\x15\x62\x61tch_max_interval_ms\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x0f\x62\x61tch_group_key\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x62\x61tch_group_max_runs\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1d\n\x10\x62roadcast_output\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\x18\n\x16_batch_max_interval_msB\x12\n\x10_batch_group_keyB\x17\n\x15_batch_group_max_runsB\x13\n\x11_broadcast_output\"\xea\x05\n\x0e\x43reateTaskOpts\x12\x13\n\x0breadable_id\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\t\x12\x0e\n\x06inputs\x18\x04 \x01(\t\x12\x0f\n\x07parents\x18\x05 \x03(\t\x12\x0f\n\x07retries\x18\x06 \x01(\x05\x12,\n\x0brate_limits\x18\x07 \x03(\x0b\x32\x17.v1.CreateTaskRateLimit\x12;\n\rworker_labels\x18\x08 \x03(\x0b\x32$.v1.CreateTaskOpts.WorkerLabelsEntry\x12\x1b\n\x0e\x62\x61\x63koff_factor\x18\t \x01(\x02H\x00\x88\x01\x01\x12 \n\x13\x62\x61\x63koff_max_seconds\x18\n \x01(\x05H\x01\x88\x01\x01\x12$\n\x0b\x63oncurrency\x18\x0b \x03(\x0b\x32\x0f.v1.Concurrency\x12+\n\nconditions\x18\x0c \x01(\x0b\x32\x12.v1.TaskConditionsH\x02\x88\x01\x01\x12\x1d\n\x10schedule_timeout\x18\r \x01(\tH\x03\x88\x01\x01\x12\x12\n\nis_durable\x18\x0e \x01(\x08\x12;\n\rslot_requests\x18\x0f \x03(\x0b\x32$.v1.CreateTaskOpts.SlotRequestsEntry\x12\'\n\x05\x62\x61tch\x18\x10 \x01(\x0b\x32\x13.v1.TaskBatchConfigH\x04\x88\x01\x01\x1aL\n\x11WorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.v1.DesiredWorkerLabels:\x02\x38\x01\x1a\x33\n\x11SlotRequestsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x42\x11\n\x0f_backoff_factorB\x16\n\x14_backoff_max_secondsB\r\n\x0b_conditionsB\x13\n\x11_schedule_timeoutB\x08\n\x06_batch\"\xfd\x01\n\x13\x43reateTaskRateLimit\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\x05units\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08key_expr\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nunits_expr\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11limit_values_expr\x18\x05 \x01(\tH\x03\x88\x01\x01\x12,\n\x08\x64uration\x18\x06 \x01(\x0e\x32\x15.v1.RateLimitDurationH\x04\x88\x01\x01\x42\x08\n\x06_unitsB\x0b\n\t_key_exprB\r\n\x0b_units_exprB\x14\n\x12_limit_values_exprB\x0b\n\t_duration\"@\n\x1d\x43reateWorkflowVersionResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0bworkflow_id\x18\x02 \x01(\t\"+\n\x14GetRunDetailsRequest\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"\xaa\x01\n\rTaskRunDetail\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12\x12\n\x05\x65rror\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06output\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x0breadable_id\x18\x05 \x01(\t\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x42\x08\n\x06_errorB\t\n\x07_output\"\x84\x02\n\x15GetRunDetailsResponse\x12\r\n\x05input\x18\x01 \x01(\x0c\x12\x1d\n\x06status\x18\x02 \x01(\x0e\x32\r.v1.RunStatus\x12:\n\ttask_runs\x18\x03 \x03(\x0b\x32\'.v1.GetRunDetailsResponse.TaskRunsEntry\x12\x0c\n\x04\x64one\x18\x04 \x01(\x08\x12\x1b\n\x13\x61\x64\x64itional_metadata\x18\x05 \x01(\x0c\x12\x12\n\nis_evicted\x18\x06 \x01(\x08\x1a\x42\n\rTaskRunsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.v1.TaskRunDetail:\x02\x38\x01*$\n\x0eStickyStrategy\x12\x08\n\x04SOFT\x10\x00\x12\x08\n\x04HARD\x10\x01*]\n\x11RateLimitDuration\x12\n\n\x06SECOND\x10\x00\x12\n\n\x06MINUTE\x10\x01\x12\x08\n\x04HOUR\x10\x02\x12\x07\n\x03\x44\x41Y\x10\x03\x12\x08\n\x04WEEK\x10\x04\x12\t\n\x05MONTH\x10\x05\x12\x08\n\x04YEAR\x10\x06*[\n\tRunStatus\x12\n\n\x06QUEUED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tCOMPLETED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x12\r\n\tCANCELLED\x10\x04\x12\x0b\n\x07\x45VICTED\x10\x05*(\n\x11IdempotencyMethod\x12\x07\n\x03TTL\x10\x00\x12\n\n\x06STATUS\x10\x01*\xc1\x01\n\x18\x43oncurrencyLimitStrategy\x12\x16\n\x12\x43\x41NCEL_IN_PROGRESS\x10\x00\x12\x0f\n\x0b\x44ROP_NEWEST\x10\x01\x12\x10\n\x0cQUEUE_NEWEST\x10\x02\x12\x15\n\x11GROUP_ROUND_ROBIN\x10\x03\x12\x11\n\rCANCEL_NEWEST\x10\x04\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_NEWEST\x10\x05\x12\x1f\n\x1b\x43\x41NCEL_QUEUED_EXCEPT_OLDEST\x10\x06\x32\xcf\x03\n\x0c\x41\x64minService\x12R\n\x0bPutWorkflow\x12 .v1.CreateWorkflowVersionRequest\x1a!.v1.CreateWorkflowVersionResponse\x12>\n\x0b\x43\x61ncelTasks\x12\x16.v1.CancelTasksRequest\x1a\x17.v1.CancelTasksResponse\x12>\n\x0bReplayTasks\x12\x16.v1.ReplayTasksRequest\x1a\x17.v1.ReplayTasksResponse\x12S\n\x12TriggerWorkflowRun\x12\x1d.v1.TriggerWorkflowRunRequest\x1a\x1e.v1.TriggerWorkflowRunResponse\x12\x44\n\rGetRunDetails\x12\x18.v1.GetRunDetailsRequest\x1a\x19.v1.GetRunDetailsResponse\x12P\n\x11\x42ranchDurableTask\x12\x1c.v1.BranchDurableTaskRequest\x1a\x1d.v1.BranchDurableTaskResponseBBZ@github.com/hatchet-dev/hatchet/internal/services/shared/proto/v1b\x06proto3"
13
13
 
14
14
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
15
15
  pool.add_serialized_file(descriptor_data)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hatchet
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
@@ -4,16 +4,26 @@ module Hatchet
4
4
  CANCEL_NEWEST: Symbol
5
5
  GROUP_ROUND_ROBIN: Symbol
6
6
  QUEUE: Symbol
7
+ CANCEL_QUEUED_EXCEPT_NEWEST: Symbol
8
+ CANCEL_QUEUED_EXCEPT_OLDEST: Symbol
9
+ end
10
+
11
+ module ConcurrencyProto
12
+ LIMIT_STRATEGY_MAP: Hash[Symbol, Symbol]
13
+
14
+ def self.split_max_runs: (Integer | String max_runs) -> [Integer, String?]
7
15
  end
8
16
 
9
17
  class ConcurrencyExpression
10
18
  LIMIT_STRATEGY_MAP: Hash[Symbol, Symbol]
11
19
 
12
20
  attr_reader expression: String
13
- attr_reader max_runs: Integer
21
+ attr_reader max_runs: Integer | String
14
22
  attr_reader limit_strategy: Symbol
23
+ attr_reader name: String?
24
+ attr_reader is_tenant_scoped: bool
15
25
 
16
- def initialize: (expression: String, ?max_runs: Integer, ?limit_strategy: Symbol) -> void
26
+ def initialize: (expression: String, ?max_runs: Integer | String, ?limit_strategy: Symbol, ?name: String?, ?is_tenant_scoped: bool) -> void
17
27
  def to_h: () -> Hash[Symbol, untyped]
18
28
  def to_proto: () -> untyped
19
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hatchet-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - gabriel ruttner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-08-31 00:00:00.000000000 Z
11
+ date: 2026-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday