donobu 2.25.1 → 2.27.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 (179) hide show
  1. package/dist/apis/SpecialFlowsApi.d.ts.map +1 -1
  2. package/dist/apis/SpecialFlowsApi.js +60 -31
  3. package/dist/apis/SpecialFlowsApi.js.map +1 -1
  4. package/dist/apis/ToolsApi.d.ts +1 -6
  5. package/dist/apis/ToolsApi.d.ts.map +1 -1
  6. package/dist/apis/ToolsApi.js +4 -6
  7. package/dist/apis/ToolsApi.js.map +1 -1
  8. package/dist/assets/generated/version +1 -1
  9. package/dist/esm/apis/SpecialFlowsApi.d.ts.map +1 -1
  10. package/dist/esm/apis/SpecialFlowsApi.js +60 -31
  11. package/dist/esm/apis/SpecialFlowsApi.js.map +1 -1
  12. package/dist/esm/apis/ToolsApi.d.ts +1 -6
  13. package/dist/esm/apis/ToolsApi.d.ts.map +1 -1
  14. package/dist/esm/apis/ToolsApi.js +4 -6
  15. package/dist/esm/apis/ToolsApi.js.map +1 -1
  16. package/dist/esm/assets/generated/version +1 -1
  17. package/dist/esm/lib/fixtures/gptClients.js +1 -1
  18. package/dist/esm/lib/testExtension.d.ts.map +1 -1
  19. package/dist/esm/lib/testExtension.js +9 -2
  20. package/dist/esm/lib/testExtension.js.map +1 -1
  21. package/dist/esm/lib/utils/selfHealing.d.ts.map +1 -1
  22. package/dist/esm/lib/utils/selfHealing.js +44 -45
  23. package/dist/esm/lib/utils/selfHealing.js.map +1 -1
  24. package/dist/esm/main.d.ts +2 -0
  25. package/dist/esm/main.d.ts.map +1 -1
  26. package/dist/esm/main.js +7 -0
  27. package/dist/esm/main.js.map +1 -1
  28. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  29. package/dist/esm/managers/AdminApiController.js +1 -2
  30. package/dist/esm/managers/AdminApiController.js.map +1 -1
  31. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  32. package/dist/esm/managers/CodeGenerator.js +2 -1
  33. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  34. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  35. package/dist/esm/managers/DonobuFlowsManager.js +17 -16
  36. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  37. package/dist/esm/managers/GptConfigsManager.d.ts.map +1 -1
  38. package/dist/esm/managers/GptConfigsManager.js +3 -6
  39. package/dist/esm/managers/GptConfigsManager.js.map +1 -1
  40. package/dist/esm/managers/PageInspector.d.ts.map +1 -1
  41. package/dist/esm/managers/PageInspector.js +4 -2
  42. package/dist/esm/managers/PageInspector.js.map +1 -1
  43. package/dist/esm/managers/PluginLoader.d.ts +4 -0
  44. package/dist/esm/managers/PluginLoader.d.ts.map +1 -0
  45. package/dist/esm/managers/PluginLoader.js +104 -0
  46. package/dist/esm/managers/PluginLoader.js.map +1 -0
  47. package/dist/esm/managers/ToolManager.d.ts +8 -2
  48. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  49. package/dist/esm/managers/ToolManager.js +99 -74
  50. package/dist/esm/managers/ToolManager.js.map +1 -1
  51. package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
  52. package/dist/esm/utils/PlaywrightUtils.js +42 -22
  53. package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
  54. package/dist/lib/fixtures/gptClients.js +1 -1
  55. package/dist/lib/testExtension.d.ts.map +1 -1
  56. package/dist/lib/testExtension.js +9 -2
  57. package/dist/lib/testExtension.js.map +1 -1
  58. package/dist/lib/utils/selfHealing.d.ts.map +1 -1
  59. package/dist/lib/utils/selfHealing.js +44 -45
  60. package/dist/lib/utils/selfHealing.js.map +1 -1
  61. package/dist/main.d.ts +2 -0
  62. package/dist/main.d.ts.map +1 -1
  63. package/dist/main.js +7 -0
  64. package/dist/main.js.map +1 -1
  65. package/dist/managers/AdminApiController.d.ts.map +1 -1
  66. package/dist/managers/AdminApiController.js +1 -2
  67. package/dist/managers/AdminApiController.js.map +1 -1
  68. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  69. package/dist/managers/CodeGenerator.js +2 -1
  70. package/dist/managers/CodeGenerator.js.map +1 -1
  71. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  72. package/dist/managers/DonobuFlowsManager.js +17 -16
  73. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  74. package/dist/managers/GptConfigsManager.d.ts.map +1 -1
  75. package/dist/managers/GptConfigsManager.js +3 -6
  76. package/dist/managers/GptConfigsManager.js.map +1 -1
  77. package/dist/managers/PageInspector.d.ts.map +1 -1
  78. package/dist/managers/PageInspector.js +4 -2
  79. package/dist/managers/PageInspector.js.map +1 -1
  80. package/dist/managers/PluginLoader.d.ts +4 -0
  81. package/dist/managers/PluginLoader.d.ts.map +1 -0
  82. package/dist/managers/PluginLoader.js +104 -0
  83. package/dist/managers/PluginLoader.js.map +1 -0
  84. package/dist/managers/ToolManager.d.ts +8 -2
  85. package/dist/managers/ToolManager.d.ts.map +1 -1
  86. package/dist/managers/ToolManager.js +99 -74
  87. package/dist/managers/ToolManager.js.map +1 -1
  88. package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
  89. package/dist/utils/PlaywrightUtils.js +42 -22
  90. package/dist/utils/PlaywrightUtils.js.map +1 -1
  91. package/package.json +3 -2
  92. package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts +0 -69
  93. package/dist/esm/lib/utils/SelfHealingDebugReporter.d.ts.map +0 -1
  94. package/dist/esm/lib/utils/SelfHealingDebugReporter.js +0 -486
  95. package/dist/esm/lib/utils/SelfHealingDebugReporter.js.map +0 -1
  96. package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts +0 -55
  97. package/dist/esm/lib/utils/SelfHealingTestUtils.d.ts.map +0 -1
  98. package/dist/esm/lib/utils/SelfHealingTestUtils.js +0 -335
  99. package/dist/esm/lib/utils/SelfHealingTestUtils.js.map +0 -1
  100. package/dist/esm/lib/utils/VideoArtifactManager.d.ts +0 -57
  101. package/dist/esm/lib/utils/VideoArtifactManager.d.ts.map +0 -1
  102. package/dist/esm/lib/utils/VideoArtifactManager.js +0 -343
  103. package/dist/esm/lib/utils/VideoArtifactManager.js.map +0 -1
  104. package/dist/esm/plugin/PluginLoader.d.ts +0 -3
  105. package/dist/esm/plugin/PluginLoader.d.ts.map +0 -1
  106. package/dist/esm/plugin/PluginLoader.js +0 -44
  107. package/dist/esm/plugin/PluginLoader.js.map +0 -1
  108. package/dist/esm/plugin/PluginModule.d.ts +0 -9
  109. package/dist/esm/plugin/PluginModule.d.ts.map +0 -1
  110. package/dist/esm/plugin/PluginModule.js +0 -3
  111. package/dist/esm/plugin/PluginModule.js.map +0 -1
  112. package/dist/esm/tools/AggregateExtractedStreetviewDataTool.d.ts +0 -22
  113. package/dist/esm/tools/AggregateExtractedStreetviewDataTool.d.ts.map +0 -1
  114. package/dist/esm/tools/AggregateExtractedStreetviewDataTool.js +0 -61
  115. package/dist/esm/tools/AggregateExtractedStreetviewDataTool.js.map +0 -1
  116. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.d.ts +0 -62
  117. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.d.ts.map +0 -1
  118. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js +0 -164
  119. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js.map +0 -1
  120. package/dist/esm/tools/ExtractPaymentProviderKeyTool.d.ts +0 -81
  121. package/dist/esm/tools/ExtractPaymentProviderKeyTool.d.ts.map +0 -1
  122. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js +0 -316
  123. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js.map +0 -1
  124. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.d.ts +0 -39
  125. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.d.ts.map +0 -1
  126. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js +0 -228
  127. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js.map +0 -1
  128. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.d.ts +0 -47
  129. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.d.ts.map +0 -1
  130. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js +0 -126
  131. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js.map +0 -1
  132. package/dist/esm/tools/NavigateWithinStreetView.d.ts +0 -54
  133. package/dist/esm/tools/NavigateWithinStreetView.d.ts.map +0 -1
  134. package/dist/esm/tools/NavigateWithinStreetView.js +0 -119
  135. package/dist/esm/tools/NavigateWithinStreetView.js.map +0 -1
  136. package/dist/lib/utils/SelfHealingDebugReporter.d.ts +0 -69
  137. package/dist/lib/utils/SelfHealingDebugReporter.d.ts.map +0 -1
  138. package/dist/lib/utils/SelfHealingDebugReporter.js +0 -486
  139. package/dist/lib/utils/SelfHealingDebugReporter.js.map +0 -1
  140. package/dist/lib/utils/SelfHealingTestUtils.d.ts +0 -55
  141. package/dist/lib/utils/SelfHealingTestUtils.d.ts.map +0 -1
  142. package/dist/lib/utils/SelfHealingTestUtils.js +0 -335
  143. package/dist/lib/utils/SelfHealingTestUtils.js.map +0 -1
  144. package/dist/lib/utils/VideoArtifactManager.d.ts +0 -57
  145. package/dist/lib/utils/VideoArtifactManager.d.ts.map +0 -1
  146. package/dist/lib/utils/VideoArtifactManager.js +0 -343
  147. package/dist/lib/utils/VideoArtifactManager.js.map +0 -1
  148. package/dist/plugin/PluginLoader.d.ts +0 -3
  149. package/dist/plugin/PluginLoader.d.ts.map +0 -1
  150. package/dist/plugin/PluginLoader.js +0 -44
  151. package/dist/plugin/PluginLoader.js.map +0 -1
  152. package/dist/plugin/PluginModule.d.ts +0 -9
  153. package/dist/plugin/PluginModule.d.ts.map +0 -1
  154. package/dist/plugin/PluginModule.js +0 -3
  155. package/dist/plugin/PluginModule.js.map +0 -1
  156. package/dist/tools/AggregateExtractedStreetviewDataTool.d.ts +0 -22
  157. package/dist/tools/AggregateExtractedStreetviewDataTool.d.ts.map +0 -1
  158. package/dist/tools/AggregateExtractedStreetviewDataTool.js +0 -61
  159. package/dist/tools/AggregateExtractedStreetviewDataTool.js.map +0 -1
  160. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.d.ts +0 -62
  161. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.d.ts.map +0 -1
  162. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js +0 -164
  163. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js.map +0 -1
  164. package/dist/tools/ExtractPaymentProviderKeyTool.d.ts +0 -81
  165. package/dist/tools/ExtractPaymentProviderKeyTool.d.ts.map +0 -1
  166. package/dist/tools/ExtractPaymentProviderKeyTool.js +0 -316
  167. package/dist/tools/ExtractPaymentProviderKeyTool.js.map +0 -1
  168. package/dist/tools/ExtractPublicFacebookEntityDataTool.d.ts +0 -39
  169. package/dist/tools/ExtractPublicFacebookEntityDataTool.d.ts.map +0 -1
  170. package/dist/tools/ExtractPublicFacebookEntityDataTool.js +0 -228
  171. package/dist/tools/ExtractPublicFacebookEntityDataTool.js.map +0 -1
  172. package/dist/tools/GoToGoogleMapsStreetViewTool.d.ts +0 -47
  173. package/dist/tools/GoToGoogleMapsStreetViewTool.d.ts.map +0 -1
  174. package/dist/tools/GoToGoogleMapsStreetViewTool.js +0 -126
  175. package/dist/tools/GoToGoogleMapsStreetViewTool.js.map +0 -1
  176. package/dist/tools/NavigateWithinStreetView.d.ts +0 -54
  177. package/dist/tools/NavigateWithinStreetView.d.ts.map +0 -1
  178. package/dist/tools/NavigateWithinStreetView.js +0 -119
  179. package/dist/tools/NavigateWithinStreetView.js.map +0 -1
