@nyaruka/temba-components 0.129.7 → 0.129.9

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 (269) hide show
  1. package/.devcontainer/Dockerfile +11 -4
  2. package/.devcontainer/devcontainer.json +3 -2
  3. package/.github/workflows/build.yml +4 -14
  4. package/CHANGELOG.md +29 -0
  5. package/demo/components/flow/example.html +1 -1
  6. package/demo/components/message-editor/example.html +125 -0
  7. package/demo/components/textinput/completion.html +1 -0
  8. package/demo/data/flows/food-order.json +12 -21
  9. package/demo/data/flows/sample-flow.json +210 -104
  10. package/dist/temba-components.js +715 -364
  11. package/dist/temba-components.js.map +1 -1
  12. package/out-tsc/src/display/Thumbnail.js +2 -1
  13. package/out-tsc/src/display/Thumbnail.js.map +1 -1
  14. package/out-tsc/src/events.js.map +1 -1
  15. package/out-tsc/src/excellent/helpers.js +2 -2
  16. package/out-tsc/src/excellent/helpers.js.map +1 -1
  17. package/out-tsc/src/flow/CanvasNode.js +25 -7
  18. package/out-tsc/src/flow/CanvasNode.js.map +1 -1
  19. package/out-tsc/src/flow/Editor.js +11 -1
  20. package/out-tsc/src/flow/Editor.js.map +1 -1
  21. package/out-tsc/src/flow/NodeEditor.js +342 -276
  22. package/out-tsc/src/flow/NodeEditor.js.map +1 -1
  23. package/out-tsc/src/flow/actions/add_input_labels.js +40 -0
  24. package/out-tsc/src/flow/actions/add_input_labels.js.map +1 -1
  25. package/out-tsc/src/flow/actions/call_llm.js +56 -3
  26. package/out-tsc/src/flow/actions/call_llm.js.map +1 -1
  27. package/out-tsc/src/flow/actions/call_webhook.js +26 -17
  28. package/out-tsc/src/flow/actions/call_webhook.js.map +1 -1
  29. package/out-tsc/src/flow/actions/open_ticket.js +65 -3
  30. package/out-tsc/src/flow/actions/open_ticket.js.map +1 -1
  31. package/out-tsc/src/flow/actions/send_msg.js +147 -6
  32. package/out-tsc/src/flow/actions/send_msg.js.map +1 -1
  33. package/out-tsc/src/flow/actions/set_run_result.js +75 -0
  34. package/out-tsc/src/flow/actions/set_run_result.js.map +1 -1
  35. package/out-tsc/src/flow/config.js +4 -0
  36. package/out-tsc/src/flow/config.js.map +1 -1
  37. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js +227 -0
  38. package/out-tsc/src/flow/nodes/split_by_llm_categorize.js.map +1 -0
  39. package/out-tsc/src/flow/nodes/split_by_ticket.js +18 -0
  40. package/out-tsc/src/flow/nodes/split_by_ticket.js.map +1 -0
  41. package/out-tsc/src/flow/nodes/wait_for_response.js +27 -1
  42. package/out-tsc/src/flow/nodes/wait_for_response.js.map +1 -1
  43. package/out-tsc/src/flow/types.js +0 -65
  44. package/out-tsc/src/flow/types.js.map +1 -1
  45. package/out-tsc/src/form/ArrayEditor.js +87 -57
  46. package/out-tsc/src/form/ArrayEditor.js.map +1 -1
  47. package/out-tsc/src/form/BaseListEditor.js +19 -4
  48. package/out-tsc/src/form/BaseListEditor.js.map +1 -1
  49. package/out-tsc/src/form/FieldRenderer.js +305 -0
  50. package/out-tsc/src/form/FieldRenderer.js.map +1 -0
  51. package/out-tsc/src/form/FormField.js +4 -4
  52. package/out-tsc/src/form/FormField.js.map +1 -1
  53. package/out-tsc/src/form/KeyValueEditor.js +1 -1
  54. package/out-tsc/src/form/KeyValueEditor.js.map +1 -1
  55. package/out-tsc/src/form/MediaPicker.js +13 -1
  56. package/out-tsc/src/form/MediaPicker.js.map +1 -1
  57. package/out-tsc/src/form/MessageEditor.js +422 -0
  58. package/out-tsc/src/form/MessageEditor.js.map +1 -0
  59. package/out-tsc/src/form/TextInput.js +13 -6
  60. package/out-tsc/src/form/TextInput.js.map +1 -1
  61. package/out-tsc/src/form/select/Select.js +52 -24
  62. package/out-tsc/src/form/select/Select.js.map +1 -1
  63. package/out-tsc/src/live/ContactChat.js +66 -15
  64. package/out-tsc/src/live/ContactChat.js.map +1 -1
  65. package/out-tsc/src/markdown.js +13 -11
  66. package/out-tsc/src/markdown.js.map +1 -1
  67. package/out-tsc/temba-modules.js +2 -0
  68. package/out-tsc/temba-modules.js.map +1 -1
  69. package/out-tsc/test/ActionHelper.js +2 -0
  70. package/out-tsc/test/ActionHelper.js.map +1 -1
  71. package/out-tsc/test/NodeHelper.js +148 -0
  72. package/out-tsc/test/NodeHelper.js.map +1 -0
  73. package/out-tsc/test/actions/call_llm.test.js +103 -0
  74. package/out-tsc/test/actions/call_llm.test.js.map +1 -0
  75. package/out-tsc/test/nodes/split_by_llm_categorize.test.js +532 -0
  76. package/out-tsc/test/nodes/split_by_llm_categorize.test.js.map +1 -0
  77. package/out-tsc/test/nodes/split_by_random.test.js +150 -0
  78. package/out-tsc/test/nodes/split_by_random.test.js.map +1 -0
  79. package/out-tsc/test/nodes/wait_for_digits.test.js +150 -0
  80. package/out-tsc/test/nodes/wait_for_digits.test.js.map +1 -0
  81. package/out-tsc/test/nodes/wait_for_response.test.js +171 -0
  82. package/out-tsc/test/nodes/wait_for_response.test.js.map +1 -0
  83. package/out-tsc/test/temba-add-input-labels.test.js +70 -0
  84. package/out-tsc/test/temba-add-input-labels.test.js.map +1 -0
  85. package/out-tsc/test/temba-field-config.test.js +4 -2
  86. package/out-tsc/test/temba-field-config.test.js.map +1 -1
  87. package/out-tsc/test/temba-field-renderer.test.js +296 -0
  88. package/out-tsc/test/temba-field-renderer.test.js.map +1 -0
  89. package/out-tsc/test/temba-markdown.test.js +1 -1
  90. package/out-tsc/test/temba-markdown.test.js.map +1 -1
  91. package/out-tsc/test/temba-message-editor.test.js +194 -0
  92. package/out-tsc/test/temba-message-editor.test.js.map +1 -0
  93. package/out-tsc/test/temba-node-editor.test.js +471 -0
  94. package/out-tsc/test/temba-node-editor.test.js.map +1 -1
  95. package/out-tsc/test/temba-select.test.js +7 -4
  96. package/out-tsc/test/temba-select.test.js.map +1 -1
  97. package/out-tsc/test/temba-textinput.test.js +16 -0
  98. package/out-tsc/test/temba-textinput.test.js.map +1 -1
  99. package/out-tsc/test/temba-webchat.test.js +5 -1
  100. package/out-tsc/test/temba-webchat.test.js.map +1 -1
  101. package/out-tsc/test/utils.test.js +2 -8
  102. package/out-tsc/test/utils.test.js.map +1 -1
  103. package/package.json +7 -4
  104. package/screenshots/truth/actions/add_contact_groups/editor/descriptive-group-names.png +0 -0
  105. package/screenshots/truth/actions/add_contact_groups/editor/long-group-names.png +0 -0
  106. package/screenshots/truth/actions/add_contact_groups/editor/many-groups.png +0 -0
  107. package/screenshots/truth/actions/add_contact_groups/editor/multiple-groups.png +0 -0
  108. package/screenshots/truth/actions/add_contact_groups/editor/single-group.png +0 -0
  109. package/screenshots/truth/actions/call_llm/editor/information-extraction.png +0 -0
  110. package/screenshots/truth/actions/call_llm/editor/sentiment-analysis.png +0 -0
  111. package/screenshots/truth/actions/call_llm/editor/summarization.png +0 -0
  112. package/screenshots/truth/actions/call_llm/editor/translation-task.png +0 -0
  113. package/screenshots/truth/actions/call_llm/render/information-extraction.png +0 -0
  114. package/screenshots/truth/actions/call_llm/render/sentiment-analysis.png +0 -0
  115. package/screenshots/truth/actions/call_llm/render/summarization.png +0 -0
  116. package/screenshots/truth/actions/call_llm/render/translation-task.png +0 -0
  117. package/screenshots/truth/actions/remove_contact_groups/editor/cleanup-groups.png +0 -0
  118. package/screenshots/truth/actions/remove_contact_groups/editor/long-descriptive-group-names.png +0 -0
  119. package/screenshots/truth/actions/remove_contact_groups/editor/many-groups.png +0 -0
  120. package/screenshots/truth/actions/remove_contact_groups/editor/multiple-groups.png +0 -0
  121. package/screenshots/truth/actions/remove_contact_groups/editor/remove-from-all-groups.png +0 -0
  122. package/screenshots/truth/actions/remove_contact_groups/editor/single-group.png +0 -0
  123. package/screenshots/truth/actions/send_email/editor/complex-business-email.png +0 -0
  124. package/screenshots/truth/actions/send_email/editor/empty-body.png +0 -0
  125. package/screenshots/truth/actions/send_email/editor/empty-subject.png +0 -0
  126. package/screenshots/truth/actions/send_email/editor/long-subject.png +0 -0
  127. package/screenshots/truth/actions/send_email/editor/multiline-body.png +0 -0
  128. package/screenshots/truth/actions/send_email/editor/multiple-recipients.png +0 -0
  129. package/screenshots/truth/actions/send_email/editor/simple-email.png +0 -0
  130. package/screenshots/truth/actions/send_email/editor/with-expressions.png +0 -0
  131. package/screenshots/truth/actions/send_msg/editor/long-quick-replies.png +0 -0
  132. package/screenshots/truth/actions/send_msg/editor/multiline-text-with-replies.png +0 -0
  133. package/screenshots/truth/actions/send_msg/editor/simple-text.png +0 -0
  134. package/screenshots/truth/actions/send_msg/editor/text-with-linebreaks.png +0 -0
  135. package/screenshots/truth/actions/send_msg/editor/text-with-many-quick-replies.png +0 -0
  136. package/screenshots/truth/actions/send_msg/editor/text-with-quick-replies.png +0 -0
  137. package/screenshots/truth/actions/send_msg/editor/text-without-quick-replies.png +0 -0
  138. package/screenshots/truth/editor/router.png +0 -0
  139. package/screenshots/truth/editor/send_msg.png +0 -0
  140. package/screenshots/truth/editor/set_contact_language.png +0 -0
  141. package/screenshots/truth/editor/set_contact_name.png +0 -0
  142. package/screenshots/truth/editor/set_run_result.png +0 -0
  143. package/screenshots/truth/editor/wait.png +0 -0
  144. package/screenshots/truth/field-renderer/checkbox-checked.png +0 -0
  145. package/screenshots/truth/field-renderer/checkbox-unchecked.png +0 -0
  146. package/screenshots/truth/field-renderer/checkbox-with-errors.png +0 -0
  147. package/screenshots/truth/field-renderer/context-comparison.png +0 -0
  148. package/screenshots/truth/field-renderer/key-value-with-label.png +0 -0
  149. package/screenshots/truth/field-renderer/message-editor-with-label.png +0 -0
  150. package/screenshots/truth/field-renderer/select-multi.png +0 -0
  151. package/screenshots/truth/field-renderer/select-no-label.png +0 -0
  152. package/screenshots/truth/field-renderer/select-with-label.png +0 -0
  153. package/screenshots/truth/field-renderer/text-evaluated.png +0 -0
  154. package/screenshots/truth/field-renderer/text-no-label.png +0 -0
  155. package/screenshots/truth/field-renderer/text-with-errors.png +0 -0
  156. package/screenshots/truth/field-renderer/text-with-label.png +0 -0
  157. package/screenshots/truth/field-renderer/textarea-evaluated.png +0 -0
  158. package/screenshots/truth/field-renderer/textarea-with-label.png +0 -0
  159. package/screenshots/truth/formfield/markdown-errors.png +0 -0
  160. package/screenshots/truth/formfield/no-errors.png +0 -0
  161. package/screenshots/truth/formfield/plain-text-errors.png +0 -0
  162. package/screenshots/truth/message-editor/autogrow-initial-content.png +0 -0
  163. package/screenshots/truth/message-editor/default.png +0 -0
  164. package/screenshots/truth/message-editor/drag-highlight.png +0 -0
  165. package/screenshots/truth/message-editor/filtered-attachments.png +0 -0
  166. package/screenshots/truth/message-editor/with-completion.png +0 -0
  167. package/screenshots/truth/message-editor/with-properties.png +0 -0
  168. package/screenshots/truth/nodes/split_by_llm_categorize/editor/basic-categorization.png +0 -0
  169. package/screenshots/truth/nodes/split_by_llm_categorize/editor/custom-input-and-result-name.png +0 -0
  170. package/screenshots/truth/nodes/split_by_llm_categorize/editor/feedback-categorization.png +0 -0
  171. package/screenshots/truth/nodes/split_by_llm_categorize/editor/many-categories.png +0 -0
  172. package/screenshots/truth/nodes/split_by_llm_categorize/editor/minimal-categories.png +0 -0
  173. package/screenshots/truth/nodes/split_by_llm_categorize/render/basic-categorization.png +0 -0
  174. package/screenshots/truth/nodes/split_by_llm_categorize/render/custom-input-and-result-name.png +0 -0
  175. package/screenshots/truth/nodes/split_by_llm_categorize/render/feedback-categorization.png +0 -0
  176. package/screenshots/truth/nodes/split_by_llm_categorize/render/many-categories.png +0 -0
  177. package/screenshots/truth/nodes/split_by_llm_categorize/render/minimal-categories.png +0 -0
  178. package/screenshots/truth/nodes/split_by_random/editor/ab-test-multiple-variants.png +0 -0
  179. package/screenshots/truth/nodes/split_by_random/editor/sampling-split.png +0 -0
  180. package/screenshots/truth/nodes/split_by_random/editor/three-way-split.png +0 -0
  181. package/screenshots/truth/nodes/split_by_random/editor/two-bucket-split.png +0 -0
  182. package/screenshots/truth/nodes/split_by_random/render/ab-test-multiple-variants.png +0 -0
  183. package/screenshots/truth/nodes/split_by_random/render/sampling-split.png +0 -0
  184. package/screenshots/truth/nodes/split_by_random/render/three-way-split.png +0 -0
  185. package/screenshots/truth/nodes/split_by_random/render/two-bucket-split.png +0 -0
  186. package/screenshots/truth/nodes/wait_for_digits/editor/basic-digits-wait.png +0 -0
  187. package/screenshots/truth/nodes/wait_for_digits/editor/phone-number-collection.png +0 -0
  188. package/screenshots/truth/nodes/wait_for_digits/editor/single-digit-with-timeout.png +0 -0
  189. package/screenshots/truth/nodes/wait_for_digits/editor/verification-code.png +0 -0
  190. package/screenshots/truth/nodes/wait_for_digits/render/basic-digits-wait.png +0 -0
  191. package/screenshots/truth/nodes/wait_for_digits/render/phone-number-collection.png +0 -0
  192. package/screenshots/truth/nodes/wait_for_digits/render/single-digit-with-timeout.png +0 -0
  193. package/screenshots/truth/nodes/wait_for_digits/render/verification-code.png +0 -0
  194. package/screenshots/truth/nodes/wait_for_response/editor/basic-wait.png +0 -0
  195. package/screenshots/truth/nodes/wait_for_response/editor/custom-result-name.png +0 -0
  196. package/screenshots/truth/nodes/wait_for_response/editor/no-timeout.png +0 -0
  197. package/screenshots/truth/nodes/wait_for_response/editor/short-timeout.png +0 -0
  198. package/screenshots/truth/nodes/wait_for_response/render/basic-wait.png +0 -0
  199. package/screenshots/truth/nodes/wait_for_response/render/custom-result-name.png +0 -0
  200. package/screenshots/truth/nodes/wait_for_response/render/no-timeout.png +0 -0
  201. package/screenshots/truth/nodes/wait_for_response/render/short-timeout.png +0 -0
  202. package/screenshots/truth/omnibox/selected.png +0 -0
  203. package/screenshots/truth/select/functions.png +0 -0
  204. package/screenshots/truth/select/multi-with-endpoint.png +0 -0
  205. package/screenshots/truth/select/search-enabled.png +0 -0
  206. package/screenshots/truth/textinput/autogrow-initial.png +0 -0
  207. package/screenshots/truth/textinput/input-form.png +0 -0
  208. package/src/display/Thumbnail.ts +2 -1
  209. package/src/events.ts +13 -1
  210. package/src/excellent/helpers.ts +2 -2
  211. package/src/flow/CanvasNode.ts +22 -1
  212. package/src/flow/Editor.ts +12 -1
  213. package/src/flow/NodeEditor.ts +412 -354
  214. package/src/flow/actions/add_input_labels.ts +45 -0
  215. package/src/flow/actions/call_llm.ts +57 -3
  216. package/src/flow/actions/call_webhook.ts +28 -18
  217. package/src/flow/actions/open_ticket.ts +74 -3
  218. package/src/flow/actions/send_msg.ts +170 -6
  219. package/src/flow/actions/set_run_result.ts +83 -0
  220. package/src/flow/config.ts +4 -0
  221. package/src/flow/nodes/split_by_llm_categorize.ts +277 -0
  222. package/src/flow/nodes/split_by_ticket.ts +19 -0
  223. package/src/flow/nodes/wait_for_response.ts +28 -1
  224. package/src/flow/types.ts +46 -128
  225. package/src/form/ArrayEditor.ts +96 -66
  226. package/src/form/BaseListEditor.ts +22 -6
  227. package/src/form/FieldRenderer.ts +465 -0
  228. package/src/form/FormField.ts +4 -4
  229. package/src/form/KeyValueEditor.ts +1 -1
  230. package/src/form/MediaPicker.ts +13 -1
  231. package/src/form/MessageEditor.ts +449 -0
  232. package/src/form/TextInput.ts +16 -8
  233. package/src/form/select/Select.ts +55 -24
  234. package/src/live/ContactChat.ts +69 -19
  235. package/src/markdown.ts +19 -11
  236. package/src/store/flow-definition.d.ts +5 -2
  237. package/static/api/labels.json +31 -0
  238. package/static/api/topics.json +24 -9
  239. package/static/api/users.json +35 -16
  240. package/static/css/temba-components.css +5 -3
  241. package/static/mr/docs/en-us/editor.json +2588 -0
  242. package/stress-test.js +143 -0
  243. package/temba-modules.ts +2 -0
  244. package/test/ActionHelper.ts +2 -0
  245. package/test/NodeHelper.ts +184 -0
  246. package/test/actions/call_llm.test.ts +137 -0
  247. package/test/nodes/README.md +78 -0
  248. package/test/nodes/split_by_llm_categorize.test.ts +698 -0
  249. package/test/nodes/split_by_random.test.ts +177 -0
  250. package/test/nodes/wait_for_digits.test.ts +176 -0
  251. package/test/nodes/wait_for_response.test.ts +206 -0
  252. package/test/temba-add-input-labels.test.ts +87 -0
  253. package/test/temba-field-config.test.ts +4 -2
  254. package/test/temba-field-renderer.test.ts +482 -0
  255. package/test/temba-markdown.test.ts +1 -1
  256. package/test/temba-message-editor.test.ts +300 -0
  257. package/test/temba-node-editor.test.ts +590 -0
  258. package/test/temba-select.test.ts +7 -7
  259. package/test/temba-textinput.test.ts +26 -0
  260. package/test/temba-webchat.test.ts +6 -1
  261. package/test/utils.test.ts +2 -13
  262. package/test-assets/contacts/history.json +19 -0
  263. package/test-assets/select/llms.json +18 -0
  264. package/test-assets/style.css +2 -0
  265. package/web-dev-mock.mjs +523 -0
  266. package/web-dev-server.config.mjs +74 -6
  267. package/web-test-runner.config.mjs +9 -4
  268. package/test/temba-flow-editor.test.ts.backup +0 -563
  269. package/test/temba-utils-index.test.ts.backup +0 -1737
