meta_workflows 0.9.10 → 0.9.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a82054f7053b61a025c31d2469c8e2cb6a7c5aff3645047c180b12f228a3c046
4
- data.tar.gz: bc101df970452eb0f3cb6b291bd77381be9a6f129fa4011c231c5dd82955e1de
3
+ metadata.gz: 73fcb0be3ef0902a994689da96b1d7dbd8164fe4997f3d1ffb47bbde0608c163
4
+ data.tar.gz: 15adbe1b54336b7cbc301a16e38924279d5ff44748d4310bc3bf6f6f28dac583
5
5
  SHA512:
6
- metadata.gz: a31a5da810855e6751304f68276214a8b6f30cc657ace268b326ffa6f89210050e0ab3ed6b4727c33858908a7e3a1c41e18cfbedf7dd27996c94f286b26ab563
7
- data.tar.gz: 9ea86df7931e4dc0d7482e7ce6bbd7c1d3d760d6e3cd9950d5d2d7b9bb02a55cbcc7b3d40571d6f41de8f38d96f4c0056683eab267caa89591df049572a8af47
6
+ metadata.gz: db5004eb9417c670f71fe1be96e4e25727dbaae9f592090469de5e4887f65017131aa46a8d127bcbd6077e62c144ba93dc04522988bcc77768095b88ca3eda05
7
+ data.tar.gz: 02f2c0a1ae62055685a369ff9ca08dd5b4793d4d902894a60eb3148a2857d8c3c2416316d60eadad31825015c5be801ba8f0fe108ae2b8acd0b9633fb3c6406b
@@ -0,0 +1,31 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = ["welcome", "chat", "welcomeContent", "lexiIcon"]
5
+
6
+ connect() {
7
+ // Ensure initial state using CSS classes
8
+ this.welcomeTarget.classList.remove("fade-out")
9
+ this.chatTarget.classList.remove("expand-in")
10
+ }
11
+
12
+ startChat() {
13
+ // Start the grid stacking animation sequence
14
+ this.fadeOutWelcome()
15
+
16
+ // Chat expands in after welcome starts fading (grid stacking handles timing)
17
+ setTimeout(() => {
18
+ this.expandInChat()
19
+ }, 100) // Small delay to ensure welcome animation starts first
20
+ }
21
+
22
+ fadeOutWelcome() {
23
+ // Use CSS animation classes instead of display properties
24
+ this.welcomeTarget.classList.add("fade-out")
25
+ }
26
+
27
+ expandInChat() {
28
+ // Use CSS animation class - no display manipulation needed
29
+ this.chatTarget.classList.add("expand-in")
30
+ }
31
+ }
@@ -160,6 +160,96 @@
160
160
  }
161
161
  }
162
162
 
