@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.
- package/AiPowerups.d.ts +2 -0
- package/AiPowerups.js +11 -0
- package/AiPowerups.js.map +1 -0
- package/LICENSE +36 -0
- package/README.md +11 -0
- package/admin/Extension.d.ts +2 -0
- package/admin/Extension.js +33 -0
- package/admin/Extension.js.map +1 -0
- package/admin/domain/errors.d.ts +12 -0
- package/admin/domain/errors.js +21 -0
- package/admin/domain/errors.js.map +1 -0
- package/admin/features/feature.d.ts +1 -0
- package/admin/features/feature.js +22 -0
- package/admin/features/feature.js.map +1 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.d.ts +12 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js +45 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -0
- package/admin/features/generatePageContent/GeneratePageContentUseCase.d.ts +11 -0
- package/admin/features/generatePageContent/GeneratePageContentUseCase.js +18 -0
- package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -0
- package/admin/features/generatePageContent/abstractions.d.ts +24 -0
- package/admin/features/generatePageContent/abstractions.js +6 -0
- package/admin/features/generatePageContent/abstractions.js.map +1 -0
- package/admin/features/generatePageContent/feature.d.ts +1 -0
- package/admin/features/generatePageContent/feature.js +13 -0
- package/admin/features/generatePageContent/feature.js.map +1 -0
- package/admin/features/generatePageContent/index.d.ts +3 -0
- package/admin/features/generatePageContent/index.js +2 -0
- package/admin/features/listModels/ListModelsGateway.d.ts +12 -0
- package/admin/features/listModels/ListModelsGateway.js +34 -0
- package/admin/features/listModels/ListModelsGateway.js.map +1 -0
- package/admin/features/listModels/ListModelsRepository.d.ts +13 -0
- package/admin/features/listModels/ListModelsRepository.js +27 -0
- package/admin/features/listModels/ListModelsRepository.js.map +1 -0
- package/admin/features/listModels/ListModelsUseCase.d.ts +10 -0
- package/admin/features/listModels/ListModelsUseCase.js +18 -0
- package/admin/features/listModels/ListModelsUseCase.js.map +1 -0
- package/admin/features/listModels/abstractions.d.ts +28 -0
- package/admin/features/listModels/abstractions.js +7 -0
- package/admin/features/listModels/abstractions.js.map +1 -0
- package/admin/features/listModels/feature.d.ts +3 -0
- package/admin/features/listModels/feature.js +21 -0
- package/admin/features/listModels/feature.js.map +1 -0
- package/admin/features/listModels/index.d.ts +2 -0
- package/admin/features/listModels/index.js +2 -0
- package/admin/features/settings/getSettings/GetSettingsGateway.d.ts +12 -0
- package/admin/features/settings/getSettings/GetSettingsGateway.js +29 -0
- package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -0
- package/admin/features/settings/getSettings/GetSettingsRepository.d.ts +14 -0
- package/admin/features/settings/getSettings/GetSettingsRepository.js +31 -0
- package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -0
- package/admin/features/settings/getSettings/GetSettingsUseCase.d.ts +11 -0
- package/admin/features/settings/getSettings/GetSettingsUseCase.js +18 -0
- package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -0
- package/admin/features/settings/getSettings/abstractions.d.ts +22 -0
- package/admin/features/settings/getSettings/abstractions.js +7 -0
- package/admin/features/settings/getSettings/abstractions.js.map +1 -0
- package/admin/features/settings/getSettings/feature.d.ts +3 -0
- package/admin/features/settings/getSettings/feature.js +21 -0
- package/admin/features/settings/getSettings/feature.js.map +1 -0
- package/admin/features/settings/getSettings/index.d.ts +2 -0
- package/admin/features/settings/getSettings/index.js +2 -0
- package/admin/features/settings/shared/SettingsCache.d.ts +10 -0
- package/admin/features/settings/shared/SettingsCache.js +19 -0
- package/admin/features/settings/shared/SettingsCache.js.map +1 -0
- package/admin/features/settings/shared/abstractions.d.ts +50 -0
- package/admin/features/settings/shared/abstractions.js +5 -0
- package/admin/features/settings/shared/abstractions.js.map +1 -0
- package/admin/features/settings/shared/feature.d.ts +3 -0
- package/admin/features/settings/shared/feature.js +17 -0
- package/admin/features/settings/shared/feature.js.map +1 -0
- package/admin/features/settings/shared/index.d.ts +2 -0
- package/admin/features/settings/shared/index.js +2 -0
- package/admin/features/settings/updateSettings/UpdateSettingsGateway.d.ts +12 -0
- package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +45 -0
- package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -0
- package/admin/features/settings/updateSettings/UpdateSettingsRepository.d.ts +13 -0
- package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +23 -0
- package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -0
- package/admin/features/settings/updateSettings/UpdateSettingsUseCase.d.ts +11 -0
- package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +18 -0
- package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -0
- package/admin/features/settings/updateSettings/abstractions.d.ts +22 -0
- package/admin/features/settings/updateSettings/abstractions.js +7 -0
- package/admin/features/settings/updateSettings/abstractions.js.map +1 -0
- package/admin/features/settings/updateSettings/feature.d.ts +3 -0
- package/admin/features/settings/updateSettings/feature.js +21 -0
- package/admin/features/settings/updateSettings/feature.js.map +1 -0
- package/admin/features/settings/updateSettings/index.d.ts +2 -0
- package/admin/features/settings/updateSettings/index.js +2 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +4 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +50 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +26 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +148 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +18 -0
- package/admin/presentation/AiPowerUpsSettings/abstractions.js +5 -0
- package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/feature.d.ts +3 -0
- package/admin/presentation/AiPowerUpsSettings/feature.js +25 -0
- package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/index.d.ts +3 -0
- package/admin/presentation/AiPowerUpsSettings/index.js +3 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +17 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +5 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.d.ts +4 -0
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js +27 -0
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js.map +1 -0
- package/admin/presentation/ProjectsSettings.d.ts +11 -0
- package/admin/presentation/ProjectsSettings.js +56 -0
- package/admin/presentation/ProjectsSettings.js.map +1 -0
- package/admin/presentation/ProvidersSettings.d.ts +16 -0
- package/admin/presentation/ProvidersSettings.js +46 -0
- package/admin/presentation/ProvidersSettings.js.map +1 -0
- package/admin/presentation/ReaderPersonasSettings.d.ts +11 -0
- package/admin/presentation/ReaderPersonasSettings.js +37 -0
- package/admin/presentation/ReaderPersonasSettings.js.map +1 -0
- package/admin/presentation/WbContentGeneration/Extension.d.ts +2 -0
- package/admin/presentation/WbContentGeneration/Extension.js +22 -0
- package/admin/presentation/WbContentGeneration/Extension.js.map +1 -0
- package/admin/presentation/WbContentGeneration/GenerateContentButton.d.ts +2 -0
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js +19 -0
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -0
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +21 -0
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +105 -0
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -0
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +38 -0
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +228 -0
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -0
- package/admin/presentation/WbContentGeneration/PROCESS_IDEA.md +190 -0
- package/admin/presentation/WbContentGeneration/abstractions.d.ts +30 -0
- package/admin/presentation/WbContentGeneration/abstractions.js +5 -0
- package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -0
- package/admin/presentation/WbContentGeneration/decompressGzipBase64.d.ts +1 -0
- package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +13 -0
- package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -0
- package/admin/presentation/WbContentGeneration/feature.d.ts +3 -0
- package/admin/presentation/WbContentGeneration/feature.js +17 -0
- package/admin/presentation/WbContentGeneration/feature.js.map +1 -0
- package/admin/presentation/WriterPersonasSettings.d.ts +11 -0
- package/admin/presentation/WriterPersonasSettings.js +37 -0
- package/admin/presentation/WriterPersonasSettings.js.map +1 -0
- package/admin/routes.d.ts +4 -0
- package/admin/routes.js +10 -0
- package/admin/routes.js.map +1 -0
- package/api/Extension.d.ts +4 -0
- package/api/Extension.js +37 -0
- package/api/Extension.js.map +1 -0
- package/api/constants.d.ts +1 -0
- package/api/constants.js +4 -0
- package/api/constants.js.map +1 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +11 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +27 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +34 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +140 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
- package/api/features/AiImageEnrichment/feature.d.ts +4 -0
- package/api/features/AiImageEnrichment/feature.js +13 -0
- package/api/features/AiImageEnrichment/feature.js.map +1 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +12 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.js +103 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.d.ts +22 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.js +76 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.js.map +1 -0
- package/api/features/AiPromptContext/ProjectFileCache.d.ts +16 -0
- package/api/features/AiPromptContext/ProjectFileCache.js +61 -0
- package/api/features/AiPromptContext/ProjectFileCache.js.map +1 -0
- package/api/features/AiPromptContext/ProjectSection.d.ts +4 -0
- package/api/features/AiPromptContext/ProjectSection.js +35 -0
- package/api/features/AiPromptContext/ProjectSection.js.map +1 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.d.ts +3 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.js +36 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.js.map +1 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.d.ts +4 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.js +10 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.js.map +1 -0
- package/api/features/AiPromptContext/WriterPersonaSection.d.ts +4 -0
- package/api/features/AiPromptContext/WriterPersonaSection.js +10 -0
- package/api/features/AiPromptContext/WriterPersonaSection.js.map +1 -0
- package/api/features/AiPromptContext/abstractions.d.ts +68 -0
- package/api/features/AiPromptContext/abstractions.js +7 -0
- package/api/features/AiPromptContext/abstractions.js.map +1 -0
- package/api/features/AiPromptContext/feature.d.ts +4 -0
- package/api/features/AiPromptContext/feature.js +15 -0
- package/api/features/AiPromptContext/feature.js.map +1 -0
- package/api/features/AiPromptContext/index.d.ts +1 -0
- package/api/features/AiPromptContext/index.js +1 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.d.ts +11 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js +34 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js.map +1 -0
- package/api/features/ExtractFrontmatter/feature.d.ts +4 -0
- package/api/features/ExtractFrontmatter/feature.js +11 -0
- package/api/features/ExtractFrontmatter/feature.js.map +1 -0
- package/api/features/GetSettings/GetSettingsRepository.d.ts +16 -0
- package/api/features/GetSettings/GetSettingsRepository.js +40 -0
- package/api/features/GetSettings/GetSettingsRepository.js.map +1 -0
- package/api/features/GetSettings/GetSettingsUseCase.d.ts +10 -0
- package/api/features/GetSettings/GetSettingsUseCase.js +18 -0
- package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -0
- package/api/features/GetSettings/abstractions.d.ts +16 -0
- package/api/features/GetSettings/abstractions.js +6 -0
- package/api/features/GetSettings/abstractions.js.map +1 -0
- package/api/features/GetSettings/feature.d.ts +4 -0
- package/api/features/GetSettings/feature.js +13 -0
- package/api/features/GetSettings/feature.js.map +1 -0
- package/api/features/GetSettings/index.d.ts +1 -0
- package/api/features/GetSettings/index.js +1 -0
- package/api/features/Projects/ProjectsHandler.d.ts +31 -0
- package/api/features/Projects/ProjectsHandler.js +103 -0
- package/api/features/Projects/ProjectsHandler.js.map +1 -0
- package/api/features/Projects/feature.d.ts +4 -0
- package/api/features/Projects/feature.js +11 -0
- package/api/features/Projects/feature.js.map +1 -0
- package/api/features/Projects/types.d.ts +50 -0
- package/api/features/Projects/types.js +0 -0
- package/api/features/Providers/ProvidersGraphQLMapper.d.ts +21 -0
- package/api/features/Providers/ProvidersGraphQLMapper.js +39 -0
- package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -0
- package/api/features/Providers/ProvidersHandler.d.ts +26 -0
- package/api/features/Providers/ProvidersHandler.js +79 -0
- package/api/features/Providers/ProvidersHandler.js.map +1 -0
- package/api/features/Providers/feature.d.ts +4 -0
- package/api/features/Providers/feature.js +13 -0
- package/api/features/Providers/feature.js.map +1 -0
- package/api/features/Providers/index.d.ts +1 -0
- package/api/features/Providers/index.js +0 -0
- package/api/features/Providers/types.d.ts +29 -0
- package/api/features/Providers/types.js +0 -0
- package/api/features/ReaderPersonas/ReaderPersonasHandler.d.ts +20 -0
- package/api/features/ReaderPersonas/ReaderPersonasHandler.js +43 -0
- package/api/features/ReaderPersonas/ReaderPersonasHandler.js.map +1 -0
- package/api/features/ReaderPersonas/feature.d.ts +4 -0
- package/api/features/ReaderPersonas/feature.js +11 -0
- package/api/features/ReaderPersonas/feature.js.map +1 -0
- package/api/features/ReaderPersonas/index.d.ts +2 -0
- package/api/features/ReaderPersonas/index.js +1 -0
- package/api/features/ReaderPersonas/types.d.ts +24 -0
- package/api/features/ReaderPersonas/types.js +0 -0
- package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +16 -0
- package/api/features/UpdateSettings/UpdateSettingsRepository.js +71 -0
- package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -0
- package/api/features/UpdateSettings/UpdateSettingsUseCase.d.ts +13 -0
- package/api/features/UpdateSettings/UpdateSettingsUseCase.js +30 -0
- package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -0
- package/api/features/UpdateSettings/abstractions.d.ts +36 -0
- package/api/features/UpdateSettings/abstractions.js +8 -0
- package/api/features/UpdateSettings/abstractions.js.map +1 -0
- package/api/features/UpdateSettings/errors.d.ts +10 -0
- package/api/features/UpdateSettings/errors.js +14 -0
- package/api/features/UpdateSettings/errors.js.map +1 -0
- package/api/features/UpdateSettings/events.d.ts +10 -0
- package/api/features/UpdateSettings/events.js +21 -0
- package/api/features/UpdateSettings/events.js.map +1 -0
- package/api/features/UpdateSettings/feature.d.ts +4 -0
- package/api/features/UpdateSettings/feature.js +13 -0
- package/api/features/UpdateSettings/feature.js.map +1 -0
- package/api/features/UpdateSettings/index.d.ts +1 -0
- package/api/features/UpdateSettings/index.js +1 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +33 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +75 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +21 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +106 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -0
- package/api/features/WbGeneratePageContent/abstractions.d.ts +28 -0
- package/api/features/WbGeneratePageContent/abstractions.js +5 -0
- package/api/features/WbGeneratePageContent/abstractions.js.map +1 -0
- package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -0
- package/api/features/WbGeneratePageContent/buildPrompt.js +143 -0
- package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -0
- package/api/features/WbGeneratePageContent/feature.d.ts +4 -0
- package/api/features/WbGeneratePageContent/feature.js +13 -0
- package/api/features/WbGeneratePageContent/feature.js.map +1 -0
- package/api/features/WbGeneratePageContent/index.d.ts +1 -0
- package/api/features/WbGeneratePageContent/index.js +1 -0
- package/api/features/WriterPersonas/WriterPersonasHandler.d.ts +20 -0
- package/api/features/WriterPersonas/WriterPersonasHandler.js +43 -0
- package/api/features/WriterPersonas/WriterPersonasHandler.js.map +1 -0
- package/api/features/WriterPersonas/feature.d.ts +4 -0
- package/api/features/WriterPersonas/feature.js +11 -0
- package/api/features/WriterPersonas/feature.js.map +1 -0
- package/api/features/WriterPersonas/index.d.ts +2 -0
- package/api/features/WriterPersonas/index.js +1 -0
- package/api/features/WriterPersonas/types.d.ts +24 -0
- package/api/features/WriterPersonas/types.js +0 -0
- package/api/features/shared/SettingsCache.d.ts +12 -0
- package/api/features/shared/SettingsCache.js +22 -0
- package/api/features/shared/SettingsCache.js.map +1 -0
- package/api/features/shared/abstractions.d.ts +33 -0
- package/api/features/shared/abstractions.js +7 -0
- package/api/features/shared/abstractions.js.map +1 -0
- package/api/features/shared/index.d.ts +3 -0
- package/api/features/shared/index.js +1 -0
- package/api/graphql/AiPowerUpsSettingsGraphQLMapper.d.ts +13 -0
- package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js +44 -0
- package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js.map +1 -0
- package/api/graphql/BaseGraphQLSchema.d.ts +8 -0
- package/api/graphql/BaseGraphQLSchema.js +133 -0
- package/api/graphql/BaseGraphQLSchema.js.map +1 -0
- package/api/graphql/abstractions.d.ts +9 -0
- package/api/graphql/abstractions.js +5 -0
- package/api/graphql/abstractions.js.map +1 -0
- package/api/types.d.ts +5 -0
- package/api/types.js +3 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
const UpdateSettingsRepository = createAbstraction("AiPowerUpsUpdateSettingsRepository");
|
|
3
|
+
const UpdateSettingsUseCase = createAbstraction("AiPowerUpsUpdateSettingsUseCase");
|
|
4
|
+
const AiPowerUpsSettingsBeforeUpdateEventHandler = createAbstraction("AiPowerUpsSettingsBeforeUpdateEventHandler");
|
|
5
|
+
const AiPowerUpsSettingsAfterUpdateEventHandler = createAbstraction("AiPowerUpsSettingsAfterUpdateEventHandler");
|
|
6
|
+
export { AiPowerUpsSettingsAfterUpdateEventHandler, AiPowerUpsSettingsBeforeUpdateEventHandler, UpdateSettingsRepository, UpdateSettingsUseCase };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/abstractions.js","sources":["../../../../src/api/features/UpdateSettings/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface IUpdateSettingsRepository {\n execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>>;\n}\n\nexport const UpdateSettingsRepository = createAbstraction<IUpdateSettingsRepository>(\n \"AiPowerUpsUpdateSettingsRepository\"\n);\n\nexport namespace UpdateSettingsRepository {\n export type Interface = IUpdateSettingsRepository;\n export type Return = Promise<Result<IAiPowerUpsSettings, Error>>;\n}\n\nexport interface IUpdateSettingsUseCase {\n execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>>;\n}\n\nexport const UpdateSettingsUseCase = createAbstraction<IUpdateSettingsUseCase>(\n \"AiPowerUpsUpdateSettingsUseCase\"\n);\n\nexport namespace UpdateSettingsUseCase {\n export type Interface = IUpdateSettingsUseCase;\n export type Return = Promise<Result<IAiPowerUpsSettings, Error>>;\n export type Params = IAiPowerUpsSettings;\n}\n\n// Domain events\nexport interface AiPowerUpsSettingsBeforeUpdatePayload {\n input: IAiPowerUpsSettings;\n}\n\nexport interface AiPowerUpsSettingsAfterUpdatePayload {\n settings: IAiPowerUpsSettings;\n}\n\nexport const AiPowerUpsSettingsBeforeUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>\n>(\"AiPowerUpsSettingsBeforeUpdateEventHandler\");\n\nexport namespace AiPowerUpsSettingsBeforeUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>;\n export type Event = DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>;\n}\n\nexport const AiPowerUpsSettingsAfterUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>\n>(\"AiPowerUpsSettingsAfterUpdateEventHandler\");\n\nexport namespace AiPowerUpsSettingsAfterUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>;\n export type Event = DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>;\n}\n"],"names":["UpdateSettingsRepository","createAbstraction","UpdateSettingsUseCase","AiPowerUpsSettingsBeforeUpdateEventHandler","AiPowerUpsSettingsAfterUpdateEventHandler"],"mappings":";AAQO,MAAMA,2BAA2BC,kBACpC;AAYG,MAAMC,wBAAwBD,kBACjC;AAkBG,MAAME,6CAA6CF,kBAExD;AAOK,MAAMG,4CAA4CH,kBAEvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseError } from "@webiny/feature/api";
|
|
2
|
+
import type { OutputErrors } from "@webiny/utils/createZodError.js";
|
|
3
|
+
interface ValidationParams {
|
|
4
|
+
invalidFields: OutputErrors;
|
|
5
|
+
}
|
|
6
|
+
export declare class SettingsValidationError extends BaseError<ValidationParams> {
|
|
7
|
+
readonly code: "AiPowerUps/Settings/ValidationError";
|
|
8
|
+
constructor(invalidFields: OutputErrors);
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseError } from "@webiny/feature/api";
|
|
2
|
+
class SettingsValidationError extends BaseError {
|
|
3
|
+
constructor(invalidFields){
|
|
4
|
+
super({
|
|
5
|
+
message: "Validation failed.",
|
|
6
|
+
data: {
|
|
7
|
+
invalidFields
|
|
8
|
+
}
|
|
9
|
+
}), this.code = "AiPowerUps/Settings/ValidationError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export { SettingsValidationError };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/errors.js","sources":["../../../../src/api/features/UpdateSettings/errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\nimport type { OutputErrors } from \"@webiny/utils/createZodError.js\";\n\ninterface ValidationParams {\n invalidFields: OutputErrors;\n}\n\nexport class SettingsValidationError extends BaseError<ValidationParams> {\n override readonly code = \"AiPowerUps/Settings/ValidationError\" as const;\n\n constructor(invalidFields: OutputErrors) {\n super({\n message: \"Validation failed.\",\n data: { invalidFields }\n });\n }\n}\n"],"names":["SettingsValidationError","BaseError","invalidFields"],"mappings":";AAOO,MAAMA,gCAAgCC;IAGzC,YAAYC,aAA2B,CAAE;QACrC,KAAK,CAAC;YACF,SAAS;YACT,MAAM;gBAAEA;YAAc;QAC1B,SANc,IAAI,GAAG;IAOzB;AACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import type { AiPowerUpsSettingsBeforeUpdatePayload, AiPowerUpsSettingsAfterUpdatePayload } from "./abstractions.js";
|
|
3
|
+
export declare class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload> {
|
|
4
|
+
eventType: "ai-PowerUps.settings.beforeUpdate";
|
|
5
|
+
getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>>;
|
|
6
|
+
}
|
|
7
|
+
export declare class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent<AiPowerUpsSettingsAfterUpdatePayload> {
|
|
8
|
+
eventType: "ai-PowerUps.settings.afterUpdate";
|
|
9
|
+
getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
+
import { AiPowerUpsSettingsAfterUpdateEventHandler, AiPowerUpsSettingsBeforeUpdateEventHandler } from "./abstractions.js";
|
|
3
|
+
class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent {
|
|
4
|
+
getHandlerAbstraction() {
|
|
5
|
+
return AiPowerUpsSettingsBeforeUpdateEventHandler;
|
|
6
|
+
}
|
|
7
|
+
constructor(...args){
|
|
8
|
+
super(...args), this.eventType = "ai-PowerUps.settings.beforeUpdate";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent {
|
|
12
|
+
getHandlerAbstraction() {
|
|
13
|
+
return AiPowerUpsSettingsAfterUpdateEventHandler;
|
|
14
|
+
}
|
|
15
|
+
constructor(...args){
|
|
16
|
+
super(...args), this.eventType = "ai-PowerUps.settings.afterUpdate";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export { AiPowerUpsSettingsAfterUpdateEvent, AiPowerUpsSettingsBeforeUpdateEvent };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/events.js","sources":["../../../../src/api/features/UpdateSettings/events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n AiPowerUpsSettingsBeforeUpdateEventHandler,\n AiPowerUpsSettingsAfterUpdateEventHandler\n} from \"./abstractions.js\";\nimport type {\n AiPowerUpsSettingsBeforeUpdatePayload,\n AiPowerUpsSettingsAfterUpdatePayload\n} from \"./abstractions.js\";\n\nexport class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload> {\n eventType = \"ai-PowerUps.settings.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return AiPowerUpsSettingsBeforeUpdateEventHandler;\n }\n}\n\nexport class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent<AiPowerUpsSettingsAfterUpdatePayload> {\n eventType = \"ai-PowerUps.settings.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return AiPowerUpsSettingsAfterUpdateEventHandler;\n }\n}\n"],"names":["AiPowerUpsSettingsBeforeUpdateEvent","DomainEvent","AiPowerUpsSettingsBeforeUpdateEventHandler","AiPowerUpsSettingsAfterUpdateEvent","AiPowerUpsSettingsAfterUpdateEventHandler"],"mappings":";;AAUO,MAAMA,4CAA4CC;IAGrD,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMC,2CAA2CF;IAGpD,wBAAwB;QACpB,OAAOG;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { UpdateSettingsRepositoryImplementation } from "./UpdateSettingsRepository.js";
|
|
3
|
+
import { UpdateSettingsUseCaseImplementation } from "./UpdateSettingsUseCase.js";
|
|
4
|
+
const UpdateSettingsFeature = createFeature({
|
|
5
|
+
name: "AiPowerUpsUpdateSettings",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(UpdateSettingsRepositoryImplementation).inSingletonScope();
|
|
8
|
+
container.register(UpdateSettingsUseCaseImplementation);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export { UpdateSettingsFeature };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/feature.js","sources":["../../../../src/api/features/UpdateSettings/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateSettingsRepositoryImplementation } from \"./UpdateSettingsRepository.js\";\nimport { UpdateSettingsUseCaseImplementation } from \"./UpdateSettingsUseCase.js\";\n\nexport const UpdateSettingsFeature = createFeature({\n name: \"AiPowerUpsUpdateSettings\",\n register(container) {\n container.register(UpdateSettingsRepositoryImplementation).inSingletonScope();\n container.register(UpdateSettingsUseCaseImplementation);\n }\n});\n"],"names":["UpdateSettingsFeature","createFeature","container","UpdateSettingsRepositoryImplementation","UpdateSettingsUseCaseImplementation"],"mappings":";;;AAIO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,wCAAwC,gBAAgB;QAC3ED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { UpdateSettingsUseCase, AiPowerUpsSettingsBeforeUpdateEventHandler, AiPowerUpsSettingsAfterUpdateEventHandler } from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AiPowerUpsSettingsAfterUpdateEventHandler, AiPowerUpsSettingsBeforeUpdateEventHandler, UpdateSettingsUseCase } from "./abstractions.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
2
|
+
import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
|
|
3
|
+
import { WbGeneratePageContentUseCase } from "../../../api/features/WbGeneratePageContent/index.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
5
|
+
export declare const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
|
|
6
|
+
export interface IWbGeneratePageContentTaskInput {
|
|
7
|
+
prompt: string;
|
|
8
|
+
components: unknown;
|
|
9
|
+
tools: unknown;
|
|
10
|
+
projectId?: string | null;
|
|
11
|
+
excludedFileIds?: string[] | null;
|
|
12
|
+
readerPersonaId?: string | null;
|
|
13
|
+
writerPersonaId?: string | null;
|
|
14
|
+
}
|
|
15
|
+
declare class WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {
|
|
16
|
+
private identityContext;
|
|
17
|
+
private generatePageContent;
|
|
18
|
+
private websocketService;
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
maxIterations: number;
|
|
23
|
+
isPrivate: boolean;
|
|
24
|
+
databaseLogs: boolean;
|
|
25
|
+
constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, websocketService: WebsocketService.Interface);
|
|
26
|
+
run({ input, controller }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<TaskDefinition.Result<IWbGeneratePageContentTaskInput>>;
|
|
27
|
+
private sendContentToUser;
|
|
28
|
+
private sendErrorToUser;
|
|
29
|
+
}
|
|
30
|
+
export declare const WbGeneratePageContentTask: typeof WbGeneratePageContentTaskImpl & {
|
|
31
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
2
|
+
import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
|
|
3
|
+
import { compress } from "@webiny/utils/features/compression/legacy/gzip.js";
|
|
4
|
+
import { WbGeneratePageContentUseCase } from "./index.js";
|
|
5
|
+
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
6
|
+
const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
|
|
7
|
+
class WbGeneratePageContentTaskImpl {
|
|
8
|
+
constructor(identityContext, generatePageContent, websocketService){
|
|
9
|
+
this.identityContext = identityContext;
|
|
10
|
+
this.generatePageContent = generatePageContent;
|
|
11
|
+
this.websocketService = websocketService;
|
|
12
|
+
this.id = WB_GENERATE_PAGE_CONTENT_TASK_ID;
|
|
13
|
+
this.title = "AI Power-Ups - Generate Page Content";
|
|
14
|
+
this.description = "Generates page content using AI based on a user prompt.";
|
|
15
|
+
this.maxIterations = 1;
|
|
16
|
+
this.isPrivate = true;
|
|
17
|
+
this.databaseLogs = false;
|
|
18
|
+
}
|
|
19
|
+
async run({ input, controller }) {
|
|
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
|
+
const identity = this.identityContext.getIdentity();
|
|
31
|
+
if (result.isFail()) {
|
|
32
|
+
await this.sendErrorToUser(identity.id, result.error.message);
|
|
33
|
+
return controller.response.error({
|
|
34
|
+
message: result.error.message
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const compressed = await compress(result.value.output);
|
|
38
|
+
const payload = compressed.toString("base64");
|
|
39
|
+
await this.sendContentToUser(identity.id, payload, result.value.telemetry);
|
|
40
|
+
return controller.response.done("Page content generated successfully.");
|
|
41
|
+
}
|
|
42
|
+
async sendContentToUser(identityId, payload, telemetry) {
|
|
43
|
+
await this.websocketService.send({
|
|
44
|
+
id: identityId
|
|
45
|
+
}, {
|
|
46
|
+
action: "aiPowerUps.generatePageContent.content",
|
|
47
|
+
data: {
|
|
48
|
+
compression: "gzip",
|
|
49
|
+
value: payload,
|
|
50
|
+
telemetry
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async sendErrorToUser(identityId, message) {
|
|
55
|
+
await this.websocketService.send({
|
|
56
|
+
id: identityId
|
|
57
|
+
}, {
|
|
58
|
+
action: "aiPowerUps.generatePageContent.error",
|
|
59
|
+
data: {
|
|
60
|
+
message
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const WbGeneratePageContentTask = TaskDefinition.createImplementation({
|
|
66
|
+
implementation: WbGeneratePageContentTaskImpl,
|
|
67
|
+
dependencies: [
|
|
68
|
+
IdentityContext,
|
|
69
|
+
WbGeneratePageContentUseCase,
|
|
70
|
+
WebsocketService
|
|
71
|
+
]
|
|
72
|
+
});
|
|
73
|
+
export { WB_GENERATE_PAGE_CONTENT_TASK_ID, WbGeneratePageContentTask };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=WbGeneratePageContentTask.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Ai } from "@webiny/api-core/features/ai/index.js";
|
|
3
|
+
import { AiSdkTools } from "@webiny/api-core/features/ai/index.js";
|
|
4
|
+
import { Encryption } from "@webiny/api-core/features/encryption/index.js";
|
|
5
|
+
import { GetSettingsUseCase } from "../../../api/features/GetSettings/index.js";
|
|
6
|
+
import { AiPromptContextBuilder } from "../../../api/features/AiPromptContext/index.js";
|
|
7
|
+
import { WbGeneratePageContentUseCase } from "./abstractions.js";
|
|
8
|
+
import type { WbGeneratePageContentParams, GeneratePageContentResult } from "./abstractions.js";
|
|
9
|
+
declare class WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {
|
|
10
|
+
private promptContextBuilder;
|
|
11
|
+
private getSettings;
|
|
12
|
+
private ai;
|
|
13
|
+
private aiSdkTools;
|
|
14
|
+
private encryption;
|
|
15
|
+
constructor(promptContextBuilder: AiPromptContextBuilder.Interface, getSettings: GetSettingsUseCase.Interface, ai: Ai.Interface, aiSdkTools: AiSdkTools.Interface, encryption: Encryption.Interface);
|
|
16
|
+
execute(params: WbGeneratePageContentParams): Promise<Result<GeneratePageContentResult, Error>>;
|
|
17
|
+
}
|
|
18
|
+
export declare const WbGeneratePageContentUseCaseImplementation: typeof WbGeneratePageContentUseCaseImpl & {
|
|
19
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbGeneratePageContentUseCase>;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { stepCountIs } from "ai";
|
|
2
|
+
import { Result } from "@webiny/feature/api";
|
|
3
|
+
import { Ai, AiSdkTools } from "@webiny/api-core/features/ai/index.js";
|
|
4
|
+
import { Encryption } from "@webiny/api-core/features/encryption/index.js";
|
|
5
|
+
import { GetSettingsUseCase } from "../GetSettings/index.js";
|
|
6
|
+
import { AiPromptContextBuilder } from "../AiPromptContext/index.js";
|
|
7
|
+
import { createReadProjectFileTool } from "../AiPromptContext/ReadProjectFileTool.js";
|
|
8
|
+
import { WbGeneratePageContentUseCase } from "./abstractions.js";
|
|
9
|
+
import { buildDomainPrompt } from "./buildPrompt.js";
|
|
10
|
+
function stripCodeFence(text) {
|
|
11
|
+
return text.replace(/^```(?:json)?\s*\n?/, "").replace(/\n?```\s*$/, "").trim();
|
|
12
|
+
}
|
|
13
|
+
class WbGeneratePageContentUseCaseImpl {
|
|
14
|
+
constructor(promptContextBuilder, getSettings, ai, aiSdkTools, encryption){
|
|
15
|
+
this.promptContextBuilder = promptContextBuilder;
|
|
16
|
+
this.getSettings = getSettings;
|
|
17
|
+
this.ai = ai;
|
|
18
|
+
this.aiSdkTools = aiSdkTools;
|
|
19
|
+
this.encryption = encryption;
|
|
20
|
+
}
|
|
21
|
+
async execute(params) {
|
|
22
|
+
const settingsResult = await this.getSettings.execute();
|
|
23
|
+
if (settingsResult.isFail()) return Result.fail(new Error("Failed to load AI PowerUps settings."));
|
|
24
|
+
const settings = settingsResult.value;
|
|
25
|
+
const firstProvider = settings.providers.presets[0];
|
|
26
|
+
if (!firstProvider) return Result.fail(new Error("No AI provider configured. Add a provider in AI Power Ups settings."));
|
|
27
|
+
const apiKey = await this.encryption.decrypt(firstProvider.apiKeyEncrypted);
|
|
28
|
+
const sdkTools = this.aiSdkTools.getToolSet();
|
|
29
|
+
const context = await this.promptContextBuilder.execute({
|
|
30
|
+
projectId: params.projectId,
|
|
31
|
+
readerPersonaId: params.readerPersonaId,
|
|
32
|
+
writerPersonaId: params.writerPersonaId,
|
|
33
|
+
excludedFileIds: params.excludedFileIds
|
|
34
|
+
});
|
|
35
|
+
if (context.allProjectFiles.length > 0) {
|
|
36
|
+
const projectFileTool = createReadProjectFileTool(context.allProjectFiles, context.excludedFileIds);
|
|
37
|
+
Object.assign(sdkTools, projectFileTool);
|
|
38
|
+
}
|
|
39
|
+
const systemText = buildDomainPrompt(params.components, params.tools) + context.toString();
|
|
40
|
+
const system = {
|
|
41
|
+
role: "system",
|
|
42
|
+
content: systemText,
|
|
43
|
+
providerOptions: {
|
|
44
|
+
anthropic: {
|
|
45
|
+
cacheControl: {
|
|
46
|
+
type: "ephemeral"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
try {
|
|
52
|
+
const aiResult = await this.ai.generateText({
|
|
53
|
+
model: firstProvider.model,
|
|
54
|
+
connection: {
|
|
55
|
+
sdkName: firstProvider.model.split("/")[0],
|
|
56
|
+
apiKey
|
|
57
|
+
},
|
|
58
|
+
system,
|
|
59
|
+
toolChoice: "auto",
|
|
60
|
+
prompt: params.prompt,
|
|
61
|
+
...Object.keys(sdkTools).length > 0 ? {
|
|
62
|
+
tools: sdkTools,
|
|
63
|
+
stopWhen: stepCountIs(20)
|
|
64
|
+
} : {}
|
|
65
|
+
});
|
|
66
|
+
const text = aiResult.text || (aiResult.steps.filter((step)=>step.text.length > 0).pop()?.text ?? "");
|
|
67
|
+
const output = stripCodeFence(text);
|
|
68
|
+
const filesRead = new Set();
|
|
69
|
+
let toolCallsMade = 0;
|
|
70
|
+
for (const step of aiResult.steps)for (const call of step.toolCalls){
|
|
71
|
+
toolCallsMade++;
|
|
72
|
+
if ("read_project_file" === call.toolName) {
|
|
73
|
+
const input = call.input;
|
|
74
|
+
if (input.fileId) filesRead.add(input.fileId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const telemetry = {
|
|
78
|
+
filesRead: [
|
|
79
|
+
...filesRead
|
|
80
|
+
],
|
|
81
|
+
cacheHit: context.cacheHit,
|
|
82
|
+
toolCallsMade,
|
|
83
|
+
totalSteps: aiResult.steps.length
|
|
84
|
+
};
|
|
85
|
+
return Result.ok({
|
|
86
|
+
output,
|
|
87
|
+
telemetry
|
|
88
|
+
});
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return Result.fail(new Error(`AI generation failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const WbGeneratePageContentUseCaseImplementation = WbGeneratePageContentUseCase.createImplementation({
|
|
95
|
+
implementation: WbGeneratePageContentUseCaseImpl,
|
|
96
|
+
dependencies: [
|
|
97
|
+
AiPromptContextBuilder,
|
|
98
|
+
GetSettingsUseCase,
|
|
99
|
+
Ai,
|
|
100
|
+
AiSdkTools,
|
|
101
|
+
Encryption
|
|
102
|
+
]
|
|
103
|
+
});
|
|
104
|
+
export { WbGeneratePageContentUseCaseImplementation };
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=WbGeneratePageContentUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js","sources":["../../../../src/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.ts"],"sourcesContent":["import { stepCountIs } from \"ai\";\nimport { Result } from \"@webiny/feature/api\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { AiSdkTools } from \"@webiny/api-core/features/ai/index.js\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { AiPromptContextBuilder } from \"~/api/features/AiPromptContext/index.js\";\nimport { createReadProjectFileTool } from \"~/api/features/AiPromptContext/ReadProjectFileTool.js\";\nimport { WbGeneratePageContentUseCase } from \"./abstractions.js\";\nimport type {\n WbGeneratePageContentParams,\n GeneratePageContentResult,\n GenerationTelemetry\n} from \"./abstractions.js\";\nimport { buildDomainPrompt } from \"./buildPrompt.js\";\n\nfunction stripCodeFence(text: string): string {\n return text\n .replace(/^```(?:json)?\\s*\\n?/, \"\")\n .replace(/\\n?```\\s*$/, \"\")\n .trim();\n}\n\nclass WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {\n constructor(\n private promptContextBuilder: AiPromptContextBuilder.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private ai: Ai.Interface,\n private aiSdkTools: AiSdkTools.Interface,\n private encryption: Encryption.Interface\n ) {}\n\n async execute(\n params: WbGeneratePageContentParams\n ): Promise<Result<GeneratePageContentResult, Error>> {\n const settingsResult = await this.getSettings.execute();\n if (settingsResult.isFail()) {\n return Result.fail(new Error(\"Failed to load AI PowerUps settings.\"));\n }\n\n const settings = settingsResult.value;\n const firstProvider = settings.providers.presets[0];\n\n if (!firstProvider) {\n return Result.fail(\n new Error(\"No AI provider configured. Add a provider in AI Power Ups settings.\")\n );\n }\n\n const apiKey = await this.encryption.decrypt(firstProvider.apiKeyEncrypted);\n\n const sdkTools = this.aiSdkTools.getToolSet();\n\n const context = await this.promptContextBuilder.execute({\n projectId: params.projectId,\n readerPersonaId: params.readerPersonaId,\n writerPersonaId: params.writerPersonaId,\n excludedFileIds: params.excludedFileIds\n });\n\n if (context.allProjectFiles.length > 0) {\n const projectFileTool = createReadProjectFileTool(\n context.allProjectFiles,\n context.excludedFileIds\n );\n Object.assign(sdkTools, projectFileTool);\n }\n\n const systemText = buildDomainPrompt(params.components, params.tools) + context.toString();\n\n const system = {\n role: \"system\" as const,\n content: systemText,\n providerOptions: {\n anthropic: {\n cacheControl: { type: \"ephemeral\" }\n }\n }\n };\n\n try {\n const aiResult = await this.ai.generateText({\n model: firstProvider.model,\n connection: {\n sdkName: firstProvider.model.split(\"/\")[0],\n apiKey\n },\n system,\n toolChoice: \"auto\",\n prompt: params.prompt,\n ...(Object.keys(sdkTools).length > 0\n ? { tools: sdkTools, stopWhen: stepCountIs(20) }\n : {})\n });\n\n const text =\n aiResult.text ||\n (aiResult.steps.filter(step => step.text.length > 0).pop()?.text ?? \"\");\n\n const output = stripCodeFence(text);\n\n const filesRead = new Set<string>();\n let toolCallsMade = 0;\n for (const step of aiResult.steps) {\n for (const call of step.toolCalls) {\n toolCallsMade++;\n if (call.toolName === \"read_project_file\") {\n const input = call.input as { fileId?: string };\n if (input.fileId) {\n filesRead.add(input.fileId);\n }\n }\n }\n }\n\n const telemetry: GenerationTelemetry = {\n filesRead: [...filesRead],\n cacheHit: context.cacheHit,\n toolCallsMade,\n totalSteps: aiResult.steps.length\n };\n\n return Result.ok({ output, telemetry });\n } catch (error) {\n return Result.fail(\n new Error(\n `AI generation failed: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n }\n}\n\nexport const WbGeneratePageContentUseCaseImplementation =\n WbGeneratePageContentUseCase.createImplementation({\n implementation: WbGeneratePageContentUseCaseImpl,\n dependencies: [AiPromptContextBuilder, GetSettingsUseCase, Ai, AiSdkTools, Encryption]\n });\n"],"names":["stripCodeFence","text","WbGeneratePageContentUseCaseImpl","promptContextBuilder","getSettings","ai","aiSdkTools","encryption","params","settingsResult","Result","Error","settings","firstProvider","apiKey","sdkTools","context","projectFileTool","createReadProjectFileTool","Object","systemText","buildDomainPrompt","system","aiResult","stepCountIs","step","output","filesRead","Set","toolCallsMade","call","input","telemetry","error","String","WbGeneratePageContentUseCaseImplementation","WbGeneratePageContentUseCase","AiPromptContextBuilder","GetSettingsUseCase","Ai","AiSdkTools","Encryption"],"mappings":";;;;;;;;;AAgBA,SAASA,eAAeC,IAAY;IAChC,OAAOA,KACF,OAAO,CAAC,uBAAuB,IAC/B,OAAO,CAAC,cAAc,IACtB,IAAI;AACb;AAEA,MAAMC;IACF,YACYC,oBAAsD,EACtDC,WAAyC,EACzCC,EAAgB,EAChBC,UAAgC,EAChCC,UAAgC,CAC1C;aALUJ,oBAAoB,GAApBA;aACAC,WAAW,GAAXA;aACAC,EAAE,GAAFA;aACAC,UAAU,GAAVA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QACFC,MAAmC,EACc;QACjD,MAAMC,iBAAiB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QACrD,IAAIA,eAAe,MAAM,IACrB,OAAOC,OAAO,IAAI,CAAC,IAAIC,MAAM;QAGjC,MAAMC,WAAWH,eAAe,KAAK;QACrC,MAAMI,gBAAgBD,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE;QAEnD,IAAI,CAACC,eACD,OAAOH,OAAO,IAAI,CACd,IAAIC,MAAM;QAIlB,MAAMG,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACD,cAAc,eAAe;QAE1E,MAAME,WAAW,IAAI,CAAC,UAAU,CAAC,UAAU;QAE3C,MAAMC,UAAU,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACpD,WAAWR,OAAO,SAAS;YAC3B,iBAAiBA,OAAO,eAAe;YACvC,iBAAiBA,OAAO,eAAe;YACvC,iBAAiBA,OAAO,eAAe;QAC3C;QAEA,IAAIQ,QAAQ,eAAe,CAAC,MAAM,GAAG,GAAG;YACpC,MAAMC,kBAAkBC,0BACpBF,QAAQ,eAAe,EACvBA,QAAQ,eAAe;YAE3BG,OAAO,MAAM,CAACJ,UAAUE;QAC5B;QAEA,MAAMG,aAAaC,kBAAkBb,OAAO,UAAU,EAAEA,OAAO,KAAK,IAAIQ,QAAQ,QAAQ;QAExF,MAAMM,SAAS;YACX,MAAM;YACN,SAASF;YACT,iBAAiB;gBACb,WAAW;oBACP,cAAc;wBAAE,MAAM;oBAAY;gBACtC;YACJ;QACJ;QAEA,IAAI;YACA,MAAMG,WAAW,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;gBACxC,OAAOV,cAAc,KAAK;gBAC1B,YAAY;oBACR,SAASA,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC1CC;gBACJ;gBACAQ;gBACA,YAAY;gBACZ,QAAQd,OAAO,MAAM;gBACrB,GAAIW,OAAO,IAAI,CAACJ,UAAU,MAAM,GAAG,IAC7B;oBAAE,OAAOA;oBAAU,UAAUS,YAAY;gBAAI,IAC7C,CAAC,CAAC;YACZ;YAEA,MAAMvB,OACFsB,SAAS,IAAI,IACZA,CAAAA,SAAS,KAAK,CAAC,MAAM,CAACE,CAAAA,OAAQA,KAAK,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,EAAC;YAEzE,MAAMC,SAAS1B,eAAeC;YAE9B,MAAM0B,YAAY,IAAIC;YACtB,IAAIC,gBAAgB;YACpB,KAAK,MAAMJ,QAAQF,SAAS,KAAK,CAC7B,KAAK,MAAMO,QAAQL,KAAK,SAAS,CAAE;gBAC/BI;gBACA,IAAIC,AAAkB,wBAAlBA,KAAK,QAAQ,EAA0B;oBACvC,MAAMC,QAAQD,KAAK,KAAK;oBACxB,IAAIC,MAAM,MAAM,EACZJ,UAAU,GAAG,CAACI,MAAM,MAAM;gBAElC;YACJ;YAGJ,MAAMC,YAAiC;gBACnC,WAAW;uBAAIL;iBAAU;gBACzB,UAAUX,QAAQ,QAAQ;gBAC1Ba;gBACA,YAAYN,SAAS,KAAK,CAAC,MAAM;YACrC;YAEA,OAAOb,OAAO,EAAE,CAAC;gBAAEgB;gBAAQM;YAAU;QACzC,EAAE,OAAOC,OAAO;YACZ,OAAOvB,OAAO,IAAI,CACd,IAAIC,MACA,CAAC,sBAAsB,EAAEsB,iBAAiBtB,QAAQsB,MAAM,OAAO,GAAGC,OAAOD,QAAQ;QAG7F;IACJ;AACJ;AAEO,MAAME,6CACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBlC;IAChB,cAAc;QAACmC;QAAwBC;QAAoBC;QAAIC;QAAYC;KAAW;AAC1F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
export interface WbGeneratePageContentParams {
|
|
3
|
+
prompt: string;
|
|
4
|
+
components: unknown;
|
|
5
|
+
tools: unknown;
|
|
6
|
+
projectId?: string | null;
|
|
7
|
+
excludedFileIds?: string[] | null;
|
|
8
|
+
readerPersonaId?: string | null;
|
|
9
|
+
writerPersonaId?: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface GenerationTelemetry {
|
|
12
|
+
filesRead: string[];
|
|
13
|
+
cacheHit: boolean;
|
|
14
|
+
toolCallsMade: number;
|
|
15
|
+
totalSteps: number;
|
|
16
|
+
}
|
|
17
|
+
export interface GeneratePageContentResult {
|
|
18
|
+
output: string;
|
|
19
|
+
telemetry: GenerationTelemetry;
|
|
20
|
+
}
|
|
21
|
+
export interface IWbGeneratePageContentUseCase {
|
|
22
|
+
execute(params: WbGeneratePageContentParams): Promise<Result<GeneratePageContentResult, Error>>;
|
|
23
|
+
}
|
|
24
|
+
export declare const WbGeneratePageContentUseCase: import("@webiny/di").Abstraction<IWbGeneratePageContentUseCase>;
|
|
25
|
+
export declare namespace WbGeneratePageContentUseCase {
|
|
26
|
+
type Interface = IWbGeneratePageContentUseCase;
|
|
27
|
+
type Params = WbGeneratePageContentParams;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbGeneratePageContent/abstractions.js","sources":["../../../../src/api/features/WbGeneratePageContent/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\n\nexport interface WbGeneratePageContentParams {\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\nexport interface GenerationTelemetry {\n filesRead: string[];\n cacheHit: boolean;\n toolCallsMade: number;\n totalSteps: number;\n}\n\nexport interface GeneratePageContentResult {\n output: string;\n telemetry: GenerationTelemetry;\n}\n\nexport interface IWbGeneratePageContentUseCase {\n execute(params: WbGeneratePageContentParams): Promise<Result<GeneratePageContentResult, Error>>;\n}\n\nexport const WbGeneratePageContentUseCase = createAbstraction<IWbGeneratePageContentUseCase>(\n \"AiPowerUpsWbGeneratePageContentUseCase\"\n);\n\nexport namespace WbGeneratePageContentUseCase {\n export type Interface = IWbGeneratePageContentUseCase;\n export type Params = WbGeneratePageContentParams;\n}\n"],"names":["WbGeneratePageContentUseCase","createAbstraction"],"mappings":";AA4BO,MAAMA,+BAA+BC,kBACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function buildDomainPrompt(components: unknown, tools: unknown): string;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
function buildDomainPrompt(components, tools) {
|
|
2
|
+
return `You are a page content generator. Given a user prompt, generate structured page content using the provided component catalog and available tools.
|
|
3
|
+
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
### Rich Text Content
|
|
7
|
+
|
|
8
|
+
A single Webiny/Lexical element CAN contain an entire article, blog post, or content section,
|
|
9
|
+
with all headings, paragraphs, lists, and blockquotes in a single HTML string.
|
|
10
|
+
|
|
11
|
+
Create separate Webiny/Lexical elements when it needs to be mixed with other content elements.
|
|
12
|
+
Example: RichText - Banner - RichText - Image - Banner - RichText
|
|
13
|
+
|
|
14
|
+
### Image Selection
|
|
15
|
+
|
|
16
|
+
When the page content requires images, use the listImagesByTag tool
|
|
17
|
+
to search for available images. After receiving the results, select
|
|
18
|
+
the most appropriate image and reference it in your output using:
|
|
19
|
+
{ "tool": "resolveImage", "params": { "id": "<image_id_from_search>" } }
|
|
20
|
+
|
|
21
|
+
You MUST generate the full page content as JSON after using any tools.
|
|
22
|
+
Tool calls are for gathering information — your final response must
|
|
23
|
+
always be the complete page JSON array.
|
|
24
|
+
|
|
25
|
+
### SEO & Content Structure Best Practices
|
|
26
|
+
|
|
27
|
+
When generating page content, follow these SEO guidelines:
|
|
28
|
+
|
|
29
|
+
Heading hierarchy:
|
|
30
|
+
- Use exactly ONE <h1> per page, as the main title/headline.
|
|
31
|
+
- Use <h2> for major sections, <h3> for subsections. Never skip levels (e.g., no <h3> directly after <h1>).
|
|
32
|
+
- Headings should be descriptive and include relevant keywords naturally — avoid generic headings like "Introduction" or "Section 1".
|
|
33
|
+
|
|
34
|
+
Paragraphs and readability:
|
|
35
|
+
- Keep paragraphs short — 2 to 4 sentences each.
|
|
36
|
+
- Use <strong> and <em> to emphasize key terms and phrases that a reader scanning the page should notice.
|
|
37
|
+
- Use bullet lists (<ul>) or numbered lists (<ol>) to break down complex information.
|
|
38
|
+
- Write in an active voice. Be direct and concise.
|
|
39
|
+
|
|
40
|
+
Content structure:
|
|
41
|
+
- Lead with the most important information first (inverted pyramid).
|
|
42
|
+
- Include a compelling opening paragraph immediately after the <h1> that summarizes the page's value proposition.
|
|
43
|
+
- Use transition sentences between sections to maintain reading flow.
|
|
44
|
+
- End with a clear call-to-action or summary.
|
|
45
|
+
|
|
46
|
+
Keyword usage:
|
|
47
|
+
- Incorporate the main topic keywords naturally in the <h1>, at least one <h2>, the opening paragraph, and throughout the body.
|
|
48
|
+
- Avoid keyword stuffing — content must read naturally to a human.
|
|
49
|
+
- Use semantic variations and related terms rather than repeating the exact same phrase.
|
|
50
|
+
|
|
51
|
+
Links:
|
|
52
|
+
- Where appropriate, use descriptive anchor text for links (not "click here" or "read more").
|
|
53
|
+
|
|
54
|
+
### Component Catalog
|
|
55
|
+
|
|
56
|
+
\`\`\`json
|
|
57
|
+
${JSON.stringify(components, null, 2)}
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
Grid layout options: \`12\`, \`6-6\`, \`4-4-4\`, \`8-4\`, \`4-8\`, \`3-3-3-3\`
|
|
61
|
+
|
|
62
|
+
### Available Tools
|
|
63
|
+
|
|
64
|
+
For input fields that require post-processing, wrap the value in a tool envelope: \`{ "tool": "<toolName>", "params": { ... } }\`.
|
|
65
|
+
|
|
66
|
+
Plain values (text, number, boolean, select) should be set directly without an envelope.
|
|
67
|
+
|
|
68
|
+
\`\`\`json
|
|
69
|
+
${JSON.stringify(tools, null, 2)}
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
### Page Schema
|
|
73
|
+
|
|
74
|
+
\`\`\`typescript
|
|
75
|
+
type ElementSchema = {
|
|
76
|
+
component: string;
|
|
77
|
+
inputs: Record<string, unknown>;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
type CreateElementAction = {
|
|
81
|
+
action: "CreateElement";
|
|
82
|
+
params: ElementSchema;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
type PageSchema = ElementSchema[];
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
For slot inputs, use \`{ "action": "CreateElement", "params": { "component": "...", "inputs": { ... } } }\`. For root array items, use \`ElementSchema\` shape.
|
|
89
|
+
Note: \`CreateElement\` uses "action" — it is a structural instruction for the page builder, not a tool invocation.
|
|
90
|
+
|
|
91
|
+
### Grid Structure Example
|
|
92
|
+
|
|
93
|
+
When using Webiny/Grid, each column entry must use a CreateElement action
|
|
94
|
+
to create a Webiny/GridColumn, and the GridColumn's children contain the
|
|
95
|
+
actual content elements:
|
|
96
|
+
|
|
97
|
+
\`\`\`json
|
|
98
|
+
{
|
|
99
|
+
"component": "Webiny/Grid",
|
|
100
|
+
"inputs": {
|
|
101
|
+
"gridLayout": "6-6",
|
|
102
|
+
"columns": [
|
|
103
|
+
{
|
|
104
|
+
"children": {
|
|
105
|
+
"action": "CreateElement",
|
|
106
|
+
"params": {
|
|
107
|
+
"component": "Webiny/GridColumn",
|
|
108
|
+
"inputs": {
|
|
109
|
+
"children": [
|
|
110
|
+
{
|
|
111
|
+
"action": "CreateElement",
|
|
112
|
+
"params": {
|
|
113
|
+
"component": "Webiny/Lexical",
|
|
114
|
+
"inputs": {
|
|
115
|
+
"content": {
|
|
116
|
+
"tool": "textToLexical",
|
|
117
|
+
"params": { "text": "..." }
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
Key rules:
|
|
133
|
+
- "columns" is an array, not an object with numeric keys
|
|
134
|
+
- Each column has a "children" property containing a single CreateElement
|
|
135
|
+
for Webiny/GridColumn
|
|
136
|
+
- Webiny/GridColumn's "children" is an array of CreateElement actions for
|
|
137
|
+
the actual content
|
|
138
|
+
|
|
139
|
+
You MUST return parsable JSON string without any extra text or envelopes.`;
|
|
140
|
+
}
|
|
141
|
+
export { buildDomainPrompt };
|
|
142
|
+
|
|
143
|
+
//# sourceMappingURL=buildPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbGeneratePageContent/buildPrompt.js","sources":["../../../../src/api/features/WbGeneratePageContent/buildPrompt.ts"],"sourcesContent":["export function buildDomainPrompt(components: unknown, tools: unknown): string {\n return `You are a page content generator. Given a user prompt, generate structured page content using the provided component catalog and available tools.\n\n###\n\n### Rich Text Content\n\nA single Webiny/Lexical element CAN contain an entire article, blog post, or content section,\nwith all headings, paragraphs, lists, and blockquotes in a single HTML string.\n\nCreate separate Webiny/Lexical elements when it needs to be mixed with other content elements.\nExample: RichText - Banner - RichText - Image - Banner - RichText\n\n### Image Selection\n\nWhen the page content requires images, use the listImagesByTag tool\nto search for available images. After receiving the results, select\nthe most appropriate image and reference it in your output using:\n{ \"tool\": \"resolveImage\", \"params\": { \"id\": \"<image_id_from_search>\" } }\n\nYou MUST generate the full page content as JSON after using any tools.\nTool calls are for gathering information — your final response must\nalways be the complete page JSON array.\n\n### SEO & Content Structure Best Practices\n\nWhen generating page content, follow these SEO guidelines:\n\nHeading hierarchy:\n- Use exactly ONE <h1> per page, as the main title/headline.\n- Use <h2> for major sections, <h3> for subsections. Never skip levels (e.g., no <h3> directly after <h1>).\n- Headings should be descriptive and include relevant keywords naturally — avoid generic headings like \"Introduction\" or \"Section 1\".\n\nParagraphs and readability:\n- Keep paragraphs short — 2 to 4 sentences each.\n- Use <strong> and <em> to emphasize key terms and phrases that a reader scanning the page should notice.\n- Use bullet lists (<ul>) or numbered lists (<ol>) to break down complex information.\n- Write in an active voice. Be direct and concise.\n\nContent structure:\n- Lead with the most important information first (inverted pyramid).\n- Include a compelling opening paragraph immediately after the <h1> that summarizes the page's value proposition.\n- Use transition sentences between sections to maintain reading flow.\n- End with a clear call-to-action or summary.\n\nKeyword usage:\n- Incorporate the main topic keywords naturally in the <h1>, at least one <h2>, the opening paragraph, and throughout the body.\n- Avoid keyword stuffing — content must read naturally to a human.\n- Use semantic variations and related terms rather than repeating the exact same phrase.\n\nLinks:\n- Where appropriate, use descriptive anchor text for links (not \"click here\" or \"read more\").\n\n### Component Catalog\n\n\\`\\`\\`json\n${JSON.stringify(components, null, 2)}\n\\`\\`\\`\n\nGrid layout options: \\`12\\`, \\`6-6\\`, \\`4-4-4\\`, \\`8-4\\`, \\`4-8\\`, \\`3-3-3-3\\`\n\n### Available Tools\n\nFor input fields that require post-processing, wrap the value in a tool envelope: \\`{ \"tool\": \"<toolName>\", \"params\": { ... } }\\`.\n\nPlain values (text, number, boolean, select) should be set directly without an envelope.\n\n\\`\\`\\`json\n${JSON.stringify(tools, null, 2)}\n\\`\\`\\`\n\n### Page Schema\n\n\\`\\`\\`typescript\ntype ElementSchema = {\n component: string;\n inputs: Record<string, unknown>;\n};\n\ntype CreateElementAction = {\n action: \"CreateElement\";\n params: ElementSchema;\n};\n\ntype PageSchema = ElementSchema[];\n\\`\\`\\`\n\nFor slot inputs, use \\`{ \"action\": \"CreateElement\", \"params\": { \"component\": \"...\", \"inputs\": { ... } } }\\`. For root array items, use \\`ElementSchema\\` shape.\nNote: \\`CreateElement\\` uses \"action\" — it is a structural instruction for the page builder, not a tool invocation.\n\n### Grid Structure Example\n\nWhen using Webiny/Grid, each column entry must use a CreateElement action\nto create a Webiny/GridColumn, and the GridColumn's children contain the\nactual content elements:\n\n\\`\\`\\`json\n{\n \"component\": \"Webiny/Grid\",\n \"inputs\": {\n \"gridLayout\": \"6-6\",\n \"columns\": [\n {\n \"children\": {\n \"action\": \"CreateElement\",\n \"params\": {\n \"component\": \"Webiny/GridColumn\",\n \"inputs\": {\n \"children\": [\n {\n \"action\": \"CreateElement\",\n \"params\": {\n \"component\": \"Webiny/Lexical\",\n \"inputs\": {\n \"content\": {\n \"tool\": \"textToLexical\",\n \"params\": { \"text\": \"...\" }\n }\n }\n }\n }\n ]\n }\n }\n }\n }\n ]\n }\n}\n\\`\\`\\`\n\nKey rules:\n- \"columns\" is an array, not an object with numeric keys\n- Each column has a \"children\" property containing a single CreateElement\n for Webiny/GridColumn\n- Webiny/GridColumn's \"children\" is an array of CreateElement actions for\n the actual content\n\nYou MUST return parsable JSON string without any extra text or envelopes.`;\n}\n"],"names":["buildDomainPrompt","components","tools","JSON"],"mappings":"AAAO,SAASA,kBAAkBC,UAAmB,EAAEC,KAAc;IACjE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDZ,EAAEC,KAAK,SAAS,CAACF,YAAY,MAAM,GAAG;;;;;;;;;;;;AAYtC,EAAEE,KAAK,SAAS,CAACD,OAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEAsEwC,CAAC;AAC1E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { WbGeneratePageContentUseCaseImplementation } from "./WbGeneratePageContentUseCase.js";
|
|
3
|
+
import { WbGeneratePageContentTask } from "./WbGeneratePageContentTask.js";
|
|
4
|
+
const WbGeneratePageContentFeature = createFeature({
|
|
5
|
+
name: "AiPowerUps/WbGeneratePageContent",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(WbGeneratePageContentUseCaseImplementation);
|
|
8
|
+
container.register(WbGeneratePageContentTask);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export { WbGeneratePageContentFeature };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbGeneratePageContent/feature.js","sources":["../../../../src/api/features/WbGeneratePageContent/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { WbGeneratePageContentUseCaseImplementation } from \"./WbGeneratePageContentUseCase.js\";\nimport { WbGeneratePageContentTask } from \"./WbGeneratePageContentTask.js\";\n\nexport const WbGeneratePageContentFeature = createFeature({\n name: \"AiPowerUps/WbGeneratePageContent\",\n register(container) {\n container.register(WbGeneratePageContentUseCaseImplementation);\n container.register(WbGeneratePageContentTask);\n }\n});\n"],"names":["WbGeneratePageContentFeature","createFeature","container","WbGeneratePageContentUseCaseImplementation","WbGeneratePageContentTask"],"mappings":";;;AAIO,MAAMA,+BAA+BC,cAAc;IACtD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WbGeneratePageContentUseCase } from "./abstractions.js";
|