@@ -10,17 +10,23 @@
10
10
  "uuid": "a229fa3c-16bb-440b-9ae8-b7ee7a723f44",
11
11
  "actions": [
12
12
  {
13
+ "uuid": "3d56e4cf-1e88-499a-b0b4-ff48385fc9a5",
14
+ "type": "send_msg",
15
+ "text": "What is your favorite color?! @contact.uuid. It works.",
13
16
  "attachments": [
14
- "image:http://google.com/logo.png"
17
+ "image/jpeg:http://localhost:9000/temba-attachments/c4e84ebf-fdd7-439b-a2ca-aeb5e54dfc1d-IMG_3245.jpeg",
18
+ "image/jpeg:http://localhost:9000/temba-attachments/e7d4d3cd-ec89-45c2-bc0b-4f652f1f7fde-IMG_3262.jpeg",
19
+ "image/jpeg:http://localhost:9000/temba-attachments/ae831575-0d23-40b7-ae0c-531b8775a6bc-IMG_3282.jpeg",
20
+ "image/png:http://localhost:9000/temba-attachments/d7b04feb-c74e-43a4-a6de-6a4516a4de59-Screenshot 2025-08-19 at 10.23.24 AM.png",
21
+ "image/jpeg:http://localhost:9000/temba-attachments/d3bdb082-6dab-48ed-9598-f3a7f6b6b06d-IMG_3262.jpeg"
15
22
  ],
16
- "text": "What is your favorite color?",
17
- "type": "send_msg",
18
23
  "quick_replies": [
19
24
  "Red",
20
25
  "Green",
21
- "Blue"
22
- ],
23
- "uuid": "3d56e4cf-1e88-499a-b0b4-ff48385fc9a5"
26
+ "Blue",
27
+ "Yellow",
28
+ "Purple"
29
+ ]
24
30
  }
