lingara 0.1.0.pre.alpha.13 → 0.2.0.pre.alpha.1

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +58 -2
  3. data/lib/lingara/client.rb +59 -10
  4. data/lib/lingara/events/catalogue.rb +20 -2
  5. data/lib/lingara/minted_token.rb +73 -0
  6. data/lib/lingara/models/allowance_row.rb +1 -1
  7. data/lib/lingara/models/app_context_slice.rb +1 -1
  8. data/lib/lingara/models/app_disabled_data.rb +263 -0
  9. data/lib/lingara/models/app_enabled_data.rb +263 -0
  10. data/lib/lingara/models/app_installed_data.rb +1 -1
  11. data/lib/lingara/models/app_uninstalled_data.rb +1 -1
  12. data/lib/lingara/models/create_lesson_plan_event_error.rb +1 -1
  13. data/lib/lingara/models/create_lesson_plan_event_phase.rb +1 -1
  14. data/lib/lingara/models/create_lesson_plan_event_result.rb +1 -1
  15. data/lib/lingara/models/create_lesson_plan_event_started.rb +1 -1
  16. data/lib/lingara/models/dialogue_entry.rb +303 -0
  17. data/lib/lingara/models/dialogue_turn_request.rb +442 -0
  18. data/lib/lingara/models/embed_token.rb +379 -0
  19. data/lib/lingara/models/embed_token_request.rb +331 -0
  20. data/lib/lingara/models/error_envelope.rb +1 -1
  21. data/lib/lingara/models/event_envelope.rb +1 -1
  22. data/lib/lingara/models/event_page.rb +1 -1
  23. data/lib/lingara/models/generate_vocabulary_event_done.rb +1 -1
  24. data/lib/lingara/models/generate_vocabulary_event_error.rb +1 -1
  25. data/lib/lingara/models/generate_vocabulary_event_item.rb +1 -1
  26. data/lib/lingara/models/generate_vocabulary_event_started.rb +1 -1
  27. data/lib/lingara/models/inbound_event_accepted.rb +1 -1
  28. data/lib/lingara/models/lesson_plan.rb +1 -1
  29. data/lib/lingara/models/lesson_plan_content.rb +1 -1
  30. data/lib/lingara/models/lesson_plan_create_request.rb +1 -1
  31. data/lib/lingara/models/lesson_plan_failed_data.rb +1 -1
  32. data/lib/lingara/models/lesson_plan_ready_data.rb +1 -1
  33. data/lib/lingara/models/notice.rb +1 -1
  34. data/lib/lingara/models/npc.rb +1 -1
  35. data/lib/lingara/models/plan_fail_reason.rb +1 -1
  36. data/lib/lingara/models/plan_pending.rb +1 -1
  37. data/lib/lingara/models/plan_phase.rb +1 -1
  38. data/lib/lingara/models/plan_question.rb +1 -1
  39. data/lib/lingara/models/plan_ready_status.rb +1 -1
  40. data/lib/lingara/models/plan_result.rb +1 -1
  41. data/lib/lingara/models/plan_set.rb +1 -1
  42. data/lib/lingara/models/plan_started.rb +1 -1
  43. data/lib/lingara/models/plan_status.rb +1 -1
  44. data/lib/lingara/models/plan_word.rb +1 -1
  45. data/lib/lingara/models/practice_completed_data.rb +291 -0
  46. data/lib/lingara/models/practice_item.rb +347 -0
  47. data/lib/lingara/models/practice_outcome.rb +45 -0
  48. data/lib/lingara/models/reaction_report.rb +1 -1
  49. data/lib/lingara/models/reaction_status.rb +1 -1
  50. data/lib/lingara/models/send_dialogue_turn_event_delta.rb +287 -0
  51. data/lib/lingara/models/send_dialogue_turn_event_done.rb +287 -0
  52. data/lib/lingara/models/send_dialogue_turn_event_error.rb +287 -0
  53. data/lib/lingara/models/send_dialogue_turn_event_notice.rb +287 -0
  54. data/lib/lingara/models/send_tutor_message_event_delta.rb +1 -1
  55. data/lib/lingara/models/send_tutor_message_event_done.rb +1 -1
  56. data/lib/lingara/models/send_tutor_message_event_error.rb +1 -1
  57. data/lib/lingara/models/send_tutor_message_event_notice.rb +1 -1
  58. data/lib/lingara/models/speaker.rb +41 -0
  59. data/lib/lingara/models/stream_error.rb +1 -1
  60. data/lib/lingara/models/stream_events_event_done.rb +1 -1
  61. data/lib/lingara/models/stream_events_event_error.rb +1 -1
  62. data/lib/lingara/models/stream_events_event_event.rb +1 -1
  63. data/lib/lingara/models/stream_lesson_plan_event_error.rb +1 -1
  64. data/lib/lingara/models/stream_lesson_plan_event_pending.rb +1 -1
  65. data/lib/lingara/models/stream_lesson_plan_event_phase.rb +1 -1
  66. data/lib/lingara/models/stream_lesson_plan_event_result.rb +1 -1
  67. data/lib/lingara/models/stream_lesson_plan_event_started.rb +1 -1
  68. data/lib/lingara/models/threshold_scope.rb +1 -1
  69. data/lib/lingara/models/turn_delta.rb +1 -1
  70. data/lib/lingara/models/turn_entry.rb +1 -1
  71. data/lib/lingara/models/turn_role.rb +1 -1
  72. data/lib/lingara/models/tutor_turn_request.rb +1 -1
  73. data/lib/lingara/models/usage.rb +1 -1
  74. data/lib/lingara/models/usage_ledger.rb +1 -1
  75. data/lib/lingara/models/usage_threshold_reached_data.rb +1 -1
  76. data/lib/lingara/models/version_detail.rb +1 -1
  77. data/lib/lingara/models/version_history_entry.rb +1 -1
  78. data/lib/lingara/models/version_list.rb +1 -1
  79. data/lib/lingara/models/version_spec.rb +1 -1
  80. data/lib/lingara/models/version_state.rb +1 -1
  81. data/lib/lingara/models/version_summary.rb +1 -1
  82. data/lib/lingara/models/vocab_example.rb +1 -1
  83. data/lib/lingara/models/vocab_item.rb +1 -1
  84. data/lib/lingara/models/vocab_meta.rb +1 -1
  85. data/lib/lingara/models/vocab_request.rb +1 -1
  86. data/lib/lingara/models/vocab_started.rb +1 -1
  87. data/lib/lingara/models/world_context_changed.rb +1 -1
  88. data/lib/lingara/models/world_practice_completed.rb +294 -0
  89. data/lib/lingara/models/world_practice_requested.rb +1 -1
  90. data/lib/lingara/operations.rb +27 -0
  91. data/lib/lingara/streams.rb +25 -0
  92. data/lib/lingara/version.rb +3 -3
  93. data/lib/lingara.rb +1 -0
  94. data/sig/lingara.rbs +33 -0
  95. metadata +18 -2
