lcp 0.1.0 → 0.2.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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/skills/lcp-custom-field/SKILL.md +10 -1
  3. data/.claude/skills/lcp-custom-field/agents/openai.yaml +4 -0
  4. data/.claude/skills/lcp-getting-started/SKILL.md +1 -1
  5. data/.claude/skills/lcp-getting-started/agents/openai.yaml +4 -0
  6. data/.claude/skills/lcp-host-binding/agents/openai.yaml +4 -0
  7. data/.claude/skills/lcp-model/agents/openai.yaml +4 -0
  8. data/.claude/skills/lcp-permissions/agents/openai.yaml +4 -0
  9. data/.claude/skills/lcp-presenter/agents/openai.yaml +4 -0
  10. data/.claude/skills/lcp-workflow/SKILL.md +10 -2
  11. data/.claude/skills/lcp-workflow/agents/openai.yaml +4 -0
  12. data/CHANGELOG.md +59 -1
  13. data/app/assets/javascripts/lcp_ruby/dev_toolbar.js +5 -6
  14. data/app/controllers/concerns/lcp_ruby/zone_resolution.rb +14 -1
  15. data/app/helpers/lcp_ruby/display/card_helper.rb +71 -16
  16. data/app/helpers/lcp_ruby/display_helper.rb +30 -3
  17. data/app/helpers/lcp_ruby/display_template_helper.rb +3 -3
  18. data/app/helpers/lcp_ruby/layout_helper.rb +49 -8
  19. data/app/helpers/lcp_ruby/tree_helper.rb +24 -3
  20. data/app/models/lcp_ruby/user.rb +10 -0
  21. data/app/views/layouts/lcp_ruby/application.html.erb +42 -20
  22. data/app/views/layouts/lcp_ruby/auth.html.erb +6 -1
  23. data/app/views/lcp_ruby/resources/_show_sections.html.erb +24 -17
  24. data/app/views/lcp_ruby/resources/_table_index.html.erb +12 -17
  25. data/app/views/lcp_ruby/widgets/_markdown.html.erb +13 -0
  26. data/app/views/lcp_ruby/widgets/_presenter_zone.html.erb +23 -7
  27. data/app/views/lcp_ruby/widgets/_rich_text.html.erb +25 -0
  28. data/docs/README.md +3 -0
  29. data/docs/feature-catalog.md +5 -2
  30. data/docs/feature-catalog.yml +89 -9
  31. data/docs/getting-started.md +38 -22
  32. data/docs/guides/dashboards.md +44 -1
  33. data/docs/guides/display-types.md +6 -0
  34. data/docs/guides/host-application.md +1 -1
  35. data/docs/guides/windows-setup.md +211 -0
  36. data/docs/guides/workflow.md +1 -1
  37. data/docs/reference/asset-pipeline.md +79 -0
  38. data/docs/reference/pages.md +50 -1
  39. data/docs/reference/presenters.md +6 -0
  40. data/docs/reference/workflow.md +2 -2
  41. data/examples/crm/Gemfile +3 -0
  42. data/examples/crm/Gemfile.lock +14 -9
  43. data/examples/crm/app/assets/config/manifest.js +4 -0
  44. data/examples/hr/Gemfile +3 -0
  45. data/examples/hr/Gemfile.lock +14 -9
  46. data/examples/hr/app/assets/config/manifest.js +4 -0
  47. data/examples/showcase/Gemfile +3 -0
  48. data/examples/showcase/Gemfile.lock +12 -9
  49. data/examples/showcase/app/assets/config/manifest.js +4 -0
  50. data/examples/showcase/config/lcp_ruby/pages/main_dashboard.yml +17 -2
  51. data/examples/showcase/config/locales/cs.yml +8 -0
  52. data/examples/showcase/config/locales/en.yml +8 -0
  53. data/examples/todo/Gemfile +3 -0
  54. data/examples/todo/Gemfile.lock +14 -9
  55. data/examples/todo/app/assets/config/manifest.js +4 -0
  56. data/exe/lcp +1 -1
  57. data/lib/generators/lcp_ruby/agent_setup_generator.rb +12 -9
  58. data/lib/generators/lcp_ruby/claude_skills_generator.rb +23 -19
  59. data/lib/generators/lcp_ruby/install_generator.rb +171 -3
  60. data/lib/generators/lcp_ruby/templates/agent_setup/agents_md.md +2 -1
  61. data/lib/generators/lcp_ruby/templates/agent_setup/claude_md.md +3 -2
  62. data/lib/generators/lcp_ruby/templates/install/menu.yml.tt +4 -0
  63. data/lib/generators/lcp_ruby/templates/monitoring/page.yml +5 -0
  64. data/lib/lcp_ruby/app_template.rb +37 -1
  65. data/lib/lcp_ruby/array_query.rb +33 -10
  66. data/lib/lcp_ruby/cli/new_command.rb +9 -4
  67. data/lib/lcp_ruby/cli/run_command.rb +98 -11
  68. data/lib/lcp_ruby/cli/skills_command.rb +27 -15
  69. data/lib/lcp_ruby/cli.rb +5 -1
  70. data/lib/lcp_ruby/configuration.rb +13 -2
  71. data/lib/lcp_ruby/custom_fields/applicator.rb +8 -0
  72. data/lib/lcp_ruby/custom_fields/query.rb +28 -20
  73. data/lib/lcp_ruby/display/markdown_sanitize.rb +36 -0
  74. data/lib/lcp_ruby/display/renderers/markdown.rb +6 -13
  75. data/lib/lcp_ruby/engine.rb +185 -1
  76. data/lib/lcp_ruby/export/data_generator.rb +5 -1
  77. data/lib/lcp_ruby/export/value_formatter.rb +34 -0
  78. data/lib/lcp_ruby/grouped_query/builder.rb +21 -0
  79. data/lib/lcp_ruby/metadata/configuration_validator.rb +5 -5
  80. data/lib/lcp_ruby/metadata/field_path.rb +57 -0
  81. data/lib/lcp_ruby/metadata/loader.rb +33 -1
  82. data/lib/lcp_ruby/metadata/menu_definition.rb +32 -2
  83. data/lib/lcp_ruby/metadata/menu_item.rb +53 -4
  84. data/lib/lcp_ruby/metadata/model_definition.rb +9 -0
  85. data/lib/lcp_ruby/metadata/zone_definition.rb +12 -5
  86. data/lib/lcp_ruby/metrics/json_query.rb +5 -0
  87. data/lib/lcp_ruby/model_factory/builder.rb +5 -0
  88. data/lib/lcp_ruby/model_factory/json_type_applicator.rb +35 -0
  89. data/lib/lcp_ruby/model_factory/label_method_builder.rb +3 -19
  90. data/lib/lcp_ruby/model_factory/schema_manager.rb +19 -0
  91. data/lib/lcp_ruby/pages/definition_validator.rb +13 -0
  92. data/lib/lcp_ruby/presenter/field_value_resolver.rb +36 -19
  93. data/lib/lcp_ruby/schemas/page.json +33 -1
  94. data/lib/lcp_ruby/search/custom_field_filter.rb +5 -0
  95. data/lib/lcp_ruby/skills_installer.rb +15 -2
  96. data/lib/lcp_ruby/tasks/doctor.rb +13 -8
  97. data/lib/lcp_ruby/version.rb +1 -1
  98. data/lib/lcp_ruby/widgets/data_resolver.rb +42 -1
  99. data/lib/lcp_ruby/widgets/date_grouper.rb +19 -0
  100. data/lib/lcp_ruby/workflow/contract_validator.rb +1 -1
  101. data/lib/lcp_ruby/workflow/model_source.rb +2 -2
  102. data/lib/lcp_ruby.rb +18 -0
  103. data/lib/tasks/lcp_ruby_db.rake +8 -1
  104. data/lib/tasks/lcp_ruby_i18n_check.rake +8 -0
  105. metadata +34 -24
  106. data/examples/crm/erd.md +0 -163
  107. data/examples/hr/erd.md +0 -396
  108. data/examples/showcase/erd.md +0 -567
  109. data/examples/todo/erd.md +0 -21
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukáš Svoboda
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-28 00:00:00.000000000 Z
11
+ date: 2026-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -72,20 +72,6 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '1.2'
75
- - !ruby/object:Gem::Dependency
76
- name: view_component
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '3.0'
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '3.0'
89
75
  - !ruby/object:Gem::Dependency
