@autobe/ui 0.21.0 → 0.22.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 (249) hide show
  1. package/lib/{AutoBeAssistantMessageMovie.d.ts → components/AutoBeAssistantMessageMovie.d.ts} +1 -1
  2. package/lib/{AutoBeAssistantMessageMovie.js → components/AutoBeAssistantMessageMovie.js} +3 -1
  3. package/lib/components/AutoBeAssistantMessageMovie.js.map +1 -0
  4. package/lib/components/AutoBeChatMain.d.ts +12 -0
  5. package/lib/components/AutoBeChatMain.js +88 -0
  6. package/lib/components/AutoBeChatMain.js.map +1 -0
  7. package/lib/components/AutoBeStatusModal.d.ts +6 -0
  8. package/lib/components/AutoBeStatusModal.js +269 -0
  9. package/lib/components/AutoBeStatusModal.js.map +1 -0
  10. package/lib/{AutoBeUserMessageMovie.d.ts → components/AutoBeUserMessageMovie.d.ts} +1 -1
  11. package/lib/{AutoBeUserMessageMovie.js → components/AutoBeUserMessageMovie.js} +3 -1
  12. package/lib/components/AutoBeUserMessageMovie.js.map +1 -0
  13. package/lib/{common → components/common}/ChatBubble.js +1 -1
  14. package/lib/components/common/ChatBubble.js.map +1 -0
  15. package/lib/{common → components/common}/Collapsible.js +6 -6
  16. package/lib/components/common/Collapsible.js.map +1 -0
  17. package/lib/components/common/index.js.map +1 -0
  18. package/lib/components/common/openai/OpenAIContent.js.map +1 -0
  19. package/lib/components/common/openai/OpenAIUserAudioContent.js.map +1 -0
  20. package/lib/components/common/openai/OpenAIUserFileContent.js.map +1 -0
  21. package/lib/components/common/openai/OpenAIUserImageContent.js.map +1 -0
  22. package/lib/{common → components/common}/openai/OpenAIUserTextContent.js +0 -1
  23. package/lib/components/common/openai/OpenAIUserTextContent.js.map +1 -0
  24. package/lib/components/common/openai/index.js.map +1 -0
  25. package/lib/components/events/AutoBeCompleteEventMovie.js.map +1 -0
  26. package/lib/components/events/AutoBeCorrectEventMovie.d.ts +9 -0
  27. package/lib/components/events/AutoBeCorrectEventMovie.js +146 -0
  28. package/lib/components/events/AutoBeCorrectEventMovie.js.map +1 -0
  29. package/lib/{events → components/events}/AutoBeEventMovie.d.ts +1 -2
  30. package/lib/{events → components/events}/AutoBeEventMovie.js +16 -7
  31. package/lib/components/events/AutoBeEventMovie.js.map +1 -0
  32. package/lib/components/events/AutoBeProgressEventMovie.js.map +1 -0
  33. package/lib/components/events/AutoBeScenarioEventMovie.js.map +1 -0
  34. package/lib/components/events/AutoBeStartEventMovie.js.map +1 -0
  35. package/lib/{events → components/events}/AutoBeValidateEventMovie.js +2 -2
  36. package/lib/components/events/AutoBeValidateEventMovie.js.map +1 -0
  37. package/lib/{events → components/events}/common/CollapsibleEventGroup.js +1 -5
  38. package/lib/components/events/common/CollapsibleEventGroup.js.map +1 -0
  39. package/lib/components/events/common/EventCard.js.map +1 -0
  40. package/lib/components/events/common/EventContent.js.map +1 -0
  41. package/lib/{events → components/events}/common/EventHeader.js +1 -1
  42. package/lib/components/events/common/EventHeader.js.map +1 -0
  43. package/lib/components/events/common/EventIcon.js.map +1 -0
  44. package/lib/{events → components/events}/common/ProgressBar.js +3 -2
  45. package/lib/components/events/common/ProgressBar.js.map +1 -0
  46. package/lib/components/events/common/index.js.map +1 -0
  47. package/lib/components/events/groups/CorrectEventGroup.d.ts +12 -0
  48. package/lib/components/events/groups/CorrectEventGroup.js +83 -0
  49. package/lib/components/events/groups/CorrectEventGroup.js.map +1 -0
  50. package/lib/{events → components/events}/groups/ValidateEventGroup.js +3 -3
  51. package/lib/components/events/groups/ValidateEventGroup.js.map +1 -0
  52. package/lib/{events → components/events}/groups/index.d.ts +1 -0
  53. package/lib/components/events/groups/index.js +8 -0
  54. package/lib/components/events/groups/index.js.map +1 -0
  55. package/lib/{events → components/events}/index.d.ts +1 -0
  56. package/lib/{events → components/events}/index.js +3 -1
  57. package/lib/components/events/index.js.map +1 -0
  58. package/lib/components/events/utils/eventGrouper.js.map +1 -0
  59. package/lib/components/events/utils/index.js.map +1 -0
  60. package/lib/components/index.d.ts +7 -0
  61. package/lib/{banner → components}/index.js +7 -4
  62. package/lib/components/index.js.map +1 -0
  63. package/lib/{upload → components/upload}/AutoBeChatUploadBox.js +3 -2
  64. package/lib/components/upload/AutoBeChatUploadBox.js.map +1 -0
  65. package/lib/components/upload/AutoBeChatUploadSendButton.js.map +1 -0
  66. package/lib/components/upload/AutoBeFileUploadBox.js.map +1 -0
  67. package/lib/components/upload/AutoBeUploadConfig.js.map +1 -0
  68. package/lib/{upload → components/upload}/AutoBeVoiceRecoderButton.js +1 -1
  69. package/lib/components/upload/AutoBeVoiceRecoderButton.js.map +1 -0
  70. package/lib/components/upload/index.js.map +1 -0
  71. package/lib/constant/color.d.ts +4 -0
  72. package/lib/constant/color.js +4 -0
  73. package/lib/constant/color.js.map +1 -1
  74. package/lib/context/AutoBeAgentContext.d.ts +20 -0
  75. package/lib/context/AutoBeAgentContext.js +50 -0
  76. package/lib/context/AutoBeAgentContext.js.map +1 -0
  77. package/lib/hooks/index.d.ts +1 -0
  78. package/lib/hooks/index.js +1 -0
  79. package/lib/hooks/index.js.map +1 -1
  80. package/lib/hooks/useEscapeKey.d.ts +7 -0
  81. package/lib/hooks/useEscapeKey.js +27 -0
  82. package/lib/hooks/useEscapeKey.js.map +1 -0
  83. package/lib/hooks/useMediaQuery.d.ts +8 -3
  84. package/lib/hooks/useMediaQuery.js +8 -3
  85. package/lib/hooks/useMediaQuery.js.map +1 -1
  86. package/lib/icons/Receipt.d.ts +12 -0
  87. package/lib/icons/Receipt.js +9 -0
  88. package/lib/icons/Receipt.js.map +1 -0
  89. package/lib/index.d.ts +3 -9
  90. package/lib/index.js +3 -17
  91. package/lib/index.js.map +1 -1
  92. package/package.json +3 -3
  93. package/src/{AutoBeAssistantMessageMovie.tsx → components/AutoBeAssistantMessageMovie.tsx} +1 -1
  94. package/src/components/AutoBeChatMain.tsx +178 -0
  95. package/src/components/AutoBeStatusModal.tsx +483 -0
  96. package/src/{AutoBeUserMessageMovie.tsx → components/AutoBeUserMessageMovie.tsx} +3 -1
  97. package/src/{common → components/common}/ChatBubble.tsx +1 -1
  98. package/src/{common → components/common}/Collapsible.tsx +7 -7
  99. package/src/{common → components/common}/openai/OpenAIUserTextContent.tsx +0 -1
  100. package/src/components/events/AutoBeCorrectEventMovie.tsx +368 -0
  101. package/src/{events → components/events}/AutoBeEventMovie.tsx +25 -9
  102. package/src/{events → components/events}/AutoBeValidateEventMovie.tsx +2 -2
  103. package/src/{events → components/events}/common/CollapsibleEventGroup.tsx +1 -10
  104. package/src/{events → components/events}/common/EventHeader.tsx +1 -1
  105. package/src/{events → components/events}/common/ProgressBar.tsx +3 -2
  106. package/src/components/events/groups/CorrectEventGroup.tsx +183 -0
  107. package/src/{events → components/events}/groups/ValidateEventGroup.tsx +3 -3
  108. package/src/{events → components/events}/groups/index.ts +4 -0
  109. package/src/{events → components/events}/index.ts +1 -0
  110. package/src/components/index.ts +7 -0
  111. package/src/{upload → components/upload}/AutoBeChatUploadBox.tsx +4 -2
  112. package/src/{upload → components/upload}/AutoBeVoiceRecoderButton.tsx +1 -1
  113. package/src/constant/color.ts +4 -0
  114. package/src/context/AutoBeAgentContext.tsx +79 -0
  115. package/src/hooks/index.ts +1 -0
  116. package/src/hooks/useEscapeKey.ts +24 -0
  117. package/src/hooks/useMediaQuery.ts +8 -3
  118. package/src/icons/Receipt.tsx +74 -0
  119. package/src/index.ts +3 -12
  120. package/lib/AutoBeAssistantMessageMovie.js.map +0 -1
  121. package/lib/AutoBeChatMain.d.ts +0 -16
  122. package/lib/AutoBeChatMain.js +0 -51
  123. package/lib/AutoBeChatMain.js.map +0 -1
  124. package/lib/AutoBeUserMessageMovie.js.map +0 -1
  125. package/lib/banner/AutoBeAgentInformation.d.ts +0 -15
  126. package/lib/banner/AutoBeAgentInformation.js +0 -41
  127. package/lib/banner/AutoBeAgentInformation.js.map +0 -1
  128. package/lib/banner/AutoBeChatBanner.d.ts +0 -15
  129. package/lib/banner/AutoBeChatBanner.js +0 -29
  130. package/lib/banner/AutoBeChatBanner.js.map +0 -1
  131. package/lib/banner/AutoBeChatState.d.ts +0 -6
  132. package/lib/banner/AutoBeChatState.js +0 -80
  133. package/lib/banner/AutoBeChatState.js.map +0 -1
  134. package/lib/banner/AutoBeTokenUsage.d.ts +0 -14
  135. package/lib/banner/AutoBeTokenUsage.js +0 -60
  136. package/lib/banner/AutoBeTokenUsage.js.map +0 -1
  137. package/lib/banner/index.d.ts +0 -4
  138. package/lib/banner/index.js.map +0 -1
  139. package/lib/common/ChatBubble.js.map +0 -1
  140. package/lib/common/Collapsible.js.map +0 -1
  141. package/lib/common/index.js.map +0 -1
  142. package/lib/common/openai/OpenAIContent.js.map +0 -1
  143. package/lib/common/openai/OpenAIUserAudioContent.js.map +0 -1
  144. package/lib/common/openai/OpenAIUserFileContent.js.map +0 -1
  145. package/lib/common/openai/OpenAIUserImageContent.js.map +0 -1
  146. package/lib/common/openai/OpenAIUserTextContent.js.map +0 -1
  147. package/lib/common/openai/index.js.map +0 -1
  148. package/lib/events/AutoBeCompleteEventMovie.js.map +0 -1
  149. package/lib/events/AutoBeEventMovie.js.map +0 -1
  150. package/lib/events/AutoBeProgressEventMovie.js.map +0 -1
  151. package/lib/events/AutoBeScenarioEventMovie.js.map +0 -1
  152. package/lib/events/AutoBeStartEventMovie.js.map +0 -1
  153. package/lib/events/AutoBeValidateEventMovie.js.map +0 -1
  154. package/lib/events/common/CollapsibleEventGroup.js.map +0 -1
  155. package/lib/events/common/EventCard.js.map +0 -1
  156. package/lib/events/common/EventContent.js.map +0 -1
  157. package/lib/events/common/EventHeader.js.map +0 -1
  158. package/lib/events/common/EventIcon.js.map +0 -1
  159. package/lib/events/common/ProgressBar.js.map +0 -1
  160. package/lib/events/common/index.js.map +0 -1
  161. package/lib/events/groups/ValidateEventGroup.js.map +0 -1
  162. package/lib/events/groups/index.js +0 -6
  163. package/lib/events/groups/index.js.map +0 -1
  164. package/lib/events/index.js.map +0 -1
  165. package/lib/events/utils/eventGrouper.js.map +0 -1
  166. package/lib/events/utils/index.js.map +0 -1
  167. package/lib/upload/AutoBeChatUploadBox.js.map +0 -1
  168. package/lib/upload/AutoBeChatUploadSendButton.js.map +0 -1
  169. package/lib/upload/AutoBeFileUploadBox.js.map +0 -1
  170. package/lib/upload/AutoBeUploadConfig.js.map +0 -1
  171. package/lib/upload/AutoBeVoiceRecoderButton.js.map +0 -1
  172. package/lib/upload/index.js.map +0 -1
  173. package/src/AutoBeChatMain.tsx +0 -123
  174. package/src/banner/AutoBeAgentInformation.tsx +0 -102
  175. package/src/banner/AutoBeChatBanner.tsx +0 -72
  176. package/src/banner/AutoBeChatState.tsx +0 -152
  177. package/src/banner/AutoBeTokenUsage.tsx +0 -152
  178. package/src/banner/index.ts +0 -4
  179. /package/lib/{common → components/common}/ChatBubble.d.ts +0 -0
  180. /package/lib/{common → components/common}/Collapsible.d.ts +0 -0
  181. /package/lib/{common → components/common}/index.d.ts +0 -0
  182. /package/lib/{common → components/common}/index.js +0 -0
  183. /package/lib/{common → components/common}/openai/OpenAIContent.d.ts +0 -0
  184. /package/lib/{common → components/common}/openai/OpenAIContent.js +0 -0
  185. /package/lib/{common → components/common}/openai/OpenAIUserAudioContent.d.ts +0 -0
  186. /package/lib/{common → components/common}/openai/OpenAIUserAudioContent.js +0 -0
  187. /package/lib/{common → components/common}/openai/OpenAIUserFileContent.d.ts +0 -0
  188. /package/lib/{common → components/common}/openai/OpenAIUserFileContent.js +0 -0
  189. /package/lib/{common → components/common}/openai/OpenAIUserImageContent.d.ts +0 -0
  190. /package/lib/{common → components/common}/openai/OpenAIUserImageContent.js +0 -0
  191. /package/lib/{common → components/common}/openai/OpenAIUserTextContent.d.ts +0 -0
  192. /package/lib/{common → components/common}/openai/index.d.ts +0 -0
  193. /package/lib/{common → components/common}/openai/index.js +0 -0
  194. /package/lib/{events → components/events}/AutoBeCompleteEventMovie.d.ts +0 -0
  195. /package/lib/{events → components/events}/AutoBeCompleteEventMovie.js +0 -0
  196. /package/lib/{events → components/events}/AutoBeProgressEventMovie.d.ts +0 -0
  197. /package/lib/{events → components/events}/AutoBeProgressEventMovie.js +0 -0
  198. /package/lib/{events → components/events}/AutoBeScenarioEventMovie.d.ts +0 -0
  199. /package/lib/{events → components/events}/AutoBeScenarioEventMovie.js +0 -0
  200. /package/lib/{events → components/events}/AutoBeStartEventMovie.d.ts +0 -0
  201. /package/lib/{events → components/events}/AutoBeStartEventMovie.js +0 -0
  202. /package/lib/{events → components/events}/AutoBeValidateEventMovie.d.ts +0 -0
  203. /package/lib/{events → components/events}/common/CollapsibleEventGroup.d.ts +0 -0
  204. /package/lib/{events → components/events}/common/EventCard.d.ts +0 -0
  205. /package/lib/{events → components/events}/common/EventCard.js +0 -0
  206. /package/lib/{events → components/events}/common/EventContent.d.ts +0 -0
  207. /package/lib/{events → components/events}/common/EventContent.js +0 -0
  208. /package/lib/{events → components/events}/common/EventHeader.d.ts +0 -0
  209. /package/lib/{events → components/events}/common/EventIcon.d.ts +0 -0
  210. /package/lib/{events → components/events}/common/EventIcon.js +0 -0
  211. /package/lib/{events → components/events}/common/ProgressBar.d.ts +0 -0
  212. /package/lib/{events → components/events}/common/index.d.ts +0 -0
  213. /package/lib/{events → components/events}/common/index.js +0 -0
  214. /package/lib/{events → components/events}/groups/ValidateEventGroup.d.ts +0 -0
  215. /package/lib/{events → components/events}/utils/eventGrouper.d.ts +0 -0
  216. /package/lib/{events → components/events}/utils/eventGrouper.js +0 -0
  217. /package/lib/{events → components/events}/utils/index.d.ts +0 -0
  218. /package/lib/{events → components/events}/utils/index.js +0 -0
  219. /package/lib/{upload → components/upload}/AutoBeChatUploadBox.d.ts +0 -0
  220. /package/lib/{upload → components/upload}/AutoBeChatUploadSendButton.d.ts +0 -0
  221. /package/lib/{upload → components/upload}/AutoBeChatUploadSendButton.js +0 -0
  222. /package/lib/{upload → components/upload}/AutoBeFileUploadBox.d.ts +0 -0
  223. /package/lib/{upload → components/upload}/AutoBeFileUploadBox.js +0 -0
  224. /package/lib/{upload → components/upload}/AutoBeUploadConfig.d.ts +0 -0
  225. /package/lib/{upload → components/upload}/AutoBeUploadConfig.js +0 -0
  226. /package/lib/{upload → components/upload}/AutoBeVoiceRecoderButton.d.ts +0 -0
  227. /package/lib/{upload → components/upload}/index.d.ts +0 -0
  228. /package/lib/{upload → components/upload}/index.js +0 -0
  229. /package/src/{common → components/common}/index.ts +0 -0
  230. /package/src/{common → components/common}/openai/OpenAIContent.tsx +0 -0
  231. /package/src/{common → components/common}/openai/OpenAIUserAudioContent.tsx +0 -0
  232. /package/src/{common → components/common}/openai/OpenAIUserFileContent.tsx +0 -0
  233. /package/src/{common → components/common}/openai/OpenAIUserImageContent.tsx +0 -0
  234. /package/src/{common → components/common}/openai/index.ts +0 -0
  235. /package/src/{events → components/events}/AutoBeCompleteEventMovie.tsx +0 -0
  236. /package/src/{events → components/events}/AutoBeProgressEventMovie.tsx +0 -0
  237. /package/src/{events → components/events}/AutoBeScenarioEventMovie.tsx +0 -0
  238. /package/src/{events → components/events}/AutoBeStartEventMovie.tsx +0 -0
  239. /package/src/{events → components/events}/README.md +0 -0
  240. /package/src/{events → components/events}/common/EventCard.tsx +0 -0
  241. /package/src/{events → components/events}/common/EventContent.tsx +0 -0
  242. /package/src/{events → components/events}/common/EventIcon.tsx +0 -0
  243. /package/src/{events → components/events}/common/index.ts +0 -0
  244. /package/src/{events → components/events}/utils/eventGrouper.tsx +0 -0
  245. /package/src/{events → components/events}/utils/index.ts +0 -0
  246. /package/src/{upload → components/upload}/AutoBeChatUploadSendButton.tsx +0 -0
  247. /package/src/{upload → components/upload}/AutoBeFileUploadBox.tsx +0 -0
  248. /package/src/{upload → components/upload}/AutoBeUploadConfig.ts +0 -0
  249. /package/src/{upload → components/upload}/index.ts +0 -0
