@bubblelab/bubble-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/LICENSE.txt +202 -0
  2. package/dist/bubble-bundle.d.ts +2021 -0
  3. package/dist/bubble-factory.d.ts +161 -0
  4. package/dist/bubble-factory.d.ts.map +1 -0
  5. package/dist/bubble-factory.js +426 -0
  6. package/dist/bubble-factory.js.map +1 -0
  7. package/dist/bubble-flow/bubble-flow-class.d.ts +19 -0
  8. package/dist/bubble-flow/bubble-flow-class.d.ts.map +1 -0
  9. package/dist/bubble-flow/bubble-flow-class.js +23 -0
  10. package/dist/bubble-flow/bubble-flow-class.js.map +1 -0
  11. package/dist/bubble-flow/sample/data-analyst-flow.d.ts +15 -0
  12. package/dist/bubble-flow/sample/data-analyst-flow.d.ts.map +1 -0
  13. package/dist/bubble-flow/sample/data-analyst-flow.js +63 -0
  14. package/dist/bubble-flow/sample/data-analyst-flow.js.map +1 -0
  15. package/dist/bubble-flow/sample/error-ts.d.ts +23 -0
  16. package/dist/bubble-flow/sample/error-ts.d.ts.map +1 -0
  17. package/dist/bubble-flow/sample/error-ts.js +31 -0
  18. package/dist/bubble-flow/sample/error-ts.js.map +1 -0
  19. package/dist/bubble-flow/sample/sanitytest.d.ts +10 -0
  20. package/dist/bubble-flow/sample/sanitytest.d.ts.map +1 -0
  21. package/dist/bubble-flow/sample/sanitytest.js +13 -0
  22. package/dist/bubble-flow/sample/sanitytest.js.map +1 -0
  23. package/dist/bubble-flow/sample/simple-webhook-2.d.ts +19 -0
  24. package/dist/bubble-flow/sample/simple-webhook-2.d.ts.map +1 -0
  25. package/dist/bubble-flow/sample/simple-webhook-2.js +23 -0
  26. package/dist/bubble-flow/sample/simple-webhook-2.js.map +1 -0
  27. package/dist/bubble-flow/sample/simple-webhook.d.ts +10 -0
  28. package/dist/bubble-flow/sample/simple-webhook.d.ts.map +1 -0
  29. package/dist/bubble-flow/sample/simple-webhook.js +18 -0
  30. package/dist/bubble-flow/sample/simple-webhook.js.map +1 -0
  31. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts +29 -0
  32. package/dist/bubble-flow/sample/simplified-data-analysis.flow.d.ts.map +1 -0
  33. package/dist/bubble-flow/sample/simplified-data-analysis.flow.js +150 -0
  34. package/dist/bubble-flow/sample/simplified-data-analysis.flow.js.map +1 -0
  35. package/dist/bubble-flow/sample/slack-v0.1.d.ts +10 -0
  36. package/dist/bubble-flow/sample/slack-v0.1.d.ts.map +1 -0
  37. package/dist/bubble-flow/sample/slack-v0.1.js +59 -0
  38. package/dist/bubble-flow/sample/slack-v0.1.js.map +1 -0
  39. package/dist/bubble-flow/sample/slackagenttest.d.ts +10 -0
  40. package/dist/bubble-flow/sample/slackagenttest.d.ts.map +1 -0
  41. package/dist/bubble-flow/sample/slackagenttest.js +59 -0
  42. package/dist/bubble-flow/sample/slackagenttest.js.map +1 -0
  43. package/dist/bubble-trigger/index.d.ts +2 -0
  44. package/dist/bubble-trigger/index.d.ts.map +1 -0
  45. package/dist/bubble-trigger/index.js +2 -0
  46. package/dist/bubble-trigger/index.js.map +1 -0
  47. package/dist/bubble-trigger/types.d.ts +87 -0
  48. package/dist/bubble-trigger/types.d.ts.map +1 -0
  49. package/dist/bubble-trigger/types.js +14 -0
  50. package/dist/bubble-trigger/types.js.map +1 -0
  51. package/dist/bubbles/service-bubble/ai-agent.d.ts +428 -0
  52. package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -0
  53. package/dist/bubbles/service-bubble/ai-agent.js +881 -0
  54. package/dist/bubbles/service-bubble/ai-agent.js.map +1 -0
  55. package/dist/bubbles/service-bubble/gmail.d.ts +3073 -0
  56. package/dist/bubbles/service-bubble/gmail.d.ts.map +1 -0
  57. package/dist/bubbles/service-bubble/gmail.js +908 -0
  58. package/dist/bubbles/service-bubble/gmail.js.map +1 -0
  59. package/dist/bubbles/service-bubble/google-calendar.d.ts +3377 -0
  60. package/dist/bubbles/service-bubble/google-calendar.d.ts.map +1 -0
  61. package/dist/bubbles/service-bubble/google-calendar.js +527 -0
  62. package/dist/bubbles/service-bubble/google-calendar.js.map +1 -0
  63. package/dist/bubbles/service-bubble/google-drive.d.ts +1152 -0
  64. package/dist/bubbles/service-bubble/google-drive.d.ts.map +1 -0
  65. package/dist/bubbles/service-bubble/google-drive.js +943 -0
  66. package/dist/bubbles/service-bubble/google-drive.js.map +1 -0
  67. package/dist/bubbles/service-bubble/google-sheets.d.ts +1811 -0
  68. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +1 -0
  69. package/dist/bubbles/service-bubble/google-sheets.js +904 -0
  70. package/dist/bubbles/service-bubble/google-sheets.js.map +1 -0
  71. package/dist/bubbles/service-bubble/hello-world.d.ts +74 -0
  72. package/dist/bubbles/service-bubble/hello-world.d.ts.map +1 -0
  73. package/dist/bubbles/service-bubble/hello-world.js +67 -0
  74. package/dist/bubbles/service-bubble/hello-world.js.map +1 -0
  75. package/dist/bubbles/service-bubble/http.d.ts +134 -0
  76. package/dist/bubbles/service-bubble/http.d.ts.map +1 -0
  77. package/dist/bubbles/service-bubble/http.js +184 -0
  78. package/dist/bubbles/service-bubble/http.js.map +1 -0
  79. package/dist/bubbles/service-bubble/postgresql.d.ts +180 -0
  80. package/dist/bubbles/service-bubble/postgresql.d.ts.map +1 -0
  81. package/dist/bubbles/service-bubble/postgresql.js +448 -0
  82. package/dist/bubbles/service-bubble/postgresql.js.map +1 -0
  83. package/dist/bubbles/service-bubble/resend.d.ts +301 -0
  84. package/dist/bubbles/service-bubble/resend.d.ts.map +1 -0
  85. package/dist/bubbles/service-bubble/resend.js +253 -0
  86. package/dist/bubbles/service-bubble/resend.js.map +1 -0
  87. package/dist/bubbles/service-bubble/slack.d.ts +5869 -0
  88. package/dist/bubbles/service-bubble/slack.d.ts.map +1 -0
  89. package/dist/bubbles/service-bubble/slack.js +1536 -0
  90. package/dist/bubbles/service-bubble/slack.js.map +1 -0
  91. package/dist/bubbles/service-bubble/storage.d.ts +571 -0
  92. package/dist/bubbles/service-bubble/storage.d.ts.map +1 -0
  93. package/dist/bubbles/service-bubble/storage.js +504 -0
  94. package/dist/bubbles/service-bubble/storage.js.map +1 -0
  95. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +308 -0
  96. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts.map +1 -0
  97. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js +285 -0
  98. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.js.map +1 -0
  99. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +416 -0
  100. package/dist/bubbles/tool-bubble/chart-js-tool.d.ts.map +1 -0
  101. package/dist/bubbles/tool-bubble/chart-js-tool.js +570 -0
  102. package/dist/bubbles/tool-bubble/chart-js-tool.js.map +1 -0
  103. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +99 -0
  104. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts.map +1 -0
  105. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js +645 -0
  106. package/dist/bubbles/tool-bubble/get-bubble-details-tool.js.map +1 -0
  107. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts +112 -0
  108. package/dist/bubbles/tool-bubble/list-bubbles-tool.d.ts.map +1 -0
  109. package/dist/bubbles/tool-bubble/list-bubbles-tool.js +82 -0
  110. package/dist/bubbles/tool-bubble/list-bubbles-tool.js.map +1 -0
  111. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +413 -0
  112. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts.map +1 -0
  113. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js +327 -0
  114. package/dist/bubbles/tool-bubble/reddit-scrape-tool.js.map +1 -0
  115. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +122 -0
  116. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts.map +1 -0
  117. package/dist/bubbles/tool-bubble/research-agent-tool.js +343 -0
  118. package/dist/bubbles/tool-bubble/research-agent-tool.js.map +1 -0
  119. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +131 -0
  120. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts.map +1 -0
  121. package/dist/bubbles/tool-bubble/sql-query-tool.js +147 -0
  122. package/dist/bubbles/tool-bubble/sql-query-tool.js.map +1 -0
  123. package/dist/bubbles/tool-bubble/tool-template.d.ts +257 -0
  124. package/dist/bubbles/tool-bubble/tool-template.d.ts.map +1 -0
  125. package/dist/bubbles/tool-bubble/tool-template.js +238 -0
  126. package/dist/bubbles/tool-bubble/tool-template.js.map +1 -0
  127. package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts +8 -0
  128. package/dist/bubbles/tool-bubble/virtual-file-editor-example.d.ts.map +1 -0
  129. package/dist/bubbles/tool-bubble/virtual-file-editor-example.js +65 -0
  130. package/dist/bubbles/tool-bubble/virtual-file-editor-example.js.map +1 -0
  131. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts +125 -0
  132. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.d.ts.map +1 -0
  133. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js +169 -0
  134. package/dist/bubbles/tool-bubble/virtual-file-editor.tool.js.map +1 -0
  135. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts +218 -0
  136. package/dist/bubbles/tool-bubble/web-crawl-tool.d.ts.map +1 -0
  137. package/dist/bubbles/tool-bubble/web-crawl-tool.js +255 -0
  138. package/dist/bubbles/tool-bubble/web-crawl-tool.js.map +1 -0
  139. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts +134 -0
  140. package/dist/bubbles/tool-bubble/web-extract-tool.d.ts.map +1 -0
  141. package/dist/bubbles/tool-bubble/web-extract-tool.js +175 -0
  142. package/dist/bubbles/tool-bubble/web-extract-tool.js.map +1 -0
  143. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts +228 -0
  144. package/dist/bubbles/tool-bubble/web-scrape-tool.d.ts.map +1 -0
  145. package/dist/bubbles/tool-bubble/web-scrape-tool.js +214 -0
  146. package/dist/bubbles/tool-bubble/web-scrape-tool.js.map +1 -0
  147. package/dist/bubbles/tool-bubble/web-search-tool.d.ts +134 -0
  148. package/dist/bubbles/tool-bubble/web-search-tool.d.ts.map +1 -0
  149. package/dist/bubbles/tool-bubble/web-search-tool.js +155 -0
  150. package/dist/bubbles/tool-bubble/web-search-tool.js.map +1 -0
  151. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts +114 -0
  152. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.d.ts.map +1 -0
  153. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js +777 -0
  154. package/dist/bubbles/workflow-bubble/bubbleflow-generator.workflow.js.map +1 -0
  155. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts +97 -0
  156. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.d.ts.map +1 -0
  157. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js +327 -0
  158. package/dist/bubbles/workflow-bubble/bubblscript-generateor.workflow.js.map +1 -0
  159. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts +303 -0
  160. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.d.ts.map +1 -0
  161. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js +297 -0
  162. package/dist/bubbles/workflow-bubble/database-analyzer.workflow.js.map +1 -0
  163. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts +157 -0
  164. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.d.ts.map +1 -0
  165. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js +310 -0
  166. package/dist/bubbles/workflow-bubble/file-editor-agent.workflow.js.map +1 -0
  167. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +543 -0
  168. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts.map +1 -0
  169. package/dist/bubbles/workflow-bubble/generate-document.workflow.js +628 -0
  170. package/dist/bubbles/workflow-bubble/generate-document.workflow.js.map +1 -0
  171. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts +679 -0
  172. package/dist/bubbles/workflow-bubble/parse-document.workflow.d.ts.map +1 -0
  173. package/dist/bubbles/workflow-bubble/parse-document.workflow.js +604 -0
  174. package/dist/bubbles/workflow-bubble/parse-document.workflow.js.map +1 -0
  175. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +1011 -0
  176. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts.map +1 -0
  177. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js +841 -0
  178. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.js.map +1 -0
  179. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts +883 -0
  180. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.d.ts.map +1 -0
  181. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js +781 -0
  182. package/dist/bubbles/workflow-bubble/pdf-ocr.workflow.js.map +1 -0
  183. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +300 -0
  184. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts.map +1 -0
  185. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js +508 -0
  186. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.js.map +1 -0
  187. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +731 -0
  188. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts.map +1 -0
  189. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js +690 -0
  190. package/dist/bubbles/workflow-bubble/slack-formatter-agent.js.map +1 -0
  191. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts +401 -0
  192. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.d.ts.map +1 -0
  193. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js +382 -0
  194. package/dist/bubbles/workflow-bubble/slack-notifier.workflow.js.map +1 -0
  195. package/dist/bubbles/workflow-bubble/workflow-template.d.ts +144 -0
  196. package/dist/bubbles/workflow-bubble/workflow-template.d.ts.map +1 -0
  197. package/dist/bubbles/workflow-bubble/workflow-template.js +124 -0
  198. package/dist/bubbles/workflow-bubble/workflow-template.js.map +1 -0
  199. package/dist/index.d.ts +46 -0
  200. package/dist/index.d.ts.map +1 -0
  201. package/dist/index.js +53 -0
  202. package/dist/index.js.map +1 -0
  203. package/dist/logging/BubbleLogger.d.ts +146 -0
  204. package/dist/logging/BubbleLogger.d.ts.map +1 -0
  205. package/dist/logging/BubbleLogger.js +472 -0
  206. package/dist/logging/BubbleLogger.js.map +1 -0
  207. package/dist/logging/StreamingBubbleLogger.d.ts +85 -0
  208. package/dist/logging/StreamingBubbleLogger.d.ts.map +1 -0
  209. package/dist/logging/StreamingBubbleLogger.js +340 -0
  210. package/dist/logging/StreamingBubbleLogger.js.map +1 -0
  211. package/dist/types/ai-models.d.ts +4 -0
  212. package/dist/types/ai-models.d.ts.map +1 -0
  213. package/dist/types/ai-models.js +14 -0
  214. package/dist/types/ai-models.js.map +1 -0
  215. package/dist/types/available-tools.d.ts +4 -0
  216. package/dist/types/available-tools.d.ts.map +1 -0
  217. package/dist/types/available-tools.js +19 -0
  218. package/dist/types/available-tools.js.map +1 -0
  219. package/dist/types/base-bubble-class.d.ts +47 -0
  220. package/dist/types/base-bubble-class.d.ts.map +1 -0
  221. package/dist/types/base-bubble-class.js +212 -0
  222. package/dist/types/base-bubble-class.js.map +1 -0
  223. package/dist/types/bubble-errors.d.ts +44 -0
  224. package/dist/types/bubble-errors.d.ts.map +1 -0
  225. package/dist/types/bubble-errors.js +51 -0
  226. package/dist/types/bubble-errors.js.map +1 -0
  227. package/dist/types/bubble.d.ts +73 -0
  228. package/dist/types/bubble.d.ts.map +1 -0
  229. package/dist/types/bubble.js +2 -0
  230. package/dist/types/bubble.js.map +1 -0
  231. package/dist/types/credentials.d.ts +6 -0
  232. package/dist/types/credentials.d.ts.map +1 -0
  233. package/dist/types/credentials.js +6 -0
  234. package/dist/types/credentials.js.map +1 -0
  235. package/dist/types/service-bubble-class.d.ts +31 -0
  236. package/dist/types/service-bubble-class.d.ts.map +1 -0
  237. package/dist/types/service-bubble-class.js +36 -0
  238. package/dist/types/service-bubble-class.js.map +1 -0
  239. package/dist/types/streaming-events.d.ts +18 -0
  240. package/dist/types/streaming-events.d.ts.map +1 -0
  241. package/dist/types/streaming-events.js +5 -0
  242. package/dist/types/streaming-events.js.map +1 -0
  243. package/dist/types/tool-bubble-class.d.ts +19 -0
  244. package/dist/types/tool-bubble-class.d.ts.map +1 -0
  245. package/dist/types/tool-bubble-class.js +48 -0
  246. package/dist/types/tool-bubble-class.js.map +1 -0
  247. package/dist/types/workflow-bubble-class.d.ts +25 -0
  248. package/dist/types/workflow-bubble-class.d.ts.map +1 -0
  249. package/dist/types/workflow-bubble-class.js +30 -0
  250. package/dist/types/workflow-bubble-class.js.map +1 -0
  251. package/dist/utils/bubbleflow-parser.d.ts +32 -0
  252. package/dist/utils/bubbleflow-parser.d.ts.map +1 -0
  253. package/dist/utils/bubbleflow-parser.js +332 -0
  254. package/dist/utils/bubbleflow-parser.js.map +1 -0
  255. package/dist/utils/bubbleflow-validation.d.ts +9 -0
  256. package/dist/utils/bubbleflow-validation.d.ts.map +1 -0
  257. package/dist/utils/bubbleflow-validation.js +116 -0
  258. package/dist/utils/bubbleflow-validation.js.map +1 -0
  259. package/dist/utils/json-parsing.d.ts +20 -0
  260. package/dist/utils/json-parsing.d.ts.map +1 -0
  261. package/dist/utils/json-parsing.js +394 -0
  262. package/dist/utils/json-parsing.js.map +1 -0
  263. package/dist/utils/mock-data-generator.d.ts +43 -0
  264. package/dist/utils/mock-data-generator.d.ts.map +1 -0
  265. package/dist/utils/mock-data-generator.js +312 -0
  266. package/dist/utils/mock-data-generator.js.map +1 -0
  267. package/dist/utils/param-helper.d.ts +2 -0
  268. package/dist/utils/param-helper.d.ts.map +1 -0
  269. package/dist/utils/param-helper.js +5 -0
  270. package/dist/utils/param-helper.js.map +1 -0
  271. package/dist/utils/source-bubble-parser.d.ts +31 -0
  272. package/dist/utils/source-bubble-parser.d.ts.map +1 -0
  273. package/dist/utils/source-bubble-parser.js +231 -0
  274. package/dist/utils/source-bubble-parser.js.map +1 -0
  275. package/package.json +63 -0
