a2ui-rails 0.1.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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +373 -0
  3. data/lib/a2ui/modules/action_handler.rb +25 -0
  4. data/lib/a2ui/modules/data_validator.rb +22 -0
  5. data/lib/a2ui/modules/input_parser.rb +25 -0
  6. data/lib/a2ui/modules/layout_adapter.rb +25 -0
  7. data/lib/a2ui/modules/surface.rb +66 -0
  8. data/lib/a2ui/modules/surface_manager.rb +64 -0
  9. data/lib/a2ui/modules/ui_generator.rb +25 -0
  10. data/lib/a2ui/modules/ui_updater.rb +26 -0
  11. data/lib/a2ui/modules.rb +17 -0
  12. data/lib/a2ui/signatures/adapt_layout.rb +19 -0
  13. data/lib/a2ui/signatures/generate_ui.rb +20 -0
  14. data/lib/a2ui/signatures/handle_action.rb +23 -0
  15. data/lib/a2ui/signatures/parse_input.rb +21 -0
  16. data/lib/a2ui/signatures/update_ui.rb +21 -0
  17. data/lib/a2ui/signatures/validate_data.rb +18 -0
  18. data/lib/a2ui/signatures.rb +12 -0
  19. data/lib/a2ui/types/action.rb +9 -0
  20. data/lib/a2ui/types/action_response_type.rb +13 -0
  21. data/lib/a2ui/types/alignment.rb +13 -0
  22. data/lib/a2ui/types/boolean_value.rb +9 -0
  23. data/lib/a2ui/types/button_component.rb +12 -0
  24. data/lib/a2ui/types/card_component.rb +11 -0
  25. data/lib/a2ui/types/check_box_component.rb +10 -0
  26. data/lib/a2ui/types/column_component.rb +12 -0
  27. data/lib/a2ui/types/context_binding.rb +9 -0
  28. data/lib/a2ui/types/data_driven_children.rb +9 -0
  29. data/lib/a2ui/types/data_update.rb +9 -0
  30. data/lib/a2ui/types/distribution.rb +15 -0
  31. data/lib/a2ui/types/divider_component.rb +9 -0
  32. data/lib/a2ui/types/explicit_children.rb +8 -0
  33. data/lib/a2ui/types/icon_component.rb +10 -0
  34. data/lib/a2ui/types/image_component.rb +11 -0
  35. data/lib/a2ui/types/image_fit.rb +14 -0
  36. data/lib/a2ui/types/input_type.rb +16 -0
  37. data/lib/a2ui/types/list_component.rb +10 -0
  38. data/lib/a2ui/types/literal_value.rb +8 -0
  39. data/lib/a2ui/types/number_value.rb +9 -0
  40. data/lib/a2ui/types/object_value.rb +9 -0
  41. data/lib/a2ui/types/orientation.rb +11 -0
  42. data/lib/a2ui/types/path_reference.rb +8 -0
  43. data/lib/a2ui/types/row_component.rb +12 -0
  44. data/lib/a2ui/types/screen_size.rb +12 -0
  45. data/lib/a2ui/types/select_component.rb +12 -0
  46. data/lib/a2ui/types/slider_component.rb +13 -0
  47. data/lib/a2ui/types/stream_action.rb +16 -0
  48. data/lib/a2ui/types/stream_op.rb +10 -0
  49. data/lib/a2ui/types/string_value.rb +9 -0
  50. data/lib/a2ui/types/text_component.rb +10 -0
  51. data/lib/a2ui/types/text_field_component.rb +13 -0
  52. data/lib/a2ui/types/text_usage_hint.rb +16 -0
  53. data/lib/a2ui/types/user_action.rb +11 -0
  54. data/lib/a2ui/types/validation_issue.rb +10 -0
  55. data/lib/a2ui/types.rb +91 -0
  56. data/lib/a2ui/version.rb +6 -0
  57. data/lib/a2ui.rb +7 -0
  58. metadata +130 -0