@@ -0,0 +1,368 @@
1
+ import {
2
+ AutoBePrismaCorrectEvent,
3
+ AutoBeRealizeAuthorizationCorrectEvent,
4
+ AutoBeRealizeCorrectEvent,
5
+ AutoBeTestCorrectEvent,
6
+ } from "@autobe/interface";
7
+ import React from "react";
8
+
9
+ import { EventCard, EventContent, EventHeader } from "./common";
10
+
11
+ /** Props interface for AutoBeCorrectEventMovie component */
12
+ export interface IAutoBeCorrectEventMovieProps {
13
+ /** Correct event to display */
14
+ event:
15
+ | AutoBePrismaCorrectEvent
16
+ | AutoBeTestCorrectEvent
17
+ | AutoBeRealizeCorrectEvent
18
+ | AutoBeRealizeAuthorizationCorrectEvent;
19
+ }
20
+
21
+ /** Event type definition */
22
+ type CorrectEventType =
23
+ | "prismaCorrect"
24
+ | "testCorrect"
25
+ | "realizeCorrect"
26
+ | "realizeAuthorizationCorrect";
27
+
28
+ /** Get step configuration based on event type */
29
+ function getStepConfig(eventType: CorrectEventType): {
30
+ title: string;
31
+ description: string;
32
+ } {
33
+ switch (eventType) {
34
+ case "prismaCorrect":
35
+ return {
36
+ title: "Prisma Schema Corrected",
37
+ description: "Database schema has been successfully corrected",
38
+ };
39
+ case "testCorrect":
40
+ return {
41
+ title: "Test Code Corrected",
42
+ description: "Test implementation has been successfully corrected",
43
+ };
44
+ case "realizeCorrect":
45
+ return {
46
+ title: "Implementation Corrected",
47
+ description: "API implementation has been successfully corrected",
48
+ };
49
+ case "realizeAuthorizationCorrect":
50
+ return {
51
+ title: "Authorization Corrected",
52
+ description: "Authorization logic has been successfully corrected",
53
+ };
54
+ default:
55
+ eventType satisfies never;
56
+ throw new Error(`Unknown event type: ${eventType}`);
57
+ }
58
+ }
59
+
60
+ /** Get additional details section based on event type */
61
+ function getEventDetails(
62
+ event: IAutoBeCorrectEventMovieProps["event"],
63
+ ): React.ReactElement | null {
64
+ const containerStyle: React.CSSProperties = {
65
+ display: "flex",
66
+ flexDirection: "column",
67
+ gap: "1rem",
68
+ };
69
+
70
+ const sectionStyle: React.CSSProperties = {
71
+ backgroundColor: "#f0fdf4",
72
+ padding: "1rem",
73
+ borderRadius: "0.5rem",
74
+ border: "1px solid #bbf7d0",
75
+ };
76
+
77
+ const headerStyle: React.CSSProperties = {
78
+ display: "flex",
79
+ alignItems: "center",
80
+ gap: "0.5rem",
81
+ marginBottom: "0.75rem",
82
+ fontSize: "0.875rem",
83
+ fontWeight: "600",
84
+ color: "#16a34a",
85
+ };
86
+
87
+ const infoItemStyle: React.CSSProperties = {
88
+ display: "flex",
89
+ justifyContent: "space-between",
90
+ alignItems: "center",
91
+ padding: "0.5rem",
92
+ backgroundColor: "#f8fafc",
93
+ borderRadius: "0.25rem",
94
+ fontSize: "0.75rem",
95
+ color: "#475569",
96
+ marginBottom: "0.5rem",
97
+ };
98
+
99
+ const labelStyle: React.CSSProperties = {
100
+ fontWeight: "500",
101
+ color: "#64748b",
102
+ };
103
+
104
+ const valueStyle: React.CSSProperties = {
105
+ fontFamily: "monospace",
106
+ backgroundColor: "#e2e8f0",
107
+ padding: "0.125rem 0.375rem",
108
+ borderRadius: "0.25rem",
109
+ fontSize: "0.625rem",
110
+ };
111
+
112
+ const codeBlockStyle: React.CSSProperties = {
113
+ backgroundColor: "#f1f5f9",
114
+ border: "1px solid #e2e8f0",
115
+ borderRadius: "0.375rem",
116
+ padding: "0.75rem",
117
+ marginTop: "0.5rem",
118
+ fontSize: "0.75rem",
119
+ fontFamily: "monospace",
120
+ color: "#475569",
121
+ maxHeight: "120px",
122
+ overflowY: "auto",
123
+ lineHeight: "1.4",
124
+ whiteSpace: "pre-wrap",
125
+ };
126
+
127
+ const badgeStyle: React.CSSProperties = {
128
+ display: "inline-flex",
129
+ alignItems: "center",
130
+ padding: "0.25rem 0.5rem",
131
+ backgroundColor: "#dcfce7",
132
+ color: "#16a34a",
133
+ borderRadius: "0.375rem",
134
+ fontSize: "0.75rem",
135
+ fontWeight: "500",
136
+ border: "1px solid #bbf7d0",
137
+ };
138
+
139
+ switch (event.type) {
140
+ case "prismaCorrect":
141
+ const prismaEvent = event as IAutoBeCorrectEventMovieProps["event"] & {
142
+ type: "prismaCorrect";
143
+ };
144
+ return (
145
+ <div style={containerStyle}>
146
+ <div style={sectionStyle}>
147
+ <div style={headerStyle}>
148
+ 🗄️ <span>Database Schema Corrections</span>
149
+ </div>
150
+
151
+ <div style={infoItemStyle}>
152
+ <span style={labelStyle}>Analysis Step:</span>
153
+ <span style={valueStyle}>Step {prismaEvent.step}</span>
154
+ </div>
155
+
156
+ {prismaEvent.planning && (
157
+ <div>
158
+ <div style={labelStyle}>🎯 Correction Strategy:</div>
159
+ <div style={codeBlockStyle}>{prismaEvent.planning}</div>
160
+ </div>
161
+ )}
162
+
163
+ {prismaEvent.failure && (
164
+ <div>
165
+ <div style={labelStyle}>⚠️ Validation Issues:</div>
166
+ <div style={codeBlockStyle}>
167
+ {JSON.stringify(prismaEvent.failure, null, 2)}
168
+ </div>
169
+ </div>
170
+ )}
171
+
172
+ <div style={{ marginTop: "0.75rem" }}>
173
+ <span style={badgeStyle}>✓ Schema Validated</span>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ );
178
+
179
+ case "testCorrect":
180
+ const testEvent = event as IAutoBeCorrectEventMovieProps["event"] & {
181
+ type: "testCorrect";
182
+ };
183
+ return (
184
+ <div style={containerStyle}>
185
+ <div style={sectionStyle}>
186
+ <div style={headerStyle}>
187
+ 🧪 <span>Test Suite Corrections</span>
188
+ </div>
189
+
190
+ <div style={infoItemStyle}>
191
+ <span style={labelStyle}>Analysis Step:</span>
192
+ <span style={valueStyle}>Step {testEvent.step}</span>
193
+ </div>
194
+
195
+ {testEvent.file?.location && (
196
+ <div style={infoItemStyle}>
197
+ <span style={labelStyle}>Test File:</span>
198
+ <span style={valueStyle}>{testEvent.file.location}</span>
199
+ </div>
200
+ )}
201
+
202
+ {testEvent.think && (
203
+ <div>
204
+ <div style={labelStyle}>🔄 Analysis:</div>
205
+ <div style={codeBlockStyle}>{testEvent.think}</div>
206
+ </div>
207
+ )}
208
+
209
+ {testEvent.review && (
210
+ <div>
211
+ <div style={labelStyle}>📋 Review Results:</div>
212
+ <div style={codeBlockStyle}>{testEvent.review}</div>
213
+ </div>
214
+ )}
215
+
216
+ <div style={{ marginTop: "0.75rem" }}>
217
+ <span style={badgeStyle}>✓ Tests Corrected</span>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ );
222
+
223
+ case "realizeCorrect":
224
+ const realizeEvent = event as IAutoBeCorrectEventMovieProps["event"] & {
225
+ type: "realizeCorrect";
226
+ };
227
+ return (
228
+ <div style={containerStyle}>
229
+ <div style={sectionStyle}>
230
+ <div style={headerStyle}>
231
+ ⚙️ <span>Implementation Corrections</span>
232
+ </div>
233
+
234
+ <div style={infoItemStyle}>
235
+ <span style={labelStyle}>Analysis Step:</span>
236
+ <span style={valueStyle}>Step {realizeEvent.step}</span>
237
+ </div>
238
+
239
+ <div style={infoItemStyle}>
240
+ <span style={labelStyle}>File Location:</span>
241
+ <span style={valueStyle}>{realizeEvent.location}</span>
242
+ </div>
243
+
244
+ {realizeEvent.content && (
245
+ <div>
246
+ <div style={labelStyle}>📄 Corrected Implementation:</div>
247
+ <div style={codeBlockStyle}>
248
+ {realizeEvent.content.slice(0, 500)}
249
+ {realizeEvent.content.length > 500 && "..."}
250
+ </div>
251
+ </div>
252
+ )}
253
+
254
+ <div style={{ marginTop: "0.75rem" }}>
255
+ <span style={badgeStyle}>✓ Implementation Fixed</span>
256
+ </div>
257
+ </div>
258
+ </div>
259
+ );
260
+
261
+ case "realizeAuthorizationCorrect":
262
+ const authEvent = event as IAutoBeCorrectEventMovieProps["event"] & {
263
+ type: "realizeAuthorizationCorrect";
264
+ };
265
+ return (
266
+ <div style={containerStyle}>
267
+ <div style={sectionStyle}>
268
+ <div style={headerStyle}>
269
+ 🔐 <span>Authorization Corrections</span>
270
+ </div>
271
+
272
+ <div style={infoItemStyle}>
273
+ <span style={labelStyle}>Analysis Step:</span>
274
+ <span style={valueStyle}>Step {authEvent.step}</span>
275
+ </div>
276
+
277
+ {authEvent.authorization && (
278
+ <div style={infoItemStyle}>
279
+ <span style={labelStyle}>Authorization Module:</span>
280
+ <span style={valueStyle}>
281
+ {JSON.stringify(authEvent.authorization).slice(0, 50)}...
282
+ </span>
283
+ </div>
284
+ )}
285
+
286
+ {authEvent.result && (
287
+ <div>
288
+ <div style={labelStyle}>⚠️ Compilation Issues:</div>
289
+ <div style={codeBlockStyle}>
290
+ {JSON.stringify(authEvent.result, null, 2)}
291
+ </div>
292
+ </div>
293
+ )}
294
+
295
+ <div style={{ marginTop: "0.75rem" }}>
296
+ <span style={badgeStyle}>✓ Authorization Secured</span>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ );
301
+
302
+ default:
303
+ return null;
304
+ }
305
+ }
306
+
307
+ /** Component for displaying correction events */
308
+ export const AutoBeCorrectEventMovie = (
309
+ props: IAutoBeCorrectEventMovieProps,
310
+ ) => {
311
+ const eventType = props.event.type;
312
+ const config = getStepConfig(eventType);
313
+ const eventDetails = getEventDetails(props.event);
314
+
315
+ return (
316
+ <EventCard variant="success">
317
+ <EventHeader
318
+ title={config.title}
319
+ subtitle={config.description}
320
+ timestamp={props.event.created_at}
321
+ iconType="success"
322
+ />
323
+ <EventContent>
324
+ <div
325
+ style={{
326
+ display: "flex",
327
+ flexDirection: "column",
328
+ gap: "0.75rem",
329
+ }}
330
+ >
331
+ <div
332
+ style={{
333
+ display: "flex",
334
+ alignItems: "center",
335
+ gap: "0.5rem",
336
+ }}
337
+ >
338
+ <span
339
+ style={{
340
+ color: "#16a34a",
341
+ fontWeight: "600",
342
+ fontSize: "0.875rem",
343
+ }}
344
+ >
345
+ ✓ Correction Applied
346
+ </span>
347
+ </div>
348
+
349
+ <div
350
+ style={{
351
+ fontSize: "0.875rem",
352
+ color: "#475569",
353
+ lineHeight: "1.5",
354
+ }}
355
+ >
356
+ The system has automatically detected and corrected issues in the
357
+ code. The corrected version is now ready for the next step.
358
+ </div>
359
+
360
+ {/* Additional details based on event type */}
361
+ {eventDetails}
362
+ </div>
363
+ </EventContent>
364
+ </EventCard>
365
+ );
366
+ };
367
+
368
+ export default AutoBeCorrectEventMovie;
@@ -1,20 +1,22 @@
1
- import { AutoBeEvent, IAutoBeGetFilesOptions } from "@autobe/interface";
1
+ import { AutoBeEvent } from "@autobe/interface";
2
2
 
