@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.
- package/admin/Extension.js +7 -1
- package/admin/Extension.js.map +1 -1
- package/admin/domain/modelRoles.d.ts +17 -0
- package/admin/domain/modelRoles.js +8 -0
- package/admin/domain/modelRoles.js.map +1 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.d.ts +12 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js +46 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js.map +1 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.d.ts +11 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js +18 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js.map +1 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.d.ts +11 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js +18 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js.map +1 -0
- package/admin/features/compareEntryRevisions/abstractions.d.ts +32 -0
- package/admin/features/compareEntryRevisions/abstractions.js +7 -0
- package/admin/features/compareEntryRevisions/abstractions.js.map +1 -0
- package/admin/features/compareEntryRevisions/feature.d.ts +1 -0
- package/admin/features/compareEntryRevisions/feature.js +15 -0
- package/admin/features/compareEntryRevisions/feature.js.map +1 -0
- package/admin/features/compareEntryRevisions/index.d.ts +2 -0
- package/admin/features/compareEntryRevisions/index.js +2 -0
- package/admin/features/feature.js +4 -0
- package/admin/features/feature.js.map +1 -1
- package/admin/features/generateEntryContent/GenerateEntryContentGateway.d.ts +12 -0
- package/admin/features/generateEntryContent/GenerateEntryContentGateway.js +45 -0
- package/admin/features/generateEntryContent/GenerateEntryContentGateway.js.map +1 -0
- package/admin/features/generateEntryContent/GenerateEntryContentUseCase.d.ts +11 -0
- package/admin/features/generateEntryContent/GenerateEntryContentUseCase.js +18 -0
- package/admin/features/generateEntryContent/GenerateEntryContentUseCase.js.map +1 -0
- package/admin/features/generateEntryContent/abstractions.d.ts +24 -0
- package/admin/features/generateEntryContent/abstractions.js +6 -0
- package/admin/features/generateEntryContent/abstractions.js.map +1 -0
- package/admin/features/generateEntryContent/feature.d.ts +1 -0
- package/admin/features/generateEntryContent/feature.js +13 -0
- package/admin/features/generateEntryContent/feature.js.map +1 -0
- package/admin/features/generateEntryContent/index.d.ts +3 -0
- package/admin/features/generateEntryContent/index.js +2 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js +2 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
- package/admin/features/generatePageContent/abstractions.d.ts +1 -0
- package/admin/features/generatePageContent/abstractions.js.map +1 -1
- package/admin/features/listCapabilities/ListCapabilitiesGateway.d.ts +12 -0
- package/admin/features/listCapabilities/ListCapabilitiesGateway.js +34 -0
- package/admin/features/listCapabilities/ListCapabilitiesGateway.js.map +1 -0
- package/admin/features/listCapabilities/ListCapabilitiesRepository.d.ts +13 -0
- package/admin/features/listCapabilities/ListCapabilitiesRepository.js +27 -0
- package/admin/features/listCapabilities/ListCapabilitiesRepository.js.map +1 -0
- package/admin/features/listCapabilities/ListCapabilitiesUseCase.d.ts +10 -0
- package/admin/features/listCapabilities/ListCapabilitiesUseCase.js +18 -0
- package/admin/features/listCapabilities/ListCapabilitiesUseCase.js.map +1 -0
- package/admin/features/listCapabilities/abstractions.d.ts +28 -0
- package/admin/features/listCapabilities/abstractions.js +7 -0
- package/admin/features/listCapabilities/abstractions.js.map +1 -0
- package/admin/features/listCapabilities/feature.d.ts +3 -0
- package/admin/features/listCapabilities/feature.js +21 -0
- package/admin/features/listCapabilities/feature.js.map +1 -0
- package/admin/features/listCapabilities/index.d.ts +3 -0
- package/admin/features/listCapabilities/index.js +2 -0
- package/admin/features/listModels/ListModelsGateway.js +18 -1
- package/admin/features/listModels/ListModelsGateway.js.map +1 -1
- package/admin/features/listModels/abstractions.d.ts +2 -0
- package/admin/features/listModels/abstractions.js.map +1 -1
- package/admin/features/settings/shared/abstractions.d.ts +58 -25
- package/admin/features/settings/shared/abstractions.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +2 -2
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +3 -4
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +13 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/feature.js +6 -2
- package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/hasUsableModel.d.ts +13 -0
- package/admin/presentation/AiPowerUpsSettings/hasUsableModel.js +9 -0
- package/admin/presentation/AiPowerUpsSettings/hasUsableModel.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/index.d.ts +1 -0
- package/admin/presentation/AiPowerUpsSettings/index.js +1 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +6 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -1
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.d.ts +20 -0
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js +108 -0
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js.map +1 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.d.ts +14 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.js +5 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.js.map +1 -0
- package/admin/presentation/AiPromptFormFactory/feature.d.ts +1 -0
- package/admin/presentation/AiPromptFormFactory/feature.js +11 -0
- package/admin/presentation/AiPromptFormFactory/feature.js.map +1 -0
- package/admin/presentation/CapabilitiesSettings.d.ts +39 -0
- package/admin/presentation/CapabilitiesSettings.js +104 -0
- package/admin/presentation/CapabilitiesSettings.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.d.ts +9 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js +118 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.d.ts +9 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js +72 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.d.ts +4 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js +21 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.d.ts +2 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js +17 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.d.ts +25 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js +90 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.d.ts +2 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.js +16 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.d.ts +29 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.js +5 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.d.ts +3 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.js +17 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.d.ts +4 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.js +27 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.d.ts +5 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.js +106 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.d.ts +29 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js +120 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/Extension.d.ts +2 -0
- package/admin/presentation/CmsContentGeneration/Extension.js +27 -0
- package/admin/presentation/CmsContentGeneration/Extension.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/abstractions.d.ts +20 -0
- package/admin/presentation/CmsContentGeneration/abstractions.js +5 -0
- package/admin/presentation/CmsContentGeneration/abstractions.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/feature.d.ts +3 -0
- package/admin/presentation/CmsContentGeneration/feature.js +17 -0
- package/admin/presentation/CmsContentGeneration/feature.js.map +1 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.d.ts +4 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js +113 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js.map +1 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.d.ts +4 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js +19 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js.map +1 -0
- package/admin/presentation/CmsEntryWizard/Extension.d.ts +2 -0
- package/admin/presentation/CmsEntryWizard/Extension.js +10 -0
- package/admin/presentation/CmsEntryWizard/Extension.js.map +1 -0
- package/admin/presentation/ConnectionsSettings.d.ts +25 -0
- package/admin/presentation/ConnectionsSettings.js +52 -0
- package/admin/presentation/ConnectionsSettings.js.map +1 -0
- package/admin/presentation/ModelRolesSettings.d.ts +29 -0
- package/admin/presentation/ModelRolesSettings.js +67 -0
- package/admin/presentation/ModelRolesSettings.js.map +1 -0
- package/admin/presentation/ProjectsSettings.js +4 -4
- package/admin/presentation/ProjectsSettings.js.map +1 -1
- package/admin/presentation/ProvidersSettings.js +1 -1
- package/admin/presentation/ProvidersSettings.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js +2 -2
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +2 -2
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +2 -2
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +4 -12
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +12 -94
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
- package/admin/presentation/modelRoles.d.ts +10 -0
- package/admin/presentation/modelRoles.js +23 -0
- package/admin/presentation/modelRoles.js.map +1 -0
- package/api/Extension.js +16 -0
- package/api/Extension.js.map +1 -1
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +10 -8
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +37 -42
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -1
- package/api/features/AiImageEnrichment/capability.d.ts +13 -0
- package/api/features/AiImageEnrichment/capability.js +19 -0
- package/api/features/AiImageEnrichment/capability.js.map +1 -0
- package/api/features/AiImageEnrichment/feature.js +2 -0
- package/api/features/AiImageEnrichment/feature.js.map +1 -1
- package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +8 -1
- package/api/features/AiPromptContext/AiPromptContextBuilder.js +46 -2
- package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -1
- package/api/features/AiPromptContext/abstractions.d.ts +3 -0
- package/api/features/AiPromptContext/abstractions.js +9 -1
- package/api/features/AiPromptContext/abstractions.js.map +1 -1
- package/api/features/AiPromptContext/index.d.ts +1 -1
- package/api/features/AiPromptContext/index.js +1 -1
- package/api/features/Capabilities/CapabilitiesHandler.d.ts +28 -0
- package/api/features/Capabilities/CapabilitiesHandler.js +56 -0
- package/api/features/Capabilities/CapabilitiesHandler.js.map +1 -0
- package/api/features/Capabilities/ListAiCapabilitiesUseCase.d.ts +18 -0
- package/api/features/Capabilities/ListAiCapabilitiesUseCase.js +28 -0
- package/api/features/Capabilities/ListAiCapabilitiesUseCase.js.map +1 -0
- package/api/features/Capabilities/ResolveAiCapabilityUseCase.d.ts +30 -0
- package/api/features/Capabilities/ResolveAiCapabilityUseCase.js +88 -0
- package/api/features/Capabilities/ResolveAiCapabilityUseCase.js.map +1 -0
- package/api/features/Capabilities/abstractions.d.ts +77 -0
- package/api/features/Capabilities/abstractions.js +7 -0
- package/api/features/Capabilities/abstractions.js.map +1 -0
- package/api/features/Capabilities/composeSystemPrompt.d.ts +14 -0
- package/api/features/Capabilities/composeSystemPrompt.js +13 -0
- package/api/features/Capabilities/composeSystemPrompt.js.map +1 -0
- package/api/features/Capabilities/feature.d.ts +4 -0
- package/api/features/Capabilities/feature.js +15 -0
- package/api/features/Capabilities/feature.js.map +1 -0
- package/api/features/Capabilities/index.d.ts +5 -0
- package/api/features/Capabilities/index.js +3 -0
- package/api/features/Capabilities/types.d.ts +86 -0
- package/api/features/Capabilities/types.js +4 -0
- package/api/features/Capabilities/types.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.d.ts +20 -0
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js +82 -0
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.d.ts +18 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.js +5 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/capability.d.ts +13 -0
- package/api/features/CmsCompareEntryRevisions/capability.js +64 -0
- package/api/features/CmsCompareEntryRevisions/capability.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/feature.d.ts +4 -0
- package/api/features/CmsCompareEntryRevisions/feature.js +13 -0
- package/api/features/CmsCompareEntryRevisions/feature.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/index.d.ts +2 -0
- package/api/features/CmsCompareEntryRevisions/index.js +2 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.d.ts +33 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js +84 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.d.ts +27 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js +133 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/abstractions.d.ts +36 -0
- package/api/features/CmsGenerateEntryContent/abstractions.js +5 -0
- package/api/features/CmsGenerateEntryContent/abstractions.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/buildPrompt.d.ts +2 -0
- package/api/features/CmsGenerateEntryContent/buildPrompt.js +61 -0
- package/api/features/CmsGenerateEntryContent/buildPrompt.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/capability.d.ts +17 -0
- package/api/features/CmsGenerateEntryContent/capability.js +17 -0
- package/api/features/CmsGenerateEntryContent/capability.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/feature.d.ts +4 -0
- package/api/features/CmsGenerateEntryContent/feature.js +15 -0
- package/api/features/CmsGenerateEntryContent/feature.js.map +1 -0
- package/api/features/CmsGenerateEntryContent/index.d.ts +1 -0
- package/api/features/CmsGenerateEntryContent/index.js +1 -0
- package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.d.ts +2 -0
- package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.js +30 -0
- package/api/features/CmsGenerateEntryContent/injectDynamicZoneTypenames.js.map +1 -0
- package/api/features/CmsResolveImageTool/CmsResolveImageTool.d.ts +14 -0
- package/api/features/CmsResolveImageTool/CmsResolveImageTool.js +27 -0
- package/api/features/CmsResolveImageTool/CmsResolveImageTool.js.map +1 -0
- package/api/features/CmsResolveImageTool/feature.d.ts +4 -0
- package/api/features/CmsResolveImageTool/feature.js +11 -0
- package/api/features/CmsResolveImageTool/feature.js.map +1 -0
- package/api/features/Connections/ConnectionsGraphQLMapper.d.ts +20 -0
- package/api/features/Connections/ConnectionsGraphQLMapper.js +37 -0
- package/api/features/Connections/ConnectionsGraphQLMapper.js.map +1 -0
- package/api/features/Connections/ConnectionsHandler.d.ts +25 -0
- package/api/features/Connections/ConnectionsHandler.js +84 -0
- package/api/features/Connections/ConnectionsHandler.js.map +1 -0
- package/api/features/Connections/feature.d.ts +4 -0
- package/api/features/Connections/feature.js +13 -0
- package/api/features/Connections/feature.js.map +1 -0
- package/api/features/Connections/index.d.ts +2 -0
- package/api/features/Connections/index.js +1 -0
- package/api/features/Connections/legacyProviders.d.ts +26 -0
- package/api/features/Connections/legacyProviders.js +9 -0
- package/api/features/Connections/legacyProviders.js.map +1 -0
- package/api/features/Connections/types.d.ts +36 -0
- package/api/features/Connections/types.js +0 -0
- package/api/features/GetSettings/GetSettingsRepository.js +1 -1
- package/api/features/GetSettings/GetSettingsRepository.js.map +1 -1
- package/api/features/GetSettings/index.d.ts +1 -0
- package/api/features/GetSettings/index.js +1 -0
- package/api/features/ModelRoles/ModelRolesHandler.d.ts +15 -0
- package/api/features/ModelRoles/ModelRolesHandler.js +68 -0
- package/api/features/ModelRoles/ModelRolesHandler.js.map +1 -0
- package/api/features/ModelRoles/feature.d.ts +4 -0
- package/api/features/ModelRoles/feature.js +11 -0
- package/api/features/ModelRoles/feature.js.map +1 -0
- package/api/features/ModelRoles/index.d.ts +4 -0
- package/api/features/ModelRoles/index.js +2 -0
- package/api/features/ModelRoles/roles.d.ts +16 -0
- package/api/features/ModelRoles/roles.js +9 -0
- package/api/features/ModelRoles/roles.js.map +1 -0
- package/api/features/ModelRoles/types.d.ts +21 -0
- package/api/features/ModelRoles/types.js +7 -0
- package/api/features/ModelRoles/types.js.map +1 -0
- package/api/features/Providers/ProvidersHandler.js.map +1 -1
- package/api/features/Providers/types.d.ts +2 -2
- package/api/features/UpdateSettings/UpdateSettingsRepository.js +2 -2
- package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -1
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +4 -3
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +25 -15
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +3 -5
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +16 -23
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
- package/api/features/WbGeneratePageContent/abstractions.d.ts +1 -0
- package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
- package/api/features/WbGeneratePageContent/capability.d.ts +16 -0
- package/api/features/WbGeneratePageContent/capability.js +17 -0
- package/api/features/WbGeneratePageContent/capability.js.map +1 -0
- package/api/features/WbGeneratePageContent/feature.js +2 -0
- package/api/features/WbGeneratePageContent/feature.js.map +1 -1
- package/api/features/WbTranslatePage/LexicalParser.d.ts +10 -0
- package/api/features/WbTranslatePage/LexicalParser.js +37 -0
- package/api/features/WbTranslatePage/LexicalParser.js.map +1 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.d.ts +29 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.js +143 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.js.map +1 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.d.ts +7 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.js +5 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.js.map +1 -0
- package/api/features/WbTranslatePage/capability.d.ts +13 -0
- package/api/features/WbTranslatePage/capability.js +19 -0
- package/api/features/WbTranslatePage/capability.js.map +1 -0
- package/api/features/WbTranslatePage/feature.d.ts +4 -0
- package/api/features/WbTranslatePage/feature.js +15 -0
- package/api/features/WbTranslatePage/feature.js.map +1 -0
- package/api/features/WbTranslatePage/index.d.ts +2 -0
- package/api/features/WbTranslatePage/index.js +2 -0
- package/api/features/shared/abstractions.d.ts +6 -1
- package/api/features/shared/abstractions.js.map +1 -1
- package/api/features/shared/modelId.d.ts +11 -0
- package/api/features/shared/modelId.js +4 -0
- package/api/features/shared/modelId.js.map +1 -0
- package/api/graphql/BaseGraphQLSchema.js +58 -1
- package/api/graphql/BaseGraphQLSchema.js.map +1 -1
- package/api/graphql/CmsCompareEntryRevisionsSchema.d.ts +8 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js +68 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js.map +1 -0
- package/api/types.d.ts +3 -0
- package/api/types.js +3 -0
- package/{api/features/WbGeneratePageContent → domain}/LlmJsonResponse.d.ts +1 -0
- package/{api/features/WbGeneratePageContent → domain}/LlmJsonResponse.js +3 -0
- package/domain/LlmJsonResponse.js.map +1 -0
- package/exports/admin/ai-powerups.d.ts +1 -0
- package/exports/admin/ai-powerups.js +1 -0
- package/exports/api/ai-powerups.d.ts +2 -0
- package/exports/api/ai-powerups.js +2 -0
- package/package.json +33 -26
- package/api/features/WbGeneratePageContent/LlmJsonResponse.js.map +0 -1
|
@@ -1 +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 {
|
|
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 { ListTagsUseCase } from \"@webiny/api-file-manager/features/file/ListTags/index.js\";\nimport {\n ResolveAiCapabilityUseCase,\n withAdditionalInstructions\n} from \"~/api/features/Capabilities/index.js\";\nimport { WB_GENERATE_PAGE_CAPABILITY } from \"./capability.js\";\nimport {\n AiPromptContextBuilder,\n formatAdditionalFilesContext\n} 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\";\nimport { LlmJsonResponse } from \"~/domain/LlmJsonResponse.js\";\nimport { ComponentFilter } from \"./ComponentFilter.js\";\n\nclass WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {\n constructor(\n private promptContextBuilder: AiPromptContextBuilder.Interface,\n private resolveCapability: ResolveAiCapabilityUseCase.Interface,\n private ai: Ai.Interface,\n private aiSdkTools: AiSdkTools.Interface,\n private listTags: ListTagsUseCase.Interface\n ) {}\n\n async execute(\n params: WbGeneratePageContentParams\n ): Promise<Result<GeneratePageContentResult, Error>> {\n const resolved = await this.resolveCapability.execute(WB_GENERATE_PAGE_CAPABILITY);\n if (resolved.isFail()) {\n return Result.fail(resolved.error);\n }\n\n const capability = resolved.value;\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 additionalFileIds: params.additionalFileIds\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 // Fetch image tags so the prompt can enumerate what's queryable; without\n // this the model invents tag/IDs instead of calling listImagesByTag.\n const tagsResult = await this.listTags.execute({\n where: { type_startsWith: \"image/\" },\n limit: 100\n });\n const imageTags = tagsResult.isOk() ? tagsResult.value.map(t => t.tag) : [];\n\n const components = params.components as Array<{ name: string }>;\n const systemText = withAdditionalInstructions(\n capability,\n buildDomainPrompt(components, params.tools, imageTags) + context.toString()\n );\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: capability.model,\n connection: capability.connection,\n system,\n toolChoice: \"auto\",\n prompt: params.prompt + formatAdditionalFilesContext(context.additionalFiles),\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 elements = LlmJsonResponse.fromRawText(text).toArray();\n const componentFilter = new ComponentFilter(components);\n const output = JSON.stringify(componentFilter.filter(elements));\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 toolsAvailable: Object.keys(sdkTools),\n imageTagsInPrompt: imageTags\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: [\n AiPromptContextBuilder,\n ResolveAiCapabilityUseCase,\n Ai,\n AiSdkTools,\n ListTagsUseCase\n ]\n });\n"],"names":["WbGeneratePageContentUseCaseImpl","promptContextBuilder","resolveCapability","ai","aiSdkTools","listTags","params","resolved","WB_GENERATE_PAGE_CAPABILITY","Result","capability","sdkTools","context","projectFileTool","createReadProjectFileTool","Object","tagsResult","imageTags","t","components","systemText","withAdditionalInstructions","buildDomainPrompt","system","aiResult","formatAdditionalFilesContext","stepCountIs","text","step","elements","LlmJsonResponse","componentFilter","ComponentFilter","output","JSON","filesRead","Set","toolCallsMade","call","input","telemetry","error","Error","String","WbGeneratePageContentUseCaseImplementation","WbGeneratePageContentUseCase","AiPromptContextBuilder","ResolveAiCapabilityUseCase","Ai","AiSdkTools","ListTagsUseCase"],"mappings":"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"}
|
|
@@ -1 +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 toolsAvailable: string[];\n imageTagsInPrompt: string[];\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":";
|
|
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 additionalFileIds?: string[] | null;\n}\n\nexport interface GenerationTelemetry {\n filesRead: string[];\n cacheHit: boolean;\n toolCallsMade: number;\n totalSteps: number;\n toolsAvailable: string[];\n imageTagsInPrompt: string[];\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":";AA+BO,MAAMA,+BAA+BC,kBACxC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AiCapability } from "../../../api/features/Capabilities/index.js";
|
|
2
|
+
export declare const WB_GENERATE_PAGE_CAPABILITY = "wb.generatePage";
|
|
3
|
+
/**
|
|
4
|
+
* No `guidance`, for the same reason as CMS entry generation: the prompt carries the component
|
|
5
|
+
* catalog and the tool definitions, both computed per request.
|
|
6
|
+
*/
|
|
7
|
+
declare class WbGeneratePageCapabilityImpl implements AiCapability.Interface {
|
|
8
|
+
readonly id = "wb.generatePage";
|
|
9
|
+
readonly label = "Page generation";
|
|
10
|
+
readonly description = "Writes page content from a prompt using the Website Builder components available in the project.";
|
|
11
|
+
readonly defaultRole: "standard";
|
|
12
|
+
}
|
|
13
|
+
export declare const WbGeneratePageCapability: typeof WbGeneratePageCapabilityImpl & {
|
|
14
|
+
__abstraction: import("@webiny/di").Abstraction<import("~/api/features/Capabilities/index.js").IAiCapability>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AiCapability } from "../Capabilities/index.js";
|
|
2
|
+
const WB_GENERATE_PAGE_CAPABILITY = "wb.generatePage";
|
|
3
|
+
class WbGeneratePageCapabilityImpl {
|
|
4
|
+
constructor(){
|
|
5
|
+
this.id = WB_GENERATE_PAGE_CAPABILITY;
|
|
6
|
+
this.label = "Page generation";
|
|
7
|
+
this.description = "Writes page content from a prompt using the Website Builder components available in the project.";
|
|
8
|
+
this.defaultRole = "standard";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const WbGeneratePageCapability = AiCapability.createImplementation({
|
|
12
|
+
implementation: WbGeneratePageCapabilityImpl,
|
|
13
|
+
dependencies: []
|
|
14
|
+
});
|
|
15
|
+
export { WB_GENERATE_PAGE_CAPABILITY, WbGeneratePageCapability };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbGeneratePageContent/capability.js","sources":["../../../../src/api/features/WbGeneratePageContent/capability.ts"],"sourcesContent":["import { AiCapability } from \"~/api/features/Capabilities/index.js\";\n\nexport const WB_GENERATE_PAGE_CAPABILITY = \"wb.generatePage\";\n\n/**\n * No `guidance`, for the same reason as CMS entry generation: the prompt carries the component\n * catalog and the tool definitions, both computed per request.\n */\nclass WbGeneratePageCapabilityImpl implements AiCapability.Interface {\n readonly id = WB_GENERATE_PAGE_CAPABILITY;\n readonly label = \"Page generation\";\n readonly description =\n \"Writes page content from a prompt using the Website Builder components available in the project.\";\n readonly defaultRole = \"standard\" as const;\n}\n\nexport const WbGeneratePageCapability = AiCapability.createImplementation({\n implementation: WbGeneratePageCapabilityImpl,\n dependencies: []\n});\n"],"names":["WB_GENERATE_PAGE_CAPABILITY","WbGeneratePageCapabilityImpl","WbGeneratePageCapability","AiCapability"],"mappings":";AAEO,MAAMA,8BAA8B;AAM3C,MAAMC;;aACO,EAAE,GAAGD;aACL,KAAK,GAAG;aACR,WAAW,GAChB;aACK,WAAW,GAAG;;AAC3B;AAEO,MAAME,2BAA2BC,aAAa,oBAAoB,CAAC;IACtE,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { WbGeneratePageContentUseCaseImplementation } from "./WbGeneratePageContentUseCase.js";
|
|
3
3
|
import { WbGeneratePageContentTask } from "./WbGeneratePageContentTask.js";
|
|
4
|
+
import { WbGeneratePageCapability } from "./capability.js";
|
|
4
5
|
const WbGeneratePageContentFeature = createFeature({
|
|
5
6
|
name: "AiPowerUps/WbGeneratePageContent",
|
|
6
7
|
register (container) {
|
|
8
|
+
container.register(WbGeneratePageCapability);
|
|
7
9
|
container.register(WbGeneratePageContentUseCaseImplementation);
|
|
8
10
|
container.register(WbGeneratePageContentTask);
|
|
9
11
|
}
|
|
@@ -1 +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":"
|
|
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\";\nimport { WbGeneratePageCapability } from \"./capability.js\";\n\nexport const WbGeneratePageContentFeature = createFeature({\n name: \"AiPowerUps/WbGeneratePageContent\",\n register(container) {\n container.register(WbGeneratePageCapability);\n container.register(WbGeneratePageContentUseCaseImplementation);\n container.register(WbGeneratePageContentTask);\n }\n});\n"],"names":["WbGeneratePageContentFeature","createFeature","container","WbGeneratePageCapability","WbGeneratePageContentUseCaseImplementation","WbGeneratePageContentTask"],"mappings":";;;;AAKO,MAAMA,+BAA+BC,cAAc;IACtD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;IACvB;AACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LexicalParser as Abstraction } from "./abstractions/LexicalParser.js";
|
|
2
|
+
declare class LexicalParserImpl implements Abstraction.Interface {
|
|
3
|
+
private WindowClass;
|
|
4
|
+
parse(html: string): Promise<Record<string, unknown> | null>;
|
|
5
|
+
private loadWindow;
|
|
6
|
+
}
|
|
7
|
+
export declare const LexicalParser: typeof LexicalParserImpl & {
|
|
8
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions/LexicalParser.js").ILexicalParser>;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createHtmlToLexicalParser } from "@webiny/lexical-converter";
|
|
2
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
3
|
+
const parser = createHtmlToLexicalParser();
|
|
4
|
+
class LexicalParserImpl {
|
|
5
|
+
async parse(html) {
|
|
6
|
+
try {
|
|
7
|
+
const Window = await this.loadWindow();
|
|
8
|
+
const window = new Window();
|
|
9
|
+
const document = window.document;
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const result = parser(document);
|
|
12
|
+
await window.happyDOM.close();
|
|
13
|
+
return result;
|
|
14
|
+
} catch (error) {
|
|
15
|
+
console.error("[LexicalParser] Failed to parse HTML to Lexical state:", error);
|
|
16
|
+
console.error("[LexicalParser] Input HTML:", html);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async loadWindow() {
|
|
21
|
+
if (!this.WindowClass) {
|
|
22
|
+
const { Window } = await import("happy-dom");
|
|
23
|
+
this.WindowClass = Window;
|
|
24
|
+
}
|
|
25
|
+
return this.WindowClass;
|
|
26
|
+
}
|
|
27
|
+
constructor(){
|
|
28
|
+
this.WindowClass = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const LexicalParser_LexicalParser = LexicalParser.createImplementation({
|
|
32
|
+
implementation: LexicalParserImpl,
|
|
33
|
+
dependencies: []
|
|
34
|
+
});
|
|
35
|
+
export { LexicalParser_LexicalParser as LexicalParser };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=LexicalParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/LexicalParser.js","sources":["../../../../src/api/features/WbTranslatePage/LexicalParser.ts"],"sourcesContent":["import { createHtmlToLexicalParser } from \"@webiny/lexical-converter\";\nimport { LexicalParser as Abstraction } from \"./abstractions/LexicalParser.js\";\n\nconst parser = createHtmlToLexicalParser();\n\nclass LexicalParserImpl implements Abstraction.Interface {\n private WindowClass: typeof import(\"happy-dom\").Window | null = null;\n\n async parse(html: string): Promise<Record<string, unknown> | null> {\n try {\n const Window = await this.loadWindow();\n const window = new Window();\n const document = window.document;\n document.body.innerHTML = html;\n const result = parser(document as unknown as Document);\n await window.happyDOM.close();\n return result;\n } catch (error) {\n console.error(\"[LexicalParser] Failed to parse HTML to Lexical state:\", error);\n console.error(\"[LexicalParser] Input HTML:\", html);\n return null;\n }\n }\n\n private async loadWindow() {\n if (!this.WindowClass) {\n const { Window } = await import(\"happy-dom\");\n this.WindowClass = Window;\n }\n return this.WindowClass;\n }\n}\n\nexport const LexicalParser = Abstraction.createImplementation({\n implementation: LexicalParserImpl,\n dependencies: []\n});\n"],"names":["parser","createHtmlToLexicalParser","LexicalParserImpl","html","Window","window","document","result","error","console","LexicalParser","Abstraction"],"mappings":";;AAGA,MAAMA,SAASC;AAEf,MAAMC;IAGF,MAAM,MAAMC,IAAY,EAA2C;QAC/D,IAAI;YACA,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU;YACpC,MAAMC,SAAS,IAAID;YACnB,MAAME,WAAWD,OAAO,QAAQ;YAChCC,SAAS,IAAI,CAAC,SAAS,GAAGH;YAC1B,MAAMI,SAASP,OAAOM;YACtB,MAAMD,OAAO,QAAQ,CAAC,KAAK;YAC3B,OAAOE;QACX,EAAE,OAAOC,OAAO;YACZC,QAAQ,KAAK,CAAC,0DAA0DD;YACxEC,QAAQ,KAAK,CAAC,+BAA+BN;YAC7C,OAAO;QACX;IACJ;IAEA,MAAc,aAAa;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;YAChC,IAAI,CAAC,WAAW,GAAGA;QACvB;QACA,OAAO,IAAI,CAAC,WAAW;IAC3B;;aAxBQ,WAAW,GAA6C;;AAyBpE;AAEO,MAAMM,8BAAgBC,cAAAA,oBAAgC,CAAC;IAC1D,gBAAgBT;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Ai } from "@webiny/api-core/features/ai/index.js";
|
|
2
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
3
|
+
import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
|
|
4
|
+
import { TranslatePageUseCase } from "@webiny/api-website-builder/features/pages/TranslatePage/index.js";
|
|
5
|
+
import { UpdatePageRepository } from "@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js";
|
|
6
|
+
import { ResolveAiCapabilityUseCase } from "../../../api/features/Capabilities/index.js";
|
|
7
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
8
|
+
import { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
|
|
9
|
+
declare class WbTranslatePageDecoratorImpl implements TranslatePageUseCase.Interface {
|
|
10
|
+
private getDefaultLanguage;
|
|
11
|
+
private getPageById;
|
|
12
|
+
private resolveCapability;
|
|
13
|
+
private logger;
|
|
14
|
+
private ai;
|
|
15
|
+
private lexicalParser;
|
|
16
|
+
private updatePageRepository;
|
|
17
|
+
private decoratee;
|
|
18
|
+
constructor(getDefaultLanguage: GetDefaultLanguageUseCase.Interface, getPageById: GetPageByIdUseCase.Interface, resolveCapability: ResolveAiCapabilityUseCase.Interface, logger: Logger.Interface, ai: Ai.Interface, lexicalParser: LexicalParser.Interface, updatePageRepository: UpdatePageRepository.Interface, decoratee: TranslatePageUseCase.Interface);
|
|
19
|
+
execute(params: TranslatePageUseCase.Params): TranslatePageUseCase.Return;
|
|
20
|
+
private resolveSourceLanguage;
|
|
21
|
+
private translate;
|
|
22
|
+
private extractBindings;
|
|
23
|
+
private slugify;
|
|
24
|
+
private buildUpdateData;
|
|
25
|
+
}
|
|
26
|
+
export declare const WbTranslatePageDecorator: typeof WbTranslatePageDecoratorImpl & {
|
|
27
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-website-builder/features/pages/TranslatePage/abstractions.js").ITranslatePageUseCase>;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import set from "lodash/set";
|
|
2
|
+
import { Result } from "@webiny/feature/api";
|
|
3
|
+
import { Ai } from "@webiny/api-core/features/ai/index.js";
|
|
4
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
5
|
+
import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
|
|
6
|
+
import { TranslatePageUseCase } from "@webiny/api-website-builder/features/pages/TranslatePage/index.js";
|
|
7
|
+
import { UpdatePageRepository } from "@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js";
|
|
8
|
+
import { ResolveAiCapabilityUseCase, withAdditionalInstructions } from "../Capabilities/index.js";
|
|
9
|
+
import { WB_TRANSLATE_PAGE_CAPABILITY } from "./capability.js";
|
|
10
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
11
|
+
import { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
|
|
12
|
+
import { LlmJsonResponse } from "../../../domain/LlmJsonResponse.js";
|
|
13
|
+
class WbTranslatePageDecoratorImpl {
|
|
14
|
+
constructor(getDefaultLanguage, getPageById, resolveCapability, logger, ai, lexicalParser, updatePageRepository, decoratee){
|
|
15
|
+
this.getDefaultLanguage = getDefaultLanguage;
|
|
16
|
+
this.getPageById = getPageById;
|
|
17
|
+
this.resolveCapability = resolveCapability;
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
this.ai = ai;
|
|
20
|
+
this.lexicalParser = lexicalParser;
|
|
21
|
+
this.updatePageRepository = updatePageRepository;
|
|
22
|
+
this.decoratee = decoratee;
|
|
23
|
+
}
|
|
24
|
+
async execute(params) {
|
|
25
|
+
const result = await this.decoratee.execute(params);
|
|
26
|
+
if (result.isFail()) return result;
|
|
27
|
+
const page = result.value;
|
|
28
|
+
const sourceLanguage = await this.resolveSourceLanguage(page);
|
|
29
|
+
const translations = await this.translate(page, sourceLanguage, params.languageCode);
|
|
30
|
+
if (!translations) return Result.ok(page);
|
|
31
|
+
const updateData = await this.buildUpdateData(page, translations);
|
|
32
|
+
const updateResult = await this.updatePageRepository.execute(page.id, updateData);
|
|
33
|
+
if (updateResult.isFail()) return Result.ok(page);
|
|
34
|
+
return Result.ok(updateResult.value);
|
|
35
|
+
}
|
|
36
|
+
async resolveSourceLanguage(page) {
|
|
37
|
+
if (page.properties["sourcePage"]) {
|
|
38
|
+
const sourcePageId = `${page.properties["sourcePage"]}#0001`;
|
|
39
|
+
const sourcePage = await this.getPageById.execute(sourcePageId);
|
|
40
|
+
if (sourcePage.isOk()) return sourcePage.value.properties["language"];
|
|
41
|
+
return page.properties["language"] ?? "en";
|
|
42
|
+
}
|
|
43
|
+
const result = await this.getDefaultLanguage.execute();
|
|
44
|
+
if (result.isOk()) return result.value.code;
|
|
45
|
+
return "en";
|
|
46
|
+
}
|
|
47
|
+
async translate(page, sourceLanguage, targetLanguage) {
|
|
48
|
+
const resolved = await this.resolveCapability.execute(WB_TRANSLATE_PAGE_CAPABILITY);
|
|
49
|
+
if (resolved.isFail()) {
|
|
50
|
+
this.logger.warn({
|
|
51
|
+
reason: resolved.error.message
|
|
52
|
+
}, "Skipping AI page translation.");
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const capability = resolved.value;
|
|
56
|
+
const properties = {
|
|
57
|
+
title: page.properties["title"],
|
|
58
|
+
snippet: page.properties["snippet"],
|
|
59
|
+
pathSlug: page.properties["title"]
|
|
60
|
+
};
|
|
61
|
+
const bindings = this.extractBindings(page.bindings);
|
|
62
|
+
const input = JSON.stringify({
|
|
63
|
+
properties,
|
|
64
|
+
bindings
|
|
65
|
+
});
|
|
66
|
+
const result = await this.ai.generateText({
|
|
67
|
+
model: capability.model,
|
|
68
|
+
connection: capability.connection,
|
|
69
|
+
system: withAdditionalInstructions(capability),
|
|
70
|
+
prompt: `Translate given key-value pairs from "${sourceLanguage}" to language code "${targetLanguage}". Do not modify the keys. "properties" is a simple key-value pair. "bindings" values are located in the "value" key. ${input}`,
|
|
71
|
+
temperature: 0.3
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
return LlmJsonResponse.fromRawText(result.text).toJSON();
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
extractBindings(bindings) {
|
|
80
|
+
const result = {};
|
|
81
|
+
for(const elementId in bindings){
|
|
82
|
+
const element = bindings[elementId];
|
|
83
|
+
const inputs = element.inputs;
|
|
84
|
+
if (inputs) for(const inputName in inputs){
|
|
85
|
+
const input = inputs[inputName];
|
|
86
|
+
if ("text" === input.type || "longText" === input.type) result[`${elementId}.inputs.${inputName}`] = {
|
|
87
|
+
type: input.type,
|
|
88
|
+
value: input.static
|
|
89
|
+
};
|
|
90
|
+
else if ("lexical" === input.type && input.static?.html) result[`${elementId}.inputs.${inputName}`] = {
|
|
91
|
+
type: input.type,
|
|
92
|
+
value: input.static.html
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
slugify(text) {
|
|
99
|
+
return text.toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
100
|
+
}
|
|
101
|
+
async buildUpdateData(page, translations) {
|
|
102
|
+
const properties = {
|
|
103
|
+
...page.properties
|
|
104
|
+
};
|
|
105
|
+
const bindings = structuredClone(page.bindings);
|
|
106
|
+
const translatedPathSlug = translations.properties["pathSlug"];
|
|
107
|
+
delete translations.properties["pathSlug"];
|
|
108
|
+
for (const [key, value] of Object.entries(translations.properties))properties[key] = value;
|
|
109
|
+
if (translatedPathSlug) {
|
|
110
|
+
const slug = this.slugify(translatedPathSlug);
|
|
111
|
+
if (slug) {
|
|
112
|
+
const languageCode = page.properties["language"];
|
|
113
|
+
properties["path"] = `/${languageCode}/${slug}`;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (const [key, binding] of Object.entries(translations.bindings))if ("lexical" === binding.type) {
|
|
117
|
+
const state = await this.lexicalParser.parse(binding.value);
|
|
118
|
+
if (state) {
|
|
119
|
+
set(bindings, `${key}.static.state`, JSON.stringify(state));
|
|
120
|
+
set(bindings, `${key}.static.html`, binding.value);
|
|
121
|
+
}
|
|
122
|
+
} else set(bindings, `${key}.static`, binding.value);
|
|
123
|
+
return {
|
|
124
|
+
properties,
|
|
125
|
+
bindings
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const WbTranslatePageDecorator = TranslatePageUseCase.createDecorator({
|
|
130
|
+
decorator: WbTranslatePageDecoratorImpl,
|
|
131
|
+
dependencies: [
|
|
132
|
+
GetDefaultLanguageUseCase,
|
|
133
|
+
GetPageByIdUseCase,
|
|
134
|
+
ResolveAiCapabilityUseCase,
|
|
135
|
+
Logger,
|
|
136
|
+
Ai,
|
|
137
|
+
LexicalParser,
|
|
138
|
+
UpdatePageRepository
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
export { WbTranslatePageDecorator };
|
|
142
|
+
|
|
143
|
+
//# sourceMappingURL=WbTranslatePageDecorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/WbTranslatePageDecorator.js","sources":["../../../../src/api/features/WbTranslatePage/WbTranslatePageDecorator.ts"],"sourcesContent":["import set from \"lodash/set\";\nimport { Result } from \"@webiny/feature/api\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\nimport { GetDefaultLanguageUseCase } from \"@webiny/languages/exports/api/languages.js\";\nimport { TranslatePageUseCase } from \"@webiny/api-website-builder/features/pages/TranslatePage/index.js\";\nimport { UpdatePageRepository } from \"@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js\";\nimport type { WbPage } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\nimport {\n ResolveAiCapabilityUseCase,\n withAdditionalInstructions\n} from \"~/api/features/Capabilities/index.js\";\nimport { WB_TRANSLATE_PAGE_CAPABILITY } from \"./capability.js\";\nimport { LexicalParser } from \"./abstractions/LexicalParser.js\";\nimport { GetPageByIdUseCase } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport { LlmJsonResponse } from \"~/domain/LlmJsonResponse.js\";\n\ntype InputType = \"text\" | \"longText\" | \"lexical\";\n\ninterface TranslatableBinding {\n type: InputType;\n value: string;\n}\n\ntype TranslatableBindings = Record<string, TranslatableBinding>;\n\ninterface TranslatedBindings {\n [key: string]: { type: InputType; value: string };\n}\n\ninterface TranslatedData {\n properties: Record<string, string>;\n bindings: TranslatedBindings;\n}\n\nclass WbTranslatePageDecoratorImpl implements TranslatePageUseCase.Interface {\n constructor(\n private getDefaultLanguage: GetDefaultLanguageUseCase.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private resolveCapability: ResolveAiCapabilityUseCase.Interface,\n private logger: Logger.Interface,\n private ai: Ai.Interface,\n private lexicalParser: LexicalParser.Interface,\n private updatePageRepository: UpdatePageRepository.Interface,\n private decoratee: TranslatePageUseCase.Interface\n ) {}\n\n async execute(params: TranslatePageUseCase.Params): TranslatePageUseCase.Return {\n const result = await this.decoratee.execute(params);\n if (result.isFail()) {\n return result;\n }\n\n const page = result.value;\n const sourceLanguage = await this.resolveSourceLanguage(page);\n\n const translations = await this.translate(page, sourceLanguage, params.languageCode);\n if (!translations) {\n return Result.ok(page);\n }\n\n const updateData = await this.buildUpdateData(page, translations);\n const updateResult = await this.updatePageRepository.execute(page.id, updateData);\n if (updateResult.isFail()) {\n return Result.ok(page);\n }\n\n return Result.ok(updateResult.value);\n }\n\n private async resolveSourceLanguage(page: WbPage): Promise<string> {\n if (page.properties[\"sourcePage\"]) {\n const sourcePageId = `${page.properties[\"sourcePage\"]}#0001`;\n const sourcePage = await this.getPageById.execute(sourcePageId);\n if (sourcePage.isOk()) {\n return sourcePage.value.properties[\"language\"];\n }\n return page.properties[\"language\"] ?? \"en\";\n }\n\n const result = await this.getDefaultLanguage.execute();\n if (result.isOk()) {\n return result.value.code;\n }\n\n return \"en\";\n }\n\n private async translate(\n page: WbPage,\n sourceLanguage: string,\n targetLanguage: string\n ): Promise<TranslatedData | null> {\n const resolved = await this.resolveCapability.execute(WB_TRANSLATE_PAGE_CAPABILITY);\n if (resolved.isFail()) {\n /*\n * Translation is a decorator on top of a successful page save, so it stays non-fatal:\n * the page is already created, just untranslated. It does get logged now, because a\n * silently skipped translation was indistinguishable from a misconfigured one.\n */\n this.logger.warn({ reason: resolved.error.message }, \"Skipping AI page translation.\");\n return null;\n }\n\n const capability = resolved.value;\n\n const properties = {\n title: page.properties[\"title\"],\n snippet: page.properties[\"snippet\"],\n pathSlug: page.properties[\"title\"]\n };\n const bindings = this.extractBindings(page.bindings);\n const input = JSON.stringify({ properties, bindings });\n\n const result = await this.ai.generateText({\n model: capability.model,\n connection: capability.connection,\n system: withAdditionalInstructions(capability),\n prompt: `Translate given key-value pairs from \"${sourceLanguage}\" to language code \"${targetLanguage}\". Do not modify the keys. \"properties\" is a simple key-value pair. \"bindings\" values are located in the \"value\" key. ${input}`,\n temperature: 0.3\n });\n\n try {\n return LlmJsonResponse.fromRawText(result.text).toJSON<TranslatedData>();\n } catch {\n return null;\n }\n }\n\n private extractBindings(bindings: Record<string, any>): TranslatableBindings {\n const result: TranslatableBindings = {};\n\n for (const elementId in bindings) {\n const element = bindings[elementId];\n const inputs = element.inputs;\n if (!inputs) {\n continue;\n }\n\n for (const inputName in inputs) {\n const input = inputs[inputName];\n if (input.type === \"text\" || input.type === \"longText\") {\n result[`${elementId}.inputs.${inputName}`] = {\n type: input.type,\n value: input.static\n };\n } else if (input.type === \"lexical\" && input.static?.html) {\n result[`${elementId}.inputs.${inputName}`] = {\n type: input.type,\n value: input.static.html\n };\n }\n }\n }\n\n return result;\n }\n\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize(\"NFKD\")\n .replace(/[̀-ͯ]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n }\n\n private async buildUpdateData(\n page: WbPage,\n translations: TranslatedData\n ): Promise<{ properties: Record<string, any>; bindings: Record<string, any> }> {\n const properties: Record<string, any> = { ...page.properties };\n const bindings: Record<string, any> = structuredClone(page.bindings);\n\n const translatedPathSlug = translations.properties[\"pathSlug\"];\n delete translations.properties[\"pathSlug\"];\n\n for (const [key, value] of Object.entries(translations.properties)) {\n properties[key] = value;\n }\n\n if (translatedPathSlug) {\n const slug = this.slugify(translatedPathSlug);\n if (slug) {\n const languageCode = page.properties[\"language\"];\n properties[\"path\"] = `/${languageCode}/${slug}`;\n }\n }\n\n for (const [key, binding] of Object.entries(translations.bindings)) {\n if (binding.type === \"lexical\") {\n const state = await this.lexicalParser.parse(binding.value);\n if (state) {\n set(bindings, `${key}.static.state`, JSON.stringify(state));\n set(bindings, `${key}.static.html`, binding.value);\n }\n } else {\n set(bindings, `${key}.static`, binding.value);\n }\n }\n\n return { properties, bindings };\n }\n}\n\nexport const WbTranslatePageDecorator = TranslatePageUseCase.createDecorator({\n decorator: WbTranslatePageDecoratorImpl,\n dependencies: [\n GetDefaultLanguageUseCase,\n GetPageByIdUseCase,\n ResolveAiCapabilityUseCase,\n Logger,\n Ai,\n LexicalParser,\n UpdatePageRepository\n ]\n});\n"],"names":["WbTranslatePageDecoratorImpl","getDefaultLanguage","getPageById","resolveCapability","logger","ai","lexicalParser","updatePageRepository","decoratee","params","result","page","sourceLanguage","translations","Result","updateData","updateResult","sourcePageId","sourcePage","targetLanguage","resolved","WB_TRANSLATE_PAGE_CAPABILITY","capability","properties","bindings","input","JSON","withAdditionalInstructions","LlmJsonResponse","elementId","element","inputs","inputName","text","structuredClone","translatedPathSlug","key","value","Object","slug","languageCode","binding","state","set","WbTranslatePageDecorator","TranslatePageUseCase","GetDefaultLanguageUseCase","GetPageByIdUseCase","ResolveAiCapabilityUseCase","Logger","Ai","LexicalParser","UpdatePageRepository"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ILexicalParser {
|
|
2
|
+
parse(html: string): Promise<Record<string, unknown> | null>;
|
|
3
|
+
}
|
|
4
|
+
export declare const LexicalParser: import("@webiny/di").Abstraction<ILexicalParser>;
|
|
5
|
+
export declare namespace LexicalParser {
|
|
6
|
+
type Interface = ILexicalParser;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/abstractions/LexicalParser.js","sources":["../../../../../src/api/features/WbTranslatePage/abstractions/LexicalParser.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface ILexicalParser {\n parse(html: string): Promise<Record<string, unknown> | null>;\n}\n\nexport const LexicalParser = createAbstraction<ILexicalParser>(\n \"AiPowerUps/WbTranslatePage/LexicalParser\"\n);\n\nexport namespace LexicalParser {\n export type Interface = ILexicalParser;\n}\n"],"names":["LexicalParser","createAbstraction"],"mappings":";AAMO,MAAMA,gBAAgBC,kBACzB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AiCapability } from "../../../api/features/Capabilities/index.js";
|
|
2
|
+
export declare const WB_TRANSLATE_PAGE_CAPABILITY = "wb.translatePage";
|
|
3
|
+
declare class WbTranslatePageCapabilityImpl implements AiCapability.Interface {
|
|
4
|
+
readonly id = "wb.translatePage";
|
|
5
|
+
readonly label = "Page translation";
|
|
6
|
+
readonly description = "Translates the text on a page into another language, preserving placeholders.";
|
|
7
|
+
readonly defaultRole: "standard";
|
|
8
|
+
readonly guidance = "You are a professional translator. Translate all user-provided text to the requested target language, preserving placeholders and formatting. Return a JSON object with the same keys, only changing the values.";
|
|
9
|
+
}
|
|
10
|
+
export declare const WbTranslatePageCapability: typeof WbTranslatePageCapabilityImpl & {
|
|
11
|
+
__abstraction: import("@webiny/di").Abstraction<import("~/api/features/Capabilities/index.js").IAiCapability>;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AiCapability } from "../Capabilities/index.js";
|
|
2
|
+
const WB_TRANSLATE_PAGE_CAPABILITY = "wb.translatePage";
|
|
3
|
+
const guidance = "You are a professional translator. Translate all user-provided text to the requested target language, preserving placeholders and formatting. Return a JSON object with the same keys, only changing the values.";
|
|
4
|
+
class WbTranslatePageCapabilityImpl {
|
|
5
|
+
constructor(){
|
|
6
|
+
this.id = WB_TRANSLATE_PAGE_CAPABILITY;
|
|
7
|
+
this.label = "Page translation";
|
|
8
|
+
this.description = "Translates the text on a page into another language, preserving placeholders.";
|
|
9
|
+
this.defaultRole = "standard";
|
|
10
|
+
this.guidance = guidance;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const WbTranslatePageCapability = AiCapability.createImplementation({
|
|
14
|
+
implementation: WbTranslatePageCapabilityImpl,
|
|
15
|
+
dependencies: []
|
|
16
|
+
});
|
|
17
|
+
export { WB_TRANSLATE_PAGE_CAPABILITY, WbTranslatePageCapability };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/capability.js","sources":["../../../../src/api/features/WbTranslatePage/capability.ts"],"sourcesContent":["import { AiCapability } from \"~/api/features/Capabilities/index.js\";\n\nexport const WB_TRANSLATE_PAGE_CAPABILITY = \"wb.translatePage\";\n\n/**\n * The target language used to be interpolated into this sentence. It moved to the user prompt so\n * the instructions could become fixed text a project can replace, which is worth doing here: house\n * translation rules (keep product names in English, use formal address, never translate these\n * twelve terms) are the most commonly requested prompt change in the whole feature set.\n */\nconst guidance =\n \"You are a professional translator. Translate all user-provided text to the requested target language, preserving placeholders and formatting. Return a JSON object with the same keys, only changing the values.\";\n\nclass WbTranslatePageCapabilityImpl implements AiCapability.Interface {\n readonly id = WB_TRANSLATE_PAGE_CAPABILITY;\n readonly label = \"Page translation\";\n readonly description =\n \"Translates the text on a page into another language, preserving placeholders.\";\n readonly defaultRole = \"standard\" as const;\n readonly guidance = guidance;\n}\n\nexport const WbTranslatePageCapability = AiCapability.createImplementation({\n implementation: WbTranslatePageCapabilityImpl,\n dependencies: []\n});\n"],"names":["WB_TRANSLATE_PAGE_CAPABILITY","guidance","WbTranslatePageCapabilityImpl","WbTranslatePageCapability","AiCapability"],"mappings":";AAEO,MAAMA,+BAA+B;AAQ5C,MAAMC,WACF;AAEJ,MAAMC;;aACO,EAAE,GAAGF;aACL,KAAK,GAAG;aACR,WAAW,GAChB;aACK,WAAW,GAAG;aACd,QAAQ,GAAGC;;AACxB;AAEO,MAAME,4BAA4BC,aAAa,oBAAoB,CAAC;IACvE,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { WbTranslatePageDecorator } from "./WbTranslatePageDecorator.js";
|
|
3
|
+
import { WbTranslatePageCapability } from "./capability.js";
|
|
4
|
+
import { LexicalParser } from "./LexicalParser.js";
|
|
5
|
+
const WbTranslatePageFeature = createFeature({
|
|
6
|
+
name: "AiPowerUps/WbTranslatePage",
|
|
7
|
+
register (container) {
|
|
8
|
+
container.register(LexicalParser).inSingletonScope();
|
|
9
|
+
container.register(WbTranslatePageCapability);
|
|
10
|
+
container.registerDecorator(WbTranslatePageDecorator);
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
export { WbTranslatePageFeature };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/feature.js","sources":["../../../../src/api/features/WbTranslatePage/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { WbTranslatePageDecorator } from \"./WbTranslatePageDecorator.js\";\nimport { WbTranslatePageCapability } from \"./capability.js\";\nimport { LexicalParser } from \"./LexicalParser.js\";\n\nexport const WbTranslatePageFeature = createFeature({\n name: \"AiPowerUps/WbTranslatePage\",\n register(container) {\n container.register(LexicalParser).inSingletonScope();\n container.register(WbTranslatePageCapability);\n container.registerDecorator(WbTranslatePageDecorator);\n }\n});\n"],"names":["WbTranslatePageFeature","createFeature","container","LexicalParser","WbTranslatePageCapability","WbTranslatePageDecorator"],"mappings":";;;;AAKO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,eAAe,gBAAgB;QAClDD,UAAU,QAAQ,CAACE;QACnBF,UAAU,iBAAiB,CAACG;IAChC;AACJ"}
|
|
@@ -2,7 +2,12 @@ import type { ZodType } from "zod";
|
|
|
2
2
|
export interface IAiPowerUpsSettingsGroupHandler {
|
|
3
3
|
readonly name: string;
|
|
4
4
|
readonly inputSchema: ZodType<unknown>;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* `all` is the entire persisted settings blob. A group only needs it to read a section it does
|
|
7
|
+
* not own, which in practice means migrating away from one: `connections` and `modelRoles` both
|
|
8
|
+
* derive their defaults from the legacy `providers` section the first time they load.
|
|
9
|
+
*/
|
|
10
|
+
mapFromStorage(persisted: unknown, all?: Record<string, unknown>): unknown;
|
|
6
11
|
mapToStorage(internal: unknown, existing: unknown | null): Promise<unknown>;
|
|
7
12
|
}
|
|
8
13
|
export declare const AiPowerUpsSettingsGroupHandler: import("@webiny/di").Abstraction<IAiPowerUpsSettingsGroupHandler>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api/features/shared/abstractions.js","sources":["../../../../src/api/features/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { ZodType } from \"zod\";\n\nexport interface IAiPowerUpsSettingsGroupHandler {\n readonly name: string;\n readonly inputSchema: ZodType<unknown>;\n mapFromStorage(persisted: unknown): unknown;\n mapToStorage(internal: unknown, existing: unknown | null): Promise<unknown>;\n}\n\nexport const AiPowerUpsSettingsGroupHandler = createAbstraction<IAiPowerUpsSettingsGroupHandler>(\n \"AiPowerUpsSettingsGroupHandler\"\n);\n\nexport namespace AiPowerUpsSettingsGroupHandler {\n export type Interface = IAiPowerUpsSettingsGroupHandler;\n}\n\nexport interface IAiPowerUpsSettingsGroupGraphQLMapper {\n readonly name: string;\n toApi(internal: unknown): unknown | Promise<unknown>;\n fromApi(api: unknown, existing: unknown | null): unknown | Promise<unknown>;\n}\n\nexport const AiPowerUpsSettingsGroupGraphQLMapper =\n createAbstraction<IAiPowerUpsSettingsGroupGraphQLMapper>(\n \"AiPowerUpsSettingsGroupGraphQLMapper\"\n );\n\nexport namespace AiPowerUpsSettingsGroupGraphQLMapper {\n export type Interface = IAiPowerUpsSettingsGroupGraphQLMapper;\n}\n\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface SettingsCacheEntry {\n raw: Record<string, unknown>;\n mapped: IAiPowerUpsSettings;\n}\n\nexport interface IAiPowerUpsSettingsCache {\n get(): SettingsCacheEntry | null;\n set(raw: Record<string, unknown>, mapped: IAiPowerUpsSettings): void;\n}\n\nexport const AiPowerUpsSettingsCache =\n createAbstraction<IAiPowerUpsSettingsCache>(\"AiPowerUpsSettingsCache\");\n\nexport namespace AiPowerUpsSettingsCache {\n export type Interface = IAiPowerUpsSettingsCache;\n}\n"],"names":["AiPowerUpsSettingsGroupHandler","createAbstraction","AiPowerUpsSettingsGroupGraphQLMapper","AiPowerUpsSettingsCache"],"mappings":";
|
|
1
|
+
{"version":3,"file":"api/features/shared/abstractions.js","sources":["../../../../src/api/features/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { ZodType } from \"zod\";\n\nexport interface IAiPowerUpsSettingsGroupHandler {\n readonly name: string;\n readonly inputSchema: ZodType<unknown>;\n /**\n * `all` is the entire persisted settings blob. A group only needs it to read a section it does\n * not own, which in practice means migrating away from one: `connections` and `modelRoles` both\n * derive their defaults from the legacy `providers` section the first time they load.\n */\n mapFromStorage(persisted: unknown, all?: Record<string, unknown>): unknown;\n mapToStorage(internal: unknown, existing: unknown | null): Promise<unknown>;\n}\n\nexport const AiPowerUpsSettingsGroupHandler = createAbstraction<IAiPowerUpsSettingsGroupHandler>(\n \"AiPowerUpsSettingsGroupHandler\"\n);\n\nexport namespace AiPowerUpsSettingsGroupHandler {\n export type Interface = IAiPowerUpsSettingsGroupHandler;\n}\n\nexport interface IAiPowerUpsSettingsGroupGraphQLMapper {\n readonly name: string;\n toApi(internal: unknown): unknown | Promise<unknown>;\n fromApi(api: unknown, existing: unknown | null): unknown | Promise<unknown>;\n}\n\nexport const AiPowerUpsSettingsGroupGraphQLMapper =\n createAbstraction<IAiPowerUpsSettingsGroupGraphQLMapper>(\n \"AiPowerUpsSettingsGroupGraphQLMapper\"\n );\n\nexport namespace AiPowerUpsSettingsGroupGraphQLMapper {\n export type Interface = IAiPowerUpsSettingsGroupGraphQLMapper;\n}\n\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface SettingsCacheEntry {\n raw: Record<string, unknown>;\n mapped: IAiPowerUpsSettings;\n}\n\nexport interface IAiPowerUpsSettingsCache {\n get(): SettingsCacheEntry | null;\n set(raw: Record<string, unknown>, mapped: IAiPowerUpsSettings): void;\n}\n\nexport const AiPowerUpsSettingsCache =\n createAbstraction<IAiPowerUpsSettingsCache>(\"AiPowerUpsSettingsCache\");\n\nexport namespace AiPowerUpsSettingsCache {\n export type Interface = IAiPowerUpsSettingsCache;\n}\n"],"names":["AiPowerUpsSettingsGroupHandler","createAbstraction","AiPowerUpsSettingsGroupGraphQLMapper","AiPowerUpsSettingsCache"],"mappings":";AAeO,MAAMA,iCAAiCC,kBAC1C;AAaG,MAAMC,uCACTD,kBACI;AAmBD,MAAME,0BACTF,kBAA4C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models are addressed as `"<sdkName>/<modelId>"`, e.g. `"anthropic/claude-sonnet-4-5"`.
|
|
3
|
+
*
|
|
4
|
+
* The vendor half has to be recoverable from the string on its own, because a stored role holds the
|
|
5
|
+
* composite and nothing else: resolving checks that the model's vendor matches the connection's
|
|
6
|
+
* before spending a request to find out.
|
|
7
|
+
*
|
|
8
|
+
* Shared rather than owned by `Connections`, because it is a fact about the model id format and
|
|
9
|
+
* both `Connections` and `Capabilities` read it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const sdkNameFromModel: (model: string | undefined) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/shared/modelId.js","sources":["../../../../src/api/features/shared/modelId.ts"],"sourcesContent":["/**\n * Models are addressed as `\"<sdkName>/<modelId>\"`, e.g. `\"anthropic/claude-sonnet-4-5\"`.\n *\n * The vendor half has to be recoverable from the string on its own, because a stored role holds the\n * composite and nothing else: resolving checks that the model's vendor matches the connection's\n * before spending a request to find out.\n *\n * Shared rather than owned by `Connections`, because it is a fact about the model id format and\n * both `Connections` and `Capabilities` read it.\n */\nexport const sdkNameFromModel = (model: string | undefined): string =>\n (model ?? \"\").split(\"/\")[0] ?? \"\";\n"],"names":["sdkNameFromModel","model"],"mappings":"AAUO,MAAMA,mBAAmB,CAACC,QAC5BA,AAAAA,CAAAA,SAAS,EAAC,EAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI"}
|