90
76
  name: turbo-rails
91
77
  requirement: !ruby/object:Gem::Requirement
@@ -196,14 +182,28 @@ dependencies:
196
182
  requirements:
197
183
  - - "~>"
198
184
  - !ruby/object:Gem::Version
199
- version: '1.0'
185
+ version: '2.0'
200
186
  type: :runtime
201
187
  prerelease: false
202
188
  version_requirements: !ruby/object:Gem::Requirement
203
189
  requirements:
204
190
  - - "~>"
205
191
  - !ruby/object:Gem::Version
206
- version: '1.0'
192
+ version: '2.0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: csv
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '3.2'
200
+ type: :runtime
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '3.2'
207
207
  - !ruby/object:Gem::Dependency
208
208
  name: ostruct
209
209
  requirement: !ruby/object:Gem::Requirement
@@ -243,12 +243,19 @@ extensions: []
243
243
  extra_rdoc_files: []
244
244
  files:
245
245
  - ".claude/skills/lcp-custom-field/SKILL.md"
246
+ - ".claude/skills/lcp-custom-field/agents/openai.yaml"
246
247
  - ".claude/skills/lcp-getting-started/SKILL.md"
248
+ - ".claude/skills/lcp-getting-started/agents/openai.yaml"
247
249
  - ".claude/skills/lcp-host-binding/SKILL.md"
