legion-data 1.7.3 → 1.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.pre-commit-config.yaml +29 -0
  3. data/AGENTS.md +66 -13
  4. data/CHANGELOG.md +29 -0
  5. data/CLAUDE.md +44 -307
  6. data/README.md +119 -7
  7. data/lib/legion/data/connection.rb +3 -1
  8. data/lib/legion/data/migrations/077_create_llm_conversations.rb +32 -0
  9. data/lib/legion/data/migrations/078_create_llm_messages.rb +33 -0
  10. data/lib/legion/data/migrations/079_create_llm_message_inference_requests.rb +47 -0
  11. data/lib/legion/data/migrations/080_create_llm_message_inference_responses.rb +39 -0
  12. data/lib/legion/data/migrations/081_add_llm_message_inference_foreign_keys.rb +17 -0
  13. data/lib/legion/data/migrations/082_create_llm_route_attempts.rb +31 -0
  14. data/lib/legion/data/migrations/083_create_llm_message_inference_metrics.rb +36 -0
  15. data/lib/legion/data/migrations/084_create_llm_tool_calls.rb +32 -0
  16. data/lib/legion/data/migrations/085_add_llm_message_tool_call_foreign_key.rb +15 -0
  17. data/lib/legion/data/migrations/086_create_llm_tool_call_attempts.rb +30 -0
  18. data/lib/legion/data/migrations/087_create_llm_conversation_compactions.rb +31 -0
  19. data/lib/legion/data/migrations/088_create_llm_policy_evaluations.rb +33 -0
  20. data/lib/legion/data/migrations/089_create_llm_security_events.rb +33 -0
  21. data/lib/legion/data/migrations/090_create_llm_registry_events.rb +23 -0
  22. data/lib/legion/data/migrations/091_create_portable_identity_providers.rb +35 -0
  23. data/lib/legion/data/migrations/092_create_portable_identity_principals.rb +25 -0
  24. data/lib/legion/data/migrations/093_create_portable_identities.rb +31 -0
  25. data/lib/legion/data/migrations/094_create_portable_identity_groups.rb +21 -0
  26. data/lib/legion/data/migrations/095_create_portable_identity_group_memberships.rb +25 -0
  27. data/lib/legion/data/migrations/096_create_portable_identity_audit_log.rb +26 -0
  28. data/lib/legion/data/migrations/097_add_llm_dispatch_fields.rb +16 -0
  29. data/lib/legion/data/model.rb +11 -1
  30. data/lib/legion/data/models/apollo/access_log.rb +17 -0
  31. data/lib/legion/data/models/apollo/entries.rb +22 -0
  32. data/lib/legion/data/models/apollo/expertise.rb +16 -0
  33. data/lib/legion/data/models/apollo/model_helpers.rb +17 -0
  34. data/lib/legion/data/models/apollo/operation.rb +16 -0
  35. data/lib/legion/data/models/apollo/relation.rb +18 -0
  36. data/lib/legion/data/models/function.rb +1 -0
  37. data/lib/legion/data/models/identity/audit_log.rb +20 -0
  38. data/lib/legion/data/models/identity/group.rb +28 -0
  39. data/lib/legion/data/models/identity/group_memberships.rb +28 -0
  40. data/lib/legion/data/models/identity/identity.rb +24 -0
  41. data/lib/legion/data/models/identity/model_helpers.rb +86 -0
  42. data/lib/legion/data/models/identity/principal.rb +37 -0
  43. data/lib/legion/data/models/identity/providers.rb +34 -0
  44. data/lib/legion/data/models/identity.rb +8 -0
  45. data/lib/legion/data/models/identity_group.rb +13 -0
  46. data/lib/legion/data/models/identity_provider.rb +8 -0
  47. data/lib/legion/data/models/llm/conversation.rb +25 -0
  48. data/lib/legion/data/models/llm/conversation_compaction.rb +22 -0
  49. data/lib/legion/data/models/llm/message.rb +105 -0
  50. data/lib/legion/data/models/llm/message_inference_metric.rb +46 -0
  51. data/lib/legion/data/models/llm/message_inference_request.rb +80 -0
  52. data/lib/legion/data/models/llm/message_inference_response.rb +23 -0
  53. data/lib/legion/data/models/llm/model_helpers.rb +18 -0
  54. data/lib/legion/data/models/llm/policy_evaluation.rb +20 -0
  55. data/lib/legion/data/models/llm/registry_event.rb +15 -0
  56. data/lib/legion/data/models/llm/route_attempt.rb +18 -0
  57. data/lib/legion/data/models/llm/security_event.rb +66 -0
  58. data/lib/legion/data/models/llm/tool_call.rb +21 -0
  59. data/lib/legion/data/models/llm/tool_call_attempt.rb +18 -0
  60. data/lib/legion/data/models/node.rb +2 -1
  61. data/lib/legion/data/models/principal.rb +13 -0
  62. data/lib/legion/data/models/rbac/cross_team_grants.rb +25 -0
  63. data/lib/legion/data/models/rbac/model_helpers.rb +25 -0
  64. data/lib/legion/data/models/rbac/role_assignments.rb +25 -0
  65. data/lib/legion/data/models/rbac/runner_grants.rb +23 -0
  66. data/lib/legion/data/models/relationship.rb +1 -0
  67. data/lib/legion/data/models/runner.rb +24 -2
  68. data/lib/legion/data/models/task.rb +4 -0
  69. data/lib/legion/data/version.rb +1 -1
  70. data/scripts/pre-commit-rubocop.sh +16 -0
  71. metadata +54 -1