25
31
  ],
26
32
  "exits": [
@@ -106,11 +112,11 @@
106
112
  },
107
113
  {
108
114
  "uuid": "59a22734-24ab-4ff4-b6a9-ee6e66431d4b",
109
- "destination_uuid": "4efc49e0-ebfe-454d-a1a0-900a911dd5ef"
115
+ "destination_uuid": null
110
116
  },
111
117
  {
112
118
  "uuid": "3dfd68c4-0184-49d8-b2a4-0bbb62425f33",
113
- "destination_uuid": "425c4757-bead-440f-92aa-a1cc3fcd7d35"
119
+ "destination_uuid": null
114
120
  },
115
121
  {
116
122
  "uuid": "ae901cf0-f7a1-491c-a56a-1922e242efa0",
@@ -135,7 +141,7 @@
135
141
  "Content-Type": "application/json",
136
142
  "Authorization": "Bearer token here"
137
143
  },
138
- "body": "@(json(object(\n \"contact\", object(\n \"uuid\", contact.uuid, \n \"name\", contact.name, \n \"urn\", contact.urn\n ),\n \"flow\", object(\n \"uuid\", run.flow.uuid, \n \"name\", run.flow.name\n ),\n \"results\", foreach_value(results, extract_object, \"value\", \"category\")\n)))"
144
+ "body": "@(json(object(\n \"contact\", object(\n \"uuid\", contact.uuid, \n \"name\", contact.name, \n \"urn\", contact.urn\n ),\n \"flow\", object(\n \"uuid\", run.flow.uuid, \n \"name\", run.flow.name\n ),\n \"results\", foreach_value(results, extract_object, \"value\", \"category\")\n)))ast"
139
145
  }