data/lib/a2ui/types.rb ADDED
@@ -0,0 +1,91 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require 'sorbet-runtime'
5
+
6
+ # Enums
7
+ require_relative 'types/text_usage_hint'
8
+ require_relative 'types/image_fit'
9
+ require_relative 'types/input_type'
10
+ require_relative 'types/distribution'
11
+ require_relative 'types/alignment'
12
+ require_relative 'types/orientation'
13
+ require_relative 'types/stream_action'
14
+ require_relative 'types/action_response_type'
15
+ require_relative 'types/screen_size'
16
+
17
+ # Value types
18
+ require_relative 'types/literal_value'
19
+ require_relative 'types/path_reference'
20
+
21
+ # Children types
22
+ require_relative 'types/explicit_children'
23
+ require_relative 'types/data_driven_children'
24
+
25
+ # Data value types
26
+ require_relative 'types/string_value'
27
+ require_relative 'types/number_value'
28
+ require_relative 'types/boolean_value'
29
+ require_relative 'types/object_value'
30
+
31
+ # Action types
32
+ require_relative 'types/context_binding'
33
+ require_relative 'types/action'
34
+ require_relative 'types/user_action'
35
+ require_relative 'types/validation_issue'
36
+
37
+ module A2UI
38
+ # =============================================================================
39
+ # TYPE ALIASES (Union Types)
40
+ # Must be defined after all constituent types are loaded
41
+ # =============================================================================
42
+
43
+ # Value is either a literal string OR a path to the data model
44
+ Value = T.type_alias { T.any(LiteralValue, PathReference) }
45
+
46
+ # Children are either an explicit ID list OR data-driven from a path
47
+ Children = T.type_alias { T.any(ExplicitChildren, DataDrivenChildren) }
48
+
49
+ # Data model values can be string, number, boolean, or nested object
50
+ DataValue = T.type_alias { T.any(StringValue, NumberValue, BooleanValue, ObjectValue) }
51
+ end
52
+
53
+ # Components (depend on type aliases above)
54
+ require_relative 'types/text_component'
55
+ require_relative 'types/image_component'
56
+ require_relative 'types/icon_component'
57
+ require_relative 'types/button_component'
58
+ require_relative 'types/text_field_component'
59
+ require_relative 'types/check_box_component'
60
+ require_relative 'types/slider_component'
61
+ require_relative 'types/select_component'
62
+ require_relative 'types/row_component'
63
+ require_relative 'types/column_component'
64
+ require_relative 'types/card_component'
65
+ require_relative 'types/list_component'
66
+ require_relative 'types/divider_component'
67
+
68
+ module A2UI
69
+ # Component union type - all possible component types
70
+ Component = T.type_alias do
71
+ T.any(
72
+ TextComponent,
73
+ ImageComponent,
74
+ IconComponent,
75
+ ButtonComponent,
76
+ TextFieldComponent,
77
+ CheckBoxComponent,
78
+ SliderComponent,
79
+ SelectComponent,
80
+ RowComponent,
81
+ ColumnComponent,
82
+ CardComponent,
83
+ ListComponent,
84
+ DividerComponent
85
+ )
86
+ end
87
+ end
88
+
89
+ # Types that depend on Component/DataValue unions
90
+ require_relative 'types/data_update'
91
+ require_relative 'types/stream_op'
@@ -0,0 +1,6 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module A2UI
5
+ VERSION = '0.1.0'
6
+ end
data/lib/a2ui.rb ADDED
@@ -0,0 +1,7 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require_relative 'a2ui/version'
5
+ require_relative 'a2ui/types'
6
+ require_relative 'a2ui/signatures'
7
+ require_relative 'a2ui/modules'
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: a2ui-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vicente Reig
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2025-12-30 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: dspy
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.34'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.34'
26
+ - !ruby/object:Gem::Dependency
27
+ name: sorbet-runtime
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ description: |
41
+ A Ruby port of Google's A2UI (Agent-to-User Interface) for Rails.
42
+ Uses DSPy.rb to generate typed UI descriptions from natural language,
43
+ rendered as ViewComponents via Turbo Streams.
44
+ email:
45
+ - vicente@vicente.services
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - README.md
51
+ - lib/a2ui.rb
52
+ - lib/a2ui/modules.rb
53
+ - lib/a2ui/modules/action_handler.rb
54
+ - lib/a2ui/modules/data_validator.rb
55
+ - lib/a2ui/modules/input_parser.rb
56
+ - lib/a2ui/modules/layout_adapter.rb
57
+ - lib/a2ui/modules/surface.rb
58
+ - lib/a2ui/modules/surface_manager.rb
59
+ - lib/a2ui/modules/ui_generator.rb
60
+ - lib/a2ui/modules/ui_updater.rb
61
+ - lib/a2ui/signatures.rb
62
+ - lib/a2ui/signatures/adapt_layout.rb
63
+ - lib/a2ui/signatures/generate_ui.rb
64
+ - lib/a2ui/signatures/handle_action.rb
65
+ - lib/a2ui/signatures/parse_input.rb
66
+ - lib/a2ui/signatures/update_ui.rb
67
+ - lib/a2ui/signatures/validate_data.rb
68
+ - lib/a2ui/types.rb
69
+ - lib/a2ui/types/action.rb
70
+ - lib/a2ui/types/action_response_type.rb
71
+ - lib/a2ui/types/alignment.rb
72
+ - lib/a2ui/types/boolean_value.rb
73
+ - lib/a2ui/types/button_component.rb
74
+ - lib/a2ui/types/card_component.rb
75
+ - lib/a2ui/types/check_box_component.rb
76
+ - lib/a2ui/types/column_component.rb
77
+ - lib/a2ui/types/context_binding.rb
78
+ - lib/a2ui/types/data_driven_children.rb
79
+ - lib/a2ui/types/data_update.rb
80
+ - lib/a2ui/types/distribution.rb
81
+ - lib/a2ui/types/divider_component.rb
82
+ - lib/a2ui/types/explicit_children.rb
83
+ - lib/a2ui/types/icon_component.rb
84
+ - lib/a2ui/types/image_component.rb
85
+ - lib/a2ui/types/image_fit.rb
86
+ - lib/a2ui/types/input_type.rb
87
+ - lib/a2ui/types/list_component.rb
88
+ - lib/a2ui/types/literal_value.rb
89
+ - lib/a2ui/types/number_value.rb
90
+ - lib/a2ui/types/object_value.rb
91
+ - lib/a2ui/types/orientation.rb
92
+ - lib/a2ui/types/path_reference.rb
93
+ - lib/a2ui/types/row_component.rb
94
+ - lib/a2ui/types/screen_size.rb
95
+ - lib/a2ui/types/select_component.rb
96
+ - lib/a2ui/types/slider_component.rb
97
+ - lib/a2ui/types/stream_action.rb
98
+ - lib/a2ui/types/stream_op.rb
99
+ - lib/a2ui/types/string_value.rb
100
+ - lib/a2ui/types/text_component.rb
101
+ - lib/a2ui/types/text_field_component.rb
102
+ - lib/a2ui/types/text_usage_hint.rb
103
+ - lib/a2ui/types/user_action.rb
104
+ - lib/a2ui/types/validation_issue.rb
105
+ - lib/a2ui/version.rb
106
+ homepage: https://github.com/vicentereig/a2ui-rails
107
+ licenses:
108
+ - MIT
109
+ metadata:
110
+ homepage_uri: https://github.com/vicentereig/a2ui-rails
111
+ source_code_uri: https://github.com/vicentereig/a2ui-rails
112
+ changelog_uri: https://github.com/vicentereig/a2ui-rails/blob/main/CHANGELOG.md
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '3.3'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubygems_version: 3.6.5
128
+ specification_version: 4
129
+ summary: A2UI for Rails - LLM-driven UI generation with Turbo Streams
130
+ test_files: []