@webiny/ai-powerups 6.4.12-beta.4 → 6.5.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/admin/Extension.js +7 -1
  2. package/admin/Extension.js.map +1 -1
  3. package/admin/domain/modelRoles.d.ts +17 -0
  4. package/admin/domain/modelRoles.js +8 -0
  5. package/admin/domain/modelRoles.js.map +1 -0
  6. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.d.ts +12 -0
  7. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js +46 -0
  8. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js.map +1 -0
  9. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.d.ts +11 -0
  10. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js +18 -0
  11. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js.map +1 -0
  12. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.d.ts +11 -0
  13. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js +18 -0
  14. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js.map +1 -0
  15. package/admin/features/compareEntryRevisions/abstractions.d.ts +32 -0
  16. package/admin/features/compareEntryRevisions/abstractions.js +7 -0
  17. package/admin/features/compareEntryRevisions/abstractions.js.map +1 -0
  18. package/admin/features/compareEntryRevisions/feature.d.ts +1 -0
  19. package/admin/features/compareEntryRevisions/feature.js +15 -0
  20. package/admin/features/compareEntryRevisions/feature.js.map +1 -0
  21. package/admin/features/compareEntryRevisions/index.d.ts +2 -0
  22. package/admin/features/compareEntryRevisions/index.js +2 -0
  23. package/admin/features/feature.js +4 -0
  24. package/admin/features/feature.js.map +1 -1
  25. package/admin/features/generateEntryContent/GenerateEntryContentGateway.d.ts +12 -0
  26. package/admin/features/generateEntryContent/GenerateEntryContentGateway.js +45 -0
  27. package/admin/features/generateEntryContent/GenerateEntryContentGateway.js.map +1 -0
  28. package/admin/features/generateEntryContent/GenerateEntryContentUseCase.d.ts +11 -0
  29. package/admin/features/generateEntryContent/GenerateEntryContentUseCase.js +18 -0
  30. package/admin/features/generateEntryContent/GenerateEntryContentUseCase.js.map +1 -0
  31. package/admin/features/generateEntryContent/abstractions.d.ts +24 -0
  32. package/admin/features/generateEntryContent/abstractions.js +6 -0
  33. package/admin/features/generateEntryContent/abstractions.js.map +1 -0
  34. package/admin/features/generateEntryContent/feature.d.ts +1 -0
  35. package/admin/features/generateEntryContent/feature.js +13 -0
  36. package/admin/features/generateEntryContent/feature.js.map +1 -0
  37. package/admin/features/generateEntryContent/index.d.ts +3 -0
  38. package/admin/features/generateEntryContent/index.js +2 -0
  39. package/admin/features/generatePageContent/GeneratePageContentGateway.js +2 -0
  40. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
  41. package/admin/features/generatePageContent/abstractions.d.ts +1 -0
  42. package/admin/features/generatePageContent/abstractions.js.map +1 -1
  43. package/admin/features/listCapabilities/ListCapabilitiesGateway.d.ts +12 -0
  44. package/admin/features/listCapabilities/ListCapabilitiesGateway.js +34 -0
  45. package/admin/features/listCapabilities/ListCapabilitiesGateway.js.map +1 -0
  46. package/admin/features/listCapabilities/ListCapabilitiesRepository.d.ts +13 -0
  47. package/admin/features/listCapabilities/ListCapabilitiesRepository.js +27 -0
  48. package/admin/features/listCapabilities/ListCapabilitiesRepository.js.map +1 -0
  49. package/admin/features/listCapabilities/ListCapabilitiesUseCase.d.ts +10 -0
  50. package/admin/features/listCapabilities/ListCapabilitiesUseCase.js +18 -0
  51. package/admin/features/listCapabilities/ListCapabilitiesUseCase.js.map +1 -0
  52. package/admin/features/listCapabilities/abstractions.d.ts +28 -0
  53. package/admin/features/listCapabilities/abstractions.js +7 -0
  54. package/admin/features/listCapabilities/abstractions.js.map +1 -0
  55. package/admin/features/listCapabilities/feature.d.ts +3 -0
  56. package/admin/features/listCapabilities/feature.js +21 -0
  57. package/admin/features/listCapabilities/feature.js.map +1 -0
  58. package/admin/features/listCapabilities/index.d.ts +3 -0
  59. package/admin/features/listCapabilities/index.js +2 -0
  60. package/admin/features/listModels/ListModelsGateway.js +18 -1
  61. package/admin/features/listModels/ListModelsGateway.js.map +1 -1
  62. package/admin/features/listModels/abstractions.d.ts +2 -0
  63. package/admin/features/listModels/abstractions.js.map +1 -1
  64. package/admin/features/settings/shared/abstractions.d.ts +58 -25
  65. package/admin/features/settings/shared/abstractions.js.map +1 -1
  66. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +2 -2
  67. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +3 -4
  68. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -1
  69. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +13 -1
  70. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -1
  71. package/admin/presentation/AiPowerUpsSettings/feature.js +6 -2
  72. package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -1
  73. package/admin/presentation/AiPowerUpsSettings/hasUsableModel.d.ts +13 -0
  74. package/admin/presentation/AiPowerUpsSettings/hasUsableModel.js +9 -0
  75. package/admin/presentation/AiPowerUpsSettings/hasUsableModel.js.map +1 -0
  76. package/admin/presentation/AiPowerUpsSettings/index.d.ts +1 -0
  77. package/admin/presentation/AiPowerUpsSettings/index.js +1 -0
  78. package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +6 -0
  79. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -1
  80. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.d.ts +20 -0
  81. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js +108 -0
  82. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js.map +1 -0
  83. package/admin/presentation/AiPromptFormFactory/abstractions.d.ts +14 -0
  84. package/admin/presentation/AiPromptFormFactory/abstractions.js +5 -0
  85. package/admin/presentation/AiPromptFormFactory/abstractions.js.map +1 -0
  86. package/admin/presentation/AiPromptFormFactory/feature.d.ts +1 -0
  87. package/admin/presentation/AiPromptFormFactory/feature.js +11 -0
  88. package/admin/presentation/AiPromptFormFactory/feature.js.map +1 -0
  89. package/admin/presentation/CapabilitiesSettings.d.ts +39 -0
  90. package/admin/presentation/CapabilitiesSettings.js +104 -0
  91. package/admin/presentation/CapabilitiesSettings.js.map +1 -0
  92. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.d.ts +9 -0
  93. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js +118 -0
  94. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js.map +1 -0
  95. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.d.ts +9 -0
  96. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js +72 -0
  97. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js.map +1 -0
  98. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.d.ts +4 -0
  99. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js +21 -0
  100. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js.map +1 -0
  101. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.d.ts +2 -0
  102. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js +17 -0
  103. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js.map +1 -0
  104. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.d.ts +25 -0
  105. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js +90 -0
  106. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js.map +1 -0
  107. package/admin/presentation/CmsCompareEntryRevisions/Extension.d.ts +2 -0
  108. package/admin/presentation/CmsCompareEntryRevisions/Extension.js +16 -0
  109. package/admin/presentation/CmsCompareEntryRevisions/Extension.js.map +1 -0
  110. package/admin/presentation/CmsCompareEntryRevisions/abstractions.d.ts +29 -0
  111. package/admin/presentation/CmsCompareEntryRevisions/abstractions.js +5 -0
  112. package/admin/presentation/CmsCompareEntryRevisions/abstractions.js.map +1 -0
  113. package/admin/presentation/CmsCompareEntryRevisions/feature.d.ts +3 -0
  114. package/admin/presentation/CmsCompareEntryRevisions/feature.js +17 -0
  115. package/admin/presentation/CmsCompareEntryRevisions/feature.js.map +1 -0
  116. package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.d.ts +4 -0
  117. package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.js +27 -0
  118. package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.js.map +1 -0
  119. package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.d.ts +5 -0
  120. package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.js +106 -0
  121. package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.js.map +1 -0
  122. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.d.ts +29 -0
  123. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js +120 -0
  124. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js.map +1 -0
  125. package/admin/presentation/CmsContentGeneration/Extension.d.ts +2 -0
  126. package/admin/presentation/CmsContentGeneration/Extension.js +27 -0
  127. package/admin/presentation/CmsContentGeneration/Extension.js.map +1 -0
  128. package/admin/presentation/CmsContentGeneration/abstractions.d.ts +20 -0
  129. package/admin/presentation/CmsContentGeneration/abstractions.js +5 -0
  130. package/admin/presentation/CmsContentGeneration/abstractions.js.map +1 -0
  131. package/admin/presentation/CmsContentGeneration/feature.d.ts +3 -0
  132. package/admin/presentation/CmsContentGeneration/feature.js +17 -0
  133. package/admin/presentation/CmsContentGeneration/feature.js.map +1 -0
  134. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.d.ts +4 -0
  135. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js +113 -0
  136. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js.map +1 -0
  137. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.d.ts +4 -0
  138. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js +19 -0
  139. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js.map +1 -0
  140. package/admin/presentation/CmsEntryWizard/Extension.d.ts +2 -0
  141. package/admin/presentation/CmsEntryWizard/Extension.js +10 -0
  142. package/admin/presentation/CmsEntryWizard/Extension.js.map +1 -0
  143. package/admin/presentation/ConnectionsSettings.d.ts +25 -0
  144. package/admin/presentation/ConnectionsSettings.js +52 -0
  145. package/admin/presentation/ConnectionsSettings.js.map +1 -0
  146. package/admin/presentation/ModelRolesSettings.d.ts +29 -0
  147. package/admin/presentation/ModelRolesSettings.js +67 -0
  148. package/admin/presentation/ModelRolesSettings.js.map +1 -0
  149. package/admin/presentation/ProjectsSettings.js +4 -4
  150. package/admin/presentation/ProjectsSettings.js.map +1 -1
  151. package/admin/presentation/ProvidersSettings.js +1 -1
  152. package/admin/presentation/ProvidersSettings.js.map +1 -1
  153. package/admin/presentation/WbContentGeneration/GenerateContentButton.js +2 -2
  154. package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -1
  155. package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +2 -2
  156. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +2 -2
  157. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
  158. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +4 -12
  159. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +12 -94
  160. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
  161. package/admin/presentation/modelRoles.d.ts +10 -0
  162. package/admin/presentation/modelRoles.js +23 -0
  163. package/admin/presentation/modelRoles.js.map +1 -0
  164. package/api/Extension.js +16 -0
  165. package/api/Extension.js.map +1 -1
  166. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +10 -8
  167. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +37 -42
  168. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -1
  169. package/api/features/AiImageEnrichment/capability.d.ts +13 -0
  170. package/api/features/AiImageEnrichment/capability.js +19 -0
  171. package/api/features/AiImageEnrichment/capability.js.map +1 -0
  172. package/api/features/AiImageEnrichment/feature.js +2 -0
  173. package/api/features/AiImageEnrichment/feature.js.map +1 -1
  174. package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +8 -1
  175. package/api/features/AiPromptContext/AiPromptContextBuilder.js +46 -2
  176. package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -1
  177. package/api/features/AiPromptContext/abstractions.d.ts +3 -0
  178. package/api/features/AiPromptContext/abstractions.js +9 -1
  179. package/api/features/AiPromptContext/abstractions.js.map +1 -1
  180. package/api/features/AiPromptContext/index.d.ts +1 -1
  181. package/api/features/AiPromptContext/index.js +1 -1
  182. package/api/features/Capabilities/CapabilitiesHandler.d.ts +28 -0
  183. package/api/features/Capabilities/CapabilitiesHandler.js +56 -0
  184. package/api/features/Capabilities/CapabilitiesHandler.js.map +1 -0
  185. package/api/features/Capabilities/ListAiCapabilitiesUseCase.d.ts +18 -0
  186. package/api/features/Capabilities/ListAiCapabilitiesUseCase.js +28 -0
  187. package/api/features/Capabilities/ListAiCapabilitiesUseCase.js.map +1 -0
  188. package/api/features/Capabilities/ResolveAiCapabilityUseCase.d.ts +30 -0
  189. package/api/features/Capabilities/ResolveAiCapabilityUseCase.js +88 -0
  190. package/api/features/Capabilities/ResolveAiCapabilityUseCase.js.map +1 -0
  191. package/api/features/Capabilities/abstractions.d.ts +77 -0
  192. package/api/features/Capabilities/abstractions.js +7 -0
  193. package/api/features/Capabilities/abstractions.js.map +1 -0
  194. package/api/features/Capabilities/composeSystemPrompt.d.ts +14 -0
  195. package/api/features/Capabilities/composeSystemPrompt.js +13 -0
  196. package/api/features/Capabilities/composeSystemPrompt.js.map +1 -0
  197. package/api/features/Capabilities/feature.d.ts +4 -0
  198. package/api/features/Capabilities/feature.js +15 -0
  199. package/api/features/Capabilities/feature.js.map +1 -0
  200. package/api/features/Capabilities/index.d.ts +5 -0
  201. package/api/features/Capabilities/index.js +3 -0
  202. package/api/features/Capabilities/types.d.ts +86 -0
  203. package/api/features/Capabilities/types.js +4 -0
  204. package/api/features/Capabilities/types.js.map +1 -0
  205. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.d.ts +20 -0
  206. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js +82 -0
  207. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js.map +1 -0
  208. package/api/features/CmsCompareEntryRevisions/abstractions.d.ts +18 -0
  209. package/api/features/CmsCompareEntryRevisions/abstractions.js +5 -0
  210. package/api/features/CmsCompareEntryRevisions/abstractions.js.map +1 -0
  211. package/api/features/CmsCompareEntryRevisions/capability.d.ts +13 -0
  212. package/api/features/CmsCompareEntryRevisions/capability.js +64 -0
  213. package/api/features/CmsCompareEntryRevisions/capability.js.map +1 -0
  214. package/api/features/CmsCompareEntryRevisions/feature.d.ts +4 -0
  215. package/api/features/CmsCompareEntryRevisions/feature.js +13 -0
  216. package/api/features/CmsCompareEntryRevisions/feature.js.map +1 -0
  217. package/api/features/CmsCompareEntryRevisions/index.d.ts +2 -0
  218. package/api/features/CmsCompareEntryRevisions/index.js +2 -0
  219. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.d.ts +33 -0
  220. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js +84 -0
  221. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js.map +1 -0
  222. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.d.ts +27 -0
  223. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js +133 -0
  224. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js.map +1 -0
  225. package/api/features/CmsGenerateEntryContent/abstractions.d.ts +36 -0
  226. package/api/features/CmsGenerateEntryContent/abstractions.js +5 -0
  227. package/api/features/CmsGenerateEntryContent/abstractions.js.map +1 -0
  228. package/api/features/CmsGenerateEntryContent/buildPrompt.d.ts +2 -0
  229. package/api/features/CmsGenerateEntryContent/buildPrompt.js +61 -0
  230. package/api/features/CmsGenerateEntryContent/buildPrompt.js.map +1 -0
  231. package/api/features/CmsGenerateEntryContent/capability.d.ts +17 -0
  232. package/api/features/CmsGenerateEntryContent/capability.js +17 -0
  233. package/api/features/CmsGenerateEntryContent/capability.js.map +1 -0
  234. package/api/features/CmsGenerateEntryContent/feature.d.ts +4 -0
  235. package/api/features/CmsGenerateEntryContent/feature.js +15 -0
  236. package/api/features/CmsGenerateEntryContent/feature.js.map +1 -0
  237. package/api/features/CmsGenerateEntryContent/index.d.ts +1 -0
  238. package/api/features/CmsGenerateEntryContent/index.js +1 -0
  239. package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.d.ts +2 -0
  240. package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.js +30 -0
  241. package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.js.map +1 -0
  242. package/api/features/CmsResolveImageTool/CmsResolveImageTool.d.ts +14 -0
  243. package/api/features/CmsResolveImageTool/CmsResolveImageTool.js +27 -0
  244. package/api/features/CmsResolveImageTool/CmsResolveImageTool.js.map +1 -0
  245. package/api/features/CmsResolveImageTool/feature.d.ts +4 -0
  246. package/api/features/CmsResolveImageTool/feature.js +11 -0
  247. package/api/features/CmsResolveImageTool/feature.js.map +1 -0
  248. package/api/features/Connections/ConnectionsGraphQLMapper.d.ts +20 -0
  249. package/api/features/Connections/ConnectionsGraphQLMapper.js +37 -0
  250. package/api/features/Connections/ConnectionsGraphQLMapper.js.map +1 -0
  251. package/api/features/Connections/ConnectionsHandler.d.ts +25 -0
  252. package/api/features/Connections/ConnectionsHandler.js +84 -0
  253. package/api/features/Connections/ConnectionsHandler.js.map +1 -0
  254. package/api/features/Connections/feature.d.ts +4 -0
  255. package/api/features/Connections/feature.js +13 -0
  256. package/api/features/Connections/feature.js.map +1 -0
  257. package/api/features/Connections/index.d.ts +2 -0
  258. package/api/features/Connections/index.js +1 -0
  259. package/api/features/Connections/legacyProviders.d.ts +26 -0
  260. package/api/features/Connections/legacyProviders.js +9 -0
  261. package/api/features/Connections/legacyProviders.js.map +1 -0
  262. package/api/features/Connections/types.d.ts +36 -0
  263. package/api/features/Connections/types.js +0 -0
  264. package/api/features/GetSettings/GetSettingsRepository.js +1 -1
  265. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -1
  266. package/api/features/GetSettings/index.d.ts +1 -0
  267. package/api/features/GetSettings/index.js +1 -0
  268. package/api/features/ModelRoles/ModelRolesHandler.d.ts +15 -0
  269. package/api/features/ModelRoles/ModelRolesHandler.js +68 -0
  270. package/api/features/ModelRoles/ModelRolesHandler.js.map +1 -0
  271. package/api/features/ModelRoles/feature.d.ts +4 -0
  272. package/api/features/ModelRoles/feature.js +11 -0
  273. package/api/features/ModelRoles/feature.js.map +1 -0
  274. package/api/features/ModelRoles/index.d.ts +4 -0
  275. package/api/features/ModelRoles/index.js +2 -0
  276. package/api/features/ModelRoles/roles.d.ts +16 -0
  277. package/api/features/ModelRoles/roles.js +9 -0
  278. package/api/features/ModelRoles/roles.js.map +1 -0
  279. package/api/features/ModelRoles/types.d.ts +21 -0
  280. package/api/features/ModelRoles/types.js +7 -0
  281. package/api/features/ModelRoles/types.js.map +1 -0
  282. package/api/features/Providers/ProvidersHandler.js.map +1 -1
  283. package/api/features/Providers/types.d.ts +2 -2
  284. package/api/features/UpdateSettings/UpdateSettingsRepository.js +2 -2
  285. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -1
  286. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +4 -3
  287. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +25 -15
  288. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
  289. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +3 -5
  290. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +16 -23
  291. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
  292. package/api/features/WbGeneratePageContent/abstractions.d.ts +1 -0
  293. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
  294. package/api/features/WbGeneratePageContent/capability.d.ts +16 -0
  295. package/api/features/WbGeneratePageContent/capability.js +17 -0
  296. package/api/features/WbGeneratePageContent/capability.js.map +1 -0
  297. package/api/features/WbGeneratePageContent/feature.js +2 -0
  298. package/api/features/WbGeneratePageContent/feature.js.map +1 -1
  299. package/api/features/WbTranslatePage/LexicalParser.d.ts +10 -0
  300. package/api/features/WbTranslatePage/LexicalParser.js +37 -0
  301. package/api/features/WbTranslatePage/LexicalParser.js.map +1 -0
  302. package/api/features/WbTranslatePage/WbTranslatePageDecorator.d.ts +29 -0
  303. package/api/features/WbTranslatePage/WbTranslatePageDecorator.js +143 -0
  304. package/api/features/WbTranslatePage/WbTranslatePageDecorator.js.map +1 -0
  305. package/api/features/WbTranslatePage/abstractions/LexicalParser.d.ts +7 -0
  306. package/api/features/WbTranslatePage/abstractions/LexicalParser.js +5 -0
  307. package/api/features/WbTranslatePage/abstractions/LexicalParser.js.map +1 -0
  308. package/api/features/WbTranslatePage/capability.d.ts +13 -0
  309. package/api/features/WbTranslatePage/capability.js +19 -0
  310. package/api/features/WbTranslatePage/capability.js.map +1 -0
  311. package/api/features/WbTranslatePage/feature.d.ts +4 -0
  312. package/api/features/WbTranslatePage/feature.js +15 -0
  313. package/api/features/WbTranslatePage/feature.js.map +1 -0
  314. package/api/features/WbTranslatePage/index.d.ts +2 -0
  315. package/api/features/WbTranslatePage/index.js +2 -0
  316. package/api/features/shared/abstractions.d.ts +6 -1
  317. package/api/features/shared/abstractions.js.map +1 -1
  318. package/api/features/shared/modelId.d.ts +11 -0
  319. package/api/features/shared/modelId.js +4 -0
  320. package/api/features/shared/modelId.js.map +1 -0
  321. package/api/graphql/BaseGraphQLSchema.js +58 -1
  322. package/api/graphql/BaseGraphQLSchema.js.map +1 -1
  323. package/api/graphql/CmsCompareEntryRevisionsSchema.d.ts +8 -0
  324. package/api/graphql/CmsCompareEntryRevisionsSchema.js +68 -0
  325. package/api/graphql/CmsCompareEntryRevisionsSchema.js.map +1 -0
  326. package/api/types.d.ts +3 -0
  327. package/api/types.js +3 -0
  328. package/{api/features/WbGeneratePageContent → domain}/LlmJsonResponse.d.ts +1 -0
  329. package/{api/features/WbGeneratePageContent → domain}/LlmJsonResponse.js +3 -0
  330. package/domain/LlmJsonResponse.js.map +1 -0
  331. package/exports/admin/ai-powerups.d.ts +1 -0
  332. package/exports/admin/ai-powerups.js +1 -0
  333. package/exports/api/ai-powerups.d.ts +2 -0
  334. package/exports/api/ai-powerups.js +2 -0
  335. package/package.json +33 -26
  336. package/api/features/WbGeneratePageContent/LlmJsonResponse.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/GetSettings/GetSettingsRepository.js","sources":["../../../../src/api/features/GetSettings/GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { GetSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async get(): Promise<Result<IAiPowerUpsSettings>> {\n const cached = this.cache.get();\n if (cached) {\n return Result.ok(cached.mapped);\n }\n\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n\n const raw: Record<string, unknown> =\n storeResult.isOk() && storeResult.value ? storeResult.value : {};\n\n const result: Record<string, unknown> = {};\n\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(raw[handler.name]);\n }\n\n for (const key of Object.keys(raw)) {\n if (!(key in result)) {\n result[key] = raw[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(raw, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n});\n"],"names":["GetSettingsRepositoryImpl","keyValueStore","handlers","cache","cached","Result","storeResult","AI_POWER_UPS_SETTINGS","raw","result","handler","key","Object","mapped","GetSettingsRepositoryImplementation","GetSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,MAA4C;QAC9C,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIA,QACA,OAAOC,OAAO,EAAE,CAACD,OAAO,MAAM;QAGlC,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;QAE1D,MAAMC,MACFF,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QAEnE,MAAMG,SAAkC,CAAC;QAEzC,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,MAAM,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACF,GAAG,CAACE,QAAQ,IAAI,CAAC;QAGnE,KAAK,MAAMC,OAAOC,OAAO,IAAI,CAACJ,KAC1B,IAAI,CAAEG,CAAAA,OAAOF,MAAK,GACdA,MAAM,CAACE,IAAI,GAAGH,GAAG,CAACG,IAAI;QAI9B,MAAME,SAASJ;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD,KAAKK;QAEpB,OAAOR,OAAO,EAAE,CAACQ;IACrB;AACJ;AAEO,MAAMC,sCAAsCC,sBAAsB,oBAAoB,CAAC;IAC1F,gBAAgBf;IAChB,cAAc;QACVgB;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
1
+ {"version":3,"file":"api/features/GetSettings/GetSettingsRepository.js","sources":["../../../../src/api/features/GetSettings/GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { GetSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async get(): Promise<Result<IAiPowerUpsSettings>> {\n const cached = this.cache.get();\n if (cached) {\n return Result.ok(cached.mapped);\n }\n\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n\n const raw: Record<string, unknown> =\n storeResult.isOk() && storeResult.value ? storeResult.value : {};\n\n const result: Record<string, unknown> = {};\n\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\n }\n\n for (const key of Object.keys(raw)) {\n if (!(key in result)) {\n result[key] = raw[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(raw, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n});\n"],"names":["GetSettingsRepositoryImpl","keyValueStore","handlers","cache","cached","Result","storeResult","AI_POWER_UPS_SETTINGS","raw","result","handler","key","Object","mapped","GetSettingsRepositoryImplementation","GetSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,MAA4C;QAC9C,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIA,QACA,OAAOC,OAAO,EAAE,CAACD,OAAO,MAAM;QAGlC,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;QAE1D,MAAMC,MACFF,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QAEnE,MAAMG,SAAkC,CAAC;QAEzC,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,MAAM,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACF,GAAG,CAACE,QAAQ,IAAI,CAAC,EAAEF;QAGrE,KAAK,MAAMG,OAAOC,OAAO,IAAI,CAACJ,KAC1B,IAAI,CAAEG,CAAAA,OAAOF,MAAK,GACdA,MAAM,CAACE,IAAI,GAAGH,GAAG,CAACG,IAAI;QAI9B,MAAME,SAASJ;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD,KAAKK;QAEpB,OAAOR,OAAO,EAAE,CAACQ;IACrB;AACJ;AAEO,MAAMC,sCAAsCC,sBAAsB,oBAAoB,CAAC;IAC1F,gBAAgBf;IAChB,cAAc;QACVgB;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
@@ -1 +1,2 @@
1
+ import "../Providers/types.js";
1
2
  export { GetSettingsUseCase } from "./abstractions.js";
@@ -1 +1,2 @@
1
+ import "../Providers/types.js";
1
2
  export { GetSettingsUseCase } from "./abstractions.js";
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ import { AiPowerUpsSettingsGroupHandler } from "../../../api/features/shared/index.js";
3
+ import type { AiModelRoleAssignments, ModelRolesSettings, PersistedModelRoles } from "./types.js";
4
+ declare class ModelRolesHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {
5
+ readonly name = "modelRoles";
6
+ readonly inputSchema: z.ZodObject<{
7
+ roles: z.ZodType<AiModelRoleAssignments>;
8
+ }, z.core.$strip>;
9
+ mapFromStorage(persisted: unknown, all?: Record<string, unknown>): ModelRolesSettings;
10
+ mapToStorage(internal: unknown): Promise<PersistedModelRoles>;
11
+ }
12
+ declare const _default: typeof ModelRolesHandlerImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("../shared/abstractions.js").IAiPowerUpsSettingsGroupHandler>;
14
+ };
15
+ export default _default;
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
3
+ import { readLegacyProviderPresets } from "../Connections/legacyProviders.js";
4
+ import { AI_MODEL_ROLE_IDS } from "./roles.js";
5
+ import { emptyAssignment } from "./types.js";
6
+ const formString = z.string().nullish();
7
+ const assignmentSchema = z.object({
8
+ connectionId: formString,
9
+ model: formString
10
+ });
11
+ const inputSchema = z.object({
12
+ roles: z.object(Object.fromEntries(AI_MODEL_ROLE_IDS.map((id)=>[
13
+ id,
14
+ assignmentSchema
15
+ ])))
16
+ });
17
+ class ModelRolesHandlerImpl {
18
+ mapFromStorage(persisted, all) {
19
+ const stored = persisted ?? {};
20
+ const roles = Object.fromEntries(AI_MODEL_ROLE_IDS.map((id)=>{
21
+ const assignment = stored.roles?.[id];
22
+ return [
23
+ id,
24
+ {
25
+ connectionId: assignment?.connectionId ?? "",
26
+ model: assignment?.model ?? ""
27
+ }
28
+ ];
29
+ }));
30
+ if (roles.standard.model) return {
31
+ roles
32
+ };
33
+ const legacy = readLegacyProviderPresets(all)[0];
34
+ if (legacy?.model) roles.standard = {
35
+ connectionId: legacy.id,
36
+ model: legacy.model
37
+ };
38
+ return {
39
+ roles
40
+ };
41
+ }
42
+ async mapToStorage(internal) {
43
+ const input = internal;
44
+ return {
45
+ roles: Object.fromEntries(AI_MODEL_ROLE_IDS.map((id)=>{
46
+ const assignment = input.roles?.[id] ?? emptyAssignment();
47
+ return [
48
+ id,
49
+ {
50
+ connectionId: assignment.connectionId ?? "",
51
+ model: assignment.model ?? ""
52
+ }
53
+ ];
54
+ }))
55
+ };
56
+ }
57
+ constructor(){
58
+ this.name = "modelRoles";
59
+ this.inputSchema = inputSchema;
60
+ }
61
+ }
62
+ const ModelRolesHandler = AiPowerUpsSettingsGroupHandler.createImplementation({
63
+ implementation: ModelRolesHandlerImpl,
64
+ dependencies: []
65
+ });
66
+ export default ModelRolesHandler;
67
+
68
+ //# sourceMappingURL=ModelRolesHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ModelRoles/ModelRolesHandler.js","sources":["../../../../src/api/features/ModelRoles/ModelRolesHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport { readLegacyProviderPresets } from \"~/api/features/Connections/legacyProviders.js\";\nimport { AI_MODEL_ROLE_IDS } from \"./roles.js\";\nimport { emptyAssignment } from \"./types.js\";\nimport type { AiModelRoleAssignments, ModelRolesSettings, PersistedModelRoles } from \"./types.js\";\n\n/*\n * The admin form sends `null`, not `\"\"`, for a field nobody has touched, and an unfilled role is\n * the normal state of two of the three. `nullish` keeps an untouched role from failing validation;\n * `mapToStorage` is what normalises it to `\"\"`.\n */\nconst formString = z.string().nullish();\n\nconst assignmentSchema = z.object({\n connectionId: formString,\n model: formString\n});\n\nconst inputSchema = z.object({\n roles: z.object(\n Object.fromEntries(AI_MODEL_ROLE_IDS.map(id => [id, assignmentSchema]))\n ) as unknown as z.ZodType<AiModelRoleAssignments>\n});\n\nclass ModelRolesHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"modelRoles\";\n readonly inputSchema = inputSchema;\n\n mapFromStorage(persisted: unknown, all?: Record<string, unknown>): ModelRolesSettings {\n const stored = (persisted ?? {}) as PersistedModelRoles;\n const roles = Object.fromEntries(\n AI_MODEL_ROLE_IDS.map(id => {\n const assignment = stored.roles?.[id];\n return [\n id,\n {\n connectionId: assignment?.connectionId ?? \"\",\n model: assignment?.model ?? \"\"\n }\n ];\n })\n ) as AiModelRoleAssignments;\n\n if (roles.standard.model) {\n return { roles };\n }\n\n /*\n * Nothing has filled `standard` yet, so seed it from the legacy `providers` section. Every\n * AI feature used to read `providers.presets[0]` and nothing else, so lifting exactly that\n * preset into `standard` reproduces the old behaviour for a project that upgrades without\n * touching the settings screen.\n *\n * `fast` and `vision` stay empty on purpose. Both fall back to `standard` at resolve time,\n * so an untouched project keeps working, and the settings screen shows the fallback rather\n * than pretending someone chose it.\n */\n const legacy = readLegacyProviderPresets(all)[0];\n\n if (legacy?.model) {\n roles.standard = { connectionId: legacy.id, model: legacy.model };\n }\n\n return { roles };\n }\n\n async mapToStorage(internal: unknown): Promise<PersistedModelRoles> {\n const input = internal as ModelRolesSettings;\n\n return {\n roles: Object.fromEntries(\n AI_MODEL_ROLE_IDS.map(id => {\n const assignment = input.roles?.[id] ?? emptyAssignment();\n return [\n id,\n {\n connectionId: assignment.connectionId ?? \"\",\n model: assignment.model ?? \"\"\n }\n ];\n })\n )\n };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ModelRolesHandlerImpl,\n dependencies: []\n});\n"],"names":["formString","z","assignmentSchema","inputSchema","Object","AI_MODEL_ROLE_IDS","id","ModelRolesHandlerImpl","persisted","all","stored","roles","assignment","legacy","readLegacyProviderPresets","internal","input","emptyAssignment","AiPowerUpsSettingsGroupHandler"],"mappings":";;;;;AAYA,MAAMA,aAAaC,EAAE,MAAM,GAAG,OAAO;AAErC,MAAMC,mBAAmBD,EAAE,MAAM,CAAC;IAC9B,cAAcD;IACd,OAAOA;AACX;AAEA,MAAMG,cAAcF,EAAE,MAAM,CAAC;IACzB,OAAOA,EAAE,MAAM,CACXG,OAAO,WAAW,CAACC,kBAAkB,GAAG,CAACC,CAAAA,KAAM;YAACA;YAAIJ;SAAiB;AAE7E;AAEA,MAAMK;IAIF,eAAeC,SAAkB,EAAEC,GAA6B,EAAsB;QAClF,MAAMC,SAAUF,aAAa,CAAC;QAC9B,MAAMG,QAAQP,OAAO,WAAW,CAC5BC,kBAAkB,GAAG,CAACC,CAAAA;YAClB,MAAMM,aAAaF,OAAO,KAAK,EAAE,CAACJ,GAAG;YACrC,OAAO;gBACHA;gBACA;oBACI,cAAcM,YAAY,gBAAgB;oBAC1C,OAAOA,YAAY,SAAS;gBAChC;aACH;QACL;QAGJ,IAAID,MAAM,QAAQ,CAAC,KAAK,EACpB,OAAO;YAAEA;QAAM;QAanB,MAAME,SAASC,0BAA0BL,IAAI,CAAC,EAAE;QAEhD,IAAII,QAAQ,OACRF,MAAM,QAAQ,GAAG;YAAE,cAAcE,OAAO,EAAE;YAAE,OAAOA,OAAO,KAAK;QAAC;QAGpE,OAAO;YAAEF;QAAM;IACnB;IAEA,MAAM,aAAaI,QAAiB,EAAgC;QAChE,MAAMC,QAAQD;QAEd,OAAO;YACH,OAAOX,OAAO,WAAW,CACrBC,kBAAkB,GAAG,CAACC,CAAAA;gBAClB,MAAMM,aAAaI,MAAM,KAAK,EAAE,CAACV,GAAG,IAAIW;gBACxC,OAAO;oBACHX;oBACA;wBACI,cAAcM,WAAW,YAAY,IAAI;wBACzC,OAAOA,WAAW,KAAK,IAAI;oBAC/B;iBACH;YACL;QAER;IACJ;;aA1DS,IAAI,GAAG;aACP,WAAW,GAAGT;;AA0D3B;AAEA,0BAAee,+BAA+B,oBAAoB,CAAC;IAC/D,gBAAgBX;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,4 @@
1
+ export declare const ModelRolesFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import ModelRolesHandler from "./ModelRolesHandler.js";
3
+ const ModelRolesFeature = createFeature({
4
+ name: "AiPowerUpsModelRoles",
5
+ register (container) {
6
+ container.register(ModelRolesHandler);
7
+ }
8
+ });
9
+ export { ModelRolesFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ModelRoles/feature.js","sources":["../../../../src/api/features/ModelRoles/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport ModelRolesHandler from \"./ModelRolesHandler.js\";\n\nexport const ModelRolesFeature = createFeature({\n name: \"AiPowerUpsModelRoles\",\n register(container) {\n container.register(ModelRolesHandler);\n }\n});\n"],"names":["ModelRolesFeature","createFeature","container","ModelRolesHandler"],"mappings":";;AAGO,MAAMA,oBAAoBC,cAAc;IAC3C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1,4 @@
1
+ export { AI_MODEL_ROLE_IDS, isAiModelRoleId } from "./roles.js";
2
+ export type { AiModelRoleId } from "./roles.js";
3
+ export type { AiModelRoleAssignment, AiModelRoleAssignments, ModelRolesSettings } from "./types.js";
4
+ export { ModelRolesFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { AI_MODEL_ROLE_IDS, isAiModelRoleId } from "./roles.js";
2
+ export { ModelRolesFeature } from "./feature.js";
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Model roles are the indirection between an AI feature and a concrete model.
3
+ *
4
+ * A feature never names a model. It names a role, and the project decides which model fills that
5
+ * role. That keeps the settings screen small (one select per role, not one per feature) while still
6
+ * letting a project run cheap work on a cheap model.
7
+ *
8
+ * The set is deliberately fixed and closed. A project that needs a different model for one specific
9
+ * feature overrides that feature under Capabilities instead of inventing a role.
10
+ *
11
+ * Labels and descriptions are not here on purpose: they are UI text, and they live next to the
12
+ * settings form in `~/admin/presentation/modelRoles.js`.
13
+ */
14
+ export declare const AI_MODEL_ROLE_IDS: readonly ["fast", "standard", "vision"];
15
+ export type AiModelRoleId = (typeof AI_MODEL_ROLE_IDS)[number];
16
+ export declare const isAiModelRoleId: (value: unknown) => value is AiModelRoleId;
@@ -0,0 +1,9 @@
1
+ const AI_MODEL_ROLE_IDS = [
2
+ "fast",
3
+ "standard",
4
+ "vision"
5
+ ];
6
+ const isAiModelRoleId = (value)=>"string" == typeof value && AI_MODEL_ROLE_IDS.includes(value);
7
+ export { AI_MODEL_ROLE_IDS, isAiModelRoleId };
8
+
9
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ModelRoles/roles.js","sources":["../../../../src/api/features/ModelRoles/roles.ts"],"sourcesContent":["/**\n * Model roles are the indirection between an AI feature and a concrete model.\n *\n * A feature never names a model. It names a role, and the project decides which model fills that\n * role. That keeps the settings screen small (one select per role, not one per feature) while still\n * letting a project run cheap work on a cheap model.\n *\n * The set is deliberately fixed and closed. A project that needs a different model for one specific\n * feature overrides that feature under Capabilities instead of inventing a role.\n *\n * Labels and descriptions are not here on purpose: they are UI text, and they live next to the\n * settings form in `~/admin/presentation/modelRoles.js`.\n */\nexport const AI_MODEL_ROLE_IDS = [\"fast\", \"standard\", \"vision\"] as const;\n\nexport type AiModelRoleId = (typeof AI_MODEL_ROLE_IDS)[number];\n\nexport const isAiModelRoleId = (value: unknown): value is AiModelRoleId =>\n typeof value === \"string\" && (AI_MODEL_ROLE_IDS as readonly string[]).includes(value);\n"],"names":["AI_MODEL_ROLE_IDS","isAiModelRoleId","value"],"mappings":"AAaO,MAAMA,oBAAoB;IAAC;IAAQ;IAAY;CAAS;AAIxD,MAAMC,kBAAkB,CAACC,QAC5B,AAAiB,YAAjB,OAAOA,SAAuBF,kBAAwC,QAAQ,CAACE"}
@@ -0,0 +1,21 @@
1
+ import type { IAiPowerUpsSettings } from "../../../api/types.js";
2
+ import type { AiModelRoleId } from "./roles.js";
3
+ export interface AiModelRoleAssignment {
4
+ /** Empty string means the role is unfilled. */
5
+ connectionId: string;
6
+ /** Fully qualified, e.g. `"anthropic/claude-sonnet-4-5"`. Empty string means unfilled. */
7
+ model: string;
8
+ }
9
+ export type AiModelRoleAssignments = Record<AiModelRoleId, AiModelRoleAssignment>;
10
+ declare module "~/api/types.js" {
11
+ interface IAiPowerUpsSettings {
12
+ modelRoles: {
13
+ roles: AiModelRoleAssignments;
14
+ };
15
+ }
16
+ }
17
+ export type ModelRolesSettings = IAiPowerUpsSettings["modelRoles"];
18
+ export interface PersistedModelRoles {
19
+ roles?: Partial<Record<string, Partial<AiModelRoleAssignment>>>;
20
+ }
21
+ export declare const emptyAssignment: () => AiModelRoleAssignment;
@@ -0,0 +1,7 @@
1
+ const emptyAssignment = ()=>({
2
+ connectionId: "",
3
+ model: ""
4
+ });
5
+ export { emptyAssignment };
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ModelRoles/types.js","sources":["../../../../src/api/features/ModelRoles/types.ts"],"sourcesContent":["import type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport type { AiModelRoleId } from \"./roles.js\";\n\nexport interface AiModelRoleAssignment {\n /** Empty string means the role is unfilled. */\n connectionId: string;\n /** Fully qualified, e.g. `\"anthropic/claude-sonnet-4-5\"`. Empty string means unfilled. */\n model: string;\n}\n\nexport type AiModelRoleAssignments = Record<AiModelRoleId, AiModelRoleAssignment>;\n\ndeclare module \"~/api/types.js\" {\n interface IAiPowerUpsSettings {\n modelRoles: {\n roles: AiModelRoleAssignments;\n };\n }\n}\n\nexport type ModelRolesSettings = IAiPowerUpsSettings[\"modelRoles\"];\n\nexport interface PersistedModelRoles {\n roles?: Partial<Record<string, Partial<AiModelRoleAssignment>>>;\n}\n\nexport const emptyAssignment = (): AiModelRoleAssignment => ({ connectionId: \"\", model: \"\" });\n"],"names":["emptyAssignment"],"mappings":"AA0BO,MAAMA,kBAAkB,IAA8B;QAAE,cAAc;QAAI,OAAO;IAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/Providers/ProvidersHandler.js","sources":["../../../../src/api/features/Providers/ProvidersHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { Masker } from \"@webiny/api-core/features/masker/index.js\";\nimport { AiModelRegistry } from \"@webiny/api-core/features/ai/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedProviderPreset, PersistedProviders, ProvidersSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n model: z.string().min(1),\n apiKey: z.string().optional()\n })\n )\n});\n\nclass ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"providers\";\n readonly inputSchema = inputSchema;\n\n constructor(\n private encryption: Encryption.Interface,\n private masker: Masker.Interface,\n private modelRegistry: AiModelRegistry.Interface\n ) {}\n\n mapFromStorage(persisted: unknown): ProvidersSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedProviders;\n const presets = (data.presets ?? []).map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKeyMasked: p.apiKeyMasked ?? \"\",\n apiKeyEncrypted: p.apiKeyEncrypted ?? \"\"\n }));\n\n return { presets };\n }\n\n async mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders> {\n const input = internal as ProvidersSettings;\n const existingData = existing as ProvidersSettings | null;\n const existingPresets = existingData?.presets ?? [];\n\n // Validate that all preset models are in the registry.\n const availableModels = await this.modelRegistry.listModels();\n for (const preset of input.presets) {\n if (!preset.model) {\n continue;\n }\n const slashIndex = preset.model.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${preset.model}\" in preset \"${preset.name}\". Expected format: \"<providerId>/<modelId>\".`\n );\n }\n const providerId = preset.model.slice(0, slashIndex);\n const modelId = preset.model.slice(slashIndex + 1);\n const found = availableModels.some(\n m => m.providerId === providerId && m.modelId === modelId\n );\n if (!found) {\n throw new Error(\n `Model \"${preset.model}\" in preset \"${preset.name}\" is not available. Use listModels() to see available models.`\n );\n }\n }\n\n const presets: PersistedProviderPreset[] = await Promise.all(\n input.presets.map(async preset => {\n const existingMatch = existingPresets.find(ep => ep.id === preset.id);\n\n let apiKeyEncrypted: string;\n let apiKeyMasked: string;\n\n if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {\n // Carry forward existing encrypted key\n apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? \"\";\n apiKeyMasked = existingMatch?.apiKeyMasked ?? \"\";\n } else {\n // New plaintext key — encrypt and mask\n apiKeyEncrypted = await this.encryption.encrypt(preset.apiKey);\n apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);\n }\n\n return {\n id: preset.id,\n name: preset.name,\n description: preset.description,\n model: preset.model,\n apiKeyEncrypted,\n apiKeyMasked\n };\n })\n );\n\n return { presets };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ProvidersHandlerImpl,\n dependencies: [Encryption, Masker, AiModelRegistry]\n});\n"],"names":["inputSchema","z","ProvidersHandlerImpl","encryption","masker","modelRegistry","persisted","data","presets","p","internal","existing","input","existingData","existingPresets","availableModels","preset","slashIndex","Error","providerId","modelId","found","m","Promise","existingMatch","ep","apiKeyEncrypted","apiKeyMasked","AiPowerUpsSettingsGroupHandler","Encryption","Masker","AiModelRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"api/features/Providers/ProvidersHandler.js","sources":["../../../../src/api/features/Providers/ProvidersHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { Masker } from \"@webiny/api-core/features/masker/index.js\";\nimport { AiModelRegistry } from \"@webiny/api-core/features/ai/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedProviderPreset, PersistedProviders, ProvidersSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n model: z.string().min(1),\n apiKey: z.string().optional()\n })\n )\n});\n\nclass ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"providers\";\n readonly inputSchema = inputSchema;\n\n constructor(\n private encryption: Encryption.Interface,\n private masker: Masker.Interface,\n private modelRegistry: AiModelRegistry.Interface\n ) {}\n\n mapFromStorage(persisted: unknown): ProvidersSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedProviders;\n const presets = (data.presets ?? []).map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKeyMasked: p.apiKeyMasked ?? \"\",\n apiKeyEncrypted: p.apiKeyEncrypted ?? \"\"\n }));\n\n return { presets };\n }\n\n async mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders> {\n const input = internal as ProvidersSettings;\n const existingData = existing as ProvidersSettings | null;\n const existingPresets = existingData?.presets ?? [];\n\n const availableModels = await this.modelRegistry.listModels();\n for (const preset of input.presets) {\n if (!preset.model) {\n continue;\n }\n const slashIndex = preset.model.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${preset.model}\" in preset \"${preset.name}\". Expected format: \"<providerId>/<modelId>\".`\n );\n }\n const providerId = preset.model.slice(0, slashIndex);\n const modelId = preset.model.slice(slashIndex + 1);\n const found = availableModels.some(\n m => m.providerId === providerId && m.modelId === modelId\n );\n if (!found) {\n throw new Error(\n `Model \"${preset.model}\" in preset \"${preset.name}\" is not available. Use listModels() to see available models.`\n );\n }\n }\n\n const presets: PersistedProviderPreset[] = await Promise.all(\n input.presets.map(async preset => {\n const existingMatch = existingPresets.find(ep => ep.id === preset.id);\n\n let apiKeyEncrypted: string;\n let apiKeyMasked: string;\n\n if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {\n // Carry forward existing encrypted key\n apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? \"\";\n apiKeyMasked = existingMatch?.apiKeyMasked ?? \"\";\n } else {\n // New plaintext key — encrypt and mask\n apiKeyEncrypted = await this.encryption.encrypt(preset.apiKey);\n apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);\n }\n\n return {\n id: preset.id,\n name: preset.name,\n description: preset.description,\n model: preset.model,\n apiKeyEncrypted,\n apiKeyMasked\n };\n })\n );\n\n return { presets };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ProvidersHandlerImpl,\n dependencies: [Encryption, Masker, AiModelRegistry]\n});\n"],"names":["inputSchema","z","ProvidersHandlerImpl","encryption","masker","modelRegistry","persisted","data","presets","p","internal","existing","input","existingData","existingPresets","availableModels","preset","slashIndex","Error","providerId","modelId","found","m","Promise","existingMatch","ep","apiKeyEncrypted","apiKeyMasked","AiPowerUpsSettingsGroupHandler","Encryption","Masker","AiModelRegistry"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IAiPowerUpsSettings } from "../../../api/types.js";
1
+ import type { IAiPowerUpsSettings } from "../../types.js";
2
2
  export interface ProviderPreset {
3
3
  id: string;
4
4
  name: string;
@@ -8,7 +8,7 @@ export interface ProviderPreset {
8
8
  apiKeyMasked: string;
9
9
  apiKeyEncrypted: string;
10
10
  }
11
- declare module "~/api/types.js" {
11
+ declare module "../../types.js" {
12
12
  interface IAiPowerUpsSettings {
13
13
  providers: {
14
14
  presets: ProviderPreset[];
@@ -19,7 +19,7 @@ class UpdateSettingsRepositoryImpl {
19
19
  raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};
20
20
  }
21
21
  const existingInternal = {};
22
- for (const handler of this.handlers)existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name]);
22
+ for (const handler of this.handlers)existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name], raw);
23
23
  const newSettings = input;
24
24
  const invalidFields = {};
25
25
  for (const handler of this.handlers){
@@ -46,7 +46,7 @@ class UpdateSettingsRepositoryImpl {
46
46
  const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);
47
47
  if (writeResult.isFail()) return Result.fail(new Error(String(writeResult.error)));
48
48
  const result = {};
49
- for (const handler of this.handlers)result[handler.name] = handler.mapFromStorage(persisted[handler.name]);
49
+ for (const handler of this.handlers)result[handler.name] = handler.mapFromStorage(persisted[handler.name], persisted);
50
50
  for (const key of Object.keys(persisted))if (!(key in result)) result[key] = persisted[key];
51
51
  const mapped = result;
52
52
  this.cache.set(persisted, mapped);
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/UpdateSettings/UpdateSettingsRepository.js","sources":["../../../../src/api/features/UpdateSettings/UpdateSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport type { OutputErrors } from \"@webiny/utils/createZodError.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { UpdateSettingsRepository } from \"./abstractions.js\";\nimport { SettingsValidationError } from \"./errors.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>> {\n const cached = this.cache.get();\n let raw: Record<string, unknown>;\n\n if (cached) {\n raw = cached.raw;\n } else {\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};\n }\n\n const existingInternal: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name]);\n }\n\n const newSettings = input as unknown as Record<string, unknown>;\n const invalidFields: OutputErrors = {};\n\n for (const handler of this.handlers) {\n const parseResult = await handler.inputSchema.safeParseAsync(newSettings[handler.name]);\n if (!parseResult.success) {\n for (const issue of parseResult.error.issues) {\n const fieldPath = [handler.name, ...issue.path.map(String)].join(\".\");\n invalidFields[fieldPath] = {\n code: issue.code,\n message: issue.message,\n data: { path: issue.path }\n };\n }\n }\n }\n\n if (Object.keys(invalidFields).length > 0) {\n return Result.fail(new SettingsValidationError(invalidFields));\n }\n\n const persisted: Record<string, unknown> = { ...raw };\n for (const handler of this.handlers) {\n persisted[handler.name] = await handler.mapToStorage(\n newSettings[handler.name],\n existingInternal[handler.name]\n );\n }\n\n const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);\n if (writeResult.isFail()) {\n return Result.fail(new Error(String(writeResult.error)));\n }\n\n const result: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(persisted[handler.name]);\n }\n\n for (const key of Object.keys(persisted)) {\n if (!(key in result)) {\n result[key] = persisted[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(persisted, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation(\n {\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n }\n);\n"],"names":["UpdateSettingsRepositoryImpl","keyValueStore","handlers","cache","input","cached","raw","storeResult","AI_POWER_UPS_SETTINGS","existingInternal","handler","newSettings","invalidFields","parseResult","issue","fieldPath","String","Object","Result","SettingsValidationError","persisted","writeResult","Error","result","key","mapped","UpdateSettingsRepositoryImplementation","UpdateSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,QAAQC,KAA0B,EAA+C;QACnF,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIC;QAEJ,IAAID,QACAC,MAAMD,OAAO,GAAG;aACb;YACH,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;YAC1DF,MAAMC,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QACzE;QAEA,MAAME,mBAA4C,CAAC;QACnD,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,gBAAgB,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACJ,GAAG,CAACI,QAAQ,IAAI,CAAC;QAG7E,MAAMC,cAAcP;QACpB,MAAMQ,gBAA8B,CAAC;QAErC,KAAK,MAAMF,WAAW,IAAI,CAAC,QAAQ,CAAE;YACjC,MAAMG,cAAc,MAAMH,QAAQ,WAAW,CAAC,cAAc,CAACC,WAAW,CAACD,QAAQ,IAAI,CAAC;YACtF,IAAI,CAACG,YAAY,OAAO,EACpB,KAAK,MAAMC,SAASD,YAAY,KAAK,CAAC,MAAM,CAAE;gBAC1C,MAAME,YAAY;oBAACL,QAAQ,IAAI;uBAAKI,MAAM,IAAI,CAAC,GAAG,CAACE;iBAAQ,CAAC,IAAI,CAAC;gBACjEJ,aAAa,CAACG,UAAU,GAAG;oBACvB,MAAMD,MAAM,IAAI;oBAChB,SAASA,MAAM,OAAO;oBACtB,MAAM;wBAAE,MAAMA,MAAM,IAAI;oBAAC;gBAC7B;YACJ;QAER;QAEA,IAAIG,OAAO,IAAI,CAACL,eAAe,MAAM,GAAG,GACpC,OAAOM,OAAO,IAAI,CAAC,IAAIC,wBAAwBP;QAGnD,MAAMQ,YAAqC;YAAE,GAAGd,GAAG;QAAC;QACpD,KAAK,MAAMI,WAAW,IAAI,CAAC,QAAQ,CAC/BU,SAAS,CAACV,QAAQ,IAAI,CAAC,GAAG,MAAMA,QAAQ,YAAY,CAChDC,WAAW,CAACD,QAAQ,IAAI,CAAC,EACzBD,gBAAgB,CAACC,QAAQ,IAAI,CAAC;QAItC,MAAMW,cAAc,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACb,uBAAuBY;QACxE,IAAIC,YAAY,MAAM,IAClB,OAAOH,OAAO,IAAI,CAAC,IAAII,MAAMN,OAAOK,YAAY,KAAK;QAGzD,MAAME,SAAkC,CAAC;QACzC,KAAK,MAAMb,WAAW,IAAI,CAAC,QAAQ,CAC/Ba,MAAM,CAACb,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACU,SAAS,CAACV,QAAQ,IAAI,CAAC;QAGzE,KAAK,MAAMc,OAAOP,OAAO,IAAI,CAACG,WAC1B,IAAI,CAAEI,CAAAA,OAAOD,MAAK,GACdA,MAAM,CAACC,IAAI,GAAGJ,SAAS,CAACI,IAAI;QAIpC,MAAMC,SAASF;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACH,WAAWK;QAE1B,OAAOP,OAAO,EAAE,CAACO;IACrB;AACJ;AAEO,MAAMC,yCAAyCC,yBAAyB,oBAAoB,CAC/F;IACI,gBAAgB3B;IAChB,cAAc;QACV4B;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
1
+ {"version":3,"file":"api/features/UpdateSettings/UpdateSettingsRepository.js","sources":["../../../../src/api/features/UpdateSettings/UpdateSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport type { OutputErrors } from \"@webiny/utils/createZodError.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { UpdateSettingsRepository } from \"./abstractions.js\";\nimport { SettingsValidationError } from \"./errors.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>> {\n const cached = this.cache.get();\n let raw: Record<string, unknown>;\n\n if (cached) {\n raw = cached.raw;\n } else {\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};\n }\n\n const existingInternal: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n /*\n * `raw` matters here as much as it does on read. `connections` derives itself from the\n * legacy `providers` section until it has one of its own, and this is what\n * `mapToStorage` diffs against to carry forward an encrypted key the form only ever saw\n * as a mask. Without it, the first save after an upgrade compares against an empty list\n * and silently drops every stored key.\n */\n existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\n }\n\n const newSettings = input as unknown as Record<string, unknown>;\n const invalidFields: OutputErrors = {};\n\n for (const handler of this.handlers) {\n const parseResult = await handler.inputSchema.safeParseAsync(newSettings[handler.name]);\n if (!parseResult.success) {\n for (const issue of parseResult.error.issues) {\n const fieldPath = [handler.name, ...issue.path.map(String)].join(\".\");\n invalidFields[fieldPath] = {\n code: issue.code,\n message: issue.message,\n data: { path: issue.path }\n };\n }\n }\n }\n\n if (Object.keys(invalidFields).length > 0) {\n return Result.fail(new SettingsValidationError(invalidFields));\n }\n\n const persisted: Record<string, unknown> = { ...raw };\n for (const handler of this.handlers) {\n persisted[handler.name] = await handler.mapToStorage(\n newSettings[handler.name],\n existingInternal[handler.name]\n );\n }\n\n const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);\n if (writeResult.isFail()) {\n return Result.fail(new Error(String(writeResult.error)));\n }\n\n const result: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(persisted[handler.name], persisted);\n }\n\n for (const key of Object.keys(persisted)) {\n if (!(key in result)) {\n result[key] = persisted[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(persisted, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation(\n {\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n }\n);\n"],"names":["UpdateSettingsRepositoryImpl","keyValueStore","handlers","cache","input","cached","raw","storeResult","AI_POWER_UPS_SETTINGS","existingInternal","handler","newSettings","invalidFields","parseResult","issue","fieldPath","String","Object","Result","SettingsValidationError","persisted","writeResult","Error","result","key","mapped","UpdateSettingsRepositoryImplementation","UpdateSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,QAAQC,KAA0B,EAA+C;QACnF,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIC;QAEJ,IAAID,QACAC,MAAMD,OAAO,GAAG;aACb;YACH,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;YAC1DF,MAAMC,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QACzE;QAEA,MAAME,mBAA4C,CAAC;QACnD,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAQ/BD,gBAAgB,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACJ,GAAG,CAACI,QAAQ,IAAI,CAAC,EAAEJ;QAG/E,MAAMK,cAAcP;QACpB,MAAMQ,gBAA8B,CAAC;QAErC,KAAK,MAAMF,WAAW,IAAI,CAAC,QAAQ,CAAE;YACjC,MAAMG,cAAc,MAAMH,QAAQ,WAAW,CAAC,cAAc,CAACC,WAAW,CAACD,QAAQ,IAAI,CAAC;YACtF,IAAI,CAACG,YAAY,OAAO,EACpB,KAAK,MAAMC,SAASD,YAAY,KAAK,CAAC,MAAM,CAAE;gBAC1C,MAAME,YAAY;oBAACL,QAAQ,IAAI;uBAAKI,MAAM,IAAI,CAAC,GAAG,CAACE;iBAAQ,CAAC,IAAI,CAAC;gBACjEJ,aAAa,CAACG,UAAU,GAAG;oBACvB,MAAMD,MAAM,IAAI;oBAChB,SAASA,MAAM,OAAO;oBACtB,MAAM;wBAAE,MAAMA,MAAM,IAAI;oBAAC;gBAC7B;YACJ;QAER;QAEA,IAAIG,OAAO,IAAI,CAACL,eAAe,MAAM,GAAG,GACpC,OAAOM,OAAO,IAAI,CAAC,IAAIC,wBAAwBP;QAGnD,MAAMQ,YAAqC;YAAE,GAAGd,GAAG;QAAC;QACpD,KAAK,MAAMI,WAAW,IAAI,CAAC,QAAQ,CAC/BU,SAAS,CAACV,QAAQ,IAAI,CAAC,GAAG,MAAMA,QAAQ,YAAY,CAChDC,WAAW,CAACD,QAAQ,IAAI,CAAC,EACzBD,gBAAgB,CAACC,QAAQ,IAAI,CAAC;QAItC,MAAMW,cAAc,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACb,uBAAuBY;QACxE,IAAIC,YAAY,MAAM,IAClB,OAAOH,OAAO,IAAI,CAAC,IAAII,MAAMN,OAAOK,YAAY,KAAK;QAGzD,MAAME,SAAkC,CAAC;QACzC,KAAK,MAAMb,WAAW,IAAI,CAAC,QAAQ,CAC/Ba,MAAM,CAACb,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACU,SAAS,CAACV,QAAQ,IAAI,CAAC,EAAEU;QAG3E,KAAK,MAAMI,OAAOP,OAAO,IAAI,CAACG,WAC1B,IAAI,CAAEI,CAAAA,OAAOD,MAAK,GACdA,MAAM,CAACC,IAAI,GAAGJ,SAAS,CAACI,IAAI;QAIpC,MAAMC,SAASF;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACH,WAAWK;QAE1B,OAAOP,OAAO,EAAE,CAACO;IACrB;AACJ;AAEO,MAAMC,yCAAyCC,yBAAyB,oBAAoB,CAC/F;IACI,gBAAgB3B;IAChB,cAAc;QACV4B;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
@@ -1,5 +1,5 @@
1
1
  import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
- import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
2
+ import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { WbGeneratePageContentUseCase } from "../../../api/features/WbGeneratePageContent/index.js";
4
4
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
5
5
  export declare const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
@@ -11,18 +11,19 @@ export interface IWbGeneratePageContentTaskInput {
11
11
  excludedFileIds?: string[] | null;
12
12
  readerPersonaId?: string | null;
13
13
  writerPersonaId?: string | null;
14
+ additionalFileIds?: string[] | null;
14
15
  }
15
16
  declare class WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {
16
17
  private identityContext;
17
18
  private generatePageContent;
18
- private websocketService;
19
+ private sendToIdentity;
19
20
  id: string;
20
21
  title: string;
21
22
  description: string;
22
23
  maxIterations: number;
23
24
  isPrivate: boolean;
24
25
  databaseLogs: boolean;
25
- constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, websocketService: WebsocketService.Interface);
26
+ constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, sendToIdentity: WebsocketsSendToIdentityUseCase.Interface);
26
27
  run({ input, controller }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<TaskDefinition.Result<IWbGeneratePageContentTaskInput>>;
27
28
  private sendContentToUser;
28
29
  private sendErrorToUser;
@@ -1,14 +1,14 @@
1
1
  import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
- import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
2
+ import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { compress } from "@webiny/utils/features/compression/legacy/gzip.js";
4
4
  import { WbGeneratePageContentUseCase } from "./index.js";
5
5
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
6
6
  const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
7
7
  class WbGeneratePageContentTaskImpl {
8
- constructor(identityContext, generatePageContent, websocketService){
8
+ constructor(identityContext, generatePageContent, sendToIdentity){
9
9
  this.identityContext = identityContext;
10
10
  this.generatePageContent = generatePageContent;
11
- this.websocketService = websocketService;
11
+ this.sendToIdentity = sendToIdentity;
12
12
  this.id = WB_GENERATE_PAGE_CONTENT_TASK_ID;
13
13
  this.title = "AI Power-Ups - Generate Page Content";
14
14
  this.description = "Generates page content using AI based on a user prompt.";
@@ -18,16 +18,26 @@ class WbGeneratePageContentTaskImpl {
18
18
  }
19
19
  async run({ input, controller }) {
20
20
  if (controller.runtime.isAborted()) return controller.response.aborted();
21
- const result = await this.generatePageContent.execute({
22
- prompt: input.prompt,
23
- components: input.components,
24
- tools: input.tools,
25
- projectId: input.projectId,
26
- excludedFileIds: input.excludedFileIds,
27
- readerPersonaId: input.readerPersonaId,
28
- writerPersonaId: input.writerPersonaId
29
- });
30
21
  const identity = this.identityContext.getIdentity();
22
+ let result;
23
+ try {
24
+ result = await this.generatePageContent.execute({
25
+ prompt: input.prompt,
26
+ components: input.components,
27
+ tools: input.tools,
28
+ projectId: input.projectId,
29
+ excludedFileIds: input.excludedFileIds,
30
+ readerPersonaId: input.readerPersonaId,
31
+ writerPersonaId: input.writerPersonaId,
32
+ additionalFileIds: input.additionalFileIds
33
+ });
34
+ } catch (err) {
35
+ const message = err instanceof Error ? err.message : String(err);
36
+ await this.sendErrorToUser(identity.id, message);
37
+ return controller.response.error({
38
+ message
39
+ });
40
+ }
31
41
  if (result.isFail()) {
32
42
  await this.sendErrorToUser(identity.id, result.error.message);
33
43
  return controller.response.error({
@@ -40,7 +50,7 @@ class WbGeneratePageContentTaskImpl {
40
50
  return controller.response.done("Page content generated successfully.");
41
51
  }
42
52
  async sendContentToUser(identityId, payload, telemetry) {
43
- await this.websocketService.send({
53
+ await this.sendToIdentity.execute({
44
54
  id: identityId
45
55
  }, {
46
56
  action: "aiPowerUps.generatePageContent.content",
@@ -52,7 +62,7 @@ class WbGeneratePageContentTaskImpl {
52
62
  });
53
63
  }
54
64
  async sendErrorToUser(identityId, message) {
55
- await this.websocketService.send({
65
+ await this.sendToIdentity.execute({
56
66
  id: identityId
57
67
  }, {
58
68
  action: "aiPowerUps.generatePageContent.error",
@@ -67,7 +77,7 @@ const WbGeneratePageContentTask = TaskDefinition.createImplementation({
67
77
  dependencies: [
68
78
  IdentityContext,
69
79
  WbGeneratePageContentUseCase,
70
- WebsocketService
80
+ WebsocketsSendToIdentityUseCase
71
81
  ]
72
82
  });
73
83
  export { WB_GENERATE_PAGE_CONTENT_TASK_ID, WbGeneratePageContentTask };
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/WbGeneratePageContent/WbGeneratePageContentTask.js","sources":["../../../../src/api/features/WbGeneratePageContent/WbGeneratePageContentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketService } from \"@webiny/api-websockets/features/WebsocketService/index.js\";\nimport { compress } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { WbGeneratePageContentUseCase } from \"~/api/features/WbGeneratePageContent/index.js\";\nimport type { GenerationTelemetry } from \"~/api/features/WbGeneratePageContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const WB_GENERATE_PAGE_CONTENT_TASK_ID = \"aiPowerUpsGeneratePageContent\";\n\nexport interface IWbGeneratePageContentTaskInput {\n prompt: string;\n components: unknown;\n tools: unknown;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n}\n\nclass WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {\n id = WB_GENERATE_PAGE_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Page Content\";\n description = \"Generates page content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private generatePageContent: WbGeneratePageContentUseCase.Interface,\n private websocketService: WebsocketService.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<\n TaskDefinition.Result<IWbGeneratePageContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const result = await this.generatePageContent.execute({\n prompt: input.prompt,\n components: input.components,\n tools: input.tools,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId\n });\n\n const identity = this.identityContext.getIdentity();\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n const compressed = await compress(result.value.output);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Page content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerationTelemetry\n ) {\n await this.websocketService.send(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.websocketService.send(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nexport const WbGeneratePageContentTask = TaskDefinition.createImplementation({\n implementation: WbGeneratePageContentTaskImpl,\n dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketService]\n});\n"],"names":["WB_GENERATE_PAGE_CONTENT_TASK_ID","WbGeneratePageContentTaskImpl","identityContext","generatePageContent","websocketService","input","controller","result","identity","compressed","compress","payload","identityId","telemetry","message","WbGeneratePageContentTask","TaskDefinition","IdentityContext","WbGeneratePageContentUseCase","WebsocketService"],"mappings":";;;;;AAOO,MAAMA,mCAAmC;AAYhD,MAAMC;IAQF,YACYC,eAA0C,EAC1CC,mBAA2D,EAC3DC,gBAA4C,CACtD;aAHUF,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,gBAAgB,GAAhBA;aAVZ,EAAE,GAAGJ;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;IAMZ;IAEH,MAAM,IAAI,EACNK,KAAK,EACLC,UAAU,EAC8C,EAE1D;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAClD,QAAQF,MAAM,MAAM;YACpB,YAAYA,MAAM,UAAU;YAC5B,OAAOA,MAAM,KAAK;YAClB,WAAWA,MAAM,SAAS;YAC1B,iBAAiBA,MAAM,eAAe;YACtC,iBAAiBA,MAAM,eAAe;YACtC,iBAAiBA,MAAM,eAAe;QAC1C;QAEA,MAAMG,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAID,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACC,SAAS,EAAE,EAAED,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOD,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASC,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAEA,MAAME,aAAa,MAAMC,SAASH,OAAO,KAAK,CAAC,MAAM;QACrD,MAAMI,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACD,SAAS,EAAE,EAAEG,SAASJ,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOD,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVM,UAAkB,EAClBD,OAAe,EACfE,SAA8B,EAChC;QACE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC5B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEE,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC5B;YAAE,IAAIF;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFE;YACJ;QACJ;IAER;AACJ;AAEO,MAAMC,4BAA4BC,eAAe,oBAAoB,CAAC;IACzE,gBAAgBf;IAChB,cAAc;QAACgB;QAAiBC;QAA8BC;KAAiB;AACnF"}
1
+ {"version":3,"file":"api/features/WbGeneratePageContent/WbGeneratePageContentTask.js","sources":["../../../../src/api/features/WbGeneratePageContent/WbGeneratePageContentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketsSendToIdentityUseCase } from \"@webiny/api-websockets/features/SendToIdentity/abstractions.js\";\nimport { compress } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { WbGeneratePageContentUseCase } from \"~/api/features/WbGeneratePageContent/index.js\";\nimport type { GenerationTelemetry } from \"~/api/features/WbGeneratePageContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const WB_GENERATE_PAGE_CONTENT_TASK_ID = \"aiPowerUpsGeneratePageContent\";\n\nexport interface IWbGeneratePageContentTaskInput {\n prompt: string;\n components: unknown;\n tools: unknown;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n additionalFileIds?: string[] | null;\n}\n\nclass WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {\n id = WB_GENERATE_PAGE_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Page Content\";\n description = \"Generates page content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private generatePageContent: WbGeneratePageContentUseCase.Interface,\n private sendToIdentity: WebsocketsSendToIdentityUseCase.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<\n TaskDefinition.Result<IWbGeneratePageContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const identity = this.identityContext.getIdentity();\n\n let result;\n try {\n result = await this.generatePageContent.execute({\n prompt: input.prompt,\n components: input.components,\n tools: input.tools,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId,\n additionalFileIds: input.additionalFileIds\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await this.sendErrorToUser(identity.id, message);\n return controller.response.error({ message });\n }\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n const compressed = await compress(result.value.output);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Page content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerationTelemetry\n ) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nexport const WbGeneratePageContentTask = TaskDefinition.createImplementation({\n implementation: WbGeneratePageContentTaskImpl,\n dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketsSendToIdentityUseCase]\n});\n"],"names":["WB_GENERATE_PAGE_CONTENT_TASK_ID","WbGeneratePageContentTaskImpl","identityContext","generatePageContent","sendToIdentity","input","controller","identity","result","err","message","Error","String","compressed","compress","payload","identityId","telemetry","WbGeneratePageContentTask","TaskDefinition","IdentityContext","WbGeneratePageContentUseCase","WebsocketsSendToIdentityUseCase"],"mappings":";;;;;AAOO,MAAMA,mCAAmC;AAahD,MAAMC;IAQF,YACYC,eAA0C,EAC1CC,mBAA2D,EAC3DC,cAAyD,CACnE;aAHUF,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,cAAc,GAAdA;aAVZ,EAAE,GAAGJ;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;IAMZ;IAEH,MAAM,IAAI,EACNK,KAAK,EACLC,UAAU,EAC8C,EAE1D;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBAC5C,QAAQH,MAAM,MAAM;gBACpB,YAAYA,MAAM,UAAU;gBAC5B,OAAOA,MAAM,KAAK;gBAClB,WAAWA,MAAM,SAAS;gBAC1B,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,mBAAmBA,MAAM,iBAAiB;YAC9C;QACJ,EAAE,OAAOI,KAAK;YACV,MAAMC,UAAUD,eAAeE,QAAQF,IAAI,OAAO,GAAGG,OAAOH;YAC5D,MAAM,IAAI,CAAC,eAAe,CAACF,SAAS,EAAE,EAAEG;YACxC,OAAOJ,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAEI;YAAQ;QAC/C;QAEA,IAAIF,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACD,SAAS,EAAE,EAAEC,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASE,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAEA,MAAMK,aAAa,MAAMC,SAASN,OAAO,KAAK,CAAC,MAAM;QACrD,MAAMO,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACN,SAAS,EAAE,EAAEQ,SAASP,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOF,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVU,UAAkB,EAClBD,OAAe,EACfE,SAA8B,EAChC;QACE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEN,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAIM;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFN;YACJ;QACJ;IAER;AACJ;AAEO,MAAMQ,4BAA4BC,eAAe,oBAAoB,CAAC;IACzE,gBAAgBlB;IAChB,cAAc;QAACmB;QAAiBC;QAA8BC;KAAgC;AAClG"}
@@ -1,20 +1,18 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { Ai } from "@webiny/api-core/features/ai/index.js";
3
3
  import { AiSdkTools } from "@webiny/api-core/features/ai/index.js";
4
- import { Encryption } from "@webiny/api-core/features/encryption/index.js";
5
4
  import { ListTagsUseCase } from "@webiny/api-file-manager/features/file/ListTags/index.js";
6
- import { GetSettingsUseCase } from "../../../api/features/GetSettings/index.js";
5
+ import { ResolveAiCapabilityUseCase } from "../../../api/features/Capabilities/index.js";
7
6
  import { AiPromptContextBuilder } from "../../../api/features/AiPromptContext/index.js";
8
7
  import { WbGeneratePageContentUseCase } from "./abstractions.js";
9
8
  import type { WbGeneratePageContentParams, GeneratePageContentResult } from "./abstractions.js";
10
9
  declare class WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {
11
10
  private promptContextBuilder;
12
- private getSettings;
11
+ private resolveCapability;
13
12
  private ai;
14
13
  private aiSdkTools;
15
- private encryption;
16
14
  private listTags;
17
- constructor(promptContextBuilder: AiPromptContextBuilder.Interface, getSettings: GetSettingsUseCase.Interface, ai: Ai.Interface, aiSdkTools: AiSdkTools.Interface, encryption: Encryption.Interface, listTags: ListTagsUseCase.Interface);
15
+ constructor(promptContextBuilder: AiPromptContextBuilder.Interface, resolveCapability: ResolveAiCapabilityUseCase.Interface, ai: Ai.Interface, aiSdkTools: AiSdkTools.Interface, listTags: ListTagsUseCase.Interface);
18
16
  execute(params: WbGeneratePageContentParams): Promise<Result<GeneratePageContentResult, Error>>;
19
17
  }
20
18
  export declare const WbGeneratePageContentUseCaseImplementation: typeof WbGeneratePageContentUseCaseImpl & {
@@ -1,37 +1,34 @@
1
1
  import { stepCountIs } from "ai";
2
2
  import { Result } from "@webiny/feature/api";
3
3
  import { Ai, AiSdkTools } from "@webiny/api-core/features/ai/index.js";
4
- import { Encryption } from "@webiny/api-core/features/encryption/index.js";
5
4
  import { ListTagsUseCase } from "@webiny/api-file-manager/features/file/ListTags/index.js";
6
- import { GetSettingsUseCase } from "../GetSettings/index.js";
7
- import { AiPromptContextBuilder } from "../AiPromptContext/index.js";
5
+ import { ResolveAiCapabilityUseCase, withAdditionalInstructions } from "../Capabilities/index.js";
6
+ import { WB_GENERATE_PAGE_CAPABILITY } from "./capability.js";
7
+ import { AiPromptContextBuilder, formatAdditionalFilesContext } from "../AiPromptContext/index.js";
8
8
  import { createReadProjectFileTool } from "../AiPromptContext/ReadProjectFileTool.js";
9
9
  import { WbGeneratePageContentUseCase } from "./abstractions.js";
10
10
  import { buildDomainPrompt } from "./buildPrompt.js";
11
- import { LlmJsonResponse } from "./LlmJsonResponse.js";
11
+ import { LlmJsonResponse } from "../../../domain/LlmJsonResponse.js";
12
12
  import { ComponentFilter } from "./ComponentFilter.js";
13
13
  class WbGeneratePageContentUseCaseImpl {
14
- constructor(promptContextBuilder, getSettings, ai, aiSdkTools, encryption, listTags){
14
+ constructor(promptContextBuilder, resolveCapability, ai, aiSdkTools, listTags){
15
15
  this.promptContextBuilder = promptContextBuilder;
16
- this.getSettings = getSettings;
16
+ this.resolveCapability = resolveCapability;
17
17
  this.ai = ai;
18
18
  this.aiSdkTools = aiSdkTools;
19
- this.encryption = encryption;
20
19
  this.listTags = listTags;
21
20
  }
22
21
  async execute(params) {
23
- const settingsResult = await this.getSettings.execute();
24
- if (settingsResult.isFail()) return Result.fail(new Error("Failed to load AI PowerUps settings."));
25
- const settings = settingsResult.value;
26
- const firstProvider = settings.providers.presets[0];
27
- if (!firstProvider) return Result.fail(new Error("No AI provider configured. Add a provider in AI Power Ups settings."));
28
- const apiKey = await this.encryption.decrypt(firstProvider.apiKeyEncrypted);
22
+ const resolved = await this.resolveCapability.execute(WB_GENERATE_PAGE_CAPABILITY);
23
+ if (resolved.isFail()) return Result.fail(resolved.error);
24
+ const capability = resolved.value;
29
25
  const sdkTools = this.aiSdkTools.getToolSet();
30
26
  const context = await this.promptContextBuilder.execute({
31
27
  projectId: params.projectId,
32
28
  readerPersonaId: params.readerPersonaId,
33
29
  writerPersonaId: params.writerPersonaId,
34
- excludedFileIds: params.excludedFileIds
30
+ excludedFileIds: params.excludedFileIds,
31
+ additionalFileIds: params.additionalFileIds
35
32
  });
36
33
  if (context.allProjectFiles.length > 0) {
37
34
  const projectFileTool = createReadProjectFileTool(context.allProjectFiles, context.excludedFileIds);
@@ -45,7 +42,7 @@ class WbGeneratePageContentUseCaseImpl {
45
42
  });
46
43
  const imageTags = tagsResult.isOk() ? tagsResult.value.map((t)=>t.tag) : [];
47
44
  const components = params.components;
48
- const systemText = buildDomainPrompt(components, params.tools, imageTags) + context.toString();
45
+ const systemText = withAdditionalInstructions(capability, buildDomainPrompt(components, params.tools, imageTags) + context.toString());
49
46
  const system = {
50
47
  role: "system",
51
48
  content: systemText,
@@ -59,14 +56,11 @@ class WbGeneratePageContentUseCaseImpl {
59
56
  };
60
57
  try {
61
58
  const aiResult = await this.ai.generateText({
62
- model: firstProvider.model,
63
- connection: {
64
- sdkName: firstProvider.model.split("/")[0],
65
- apiKey
66
- },
59
+ model: capability.model,
60
+ connection: capability.connection,
67
61
  system,
68
62
  toolChoice: "auto",
69
- prompt: params.prompt,
63
+ prompt: params.prompt + formatAdditionalFilesContext(context.additionalFiles),
70
64
  ...Object.keys(sdkTools).length > 0 ? {
71
65
  tools: sdkTools,
72
66
  stopWhen: stepCountIs(20)
@@ -108,10 +102,9 @@ const WbGeneratePageContentUseCaseImplementation = WbGeneratePageContentUseCase.
108
102
  implementation: WbGeneratePageContentUseCaseImpl,
109
103
  dependencies: [
110
104
  AiPromptContextBuilder,
111
- GetSettingsUseCase,
105
+ ResolveAiCapabilityUseCase,
112
106
  Ai,
113
107
  AiSdkTools,
114
- Encryption,
115
108
  ListTagsUseCase
116
109
  ]
117
110
  });