140
146
  ],
141
147
  "router": {
@@ -181,53 +187,17 @@
181
187
  {
182
188
  "uuid": "4efc49e0-ebfe-454d-a1a0-900a911dd5ef",
183
189
  "actions": [
184
- {
185
- "uuid": "ffe1c2d3-4e5f-6a7b-8c9d-e0f1a2b3c4d5",
186
- "type": "remove_contact_groups",
187
- "groups": [
188
- {
189
- "uuid": "f80ed7b6-5e6a-49eb-94b6-4631a9677cd8",
190
- "name": "Reporters",
191
- "query": null,
192
- "status": "ready",
193
- "count": 0
194
- },
195
- {
196
- "uuid": "a3f2990b-4096-452e-a586-dc06a9434dde",
197
- "name": "Empty",
198
- "query": null,
199
- "status": "ready",
200
- "count": 0
201
- },
202
- {
203
- "uuid": "76e7a094-22ea-441d-91c4-283d8168e8e3",
204
- "name": "Some Really Long Group Name",
205
- "count": 2028
206
- },
207
- {
208
- "uuid": "66e7a094-22ea-441d-91c4-283d8168e8e4",
209
- "name": "The Poots",
210
- "query": "name ~ \"poots\" OR name ~ \"dave\"",
211
- "status": "ready",
212
- "count": 1028
213
- },
214
- {
215
- "uuid": "94e3ff12-9206-4ce8-87ab-934a864a1819",
216
- "name": "Youth",
217
- "query": "age <= 18",
218
- "status": "ready",
219
- "count": 174
220
- }
221
- ],
222
- "all_groups": false
223
- },
224
190
  {
225
191
  "uuid": "9963160a-a007-4c7b-8c9e-7325e1b69ed8",
226
192
  "type": "send_msg",
227
193
  "text": "Excellent choices.",
194
+ "attachments": [
195
+ "image:@contact.profile_url"
196
+ ],
228
197
  "quick_replies": [
229
- "blooooop",
230
- "bleep"
198
+ "Red",
199
+ "Green",
200
+ "Blue"
231
201
  ]
232
202
  },
233
203
  {
@@ -242,29 +212,55 @@
242
212
  "count": 0
243
213
  },
244
214
  {
245
- "uuid": "76e7a094-22ea-441d-91c4-283d8168e8e3",
246
- "name": "Some Really Long Group Name",
247
- "count": 2028
215
+ "uuid": "f80ed7b6-5e6a-49eb-94b6-4631a9677cd8",
216
+ "name": "Reporters",
217
+ "query": null,
218
+ "status": "ready",
219
+ "count": 0
248
220
  }
249
221
  ]
250
222
  },
251
223
  {
224
+ "uuid": "b32fe165-e0cc-475c-a7c4-7f484fcce2f4",
252
225
  "type": "set_run_result",
253
- "name": "Color",
254
- "value": "Black",
255
- "category": "",
256
- "uuid": "b32fe165-e0cc-475c-a7c4-7f484fcce2f4"
226
+ "name": "Make",
227
+ "value": "Rivian",
228
+ "category": "Electric"
229
+ },
230
+ {
231
+ "uuid": "ffe1c2d3-4e5f-6a7b-8c9d-e0f1a2b3c4d5",
232
+ "type": "remove_contact_groups",
233
+ "groups": [
234
+ {
235
+ "uuid": "a3f2990b-4096-452e-a586-dc06a9434dde",
236
+ "name": "Empty",
237
+ "query": null,
238
+ "status": "ready",
239
+ "count": 0
240
+ }
241
+ ],
242
+ "all_groups": false
257
243
  },
258
244
  {
245
+ "uuid": "d0d1571c-bf9e-4156-ac7c-984789c71472",
259
246
  "type": "add_input_labels",
260
247
  "labels": [
261
248
  {
262
249
  "uuid": "61cae99b-56e1-4f3e-a2b9-07fb5cf2be9e",
250
+ "name": "Important",
251
+ "count": 234
252
+ },
253
+ {
254
+ "uuid": "76e7a094-22ea-441d-91c4-283d8168e8e3",
255
+ "name": "Follow Up",
256
+ "count": 128
257
+ },
258
+ {
259
+ "uuid": "f80ed7b6-5e6a-49eb-94b6-4631a9677cd8",
263
260
  "name": "Spam",
264
261
  "count": 0
265
262
  }
266
- ],
267
- "uuid": "d0d1571c-bf9e-4156-ac7c-984789c71472"
263
+ ]
268
264
  },
