cadenya 0.22.0 → 0.24.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +13 -1
  4. data/lib/cadenya/internal/stream.rb +32 -0
  5. data/lib/cadenya/internal/transport/base_client.rb +1 -1
  6. data/lib/cadenya/internal/type/base_stream.rb +83 -0
  7. data/lib/cadenya/models/{objective_continue_response.rb → objective_event.rb} +2 -2
  8. data/lib/cadenya/models/objective_event_webhook_data.rb +3 -43
  9. data/lib/cadenya/models/objective_stream_events_params.rb +26 -0
  10. data/lib/cadenya/models/unsafe_unwrap_webhook_event.rb +3 -43
  11. data/lib/cadenya/models/unwrap_webhook_event.rb +3 -42
  12. data/lib/cadenya/models.rb +4 -0
  13. data/lib/cadenya/resources/objectives.rb +31 -4
  14. data/lib/cadenya/version.rb +1 -1
  15. data/lib/cadenya.rb +4 -2
  16. data/rbi/cadenya/internal/stream.rbi +18 -0
  17. data/rbi/cadenya/internal/transport/base_client.rbi +18 -2
  18. data/rbi/cadenya/internal/type/base_stream.rbi +75 -0
  19. data/rbi/cadenya/models/{objective_continue_response.rbi → objective_event.rbi} +2 -5
  20. data/rbi/cadenya/models/objective_event_webhook_data.rbi +4 -80
  21. data/rbi/cadenya/models/objective_stream_events_params.rbi +46 -0
  22. data/rbi/cadenya/models/unsafe_unwrap_webhook_event.rbi +4 -78
  23. data/rbi/cadenya/models/unwrap_webhook_event.rbi +4 -77
  24. data/rbi/cadenya/models.rbi +4 -0
  25. data/rbi/cadenya/resources/objectives.rbi +17 -6
  26. data/sig/cadenya/internal/stream.rbs +9 -0
  27. data/sig/cadenya/internal/type/base_stream.rbs +38 -0
  28. data/sig/cadenya/models/{objective_continue_response.rbs → objective_event.rbs} +2 -2
  29. data/sig/cadenya/models/objective_event_webhook_data.rbs +4 -42
  30. data/sig/cadenya/models/objective_stream_events_params.rbs +28 -0
  31. data/sig/cadenya/models/unsafe_unwrap_webhook_event.rbs +4 -42
  32. data/sig/cadenya/models/unwrap_webhook_event.rbs +4 -42
  33. data/sig/cadenya/models.rbs +4 -0
  34. data/sig/cadenya/resources/objectives.rbs +8 -2
  35. metadata +13 -7
  36. data/lib/cadenya/models/objective_list_events_response.rb +0 -42
  37. data/rbi/cadenya/models/objective_list_events_response.rbi +0 -72
  38. data/sig/cadenya/models/objective_list_events_response.rbs +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90f866d6d239caac71a8e80827e7318e297c1d339fdaee6e59c6cf8cee057fd3
4
- data.tar.gz: d1361f3fe5c8480be71bdfa73937602bc8d9b56fc444e9b197efd213b928f4eb
3
+ metadata.gz: 56345beed04805e02e3d9160438370098e235277a458b4d99964df96d689d1fa
4
+ data.tar.gz: 48e4a95347381ea29f7f4523d1098af4aab96e1a9a43e5187a6c115120848087
5
5
  SHA512:
6
- metadata.gz: 05b854a43d809324ee5a1b7460c7e48aa4c03f9d98a03001702a64a48f28f26b78d2e60024929f3eba0b99715967d6c33c15c64910b7e166afb5de866c98d327
7
- data.tar.gz: 62f17cdbb96038ac3b959d69ad67d5de66b715d69f2ed6f4fa83b979d9c6b3d61dcb0433607284ea900baabd27fdbacbc38081d8710729a8ae689e9d7c14a875
6
+ metadata.gz: 9e343691120327cdd8c6c1d14df4f15d77344f9a625ec59fff2d743999330aacecb0fad0fe0290ebd8bd2094bce006b60e95e225ef4c1f403700542bfe03feff
7
+ data.tar.gz: 218de860735ffcfcc65da64a9ca06675bfee2a54f45c5588ec400e5d330d9cedd7e9730a3078592ad4924d4698a291c2a26fe0baf79f181bbdc527c6b58d540b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.0 (2026-07-01)
4
+
5
+ Full Changelog: [v0.23.0...v0.24.0](https://github.com/cadenya/cadenya-ruby/compare/v0.23.0...v0.24.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([2dc6e63](https://github.com/cadenya/cadenya-ruby/commit/2dc6e631c0c63392b148ea3458ce560593bcf27a))
10
+
11
+ ## 0.23.0 (2026-07-01)
12
+
13
+ Full Changelog: [v0.22.0...v0.23.0](https://github.com/cadenya/cadenya-ruby/compare/v0.22.0...v0.23.0)
14
+
15
+ ### Features
16
+
17
+ * Add SSE streaming endpoint for objective events (ENG-344) ([eec699b](https://github.com/cadenya/cadenya-ruby/commit/eec699b38fee3662e2d07d8ca22b321472d88e93))
18
+ * **api:** api update ([d9ebcf1](https://github.com/cadenya/cadenya-ruby/commit/d9ebcf1e47b6bb392dada1aa8e64d230ca342e42))
19
+
3
20
  ## 0.22.0 (2026-07-01)
4
21
 
5
22
  Full Changelog: [v0.21.0...v0.22.0](https://github.com/cadenya/cadenya-ruby/compare/v0.21.0...v0.22.0)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "cadenya", "~> 0.22.0"
20
+ gem "cadenya", "~> 0.24.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -37,6 +37,18 @@ account = cadenya.account.retrieve
37
37
  puts(account.info)
38
38
  ```
39
39
 
40
+ ### Streaming
41
+
42
+ We provide support for streaming responses using Server-Sent Events (SSE).
43
+
44
+ ```ruby
45
+ stream = cadenya.objectives.stream_events_streaming
46
+
47
+ stream.each do |objective|
48
+ puts(objective.data)
49
+ end
50
+ ```
51
+
40
52
  ### Pagination
41
53
 
42
54
  List methods in the Cadenya API are paginated.
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cadenya
4
+ module Internal
5
+ # @generic Elem
6
+ #
7
+ # @example
8
+ # stream.each do |event|
9
+ # puts(event)
10
+ # end
11
+ class Stream
12
+ include Cadenya::Internal::Type::BaseStream
13
+
14
+ # @api private
15
+ #
16
+ # @return [Enumerable<generic<Elem>>]
17
+ private def iterator
18
+ @iterator ||= Cadenya::Internal::Util.chain_fused(@stream) do |y|
19
+ @stream.each do |msg|
20
+ case msg
21
+ in {data: String => data}
22
+ decoded = JSON.parse(data, symbolize_names: true)
23
+ unwrapped = Cadenya::Internal::Util.dig(decoded, @unwrap)
24
+ y << Cadenya::Internal::Type::Converter.coerce(@model, unwrapped)
25
+ else
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -554,7 +554,7 @@ module Cadenya
554
554
  )
555
555
  ),
556
556
  page: T.nilable(T::Class[Cadenya::Internal::Type::BasePage[Cadenya::Internal::Type::BaseModel]]),
557
- stream: T.nilable(T::Class[T.anything]),
557
+ stream: T.nilable(T::Class[Cadenya::Internal::Type::BaseStream[T.anything, Cadenya::Internal::Type::BaseModel]]),
558
558
  model: T.nilable(Cadenya::Internal::Type::Converter::Input),
559
559
  options: T.nilable(Cadenya::RequestOptions::OrHash)
560
560
  }
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cadenya
4
+ module Internal
5
+ module Type
6
+ # @api private
7
+ #
8
+ # @generic Elem
9
+ #
10
+ # This module provides a base implementation for streaming responses in the SDK.
11
+ #
12
+ # @see https://rubyapi.org/3.2/o/enumerable
13
+ module BaseStream
14
+ include Enumerable
15
+
16
+ # @return [Integer]
17
+ attr_reader :status
18
+
19
+ # @return [Hash{String=>String}]
20
+ attr_reader :headers
21
+
22
+ # @api public
23
+ #
24
+ # @return [void]
25
+ def close = Cadenya::Internal::Util.close_fused!(@iterator)
26
+
27
+ # @api private
28
+ #
29
+ # @return [Enumerable<generic<Elem>>]
30
+ private def iterator = (raise NotImplementedError)
31
+
32
+ # @api public
33
+ #
34
+ # @param blk [Proc]
35
+ #
36
+ # @yieldparam [generic<Elem>]
37
+ # @return [void]
38
+ def each(&blk)
39
+ unless block_given?
40
+ raise ArgumentError.new("A block must be given to ##{__method__}")
41
+ end
42
+ @iterator.each(&blk)
43
+ end
44
+
45
+ # @api public
46
+ #
47
+ # @return [Enumerator<generic<Elem>>]
48
+ def to_enum = @iterator
49
+
50
+ alias_method :enum_for, :to_enum
51
+
52
+ # @api private
53
+ #
54
+ # @param model [Class, Cadenya::Internal::Type::Converter]
55
+ # @param url [URI::Generic]
56
+ # @param status [Integer]
57
+ # @param headers [Hash{String=>String}]
58
+ # @param response [Net::HTTPResponse]
59
+ # @param unwrap [Symbol, Integer, Array<Symbol, Integer>, Proc]
60
+ # @param stream [Enumerable<Object>]
61
+ def initialize(model:, url:, status:, headers:, response:, unwrap:, stream:)
62
+ @model = model
63
+ @url = url
64
+ @status = status
65
+ @headers = headers
66
+ @response = response
67
+ @unwrap = unwrap
68
+ @stream = stream
69
+ @iterator = iterator
70
+ end
71
+
72
+ # @api private
73
+ #
74
+ # @return [String]
75
+ def inspect
76
+ model = Cadenya::Internal::Type::Converter.inspect(@model, depth: 1)
77
+
78
+ "#<#{self.class}[#{model}]:0x#{object_id.to_s(16)}>"
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -3,7 +3,7 @@
3
3
  module Cadenya
4
4
  module Models
5
5
  # @see Cadenya::Resources::Objectives#continue
6
- class ObjectiveContinueResponse < Cadenya::Internal::Type::BaseModel
6
+ class ObjectiveEvent < Cadenya::Internal::Type::BaseModel
7
7
  # @!attribute data
8
8
  #
9
9
  # @return [Cadenya::Models::ObjectiveEventData]
@@ -28,7 +28,7 @@ module Cadenya
28
28
 
29
29
  # @!method initialize(data:, metadata:, context_window_id: nil, info: nil)
30
30
  # Some parameter documentations has been truncated, see
31
- # {Cadenya::Models::ObjectiveContinueResponse} for more details.
31
+ # {Cadenya::Models::ObjectiveEvent} for more details.
32
32
  #
33
33
  # @param data [Cadenya::Models::ObjectiveEventData]
34
34
  #
@@ -58,10 +58,8 @@ module Cadenya
58
58
 
59
59
  # @!attribute objective_event
60
60
  #
61
- # @return [Cadenya::Models::ObjectiveEventWebhookData::Data::ObjectiveEvent]
62
- required :objective_event,
63
- -> { Cadenya::ObjectiveEventWebhookData::Data::ObjectiveEvent },
64
- api_name: :objectiveEvent
61
+ # @return [Cadenya::Models::ObjectiveEvent]
62
+ required :objective_event, -> { Cadenya::ObjectiveEvent }, api_name: :objectiveEvent
65
63
 
66
64
  # @!method initialize(agent:, agent_variation:, objective:, objective_event:)
67
65
  # Some parameter documentations has been truncated, see
@@ -76,45 +74,7 @@ module Cadenya
76
74
  #
77
75
  # @param objective [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
78
76
  #
79
- # @param objective_event [Cadenya::Models::ObjectiveEventWebhookData::Data::ObjectiveEvent]
80
-
81
- # @see Cadenya::Models::ObjectiveEventWebhookData::Data#objective_event
82
- class ObjectiveEvent < Cadenya::Internal::Type::BaseModel
83
- # @!attribute data
84
- #
85
- # @return [Cadenya::Models::ObjectiveEventData]
86
- required :data, -> { Cadenya::ObjectiveEventData }
87
-
88
- # @!attribute metadata
89
- # Metadata for ephemeral operations and activities (e.g., objectives, executions,
90
- # runs)
91
- #
92
- # @return [Cadenya::Models::OperationMetadata]
93
- required :metadata, -> { Cadenya::OperationMetadata }
94
-
95
- # @!attribute context_window_id
96
- #
97
- # @return [String, nil]
98
- optional :context_window_id, String, api_name: :contextWindowId
99
-
100
- # @!attribute info
101
- #
102
- # @return [Cadenya::Models::ObjectiveEventInfo, nil]
103
- optional :info, -> { Cadenya::ObjectiveEventInfo }
104
-
105
- # @!method initialize(data:, metadata:, context_window_id: nil, info: nil)
106
- # Some parameter documentations has been truncated, see
107
- # {Cadenya::Models::ObjectiveEventWebhookData::Data::ObjectiveEvent} for more
108
- # details.
109
- #
110
- # @param data [Cadenya::Models::ObjectiveEventData]
111
- #
112
- # @param metadata [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
113
- #
114
- # @param context_window_id [String]
115
- #
116
- # @param info [Cadenya::Models::ObjectiveEventInfo]
117
- end
77
+ # @param objective_event [Cadenya::Models::ObjectiveEvent]
118
78
  end
119
79
  end
120
80
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cadenya
4
+ module Models
5
+ # @see Cadenya::Resources::Objectives#stream_events_streaming
6
+ class ObjectiveStreamEventsParams < Cadenya::Internal::Type::BaseModel
7
+ extend Cadenya::Internal::Type::RequestParameters::Converter
8
+ include Cadenya::Internal::Type::RequestParameters
9
+
10
+ # @!attribute workspace_id
11
+ #
12
+ # @return [String]
13
+ required :workspace_id, String
14
+
15
+ # @!attribute objective_id
16
+ #
17
+ # @return [String]
18
+ required :objective_id, String
19
+
20
+ # @!method initialize(workspace_id:, objective_id:, request_options: {})
21
+ # @param workspace_id [String]
22
+ # @param objective_id [String]
23
+ # @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}]
24
+ end
25
+ end
26
+ end
@@ -58,10 +58,8 @@ module Cadenya
58
58
 
59
59
  # @!attribute objective_event
60
60
  #
61
- # @return [Cadenya::Models::UnsafeUnwrapWebhookEvent::Data::ObjectiveEvent]
62
- required :objective_event,
63
- -> { Cadenya::UnsafeUnwrapWebhookEvent::Data::ObjectiveEvent },
64
- api_name: :objectiveEvent
61
+ # @return [Cadenya::Models::ObjectiveEvent]
62
+ required :objective_event, -> { Cadenya::ObjectiveEvent }, api_name: :objectiveEvent
65
63
 
66
64
  # @!method initialize(agent:, agent_variation:, objective:, objective_event:)
67
65
  # Some parameter documentations has been truncated, see
@@ -76,45 +74,7 @@ module Cadenya
76
74
  #
77
75
  # @param objective [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
78
76
  #
79
- # @param objective_event [Cadenya::Models::UnsafeUnwrapWebhookEvent::Data::ObjectiveEvent]
80
-
81
- # @see Cadenya::Models::UnsafeUnwrapWebhookEvent::Data#objective_event
82
- class ObjectiveEvent < Cadenya::Internal::Type::BaseModel
83
- # @!attribute data
84
- #
85
- # @return [Cadenya::Models::ObjectiveEventData]
86
- required :data, -> { Cadenya::ObjectiveEventData }
87
-
88
- # @!attribute metadata
89
- # Metadata for ephemeral operations and activities (e.g., objectives, executions,
90
- # runs)
91
- #
92
- # @return [Cadenya::Models::OperationMetadata]
93
- required :metadata, -> { Cadenya::OperationMetadata }
94
-
95
- # @!attribute context_window_id
96
- #
97
- # @return [String, nil]
98
- optional :context_window_id, String, api_name: :contextWindowId
99
-
100
- # @!attribute info
101
- #
102
- # @return [Cadenya::Models::ObjectiveEventInfo, nil]
103
- optional :info, -> { Cadenya::ObjectiveEventInfo }
104
-
105
- # @!method initialize(data:, metadata:, context_window_id: nil, info: nil)
106
- # Some parameter documentations has been truncated, see
107
- # {Cadenya::Models::UnsafeUnwrapWebhookEvent::Data::ObjectiveEvent} for more
108
- # details.
109
- #
110
- # @param data [Cadenya::Models::ObjectiveEventData]
111
- #
112
- # @param metadata [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
113
- #
114
- # @param context_window_id [String]
115
- #
116
- # @param info [Cadenya::Models::ObjectiveEventInfo]
117
- end
77
+ # @param objective_event [Cadenya::Models::ObjectiveEvent]
118
78
  end
119
79
  end
120
80
  end
@@ -58,10 +58,8 @@ module Cadenya
58
58
 
59
59
  # @!attribute objective_event
60
60
  #
61
- # @return [Cadenya::Models::UnwrapWebhookEvent::Data::ObjectiveEvent]
62
- required :objective_event,
63
- -> { Cadenya::UnwrapWebhookEvent::Data::ObjectiveEvent },
64
- api_name: :objectiveEvent
61
+ # @return [Cadenya::Models::ObjectiveEvent]
62
+ required :objective_event, -> { Cadenya::ObjectiveEvent }, api_name: :objectiveEvent
65
63
 
66
64
  # @!method initialize(agent:, agent_variation:, objective:, objective_event:)
67
65
  # Some parameter documentations has been truncated, see
@@ -76,44 +74,7 @@ module Cadenya
76
74
  #
77
75
  # @param objective [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
78
76
  #
79
- # @param objective_event [Cadenya::Models::UnwrapWebhookEvent::Data::ObjectiveEvent]
80
-
81
- # @see Cadenya::Models::UnwrapWebhookEvent::Data#objective_event
82
- class ObjectiveEvent < Cadenya::Internal::Type::BaseModel
83
- # @!attribute data
84
- #
85
- # @return [Cadenya::Models::ObjectiveEventData]
86
- required :data, -> { Cadenya::ObjectiveEventData }
87
-
88
- # @!attribute metadata
89
- # Metadata for ephemeral operations and activities (e.g., objectives, executions,
90
- # runs)
91
- #
92
- # @return [Cadenya::Models::OperationMetadata]
93
- required :metadata, -> { Cadenya::OperationMetadata }
94
-
95
- # @!attribute context_window_id
96
- #
97
- # @return [String, nil]
98
- optional :context_window_id, String, api_name: :contextWindowId
99
-
100
- # @!attribute info
101
- #
102
- # @return [Cadenya::Models::ObjectiveEventInfo, nil]
103
- optional :info, -> { Cadenya::ObjectiveEventInfo }
104
-
105
- # @!method initialize(data:, metadata:, context_window_id: nil, info: nil)
106
- # Some parameter documentations has been truncated, see
107
- # {Cadenya::Models::UnwrapWebhookEvent::Data::ObjectiveEvent} for more details.
108
- #
109
- # @param data [Cadenya::Models::ObjectiveEventData]
110
- #
111
- # @param metadata [Cadenya::Models::OperationMetadata] Metadata for ephemeral operations and activities (e.g., objectives, executions,
112
- #
113
- # @param context_window_id [String]
114
- #
115
- # @param info [Cadenya::Models::ObjectiveEventInfo]
116
- end
77
+ # @param objective_event [Cadenya::Models::ObjectiveEvent]
117
78
  end
118
79
  end
119
80
  end
@@ -183,6 +183,8 @@ module Cadenya
183
183
 
184
184
  ObjectiveError = Cadenya::Models::ObjectiveError
185
185
 
186
+ ObjectiveEvent = Cadenya::Models::ObjectiveEvent
187
+
186
188
  ObjectiveEventData = Cadenya::Models::ObjectiveEventData
187
189
 
188
190
  ObjectiveEventInfo = Cadenya::Models::ObjectiveEventInfo
@@ -203,6 +205,8 @@ module Cadenya
203
205
 
204
206
  ObjectiveSecret = Cadenya::Models::ObjectiveSecret
205
207
 
208
+ ObjectiveStreamEventsParams = Cadenya::Models::ObjectiveStreamEventsParams
209
+
206
210
  OperationMetadata = Cadenya::Models::OperationMetadata
207
211
 
208
212
  Page = Cadenya::Models::Page
@@ -222,7 +222,7 @@ module Cadenya
222
222
  #
223
223
  # @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
224
224
  #
225
- # @return [Cadenya::Models::ObjectiveContinueResponse]
225
+ # @return [Cadenya::Models::ObjectiveEvent]
226
226
  #
227
227
  # @see Cadenya::Models::ObjectiveContinueParams
228
228
  def continue(objective_id, params)
@@ -235,7 +235,7 @@ module Cadenya
235
235
  method: :post,
236
236
  path: ["v1/workspaces/%1$s/objectives/%2$s:continue", workspace_id, objective_id],
237
237
  body: parsed,
238
- model: Cadenya::Models::ObjectiveContinueResponse,
238
+ model: Cadenya::ObjectiveEvent,
239
239
  options: options
240
240
  )
241
241
  end
@@ -299,7 +299,7 @@ module Cadenya
299
299
  #
300
300
  # @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
301
301
  #
302
- # @return [Cadenya::Internal::CursorPagination<Cadenya::Models::ObjectiveListEventsResponse>]
302
+ # @return [Cadenya::Internal::CursorPagination<Cadenya::Models::ObjectiveEvent>]
303
303
  #
304
304
  # @see Cadenya::Models::ObjectiveListEventsParams
305
305
  def list_events(objective_id, params)
@@ -319,7 +319,34 @@ module Cadenya
319
319
  window_id: "windowId"
320
320
  ),
321
321
  page: Cadenya::Internal::CursorPagination,
322
- model: Cadenya::Models::ObjectiveListEventsResponse,
322
+ model: Cadenya::ObjectiveEvent,
323
+ options: options
324
+ )
325
+ end
326
+
327
+ # Streams events for an objective in real-time using server-sent events (SSE)
328
+ #
329
+ # @overload stream_events_streaming(objective_id, workspace_id:, request_options: {})
330
+ #
331
+ # @param objective_id [String]
332
+ # @param workspace_id [String]
333
+ # @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
334
+ #
335
+ # @return [Cadenya::Internal::Stream<Cadenya::Models::ObjectiveEvent>]
336
+ #
337
+ # @see Cadenya::Models::ObjectiveStreamEventsParams
338
+ def stream_events_streaming(objective_id, params)
339
+ parsed, options = Cadenya::ObjectiveStreamEventsParams.dump_request(params)
340
+ workspace_id =
341
+ parsed.delete(:workspace_id) do
342
+ raise ArgumentError.new("missing required path argument #{_1}")
343
+ end
344
+ @client.request(
345
+ method: :get,
346
+ path: ["v1/workspaces/%1$s/objectives/%2$s/events:stream", workspace_id, objective_id],
347
+ headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"},
348
+ stream: Cadenya::Internal::Stream,
349
+ model: Cadenya::ObjectiveEvent,
323
350
  options: options
324
351
  )
325
352
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cadenya
4
- VERSION = "0.22.0"
4
+ VERSION = "0.24.0"
5
5
  end
data/lib/cadenya.rb CHANGED
@@ -45,6 +45,7 @@ require_relative "cadenya/internal/type/array_of"
45
45
  require_relative "cadenya/internal/type/hash_of"
46
46
  require_relative "cadenya/internal/type/base_model"
47
47
  require_relative "cadenya/internal/type/base_page"
48
+ require_relative "cadenya/internal/type/base_stream"
48
49
  require_relative "cadenya/internal/type/request_parameters"
49
50
  require_relative "cadenya/internal"
50
51
  require_relative "cadenya/request_options"
@@ -53,6 +54,7 @@ require_relative "cadenya/errors"
53
54
  require_relative "cadenya/internal/transport/base_client"
54
55
  require_relative "cadenya/internal/transport/pooled_net_requester"
55
56
  require_relative "cadenya/client"
57
+ require_relative "cadenya/internal/stream"
56
58
  require_relative "cadenya/internal/cursor_pagination"
57
59
  require_relative "cadenya/models/account"
58
60
  require_relative "cadenya/models/account_info"
@@ -177,16 +179,15 @@ require_relative "cadenya/models/objective_config_snapshot"
177
179
  require_relative "cadenya/models/objective_context_window"
178
180
  require_relative "cadenya/models/objective_context_window_data"
179
181
  require_relative "cadenya/models/objective_continue_params"
180
- require_relative "cadenya/models/objective_continue_response"
181
182
  require_relative "cadenya/models/objective_create_params"
182
183
  require_relative "cadenya/models/objective_error"
184
+ require_relative "cadenya/models/objective_event"
183
185
  require_relative "cadenya/models/objective_event_data"
184
186
  require_relative "cadenya/models/objective_event_info"
185
187
  require_relative "cadenya/models/objective_event_webhook_data"
186
188
  require_relative "cadenya/models/objective_info"
187
189
  require_relative "cadenya/models/objective_list_context_windows_params"
188
190
  require_relative "cadenya/models/objective_list_events_params"
189
- require_relative "cadenya/models/objective_list_events_response"
190
191
  require_relative "cadenya/models/objective_list_params"
191
192
  require_relative "cadenya/models/objective_retrieve_params"
192
193
  require_relative "cadenya/models/objectives/feedback_create_params"
@@ -215,6 +216,7 @@ require_relative "cadenya/models/objectives/tool_call_list_params"
215
216
  require_relative "cadenya/models/objectives/tool_call_retrieve_params"
216
217
  require_relative "cadenya/models/objectives/tool_list_params"
217
218
  require_relative "cadenya/models/objective_secret"
219
+ require_relative "cadenya/models/objective_stream_events_params"
218
220
  require_relative "cadenya/models/operation_metadata"
219
221
  require_relative "cadenya/models/page"
220
222
  require_relative "cadenya/models/profile"
@@ -0,0 +1,18 @@
1
+ # typed: strong
2
+
3
+ module Cadenya
4
+ module Internal
5
+ class Stream
6
+ Message =
7
+ type_member(:in) { { fixed: Cadenya::Internal::Util::ServerSentEvent } }
8
+ Elem = type_member(:out)
9
+
10
+ include Cadenya::Internal::Type::BaseStream
11
+
12
+ # @api private
13
+ sig { override.returns(T::Enumerable[Elem]) }
14
+ private def iterator
15
+ end
16
+ end
17
+ end
18
+ end
@@ -49,7 +49,15 @@ module Cadenya
49
49
  ]
50
50
  ]
51
51
  ),
52
- stream: T.nilable(T::Class[T.anything]),
52
+ stream:
53
+ T.nilable(
54
+ T::Class[
55
+ Cadenya::Internal::Type::BaseStream[
56
+ T.anything,
57
+ Cadenya::Internal::Type::BaseModel
58
+ ]
59
+ ]
60
+ ),
53
61
  model: T.nilable(Cadenya::Internal::Type::Converter::Input),
54
62
  options: T.nilable(Cadenya::RequestOptions::OrHash)
55
63
  }
@@ -268,7 +276,15 @@ module Cadenya
268
276
  ]
269
277
  ]
270
278
  ),
271
- stream: T.nilable(T::Class[T.anything]),
279
+ stream:
280
+ T.nilable(
281
+ T::Class[
282
+ Cadenya::Internal::Type::BaseStream[
283
+ T.anything,
284
+ Cadenya::Internal::Type::BaseModel
285
+ ]
286
+ ]
287
+ ),
272
288
  model: T.nilable(Cadenya::Internal::Type::Converter::Input),
273
289
  options: T.nilable(Cadenya::RequestOptions::OrHash)
274
290
  ).returns(T.anything)
@@ -0,0 +1,75 @@
1
+ # typed: strong
2
+
3
+ module Cadenya
4
+ module Internal
5
+ module Type
6
+ # @api private
7
+ #
8
+ # This module provides a base implementation for streaming responses in the SDK.
9
+ module BaseStream
10
+ include Enumerable
11
+
12
+ Message = type_member(:in)
13
+ Elem = type_member(:out)
14
+
15
+ sig { returns(Integer) }
16
+ attr_reader :status
17
+
18
+ sig { returns(T::Hash[String, String]) }
19
+ attr_reader :headers
20
+
21
+ sig { void }
22
+ def close
23
+ end
24
+
25
+ # @api private
26
+ sig { overridable.returns(T::Enumerable[Elem]) }
27
+ private def iterator
28
+ end
29
+
30
+ sig { params(blk: T.proc.params(arg0: Elem).void).void }
31
+ def each(&blk)
32
+ end
33
+
34
+ sig { returns(T::Enumerator[Elem]) }
35
+ def to_enum
36
+ end
37
+
38
+ # @api private
39
+ sig do
40
+ params(
41
+ model:
42
+ T.any(T::Class[T.anything], Cadenya::Internal::Type::Converter),
43
+ url: URI::Generic,
44
+ status: Integer,
45
+ headers: T::Hash[String, String],
46
+ response: Net::HTTPResponse,
47
+ unwrap:
48
+ T.any(
49
+ Symbol,
50
+ Integer,
51
+ T::Array[T.any(Symbol, Integer)],
52
+ T.proc.params(arg0: T.anything).returns(T.anything)
53
+ ),
54
+ stream: T::Enumerable[Message]
55
+ ).void
56
+ end
57
+ def initialize(
58
+ model:,
59
+ url:,
60
+ status:,
61
+ headers:,
62
+ response:,
63
+ unwrap:,
64
+ stream:
65
+ )
66
+ end
67
+
68
+ # @api private
69
+ sig { returns(String) }
70
+ def inspect
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end