250
+ - ".claude/skills/lcp-host-binding/agents/openai.yaml"
248
251
  - ".claude/skills/lcp-model/SKILL.md"
252
+ - ".claude/skills/lcp-model/agents/openai.yaml"
249
253
  - ".claude/skills/lcp-permissions/SKILL.md"
254
+ - ".claude/skills/lcp-permissions/agents/openai.yaml"
250
255
  - ".claude/skills/lcp-presenter/SKILL.md"
256
+ - ".claude/skills/lcp-presenter/agents/openai.yaml"
251
257
  - ".claude/skills/lcp-workflow/SKILL.md"
258
+ - ".claude/skills/lcp-workflow/agents/openai.yaml"
252
259
  - CHANGELOG.md
253
260
  - MIT-LICENSE
254
261
  - README.md
@@ -442,8 +449,10 @@ files:
442
449
  - app/views/lcp_ruby/widgets/_embed.html.erb
443
450
  - app/views/lcp_ruby/widgets/_kpi_card.html.erb
444
451
  - app/views/lcp_ruby/widgets/_list.html.erb
452
+ - app/views/lcp_ruby/widgets/_markdown.html.erb
445
453
  - app/views/lcp_ruby/widgets/_presenter_zone.html.erb
446
454
  - app/views/lcp_ruby/widgets/_record_show_zone.html.erb
455
+ - app/views/lcp_ruby/widgets/_rich_text.html.erb
447
456
  - app/views/lcp_ruby/widgets/_text.html.erb
448
457
  - app/views/lcp_ruby/widgets/_workflow_graph.html.erb
449
458
  - app/views/lcp_ruby/zones/_custom_zone.html.erb
@@ -512,9 +521,11 @@ files:
512
521
  - docs/guides/view-groups.md
513
522
  - docs/guides/view-slots.md
514
523
  - docs/guides/virtual-columns.md
524
+ - docs/guides/windows-setup.md
515
525
  - docs/guides/workflow.md
516
526
  - docs/reference/api-backed-models.md
517
527
  - docs/reference/api-tokens.md
528
+ - docs/reference/asset-pipeline.md
518
529
  - docs/reference/auditing.md
519
530
  - docs/reference/boot_lifecycle.md
520
531
  - docs/reference/cascading_selects.md
@@ -649,7 +660,6 @@ files:
649
660
  - examples/crm/db/migrate/20260219104942_create_active_storage_tables.active_storage.rb
650
661
  - examples/crm/db/schema.rb
651
662
  - examples/crm/db/seeds.rb
652
- - examples/crm/erd.md
653
663
  - examples/hr/Gemfile
654
664
  - examples/hr/Gemfile.lock
655
665
  - examples/hr/Rakefile