@@ -5,10 +5,32 @@ module Legion
5
5
  module Data
6
6
  module Model
7
7
  class Runner < Sequel::Model
8
- many_to_one :chain
9
- one_to_many :task
10
8
  one_to_many :functions
11
9
  many_to_one :extension
10
+
11
+ def chain
12
+ chains_dataset.first
13
+ end
14
+
15
+ def chains_dataset
16
+ Legion::Data::Model::Chain.where(id: relationships_dataset.select(:chain_id))
17
+ end
18
+
19
+ def task
20
+ task_dataset.all
21
+ end
22
+
23
+ def task_dataset
24
+ Legion::Data::Model::Task.where(function_id: functions_dataset.select(:id))
25
+ end
26
+
27
+ def relationships_dataset
28
+ function_ids = functions_dataset.select(:id)
29
+
30
+ Legion::Data::Model::Relationship
31
+ .where(trigger_id: function_ids)
32
+ .or(action_id: function_ids)
33
+ end
12
34
  end
13
35
  end
14
36
  end
@@ -12,12 +12,16 @@ module Legion
12
12
  completed complete failed error cancelled canceled timeout timed_out
13
13
  ].freeze
14
14
 
15
+ many_to_one :function
15
16
  many_to_one :relationship
16
17
  one_to_many :task_log
18
+ one_to_many :task_logs, class: 'Legion::Data::Model::TaskLog'
17
19
  many_to_one :parent, class: self
18
20
  one_to_many :children, key: :parent_id, class: self
19
21
  many_to_one :master, class: self
20
22
  one_to_many :slave, key: :master_id, class: self
23
+ one_to_many :slaves, key: :master_id, class: self
24
+ many_to_one :digital_worker, key: :worker_id, primary_key: :worker_id
21
25
 
22
26
  def self.idempotency_key_for(payload)
23
27
  Digest::SHA256.hexdigest(Legion::JSON.dump(canonical_payload(payload)))
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Data
5
- VERSION = '1.7.3'
5
+ VERSION = '1.8.0'
6
6
  end
7
7
  end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bash
2
+ # Pre-commit hook: run RuboCop with autofix on staged Ruby files.
3
+ set -uo pipefail
4
+
5
+ FILES=("$@")
6
+
7
+ if command -v rubocop >/dev/null 2>&1; then
8
+ exec rubocop -A --force-exclusion "${FILES[@]}"
9
+ fi
10
+
11
+ if bundle exec rubocop -v >/dev/null 2>&1; then
12
+ exec bundle exec rubocop -A --force-exclusion "${FILES[@]}"
13
+ fi
14
+
15
+ echo "RuboCop is not available locally; CI will enforce RuboCop."
16
+ exit 0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-data
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.3
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -107,6 +107,7 @@ files:
107
107
  - ".github/dependabot.yml"
108
108
  - ".github/workflows/ci.yml"
109
109
  - ".gitignore"
110
+ - ".pre-commit-config.yaml"
110
111
  - ".rubocop.yml"
111
112
  - AGENTS.md
112
113
  - CHANGELOG.md
@@ -222,7 +223,34 @@ files:
222
223
  - lib/legion/data/migrations/074_widen_apollo_entry_identifiers.rb
223
224
  - lib/legion/data/migrations/075_add_task_idempotency.rb
224
225
  - lib/legion/data/migrations/076_create_extract_step_timings.rb