@@ -1,343 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.VideoArtifactManager = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const Logger_1 = require("../../utils/Logger");
40
- /**
41
- * Manages video artifacts for self-healing scenarios, providing linking and metadata capabilities
42
- */
43
- class VideoArtifactManager {
44
- /**
45
- * Links video artifacts between original test and self-healing session
46
- */
47
- static async linkSelfHealingVideos(testInfo, originalFlowMetadata, selfHealingFlowMetadata) {
48
- try {
49
- // Try to find existing Playwright video for original test
50
- const originalVideo = await this.findPlaywrightVideo(testInfo);
51
- // Try to find self-healing video (should be in flow persistence)
52
- const selfHealingVideo = await this.findSelfHealingVideo(selfHealingFlowMetadata);
53
- if (!originalVideo && !selfHealingVideo) {
54
- Logger_1.appLogger.info('No video artifacts found to link');
55
- return null;
56
- }
57
- const linkingMetadata = {
58
- originalFlowId: originalFlowMetadata.id,
59
- selfHealingFlowId: selfHealingFlowMetadata.id,
60
- testName: testInfo.title,
61
- relationship: 'self-healing-pair',
62
- createdAt: Date.now(),
63
- };
64
- const linkedArtifacts = {
65
- originalVideo,
66
- selfHealingVideo,
67
- linkingMetadata,
68
- };
69
- // Create a comprehensive video linking manifest
70
- await this.createVideoLinkingManifest(testInfo, linkedArtifacts);
71
- // Attach video metadata as test artifacts
72
- if (originalVideo) {
73
- await this.attachVideoMetadata(testInfo, originalVideo, 'original');
74
- }
75
- if (selfHealingVideo) {
76
- await this.attachVideoMetadata(testInfo, selfHealingVideo, 'self-healing');
77
- }
78
- Logger_1.appLogger.info('Successfully linked video artifacts for self-healing session');
79
- return linkedArtifacts;
80
- }
81
- catch (error) {
82
- Logger_1.appLogger.error('Failed to link video artifacts:', error);
83
- return null;
84
- }
85
- }
86
- /**
87
- * Attempts to find the Playwright-generated video for the test
88
- */
89
- static async findPlaywrightVideo(testInfo) {
90
- try {
91
- // Playwright typically saves videos in the test-results directory
92
- const outputDir = testInfo.outputDir;
93
- if (!outputDir || !fs.existsSync(outputDir)) {
94
- return undefined;
95
- }
96
- // Look for video files in the test output directory
97
- const files = fs.readdirSync(outputDir);
98
- const videoFile = files.find((file) => file.endsWith('.webm') || file.endsWith('.mp4'));
99
- if (!videoFile) {
100
- return undefined;
101
- }
102
- const filePath = path.join(outputDir, videoFile);
103
- const stats = fs.statSync(filePath);
104
- return {
105
- filePath,
106
- fileName: videoFile,
107
- flowId: 'playwright-test',
108
- flowName: testInfo.title,
109
- size: stats.size,
110
- createdAt: stats.mtimeMs,
111
- type: 'original-test',
112
- };
113
- }
114
- catch (error) {
115
- Logger_1.appLogger.warn('Failed to find Playwright video:', error);
116
- return undefined;
117
- }
118
- }
119
- /**
120
- * Attempts to find the self-healing flow video
121
- */
122
- static async findSelfHealingVideo(flowMetadata) {
123
- try {
124
- // The self-healing video should be available through the flow persistence
125
- // For now, we'll create a placeholder since the actual video retrieval
126
- // would depend on the persistence implementation
127
- return {
128
- filePath: `flow-video-${flowMetadata.id}`, // This would be the actual path from persistence
129
- fileName: `self-healing-${flowMetadata.id}.webm`,
130
- flowId: flowMetadata.id,
131
- flowName: flowMetadata.name || 'Self-Healing Flow',
132
- size: 0, // Would be set from actual file
133
- createdAt: flowMetadata.completedAt || Date.now(),
134
- type: 'self-healing',
135
- };
136
- }
137
- catch (error) {
138
- Logger_1.appLogger.warn('Failed to find self-healing video:', error);
139
- return undefined;
140
- }
141
- }
142
- /**
143
- * Creates a comprehensive manifest linking videos and providing navigation aids
144
- */
145
- static async createVideoLinkingManifest(testInfo, linkedArtifacts) {
146
- const manifest = this.generateVideoManifestHtml(linkedArtifacts);
147
- await testInfo.attach('video-linking-manifest.html', {
148
- body: manifest,
149
- contentType: 'text/html',
150
- });
151
- // Also create a simple JSON manifest for programmatic use
152
- const jsonManifest = {
153
- ...linkedArtifacts.linkingMetadata,
154
- videos: {
155
- original: linkedArtifacts.originalVideo
156
- ? {
157
- fileName: linkedArtifacts.originalVideo.fileName,
158
- size: linkedArtifacts.originalVideo.size,
159
- type: linkedArtifacts.originalVideo.type,
160
- }
161
- : null,
162
- selfHealing: linkedArtifacts.selfHealingVideo
163
- ? {
164
- fileName: linkedArtifacts.selfHealingVideo.fileName,
165
- size: linkedArtifacts.selfHealingVideo.size,
166
- type: linkedArtifacts.selfHealingVideo.type,
167
- }
168
- : null,
169
- },
170
- };
171
- await testInfo.attach('video-linking-manifest.json', {
172
- body: JSON.stringify(jsonManifest, null, 2),
173
- contentType: 'application/json',
174
- });
175
- }
176
- /**
177
- * Generates an HTML manifest for video navigation
178
- */
179
- static generateVideoManifestHtml(linkedArtifacts) {
180
- const { originalVideo, selfHealingVideo, linkingMetadata } = linkedArtifacts;
181
- return `
182
- <!DOCTYPE html>
183
- <html lang="en">
184
- <head>
185
- <meta charset="UTF-8">
186
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
187
- <title>Video Artifacts - ${linkingMetadata.testName}</title>
188
- <style>
189
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }
190
- .container { max-width: 1200px; margin: 0 auto; background: white; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
191
- .header { background: #2c3e50; color: white; padding: 20px; border-radius: 8px 8px 0 0; }
192
- .content { padding: 20px; }
193
- .video-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0; }
194
- .video-card { background: #f8f9fa; padding: 20px; border-radius: 8px; border: 2px solid #e9ecef; }
195
- .video-card.original { border-color: #dc3545; }
196
- .video-card.healing { border-color: #28a745; }
197
- .video-card h3 { margin-top: 0; color: #2c3e50; }
198
- .video-info { display: grid; gap: 8px; margin: 15px 0; }
199
- .info-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #dee2e6; }
200
- .info-row:last-child { border-bottom: none; }
201
- .info-label { font-weight: 600; color: #495057; }
202
- .info-value { color: #6c757d; }
203
- .navigation-tips { background: #e8f4f8; border: 1px solid #bee5eb; padding: 15px; border-radius: 6px; margin: 20px 0; }
204
- .navigation-tips h4 { margin-top: 0; color: #0c5460; }
205
- .tip-list { margin: 10px 0; padding-left: 20px; }
206
- .tip-list li { margin: 5px 0; color: #0c5460; }
207
- .file-link { color: #007bff; text-decoration: none; font-family: monospace; }
208
- .file-link:hover { text-decoration: underline; }
209
- .no-video { color: #6c757d; font-style: italic; }
210
- .comparison-note { background: #fff3cd; border: 1px solid #ffeaa7; padding: 15px; border-radius: 6px; margin: 20px 0; }
211
- </style>
212
- </head>
213
- <body>
214
- <div class="container">
215
- <div class="header">
216
- <h1>Video Artifacts</h1>
217
- <p><strong>Test:</strong> ${linkingMetadata.testName}</p>
218
- <p><strong>Generated:</strong> ${new Date(linkingMetadata.createdAt).toLocaleString()}</p>
219
- </div>
220
-
221
- <div class="content">
222
- <div class="comparison-note">
223
- <h4>📹 Video Comparison Guide</h4>
224
- <p>These videos show the original failed test execution and the successful self-healing session. Use them together with the debug report to understand what changes were made.</p>
225
- </div>
226
-
227
- <div class="video-grid">
228
- <div class="video-card original">
229
- <h3>🔴 Original Test (Failed)</h3>
230
- ${originalVideo
231
- ? `
232
- <div class="video-info">
233
- <div class="info-row">
234
- <span class="info-label">File:</span>
235
- <span class="info-value">
236
- <a href="${originalVideo.fileName}" class="file-link">${originalVideo.fileName}</a>
237
- </span>
238
- </div>
239
- <div class="info-row">
240
- <span class="info-label">Size:</span>
241
- <span class="info-value">${this.formatFileSize(originalVideo.size)}</span>
242
- </div>
243
- <div class="info-row">
244
- <span class="info-label">Created:</span>
245
- <span class="info-value">${new Date(originalVideo.createdAt).toLocaleString()}</span>
246
- </div>
247
- <div class="info-row">
248
- <span class="info-label">Type:</span>
249
- <span class="info-value">Playwright Test Recording</span>
250
- </div>
251
- </div>
252
- `
253
- : '<div class="no-video">No original test video found</div>'}
254
- </div>
255
-
256
- <div class="video-card healing">
257
- <h3>🟢 Self-Healing Session</h3>
258
- ${selfHealingVideo
259
- ? `
260
- <div class="video-info">
261
- <div class="info-row">
262
- <span class="info-label">File:</span>
263
- <span class="info-value">
264
- <a href="${selfHealingVideo.fileName}" class="file-link">${selfHealingVideo.fileName}</a>
265
- </span>
266
- </div>
267
- <div class="info-row">
268
- <span class="info-label">Size:</span>
269
- <span class="info-value">${this.formatFileSize(selfHealingVideo.size)}</span>
270
- </div>
271
- <div class="info-row">
272
- <span class="info-label">Created:</span>
273
- <span class="info-value">${new Date(selfHealingVideo.createdAt).toLocaleString()}</span>
274
- </div>
275
- <div class="info-row">
276
- <span class="info-label">Flow ID:</span>
277
- <span class="info-value">${selfHealingVideo.flowId}</span>
278
- </div>
279
- </div>
280
- `
281
- : '<div class="no-video">No self-healing video found</div>'}
282
- </div>
283
- </div>
284
-
285
- <div class="navigation-tips">
286
- <h4>💡 Video Analysis Tips</h4>
287
- <ul class="tip-list">
288
- <li><strong>Start with the debug report:</strong> Review \`self-healing-debug-report.html\` first to understand what changed</li>
289
- <li><strong>Use timestamps:</strong> The debug report includes video timestamps for each action</li>
290
- <li><strong>Compare side-by-side:</strong> Open both videos and use the timestamp links to jump to specific actions</li>
291
- <li><strong>Focus on differences:</strong> Pay attention to actions marked as "modified" or "failed vs success"</li>
292
- <li><strong>Check the generated fix:</strong> Review \`fixed-test.ts\` to see the updated test code</li>
293
- </ul>
294
- </div>
295
-
296
- <div style="margin-top: 30px; padding-top: 20px; border-top: 1px solid #dee2e6; color: #6c757d; font-size: 14px;">
297
- <p><strong>Related Artifacts:</strong></p>
298
- <ul>
299
- <li>\`self-healing-debug-report.html\` - Detailed comparison analysis</li>
300
- <li>\`self-healing-summary.md\` - Quick overview of changes</li>
301
- <li>\`self-healing-metadata.json\` - Technical metadata</li>
302
- <li>\`fixed-test.ts\` - Updated test code</li>
303
- <li>\`video-linking-manifest.json\` - Video linking metadata</li>
304
- </ul>
305
- </div>
306
- </div>
307
- </div>
308
- </body>
309
- </html>`;
310
- }
311
- /**
312
- * Attaches video metadata as a test artifact
313
- */
314
- static async attachVideoMetadata(testInfo, video, prefix) {
315
- const metadata = {
316
- fileName: video.fileName,
317
- flowId: video.flowId,
318
- flowName: video.flowName,
319
- size: video.size,
320
- sizeFormatted: this.formatFileSize(video.size),
321
- createdAt: video.createdAt,
322
- createdAtFormatted: new Date(video.createdAt).toLocaleString(),
323
- type: video.type,
324
- };
325
- await testInfo.attach(`${prefix}-video-metadata.json`, {
326
- body: JSON.stringify(metadata, null, 2),
327
- contentType: 'application/json',
328
- });
329
- }
330
- /**
331
- * Formats file size in human-readable format
332
- */
333
- static formatFileSize(bytes) {
334
- if (bytes === 0)
335
- return '0 Bytes';
336
- const k = 1024;
337
- const sizes = ['Bytes', 'KB', 'MB', 'GB'];
338
- const i = Math.floor(Math.log(bytes) / Math.log(k));
339
- return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
340
- }
341
- }
342
- exports.VideoArtifactManager = VideoArtifactManager;
343
- //# sourceMappingURL=VideoArtifactManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VideoArtifactManager.js","sourceRoot":"","sources":["../../../../src/lib/utils/VideoArtifactManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAyB;AACzB,2CAA6B;AAC7B,+CAA+C;AA0B/C;;GAEG;AACH,MAAa,oBAAoB;IAC/B;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,qBAAqB,CACvC,QAAkB,EAClB,oBAAkC,EAClC,uBAAqC;QAErC,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE/D,iEAAiE;YACjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACtD,uBAAuB,CACxB,CAAC;YAEF,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxC,kBAAS,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,eAAe,GAAG;gBACtB,cAAc,EAAE,oBAAoB,CAAC,EAAE;gBACvC,iBAAiB,EAAE,uBAAuB,CAAC,EAAE;gBAC7C,QAAQ,EAAE,QAAQ,CAAC,KAAK;gBACxB,YAAY,EAAE,mBAA4B;gBAC1C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,MAAM,eAAe,GAAyB;gBAC5C,aAAa;gBACb,gBAAgB;gBAChB,eAAe;aAChB,CAAC;YAEF,gDAAgD;YAChD,MAAM,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YAEjE,0CAA0C;YAC1C,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,mBAAmB,CAC5B,QAAQ,EACR,gBAAgB,EAChB,cAAc,CACf,CAAC;YACJ,CAAC;YAED,kBAAS,CAAC,IAAI,CACZ,8DAA8D,CAC/D,CAAC;YACF,OAAO,eAAe,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAS,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,mBAAmB,CACtC,QAAkB;QAElB,IAAI,CAAC;YACH,kEAAkE;YAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAErC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5C,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,oDAAoD;YACpD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1D,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEpC,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,iBAAiB;gBACzB,QAAQ,EAAE,QAAQ,CAAC,KAAK;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,OAAO;gBACxB,IAAI,EAAE,eAAe;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAS,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACvC,YAA0B;QAE1B,IAAI,CAAC;YACH,0EAA0E;YAC1E,uEAAuE;YACvE,iDAAiD;YAEjD,OAAO;gBACL,QAAQ,EAAE,cAAc,YAAY,CAAC,EAAE,EAAE,EAAE,iDAAiD;gBAC5F,QAAQ,EAAE,gBAAgB,YAAY,CAAC,EAAE,OAAO;gBAChD,MAAM,EAAE,YAAY,CAAC,EAAE;gBACvB,QAAQ,EAAE,YAAY,CAAC,IAAI,IAAI,mBAAmB;gBAClD,IAAI,EAAE,CAAC,EAAE,gCAAgC;gBACzC,SAAS,EAAE,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE;gBACjD,IAAI,EAAE,cAAc;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAS,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAC7C,QAAkB,EAClB,eAAqC;QAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;QAEjE,MAAM,QAAQ,CAAC,MAAM,CAAC,6BAA6B,EAAE;YACnD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QAEH,0DAA0D;QAC1D,MAAM,YAAY,GAAG;YACnB,GAAG,eAAe,CAAC,eAAe;YAClC,MAAM,EAAE;gBACN,QAAQ,EAAE,eAAe,CAAC,aAAa;oBACrC,CAAC,CAAC;wBACE,QAAQ,EAAE,eAAe,CAAC,aAAa,CAAC,QAAQ;wBAChD,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC,IAAI;wBACxC,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC,IAAI;qBACzC;oBACH,CAAC,CAAC,IAAI;gBACR,WAAW,EAAE,eAAe,CAAC,gBAAgB;oBAC3C,CAAC,CAAC;wBACE,QAAQ,EAAE,eAAe,CAAC,gBAAgB,CAAC,QAAQ;wBACnD,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,IAAI;wBAC3C,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,IAAI;qBAC5C;oBACH,CAAC,CAAC,IAAI;aACT;SACF,CAAC;QAEF,MAAM,QAAQ,CAAC,MAAM,CAAC,6BAA6B,EAAE;YACnD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,yBAAyB,CACtC,eAAqC;QAErC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,GACxD,eAAe,CAAC;QAElB,OAAO;;;;;;+BAMoB,eAAe,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA8Bf,eAAe,CAAC,QAAQ;6CACnB,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;;;;;;;;;;;;sBAa3E,aAAa;YACX,CAAC,CAAC;;;;;2CAKiB,aAAa,CAAC,QAAQ,uBAAuB,aAAa,CAAC,QAAQ;;;;;uDAKvD,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC;;;;uDAIvC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;;;;;;;qBAOpF;YACG,CAAC,CAAC,0DACN;;;;;sBAME,gBAAgB;YACd,CAAC,CAAC;;;;;2CAKiB,gBAAgB,CAAC,QAAQ,uBAAuB,gBAAgB,CAAC,QAAQ;;;;;uDAK7D,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;;uDAI1C,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;;;;uDAIrD,gBAAgB,CAAC,MAAM;;;qBAGzD;YACG,CAAC,CAAC,yDACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BZ,CAAC;IACP,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,mBAAmB,CACtC,QAAkB,EAClB,KAAoB,EACpB,MAAc;QAEd,MAAM,QAAQ,GAAG;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,kBAAkB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;YAC9D,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;QAEF,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAsB,EAAE;YACrD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,KAAa;QACzC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAElC,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;CACF;AAjWD,oDAiWC"}
@@ -1,3 +0,0 @@
1
- import { Tool } from '../tools/Tool';
2
- export declare function loadAllCustomToolPlugins(): Promise<Tool<any, any>[]>;
3
- //# sourceMappingURL=PluginLoader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.d.ts","sourceRoot":"","sources":["../../../src/plugin/PluginLoader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAqC1E"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadAllCustomToolPlugins = loadAllCustomToolPlugins;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const node_url_1 = require("node:url");
10
- const MiscUtils_1 = require("../utils/MiscUtils");
11
- async function loadAllCustomToolPlugins() {
12
- const pluginsDir = node_path_1.default.join(MiscUtils_1.MiscUtils.baseWorkingDirectory(), 'plugins');
13
- // Collect candidate *.mjs / *.cjs / *.js / *.ts files (shallow-scan).
14
- let entries = [];
15
- try {
16
- const dirents = await promises_1.default.readdir(pluginsDir, { withFileTypes: true });
17
- entries = dirents
18
- .filter((d) => d.isFile())
19
- .filter((d) => /\.[cm]?js$|\.ts$/i.test(d.name))
20
- .map((d) => node_path_1.default.join(pluginsDir, d.name));
21
- }
22
- catch {
23
- // directory missing is not fatal – just return empty plugin list
24
- return [];
25
- }
26
- const tools = [];
27
- for (const file of entries) {
28
- try {
29
- // Dynamic import via file URL keeps Windows & *nix happy.
30
- const mod = await import((0, node_url_1.pathToFileURL)(file).href);
31
- if (mod &&
32
- typeof mod.loadCustomTools === 'function') {
33
- const pluginTools = await mod.loadCustomTools();
34
- pluginTools.forEach((t) => tools.push(t));
35
- }
36
- }
37
- catch (err) {
38
- console.error(`Failed to load plugin "${file}":`, err);
39
- // Keep going; a broken plugin should not stop startup.
40
- }
41
- }
42
- return tools;
43
- }
44
- //# sourceMappingURL=PluginLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.js","sourceRoot":"","sources":["../../../src/plugin/PluginLoader.ts"],"names":[],"mappings":";;;;;AAOA,4DAqCC;AA5CD,gEAAkC;AAClC,0DAA6B;AAC7B,uCAAyC;AAGzC,kDAA+C;AAExC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,qBAAS,CAAC,oBAAoB,EAAE,EAAE,SAAS,CAAC,CAAC;IAE1E,sEAAsE;IACtE,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,GAAG,OAAO;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;QACjE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAqB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,GAAG,GAAY,MAAM,MAAM,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAE5D,IACE,GAAG;gBACH,OAAQ,GAA6B,CAAC,eAAe,KAAK,UAAU,EACpE,CAAC;gBACD,MAAM,WAAW,GAAG,MAAO,GAAoB,CAAC,eAAe,EAAE,CAAC;gBAClE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;YACvD,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,9 +0,0 @@
1
- import { Tool } from '../tools/Tool';
2
- /**
3
- * Every plugin must export ONE async function with this exact name.
4
- * Donobu will call it on startup.
5
- */
6
- export interface PluginModule {
7
- loadCustomTools(): Promise<Tool<any, any>[]>;
8
- }
9
- //# sourceMappingURL=PluginModule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginModule.d.ts","sourceRoot":"","sources":["../../../src/plugin/PluginModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;CAC9C"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=PluginModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginModule.js","sourceRoot":"","sources":["../../../src/plugin/PluginModule.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { Tool } from './Tool';
2
- import { ToolCallContext } from '../models/ToolCallContext';
3
- import { ToolCallResult } from '../models/ToolCallResult';
4
- import { ToolCall } from '../models/ToolCall';
5
- import { BaseGptArgsSchema, NoArgsSchema } from '../models/ToolSchema';
6
- import { z } from 'zod';
7
- /**
8
- * Ends the current flow by aggregating the data gathered by the ExtractGoogleStreetviewEntityDataTool
9
- * and GoToGoogleMapsStreetViewTool classes (likely kicked off by SpecialFlowsApi#extractGoogleStreetviewEntityData.
10
- * Note that there is special handling using the ExtractGoogleStreetviewEntityDataTool's
11
- * "recommendedNextStepForStreetViewNavigator", and "isBusinessMatch" fields. Additionally, there is
12
- * a check to see if GoToGoogleMapsStreetViewTool failed, since the entire flow is
13
- * predicated on that step succeeding.
14
- */
15
- export declare class AggregateExtractedStreetviewDataTool extends Tool<typeof NoArgsSchema, typeof BaseGptArgsSchema> {
16
- static readonly NAME = "aggregateExtractedStreetviewData";
17
- constructor();
18
- call(context: ToolCallContext, _parameters: z.infer<typeof NoArgsSchema>): Promise<ToolCallResult>;
19
- static aggregateStreetviewData(invokedToolCalls: ToolCall[], metadata: any): Record<string, any>;
20
- callFromGpt(context: ToolCallContext, parameters: z.infer<typeof BaseGptArgsSchema>): Promise<ToolCallResult>;
21
- }
22
- //# sourceMappingURL=AggregateExtractedStreetviewDataTool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AggregateExtractedStreetviewDataTool.d.ts","sourceRoot":"","sources":["../../../src/tools/AggregateExtractedStreetviewDataTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;GAOG;AACH,qBAAa,oCAAqC,SAAQ,IAAI,CAC5D,OAAO,YAAY,EACnB,OAAO,iBAAiB,CACzB;IACC,gBAAuB,IAAI,sCAAsC;;IAgB3C,IAAI,CACxB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GACxC,OAAO,CAAC,cAAc,CAAC;WAaZ,uBAAuB,CACnC,gBAAgB,EAAE,QAAQ,EAAE,EAC5B,QAAQ,EAAE,GAAG,GACZ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA2BA,WAAW,CAC/B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAC5C,OAAO,CAAC,cAAc,CAAC;CAG3B"}
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AggregateExtractedStreetviewDataTool = void 0;
4
- const Tool_1 = require("./Tool");
5
- const ExtractGoogleStreetviewEntityDataTool_1 = require("./ExtractGoogleStreetviewEntityDataTool");
6
- const ToolSchema_1 = require("../models/ToolSchema");
7
- /**
8
- * Ends the current flow by aggregating the data gathered by the ExtractGoogleStreetviewEntityDataTool
9
- * and GoToGoogleMapsStreetViewTool classes (likely kicked off by SpecialFlowsApi#extractGoogleStreetviewEntityData.
10
- * Note that there is special handling using the ExtractGoogleStreetviewEntityDataTool's
11
- * "recommendedNextStepForStreetViewNavigator", and "isBusinessMatch" fields. Additionally, there is
12
- * a check to see if GoToGoogleMapsStreetViewTool failed, since the entire flow is
13
- * predicated on that step succeeding.
14
- */
15
- class AggregateExtractedStreetviewDataTool extends Tool_1.Tool {
16
- constructor() {
17
- const extractTool = new ExtractGoogleStreetviewEntityDataTool_1.ExtractGoogleStreetviewEntityDataTool();
18
- super(AggregateExtractedStreetviewDataTool.NAME, `Aggregate data extracted by the '${extractTool.name}' tool and end the flow.
19
-
20
- IMPORTANT: Only business/entity data extracted via the '${extractTool.name}' tool is considered for this operation! Do NOT
21
- call this tool until all the relevant business/entity data has been extracted via that tool! Note that you
22
- need to call the '${extractTool.name}' for each unique street view!`, ToolSchema_1.NoArgsSchema, ToolSchema_1.BaseGptArgsSchema);
23
- }
24
- async call(context, _parameters) {
25
- const resultMetadata = AggregateExtractedStreetviewDataTool.aggregateStreetviewData(context.invokedToolCalls, context.metadata);
26
- return {
27
- isSuccessful: true,
28
- forLlm: 'Successfully aggregated the extracted street view data.',
29
- metadata: resultMetadata,
30
- };
31
- }
32
- static aggregateStreetviewData(invokedToolCalls, metadata) {
33
- const extractBusinessDataTool = new ExtractGoogleStreetviewEntityDataTool_1.ExtractGoogleStreetviewEntityDataTool();
34
- const accumulatedResults = invokedToolCalls
35
- .filter((tc) => tc.toolName === extractBusinessDataTool.name)
36
- .map((tc) => tc.outcome)
37
- .filter((outcome) => outcome.metadata !== null)
38
- .map((outcome) => outcome.metadata)
39
- .filter((metadata) => metadata.businessSignage !== undefined)
40
- .sort((a, b) => {
41
- // Sort in reverse order (true values first)
42
- return b.isBusinessMatch - a.isBusinessMatch;
43
- })
44
- .map((metadata) => {
45
- const copy = { ...metadata };
46
- delete copy.recommendedNextStepForStreetViewNavigator;
47
- return copy;
48
- });
49
- metadata.nextState = 'SUCCESS';
50
- return {
51
- streetviews: accumulatedResults,
52
- flowId: metadata.id,
53
- };
54
- }
55
- async callFromGpt(context, parameters) {
56
- return this.call(context, parameters);
57
- }
58
- }
59
- exports.AggregateExtractedStreetviewDataTool = AggregateExtractedStreetviewDataTool;
60
- AggregateExtractedStreetviewDataTool.NAME = 'aggregateExtractedStreetviewData';
61
- //# sourceMappingURL=AggregateExtractedStreetviewDataTool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AggregateExtractedStreetviewDataTool.js","sourceRoot":"","sources":["../../../src/tools/AggregateExtractedStreetviewDataTool.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAG9B,mGAAgG;AAEhG,qDAAuE;AAGvE;;;;;;;GAOG;AACH,MAAa,oCAAqC,SAAQ,WAGzD;IAGC;QACE,MAAM,WAAW,GAAG,IAAI,6EAAqC,EAAE,CAAC;QAChE,KAAK,CACH,oCAAoC,CAAC,IAAI,EACzC,oCAAoC,WAAW,CAAC,IAAI;;gEAEM,WAAW,CAAC,IAAI;;0BAEtD,WAAW,CAAC,IAAI,gCAAgC,EACpE,yBAAY,EACZ,8BAAiB,CAClB,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,IAAI,CACxB,OAAwB,EACxB,WAAyC;QAEzC,MAAM,cAAc,GAClB,oCAAoC,CAAC,uBAAuB,CAC1D,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,QAAQ,CACjB,CAAC;QACJ,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,yDAAyD;YACjE,QAAQ,EAAE,cAAc;SACzB,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,uBAAuB,CACnC,gBAA4B,EAC5B,QAAa;QAEb,MAAM,uBAAuB,GAAG,IAAI,6EAAqC,EAAE,CAAC;QAE5E,MAAM,kBAAkB,GAAG,gBAAgB;aACxC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,uBAAuB,CAAC,IAAI,CAAC;aAC5D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;aACvB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;aAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;aAClC,MAAM,CAAC,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;aACjE,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;YACvB,4CAA4C;YAC5C,OAAO,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;QAC/C,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,yCAAyC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEL,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;QAE/B,OAAO;YACL,WAAW,EAAE,kBAAkB;YAC/B,MAAM,EAAE,QAAQ,CAAC,EAAE;SACpB,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,WAAW,CAC/B,OAAwB,EACxB,UAA6C;QAE7C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;;AAvEH,oFAwEC;AApEwB,yCAAI,GAAG,kCAAkC,CAAC"}
@@ -1,62 +0,0 @@
1
- import { Tool } from './Tool';
2
- import { ToolCallContext } from '../models/ToolCallContext';
3
- import { ToolCallResult } from '../models/ToolCallResult';
4
- import { z } from 'zod';
5
- export declare const PropertyTypeSchema: z.ZodEnum<["RESIDENTIAL", "RETAIL", "OFFICE_BUILDING", "INDUSTRIAL", "EMPTY_LOT"]>;
6
- export declare const ExtractGoogleStreetviewEntityDataCoreSchema: z.ZodObject<{
7
- entityName: z.ZodString;
8
- }, "strip", z.ZodTypeAny, {
9
- entityName: string;
10
- }, {
11
- entityName: string;
12
- }>;
13
- export declare const ExtractGoogleStreetviewEntityDataGptSchema: z.ZodObject<{
14
- rationale: z.ZodString;
15
- } & {
16
- entityName: z.ZodString;
17
- }, "strip", z.ZodTypeAny, {
18
- rationale: string;
19
- entityName: string;
20
- }, {
21
- rationale: string;
22
- entityName: string;
23
- }>;
24
- export declare const MetadataSchema: z.ZodObject<{
25
- businessSignage: z.ZodArray<z.ZodString, "many">;
26
- otherSignage: z.ZodArray<z.ZodString, "many">;
27
- isBusinessMatch: z.ZodBoolean;
28
- imageId: z.ZodString;
29
- googleMapsStreetviewUrl: z.ZodString;
30
- typeOfProperty: z.ZodEnum<["RESIDENTIAL", "RETAIL", "OFFICE_BUILDING", "INDUSTRIAL", "EMPTY_LOT"]>;
31
- recommendedNextStepForStreetViewNavigator: z.ZodEnum<["ROTATE_CLOCKWISE", "ROTATE_COUNTERCLOCKWISE", "ZOOM_IN", "ZOOM_OUT"]>;
32
- }, "strip", z.ZodTypeAny, {
33
- businessSignage: string[];
34
- otherSignage: string[];
35
- typeOfProperty: "RESIDENTIAL" | "RETAIL" | "OFFICE_BUILDING" | "INDUSTRIAL" | "EMPTY_LOT";
36
- recommendedNextStepForStreetViewNavigator: "ROTATE_CLOCKWISE" | "ROTATE_COUNTERCLOCKWISE" | "ZOOM_IN" | "ZOOM_OUT";
37
- isBusinessMatch: boolean;
38
- imageId: string;
39
- googleMapsStreetviewUrl: string;
40
- }, {
41
- businessSignage: string[];
42
- otherSignage: string[];
43
- typeOfProperty: "RESIDENTIAL" | "RETAIL" | "OFFICE_BUILDING" | "INDUSTRIAL" | "EMPTY_LOT";
44
- recommendedNextStepForStreetViewNavigator: "ROTATE_CLOCKWISE" | "ROTATE_COUNTERCLOCKWISE" | "ZOOM_IN" | "ZOOM_OUT";
45
- isBusinessMatch: boolean;
46
- imageId: string;
47
- googleMapsStreetviewUrl: string;
48
- }>;
49
- /**
50
- * Extracts data from the current Google Maps Street View. If the current page is not a Google Maps
51
- * Street View, then the operation is undefined.
52
- */
53
- export declare class ExtractGoogleStreetviewEntityDataTool extends Tool<typeof ExtractGoogleStreetviewEntityDataCoreSchema, typeof ExtractGoogleStreetviewEntityDataGptSchema> {
54
- static readonly NAME = "extractGoogleStreetviewEntityData";
55
- constructor();
56
- call(context: ToolCallContext, parameters: z.infer<typeof ExtractGoogleStreetviewEntityDataCoreSchema>): Promise<ToolCallResult>;
57
- callFromGpt(context: ToolCallContext, parameters: z.infer<typeof ExtractGoogleStreetviewEntityDataGptSchema>): Promise<ToolCallResult>;
58
- private wiggleMouseThenPause;
59
- private extractEntityData;
60
- private doesBusinessExistInSignage;
61
- }
62
- //# sourceMappingURL=ExtractGoogleStreetviewEntityDataTool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExtractGoogleStreetviewEntityDataTool.d.ts","sourceRoot":"","sources":["../../../src/tools/ExtractGoogleStreetviewEntityDataTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAU1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB,oFAM7B,CAAC;AAEH,eAAO,MAAM,2CAA2C;;;;;;EAItD,CAAC;AAEH,eAAO,MAAM,0CAA0C;;;;;;;;;;EACe,CAAC;AAuBvE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAC;AAEH;;;GAGG;AACH,qBAAa,qCAAsC,SAAQ,IAAI,CAC7D,OAAO,2CAA2C,EAClD,OAAO,0CAA0C,CAClD;IACC,gBAAuB,IAAI,uCAAuC;;IAa5C,IAAI,CACxB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2CAA2C,CAAC,GACtE,OAAO,CAAC,cAAc,CAAC;IAkFV,WAAW,CACzB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0CAA0C,CAAC,GACrE,OAAO,CAAC,cAAc,CAAC;YAIZ,oBAAoB;YAkBpB,iBAAiB;YAsBjB,0BAA0B;CAsBzC"}