@@ -0,0 +1,628 @@
1
+ /**
2
+ * GENERATE DOCUMENT WORKFLOW
3
+ *
4
+ * A comprehensive workflow that converts markdown documents into structured formats
5
+ * like HTML tables, CSV, or Excel files. Uses AI analysis to extract and organize
6
+ * data from unstructured markdown text into tabular formats.
7
+ *
8
+ * This workflow combines:
9
+ * 1. AI agent analysis for data extraction from markdown documents
10
+ * 2. JSON schema generation for structured data representation
11
+ * 3. Format conversion to HTML, CSV, or Excel
12
+ *
13
+ * Returns structured data and downloadable files in the requested format.
14
+ */
15
+ import { z } from 'zod';
16
+ import { WorkflowBubble } from '../../types/workflow-bubble-class.js';
17
+ import { CredentialType } from '@bubblelab/shared-schemas';
18
+ import { AIAgentBubble } from '../service-bubble/ai-agent.js';
19
+ import { AvailableModels } from '../../types/ai-models.js';
20
+ /**
21
+ * System prompt for document analysis and data extraction
22
+ */
23
+ const DOCUMENT_ANALYSIS_PROMPT = `You are an expert document analysis and data extraction specialist. Your task is to analyze markdown documents and extract structured data based on user requirements.
24
+
25
+ IMPORTANT CONTEXT:
26
+ - Current date: ${new Date().toISOString().split('T')[0]} (YYYY-MM-DD format)
27
+ - Current year: ${new Date().getFullYear()}
28
+ - When interpreting dates, assume they are from recent years (2020s) unless explicitly stated otherwise
29
+ - Use proper 4-digit years (e.g., 2024, 2025) not abbreviated years (e.g., 24, 25)
30
+
31
+ Your process:
32
+ 1. Read and understand the provided markdown documents
33
+ 2. Identify data points that match the user's output requirements
34
+ 3. Extract relevant information and organize it into rows and columns
35
+ 4. For each extracted row, ALWAYS include which source document it came from
36
+ 5. Generate a consistent JSON structure with the extracted data
37
+
38
+ Guidelines:
39
+ - Each row should represent one logical entity (e.g., expense, invoice, person, etc.)
40
+ - Column names should be descriptive and consistent
41
+ - ALWAYS include a "source_document_index" column indicating which page/document section each row was extracted from (use page numbers from the document headers)
42
+ - Handle variations in data format gracefully
43
+ - If data is missing, use empty strings rather than omitting fields
44
+ - Maintain data relationships and context where possible
45
+ - Be precise with data types (numbers, dates, text)
46
+ - For dates, always use YYYY-MM-DD format and assume recent years (2020s) unless context suggests otherwise
47
+
48
+ Return format: JSON object with:
49
+ - columns: Array of column definitions with name, type, and description
50
+ - rows: Array of data rows matching the column structure
51
+ - metadata: Summary information about the extraction
52
+
53
+ CRITICAL TYPE REQUIREMENTS:
54
+ - Column "type" field MUST be one of: "string", "number", "integer", "float", "date", "boolean"
55
+ - Row values MUST be primitives: string, number, boolean, or null (never objects or arrays)
56
+ - Date values should be strings in YYYY-MM-DD format
57
+ - Boolean values should be true/false, not "true"/"false" strings
58
+ - Numeric values should be actual numbers, not quoted strings
59
+
60
+ Example output format:
61
+ {
62
+ "columns": [
63
+ {"name": "vendor", "type": "string", "description": "Company or person paid"},
64
+ {"name": "amount", "type": "number", "description": "Payment amount in dollars"},
65
+ {"name": "date", "type": "date", "description": "Transaction date"},
66
+ {"name": "is_recurring", "type": "boolean", "description": "Whether this is a recurring expense"},
67
+ {"name": "source_document_index", "type": "number", "description": "Source document index"}
68
+ ],
69
+ "rows": [
70
+ {"vendor": "Office Supplies Inc", "amount": 156.78, "date": "2024-01-15", "is_recurring": false, "source_document_index": 0},
71
+ {"vendor": "Monthly Software", "amount": 99.99, "date": "2024-01-01", "is_recurring": true, "source_document_index": 1}
72
+ ],
73
+ "metadata": {
74
+ "extractedCount": 2,
75
+ "confidence": 0.95
76
+ }
77
+ }
78
+
79
+ Focus on accuracy and consistency in data extraction while following the user's specific requirements for the output structure.`;
80
+ /**
81
+ * Parameters schema for Generate Document workflow
82
+ */
83
+ const GenerateDocumentWorkflowParamsSchema = z.object({
84
+ documents: z
85
+ .array(z.object({
86
+ content: z.string().min(1, 'Document content cannot be empty'),
87
+ index: z.number().min(0, 'Document index must be non-negative'),
88
+ metadata: z
89
+ .object({
90
+ originalFilename: z.string().optional(),
91
+ pageCount: z.number().optional(),
92
+ uploadedImages: z
93
+ .array(z.object({
94
+ pageNumber: z.number(),
95
+ fileName: z.string(),
96
+ fileUrl: z.string().optional(),
97
+ }))
98
+ .optional(),
99
+ })
100
+ .optional(),
101
+ }))
102
+ .min(1, 'At least one document is required')
103
+ .describe('Array of document objects with content, index, and metadata'),
104
+ outputDescription: z
105
+ .string()
106
+ .min(10, 'Output description must be at least 10 characters')
107
+ .describe('Description of what the user wants to extract (e.g., "expense tracking with vendor, amount, date, category")'),
108
+ outputFormat: z
109
+ .enum(['html', 'csv', 'json'])
110
+ .default('html')
111
+ .describe('Output format for the structured data'),
112
+ aiOptions: z
113
+ .object({
114
+ model: AvailableModels.default('google/gemini-2.5-flash').describe('AI model to use for document analysis'),
115
+ temperature: z
116
+ .number()
117
+ .min(0)
118
+ .max(2)
119
+ .default(0.1)
120
+ .describe('Temperature for AI responses (lower = more consistent)'),
121
+ maxTokens: z
122
+ .number()
123
+ .positive()
124
+ .default(50000)
125
+ .describe('Maximum tokens for AI response'),
126
+ jsonMode: z
127
+ .boolean()
128
+ .default(true)
129
+ .describe('Enable JSON mode to ensure clean JSON output'),
130
+ })
131
+ .default({
132
+ model: 'google/gemini-2.5-flash',
133
+ temperature: 0.1,
134
+ maxTokens: 50000,
135
+ jsonMode: true,
136
+ })
137
+ .describe('AI agent configuration options'),
138
+ credentials: z
139
+ .record(z.nativeEnum(CredentialType), z.string())
140
+ .optional()
141
+ .describe('Credentials for AI model access (GOOGLE_GEMINI_CRED, OPENAI_CRED, etc.)'),
142
+ });
143
+ /**
144
+ * Result schema for Generate Document workflow
145
+ */
146
+ const GenerateDocumentWorkflowResultSchema = z.object({
147
+ columns: z
148
+ .array(z.object({
149
+ name: z.string().describe('Column name'),
150
+ type: z
151
+ .enum(['string', 'number', 'integer', 'float', 'date', 'boolean'])
152
+ .describe('Data type of the column'),
153
+ description: z
154
+ .string()
155
+ .describe('Description of what this column contains'),
156
+ }))
157
+ .describe('Column definitions for the structured data'),
158
+ rows: z
159
+ .array(z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])))
160
+ .describe('Array of data rows extracted from documents'),
161
+ metadata: z
162
+ .object({
163
+ totalDocuments: z.number().describe('Number of documents processed'),
164
+ totalRows: z.number().describe('Number of data rows extracted'),
165
+ totalColumns: z.number().describe('Number of columns in the result'),
166
+ processingTime: z.number().describe('Processing time in milliseconds'),
167
+ extractedFrom: z
168
+ .array(z.string())
169
+ .describe('Summary of document sources'),
170
+ })
171
+ .describe('Metadata about the extraction process'),
172
+ generatedFiles: z
173
+ .object({
174
+ html: z.string().optional().describe('Generated HTML table'),
175
+ csv: z.string().optional().describe('Generated CSV data'),
176
+ json: z.string().optional().describe('Generated JSON data'),
177
+ })
178
+ .describe('Generated files in requested formats'),
179
+ aiAnalysis: z
180
+ .object({
181
+ model: z.string().describe('AI model used'),
182
+ iterations: z.number().describe('Number of AI iterations'),
183
+ processingTime: z.number().optional().describe('AI processing time'),
184
+ })
185
+ .describe('AI analysis metadata'),
186
+ success: z.boolean().describe('Whether the workflow completed successfully'),
187
+ error: z.string().describe('Error message if workflow failed'),
188
+ });
189
+ /**
190
+ * Generate Document Workflow
191
+ * Converts markdown documents into structured formats using AI analysis
192
+ */
193
+ export class GenerateDocumentWorkflow extends WorkflowBubble {
194
+ static type = 'workflow';
195
+ static bubbleName = 'generate-document-workflow';
196
+ static schema = GenerateDocumentWorkflowParamsSchema;
197
+ static resultSchema = GenerateDocumentWorkflowResultSchema;
198
+ static shortDescription = 'Generate Document workflow: convert markdown to structured formats using AI';
199
+ static longDescription = `
200
+ Comprehensive document generation workflow that transforms unstructured markdown content into structured data formats:
201
+
202
+ **Process:**
203
+ 1. Analyze markdown documents using AI to understand content and structure
204
+ 2. Extract data points based on user requirements and output description
205
+ 3. Generate consistent column definitions and data rows
206
+ 4. Convert to requested format (HTML table, CSV, JSON)
207
+
208
+ **Features:**
209
+ - Multi-document processing with content consolidation
210
+ - AI-powered data extraction and structuring
211
+ - Flexible output format support (HTML, CSV, JSON)
212
+ - Configurable AI model selection and parameters
213
+ - Comprehensive metadata and analysis tracking
214
+ - Error handling and validation
215
+
216
+ **Common Use Cases:**
217
+ - **Expense Management**: Extract vendor, amount, date, category from receipts
218
+ - **Invoice Processing**: Structure billing information into tables
219
+ - **Contact Lists**: Organize people and contact information
220
+ - **Inventory Management**: Extract product details and quantities
221
+ - **Research Data**: Structure findings and references
222
+
223
+ **Input**: Array of markdown documents + output requirements description
224
+ **Output**: Structured data in requested format with metadata and analysis
225
+ `;
226
+ static alias = 'generate-doc';
227
+ constructor(params, context) {
228
+ super(params, context);
229
+ }
230
+ async performAction() {
231
+ const startTime = Date.now();
232
+ console.log('[GenerateDocumentWorkflow] Starting document analysis and generation');
233
+ console.log('[GenerateDocumentWorkflow] Processing', this.params.documents.length, 'documents');
234
+ console.log('[GenerateDocumentWorkflow] Output format:', this.params.outputFormat);
235
+ console.log('[GenerateDocumentWorkflow] Full params:', JSON.stringify(this.params, null, 2));
236
+ try {
237
+ // Step 1: Prepare documents for AI analysis
238
+ console.log('[GenerateDocumentWorkflow] Step 1: Preparing documents for analysis...');
239
+ // Renumber pages sequentially across all documents
240
+ let globalPageNumber = 1;
241
+ const documentsContext = this.params.documents
242
+ .map((doc) => {
243
+ // Replace page headers with sequential numbering
244
+ let processedContent = doc.content;
245
+ // Debug: log original content
246
+ console.log(`[DEBUG] Document ${doc.index} original pages:`, processedContent.match(/--- Page \d+ ---/g));
247
+ // Better approach: replace with placeholders first, then replace placeholders with sequential numbers
248
+ const pageHeaders = processedContent.match(/--- Page \d+ ---/g) || [];
249
+ // Step 1: Replace all page headers with unique placeholders
250
+ for (let i = 0; i < pageHeaders.length; i++) {
251
+ processedContent = processedContent.replace(/--- Page \d+ ---/, `###PLACEHOLDER_${i}###`);
252
+ }
253
+ // Step 2: Replace placeholders with sequential page numbers
254
+ for (let i = 0; i < pageHeaders.length; i++) {
255
+ processedContent = processedContent.replace(`###PLACEHOLDER_${i}###`, `--- Page ${globalPageNumber} ---`);
256
+ console.log(`[DEBUG] Set placeholder ${i} to Page ${globalPageNumber}`);
257
+ globalPageNumber++;
258
+ }
259
+ // Debug: log final content
260
+ console.log(`[DEBUG] Document ${doc.index} final pages:`, processedContent.match(/--- Page \d+ ---/g));
261
+ // If no page headers found, treat entire document as one page
262
+ if (pageHeaders.length === 0) {
263
+ processedContent = `--- Page ${globalPageNumber} ---\n\n${processedContent}`;
264
+ globalPageNumber++;
265
+ }
266
+ return `\n\n--- Document ${doc.index} ---\n${processedContent}`;
267
+ })
268
+ .join('\n');
269
+ console.log(`[GenerateDocumentWorkflow] Renumbered pages sequentially: 1 to ${globalPageNumber - 1}`);
270
+ console.log('[FINAL DOCUMENTS CONTEXT]:');
271
+ console.log(documentsContext);
272
+ const enhancedPrompt = DOCUMENT_ANALYSIS_PROMPT +
273
+ `
274
+
275
+ Documents to analyze:
276
+ ${documentsContext}
277
+
278
+ User requirements:
279
+ ${this.params.outputDescription}
280
+
281
+ CRITICAL: For the source_document_index column, you MUST use ONLY THE NUMERIC PAGE NUMBER from the "--- Page X ---" headers in the documents above.
282
+ - Look for "--- Page 1 ---", "--- Page 2 ---", etc. headers
283
+ - Extract ONLY the number (1, 2, 3, etc.) as the source_document_index value
284
+ - DO NOT include the word "Page" - use only the numeric value
285
+
286
+ Please extract structured data that matches the user's requirements. Return a JSON object with:
287
+ - columns: Array of {name, type, description} for each data field (MUST include source_document_index column)
288
+ - rows: Array of objects with data extracted from the documents (each row MUST include the correct page number as source_document_index)
289
+ - metadata: Summary information about the extraction
290
+
291
+ EXAMPLE: If data is extracted from "--- Page 2 ---", then source_document_index should be 2 (number), not "Page 2" (string) or 0.
292
+
293
+ Be thorough but precise in your extraction.`;
294
+ // Step 2: AI analysis
295
+ console.log('[GenerateDocumentWorkflow] Step 2: Performing AI analysis...');
296
+ const aiAgent = new AIAgentBubble({
297
+ message: `Please analyze the provided markdown documents and extract structured data according to the user's requirements.
298
+
299
+ Focus on:
300
+ 1. Identifying data points that match the output description
301
+ 2. Creating consistent column definitions with VALID types ("string", "number", "integer", "float", "date", "boolean")
302
+ 3. Extracting all relevant data rows with PRIMITIVE values only (no objects or arrays)
303
+ 4. Providing accurate metadata
304
+
305
+ CRITICAL:
306
+ - Column types must be exact strings: "string", "number", "integer", "float", "date", "boolean"
307
+ - Row values must be primitives: actual numbers (not "123"), booleans (not "true"), dates as strings ("2024-01-15"), or null
308
+ - Never use objects, arrays, or complex types in row data
309
+
310
+ Return only the JSON object as specified in the system prompt, no additional text.`,
311
+ systemPrompt: enhancedPrompt,
312
+ model: {
313
+ model: this.params.aiOptions?.model || 'google/gemini-2.5-flash',
314
+ temperature: this.params.aiOptions?.temperature || 0.1,
315
+ maxTokens: this.params.aiOptions?.maxTokens || 50000,
316
+ jsonMode: this.params.aiOptions?.jsonMode ?? true,
317
+ },
318
+ credentials: this.params.credentials,
319
+ tools: [], // No tools needed for this analysis
320
+ maxIterations: 3,
321
+ }, this.context);
322
+ const aiResult = await aiAgent.action();
323
+ if (!aiResult.success) {
324
+ throw new Error(`AI analysis failed: ${aiResult.error}`);
325
+ }
326
+ console.log('[GenerateDocumentWorkflow] AI analysis completed');
327
+ // Step 3: Parse AI response and structure results
328
+ console.log('[GenerateDocumentWorkflow] Step 3: Processing AI results...');
329
+ let extractedData;
330
+ try {
331
+ const aiResponse = aiResult.data?.response || '{}';
332
+ const parsedData = JSON.parse(aiResponse);
333
+ extractedData = {
334
+ columns: parsedData.columns || [],
335
+ rows: parsedData.rows || [],
336
+ metadata: parsedData.metadata || {},
337
+ };
338
+ // Post-process to ensure source_document_index values are numeric
339
+ if (extractedData.rows && Array.isArray(extractedData.rows)) {
340
+ console.log('[GenerateDocumentWorkflow] Raw source_document_index values before processing:', extractedData.rows.map((row) => row.source_document_index));
341
+ extractedData.rows = extractedData.rows.map((row) => {
342
+ if (row.source_document_index !== undefined) {
343
+ const originalValue = row.source_document_index;
344
+ // Extract numeric value from strings like "Page 1", "1", etc.
345
+ let numericIndex = row.source_document_index;
346
+ if (typeof numericIndex === 'string') {
347
+ const match = numericIndex.match(/\d+/);
348
+ numericIndex = match ? parseInt(match[0], 10) : numericIndex;
349
+ }
350
+ row.source_document_index = numericIndex;
351
+ if (originalValue !== numericIndex) {
352
+ console.log(`[GenerateDocumentWorkflow] Converted source_document_index from '${originalValue}' to ${numericIndex}`);
353
+ }
354
+ }
355
+ return row;
356
+ });
357
+ console.log('[GenerateDocumentWorkflow] Final source_document_index values:', extractedData.rows.map((row) => row.source_document_index));
358
+ }
359
+ // Validate and normalize the extracted data
360
+ if (!Array.isArray(extractedData.columns) ||
361
+ extractedData.columns.length === 0) {
362
+ throw new Error('No valid columns extracted from documents');
363
+ }
364
+ if (!Array.isArray(extractedData.rows)) {
365
+ extractedData.rows = [];
366
+ }
367
+ // Normalize column types to ensure they match the schema
368
+ extractedData.columns = extractedData.columns.map((col) => ({
369
+ name: col.name || 'unknown',
370
+ type: this.normalizeColumnType(col.type),
371
+ description: col.description || '',
372
+ }));
373
+ // Normalize row data to ensure all values are primitives
374
+ extractedData.rows = extractedData.rows.map((row) => {
375
+ const normalizedRow = {};
376
+ for (const [key, value] of Object.entries(row)) {
377
+ normalizedRow[key] = this.normalizeRowValue(value);
378
+ }
379
+ return normalizedRow;
380
+ });
381
+ console.log(`[GenerateDocumentWorkflow] Extracted ${extractedData.columns.length} columns and ${extractedData.rows.length} rows`);
382
+ }
383
+ catch (parseError) {
384
+ console.error('[GenerateDocumentWorkflow] Failed to parse AI response:', parseError);
385
+ throw new Error('Failed to parse AI analysis results');
386
+ }
387
+ // Step 4: Generate output files
388
+ console.log('[GenerateDocumentWorkflow] Step 4: Generating output files...');
389
+ const generatedFiles = {};
390
+ // Generate JSON (always available)
391
+ generatedFiles.json = JSON.stringify({
392
+ columns: extractedData.columns,
393
+ rows: extractedData.rows,
394
+ }, null, 2);
395
+ // Generate CSV if requested
396
+ if (this.params.outputFormat === 'csv' ||
397
+ this.params.outputFormat === 'html') {
398
+ const csvContent = this.generateCSV(extractedData.columns, extractedData.rows);
399
+ generatedFiles.csv = csvContent;
400
+ }
401
+ // Generate HTML if requested
402
+ console.log('🔍 HTML Generation Check:', {
403
+ outputFormat: this.params.outputFormat,
404
+ isHtml: this.params.outputFormat === 'html',
405
+ typeof: typeof this.params.outputFormat,
406
+ stringified: JSON.stringify(this.params.outputFormat),
407
+ });
408
+ if (this.params.outputFormat === 'html') {
409
+ const htmlContent = this.generateHTML(extractedData.columns, extractedData.rows);
410
+ generatedFiles.html = htmlContent;
411
+ console.log('✅ HTML generated, length:', htmlContent.length);
412
+ }
413
+ else {
414
+ console.log('❌ HTML not generated - outputFormat mismatch');
415
+ }
416
+ const processingTime = Date.now() - startTime;
417
+ // Step 5: Compile final results
418
+ const finalMetadata = {
419
+ totalDocuments: this.params.documents.length,
420
+ totalRows: extractedData.rows.length,
421
+ totalColumns: extractedData.columns.length,
422
+ processingTime,
423
+ extractedFrom: this.params.documents.map((doc) => `Document ${doc.index}`),
424
+ ...extractedData.metadata,
425
+ };
426
+ console.log(`[GenerateDocumentWorkflow] Workflow completed successfully in ${processingTime}ms`);
427
+ return {
428
+ columns: extractedData.columns,
429
+ rows: extractedData.rows,
430
+ metadata: finalMetadata,
431
+ generatedFiles,
432
+ aiAnalysis: {
433
+ model: this.params.aiOptions?.model || 'google/gemini-2.5-flash',
434
+ iterations: aiResult.data?.iterations || 0,
435
+ processingTime,
436
+ },
437
+ success: true,
438
+ error: '',
439
+ };
440
+ }
441
+ catch (error) {
442
+ const processingTime = Date.now() - startTime;
443
+ console.error('[GenerateDocumentWorkflow] Workflow failed:', error);
444
+ return {
445
+ columns: [],
446
+ rows: [],
447
+ metadata: {
448
+ totalDocuments: this.params.documents.length,
449
+ totalRows: 0,
450
+ totalColumns: 0,
451
+ processingTime,
452
+ extractedFrom: [],
453
+ },
454
+ generatedFiles: {},
455
+ aiAnalysis: {
456
+ model: this.params.aiOptions?.model || 'google/gemini-2.5-flash',
457
+ iterations: 0,
458
+ processingTime,
459
+ },
460
+ success: false,
461
+ error: error instanceof Error
462
+ ? error.message
463
+ : 'Unknown error during document generation workflow',
464
+ };
465
+ }
466
+ }
467
+ /**
468
+ * Generate CSV content from columns and rows
469
+ */
470
+ generateCSV(columns, rows) {
471
+ const headers = columns.map((col) => col.name).join(',');
472
+ const csvRows = rows.map((row) => columns
473
+ .map((col) => {
474
+ const value = row[col.name];
475
+ // Escape commas and quotes in CSV
476
+ if (typeof value === 'string' &&
477
+ (value.includes(',') || value.includes('"'))) {
478
+ return `"${value.replace(/"/g, '""')}"`;
479
+ }
480
+ return value?.toString() || '';
481
+ })
482
+ .join(','));
483
+ return [headers, ...csvRows].join('\n');
484
+ }
485
+ /**
486
+ * Normalize column type to match schema expectations
487
+ */
488
+ normalizeColumnType(type) {
489
+ if (typeof type === 'string') {
490
+ const normalizedType = type.toLowerCase();
491
+ if (['string', 'text', 'varchar'].includes(normalizedType))
492
+ return 'string';
493
+ if (['number', 'numeric', 'decimal'].includes(normalizedType))
494
+ return 'number';
495
+ if (['integer', 'int'].includes(normalizedType))
496
+ return 'integer';
497
+ if (['float', 'double', 'real'].includes(normalizedType))
498
+ return 'float';
499
+ if (['date', 'datetime', 'timestamp'].includes(normalizedType))
500
+ return 'date';
501
+ if (['boolean', 'bool'].includes(normalizedType))
502
+ return 'boolean';
503
+ }
504
+ // Default to string if type is unknown or invalid
505
+ return 'string';
506
+ }
507
+ /**
508
+ * Normalize row value to ensure it's a primitive type
509
+ */
510
+ normalizeRowValue(value) {
511
+ if (value === null || value === undefined) {
512
+ return null;
513
+ }
514
+ if (typeof value === 'string' ||
515
+ typeof value === 'number' ||
516
+ typeof value === 'boolean') {
517
+ return value;
518
+ }
519
+ if (typeof value === 'object' && value !== null) {
520
+ // Convert objects to JSON string
521
+ try {
522
+ return JSON.stringify(value);
523
+ }
524
+ catch {
525
+ return String(value);
526
+ }
527
+ }
528
+ // Convert anything else to string
529
+ return String(value);
530
+ }
531
+ /**
532
+ * Generate HTML table from columns and rows
533
+ */
534
+ generateHTML(columns, rows) {
535
+ const headers = columns
536
+ .map((col) => `<th title="${col.description}">${col.name}</th>`)
537
+ .join('');
538
+ const tableRows = rows
539
+ .map((row) => {
540
+ const cells = columns
541
+ .map((col) => {
542
+ const value = row[col.name];
543
+ const cellClass = col.type === 'number' ? 'text-right' : '';
544
+ return `<td class="${cellClass}">${value?.toString() || ''}</td>`;
545
+ })
546
+ .join('');
547
+ return `<tr>${cells}</tr>`;
548
+ })
549
+ .join('');
550
+ return `
551
+ <!DOCTYPE html>
552
+ <html lang="en">
553
+ <head>
554
+ <meta charset="UTF-8">
555
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
556
+ <title>Generated Document Data</title>
557
+ <style>
558
+ body {
559
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
560
+ margin: 20px;
561
+ background-color: #f5f5f5;
562
+ }
563
+ .container {
564
+ max-width: 1200px;
565
+ margin: 0 auto;
566
+ background: white;
567
+ padding: 20px;
568
+ border-radius: 8px;
569
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
570
+ }
571
+ h1 {
572
+ color: #333;
573
+ margin-bottom: 20px;
574
+ }
575
+ table {
576
+ width: 100%;
577
+ border-collapse: collapse;
578
+ margin-top: 20px;
579
+ }
580
+ th, td {
581
+ padding: 12px;
582
+ text-align: left;
583
+ border-bottom: 1px solid #ddd;
584
+ }
585
+ th {
586
+ background-color: #f8f9fa;
587
+ font-weight: 600;
588
+ color: #555;
589
+ cursor: help;
590
+ }
591
+ tr:hover {
592
+ background-color: #f8f9fa;
593
+ }
594
+ .text-right {
595
+ text-align: right;
596
+ }
597
+ .metadata {
598
+ margin-top: 20px;
599
+ padding: 15px;
600
+ background-color: #f8f9fa;
601
+ border-radius: 6px;
602
+ font-size: 14px;
603
+ color: #666;
604
+ }
605
+ </style>
606
+ </head>
607
+ <body>
608
+ <div class="container">
609
+ <h1>Generated Document Data</h1>
610
+ <table>
611
+ <thead>
612
+ <tr>${headers}</tr>
613
+ </thead>
614
+ <tbody>
615
+ ${tableRows}
616
+ </tbody>
617
+ </table>
618
+ <div class="metadata">
619
+ <strong>Generated by Generate Document Workflow</strong> •
620
+ ${rows.length} rows • ${columns.length} columns •
621
+ ${new Date().toLocaleString()}
622
+ </div>
623
+ </div>
624
+ </body>
625
+ </html>`.trim();
626
+ }
627
+ }
628
+ //# sourceMappingURL=generate-document.workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-document.workflow.js","sourceRoot":"","sources":["../../../src/bubbles/workflow-bubble/generate-document.workflow.ts"],"names":[],"mappings":"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"}