3
3
  import {
4
4
  AutoBeCompleteEventMovie,
5
+ AutoBeCorrectEventMovie,
5
6
  AutoBeProgressEventMovie,
6
7
  AutoBeScenarioEventMovie,
7
8
  AutoBeStartEventMovie,
8
9
  AutoBeValidateEventMovie,
10
+ CorrectEventGroup,
11
+ ICorrectEventGroupProps,
9
12
  IValidateEventGroupProps,
10
13
  ValidateEventGroup,
11
14
  } from ".";
12
- import { AutoBeAssistantMessageMovie, AutoBeUserMessageMovie } from "..";
15
+ import { useAutoBeAgent } from "../../context/AutoBeAgentContext";
16
+ import { AutoBeAssistantMessageMovie } from "../AutoBeAssistantMessageMovie";
17
+ import { AutoBeUserMessageMovie } from "../AutoBeUserMessageMovie";
13
18
 
14
19
  export interface IAutoBeEventMovieProps<Event extends AutoBeEvent> {
15
- getFiles: (
16
- options?: Partial<IAutoBeGetFilesOptions>,
17
- ) => Promise<Record<string, string>>;
18
20
  events: Event[];
19
21
  last: boolean;
20
22
  }
@@ -22,6 +24,8 @@ export interface IAutoBeEventMovieProps<Event extends AutoBeEvent> {
22
24
  export function AutoBeEventMovie<Event extends AutoBeEvent>(
23
25
  props: IAutoBeEventMovieProps<Event>,
24
26
  ) {
27
+ const { service } = useAutoBeAgent();
28
+
25
29
  const back: Event = props.events[props.events.length - 1]!;
26
30
  switch (back.type) {
27
31
  case "userMessage":
@@ -89,14 +93,26 @@ export function AutoBeEventMovie<Event extends AutoBeEvent>(
89
93
  case "testComplete":
90
94
  case "realizeComplete":
91
95
  return (
92
- <AutoBeCompleteEventMovie getFiles={props.getFiles} event={back} />
96
+ <AutoBeCompleteEventMovie getFiles={service.getFiles} event={back} />
93
97
  );
94
- // DISCARD
98
+ // CORRECT EVENTS
95
99
  case "prismaCorrect":
96
- case "interfaceEndpointsReview":
97
100
  case "testCorrect":
98
- case "realizeAuthorizationCorrect":
99
101
  case "realizeCorrect":
102
+ case "realizeAuthorizationCorrect": {
103
+ if (props.events.length === 1) {
104
+ return <AutoBeCorrectEventMovie event={back} />;
105
+ }
106
+
107
+ return (
108
+ <CorrectEventGroup
109
+ events={props.events as ICorrectEventGroupProps["events"]}
110
+ defaultCollapsed={true}
111
+ />
112
+ );
113
+ }
114
+ // DISCARD
115
+ case "interfaceEndpointsReview":
100
116
  case "realizeTestComplete":
101
117
  case "realizeAuthorizationComplete":
102
118
  case "vendorRequest":
@@ -30,13 +30,13 @@ export const AutoBeValidateEventMovie = (
30
30
 
31
31
  const getCardVariant = () => {
32
32
  if (isSuccess) return "success";
33
- if (isError) return "error";
33
+ if (isError) return "warning";
34
34
  return "warning";
35
35
  };
36
36
 
37
37
  const getIconType = () => {
38
38
  if (isSuccess) return "success";
39
- if (isError) return "error";
39
+ if (isError) return "warning";
40
40
  return "warning";
41
41
  };
42
42
 
@@ -143,16 +143,7 @@ export const CollapsibleEventGroup = <T,>(
143
143
  }}
144
144
  >
145
145
  {events.map((event, index) => (
146
- <div
147
- key={index}
148
- style={{
149
- border: "1px solid #e2e8f0",
150
- borderRadius: "0.5rem",
151
- overflow: "hidden",
152
- }}
153
- >
154
- {renderEvent(event, index)}
155
- </div>
146
+ <div key={index}>{renderEvent(event, index)}</div>
156
147
  ))}
157
148
  </div>
158
149
  )}
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from "react";
2
2
 
3
- import { formatTime } from "../../utils/time";
3
+ import { formatTime } from "../../../utils/time";
4
4
  import { EventIcon, EventIconType } from "./EventIcon";
5
5
 
6
6
  export interface IEventHeaderProps {
@@ -21,7 +21,8 @@ export const ProgressBar = (props: IProgressBarProps) => {
21
21
  showLabel = true,
22
22
  } = props;
23
23
 
24
- const percentage = Math.round((current / total) * 100);
24
+ const calibratedCurrent = current > total ? total : current;
25
+ const percentage = Math.round((calibratedCurrent / total) * 100);
25
26
 
26
27
  return (
27
28
  <>
@@ -53,7 +54,7 @@ export const ProgressBar = (props: IProgressBarProps) => {
53
54
  textAlign: "center",
54
55
  }}
55
56
  >
56
- {current} / {total} completed
57
+ {calibratedCurrent} / {total} completed
57
58
  </div>
58
59
  )}
59
60
  </>
@@ -0,0 +1,183 @@
1
+ import {
2
+ AutoBePrismaCorrectEvent,
3
+ AutoBeRealizeAuthorizationCorrectEvent,
4
+ AutoBeRealizeCorrectEvent,
5
+ AutoBeTestCorrectEvent,
6
+ } from "@autobe/interface";
7
+
8
+ import { AutoBeCorrectEventMovie } from "../AutoBeCorrectEventMovie";
9
+ import { CollapsibleEventGroup } from "../common/CollapsibleEventGroup";
10
+
11
+ type CorrectEvent =
12
+ | AutoBePrismaCorrectEvent
13
+ | AutoBeTestCorrectEvent
14
+ | AutoBeRealizeCorrectEvent
15
+ | AutoBeRealizeAuthorizationCorrectEvent;
16
+
17
+ export interface ICorrectEventGroupProps {
18
+ events: CorrectEvent[];
19
+ defaultCollapsed?: boolean;
20
+ }
21
+
22
+ /**
23
+ * Specialized group component for correction events Shows correction summary
24
+ * and statistics
25
+ */
26
+ export const CorrectEventGroup = (props: ICorrectEventGroupProps) => {
27
+ const { events, defaultCollapsed = true } = props;
28
+
29
+ if (events.length === 0) {
30
+ return null;
31
+ }
32
+
33
+ // Calculate correction statistics
34
+ const eventTypes = Array.from(new Set(events.map((e) => e.type)));
35
+ const eventTypeCounts = eventTypes.reduce(
36
+ (acc, type) => {
37
+ acc[type] = events.filter((e) => e.type === type).length;
38
+ return acc;
39
+ },
40
+ {} as Record<string, number>,
41
+ );
42
+
43
+ // Get latest step numbers for each event type
44
+ const latestSteps = eventTypes.reduce(
45
+ (acc, type) => {
46
+ const eventsOfType = events.filter((e) => e.type === type);
47
+ acc[type] = Math.max(...eventsOfType.map((e) => e.step));
48
+ return acc;
49
+ },
50
+ {} as Record<string, number>,
51
+ );
52
+
53
+ const renderSummary = (events: CorrectEvent[]) => (
54
+ <>
55
+ Correction events showing AI self-improvement feedback loop
56
+ <br />
57
+ <br />
58
+ <strong>Success Rate:</strong> 100% (All corrections applied successfully)
59
+ <br />
60
+ <strong>Total Corrections:</strong> {events.length} events
61
+ <br />
62
+ <strong>Event Types:</strong> {eventTypes.join(", ")}
63
+ <br />
64
+ <br />
65
+ <div
66
+ style={{
67
+ display: "flex",
68
+ flexDirection: "column",
69
+ gap: "0.5rem",
70
+ }}
71
+ >
72
+ {eventTypes.map((type) => {
73
+ const typeDisplayNames = {
74
+ prismaCorrect: "🗄️ Database Schema",
75
+ testCorrect: "🧪 Test Suite",
76
+ realizeCorrect: "⚙️ Implementation",
77
+ realizeAuthorizationCorrect: "🔐 Authorization",
78
+ };
79
+
80
+ return (
81
+ <div
82
+ key={type}
83
+ style={{
84
+ display: "flex",
85
+ justifyContent: "space-between",
86
+ alignItems: "center",
87
+ padding: "0.5rem",
88
+ backgroundColor: "#f0fdf4",
89
+ borderRadius: "0.25rem",
90
+ border: "1px solid #bbf7d0",
91
+ }}
92
+ >
93
+ <span style={{ fontSize: "0.75rem", fontWeight: "500" }}>
94
+ {typeDisplayNames[type as keyof typeof typeDisplayNames] ||
95
+ type}
96
+ </span>
97
+ <div
98
+ style={{ display: "flex", gap: "1rem", alignItems: "center" }}
99
+ >
100
+ <span style={{ fontSize: "0.75rem", color: "#16a34a" }}>
101
+ {eventTypeCounts[type]} corrections
102
+ </span>
103
+ <span
104
+ style={{
105
+ fontSize: "0.625rem",
106
+ color: "#64748b",
107
+ fontFamily: "monospace",
108
+ backgroundColor: "#e2e8f0",
109
+ padding: "0.125rem 0.375rem",
110
+ borderRadius: "0.25rem",
111
+ }}
112
+ >
113
+ Step {latestSteps[type]}
114
+ </span>
115
+ </div>
116
+ </div>
117
+ );
118
+ })}
119
+ </div>
120
+ <br />
121
+ <div
122
+ style={{
123
+ display: "flex",
124
+ gap: "0.5rem",
125
+ alignItems: "center",
126
+ }}
127
+ >
128
+ <div
129
+ style={{
130
+ display: "flex",
131
+ alignItems: "center",
132
+ gap: "0.25rem",
133
+ }}
134
+ >
135
+ <div
136
+ style={{
137
+ width: "12px",
138
+ height: "12px",
139
+ backgroundColor: "#16a34a",
140
+ borderRadius: "2px",
141
+ }}
142
+ />
143
+ <span style={{ fontSize: "0.75rem" }}>
144
+ Corrected: {events.length}
145
+ </span>
146
+ </div>
147
+ <div
148
+ style={{
149
+ display: "flex",
150
+ alignItems: "center",
151
+ gap: "0.25rem",
152
+ }}
153
+ >
154
+ <div
155
+ style={{
156
+ width: "12px",
157
+ height: "12px",
158
+ backgroundColor: "#10b981",
159
+ borderRadius: "2px",
160
+ }}
161
+ />
162
+ <span style={{ fontSize: "0.75rem" }}>Self-Improvement Active</span>
163
+ </div>
164
+ </div>
165
+ </>
166
+ );
167
+
168
+ return (
169
+ <CollapsibleEventGroup
170
+ events={events}
171
+ title="Correction Events"
172
+ iconType="success"
173
+ variant="success"
174
+ getTimestamp={(event) => event.created_at}
175
+ renderEvent={(event) => <AutoBeCorrectEventMovie event={event} />}
176
+ renderSummary={renderSummary}
177
+ defaultCollapsed={defaultCollapsed}
178
+ description="AI self-correction and improvement events"
179
+ />
180
+ );
181
+ };
182
+
183
+ export default CorrectEventGroup;