163
+ /* Loader Message Styles */
164
+ .lexi-loader-bubble {
165
+ padding: 0.25rem 0.5rem;
166
+ margin-bottom: 0.25rem;
167
+ border: none;
168
+ }
169
+
170
+ @keyframes gradient-shift {
171
+ 0% {
172
+ background-position: 0% 50%;
173
+ }
174
+ 50% {
175
+ background-position: 100% 50%;
176
+ }
177
+ 100% {
178
+ background-position: 0% 50%;
179
+ }
180
+ }
181
+
182
+ @keyframes dot-bounce {
183
+ 0%, 80%, 100% {
184
+ transform: translateY(0);
185
+ opacity: 0.7;
186
+ }
187
+ 40% {
188
+ transform: translateY(-3px);
189
+ opacity: 1;
190
+ }
191
+ }
192
+
193
+ .lexi-loader-text {
194
+ font-size: 1.25rem;
195
+ background: linear-gradient(135deg, #7B5BA3 0%, #3A9999 50%, #7B5BA3 100%);
196
+ background-size: 200% 200%;
197
+ background-clip: text;
198
+ -webkit-background-clip: text;
199
+ -webkit-text-fill-color: transparent;
200
+ color: transparent;
201
+ font-style: italic;
202
+ animation: gradient-shift 2s ease-in-out infinite;
203
+ -webkit-text-stroke: 0.75px rgba(0, 0, 0, 0.15);
204
+ text-stroke: 0.75px rgba(0, 0, 0, 0.15);
205
+ }
206
+
207
+ .lexi-loader-ellipses {
208
+ display: inline-block;
209
+ }
210
+
211
+ .lexi-dot {
212
+ display: inline-block;
213
+ font-size: 1.25rem;
214
+ background: linear-gradient(135deg, #7B5BA3 0%, #3A9999 50%, #7B5BA3 100%);
215
+ background-size: 200% 200%;
216
+ background-clip: text;
217
+ -webkit-background-clip: text;
218
+ -webkit-text-fill-color: transparent;
219
+ color: transparent;
220
+ animation: gradient-shift 2s ease-in-out infinite, dot-bounce 1.4s ease-in-out infinite;
221
+ -webkit-text-stroke: 0.75px rgba(0, 0, 0, 0.15);
222
+ text-stroke: 0.75px rgba(0, 0, 0, 0.15);
223
+ margin-left: -0.125rem;
224
+ }
225
+
226
+ .lexi-dot-1 {
227
+ animation-delay: 0s, 0s;
228
+ }
229
+
230
+ .lexi-dot-2 {
231
+ animation-delay: 0s, 0.2s;
232
+ }
233
+
234
+ .lexi-dot-3 {
235
+ animation-delay: 0s, 0.4s;
236
+ }
237
+
238
+ .lexi-dot.lexi-dot-error {
239
+ background: linear-gradient(135deg, #dc2626 0%, #b91c1c 50%, #dc2626 100%);
240
+ background-size: 200% 200%;
241
+ background-clip: text;
242
+ -webkit-background-clip: text;
243
+ -webkit-text-fill-color: transparent;
244
+ color: transparent;
245
+ -webkit-text-stroke: 0.75px rgba(220, 38, 38, 0.15);
246
+ text-stroke: 0.75px rgba(220, 38, 38, 0.15);
247
+ }
248
+
249
+ .lexi-loader-container {
250
+ margin-top: -0.5rem;
251
+ }
252
+
163
253
  /* Lexi Chat Tray Styles */
164
254
  .lexi-chat-tray {
165
255
  display: flex;
@@ -174,7 +264,6 @@
174
264
  align-items: center;
175
265
  justify-content: space-between;
176
266
  padding: 0.5rem 0;
177
- border-bottom: 1px solid var(--gray-200);
178
267
  }
179
268
 
180
269
  .lexi-chat-header-left {
@@ -381,13 +470,13 @@
381
470
  }
382
471
 
383
472
  .lexi-message-content-user {
384
- font-size: 1rem;
473
+ font-size: 1.25rem;
385
474
  color: var(--gray-800);
386
475
  }
387
476
 
388
477
  .lexi-message-content-assistant {
389
478
  color: black;
390
- font-size: 1rem;
479
+ font-size: 1.25rem;
391
480
  line-height: 1.25;
392
481
  max-width: none;
393
482
  }
@@ -564,7 +653,7 @@
564
653
 
565
654
  /* Show floating Lexi avatar button when collapsed - with delay to avoid overlap */
566
655
  .gamma-tray.lexi-tray.collapsed .lexi-floating-avatar {
567
- display: block !important;
656
+ display: block;
568
657
  opacity: 0;
569
658
  animation: lexi-avatar-appear 200ms ease-in-out 400ms forwards;
570
659
  }
@@ -582,5 +671,156 @@
582
671
 
583
672
  /* Hide floating avatar when tray is expanded */
584
673
  .gamma-tray.lexi-tray:not(.collapsed) .lexi-floating-avatar {
585
- display: none !important;
674
+ display: none;
675
+ }
676
+
677
+ /* Onboarding Screen Grid Stacking Animations */
678
+ .onboarding-container {
679
+ display: grid;
680
+ grid-template-columns: 1fr;
681
+ grid-template-rows: 1fr;
682
+ width: 100%;
683
+ height: 100vh;
684
+ }
685
+
686
+ .welcome-screen, .chat-screen {
687
+ grid-column: 1;
688
+ grid-row: 1;
689
+ }
690
+
691
+ /* Welcome screen - starts normal, fades out */
692
+ .welcome-screen {
693
+ opacity: 1;
694
+ transition: opacity 0.6s ease-in-out;
695
+ z-index: 10;
696
+ }
697
+
698
+ .welcome-screen.fade-out {
699
+ opacity: 0;
700
+ }
701
+
702
+ /* Chat screen - starts hidden, fades in */
703
+ .chat-screen {
704
+ opacity: 0;
705
+ pointer-events: none; /* Don't block clicks when hidden */
706
+ transition: opacity 0.8s ease-in-out 0.3s; /* 0.3s delay after welcome starts fading */
707
+ z-index: 15; /* Higher than welcome screen */
708
+ }
709
+
710
+ .chat-screen.expand-in {
711
+ opacity: 1;
712
+ pointer-events: auto; /* Re-enable clicks when visible */
713
+ }
714
+
715
+ /* Legacy animation states for backwards compatibility */
716
+ .welcome-content.fade-out {
717
+ opacity: 0;
718
+ transition: opacity 0.5s ease-in-out;
719
+ }
720
+
721
+ .lexi-icon-container.fade-out {
722
+ opacity: 0;
723
+ transition: opacity 0.5s ease-in-out;
724
+ }
725
+
726
+ /* Alpha Tray Lexi Avatar Size */
727
+ .lexi-avatar-large {
728
+ height: 35rem;
729
+ width: auto;
730
+ }
731
+
732
+ /* Alpha Tray Specific Styles */
733
+ .lexi-chat-alpha-tray {
734
+ position: relative;
735
+ display: flex;
736
+ flex-direction: column;
737
+ background-color: white;
738
+ padding: 1rem 1rem 0 1rem;
739
+ height: 100%;
740
+ }
741
+
742
+ .lexi-chat-alpha-header {
743
+ display: flex;
744
+ align-items: center;
745
+ justify-content: space-between;
746
+ padding-bottom: 1rem;
747
+ }
748
+
749
+ .lexi-chat-alpha-header-left {
750
+ display: flex;
751
+ align-items: center;
752
+ }
753
+
754
+ .lexi-chat-alpha-header-right {
755
+ display: flex;
756
+ align-items: center;
757
+ }
758
+
759
+ .lexi-chat-alpha-logo {
760
+ height: 80px;
761
+ width: auto;
762
+ }
763
+
764
+ .lexi-chat-alpha-close-button {
765
+ padding: 0.5rem;
766
+ border-radius: 0.75rem;
767
+ background: none;
768
+ border: none;
769
+ cursor: pointer;
770
+ transition: background-color 0.2s;
771
+ }
772
+
773
+ .lexi-chat-alpha-close-button:hover {
774
+ background-color: #f3f4f6;
775
+ }
776
+
777
+ .lexi-chat-alpha-content {
778
+ flex: 1;
779
+ display: flex;
780
+ gap: 1rem;
781
+ min-height: 0;
782
+ }
783
+
784
+ .lexi-chat-alpha-left-column {
785
+ display: flex;
786
+ flex-direction: column;
787
+ justify-content: flex-end;
788
+ flex-shrink: 0;
789
+ }
790
+
791
+ .lexi-chat-alpha-right-column {
792
+ flex: 1;
793
+ display: flex;
794
+ flex-direction: column;
795
+ min-height: 0;
796
+ }
797
+
798
+ .lexi-chat-alpha-messages {
799
+ flex: 1;
800
+ overflow-y: auto;
801
+ min-height: 0;
802
+ padding-bottom: 1rem;
803
+ }
804
+
805
+ .lexi-chat-alpha-messages > * + * {
806
+ margin-top: 1rem;
807
+ }
808
+
809
+ .lexi-chat-alpha-input-area {
810
+ flex-shrink: 0;
811
+ }
812
+
813
+ .lexi-chat-alpha-input-container {
814
+ width: 100%;
815
+ }
816
+
817
+ .lexi-error-content {
818
+ display: flex;
819
+ align-items: baseline;
820
+ gap: 0.5rem;
821
+ color: var(--red-700);
822
+ }
823
+
824
+ .lexi-error-content .lexi-loader-ellipses {
825
+ margin-left: 0.375rem;
586
826
  }
@@ -45,8 +45,8 @@ module MetaWorkflows
45
45
  format.turbo_stream do
46
46
  render turbo_stream: [
47
47
  turbo_stream.replace(
48
- target_frame_id(@record),
49
- partial: meta_loader,
48
+ target_frame_id(@record, loader: true),
49
+ partial: meta_loader_message,
50
50
  locals: {
51
51
  record: @record,
52
52
  step_progress: fetch_step_progress
@@ -15,8 +15,7 @@ module MetaWorkflows
15
15
  protected
16
16
 
17
17
  def fetch_step_progress
18
- @workflow_execution.step_progress(@workflow_execution.current_step) || ['Processing your request...',
19
- 'Talking to the LLM...']
18
+ @workflow_execution.step_progress(@workflow_execution.current_step) || default_step_progress
20
19
  end
21
20
 
22
21
  def current_step_repetitions
@@ -2,17 +2,25 @@
2
2
 
3
3
  module MetaWorkflows
4
4
  module MetaWorkflowsHelper
5
- def target_frame_id(record, form: nil)
5
+ def target_frame_id(record, form: nil, loader: nil)
6
6
  base_id = "#{record.class.name.downcase}_#{record.id}"
7
- form ? "#{base_id}_form" : base_id
7
+
8
+ return "#{base_id}_loader" if loader
9
+ return "#{base_id}_form" if form
10
+
11
+ base_id
8
12
  end
9
13
 
10
14
  def turbo_stream_name(record)
11
15
  [record.class.name.downcase, record.id]
12
16
  end
13
17
 
14
- def meta_loader
15
- 'meta_workflows/loader'
18
+ def meta_loader_message
19
+ 'meta_workflows/loader_message'
20
+ end
21
+
22
+ def meta_error_message
23
+ 'meta_workflows/error_message'
16
24
  end
17
25
 
18
26
  def meta_response_form
@@ -67,5 +75,9 @@ module MetaWorkflows
67
75
  def current_step_has_repetitions?(workflow_execution)
68
76
  workflow_execution.step_repetitions(workflow_execution.current_step).present?
69
77
  end
78
+
79
+ def default_step_progress
80
+ ['Thinking']
81
+ end
70
82
  end
71
83
  end
@@ -20,6 +20,13 @@ module MetaWorkflows
20
20
  last_message = messages.last
21
21
  is_streaming = full_response.present?
22
22
 
23
+ # Remove loader message
24
+ Turbo::StreamsChannel.broadcast_remove_to(
25
+ turbo_stream_name(record),
26
+ target: target_frame_id(record, loader: true)
27
+ )
28
+
29
+ # Update main chat content
23
30
  Turbo::StreamsChannel.broadcast_replace_to(turbo_stream_name(record),
24
31
  target: target_frame_id(record),
25
32
  locals: {
@@ -73,7 +73,7 @@ module MetaWorkflows
73
73
  def handle_llm_error(error, workflow_step, conversation)
74
74
  log_error(error)
75
75
  store_error_in_workflow_step(error, workflow_step, conversation)
76
- broadcast_error_response(error)
76
+ broadcast_error_response
77
77
  end
78
78
 
79
79
  def log_error(error)
@@ -97,9 +97,16 @@ module MetaWorkflows
97
97
  workflow_execution.workflow_steps.find_by(step: workflow_execution.current_step)
98
98
  end
99
99
 
100
- def broadcast_error_response(error)
101
- error_message = "Error occured during LLM processing: #{error.message}"
102
- broadcast_response(chat, error_message)
100
+ def broadcast_error_response
101
+ # Replace loader with error message
102
+ Turbo::StreamsChannel.broadcast_replace_to(
103
+ turbo_stream_name(record),
104
+ target: target_frame_id(record, loader: true),
105
+ partial: 'meta_workflows/error_message',
106
+ locals: {
107
+ record: record
108
+ }
109
+ )
103
110
  end
104
111
 
105
112
  def broadcast_form(chat)
@@ -0,0 +1,14 @@
1
+ <div class="lexi-message-assistant">
2
+ <div class="lexi-message-bubble-assistant">
3
+ <div class="lexi-message-content-assistant">
4
+ <div class="lexi-error-content">
5
+ <i class="fa-solid fa-exclamation-triangle"></i>
6
+ <span>Uh oh! Lexi needs a quick break. One moment<span class="lexi-loader-ellipses">
7
+ <span class="lexi-dot lexi-dot-error lexi-dot-1">.</span>
8
+ <span class="lexi-dot lexi-dot-error lexi-dot-2">.</span>
9
+ <span class="lexi-dot lexi-dot-error lexi-dot-3">.</span>
10
+ </span></span>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </div>
@@ -1,42 +1,46 @@
1
1
  <%# Lexi Chat Alpha Tray (Center Display) %>
2
- <div class="relative flex flex-col lexi-chat-container bg-white px-4">
3
- <%# Header with Lexi logo and action icons - spans full width %>
4
- <div class="flex-shrink-0 flex items-center justify-between pb-2 border-b border-gray-200">
5
- <div class="flex items-center space-x-2">
6
- <%= image_tag("lexi_logo_color.png", alt: "Lexi Logo", class: "h-14 w-auto") %>
2
+ <% active_execution = local_assigns[:record]&.workflow_executions&.order(created_at: :desc)&.first %>
3
+ <% active_chat = active_execution&.workflow_steps&.last&.chat %>
4
+
5
+ <div class="lexi-chat-alpha-tray lexi-chat-container">
6
+ <%# Header with Lexi logo left and close button right %>
7
+ <div class="lexi-chat-alpha-header">
8
+ <div class="lexi-chat-alpha-header-left">
9
+ <%= image_tag("lexi_logo_color.png", alt: "Lexi Logo", class: "lexi-chat-alpha-logo") %>
7
10
  </div>
8
- <div class="flex items-center gap-2">
9
- <button type="button" class="p-2 rounded-xl hover:bg-gray-100" aria-label="New Chat" disabled>
10
- <i class="fa-solid fa-plus text-xl"></i>
11
- </button>
12
- <button type="button" class="p-2 rounded-xl hover:bg-gray-100" aria-label="Chat History" disabled>
13
- <i class="fa-solid fa-clock-rotate-left text-xl"></i>
11
+ <div class="lexi-chat-alpha-header-right">
12
+ <button type="button" class="lexi-chat-alpha-close-button" aria-label="Close" disabled>
13
+ <i class="fa-solid fa-times text-xl"></i>
14
14
  </button>
15
15
  </div>
16
16
  </div>
17
17
 
18
- <!-- Content area with chat and Lexi side by side -->
19
- <div class="flex-1 flex min-h-0">
20
- <!-- Lexi auto-width side column -->
21
- <div class="flex-shrink-0 flex flex-col justify-end">
22
- <%= image_tag("lexi-expanded.png", alt: "Lexi Avatar", class: "lexi-avatar-large w-auto") %>
18
+ <%# Main content: Left column (Lexi image) and Right column (Chat + Input) %>
19
+ <div class="lexi-chat-alpha-content">
20
+ <%# Left column - Lexi image %>
21
+ <div class="lexi-chat-alpha-left-column">
22
+ <%= image_tag("lexi-expanded2.png", alt: "Lexi Avatar", class: "lexi-avatar-large") %>
23
23
  </div>
24
24
 
25
25
  <!-- Main content area (chat + input) -->
26
- <div class="flex-1 flex flex-col min-h-0">
27
- <%# Chat messages area %>
28
- <div id="main-scroll-container" class="flex-1 overflow-y-auto py-4 space-y-4 min-h-0">
29
- <%= render partial: meta_loader, locals: {record: local_assigns[:record], step_progress: ["Generating draft course objectives...", "Talking to the LLM..."] } %>
26
+ <%# Right column - Chat and Input %>
27
+ <div class="lexi-chat-alpha-right-column">
28
+ <%# Scrollable chat messages area %>
29
+ <div id="main-scroll-container" class="lexi-chat-alpha-messages">
30
+ <%= render partial: meta_response, locals: {
31
+ record: local_assigns[:record],
32
+ chat: active_chat,
33
+ messages: active_chat&.messages&.order(:created_at) || [],
34
+ user_messages: active_chat&.messages&.where(role: 'user')&.order(:created_at) || [],
35
+ last_message: active_chat&.messages&.last,
36
+ full_response: nil,
37
+ is_streaming: false
38
+ } %>
30
39
  </div>
31
40
 
32
- <%# Input area %>
33
- <div class="flex-shrink-0 pt-4 pb-10">
34
- <!-- Recording notice -->
35
- <p class="text-left text-xs text-purple-800 mb-2">This chat is being recorded.</p>
36
-
37
- <!-- Input form -->
38
- <div class="w-full">
39
- <% active_execution = local_assigns[:record]&.workflow_executions&.order(created_at: :desc)&.first %>
41
+ <%# Input area (fixed at bottom) %>
42
+ <div class="lexi-chat-alpha-input-area">
43
+ <div class="lexi-chat-alpha-input-container">
40
44
  <%= render partial: meta_response_form, locals: {record: local_assigns[:record], response_enabled: true, workflow_execution_id: active_execution&.id, chat_id: active_execution&.workflow_steps&.last&.chat&.id, step_has_repetitions: true } %>
41
45
  </div>
42
46
  </div>
@@ -1,4 +1,7 @@
1
1
  <%# Lexi Chat Tray %>
2
+ <% active_execution = local_assigns[:record]&.workflow_executions&.order(created_at: :desc)&.first %>
3
+ <% active_chat = active_execution&.workflow_steps&.last&.chat %>
4
+
2
5
  <div class="lexi-chat-tray lexi-chat-container-full">
3
6
  <!-- Header with Lexi logo and action icons -->
4
7
  <div class="lexi-chat-header">
@@ -17,14 +20,21 @@
17
20
 
18
21
  <!-- Chat messages area -->
19
22
  <div id="main-scroll-container" class="lexi-chat-messages">
20
- <%= render partial: meta_loader, locals: {record: local_assigns[:record], step_progress: ["Generating draft course objectives...", "Talking to the LLM..."] } %>
23
+ <%= render partial: meta_response, locals: {
24
+ record: local_assigns[:record],
25
+ chat: active_chat,
26
+ messages: active_chat&.messages&.order(:created_at) || [],
27
+ user_messages: active_chat&.messages&.where(role: 'user')&.order(:created_at) || [],
28
+ last_message: active_chat&.messages&.last,
29
+ full_response: nil,
30
+ is_streaming: false
31
+ } %>
21
32
  </div>
22
33
 
23
34
  <!-- Avatar and input area pinned to bottom -->
24
35
  <div class="lexi-chat-bottom">
25
36
  <%= image_tag("lexi-expanded.png", alt: "Lexi Avatar", class: "lexi-avatar") %>
26
37
  <div class="lexi-input-wrapper">
27
- <% active_execution = local_assigns[:record]&.workflow_executions&.order(created_at: :desc)&.first %>
28
38
  <%= render partial: meta_response_form, locals: {record: local_assigns[:record], response_enabled: true, workflow_execution_id: active_execution&.id, chat_id: active_execution&.workflow_steps&.last&.chat&.id, step_has_repetitions: true } %>
29
39
  </div>
30
40
  </div>
@@ -0,0 +1,16 @@
1
+ <div class="lexi-message-assistant">
2
+ <div class="lexi-loader-bubble">
3
+ <div class="lexi-message-content-assistant"
4
+ data-controller="loading-phrases"
5
+ data-loading-phrases-phrases-value="<%= (local_assigns[:step_progress] || default_step_progress).to_json %>">
6
+ <span data-loading-phrases-target="message" class="lexi-loader-text">
7
+ <%= default_step_progress.first %>
8
+ </span>
9
+ <span class="lexi-loader-ellipses">
10
+ <span class="lexi-dot lexi-dot-1">.</span>
11
+ <span class="lexi-dot lexi-dot-2">.</span>
12
+ <span class="lexi-dot lexi-dot-3">.</span>
13
+ </span>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -44,4 +44,15 @@
44
44
  <% end %>
45
45
  <% end %>
46
46
  </div>
47
- <% end %>
47
+ <% end %>
48
+
49
+ <div class="lexi-loader-container">
50
+ <%= turbo_frame_tag target_frame_id(record, loader: true) do %>
51
+ <% if chat.blank? || chat.messages.empty? %>
52
+ <%= render partial: meta_loader_message, locals: {
53
+ record: local_assigns[:record],
54
+ step_progress: default_step_progress
55
+ } %>
56
+ <% end %>
57
+ <% end %>
58
+ </div>
@@ -3,7 +3,7 @@
3
3
  module MetaWorkflows
4
4
  MAJOR = 0
5
5
  MINOR = 9
6
- PATCH = 10 # this is automatically incremented by the build process
6
+ PATCH = 12 # this is automatically incremented by the build process
7
7
 
8
8
  VERSION = "#{MetaWorkflows::MAJOR}.#{MetaWorkflows::MINOR}.#{MetaWorkflows::PATCH}".freeze
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_workflows
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.10
4
+ version: 0.9.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonid Medovyy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-07-10 00:00:00.000000000 Z
12
+ date: 2025-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -117,10 +117,12 @@ files:
117
117
  - app/assets/images/lexi-chaticon.png
118
118
  - app/assets/images/lexi-collapsed.png
119
119
  - app/assets/images/lexi-expanded.png
120
+ - app/assets/images/lexi-expanded2.png
120
121
  - app/assets/images/lexi_logo_color.png
121
122
  - app/assets/javascripts/meta_workflows/controllers/lexi_form_submit_controller.js
122
123
  - app/assets/javascripts/meta_workflows/controllers/loading_phrases_controller.js
123
124
  - app/assets/javascripts/meta_workflows/controllers/meta_flash_controller.js
125
+ - app/assets/javascripts/meta_workflows/controllers/onboarding_controller.js
124
126
  - app/assets/javascripts/meta_workflows/controllers/redirect_controller.js
125
127
  - app/assets/javascripts/meta_workflows/controllers/response_scroll_controller.js
126
128
  - app/assets/javascripts/meta_workflows/controllers/tray_controller.js
@@ -158,9 +160,10 @@ files:
158
160
  - app/services/meta_workflows/workflow_import_service.rb
159
161
  - app/sidekiq/meta_workflows/tools/meta_workflow_tool.rb
160
162
  - app/views/layouts/meta_workflows/application.html.erb
163
+ - app/views/meta_workflows/_error_message.html.erb
161
164
  - app/views/meta_workflows/_lexi_chat_alpha_tray.html.erb
162
165
  - app/views/meta_workflows/_lexi_chat_right_tray.html.erb
163
- - app/views/meta_workflows/_loader.html.erb
166
+ - app/views/meta_workflows/_loader_message.html.erb
164
167
  - app/views/meta_workflows/_redirect.html.erb
165
168
  - app/views/meta_workflows/_response_form_lexi.html.erb
166
169
  - app/views/meta_workflows/_response_lexi.html.erb
@@ -1,17 +0,0 @@
1
- <%= turbo_frame_tag target_frame_id(record) do %>
2
- <div class="flex flex-col items-center justify-center gap-2"
3
- data-controller="loading-phrases"
4
- data-loading-phrases-phrases-value="<%= (local_assigns[:step_progress] || ["Processing your request...", "Talking to the LLM..."]).to_json %>">
5
- <h2
6
- class="text-center font-semibold"
7
- data-loading-phrases-target="message"
8
- >
9
- Processing your request...
10
- </h2>
11
- <div class="sm-sprite loader">
12
- <span class="image-container">
13
- <img class="" src="https://cdn.strongmind.com/backpack-ui/latest/assets/images/png/loaders/CB_loader.png" alt="loaders/CB_loader.png">
14
- </span>
15
- </div>
16
- </div>
17
- <% end %>