226
+ - lib/legion/data/migrations/077_create_llm_conversations.rb
227
+ - lib/legion/data/migrations/078_create_llm_messages.rb
228
+ - lib/legion/data/migrations/079_create_llm_message_inference_requests.rb
229
+ - lib/legion/data/migrations/080_create_llm_message_inference_responses.rb
230
+ - lib/legion/data/migrations/081_add_llm_message_inference_foreign_keys.rb
231
+ - lib/legion/data/migrations/082_create_llm_route_attempts.rb
232
+ - lib/legion/data/migrations/083_create_llm_message_inference_metrics.rb
233
+ - lib/legion/data/migrations/084_create_llm_tool_calls.rb
234
+ - lib/legion/data/migrations/085_add_llm_message_tool_call_foreign_key.rb
235
+ - lib/legion/data/migrations/086_create_llm_tool_call_attempts.rb
236
+ - lib/legion/data/migrations/087_create_llm_conversation_compactions.rb
237
+ - lib/legion/data/migrations/088_create_llm_policy_evaluations.rb
238
+ - lib/legion/data/migrations/089_create_llm_security_events.rb
239
+ - lib/legion/data/migrations/090_create_llm_registry_events.rb
240
+ - lib/legion/data/migrations/091_create_portable_identity_providers.rb
241
+ - lib/legion/data/migrations/092_create_portable_identity_principals.rb
242
+ - lib/legion/data/migrations/093_create_portable_identities.rb
243
+ - lib/legion/data/migrations/094_create_portable_identity_groups.rb
244
+ - lib/legion/data/migrations/095_create_portable_identity_group_memberships.rb
245
+ - lib/legion/data/migrations/096_create_portable_identity_audit_log.rb
246
+ - lib/legion/data/migrations/097_add_llm_dispatch_fields.rb
225
247
  - lib/legion/data/model.rb
248
+ - lib/legion/data/models/apollo/access_log.rb
249
+ - lib/legion/data/models/apollo/entries.rb
250
+ - lib/legion/data/models/apollo/expertise.rb
251
+ - lib/legion/data/models/apollo/model_helpers.rb
252
+ - lib/legion/data/models/apollo/operation.rb
253
+ - lib/legion/data/models/apollo/relation.rb
226
254
  - lib/legion/data/models/apollo_access_log.rb
227
255
  - lib/legion/data/models/apollo_entry.rb
228
256
  - lib/legion/data/models/apollo_expertise.rb
@@ -235,12 +263,36 @@ files:
235
263
  - lib/legion/data/models/extract_step_timing.rb
236
264
  - lib/legion/data/models/function.rb
237
265
  - lib/legion/data/models/identity.rb
266
+ - lib/legion/data/models/identity/audit_log.rb
267
+ - lib/legion/data/models/identity/group.rb
268
+ - lib/legion/data/models/identity/group_memberships.rb
269
+ - lib/legion/data/models/identity/identity.rb
270
+ - lib/legion/data/models/identity/model_helpers.rb
271
+ - lib/legion/data/models/identity/principal.rb
272
+ - lib/legion/data/models/identity/providers.rb
238
273
  - lib/legion/data/models/identity_audit_log.rb
239
274
  - lib/legion/data/models/identity_group.rb
240
275
  - lib/legion/data/models/identity_group_membership.rb
241
276
  - lib/legion/data/models/identity_provider.rb
277
+ - lib/legion/data/models/llm/conversation.rb
278
+ - lib/legion/data/models/llm/conversation_compaction.rb
279
+ - lib/legion/data/models/llm/message.rb
280
+ - lib/legion/data/models/llm/message_inference_metric.rb
281
+ - lib/legion/data/models/llm/message_inference_request.rb
282
+ - lib/legion/data/models/llm/message_inference_response.rb
283
+ - lib/legion/data/models/llm/model_helpers.rb
284
+ - lib/legion/data/models/llm/policy_evaluation.rb
285
+ - lib/legion/data/models/llm/registry_event.rb
286
+ - lib/legion/data/models/llm/route_attempt.rb
287
+ - lib/legion/data/models/llm/security_event.rb
288
+ - lib/legion/data/models/llm/tool_call.rb
289
+ - lib/legion/data/models/llm/tool_call_attempt.rb
242
290
  - lib/legion/data/models/node.rb
243
291
  - lib/legion/data/models/principal.rb
292
+ - lib/legion/data/models/rbac/cross_team_grants.rb
293
+ - lib/legion/data/models/rbac/model_helpers.rb
294
+ - lib/legion/data/models/rbac/role_assignments.rb
295
+ - lib/legion/data/models/rbac/runner_grants.rb
244
296
  - lib/legion/data/models/rbac_cross_team_grant.rb
245
297
  - lib/legion/data/models/rbac_role_assignment.rb
246
298
  - lib/legion/data/models/rbac_runner_grant.rb
@@ -257,6 +309,7 @@ files:
257
309
  - lib/legion/data/storage_tiers.rb
258
310
  - lib/legion/data/vector.rb
259
311
  - lib/legion/data/version.rb
312
+ - scripts/pre-commit-rubocop.sh
260
313
  homepage: https://github.com/LegionIO/legion-data
261
314
  licenses:
262
315
  - Apache-2.0