269
265
  {
270
266
  "uuid": "28c288f3-fb46-4c32-8a47-563132a2e8db",
@@ -325,7 +321,7 @@
325
321
  "exits": [
326
322
  {
327
323
  "uuid": "99fbc988-714e-4ea8-bf93-5bdaf397b37c",
328
- "destination_uuid": "2c60c381-487d-42cd-80be-a31f44c36fd9"
324
+ "destination_uuid": null
329
325
  }
330
326
  ]
331
327
  },
@@ -403,11 +399,11 @@
403
399
  "exits": [
404
400
  {
405
401
  "uuid": "7bda8b65-f797-4377-ba93-c92566e87c2e",
406
- "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
402
+ "destination_uuid": null
407
403
  },
408
404
  {
409
405
  "uuid": "2361f0e4-9ad8-4db3-ba37-d7fb02726307",
410
- "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
406
+ "destination_uuid": null
411
407
  }
412
408
  ]
413
409
  },
@@ -432,11 +428,11 @@
432
428
  "exits": [
433
429
  {
434
430
  "uuid": "ec491209-44e9-417c-aea7-ca665e9d8441",
435
- "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
431
+ "destination_uuid": "145eb3d3-b841-4e66-abac-297ae525c7ad"
436
432
  },
437
433
  {
438
434
  "uuid": "bdf64af3-8585-45ce-a3ba-10aab8dcc4fd",
439
- "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
435
+ "destination_uuid": null
440
436
  }
441
437
  ]
