@webiny/ai-powerups 0.0.0-unstable.7be00a75a9

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 (311) hide show
  1. package/AiPowerups.d.ts +2 -0
  2. package/AiPowerups.js +11 -0
  3. package/AiPowerups.js.map +1 -0
  4. package/LICENSE +36 -0
  5. package/README.md +11 -0
  6. package/admin/Extension.d.ts +2 -0
  7. package/admin/Extension.js +33 -0
  8. package/admin/Extension.js.map +1 -0
  9. package/admin/domain/errors.d.ts +12 -0
  10. package/admin/domain/errors.js +21 -0
  11. package/admin/domain/errors.js.map +1 -0
  12. package/admin/features/feature.d.ts +1 -0
  13. package/admin/features/feature.js +22 -0
  14. package/admin/features/feature.js.map +1 -0
  15. package/admin/features/generatePageContent/GeneratePageContentGateway.d.ts +12 -0
  16. package/admin/features/generatePageContent/GeneratePageContentGateway.js +45 -0
  17. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -0
  18. package/admin/features/generatePageContent/GeneratePageContentUseCase.d.ts +11 -0
  19. package/admin/features/generatePageContent/GeneratePageContentUseCase.js +18 -0
  20. package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -0
  21. package/admin/features/generatePageContent/abstractions.d.ts +24 -0
  22. package/admin/features/generatePageContent/abstractions.js +6 -0
  23. package/admin/features/generatePageContent/abstractions.js.map +1 -0
  24. package/admin/features/generatePageContent/feature.d.ts +1 -0
  25. package/admin/features/generatePageContent/feature.js +13 -0
  26. package/admin/features/generatePageContent/feature.js.map +1 -0
  27. package/admin/features/generatePageContent/index.d.ts +3 -0
  28. package/admin/features/generatePageContent/index.js +2 -0
  29. package/admin/features/listModels/ListModelsGateway.d.ts +12 -0
  30. package/admin/features/listModels/ListModelsGateway.js +34 -0
  31. package/admin/features/listModels/ListModelsGateway.js.map +1 -0
  32. package/admin/features/listModels/ListModelsRepository.d.ts +13 -0
  33. package/admin/features/listModels/ListModelsRepository.js +27 -0
  34. package/admin/features/listModels/ListModelsRepository.js.map +1 -0
  35. package/admin/features/listModels/ListModelsUseCase.d.ts +10 -0
  36. package/admin/features/listModels/ListModelsUseCase.js +18 -0
  37. package/admin/features/listModels/ListModelsUseCase.js.map +1 -0
  38. package/admin/features/listModels/abstractions.d.ts +28 -0
  39. package/admin/features/listModels/abstractions.js +7 -0
  40. package/admin/features/listModels/abstractions.js.map +1 -0
  41. package/admin/features/listModels/feature.d.ts +3 -0
  42. package/admin/features/listModels/feature.js +21 -0
  43. package/admin/features/listModels/feature.js.map +1 -0
  44. package/admin/features/listModels/index.d.ts +2 -0
  45. package/admin/features/listModels/index.js +2 -0
  46. package/admin/features/settings/getSettings/GetSettingsGateway.d.ts +12 -0
  47. package/admin/features/settings/getSettings/GetSettingsGateway.js +29 -0
  48. package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -0
  49. package/admin/features/settings/getSettings/GetSettingsRepository.d.ts +14 -0
  50. package/admin/features/settings/getSettings/GetSettingsRepository.js +31 -0
  51. package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -0
  52. package/admin/features/settings/getSettings/GetSettingsUseCase.d.ts +11 -0
  53. package/admin/features/settings/getSettings/GetSettingsUseCase.js +18 -0
  54. package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -0
  55. package/admin/features/settings/getSettings/abstractions.d.ts +22 -0
  56. package/admin/features/settings/getSettings/abstractions.js +7 -0
  57. package/admin/features/settings/getSettings/abstractions.js.map +1 -0
  58. package/admin/features/settings/getSettings/feature.d.ts +3 -0
  59. package/admin/features/settings/getSettings/feature.js +21 -0
  60. package/admin/features/settings/getSettings/feature.js.map +1 -0
  61. package/admin/features/settings/getSettings/index.d.ts +2 -0
  62. package/admin/features/settings/getSettings/index.js +2 -0
  63. package/admin/features/settings/shared/SettingsCache.d.ts +10 -0
  64. package/admin/features/settings/shared/SettingsCache.js +19 -0
  65. package/admin/features/settings/shared/SettingsCache.js.map +1 -0
  66. package/admin/features/settings/shared/abstractions.d.ts +50 -0
  67. package/admin/features/settings/shared/abstractions.js +5 -0
  68. package/admin/features/settings/shared/abstractions.js.map +1 -0
  69. package/admin/features/settings/shared/feature.d.ts +3 -0
  70. package/admin/features/settings/shared/feature.js +17 -0
  71. package/admin/features/settings/shared/feature.js.map +1 -0
  72. package/admin/features/settings/shared/index.d.ts +2 -0
  73. package/admin/features/settings/shared/index.js +2 -0
  74. package/admin/features/settings/updateSettings/UpdateSettingsGateway.d.ts +12 -0
  75. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +45 -0
  76. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -0
  77. package/admin/features/settings/updateSettings/UpdateSettingsRepository.d.ts +13 -0
  78. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +23 -0
  79. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -0
  80. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.d.ts +11 -0
  81. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +18 -0
  82. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -0
  83. package/admin/features/settings/updateSettings/abstractions.d.ts +22 -0
  84. package/admin/features/settings/updateSettings/abstractions.js +7 -0
  85. package/admin/features/settings/updateSettings/abstractions.js.map +1 -0
  86. package/admin/features/settings/updateSettings/feature.d.ts +3 -0
  87. package/admin/features/settings/updateSettings/feature.js +21 -0
  88. package/admin/features/settings/updateSettings/feature.js.map +1 -0
  89. package/admin/features/settings/updateSettings/index.d.ts +2 -0
  90. package/admin/features/settings/updateSettings/index.js +2 -0
  91. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +4 -0
  92. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +50 -0
  93. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -0
  94. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +26 -0
  95. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +148 -0
  96. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -0
  97. package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +18 -0
  98. package/admin/presentation/AiPowerUpsSettings/abstractions.js +5 -0
  99. package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -0
  100. package/admin/presentation/AiPowerUpsSettings/feature.d.ts +3 -0
  101. package/admin/presentation/AiPowerUpsSettings/feature.js +25 -0
  102. package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -0
  103. package/admin/presentation/AiPowerUpsSettings/index.d.ts +3 -0
  104. package/admin/presentation/AiPowerUpsSettings/index.js +3 -0
  105. package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +17 -0
  106. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +5 -0
  107. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -0
  108. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.d.ts +4 -0
  109. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js +27 -0
  110. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js.map +1 -0
  111. package/admin/presentation/ProjectsSettings.d.ts +11 -0
  112. package/admin/presentation/ProjectsSettings.js +56 -0
  113. package/admin/presentation/ProjectsSettings.js.map +1 -0
  114. package/admin/presentation/ProvidersSettings.d.ts +16 -0
  115. package/admin/presentation/ProvidersSettings.js +46 -0
  116. package/admin/presentation/ProvidersSettings.js.map +1 -0
  117. package/admin/presentation/ReaderPersonasSettings.d.ts +11 -0
  118. package/admin/presentation/ReaderPersonasSettings.js +37 -0
  119. package/admin/presentation/ReaderPersonasSettings.js.map +1 -0
  120. package/admin/presentation/WbContentGeneration/Extension.d.ts +2 -0
  121. package/admin/presentation/WbContentGeneration/Extension.js +22 -0
  122. package/admin/presentation/WbContentGeneration/Extension.js.map +1 -0
  123. package/admin/presentation/WbContentGeneration/GenerateContentButton.d.ts +2 -0
  124. package/admin/presentation/WbContentGeneration/GenerateContentButton.js +19 -0
  125. package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -0
  126. package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +21 -0
  127. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +105 -0
  128. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -0
  129. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +38 -0
  130. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +228 -0
  131. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -0
  132. package/admin/presentation/WbContentGeneration/PROCESS_IDEA.md +190 -0
  133. package/admin/presentation/WbContentGeneration/abstractions.d.ts +30 -0
  134. package/admin/presentation/WbContentGeneration/abstractions.js +5 -0
  135. package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -0
  136. package/admin/presentation/WbContentGeneration/decompressGzipBase64.d.ts +1 -0
  137. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +13 -0
  138. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -0
  139. package/admin/presentation/WbContentGeneration/feature.d.ts +3 -0
  140. package/admin/presentation/WbContentGeneration/feature.js +17 -0
  141. package/admin/presentation/WbContentGeneration/feature.js.map +1 -0
  142. package/admin/presentation/WriterPersonasSettings.d.ts +11 -0
  143. package/admin/presentation/WriterPersonasSettings.js +37 -0
  144. package/admin/presentation/WriterPersonasSettings.js.map +1 -0
  145. package/admin/routes.d.ts +4 -0
  146. package/admin/routes.js +10 -0
  147. package/admin/routes.js.map +1 -0
  148. package/api/Extension.d.ts +4 -0
  149. package/api/Extension.js +37 -0
  150. package/api/Extension.js.map +1 -0
  151. package/api/constants.d.ts +1 -0
  152. package/api/constants.js +4 -0
  153. package/api/constants.js.map +1 -0
  154. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +11 -0
  155. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +27 -0
  156. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -0
  157. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +34 -0
  158. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +140 -0
  159. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
  160. package/api/features/AiImageEnrichment/feature.d.ts +4 -0
  161. package/api/features/AiImageEnrichment/feature.js +13 -0
  162. package/api/features/AiImageEnrichment/feature.js.map +1 -0
  163. package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +12 -0
  164. package/api/features/AiPromptContext/AiPromptContextBuilder.js +103 -0
  165. package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -0
  166. package/api/features/AiPromptContext/ProjectFileAssembler.d.ts +22 -0
  167. package/api/features/AiPromptContext/ProjectFileAssembler.js +76 -0
  168. package/api/features/AiPromptContext/ProjectFileAssembler.js.map +1 -0
  169. package/api/features/AiPromptContext/ProjectFileCache.d.ts +16 -0
  170. package/api/features/AiPromptContext/ProjectFileCache.js +61 -0
  171. package/api/features/AiPromptContext/ProjectFileCache.js.map +1 -0
  172. package/api/features/AiPromptContext/ProjectSection.d.ts +4 -0
  173. package/api/features/AiPromptContext/ProjectSection.js +35 -0
  174. package/api/features/AiPromptContext/ProjectSection.js.map +1 -0
  175. package/api/features/AiPromptContext/ReadProjectFileTool.d.ts +3 -0
  176. package/api/features/AiPromptContext/ReadProjectFileTool.js +36 -0
  177. package/api/features/AiPromptContext/ReadProjectFileTool.js.map +1 -0
  178. package/api/features/AiPromptContext/ReaderPersonaSection.d.ts +4 -0
  179. package/api/features/AiPromptContext/ReaderPersonaSection.js +10 -0
  180. package/api/features/AiPromptContext/ReaderPersonaSection.js.map +1 -0
  181. package/api/features/AiPromptContext/WriterPersonaSection.d.ts +4 -0
  182. package/api/features/AiPromptContext/WriterPersonaSection.js +10 -0
  183. package/api/features/AiPromptContext/WriterPersonaSection.js.map +1 -0
  184. package/api/features/AiPromptContext/abstractions.d.ts +68 -0
  185. package/api/features/AiPromptContext/abstractions.js +7 -0
  186. package/api/features/AiPromptContext/abstractions.js.map +1 -0
  187. package/api/features/AiPromptContext/feature.d.ts +4 -0
  188. package/api/features/AiPromptContext/feature.js +15 -0
  189. package/api/features/AiPromptContext/feature.js.map +1 -0
  190. package/api/features/AiPromptContext/index.d.ts +1 -0
  191. package/api/features/AiPromptContext/index.js +1 -0
  192. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.d.ts +11 -0
  193. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js +34 -0
  194. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js.map +1 -0
  195. package/api/features/ExtractFrontmatter/feature.d.ts +4 -0
  196. package/api/features/ExtractFrontmatter/feature.js +11 -0
  197. package/api/features/ExtractFrontmatter/feature.js.map +1 -0
  198. package/api/features/GetSettings/GetSettingsRepository.d.ts +16 -0
  199. package/api/features/GetSettings/GetSettingsRepository.js +40 -0
  200. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -0
  201. package/api/features/GetSettings/GetSettingsUseCase.d.ts +10 -0
  202. package/api/features/GetSettings/GetSettingsUseCase.js +18 -0
  203. package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -0
  204. package/api/features/GetSettings/abstractions.d.ts +16 -0
  205. package/api/features/GetSettings/abstractions.js +6 -0
  206. package/api/features/GetSettings/abstractions.js.map +1 -0
  207. package/api/features/GetSettings/feature.d.ts +4 -0
  208. package/api/features/GetSettings/feature.js +13 -0
  209. package/api/features/GetSettings/feature.js.map +1 -0
  210. package/api/features/GetSettings/index.d.ts +1 -0
  211. package/api/features/GetSettings/index.js +1 -0
  212. package/api/features/Projects/ProjectsHandler.d.ts +31 -0
  213. package/api/features/Projects/ProjectsHandler.js +103 -0
  214. package/api/features/Projects/ProjectsHandler.js.map +1 -0
  215. package/api/features/Projects/feature.d.ts +4 -0
  216. package/api/features/Projects/feature.js +11 -0
  217. package/api/features/Projects/feature.js.map +1 -0
  218. package/api/features/Projects/types.d.ts +50 -0
  219. package/api/features/Projects/types.js +0 -0
  220. package/api/features/Providers/ProvidersGraphQLMapper.d.ts +21 -0
  221. package/api/features/Providers/ProvidersGraphQLMapper.js +39 -0
  222. package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -0
  223. package/api/features/Providers/ProvidersHandler.d.ts +26 -0
  224. package/api/features/Providers/ProvidersHandler.js +79 -0
  225. package/api/features/Providers/ProvidersHandler.js.map +1 -0
  226. package/api/features/Providers/feature.d.ts +4 -0
  227. package/api/features/Providers/feature.js +13 -0
  228. package/api/features/Providers/feature.js.map +1 -0
  229. package/api/features/Providers/index.d.ts +1 -0
  230. package/api/features/Providers/index.js +0 -0
  231. package/api/features/Providers/types.d.ts +29 -0
  232. package/api/features/Providers/types.js +0 -0
  233. package/api/features/ReaderPersonas/ReaderPersonasHandler.d.ts +20 -0
  234. package/api/features/ReaderPersonas/ReaderPersonasHandler.js +43 -0
  235. package/api/features/ReaderPersonas/ReaderPersonasHandler.js.map +1 -0
  236. package/api/features/ReaderPersonas/feature.d.ts +4 -0
  237. package/api/features/ReaderPersonas/feature.js +11 -0
  238. package/api/features/ReaderPersonas/feature.js.map +1 -0
  239. package/api/features/ReaderPersonas/index.d.ts +2 -0
  240. package/api/features/ReaderPersonas/index.js +1 -0
  241. package/api/features/ReaderPersonas/types.d.ts +24 -0
  242. package/api/features/ReaderPersonas/types.js +0 -0
  243. package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +16 -0
  244. package/api/features/UpdateSettings/UpdateSettingsRepository.js +71 -0
  245. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -0
  246. package/api/features/UpdateSettings/UpdateSettingsUseCase.d.ts +13 -0
  247. package/api/features/UpdateSettings/UpdateSettingsUseCase.js +30 -0
  248. package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -0
  249. package/api/features/UpdateSettings/abstractions.d.ts +36 -0
  250. package/api/features/UpdateSettings/abstractions.js +8 -0
  251. package/api/features/UpdateSettings/abstractions.js.map +1 -0
  252. package/api/features/UpdateSettings/errors.d.ts +10 -0
  253. package/api/features/UpdateSettings/errors.js +14 -0
  254. package/api/features/UpdateSettings/errors.js.map +1 -0
  255. package/api/features/UpdateSettings/events.d.ts +10 -0
  256. package/api/features/UpdateSettings/events.js +21 -0
  257. package/api/features/UpdateSettings/events.js.map +1 -0
  258. package/api/features/UpdateSettings/feature.d.ts +4 -0
  259. package/api/features/UpdateSettings/feature.js +13 -0
  260. package/api/features/UpdateSettings/feature.js.map +1 -0
  261. package/api/features/UpdateSettings/index.d.ts +1 -0
  262. package/api/features/UpdateSettings/index.js +1 -0
  263. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +33 -0
  264. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +75 -0
  265. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -0
  266. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +21 -0
  267. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +106 -0
  268. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -0
  269. package/api/features/WbGeneratePageContent/abstractions.d.ts +28 -0
  270. package/api/features/WbGeneratePageContent/abstractions.js +5 -0
  271. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -0
  272. package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -0
  273. package/api/features/WbGeneratePageContent/buildPrompt.js +143 -0
  274. package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -0
  275. package/api/features/WbGeneratePageContent/feature.d.ts +4 -0
  276. package/api/features/WbGeneratePageContent/feature.js +13 -0
  277. package/api/features/WbGeneratePageContent/feature.js.map +1 -0
  278. package/api/features/WbGeneratePageContent/index.d.ts +1 -0
  279. package/api/features/WbGeneratePageContent/index.js +1 -0
  280. package/api/features/WriterPersonas/WriterPersonasHandler.d.ts +20 -0
  281. package/api/features/WriterPersonas/WriterPersonasHandler.js +43 -0
  282. package/api/features/WriterPersonas/WriterPersonasHandler.js.map +1 -0
  283. package/api/features/WriterPersonas/feature.d.ts +4 -0
  284. package/api/features/WriterPersonas/feature.js +11 -0
  285. package/api/features/WriterPersonas/feature.js.map +1 -0
  286. package/api/features/WriterPersonas/index.d.ts +2 -0
  287. package/api/features/WriterPersonas/index.js +1 -0
  288. package/api/features/WriterPersonas/types.d.ts +24 -0
  289. package/api/features/WriterPersonas/types.js +0 -0
  290. package/api/features/shared/SettingsCache.d.ts +12 -0
  291. package/api/features/shared/SettingsCache.js +22 -0
  292. package/api/features/shared/SettingsCache.js.map +1 -0
  293. package/api/features/shared/abstractions.d.ts +33 -0
  294. package/api/features/shared/abstractions.js +7 -0
  295. package/api/features/shared/abstractions.js.map +1 -0
  296. package/api/features/shared/index.d.ts +3 -0
  297. package/api/features/shared/index.js +1 -0
  298. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.d.ts +13 -0
  299. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js +44 -0
  300. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js.map +1 -0
  301. package/api/graphql/BaseGraphQLSchema.d.ts +8 -0
  302. package/api/graphql/BaseGraphQLSchema.js +133 -0
  303. package/api/graphql/BaseGraphQLSchema.js.map +1 -0
  304. package/api/graphql/abstractions.d.ts +9 -0
  305. package/api/graphql/abstractions.js +5 -0
  306. package/api/graphql/abstractions.js.map +1 -0
  307. package/api/types.d.ts +5 -0
  308. package/api/types.js +3 -0
  309. package/index.d.ts +1 -0
  310. package/index.js +1 -0
  311. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/ReaderPersonasSettings.js","sources":["../../../src/admin/presentation/ReaderPersonasSettings.ts"],"sourcesContent":["import { generateAlphaNumericId } from \"@webiny/utils\";\nimport { AiPowerUpsSettingsGroup } from \"./AiPowerUpsSettings/settingsGroup.js\";\n\nclass ReaderPersonasSettingsImpl implements AiPowerUpsSettingsGroup.Interface {\n name = \"readerPersonas\";\n label = \"Reader Personas\";\n description = \"Define who the content is written for.\";\n\n buildForm(form: AiPowerUpsSettingsGroup.FormBuilder): void {\n form.fields(fields => ({\n presets: fields\n .object()\n .label(\"Presets\")\n .renderer(\"objectAccordionMultiple\", {\n container: false,\n addItemLabel: \"Add reader persona\",\n itemTitle: (data, index) => String(data.name || `Reader Persona #${index + 1}`)\n })\n .fields(f => ({\n id: f\n .text()\n .hidden()\n .defaultValue(() => generateAlphaNumericId(10)),\n name: f\n .text()\n .label(\"Name\")\n .required(\"Name is required\")\n .description(\n \"This name will be used to identify the reader persona in the UI.\"\n ),\n description: f\n .text()\n .label(\"Description\")\n .required(\"Description is required\")\n .description(\n \"Describe who this reader is and what they care about. This will be used when prompting AI.\"\n )\n .renderer(\"textarea\", { rows: 8 }),\n style: f\n .text()\n .label(\"Style\")\n .description(\n \"Optional hints about the expected tone or style when writing for this reader.\"\n )\n .renderer(\"textarea\", { rows: 3 })\n }))\n .list()\n }));\n\n form.layout(layout => [layout.row(\"presets\")]);\n }\n}\n\nexport const ReaderPersonasSettings = AiPowerUpsSettingsGroup.createImplementation({\n implementation: ReaderPersonasSettingsImpl,\n dependencies: []\n});\n"],"names":["ReaderPersonasSettingsImpl","form","fields","data","index","String","f","generateAlphaNumericId","layout","ReaderPersonasSettings","AiPowerUpsSettingsGroup"],"mappings":";;AAGA,MAAMA;IAKF,UAAUC,IAAyC,EAAQ;QACvDA,KAAK,MAAM,CAACC,CAAAA,SAAW;gBACnB,SAASA,OACJ,MAAM,GACN,KAAK,CAAC,WACN,QAAQ,CAAC,2BAA2B;oBACjC,WAAW;oBACX,cAAc;oBACd,WAAW,CAACC,MAAMC,QAAUC,OAAOF,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAEC,QAAQ,GAAG;gBAClF,GACC,MAAM,CAACE,CAAAA,IAAM;wBACV,IAAIA,EACC,IAAI,GACJ,MAAM,GACN,YAAY,CAAC,IAAMC,uBAAuB;wBAC/C,MAAMD,EACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC,oBACT,WAAW,CACR;wBAER,aAAaA,EACR,IAAI,GACJ,KAAK,CAAC,eACN,QAAQ,CAAC,2BACT,WAAW,CACR,8FAEH,QAAQ,CAAC,YAAY;4BAAE,MAAM;wBAAE;wBACpC,OAAOA,EACF,IAAI,GACJ,KAAK,CAAC,SACN,WAAW,CACR,iFAEH,QAAQ,CAAC,YAAY;4BAAE,MAAM;wBAAE;oBACxC,IACC,IAAI;YACb;QAEAL,KAAK,MAAM,CAACO,CAAAA,SAAU;gBAACA,OAAO,GAAG,CAAC;aAAW;IACjD;;aA9CA,IAAI,GAAG;aACP,KAAK,GAAG;aACR,WAAW,GAAG;;AA6ClB;AAEO,MAAMC,yBAAyBC,wBAAwB,oBAAoB,CAAC;IAC/E,gBAAgBV;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const WbContentGeneration: () => React.JSX.Element;