@@ -3,7 +3,7 @@
3
3
 
4
4
  #Generate vocabulary lists and lesson plans, and hold tutor conversations, in the languages Lingara teaches. Each call is paid for by the client that makes it: an `allowance` client spends its owner's allowance, and a `metered` client is billed for its usage.
5
5
 
6
- The version of the OpenAPI document: 2026-10-affable-towhee
6
+ The version of the OpenAPI document: 2026-10-golden-remora
7
7
 
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.14.0
@@ -0,0 +1,294 @@
1
+ =begin
2
+ #Lingara API
3
+
4
+ #Generate vocabulary lists and lesson plans, and hold tutor conversations, in the languages Lingara teaches. Each call is paid for by the client that makes it: an `allowance` client spends its owner's allowance, and a `metered` client is billed for its usage.
5
+
6
+ The version of the OpenAPI document: 2026-10-golden-remora
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.14.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Lingara
17
+ class WorldPracticeCompleted
18
+ attr_accessor :plan_id
19
+
20
+ attr_accessor :items
21
+
22
+ attr_accessor :completed
23
+
24
+ # Attribute mapping from ruby-style variable name to JSON key.
25
+ def self.attribute_map
26
+ {
27
+ :'plan_id' => :'plan_id',
28
+ :'items' => :'items',
29
+ :'completed' => :'completed'
30
+ }
31
+ end
32
+
33
+ # Returns attribute mapping this model knows about
34
+ def self.acceptable_attribute_map
35
+ attribute_map
36
+ end
37
+
38
+ # Returns all the JSON keys this model knows about
39
+ def self.acceptable_attributes
40
+ acceptable_attribute_map.values
41
+ end
42
+
43
+ # Attribute type mapping.
44
+ def self.openapi_types
45
+ {
46
+ :'plan_id' => :'String',
47
+ :'items' => :'Array<PracticeItem>',
48
+ :'completed' => :'Boolean'
49
+ }
50
+ end
51
+
52
+ # List of attributes with nullable: true
53
+ def self.openapi_nullable
54
+ Set.new([
55
+ ])
56
+ end
57
+
58
+ # Initializes the object
59
+ # @param [Hash] attributes Model attributes in the form of hash
60
+ def initialize(attributes = {})
61
+ if (!attributes.is_a?(Hash))
62
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Lingara::WorldPracticeCompleted` initialize method"
63
+ end
64
+
65
+ # check to see if the attribute exists and convert string to symbol for hash key
66
+ acceptable_attribute_map = self.class.acceptable_attribute_map
67
+ attributes = attributes.each_with_object({}) { |(k, v), h|
68
+ if (!acceptable_attribute_map.key?(k.to_sym))
69
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Lingara::WorldPracticeCompleted`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
70
+ end
71
+ h[k.to_sym] = v
72
+ }
73
+
74
+ if attributes.key?(:'plan_id')
75
+ self.plan_id = attributes[:'plan_id']
76
+ else
77
+ self.plan_id = nil
78
+ end
79
+
80
+ if attributes.key?(:'items')
81
+ if (value = attributes[:'items']).is_a?(Array)
82
+ self.items = value
83
+ end
84
+ else
85
+ self.items = nil
86
+ end
87
+
88
+ if attributes.key?(:'completed')
89
+ self.completed = attributes[:'completed']
90
+ else
91
+ self.completed = false
92
+ end
93
+ end
94
+
95
+ # Show invalid properties with the reasons. Usually used together with valid?
96
+ # @return Array for valid properties with the reasons
97
+ def list_invalid_properties
98
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
99
+ invalid_properties = Array.new
100
+ if @plan_id.nil?
101
+ invalid_properties.push('invalid value for "plan_id", plan_id cannot be nil.')
102
+ end
103
+
104
+ if @items.nil?
105
+ invalid_properties.push('invalid value for "items", items cannot be nil.')
106
+ end
107
+
108
+ if @items.length > 100
109
+ invalid_properties.push('invalid value for "items", number of items must be less than or equal to 100.')
110
+ end
111
+
112
+ if @items.length < 1
113
+ invalid_properties.push('invalid value for "items", number of items must be greater than or equal to 1.')
114
+ end
115
+
116
+ invalid_properties
117
+ end
118
+
119
+ # Check to see if the all the properties in the model are valid
120
+ # @return true if the model is valid
121
+ def valid?
122
+ warn '[DEPRECATED] the `valid?` method is obsolete'
123
+ return false if @plan_id.nil?
124
+ return false if @items.nil?
125
+ return false if @items.length > 100
126
+ return false if @items.length < 1
127
+ true
128
+ end
129
+
130
+ # Custom attribute writer method with validation
131
+ # @param [Object] plan_id Value to be assigned
132
+ def plan_id=(plan_id)
133
+ if plan_id.nil?
134
+ fail ArgumentError, 'plan_id cannot be nil'
135
+ end
136
+
137
+ @plan_id = plan_id
138
+ end
139
+
140
+ # Custom attribute writer method with validation
141
+ # @param [Object] items Value to be assigned
142
+ def items=(items)
143
+ if items.nil?
144
+ fail ArgumentError, 'items cannot be nil'
145
+ end
146
+
147
+ if items.length > 100
148
+ fail ArgumentError, 'invalid value for "items", number of items must be less than or equal to 100.'
149
+ end
150
+
151
+ if items.length < 1
152
+ fail ArgumentError, 'invalid value for "items", number of items must be greater than or equal to 1.'
153
+ end
154
+
155
+ @items = items
156
+ end
157
+
158
+ # Checks equality by comparing each attribute.
159
+ # @param [Object] Object to be compared
160
+ def ==(o)
161
+ return true if self.equal?(o)
162
+ self.class == o.class &&
163
+ plan_id == o.plan_id &&
164
+ items == o.items &&
165
+ completed == o.completed
166
+ end
167
+
168
+ # @see the `==` method
169
+ # @param [Object] Object to be compared
170
+ def eql?(o)
171
+ self == o
172
+ end
173
+
174
+ # Calculates hash code according to all attributes.
175
+ # @return [Integer] Hash code
176
+ def hash
177
+ [plan_id, items, completed].hash
178
+ end
179
+
180
+ # Builds the object from hash
181
+ # @param [Hash] attributes Model attributes in the form of hash
182
+ # @return [Object] Returns the model itself
183
+ def self.build_from_hash(attributes)
184
+ return nil unless attributes.is_a?(Hash)
185
+ attributes = attributes.transform_keys(&:to_sym)
186
+ transformed_hash = {}
187
+ openapi_types.each_pair do |key, type|
188
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
189
+ transformed_hash["#{key}"] = nil
190
+ elsif type =~ /\AArray<(.*)>/i
191
+ # check to ensure the input is an array given that the attribute
192
+ # is documented as an array but the input is not
193
+ if attributes[attribute_map[key]].is_a?(Array)
194
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
195
+ end
196
+ elsif !attributes[attribute_map[key]].nil?
197
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
198
+ end
199
+ end
200
+ new(transformed_hash)
201
+ end
202
+
203
+ # Deserializes the data based on type
204
+ # @param string type Data type
205
+ # @param string value Value to be deserialized
206
+ # @return [Object] Deserialized data
207
+ def self._deserialize(type, value)
208
+ case type.to_sym
209
+ when :Time
210
+ Time.parse(value)
211
+ when :Date
212
+ Date.parse(value)
213
+ when :String
214
+ value.to_s
215
+ when :Integer
216
+ value.to_i
217
+ when :Float
218
+ value.to_f
219
+ when :Boolean
220
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
221
+ true
222
+ else
223
+ false
224
+ end
225
+ when :Object
226
+ # generic object (usually a Hash), return directly
227
+ value
228
+ when /\AArray<(?<inner_type>.+)>\z/
229
+ inner_type = Regexp.last_match[:inner_type]
230
+ value.map { |v| _deserialize(inner_type, v) }
231
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
232
+ k_type = Regexp.last_match[:k_type]
233
+ v_type = Regexp.last_match[:v_type]
234
+ {}.tap do |hash|
235
+ value.each do |k, v|
236
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
237
+ end
238
+ end
239
+ else # model
240
+ # models (e.g. Pet) or oneOf
241
+ klass = Lingara.const_get(type)
242
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
243
+ end
244
+ end
245
+
246
+ # Returns the string representation of the object
247
+ # @return [String] String presentation of the object
248
+ def to_s
249
+ to_hash.to_s
250
+ end
251
+
252
+ # to_body is an alias to to_hash (backward compatibility)
253
+ # @return [Hash] Returns the object in the form of hash
254
+ def to_body
255
+ to_hash
256
+ end
257
+
258
+ # Returns the object in the form of hash
259
+ # @return [Hash] Returns the object in the form of hash
260
+ def to_hash
261
+ hash = {}
262
+ self.class.attribute_map.each_pair do |attr, param|
263
+ value = self.send(attr)
264
+ if value.nil?
265
+ is_nullable = self.class.openapi_nullable.include?(attr)
266
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
267
+ end
268
+
269
+ hash[param] = _to_hash(value)
270
+ end
271
+ hash
272
+ end
273
+
274
+ # Outputs non-array value in the form of hash
275
+ # For object, use to_hash. Otherwise, just return the value
276
+ # @param [Object] value Any valid value
277
+ # @return [Hash] Returns the value in the form of hash
278
+ def _to_hash(value)
279
+ if value.is_a?(Array)
280
+ value.compact.map { |v| _to_hash(v) }
281
+ elsif value.is_a?(Hash)
282
+ {}.tap do |hash|
283
+ value.each { |k, v| hash[k] = _to_hash(v) }
284
+ end
285
+ elsif value.respond_to? :to_hash
286
+ value.to_hash
287
+ else
288
+ value
289
+ end
290
+ end
291
+
292
+ end
293
+
294
+ end
@@ -3,7 +3,7 @@
3
3
 