@@ -826,7 +836,6 @@ files:
826
836
  - examples/hr/db/queue_schema.rb
827
837
  - examples/hr/db/schema.rb
828
838
  - examples/hr/db/seeds.rb
829
- - examples/hr/erd.md
830
839
  - examples/hr/public/400.html
831
840
  - examples/hr/public/404.html
832
841
  - examples/hr/public/406-unsupported-browser.html
@@ -1264,7 +1273,6 @@ files:
1264
1273
  - examples/showcase/db/migrate/20260502120000_create_platform_profiles.rb
1265
1274
  - examples/showcase/db/schema.rb
1266
1275
  - examples/showcase/db/seeds.rb
1267
- - examples/showcase/erd.md
1268
1276
  - examples/showcase/test/fixtures/import_articles.csv
1269
1277
  - examples/showcase/test/fixtures/import_employees.csv
1270
1278
  - examples/todo/Gemfile
@@ -1293,7 +1301,6 @@ files:
1293
1301
  - examples/todo/db/migrate/20260219103416_create_active_storage_tables.active_storage.rb
1294
1302
  - examples/todo/db/schema.rb
1295
1303
  - examples/todo/db/seeds.rb
1296
- - examples/todo/erd.md
1297
1304
  - exe/lcp
1298
1305
  - lib/generators/lcp_ruby/agent_setup_generator.rb
1299
1306
  - lib/generators/lcp_ruby/api_tokens_generator.rb
@@ -1571,6 +1578,7 @@ files:
1571
1578
  - lib/lcp_ruby/display/base_renderer.rb
1572
1579
  - lib/lcp_ruby/display/count_badge.rb
1573
1580
  - lib/lcp_ruby/display/icon_badge.rb
1581
+ - lib/lcp_ruby/display/markdown_sanitize.rb
1574
1582
  - lib/lcp_ruby/display/renderer_registry.rb
1575
1583
  - lib/lcp_ruby/display/renderers.rb
1576
1584
  - lib/lcp_ruby/display/renderers/attachment_link.rb
@@ -1690,6 +1698,7 @@ files:
1690
1698
  - lib/lcp_ruby/metadata/erd_generator.rb
1691
1699
  - lib/lcp_ruby/metadata/event_definition.rb
1692
1700
  - lib/lcp_ruby/metadata/field_definition.rb
1701
+ - lib/lcp_ruby/metadata/field_path.rb
1693
1702
  - lib/lcp_ruby/metadata/group_definition.rb
1694
1703
  - lib/lcp_ruby/metadata/i18n_label.rb
1695
1704
  - lib/lcp_ruby/metadata/loader.rb
@@ -1735,6 +1744,7 @@ files:
1735
1744
  - lib/lcp_ruby/model_factory/default_applicator.rb
1736
1745
  - lib/lcp_ruby/model_factory/enum_applicator.rb
1737
1746
  - lib/lcp_ruby/model_factory/inherited_parent_validator_applicator.rb
1747
+ - lib/lcp_ruby/model_factory/json_type_applicator.rb
1738
1748
  - lib/lcp_ruby/model_factory/label_method_builder.rb
1739
1749
  - lib/lcp_ruby/model_factory/managed_tracking.rb
1740
1750
  - lib/lcp_ruby/model_factory/positioning_applicator.rb
@@ -1936,14 +1946,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1936
1946
  requirements:
1937
1947
  - - ">="
1938
1948
  - !ruby/object:Gem::Version
1939
- version: '3.1'
1949
+ version: '3.2'
1940
1950
  required_rubygems_version: !ruby/object:Gem::Requirement
1941
1951
  requirements:
1942
1952
  - - ">="
1943
1953
  - !ruby/object:Gem::Version
1944
1954
  version: '0'
1945
1955
  requirements: []
1946
- rubygems_version: 3.5.16
1956
+ rubygems_version: 3.5.22
1947
1957
  signing_key:
1948
1958
  specification_version: 4
1949
1959
  summary: Low Code Platform engine for Rails