442
438
  },
@@ -655,7 +651,7 @@
655
651
  },
656
652
  {
657
653
  "uuid": "e3314f8b-5598-4592-b5f9-2999c4a28a4f",
658
- "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
654
+ "destination_uuid": null
659
655
  }
660
656
  ]
661
657
  },
@@ -665,13 +661,12 @@
665
661
  {
666
662
  "uuid": "bb664e68-91ab-4ee9-ab2b-a68b35adc9f0",
667
663
  "type": "call_llm",
664
+ "input": "@input",
668
665
  "llm": {
669
666
  "uuid": "a5f05e3e-4f9c-4f24-96ff-13676b82ac95",
670
667
  "name": "GPT 4o"
671
668
  },
672
- "input": "@input",
673
- "instructions": "Translate to French",
674
- "output_local": "_llm_output"
669
+ "instructions": "Take this cat fact and expand on it. Embellish it with lies. Feel free to make up words or use phrasing to make it sound more scientific, but make sure not to use playful fake words based on furr, purr, kitten, etc. Your result should read as a statement of fact. Do not lead on that you made anything up. Your \"fact\" should not be able to be easily disproven. Your fact can range from one to three sentences. Try to keep it under 70 words."
675
670
  }
676
671
  ],
677
672
  "router": {
@@ -705,7 +700,7 @@
705
700
  "exits": [
706
701
  {
707
702
  "uuid": "9285a0af-c70e-4945-9829-e620069830d2",
708
- "destination_uuid": "425c4757-bead-440f-92aa-a1cc3fcd7d35"
703
+ "destination_uuid": null
709
704
  },
710
705
  {
711
706
  "uuid": "3c3cccef-9865-4246-802f-90d9e76af9bf",
@@ -746,14 +741,14 @@
746
741
  "uuid": "a7f21fc4-8bf1-47ab-a6c7-3e072f88afe7",
747
742
  "type": "open_ticket",
748
743
  "topic": {
749
- "uuid": "bf4b568d-97b8-4d20-aed5-ad8150270af8",
744
+ "uuid": "1b1cb507-e079-4b30-818c-1898edcbd178",
750
745
  "name": "General"
751
746
  },
752
- "note": "This is a note",
753
747
  "assignee": {
754
- "email": "agent1@textit.com",
755
- "name": "Agnes McAgent"
756
- }
748
+ "uuid": "ae79dd5b-8c34-4602-a2c1-1e4db2419f0f",
749
+ "name": "Eric Newcomer"
750
+ },
751
+ "note": ""
757
752
  }
758
753
  ],
759
754
  "router": {
@@ -792,13 +787,124 @@
792
787
  "destination_uuid": null
793
788
  }
794
789
  ]