4
4
  #Generate vocabulary lists and lesson plans, and hold tutor conversations, in the languages Lingara teaches. Each call is paid for by the client that makes it: an `allowance` client spends its owner's allowance, and a `metered` client is billed for its usage.
5
5
 
6
- The version of the OpenAPI document: 2026-10-affable-towhee
6
+ The version of the OpenAPI document: 2026-10-golden-remora
7
7
 
8
8
  Generated by: https://openapi-generator.tech
9
9
  Generator version: 7.14.0
@@ -6,6 +6,15 @@ module Lingara
6
6
  # is its terminal table: :yield (yielded, then the stream ends), :quiet
7
7
  # (a Done payload, never yielded) and :raise (the error event).
8
8
  OPERATIONS = {
9
+ "createEmbedToken" => {
10
+ method: "POST",
11
+ path: "/v1/embed/tokens",
12
+ path_params: [].freeze,
13
+ needs_token: true,
14
+ request_body: "EmbedTokenRequest",
15
+ response: "EmbedToken",
16
+ stream: nil
17
+ }.freeze,
9
18
  "createLessonPlan" => {
10
19
  method: "POST",
11
20
  path: "/v1/lesson-plans",
@@ -15,6 +24,15 @@ module Lingara
15
24
  response: nil,
16
25
  stream: {union: "CreateLessonPlanEvent", events: {"started" => "CreateLessonPlanEventStarted", "phase" => "CreateLessonPlanEventPhase", "result" => "CreateLessonPlanEventResult", "error" => "CreateLessonPlanEventError"}.freeze, ends: {"result" => :yield, "error" => :raise}.freeze}.freeze
17
26
  }.freeze,
27
+ "deleteEmbedPlayer" => {
28
+ method: "DELETE",
29
+ path: "/v1/embed/players/{player_ref}",
30
+ path_params: ["player_ref"].freeze,
31
+ needs_token: true,
32
+ request_body: nil,
33
+ response: nil,
34
+ stream: nil
35
+ }.freeze,
18
36
  "generateVocabulary" => {
19
37
  method: "POST",
20
38
  path: "/v1/vocab/stream",
@@ -87,6 +105,15 @@ module Lingara
87
105
  response: "EventPage",
88
106
  stream: nil
89
107
  }.freeze,
108
+ "sendDialogueTurn" => {
109
+ method: "POST",
110
+ path: "/v1/embed/dialogue/turns",
111
+ path_params: [].freeze,
112
+ needs_token: true,
113
+ request_body: "DialogueTurnRequest",
114
+ response: nil,
115
+ stream: {union: "SendDialogueTurnEvent", events: {"delta" => "SendDialogueTurnEventDelta", "notice" => "SendDialogueTurnEventNotice", "done" => "SendDialogueTurnEventDone", "error" => "SendDialogueTurnEventError"}.freeze, ends: {"done" => :quiet, "error" => :raise}.freeze}.freeze
116
+ }.freeze,
90
117
  "sendEvent" => {
91
118
  method: "POST",
92
119
  path: "/v1/events",
@@ -51,6 +51,31 @@ module Lingara
51
51
  end
52
52
  end
53
53
 
54
+ # One event of sendDialogueTurn's stream: `case event in SendDialogueTurnEvent` matches
55
+ # any of its branches. The error branch, and a Done-bodied one, are never
56
+ # yielded.
57
+ module SendDialogueTurnEvent
58
+ BRANCHES = {
59
+ "delta" => SendDialogueTurnEventDelta,
60
+ "notice" => SendDialogueTurnEventNotice,
61
+ "done" => SendDialogueTurnEventDone,
62
+ "error" => SendDialogueTurnEventError
63
+ }.freeze
64
+
65
+ def self.===(other)
66
+ BRANCHES.value?(other.class)
67
+ end
68
+
69
+ # The branch for a known event name, decoded from its `data` JSON text,
70
+ # or nil for an unknown name. A known event whose data is not a JSON
71
+ # object, or that its branch refuses, raises TransportError
72
+ # :malformed_event.
73
+ def self.decode(name, data)
74
+ branch = BRANCHES[name]
75
+ branch && Lingara::Decoding.event(branch, name, data)
76
+ end
77
+ end
78
+
54
79
  # One event of sendTutorMessage's stream: `case event in SendTutorMessageEvent` matches
55
80
  # any of its branches. The error branch, and a Done-bodied one, are never
56
81
  # yielded.
@@ -2,12 +2,12 @@
2
2
 
3
3
  module Lingara
4
4
  # This library's released version, SemVer, sent in every User-Agent (K6).
5
- VERSION = "0.1.0-alpha.13"
5
+ VERSION = "0.2.0-alpha.1"
6
6
 
7
7
  # The same version in RubyGems' spelling, which the gemspec uses.
8
- GEM_VERSION = "0.1.0.pre.alpha.13"
8
+ GEM_VERSION = "0.2.0.pre.alpha.1"
9
9
 
10
10
  # The /v1 version this library's models were generated from. A response
11
11
  # served under another version logs one warning per version id.
12
- GENERATED_FOR_VERSION = "2026-10-affable-towhee"
12
+ GENERATED_FOR_VERSION = "2026-10-golden-remora"
13
13
  end
data/lib/lingara.rb CHANGED
@@ -13,6 +13,7 @@ require_relative "lingara/user_agent"
13
13
  require_relative "lingara/deprecation"
14
14
  require_relative "lingara/sse_decoder"
15
15
  require_relative "lingara/response"
16
+ require_relative "lingara/minted_token"
16
17
 
17
18
  Dir[File.join(__dir__, "lingara/models/*.rb")].sort.each { |file| require file }
18
19
 
data/sig/lingara.rbs CHANGED
@@ -67,6 +67,26 @@ module Lingara
67
67
  def tail_events: (?cursor: String?, ?start: (String | Symbol)?, ?types: Array[String]?) { (Events::Event) -> void } -> bot
68
68
  | (?cursor: String?, ?start: (String | Symbol)?, ?types: Array[String]?) -> Events::Tail
69
69
  def send_event: (Events::InboundEvent event, ?idempotency_key: String?) -> Response
70
+
71
+ # ADR 1.10.26w: embedding. create_embed_token's Response holds a MintedToken.
72
+ def create_embed_token: (**untyped body) -> Response
73
+ def delete_embed_player: (String player_ref) -> Response
74
+ def send_dialogue_turn: (**untyped body) { (event) -> void } -> StreamResult
75
+ end
76
+
77
+ class MintedToken
78
+ PREFIX: String
79
+ FIELDS: Hash[String, untyped]
80
+
81
+ attr_reader token: AccessToken
82
+ attr_reader expires_at: Time
83
+ attr_reader expires_in: Integer
84
+ attr_reader subject: String
85
+ attr_reader scopes: Array[String]
86
+ attr_reader account_linked: bool
87
+
88
+ def self.decode: (String body) -> MintedToken
89
+ def initialize: (token: AccessToken, expires_at: Time, expires_in: Integer, subject: String, scopes: Array[String], account_linked: bool) -> void
70
90
  end
71
91
 
72
92
  # ADR 30.9.26aa: the event union, the verifier, the feed and the tail.
@@ -109,6 +129,18 @@ module Lingara
109
129
  include Event
110
130
  end
111
131
 
132
+ class AppDisabled < ::Data
133
+ include Event
134
+ end
135
+
136
+ class AppEnabled < ::Data
137
+ include Event
138
+ end
139
+
140
+ class PracticeCompleted < ::Data
141
+ include Event
142
+ end
143
+
112
144
  class UnknownEvent < ::Data
113
145
  include Event
114
146
  end
@@ -121,6 +153,7 @@ module Lingara
121
153
 
122
154
  def self.world_context_changed: (untyped data) -> InboundEvent
123
155
  def self.world_practice_requested: (untyped data) -> InboundEvent
156
+ def self.world_practice_completed: (untyped data) -> InboundEvent
124
157
  def to_hash: () -> Hash[String, untyped]
125
158
  end
126
159
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lingara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.alpha.13
4
+ version: 0.2.0.pre.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spinning Cat Studios
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-06 00:00:00.000000000 Z
11
+ date: 2026-10-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Generate vocabulary lists and lesson plans, and hold tutor conversations,
14
14
  through the Lingara API. Streams are blocks or Enumerables; the standard library
@@ -32,14 +32,21 @@ files:
32
32
  - lib/lingara/events/feed.rb
33
33
  - lib/lingara/events/tail.rb
34
34
  - lib/lingara/events/webhook.rb
35
+ - lib/lingara/minted_token.rb
35
36
  - lib/lingara/models/allowance_row.rb
36
37
  - lib/lingara/models/app_context_slice.rb
38
+ - lib/lingara/models/app_disabled_data.rb
39
+ - lib/lingara/models/app_enabled_data.rb
37
40
  - lib/lingara/models/app_installed_data.rb
38
41
  - lib/lingara/models/app_uninstalled_data.rb
39
42
  - lib/lingara/models/create_lesson_plan_event_error.rb
40
43
  - lib/lingara/models/create_lesson_plan_event_phase.rb
41
44
  - lib/lingara/models/create_lesson_plan_event_result.rb
42
45
  - lib/lingara/models/create_lesson_plan_event_started.rb
46
+ - lib/lingara/models/dialogue_entry.rb
47
+ - lib/lingara/models/dialogue_turn_request.rb
48
+ - lib/lingara/models/embed_token.rb
49
+ - lib/lingara/models/embed_token_request.rb
43
50
  - lib/lingara/models/error_envelope.rb
44
51
  - lib/lingara/models/event_envelope.rb
45
52
  - lib/lingara/models/event_page.rb
@@ -65,12 +72,20 @@ files:
65
72
  - lib/lingara/models/plan_started.rb
66
73
  - lib/lingara/models/plan_status.rb
67
74
  - lib/lingara/models/plan_word.rb
75
+ - lib/lingara/models/practice_completed_data.rb
76
+ - lib/lingara/models/practice_item.rb
77
+ - lib/lingara/models/practice_outcome.rb
68
78
  - lib/lingara/models/reaction_report.rb
69
79
  - lib/lingara/models/reaction_status.rb
80
+ - lib/lingara/models/send_dialogue_turn_event_delta.rb
81
+ - lib/lingara/models/send_dialogue_turn_event_done.rb
82
+ - lib/lingara/models/send_dialogue_turn_event_error.rb
83
+ - lib/lingara/models/send_dialogue_turn_event_notice.rb
70
84
  - lib/lingara/models/send_tutor_message_event_delta.rb
71
85
  - lib/lingara/models/send_tutor_message_event_done.rb
72
86
  - lib/lingara/models/send_tutor_message_event_error.rb
73
87
  - lib/lingara/models/send_tutor_message_event_notice.rb
88
+ - lib/lingara/models/speaker.rb
74
89
  - lib/lingara/models/stream_error.rb
75
90
  - lib/lingara/models/stream_events_event_done.rb
76
91
  - lib/lingara/models/stream_events_event_error.rb
@@ -100,6 +115,7 @@ files:
100
115
  - lib/lingara/models/vocab_request.rb
101
116
  - lib/lingara/models/vocab_started.rb
102
117
  - lib/lingara/models/world_context_changed.rb
118
+ - lib/lingara/models/world_practice_completed.rb
103
119
  - lib/lingara/models/world_practice_requested.rb
104
120
  - lib/lingara/operations.rb
105
121
  - lib/lingara/response.rb