data/examples/crm/erd.md DELETED
@@ -1,163 +0,0 @@
1
- erDiagram
2
- Activity {
3
- string subject "NOT NULL"
4
- string activity_type "NOT NULL"
5
- string description
6
- datetime scheduled_at
7
- bool completed
8
- datetime completed_at
9
- string outcome
10
- datetime created_at
11
- datetime updated_at
12
- integer company_id FK
13
- integer contact_id FK
14
- integer deal_id FK
15
- }
16
- City {
17
- string name "NOT NULL"
18
- int population
19
- datetime created_at
20
- datetime updated_at
21
- integer region_id FK
22
- }
23
- Company {
24
- string name "NOT NULL"
25
- string industry
26
- url website
27
- phone phone
28
- string address_type
29
- string street
30
- attachment logo
31
- attachment contract_template
32
- datetime created_at
33
- datetime updated_at
34
- integer country_id FK
35
- integer region_id FK
36
- integer city_id FK
37
- }
38
- Contact {
39
- string first_name "NOT NULL"
40
- string last_name "NOT NULL"
41
- string full_name
42
- email email
43
- phone phone
44
- string position
45
- bool active
46
- array skills
47
- attachment avatar
48
- attachment documents
49
- datetime created_at
50
- datetime updated_at
51
- integer company_id FK
52
- }
53
- Country {
54
- string name "NOT NULL"
55
- string code
56
- bool active
57
- datetime created_at
58
- datetime updated_at
59
- }
60
- CustomFieldDefinition {
61
- string target_model "NOT NULL"
62
- string field_name "NOT NULL"
63
- string custom_type "NOT NULL"
64
- string label "NOT NULL"
65
- string description
66
- string section
67
- int position
68
- bool active
69
- bool required
70
- string default_value
71
- string placeholder
72
- string hint
73
- int min_length
74
- int max_length
75
- float min_value
76
- float max_value
77
- int precision
78
- json enum_values
79
- bool show_in_table
80
- bool show_in_form
81
- bool show_in_show
82
- bool sortable
83
- bool searchable
84
- bool filterable
85
- string input_type
86
- string renderer
87
- json renderer_options
88
- string column_width
89
- json extra_validations
90
- json readable_by_roles
91
- json writable_by_roles
92
- datetime created_at
93
- datetime updated_at
94
- }
95
- Deal {
96
- string deal_number
97
- string title "NOT NULL"
98
- string stage
99
- float value "NOT NULL"
100
- int priority
101
- int progress
102
- float weighted_value
103
- date expected_close_date
104
- array tags
105
- attachment documents
106
- datetime created_at
107
- datetime updated_at
108
- integer company_id FK
109
- integer contact_id FK
110
- integer deal_category_id FK
111
- }
112
- DealCategory {
113
- string name "NOT NULL"
114
- datetime created_at
115
- datetime updated_at
116
- integer parent_id FK
117
- }
118
- GapfreeSequence {
119
- string seq_model "NOT NULL"
120
- string seq_field "NOT NULL"
121
- string scope_key "NOT NULL"
122
- int current_value
123
- datetime created_at
124
- datetime updated_at
125
- }
126
- Region {
127
- string name "NOT NULL"
128
- datetime created_at
129
- datetime updated_at
130
- integer country_id FK
131
- }
132
- SavedFilter {
133
- string name "NOT NULL"
134
- string description
135
- string target_presenter "NOT NULL"
136
- json condition_tree "NOT NULL"
137
- string ql_text
138
- string visibility
139
- int owner_id "NOT NULL"
140
- string target_role
141
- string target_group
142
- int position
143
- string icon
144
- string color
145
- bool pinned
146
- bool default_filter
147
- datetime created_at
148
- datetime updated_at
149
- }
150
-
151
- Activity }|--|| Company : "company"
152
- Activity }o--|| Contact : "contact"
153
- Activity }o--|| Deal : "deal"
154
- City }|--|| Region : "region"
155
- Company }o--|| Country : "country"
156
- Company }o--|| Region : "region"
157
- Company }o--|| City : "city"
158
- Contact }|--|| Company : "company"
159
- Deal }|--|| Company : "company"
160
- Deal }o--|| Contact : "contact"
161
- Deal }o--|| DealCategory : "deal_category"
162
- DealCategory }o--|| DealCategory : "parent"
163
- Region }|--|| Country : "country"