790
+ },
791
+ {
792
+ "uuid": "145eb3d3-b841-4e66-abac-297ae525c7ad",
793
+ "actions": [
794
+ {
795
+ "type": "call_llm",
796
+ "uuid": "145eb3d3-b841-4e66-abac-297ae525c7ad",
797
+ "llm": {
798
+ "uuid": "4399e7d6-fcdf-4e47-a835-f3bdb7f80938",
799
+ "name": "GPT 5"
800
+ },
801
+ "instructions": "@(prompt(\"categorize\", slice(node.categories, 0, -2)))",
802
+ "input": "@input",
803
+ "output_local": "_llm_output"
804
+ }
805
+ ],
806
+ "router": {
807
+ "type": "switch",
808
+ "categories": [
809
+ {
810
+ "uuid": "96d0d4c4-5830-4a6d-b20b-6730b1e10679",
811
+ "name": "Cat",
812
+ "exit_uuid": "ea2e15d3-d398-421f-bc51-26e094f97325"
813
+ },
814
+ {
815
+ "uuid": "4632b796-f8ab-4a35-80d1-a1b53a6db803",
816
+ "name": "Dog",
817
+ "exit_uuid": "abbdcff7-4296-4f01-907f-f709fa4a1444"
818
+ },
819
+ {
820
+ "uuid": "7091cae1-2677-494a-967c-d9502476d4e4",
821
+ "name": "Oyster",
822
+ "exit_uuid": "377e720a-4815-4fa5-83cc-b6471765a9b4"
823
+ },
824
+ {
825
+ "uuid": "8e4624ee-57fe-43cd-8fa3-fa630c22cd72",
826
+ "name": "Other",
827
+ "exit_uuid": "c7ecba49-7542-4862-a91a-9f2f8a10e222"
828
+ },
829
+ {
830
+ "uuid": "b3a625e7-97f2-461d-a481-20dec52bd609",
831
+ "name": "Failure",
832
+ "exit_uuid": "3484a407-9e62-4a55-be44-a2290270000f"
833
+ }
834
+ ],
835
+ "default_category_uuid": "8e4624ee-57fe-43cd-8fa3-fa630c22cd72",
836
+ "operand": "@locals._llm_output",
837
+ "cases": [
838
+ {
839
+ "uuid": "055e63a4-5eae-4325-b436-ca013e20ae17",
840
+ "type": "has_only_text",
841
+ "arguments": [
842
+ "Cat"
843
+ ],
844
+ "category_uuid": "96d0d4c4-5830-4a6d-b20b-6730b1e10679"
845
+ },
846
+ {
847
+ "uuid": "f0795c37-977e-4d0f-9136-378626a40173",
848
+ "type": "has_only_text",
849
+ "arguments": [
850
+ "Dog"
851
+ ],
852
+ "category_uuid": "4632b796-f8ab-4a35-80d1-a1b53a6db803"
853
+ },
854
+ {
855
+ "uuid": "87a8ccff-c153-4ff6-8a59-4d164b8bb2a8",
856
+ "type": "has_only_text",
857
+ "arguments": [
858
+ "Oyster"
859
+ ],
860
+ "category_uuid": "7091cae1-2677-494a-967c-d9502476d4e4"
861
+ },
862
+ {
863
+ "uuid": "8fd5f13b-0398-4286-b18a-a92b5a2ea19d",
864
+ "type": "has_only_text",
865
+ "arguments": [
866
+ "<ERROR>"
867
+ ],
868
+ "category_uuid": "b3a625e7-97f2-461d-a481-20dec52bd609"
869
+ }
870
+ ]
871
+ },
872
+ "exits": [
873
+ {
874
+ "uuid": "ea2e15d3-d398-421f-bc51-26e094f97325",
875
+ "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
876
+ },
877
+ {
878
+ "uuid": "abbdcff7-4296-4f01-907f-f709fa4a1444",
879
+ "destination_uuid": null
880
+ },
881
+ {
882
+ "uuid": "377e720a-4815-4fa5-83cc-b6471765a9b4",
883
+ "destination_uuid": null
884
+ },
885
+ {
886
+ "uuid": "c7ecba49-7542-4862-a91a-9f2f8a10e222",
887
+ "destination_uuid": "66171418-2368-44b9-95db-fdf7cd5cf4fe"
888
+ },
889
+ {
890
+ "uuid": "3484a407-9e62-4a55-be44-a2290270000f",
891
+ "destination_uuid": null
892
+ }
893
+ ]
795
894
  }
796
895
  ],