@@ -0,0 +1,22 @@
1
+ import react from "react";
2
+ import { AdminConfig, RegisterFeature } from "@webiny/app-admin";
3
+ import { PageEditorConfig } from "@webiny/app-website-builder";
4
+ import { GenerateContentButton } from "./GenerateContentButton.js";
5
+ import { GENERATE_CONTENT_DIALOG, GenerateContentDialog } from "./GenerateContentDialog.js";
6
+ import { GenerateContentFeature } from "./feature.js";
7
+ const WbContentGeneration = ()=>{
8
+ const { Ui } = PageEditorConfig;
9
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
10
+ feature: GenerateContentFeature
11
+ }), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(AdminConfig.Dialog, {
12
+ name: GENERATE_CONTENT_DIALOG,
13
+ element: /*#__PURE__*/ react.createElement(GenerateContentDialog, null)
14
+ })), /*#__PURE__*/ react.createElement(PageEditorConfig, null, /*#__PURE__*/ react.createElement(Ui.TopBar.Action, {
15
+ name: "generateContent",
16
+ before: "revisionsMenu",
17
+ element: /*#__PURE__*/ react.createElement(Ui.IsNotReadOnly, null, /*#__PURE__*/ react.createElement(GenerateContentButton, null))
18
+ })));
19
+ };
20
+ export { WbContentGeneration };
21
+
22
+ //# sourceMappingURL=Extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WbContentGeneration/Extension.js","sources":["../../../../src/admin/presentation/WbContentGeneration/Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, RegisterFeature } from \"@webiny/app-admin\";\nimport { PageEditorConfig } from \"@webiny/app-website-builder\";\nimport { GenerateContentButton } from \"~/admin/presentation/WbContentGeneration/GenerateContentButton.js\";\nimport {\n GenerateContentDialog,\n GENERATE_CONTENT_DIALOG\n} from \"~/admin/presentation/WbContentGeneration/GenerateContentDialog.js\";\nimport { GenerateContentFeature } from \"~/admin/presentation/WbContentGeneration/feature.js\";\n\nexport const WbContentGeneration = () => {\n const { Ui } = PageEditorConfig;\n\n return (\n <>\n <RegisterFeature feature={GenerateContentFeature} />\n <AdminConfig>\n <AdminConfig.Dialog\n name={GENERATE_CONTENT_DIALOG}\n element={<GenerateContentDialog />}\n />\n </AdminConfig>\n <PageEditorConfig>\n <Ui.TopBar.Action\n name={\"generateContent\"}\n before={\"revisionsMenu\"}\n element={\n <Ui.IsNotReadOnly>\n <GenerateContentButton />\n </Ui.IsNotReadOnly>\n }\n />\n </PageEditorConfig>\n </>\n );\n};\n"],"names":["WbContentGeneration","Ui","PageEditorConfig","RegisterFeature","GenerateContentFeature","AdminConfig","GENERATE_CONTENT_DIALOG","GenerateContentDialog","GenerateContentButton"],"mappings":";;;;;;AAUO,MAAMA,sBAAsB;IAC/B,MAAM,EAAEC,EAAE,EAAE,GAAGC;IAEf,OAAO,WAAP,GACI,wDACI,oBAACC,iBAAeA;QAAC,SAASC;sBAC1B,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACA,YAAY,MAAM;QACf,MAAMC;QACN,uBAAS,oBAACC,uBAAqBA;uBAGvC,oBAACL,kBAAgBA,MAAAA,WAAAA,GACb,oBAACD,GAAG,MAAM,CAAC,MAAM;QACb,MAAM;QACN,QAAQ;QACR,uBACI,oBAACA,GAAG,aAAa,sBACb,oBAACO,uBAAqBA;;AAOlD"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const GenerateContentButton: () => React.JSX.Element | null;
@@ -0,0 +1,19 @@
1
+ import react from "react";
2
+ import { IconButton } from "@webiny/admin-ui";
3
+ import { ReactComponent } from "@webiny/icons/auto_fix_high.svg";
4
+ import { useOpenDialog } from "@webiny/app-admin";
5
+ import { GENERATE_CONTENT_DIALOG } from "./GenerateContentDialog.js";
6
+ import { useAiPowerUpsSettings } from "../AiPowerUpsSettings/index.js";
7
+ const GenerateContentButton = ()=>{
8
+ const { openDialog } = useOpenDialog();
9
+ const { settings } = useAiPowerUpsSettings();
10
+ if (!settings || 0 === settings.providers.presets.length) return null;
11
+ return /*#__PURE__*/ react.createElement(IconButton, {
12
+ variant: "ghost",
13
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
14
+ onClick: ()=>openDialog(GENERATE_CONTENT_DIALOG, {})
15
+ });
16
+ };
17
+ export { GenerateContentButton };
18
+
19
+ //# sourceMappingURL=GenerateContentButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WbContentGeneration/GenerateContentButton.js","sources":["../../../../src/admin/presentation/WbContentGeneration/GenerateContentButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconButton } from \"@webiny/admin-ui\";\nimport { ReactComponent as ChatIcon } from \"@webiny/icons/auto_fix_high.svg\";\nimport { useOpenDialog } from \"@webiny/app-admin\";\nimport { GENERATE_CONTENT_DIALOG } from \"./GenerateContentDialog.js\";\nimport { useAiPowerUpsSettings } from \"~/admin/presentation/AiPowerUpsSettings/index.js\";\n\nexport const GenerateContentButton = () => {\n const { openDialog } = useOpenDialog();\n const { settings } = useAiPowerUpsSettings();\n\n if (!settings || settings.providers.presets.length === 0) {\n return null;\n }\n\n return (\n <IconButton\n variant=\"ghost\"\n icon={<ChatIcon />}\n onClick={() => openDialog(GENERATE_CONTENT_DIALOG, {})}\n />\n );\n};\n"],"names":["GenerateContentButton","openDialog","useOpenDialog","settings","useAiPowerUpsSettings","IconButton","ChatIcon","GENERATE_CONTENT_DIALOG"],"mappings":";;;;;;AAOO,MAAMA,wBAAwB;IACjC,MAAM,EAAEC,UAAU,EAAE,GAAGC;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IAErB,IAAI,CAACD,YAAYA,AAAsC,MAAtCA,SAAS,SAAS,CAAC,OAAO,CAAC,MAAM,EAC9C,OAAO;IAGX,OAAO,WAAP,GACI,oBAACE,YAAUA;QACP,SAAQ;QACR,oBAAM,oBAACC,gBAAQA;QACf,SAAS,IAAML,WAAWM,yBAAyB,CAAC;;AAGhE"}
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import type { IncomingGenericData } from "@webiny/app-websockets";
3
+ export declare const GENERATE_CONTENT_DIALOG = "generate-content";
4
+ export declare const WS_ACTION_CONTENT = "aiPowerUps.generatePageContent.content";
5
+ export declare const WS_ACTION_ERROR = "aiPowerUps.generatePageContent.error";
6
+ export interface GeneratePageContentMessage extends IncomingGenericData {
7
+ action: typeof WS_ACTION_CONTENT;
8
+ data: {
9
+ compression: "gzip";
10
+ value: string;
11
+ };
12
+ }
13
+ export interface GeneratePageContentErrorMessage extends IncomingGenericData {
14
+ action: typeof WS_ACTION_ERROR;
15
+ data: {
16
+ message: string;
17
+ };
18
+ }
19
+ export declare const GenerateContentDialog: (() => React.JSX.Element) & {
20
+ displayName: string;
21
+ };
@@ -0,0 +1,105 @@
1
+ import react, { useCallback, useEffect, useRef } from "react";
2
+ import { observer } from "mobx-react-lite";
3
+ import { FormView, useDialog } from "@webiny/app-admin";
4
+ import { Dialog, OverlayLoader, useToast } from "@webiny/admin-ui";
5
+ import { useFeature } from "@webiny/app";
6
+ import { useWebsockets } from "@webiny/app-websockets";
7
+ import { useSelectFromEditor } from "@webiny/app-website-builder/BaseEditor/hooks/useSelectFromEditor.js";
8
+ import { useCreateElement } from "@webiny/app-website-builder/BaseEditor/hooks/useCreateElement.js";
9
+ import { GenerateContentFeature } from "./feature.js";
10
+ import { decompressGzipBase64 } from "./decompressGzipBase64.js";
11
+ const GENERATE_CONTENT_DIALOG = "generate-content";
12
+ const WS_ACTION_CONTENT = "aiPowerUps.generatePageContent.content";
13
+ const WS_ACTION_ERROR = "aiPowerUps.generatePageContent.error";
14
+ const GenerateContentDialog = observer(()=>{
15
+ const { closeDialog } = useDialog();
16
+ const { presenter } = useFeature(GenerateContentFeature);
17
+ const vm = presenter.vm;
18
+ const wasSubmitting = useRef(false);
19
+ const websockets = useWebsockets();
20
+ const toast = useToast();
21
+ const components = useSelectFromEditor((state)=>state.components);
22
+ const { createElement } = useCreateElement();
23
+ const createElements = useCallback((elements)=>{
24
+ elements.forEach((el)=>createElement(el));
25
+ }, [
26
+ createElement
27
+ ]);
28
+ useEffect(()=>{
29
+ const aiComponents = Object.values(components).filter((c)=>false !== c.useInAiContentGeneration).map((c)=>({
30
+ name: c.name,
31
+ label: c.label,
32
+ aiContext: c.aiContext,
33
+ inputs: c.inputs.map((input)=>({
34
+ type: input.type,
35
+ name: input.name,
36
+ label: input.label,
37
+ description: input.description
38
+ }))
39
+ }));
40
+ presenter.init(aiComponents, createElements);
41
+ }, [
42
+ components,
43
+ createElements
44
+ ]);
45
+ useEffect(()=>{
46
+ const contentSubscription = websockets.onMessage(WS_ACTION_CONTENT, async (message)=>{
47
+ const responseText = await decompressGzipBase64(message.data.value);
48
+ await presenter.processAiResponse(responseText);
49
+ });
50
+ const errorSubscription = websockets.onMessage(WS_ACTION_ERROR, async (message)=>{
51
+ toast.showWarningToast({
52
+ title: "Failed to generate content",
53
+ description: message.data.message
54
+ });
55
+ presenter.cancelPrompt();
56
+ });
57
+ return ()=>{
58
+ contentSubscription.off();
59
+ errorSubscription.off();
60
+ };
61
+ }, []);
62
+ useEffect(()=>{
63
+ if (wasSubmitting.current && !vm.submitting && !vm.timedOut) closeDialog();
64
+ wasSubmitting.current = vm.submitting;
65
+ }, [
66
+ vm.submitting
67
+ ]);
68
+ useEffect(()=>{
69
+ if (vm.timedOut) toast.showWarningToast({
70
+ title: "Request timed out",
71
+ description: "The AI generation took too long. Please try again."
72
+ });
73
+ }, [
74
+ vm.timedOut
75
+ ]);
76
+ const handleSubmit = async ()=>{
77
+ await presenter.submit();
78
+ };
79
+ return /*#__PURE__*/ react.createElement(Dialog, {
80
+ open: true,
81
+ onClose: closeDialog,
82
+ title: "Generate Content",
83
+ size: "lg",
84
+ actions: /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Dialog.CancelAction, {
85
+ onClick: closeDialog,
86
+ text: "Cancel"
87
+ }), /*#__PURE__*/ react.createElement(Dialog.ConfirmAction, {
88
+ onClick: handleSubmit,
89
+ text: "Generate",
90
+ disabled: vm.loading || vm.submitting
91
+ }))
92
+ }, vm.loading ? /*#__PURE__*/ react.createElement(OverlayLoader, {
93
+ text: "Loading..."
94
+ }) : null, vm.submitting ? /*#__PURE__*/ react.createElement(OverlayLoader, {
95
+ text: "Generating content..."
96
+ }) : null, vm.processing ? /*#__PURE__*/ react.createElement(OverlayLoader, {
97
+ text: "Processing content..."
98
+ }) : null, vm.form ? /*#__PURE__*/ react.createElement(FormView, {
99
+ name: "GenerateContent",
100
+ form: vm.form
101
+ }) : null);
102
+ });
103
+ export { GENERATE_CONTENT_DIALOG, GenerateContentDialog, WS_ACTION_CONTENT, WS_ACTION_ERROR };
104
+
105
+ //# sourceMappingURL=GenerateContentDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WbContentGeneration/GenerateContentDialog.js","sources":["../../../../src/admin/presentation/WbContentGeneration/GenerateContentDialog.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { useDialog, FormView } from \"@webiny/app-admin\";\nimport { Dialog, OverlayLoader, useToast } from \"@webiny/admin-ui\";\nimport { useFeature } from \"@webiny/app\";\nimport type { IncomingGenericData } from \"@webiny/app-websockets\";\nimport { useWebsockets } from \"@webiny/app-websockets\";\nimport { useSelectFromEditor } from \"@webiny/app-website-builder/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { useCreateElement } from \"@webiny/app-website-builder/BaseEditor/hooks/useCreateElement.js\";\nimport { GenerateContentFeature } from \"./feature.js\";\nimport { decompressGzipBase64 } from \"./decompressGzipBase64.js\";\nimport type { CreateElementParams } from \"./abstractions.js\";\n\nexport const GENERATE_CONTENT_DIALOG = \"generate-content\";\n\nexport const WS_ACTION_CONTENT = \"aiPowerUps.generatePageContent.content\";\nexport const WS_ACTION_ERROR = \"aiPowerUps.generatePageContent.error\";\n\nexport interface GeneratePageContentMessage extends IncomingGenericData {\n action: typeof WS_ACTION_CONTENT;\n data: {\n compression: \"gzip\";\n value: string;\n };\n}\n\nexport interface GeneratePageContentErrorMessage extends IncomingGenericData {\n action: typeof WS_ACTION_ERROR;\n data: {\n message: string;\n };\n}\n\nexport const GenerateContentDialog = observer(() => {\n const { closeDialog } = useDialog();\n const { presenter } = useFeature(GenerateContentFeature);\n const vm = presenter.vm;\n const wasSubmitting = useRef(false);\n const websockets = useWebsockets();\n const toast = useToast();\n\n const components = useSelectFromEditor(state => state.components);\n const { createElement } = useCreateElement();\n\n const createElements = useCallback(\n (elements: CreateElementParams[]) => {\n elements.forEach(el => createElement(el));\n },\n [createElement]\n );\n\n useEffect(() => {\n const aiComponents = Object.values(components)\n .filter(c => c.useInAiContentGeneration !== false)\n .map(c => {\n return {\n name: c.name,\n label: c.label,\n aiContext: c.aiContext,\n inputs: c.inputs.map(input => ({\n type: input.type,\n name: input.name,\n label: input.label,\n description: input.description\n }))\n };\n });\n presenter.init(aiComponents, createElements);\n }, [components, createElements]);\n\n useEffect(() => {\n const contentSubscription = websockets.onMessage<GeneratePageContentMessage>(\n WS_ACTION_CONTENT,\n async message => {\n const responseText = await decompressGzipBase64(message.data.value);\n await presenter.processAiResponse(responseText);\n }\n );\n\n const errorSubscription = websockets.onMessage<GeneratePageContentErrorMessage>(\n WS_ACTION_ERROR,\n async message => {\n toast.showWarningToast({\n title: \"Failed to generate content\",\n description: message.data.message\n });\n presenter.cancelPrompt();\n }\n );\n\n return () => {\n contentSubscription.off();\n errorSubscription.off();\n };\n }, []);\n\n useEffect(() => {\n if (wasSubmitting.current && !vm.submitting && !vm.timedOut) {\n closeDialog();\n }\n wasSubmitting.current = vm.submitting;\n }, [vm.submitting]);\n\n useEffect(() => {\n if (vm.timedOut) {\n toast.showWarningToast({\n title: \"Request timed out\",\n description: \"The AI generation took too long. Please try again.\"\n });\n }\n }, [vm.timedOut]);\n\n const handleSubmit = async () => {\n await presenter.submit();\n };\n\n return (\n <Dialog\n open={true}\n onClose={closeDialog}\n title=\"Generate Content\"\n size={\"lg\"}\n actions={\n <>\n <Dialog.CancelAction onClick={closeDialog} text=\"Cancel\" />\n <Dialog.ConfirmAction\n onClick={handleSubmit}\n text=\"Generate\"\n disabled={vm.loading || vm.submitting}\n />\n </>\n }\n >\n {vm.loading ? <OverlayLoader text={\"Loading...\"} /> : null}\n {vm.submitting ? <OverlayLoader text={\"Generating content...\"} /> : null}\n {vm.processing ? <OverlayLoader text={\"Processing content...\"} /> : null}\n {vm.form ? <FormView name=\"GenerateContent\" form={vm.form} /> : null}\n </Dialog>\n );\n});\n"],"names":["GENERATE_CONTENT_DIALOG","WS_ACTION_CONTENT","WS_ACTION_ERROR","GenerateContentDialog","observer","closeDialog","useDialog","presenter","useFeature","GenerateContentFeature","vm","wasSubmitting","useRef","websockets","useWebsockets","toast","useToast","components","useSelectFromEditor","state","createElement","useCreateElement","createElements","useCallback","elements","el","useEffect","aiComponents","Object","c","input","contentSubscription","message","responseText","decompressGzipBase64","errorSubscription","handleSubmit","Dialog","OverlayLoader","FormView"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { FormModelFactory, ToolRegistry, ToolPipelineRunner } from "@webiny/app-admin";
2
+ import { GenerateContentPresenter, type CreateElementsFn } from "./abstractions.js";
3
+ import { GeneratePageContentUseCase } from "../../../admin/features/generatePageContent/index.js";
4
+ import { GetSettingsUseCase } from "../../../admin/features/settings/getSettings/abstractions.js";
5
+ declare class GenerateContentPresenterImpl implements GenerateContentPresenter.Interface {
6
+ private toolRegistry;
7
+ private pipelineRunner;
8
+ private generatePageContent;
9
+ private formModelFactory;
10
+ private getSettings;
11
+ private _loading;
12
+ private _submitting;
13
+ private _processing;
14
+ private _timedOut;
15
+ private _components;
16
+ private _createElements;
17
+ private _form;
18
+ private _settings;
19
+ private _timeoutId;
20
+ constructor(toolRegistry: ToolRegistry.Interface, pipelineRunner: ToolPipelineRunner.Interface, generatePageContent: GeneratePageContentUseCase.Interface, formModelFactory: FormModelFactory.Interface, getSettings: GetSettingsUseCase.Interface);
21
+ get vm(): GenerateContentPresenter.ViewModel;
22
+ init(components: Record<string, any>[], createElements: CreateElementsFn): Promise<void>;
23
+ submit(): Promise<void>;
24
+ processAiResponse(responseText: string): Promise<void>;
25
+ cancelPrompt(): void;
26
+ private startTimeout;
27
+ private clearTimeout;
28
+ private buildForm;
29
+ private getSelectedProject;
30
+ private getProjectFileOptions;
31
+ private computeExcludedFileIds;
32
+ private getProjectOptions;
33
+ private getPersonaOptions;
34
+ }
35
+ export declare const GenerateContentPresenterRegistration: typeof GenerateContentPresenterImpl & {
36
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGenerateContentPresenter>;
37
+ };
38
+ export {};
@@ -0,0 +1,228 @@
1
+ import { computed, makeAutoObservable, runInAction, toJS } from "mobx";
2
+ import { z } from "zod";
3
+ import pick from "lodash/pick.js";
4
+ import { FormModelFactory, ToolPipelineRunner, ToolRegistry } from "@webiny/app-admin";
5
+ import { GenerateContentPresenter } from "./abstractions.js";
6
+ import { GeneratePageContentUseCase } from "../../features/generatePageContent/index.js";
7
+ import { GetSettingsUseCase } from "../../features/settings/getSettings/abstractions.js";
8
+ const SUBMIT_TIMEOUT_MS = 300000;
9
+ class GenerateContentPresenterImpl {
10
+ constructor(toolRegistry, pipelineRunner, generatePageContent, formModelFactory, getSettings){
11
+ this.toolRegistry = toolRegistry;
12
+ this.pipelineRunner = pipelineRunner;
13
+ this.generatePageContent = generatePageContent;
14
+ this.formModelFactory = formModelFactory;
15
+ this.getSettings = getSettings;
16
+ this._loading = false;
17
+ this._submitting = false;
18
+ this._processing = false;
19
+ this._timedOut = false;
20
+ this._components = [];
21
+ this._createElements = ()=>{};
22
+ this._form = null;
23
+ this._settings = null;
24
+ this._timeoutId = null;
25
+ makeAutoObservable(this, {
26
+ vm: computed
27
+ }, {
28
+ autoBind: true
29
+ });
30
+ }
31
+ get vm() {
32
+ return {
33
+ form: this._form ? this._form.vm : null,
34
+ loading: this._loading,
35
+ submitting: this._submitting,
36
+ processing: this._processing,
37
+ timedOut: this._timedOut
38
+ };
39
+ }
40
+ async init(components, createElements) {
41
+ this._components = components;
42
+ this._createElements = createElements;
43
+ this._loading = true;
44
+ try {
45
+ const settings = await this.getSettings.execute();
46
+ runInAction(()=>{
47
+ this._settings = settings;
48
+ this._form = this.buildForm();
49
+ });
50
+ } finally{
51
+ runInAction(()=>{
52
+ this._loading = false;
53
+ });
54
+ }
55
+ }
56
+ async submit() {
57
+ if (!this._form) return;
58
+ const data = await this._form.submit();
59
+ if (!data) return;
60
+ runInAction(()=>{
61
+ this._submitting = true;
62
+ this._timedOut = false;
63
+ });
64
+ this.startTimeout();
65
+ try {
66
+ const tools = this.toolRegistry.getTools().map((tool)=>({
67
+ name: tool.name,
68
+ description: tool.description,
69
+ inputSchema: pick(z.toJSONSchema(tool.inputSchema), [
70
+ "properties",
71
+ "type"
72
+ ]),
73
+ outputSchema: pick(z.toJSONSchema(tool.outputSchema), [
74
+ "properties",
75
+ "type"
76
+ ])
77
+ }));
78
+ const excludedFileIds = this.computeExcludedFileIds(data.project, data.includedFiles);
79
+ await this.generatePageContent.execute({
80
+ prompt: data.prompt,
81
+ components: toJS(this._components),
82
+ tools,
83
+ projectId: data.project || null,
84
+ excludedFileIds,
85
+ readerPersonaId: data.readerPersona || null,
86
+ writerPersonaId: data.writerPersona || null
87
+ });
88
+ } catch {
89
+ this.clearTimeout();
90
+ runInAction(()=>{
91
+ this._submitting = false;
92
+ });
93
+ }
94
+ }
95
+ async processAiResponse(responseText) {
96
+ this.clearTimeout();
97
+ runInAction(()=>{
98
+ this._processing = true;
99
+ this._submitting = false;
100
+ });
101
+ try {
102
+ const aiResponseJson = JSON.parse(responseText);
103
+ const resolved = await this.pipelineRunner.resolve(aiResponseJson);
104
+ const items = Array.isArray(resolved) ? resolved : [
105
+ resolved
106
+ ];
107
+ this._createElements(items.map((element)=>({
108
+ componentName: element.component,
109
+ parentId: "root",
110
+ slot: "children",
111
+ bindings: {
112
+ inputs: element.inputs
113
+ }
114
+ })));
115
+ } catch (e) {
116
+ console.error(e);
117
+ } finally{
118
+ runInAction(()=>{
119
+ this._processing = false;
120
+ });
121
+ }
122
+ }
123
+ cancelPrompt() {
124
+ this.clearTimeout();
125
+ this._processing = false;
126
+ this._submitting = false;
127
+ }
128
+ startTimeout() {
129
+ this.clearTimeout();
130
+ this._timeoutId = setTimeout(()=>{
131
+ runInAction(()=>{
132
+ this._submitting = false;
133
+ this._timedOut = true;
134
+ });
135
+ }, SUBMIT_TIMEOUT_MS);
136
+ }
137
+ clearTimeout() {
138
+ if (null !== this._timeoutId) {
139
+ clearTimeout(this._timeoutId);
140
+ this._timeoutId = null;
141
+ }
142
+ }
143
+ buildForm() {
144
+ return this.formModelFactory.create({
145
+ fields: (fields)=>({
146
+ project: fields.text().label("Project").description("Select a predefined context to attach.").options(()=>this.getProjectOptions()).afterChange((value, form)=>{
147
+ const projectId = value;
148
+ const project = projectId ? this._settings?.projects?.presets?.find((p)=>p.id === projectId) : void 0;
149
+ if (project?.defaultReaderPersonaId) form.field("readerPersona").setValue(project.defaultReaderPersonaId);
150
+ if (project?.defaultWriterPersonaId) form.field("writerPersona").setValue(project.defaultWriterPersonaId);
151
+ const fileIds = (project?.files ?? []).map((f)=>f.id);
152
+ form.field("includedFiles").setValue(fileIds);
153
+ }),
154
+ includedFiles: fields.text().label("Files included").description("Uncheck files to exclude them from this generation only.").options(()=>this.getProjectFileOptions()).renderer("checkboxes").list().hiddenWhen((form)=>{
155
+ const projectId = form.field("project").as("text").getValue();
156
+ if (!projectId) return true;
157
+ const project = this._settings?.projects?.presets?.find((p)=>p.id === projectId);
158
+ return !project?.files || 0 === project.files.length;
159
+ }),
160
+ readerPersona: fields.text().label("Reader Persona").description("Select the target audience for the generated content.").options(()=>this.getPersonaOptions("reader")),
161
+ writerPersona: fields.text().label("Writer Persona").description("Select the writing style for the generated content.").options(()=>this.getPersonaOptions("writer")),
162
+ prompt: fields.text().label("Prompt").description("Describe the page content you want to generate.").required("Prompt is required").renderer("textarea", {
163
+ rows: 6
164
+ })
165
+ }),
166
+ layout: (layout)=>[
167
+ layout.row("project"),
168
+ layout.row("includedFiles"),
169
+ layout.row("readerPersona"),
170
+ layout.row("writerPersona"),
171
+ layout.row("prompt")
172
+ ]
173
+ });
174
+ }
175
+ getSelectedProject() {
176
+ if (!this._form || !this._settings) return;
177
+ const projectId = this._form.field("project").getValue();
178
+ if (!projectId) return;
179
+ return this._settings.projects?.presets?.find((p)=>p.id === projectId);
180
+ }
181
+ getProjectFileOptions() {
182
+ const project = this.getSelectedProject();
183
+ const files = project?.files;
184
+ if (!files || 0 === files.length) return [];
185
+ return files.map((f)=>({
186
+ label: f.name,
187
+ value: f.id
188
+ }));
189
+ }
190
+ computeExcludedFileIds(projectId, includedFiles) {
191
+ if (!projectId) return null;
192
+ const project = this._settings?.projects?.presets?.find((p)=>p.id === projectId);
193
+ const allFileIds = (project?.files ?? []).map((f)=>f.id);
194
+ if (0 === allFileIds.length) return null;
195
+ const included = new Set(includedFiles ?? []);
196
+ const excluded = allFileIds.filter((id)=>!included.has(id));
197
+ return excluded.length > 0 ? excluded : null;
198
+ }
199
+ getProjectOptions() {
200
+ const presets = this._settings?.projects?.presets;
201
+ if (!presets || 0 === presets.length) return [];
202
+ return presets.map((preset)=>({
203
+ label: preset.name,
204
+ value: preset.id
205
+ }));
206
+ }
207
+ getPersonaOptions(type) {
208
+ const presets = "reader" === type ? this._settings?.readerPersonas?.presets : this._settings?.writerPersonas?.presets;
209
+ if (!presets || 0 === presets.length) return [];
210
+ return presets.map((preset)=>({
211
+ label: preset.name,
212
+ value: preset.id
213
+ }));
214
+ }
215
+ }
216
+ const GenerateContentPresenterRegistration = GenerateContentPresenter.createImplementation({
217
+ implementation: GenerateContentPresenterImpl,
218
+ dependencies: [
219
+ ToolRegistry,
220
+ ToolPipelineRunner,
221
+ GeneratePageContentUseCase,
222
+ FormModelFactory,
223
+ GetSettingsUseCase
224
+ ]
225
+ });
226
+ export { GenerateContentPresenterRegistration };
227
+
228
+ //# sourceMappingURL=GenerateContentPresenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin/presentation/WbContentGeneration/GenerateContentPresenter.js","sources":["../../../../src/admin/presentation/WbContentGeneration/GenerateContentPresenter.ts"],"sourcesContent":["import { makeAutoObservable, computed, toJS, runInAction } from \"mobx\";\nimport { z } from \"zod\";\nimport pick from \"lodash/pick.js\";\nimport { FormModelFactory, FormModel, ToolRegistry, ToolPipelineRunner } from \"@webiny/app-admin\";\nimport { GenerateContentPresenter, type CreateElementsFn } from \"./abstractions.js\";\nimport { GeneratePageContentUseCase } from \"~/admin/features/generatePageContent/index.js\";\nimport { GetSettingsUseCase } from \"~/admin/features/settings/getSettings/abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/admin/features/settings/shared/abstractions.js\";\n\nconst SUBMIT_TIMEOUT_MS = 300_000;\n\nclass GenerateContentPresenterImpl implements GenerateContentPresenter.Interface {\n private _loading = false;\n private _submitting = false;\n private _processing = false;\n private _timedOut = false;\n private _components: Record<string, any>[] = [];\n private _createElements: CreateElementsFn = () => {};\n private _form: FormModel.Interface | null = null;\n private _settings: IAiPowerUpsSettings | null = null;\n private _timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private toolRegistry: ToolRegistry.Interface,\n private pipelineRunner: ToolPipelineRunner.Interface,\n private generatePageContent: GeneratePageContentUseCase.Interface,\n private formModelFactory: FormModelFactory.Interface,\n private getSettings: GetSettingsUseCase.Interface\n ) {\n makeAutoObservable(this, { vm: computed }, { autoBind: true });\n }\n\n get vm(): GenerateContentPresenter.ViewModel {\n return {\n form: this._form ? this._form.vm : null,\n loading: this._loading,\n submitting: this._submitting,\n processing: this._processing,\n timedOut: this._timedOut\n };\n }\n\n async init(components: Record<string, any>[], createElements: CreateElementsFn): Promise<void> {\n this._components = components;\n this._createElements = createElements;\n\n this._loading = true;\n\n try {\n const settings = await this.getSettings.execute();\n runInAction(() => {\n this._settings = settings;\n this._form = this.buildForm();\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n async submit(): Promise<void> {\n if (!this._form) {\n return;\n }\n\n const data = await this._form.submit<{\n prompt: string;\n project?: string;\n includedFiles?: string[];\n readerPersona?: string;\n writerPersona?: string;\n }>();\n\n if (!data) {\n return;\n }\n\n runInAction(() => {\n this._submitting = true;\n this._timedOut = false;\n });\n\n this.startTimeout();\n\n try {\n const tools = this.toolRegistry.getTools().map(tool => ({\n name: tool.name,\n description: tool.description,\n inputSchema: pick(z.toJSONSchema(tool.inputSchema), [\"properties\", \"type\"]),\n outputSchema: pick(z.toJSONSchema(tool.outputSchema), [\"properties\", \"type\"])\n }));\n\n const excludedFileIds = this.computeExcludedFileIds(data.project, data.includedFiles);\n\n await this.generatePageContent.execute({\n prompt: data.prompt,\n components: toJS(this._components),\n tools,\n projectId: data.project || null,\n excludedFileIds,\n readerPersonaId: data.readerPersona || null,\n writerPersonaId: data.writerPersona || null\n });\n } catch {\n this.clearTimeout();\n runInAction(() => {\n this._submitting = false;\n });\n }\n }\n\n async processAiResponse(responseText: string): Promise<void> {\n this.clearTimeout();\n runInAction(() => {\n this._processing = true;\n this._submitting = false;\n });\n\n try {\n const aiResponseJson = JSON.parse(responseText);\n const resolved = await this.pipelineRunner.resolve(aiResponseJson);\n const items = Array.isArray(resolved) ? resolved : [resolved];\n\n this._createElements(\n items.map((element: { component: string; inputs: Record<string, unknown> }) => ({\n componentName: element.component,\n parentId: \"root\",\n slot: \"children\",\n bindings: { inputs: element.inputs }\n }))\n );\n } catch (e) {\n console.error(e);\n } finally {\n runInAction(() => {\n this._processing = false;\n });\n }\n }\n\n cancelPrompt(): void {\n this.clearTimeout();\n this._processing = false;\n this._submitting = false;\n }\n\n private startTimeout(): void {\n this.clearTimeout();\n this._timeoutId = setTimeout(() => {\n runInAction(() => {\n this._submitting = false;\n this._timedOut = true;\n });\n }, SUBMIT_TIMEOUT_MS);\n }\n\n private clearTimeout(): void {\n if (this._timeoutId !== null) {\n clearTimeout(this._timeoutId);\n this._timeoutId = null;\n }\n }\n\n private buildForm() {\n return this.formModelFactory.create({\n fields: fields => ({\n project: fields\n .text()\n .label(\"Project\")\n .description(\"Select a predefined context to attach.\")\n .options(() => this.getProjectOptions())\n .afterChange((value, form) => {\n const projectId = value as string | undefined;\n const project = projectId\n ? this._settings?.projects?.presets?.find(p => p.id === projectId)\n : undefined;\n\n if (project?.defaultReaderPersonaId) {\n form.field(\"readerPersona\").setValue(project.defaultReaderPersonaId);\n }\n if (project?.defaultWriterPersonaId) {\n form.field(\"writerPersona\").setValue(project.defaultWriterPersonaId);\n }\n\n const fileIds = (project?.files ?? []).map(f => f.id);\n form.field(\"includedFiles\").setValue(fileIds);\n }),\n includedFiles: fields\n .text()\n .label(\"Files included\")\n .description(\"Uncheck files to exclude them from this generation only.\")\n .options(() => this.getProjectFileOptions())\n .renderer(\"checkboxes\")\n .list()\n .hiddenWhen(form => {\n const projectId = form.field(\"project\").as(\"text\").getValue();\n if (!projectId) {\n return true;\n }\n const project = this._settings?.projects?.presets?.find(\n p => p.id === projectId\n );\n return !project?.files || project.files.length === 0;\n }),\n readerPersona: fields\n .text()\n .label(\"Reader Persona\")\n .description(\"Select the target audience for the generated content.\")\n .options(() => this.getPersonaOptions(\"reader\")),\n writerPersona: fields\n .text()\n .label(\"Writer Persona\")\n .description(\"Select the writing style for the generated content.\")\n .options(() => this.getPersonaOptions(\"writer\")),\n prompt: fields\n .text()\n .label(\"Prompt\")\n .description(\"Describe the page content you want to generate.\")\n .required(\"Prompt is required\")\n .renderer(\"textarea\", { rows: 6 })\n }),\n layout: layout => [\n layout.row(\"project\"),\n layout.row(\"includedFiles\"),\n layout.row(\"readerPersona\"),\n layout.row(\"writerPersona\"),\n layout.row(\"prompt\")\n ]\n });\n }\n\n private getSelectedProject() {\n if (!this._form || !this._settings) {\n return undefined;\n }\n const projectId = this._form.field(\"project\").getValue<string>();\n if (!projectId) {\n return undefined;\n }\n return this._settings.projects?.presets?.find(p => p.id === projectId);\n }\n\n private getProjectFileOptions() {\n const project = this.getSelectedProject();\n const files = project?.files;\n if (!files || files.length === 0) {\n return [];\n }\n return files.map(f => ({\n label: f.name,\n value: f.id\n }));\n }\n\n private computeExcludedFileIds(projectId?: string, includedFiles?: string[]): string[] | null {\n if (!projectId) {\n return null;\n }\n const project = this._settings?.projects?.presets?.find(p => p.id === projectId);\n const allFileIds = (project?.files ?? []).map(f => f.id);\n if (allFileIds.length === 0) {\n return null;\n }\n const included = new Set(includedFiles ?? []);\n const excluded = allFileIds.filter(id => !included.has(id));\n return excluded.length > 0 ? excluded : null;\n }\n\n private getProjectOptions() {\n const presets = this._settings?.projects?.presets;\n if (!presets || presets.length === 0) {\n return [];\n }\n return presets.map(preset => ({\n label: preset.name,\n value: preset.id\n }));\n }\n\n private getPersonaOptions(type: \"reader\" | \"writer\") {\n const presets =\n type === \"reader\"\n ? this._settings?.readerPersonas?.presets\n : this._settings?.writerPersonas?.presets;\n\n if (!presets || presets.length === 0) {\n return [];\n }\n\n return presets.map(preset => ({\n label: preset.name,\n value: preset.id\n }));\n }\n}\n\nexport const GenerateContentPresenterRegistration = GenerateContentPresenter.createImplementation({\n implementation: GenerateContentPresenterImpl,\n dependencies: [\n ToolRegistry,\n ToolPipelineRunner,\n GeneratePageContentUseCase,\n FormModelFactory,\n GetSettingsUseCase\n ]\n});\n"],"names":["SUBMIT_TIMEOUT_MS","GenerateContentPresenterImpl","toolRegistry","pipelineRunner","generatePageContent","formModelFactory","getSettings","makeAutoObservable","computed","components","createElements","settings","runInAction","data","tools","tool","pick","z","excludedFileIds","toJS","responseText","aiResponseJson","JSON","resolved","items","Array","element","e","console","setTimeout","clearTimeout","fields","value","form","projectId","project","p","undefined","fileIds","f","layout","files","includedFiles","allFileIds","included","Set","excluded","id","presets","preset","type","GenerateContentPresenterRegistration","GenerateContentPresenter","ToolRegistry","ToolPipelineRunner","GeneratePageContentUseCase","FormModelFactory","GetSettingsUseCase"],"mappings":"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"}