797
896
  "_ui": {
798
897
  "nodes": {
898
+ "145eb3d3-b841-4e66-abac-297ae525c7ad": {
899
+ "position": {
900
+ "left": 720,
901
+ "top": 500
902
+ },
903
+ "type": "split_by_llm_categorize"
904
+ },
799
905
  "a229fa3c-16bb-440b-9ae8-b7ee7a723f44": {
800
906
  "position": {
801
- "left": 260,
907
+ "left": 220,
802
908
  "top": 0
803
909
  },
804
910
  "type": "execute_actions"
@@ -806,8 +912,8 @@
806
912
  "ef1a5b06-1331-4c0d-9f46-58b1e5baf671": {
807
913
  "type": "wait_for_response",
808
914
  "position": {
809
- "left": 260,
810
- "top": 160
915
+ "left": 220,
916
+ "top": 200
811
917
  },
812
918
  "config": {
813
919
  "cases": {}
@@ -816,23 +922,23 @@
816
922
  "e1f22e97-a170-44b4-a79b-98ab916f4c34": {
817
923
  "type": "split_by_webhook",
818
924
  "position": {
819
- "left": 800,
820
- "top": 0
925
+ "left": 840,
926
+ "top": 20
821
927
  },
822
928
  "config": {}
823
929
  },
824
930
  "4efc49e0-ebfe-454d-a1a0-900a911dd5ef": {
825
931
  "position": {
826
- "left": 240,
827
- "top": 340
932
+ "left": 220,
933
+ "top": 380
828
934
  },
829
935
  "type": "execute_actions"
830
936
  },
831
937
  "2c60c381-487d-42cd-80be-a31f44c36fd9": {
832
938
  "type": "split_by_subflow",
833
939
  "position": {
834
- "left": 520,
835
- "top": 680
940
+ "left": 460,
941
+ "top": 740
836
942
  },
837
943
  "config": {}
838
944
  },
@@ -840,7 +946,7 @@
840
946
  "type": "split_by_contact_field",
841
947
  "position": {
842
948
  "left": 1020,
843
- "top": 220
949
+ "top": 140
844
950
  },
845
951
  "config": {
846
952
  "operand": {
@@ -854,8 +960,8 @@
854
960
  "b85000c4-1990-4d86-807a-1318ea512708": {
855
961
  "type": "split_by_expression",
856
962
  "position": {
857
- "left": 720,
858
- "top": 240
963
+ "left": 740,
964
+ "top": 200
859
965
  },
860
966
  "config": {
861
967
  "cases": {}
@@ -864,7 +970,7 @@
864
970
  "8ecec688-f154-4b80-a0b3-3cbff0fac892": {
865
971
  "type": "split_by_random",
866
972
  "position": {
867
- "left": 940,
973
+ "left": 1020,
868
974
  "top": 360
869
975
  },
870
976
  "config": null
@@ -872,8 +978,8 @@
872
978
  "66171418-2368-44b9-95db-fdf7cd5cf4fe": {
873
979
  "type": "split_by_run_result",
874
980
  "position": {
875
- "left": 800,
876
- "top": 600
981
+ "left": 780,
982
+ "top": 660
877
983
  },
878
984
  "config": {
879
985
  "operand": {
@@ -887,8 +993,8 @@
887
993
  "5f1394c1-4b8c-4357-8863-db24817b2aa3": {
888
994
  "type": "split_by_groups",
889
995
  "position": {
890
- "left": 500,
891
- "top": 360
996
+ "left": 480,
997
+ "top": 380
892
998
  },
893
999
  "config": {
894
1000
  "cases": {}
@@ -897,8 +1003,8 @@
897
1003
  "e780a7ef-9dad-45a3-abda-11200a9afbf4": {
898
1004
  "type": "split_by_scheme",
899
1005
  "position": {
900
- "left": 480,
901
- "top": 560
1006
+ "left": 460,
1007
+ "top": 600
902
1008
  },
903
1009
  "config": {
904
1010
  "cases": {}
@@ -907,23 +1013,23 @@
907
1013
  "3dfe9cf2-72d1-496f-8d20-d5743af0f9c8": {
908
1014
  "type": "split_by_llm",
909
1015
  "position": {
910
- "left": 520,
911
- "top": 1020
1016
+ "left": 460,
1017
+ "top": 900
912
1018
  },
913
1019
  "config": {}
914
1020
  },
915
1021
  "425c4757-bead-440f-92aa-a1cc3fcd7d35": {
916
1022
  "position": {
917
- "left": 760,
918
- "top": 840
1023
+ "left": 780,
1024
+ "top": 800
919
1025
  },
920
1026
  "type": "execute_actions"
921
1027
  },
922
1028
  "21ff86c2-5276-4448-afb6-54d1f832ba0c": {
923
1029
  "type": "split_by_ticket",
924
1030
  "position": {
925
- "left": 820,
926
- "top": 980
1031
+ "left": 780,
1032
+ "top": 920
927
1033
  },
928
1034
  "config": {}
929
1035
  }
@@ -941,7 +1047,7 @@
941
1047
  "598a87e4-f20b-48ba-aac5-bb365d8f1509": {
942
1048
  "position": {
943
1049
  "left": 0,
944
- "top": 400
1050
+ "top": 440
945
1051
  },
946
1052
  "title": "Blue Note",
947
1053
  "body": "Did you know stickies can have different colors? I just realized that and I'm pretty happy to report that this expands really nicely. It seems to be working okay I think. This.",
@@ -950,7 +1056,7 @@
950
1056
  "598a87e4-f20b-48ba-aac5-bb365d8f1501": {
951
1057
  "position": {
952
1058
  "left": 0,
953
- "top": 720
1059
+ "top": 780
954
1060
  },
955
1061
  "title": "Green Note",
956
1062
  "body": "They also come in green, do I like them better? Maybe I do. There is a standard height, they will have to get used to it.",
@@ -959,7 +1065,7 @@
959
1065
  "598a87e4-f20b-48ba-aac5-bb365d8f1502": {
960
1066
  "position": {
961
1067
  "left": 0,
962
- "top": 580
1068
+ "top": 640
963
1069
  },
964
1070
  "title": "Pinky Note",
965
1071
  "body": "This is a test. How much do I like writing in pink? Seems pretty nice honestly! I think Imma go with it",
@@ -968,7 +1074,7 @@
968
1074
  "598a87e4-f20b-48ba-aac5-bb365d8f1503": {
969
1075
  "position": {
970
1076
  "left": 0,
971
- "top": 280
1077
+ "top": 320
972
1078
  },
973
1079
  "title": "Gray Note",
974
1080
  "body": "And a nice, little gray message to go with it.",