@webiny/ai-powerups 0.0.0-unstable.0156a4c312
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 +14 -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 +49 -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/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.d.ts +1 -0
- package/admin/features/feature.js +26 -0
- package/admin/features/feature.js.map +1 -0
- 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.d.ts +12 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js +47 -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 +25 -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/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.d.ts +12 -0
- package/admin/features/listModels/ListModelsGateway.js +51 -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 +30 -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 +83 -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 +49 -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 +160 -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 +29 -0
- package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -0
- 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 +4 -0
- package/admin/presentation/AiPowerUpsSettings/index.js +4 -0
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +26 -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/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 +22 -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.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 +125 -0
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -0
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +33 -0
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +161 -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 +31 -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/presentation/modelRoles.d.ts +10 -0
- package/admin/presentation/modelRoles.js +23 -0
- package/admin/presentation/modelRoles.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 +68 -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/AdminAssistant/AdminAssistantStreamRoute.d.ts +34 -0
- package/api/features/AdminAssistant/AdminAssistantStreamRoute.js +42 -0
- package/api/features/AdminAssistant/AdminAssistantStreamRoute.js.map +1 -0
- package/api/features/AdminAssistant/AdminAssistantUseCase.d.ts +42 -0
- package/api/features/AdminAssistant/AdminAssistantUseCase.js +170 -0
- package/api/features/AdminAssistant/AdminAssistantUseCase.js.map +1 -0
- package/api/features/AdminAssistant/abstractions.d.ts +38 -0
- package/api/features/AdminAssistant/abstractions.js +6 -0
- package/api/features/AdminAssistant/abstractions.js.map +1 -0
- package/api/features/AdminAssistant/approvals.d.ts +29 -0
- package/api/features/AdminAssistant/approvals.js +30 -0
- package/api/features/AdminAssistant/approvals.js.map +1 -0
- package/api/features/AdminAssistant/capability.d.ts +31 -0
- package/api/features/AdminAssistant/capability.js +19 -0
- package/api/features/AdminAssistant/capability.js.map +1 -0
- package/api/features/AdminAssistant/events.d.ts +54 -0
- package/api/features/AdminAssistant/events.js +0 -0
- package/api/features/AdminAssistant/feature.d.ts +12 -0
- package/api/features/AdminAssistant/feature.js +23 -0
- package/api/features/AdminAssistant/feature.js.map +1 -0
- package/api/features/AdminAssistant/index.d.ts +5 -0
- package/api/features/AdminAssistant/index.js +3 -0
- package/api/features/AdminAssistant/parseChatBody.d.ts +14 -0
- package/api/features/AdminAssistant/parseChatBody.js +33 -0
- package/api/features/AdminAssistant/parseChatBody.js.map +1 -0
- package/api/features/AdminAssistant/systemPrompt.d.ts +7 -0
- package/api/features/AdminAssistant/systemPrompt.js +24 -0
- package/api/features/AdminAssistant/systemPrompt.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/AiImageEnrichmentStreamRoute.d.ts +36 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js +92 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js.map +1 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +41 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +95 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.d.ts +18 -0
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js +50 -0
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js.map +1 -0
- package/api/features/AiImageEnrichment/EnrichmentCapabilityDisabledError.d.ts +9 -0
- package/api/features/AiImageEnrichment/EnrichmentCapabilityDisabledError.js +8 -0
- package/api/features/AiImageEnrichment/EnrichmentCapabilityDisabledError.js.map +1 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.d.ts +17 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js +47 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js.map +1 -0
- package/api/features/AiImageEnrichment/abstractions.d.ts +66 -0
- package/api/features/AiImageEnrichment/abstractions.js +12 -0
- package/api/features/AiImageEnrichment/abstractions.js.map +1 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.d.ts +12 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js +30 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js.map +1 -0
- package/api/features/AiImageEnrichment/capability.d.ts +18 -0
- package/api/features/AiImageEnrichment/capability.js +19 -0
- package/api/features/AiImageEnrichment/capability.js.map +1 -0
- package/api/features/AiImageEnrichment/errors.d.ts +33 -0
- package/api/features/AiImageEnrichment/errors.js +29 -0
- package/api/features/AiImageEnrichment/errors.js.map +1 -0
- package/api/features/AiImageEnrichment/feature.d.ts +4 -0
- package/api/features/AiImageEnrichment/feature.js +24 -0
- package/api/features/AiImageEnrichment/feature.js.map +1 -0
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.d.ts +6 -0
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js +10 -0
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js.map +1 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.d.ts +8 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.js +16 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.js.map +1 -0
- package/api/features/AiImageEnrichment/streamEvents.d.ts +36 -0
- package/api/features/AiImageEnrichment/streamEvents.js +0 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +19 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.js +147 -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 +71 -0
- package/api/features/AiPromptContext/abstractions.js +15 -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/Capabilities/AiCapabilityDisabledError.d.ts +16 -0
- package/api/features/Capabilities/AiCapabilityDisabledError.js +8 -0
- package/api/features/Capabilities/AiCapabilityDisabledError.js.map +1 -0
- package/api/features/Capabilities/AiModelNotAvailableError.d.ts +13 -0
- package/api/features/Capabilities/AiModelNotAvailableError.js +8 -0
- package/api/features/Capabilities/AiModelNotAvailableError.js.map +1 -0
- 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 +33 -0
- package/api/features/Capabilities/ResolveAiCapabilityUseCase.js +114 -0
- package/api/features/Capabilities/ResolveAiCapabilityUseCase.js.map +1 -0
- package/api/features/Capabilities/abstractions.d.ts +90 -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 +7 -0
- package/api/features/Capabilities/index.js +5 -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 +38 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js +93 -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/ConfiguredAiModels/ConfiguredAiModelsService.d.ts +18 -0
- package/api/features/ConfiguredAiModels/ConfiguredAiModelsService.js +92 -0
- package/api/features/ConfiguredAiModels/ConfiguredAiModelsService.js.map +1 -0
- package/api/features/ConfiguredAiModels/abstractions.d.ts +32 -0
- package/api/features/ConfiguredAiModels/abstractions.js +5 -0
- package/api/features/ConfiguredAiModels/abstractions.js.map +1 -0
- package/api/features/ConfiguredAiModels/feature.d.ts +4 -0
- package/api/features/ConfiguredAiModels/feature.js +11 -0
- package/api/features/ConfiguredAiModels/feature.js.map +1 -0
- package/api/features/ConfiguredAiModels/index.d.ts +2 -0
- package/api/features/ConfiguredAiModels/index.js +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/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 +2 -0
- package/api/features/GetSettings/index.js +2 -0
- package/api/features/ModelRoles/ModelRolesHandler.d.ts +15 -0
- package/api/features/ModelRoles/ModelRolesHandler.js +74 -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/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/ComponentFilter.d.ts +18 -0
- package/api/features/WbGeneratePageContent/ComponentFilter.js +69 -0
- package/api/features/WbGeneratePageContent/ComponentFilter.js.map +1 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +39 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +94 -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 +113 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -0
- package/api/features/WbGeneratePageContent/abstractions.d.ts +31 -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 +3 -0
- package/api/features/WbGeneratePageContent/buildPrompt.js +158 -0
- package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -0
- 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.d.ts +4 -0
- package/api/features/WbGeneratePageContent/feature.js +15 -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/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/WbTranslateLayoutDecorator.d.ts +44 -0
- package/api/features/WbTranslatePage/WbTranslateLayoutDecorator.js +185 -0
- package/api/features/WbTranslatePage/WbTranslateLayoutDecorator.js.map +1 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.d.ts +38 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.js +163 -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 +20 -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/WbTranslatePage/translatableBindings.d.ts +21 -0
- package/api/features/WbTranslatePage/translatableBindings.js +57 -0
- package/api/features/WbTranslatePage/translatableBindings.js.map +1 -0
- package/api/features/WbTranslatePage/translatableGlobals.d.ts +21 -0
- package/api/features/WbTranslatePage/translatableGlobals.js +29 -0
- package/api/features/WbTranslatePage/translatableGlobals.js.map +1 -0
- package/api/features/WorkflowReview/AiStepRunner/AiStepRunner.d.ts +41 -0
- package/api/features/WorkflowReview/AiStepRunner/AiStepRunner.js +253 -0
- package/api/features/WorkflowReview/AiStepRunner/AiStepRunner.js.map +1 -0
- package/api/features/WorkflowReview/AiStepRunner/aiRunFailureReasons.d.ts +4 -0
- package/api/features/WorkflowReview/AiStepRunner/aiRunFailureReasons.js +7 -0
- package/api/features/WorkflowReview/AiStepRunner/aiRunFailureReasons.js.map +1 -0
- package/api/features/WorkflowReview/AiStepRunner/feature.d.ts +5 -0
- package/api/features/WorkflowReview/AiStepRunner/feature.js +11 -0
- package/api/features/WorkflowReview/AiStepRunner/feature.js.map +1 -0
- package/api/features/WorkflowReview/AiStepType/AiStepType.d.ts +53 -0
- package/api/features/WorkflowReview/AiStepType/AiStepType.js +121 -0
- package/api/features/WorkflowReview/AiStepType/AiStepType.js.map +1 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/ListWorkflowAiModelsUseCase.d.ts +17 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/ListWorkflowAiModelsUseCase.js +61 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/ListWorkflowAiModelsUseCase.js.map +1 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/abstractions.d.ts +32 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/abstractions.js +5 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/abstractions.js.map +1 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/feature.d.ts +4 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/feature.js +11 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/feature.js.map +1 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/index.d.ts +2 -0
- package/api/features/WorkflowReview/ListWorkflowAiModels/index.js +1 -0
- package/api/features/WorkflowReview/WorkflowsReviewCapability.d.ts +12 -0
- package/api/features/WorkflowReview/WorkflowsReviewCapability.js +38 -0
- package/api/features/WorkflowReview/WorkflowsReviewCapability.js.map +1 -0
- package/api/features/WorkflowReview/aiFailureReasons.d.ts +11 -0
- package/api/features/WorkflowReview/aiFailureReasons.js +9 -0
- package/api/features/WorkflowReview/aiFailureReasons.js.map +1 -0
- package/api/features/WorkflowReview/aiReviewOutputSchema.d.ts +29 -0
- package/api/features/WorkflowReview/aiReviewOutputSchema.js +28 -0
- package/api/features/WorkflowReview/aiReviewOutputSchema.js.map +1 -0
- package/api/features/WorkflowReview/aiStepConfigSchema.d.ts +13 -0
- package/api/features/WorkflowReview/aiStepConfigSchema.js +11 -0
- package/api/features/WorkflowReview/aiStepConfigSchema.js.map +1 -0
- package/api/features/WorkflowReview/buildAiStepPrompt.d.ts +35 -0
- package/api/features/WorkflowReview/buildAiStepPrompt.js +47 -0
- package/api/features/WorkflowReview/buildAiStepPrompt.js.map +1 -0
- package/api/features/WorkflowReview/constants.d.ts +8 -0
- package/api/features/WorkflowReview/constants.js +7 -0
- package/api/features/WorkflowReview/constants.js.map +1 -0
- package/api/features/WorkflowReview/toLoggedAiError.d.ts +13 -0
- package/api/features/WorkflowReview/toLoggedAiError.js +27 -0
- package/api/features/WorkflowReview/toLoggedAiError.js.map +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 +38 -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/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/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 +9 -0
- package/api/graphql/BaseGraphQLSchema.js +194 -0
- package/api/graphql/BaseGraphQLSchema.js.map +1 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.d.ts +9 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js +72 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js.map +1 -0
- package/api/graphql/ListWorkflowAiModelsSchema.d.ts +15 -0
- package/api/graphql/ListWorkflowAiModelsSchema.js +48 -0
- package/api/graphql/ListWorkflowAiModelsSchema.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 +8 -0
- package/api/types.js +6 -0
- package/domain/LlmJsonResponse.d.ts +8 -0
- package/domain/LlmJsonResponse.js +38 -0
- package/domain/LlmJsonResponse.js.map +1 -0
- package/domain/TranslatableBindingKey.d.ts +17 -0
- package/domain/TranslatableBindingKey.js +23 -0
- package/domain/TranslatableBindingKey.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 +7 -0
- package/exports/api/ai-powerups.js +5 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +72 -0
|
@@ -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,44 @@
|
|
|
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 { GetLayoutUseCase, TranslateLayoutUseCase, UpdateLayoutRepository } from "@webiny/api-website-builder/exports/api/website-builder/layouts.js";
|
|
5
|
+
import { ListGlobalComponentsUseCase, SaveGlobalComponentRepository } from "@webiny/api-website-builder/exports/api/website-builder/globals.js";
|
|
6
|
+
import { ResolveAiCapabilityUseCase } from "../../../api/features/Capabilities/index.js";
|
|
7
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
8
|
+
/**
|
|
9
|
+
* Translates a new language version of a layout, and creates the target-language records of the
|
|
10
|
+
* globals placed in it that don't have one yet. It runs under the "Page translation" capability.
|
|
11
|
+
* Like page translation it is non-fatal: the language version is already created, just untranslated.
|
|
12
|
+
*/
|
|
13
|
+
declare class WbTranslateLayoutDecoratorImpl implements TranslateLayoutUseCase.Interface {
|
|
14
|
+
private getDefaultLanguage;
|
|
15
|
+
private resolveCapability;
|
|
16
|
+
private logger;
|
|
17
|
+
private ai;
|
|
18
|
+
private lexicalParser;
|
|
19
|
+
private getLayout;
|
|
20
|
+
private updateLayoutRepository;
|
|
21
|
+
private listGlobalComponents;
|
|
22
|
+
private saveGlobalComponentRepository;
|
|
23
|
+
private decoratee;
|
|
24
|
+
constructor(getDefaultLanguage: GetDefaultLanguageUseCase.Interface, resolveCapability: ResolveAiCapabilityUseCase.Interface, logger: Logger.Interface, ai: Ai.Interface, lexicalParser: LexicalParser.Interface, getLayout: GetLayoutUseCase.Interface, updateLayoutRepository: UpdateLayoutRepository.Interface, listGlobalComponents: ListGlobalComponentsUseCase.Interface, saveGlobalComponentRepository: SaveGlobalComponentRepository.Interface, decoratee: TranslateLayoutUseCase.Interface);
|
|
25
|
+
execute(params: TranslateLayoutUseCase.Params): TranslateLayoutUseCase.Return;
|
|
26
|
+
private translateLayout;
|
|
27
|
+
/**
|
|
28
|
+
* The language of the source layout: `"default"` if it has none.
|
|
29
|
+
*/
|
|
30
|
+
private getSourceLanguage;
|
|
31
|
+
private getDefaultLanguageCode;
|
|
32
|
+
/**
|
|
33
|
+
* The records to create in the target language: for each global placed in the layout that has no
|
|
34
|
+
* record in the target language yet, its record in the source language, else its `"default"` one.
|
|
35
|
+
* A global already stored in the target language is never overwritten. A placed component with no
|
|
36
|
+
* record at all isn't a stored global, and is skipped.
|
|
37
|
+
*/
|
|
38
|
+
private getUntranslatedGlobalComponents;
|
|
39
|
+
private requestTranslation;
|
|
40
|
+
}
|
|
41
|
+
export declare const WbTranslateLayoutDecorator: typeof WbTranslateLayoutDecoratorImpl & {
|
|
42
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-website-builder/features/layouts/TranslateLayout/abstractions.js").ITranslateLayoutUseCase>;
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Ai } from "@webiny/api-core/features/ai/index.js";
|
|
3
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
4
|
+
import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
|
|
5
|
+
import { GetLayoutUseCase, TranslateLayoutUseCase, UpdateLayoutRepository } from "@webiny/api-website-builder/exports/api/website-builder/layouts.js";
|
|
6
|
+
import { GlobalComponentLanguage, ListGlobalComponentsUseCase, SaveGlobalComponentRepository } from "@webiny/api-website-builder/exports/api/website-builder/globals.js";
|
|
7
|
+
import { AiCapabilityDisabledError, ResolveAiCapabilityUseCase, withAdditionalInstructions } from "../Capabilities/index.js";
|
|
8
|
+
import { WB_TRANSLATE_PAGE_CAPABILITY } from "./capability.js";
|
|
9
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
10
|
+
import { applyTranslatedBindings, extractTranslatableBindings } from "./translatableBindings.js";
|
|
11
|
+
import { extractTranslatableGlobals, saveTranslatedGlobalComponents } from "./translatableGlobals.js";
|
|
12
|
+
import { LlmJsonResponse } from "../../../domain/LlmJsonResponse.js";
|
|
13
|
+
class WbTranslateLayoutDecoratorImpl {
|
|
14
|
+
constructor(getDefaultLanguage, resolveCapability, logger, ai, lexicalParser, getLayout, updateLayoutRepository, listGlobalComponents, saveGlobalComponentRepository, decoratee){
|
|
15
|
+
this.getDefaultLanguage = getDefaultLanguage;
|
|
16
|
+
this.resolveCapability = resolveCapability;
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
this.ai = ai;
|
|
19
|
+
this.lexicalParser = lexicalParser;
|
|
20
|
+
this.getLayout = getLayout;
|
|
21
|
+
this.updateLayoutRepository = updateLayoutRepository;
|
|
22
|
+
this.listGlobalComponents = listGlobalComponents;
|
|
23
|
+
this.saveGlobalComponentRepository = saveGlobalComponentRepository;
|
|
24
|
+
this.decoratee = decoratee;
|
|
25
|
+
}
|
|
26
|
+
async execute(params) {
|
|
27
|
+
const result = await this.decoratee.execute(params);
|
|
28
|
+
if (result.isFail()) return result;
|
|
29
|
+
try {
|
|
30
|
+
return await this.translateLayout(params, result.value);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
this.logger.warn({
|
|
33
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
34
|
+
}, "AI layout translation failed.");
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async translateLayout(params, layout) {
|
|
39
|
+
const resolved = await this.resolveCapability.execute(WB_TRANSLATE_PAGE_CAPABILITY);
|
|
40
|
+
if (resolved.isFail()) {
|
|
41
|
+
if (resolved.error instanceof AiCapabilityDisabledError) {
|
|
42
|
+
this.logger.info("AI page translation is switched off; skipping layout.");
|
|
43
|
+
return Result.ok(layout);
|
|
44
|
+
}
|
|
45
|
+
this.logger.warn({
|
|
46
|
+
reason: resolved.error.message
|
|
47
|
+
}, "Skipping AI layout translation.");
|
|
48
|
+
return Result.ok(layout);
|
|
49
|
+
}
|
|
50
|
+
const capability = resolved.value;
|
|
51
|
+
const targetLanguage = GlobalComponentLanguage.from(params.language);
|
|
52
|
+
const sourceLanguage = await this.getSourceLanguage(params.id);
|
|
53
|
+
const globals = await this.getUntranslatedGlobalComponents(layout, sourceLanguage, targetLanguage);
|
|
54
|
+
const input = {
|
|
55
|
+
bindings: extractTranslatableBindings(layout.bindings),
|
|
56
|
+
globals: extractTranslatableGlobals(globals)
|
|
57
|
+
};
|
|
58
|
+
const hasLayoutText = Object.keys(input.bindings).length > 0;
|
|
59
|
+
const hasGlobalText = Object.keys(input.globals).length > 0;
|
|
60
|
+
let translations = {};
|
|
61
|
+
if (hasLayoutText || hasGlobalText) {
|
|
62
|
+
const promptLanguage = sourceLanguage.isDefault() ? await this.getDefaultLanguageCode() : sourceLanguage.toString();
|
|
63
|
+
const translated = await this.requestTranslation(capability, promptLanguage, targetLanguage.toString(), input);
|
|
64
|
+
if (!translated) {
|
|
65
|
+
this.logger.warn({
|
|
66
|
+
id: layout.id,
|
|
67
|
+
language: targetLanguage.toString()
|
|
68
|
+
}, "The AI layout translation could not be read; the layout stays untranslated.");
|
|
69
|
+
return Result.ok(layout);
|
|
70
|
+
}
|
|
71
|
+
translations = translated;
|
|
72
|
+
}
|
|
73
|
+
await saveTranslatedGlobalComponents({
|
|
74
|
+
globals,
|
|
75
|
+
translated: translations.globals,
|
|
76
|
+
language: targetLanguage.toString(),
|
|
77
|
+
lexicalParser: this.lexicalParser,
|
|
78
|
+
repository: this.saveGlobalComponentRepository,
|
|
79
|
+
logger: this.logger
|
|
80
|
+
});
|
|
81
|
+
if (!hasLayoutText) return Result.ok(layout);
|
|
82
|
+
const bindings = await applyTranslatedBindings(layout.bindings, translations.bindings, this.lexicalParser);
|
|
83
|
+
const updateResult = await this.updateLayoutRepository.execute(layout.id, {
|
|
84
|
+
properties: layout.properties,
|
|
85
|
+
metadata: layout.metadata,
|
|
86
|
+
elements: layout.elements,
|
|
87
|
+
bindings,
|
|
88
|
+
extensions: layout.extensions
|
|
89
|
+
});
|
|
90
|
+
if (updateResult.isFail()) {
|
|
91
|
+
this.logger.warn({
|
|
92
|
+
reason: updateResult.error.message,
|
|
93
|
+
id: layout.id
|
|
94
|
+
}, "Could not save the AI translated layout.");
|
|
95
|
+
return Result.ok(layout);
|
|
96
|
+
}
|
|
97
|
+
return Result.ok(updateResult.value);
|
|
98
|
+
}
|
|
99
|
+
async getSourceLanguage(sourceId) {
|
|
100
|
+
const source = await this.getLayout.execute(sourceId);
|
|
101
|
+
if (source.isFail()) return GlobalComponentLanguage["default"]();
|
|
102
|
+
return GlobalComponentLanguage.from(source.value.properties.language);
|
|
103
|
+
}
|
|
104
|
+
async getDefaultLanguageCode() {
|
|
105
|
+
const result = await this.getDefaultLanguage.execute();
|
|
106
|
+
if (result.isOk()) return result.value.code;
|
|
107
|
+
return "en";
|
|
108
|
+
}
|
|
109
|
+
async getUntranslatedGlobalComponents(layout, sourceLanguage, targetLanguage) {
|
|
110
|
+
const placedNames = new Set();
|
|
111
|
+
for (const element of Object.values(layout.elements ?? {})){
|
|
112
|
+
const name = element?.component?.name;
|
|
113
|
+
if ("string" == typeof name && name) placedNames.add(name);
|
|
114
|
+
}
|
|
115
|
+
if (!placedNames.size) return [];
|
|
116
|
+
const languages = [];
|
|
117
|
+
for (const language of [
|
|
118
|
+
targetLanguage,
|
|
119
|
+
sourceLanguage,
|
|
120
|
+
GlobalComponentLanguage["default"]()
|
|
121
|
+
])if (!languages.some((listed)=>listed.equals(language))) languages.push(language);
|
|
122
|
+
const results = await Promise.all(languages.map((language)=>this.listGlobalComponents.execute({
|
|
123
|
+
language: language.toString()
|
|
124
|
+
})));
|
|
125
|
+
const byLanguage = [];
|
|
126
|
+
for (const [index, listed] of results.entries()){
|
|
127
|
+
if (listed.isFail()) {
|
|
128
|
+
this.logger.warn({
|
|
129
|
+
reason: listed.error.message,
|
|
130
|
+
language: languages[index].toString()
|
|
131
|
+
}, "Skipping AI translation of global components.");
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
byLanguage.push({
|
|
135
|
+
language: languages[index],
|
|
136
|
+
records: new Map(listed.value.map((globalComponent)=>[
|
|
137
|
+
globalComponent.name,
|
|
138
|
+
globalComponent
|
|
139
|
+
]))
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const recordsIn = (language)=>byLanguage.find((listed)=>listed.language.equals(language)).records;
|
|
143
|
+
const target = recordsIn(targetLanguage);
|
|
144
|
+
const source = recordsIn(sourceLanguage);
|
|
145
|
+
const fallback = recordsIn(GlobalComponentLanguage["default"]());
|
|
146
|
+
const untranslated = [];
|
|
147
|
+
for (const name of placedNames){
|
|
148
|
+
if (target.has(name)) continue;
|
|
149
|
+
const record = source.get(name) ?? fallback.get(name);
|
|
150
|
+
if (record) untranslated.push(record);
|
|
151
|
+
}
|
|
152
|
+
return untranslated;
|
|
153
|
+
}
|
|
154
|
+
async requestTranslation(capability, sourceLanguage, targetLanguage, input) {
|
|
155
|
+
const result = await this.ai.generateText({
|
|
156
|
+
model: capability.model,
|
|
157
|
+
connection: capability.connection,
|
|
158
|
+
system: withAdditionalInstructions(capability),
|
|
159
|
+
prompt: `Translate given key-value pairs from "${sourceLanguage}" to language code "${targetLanguage}". Do not modify the keys. "bindings" values are located in the "value" key. "globals" holds more bindings of the same shape, grouped by component name; keep the grouping. ${JSON.stringify(input)}`,
|
|
160
|
+
temperature: 0.3
|
|
161
|
+
});
|
|
162
|
+
try {
|
|
163
|
+
return LlmJsonResponse.fromRawText(result.text).toJSON();
|
|
164
|
+
} catch {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const WbTranslateLayoutDecorator = TranslateLayoutUseCase.createDecorator({
|
|
170
|
+
decorator: WbTranslateLayoutDecoratorImpl,
|
|
171
|
+
dependencies: [
|
|
172
|
+
GetDefaultLanguageUseCase,
|
|
173
|
+
ResolveAiCapabilityUseCase,
|
|
174
|
+
Logger,
|
|
175
|
+
Ai,
|
|
176
|
+
LexicalParser,
|
|
177
|
+
GetLayoutUseCase,
|
|
178
|
+
UpdateLayoutRepository,
|
|
179
|
+
ListGlobalComponentsUseCase,
|
|
180
|
+
SaveGlobalComponentRepository
|
|
181
|
+
]
|
|
182
|
+
});
|
|
183
|
+
export { WbTranslateLayoutDecorator };
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=WbTranslateLayoutDecorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/WbTranslatePage/WbTranslateLayoutDecorator.js","sources":["../../../../src/api/features/WbTranslatePage/WbTranslateLayoutDecorator.ts"],"sourcesContent":["import { 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 {\n GetLayoutUseCase,\n TranslateLayoutUseCase,\n UpdateLayoutRepository,\n type WbLayout\n} from \"@webiny/api-website-builder/exports/api/website-builder/layouts.js\";\nimport {\n GlobalComponentLanguage,\n ListGlobalComponentsUseCase,\n SaveGlobalComponentRepository,\n type GlobalComponent\n} from \"@webiny/api-website-builder/exports/api/website-builder/globals.js\";\nimport {\n AiCapabilityDisabledError,\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 {\n applyTranslatedBindings,\n extractTranslatableBindings,\n type TranslatableBindings\n} from \"./translatableBindings.js\";\nimport {\n extractTranslatableGlobals,\n saveTranslatedGlobalComponents,\n type TranslatableGlobals\n} from \"./translatableGlobals.js\";\nimport { LlmJsonResponse } from \"~/domain/LlmJsonResponse.js\";\n\ninterface TranslationInput {\n // The layout's own bindings, including its overrides of globals.\n bindings: TranslatableBindings;\n // The bindings of each global to create in the target language, by global name.\n globals: TranslatableGlobals;\n}\n\ntype TranslatedData = Partial<TranslationInput>;\n\n/**\n * Translates a new language version of a layout, and creates the target-language records of the\n * globals placed in it that don't have one yet. It runs under the \"Page translation\" capability.\n * Like page translation it is non-fatal: the language version is already created, just untranslated.\n */\nclass WbTranslateLayoutDecoratorImpl implements TranslateLayoutUseCase.Interface {\n constructor(\n private getDefaultLanguage: GetDefaultLanguageUseCase.Interface,\n private resolveCapability: ResolveAiCapabilityUseCase.Interface,\n private logger: Logger.Interface,\n private ai: Ai.Interface,\n private lexicalParser: LexicalParser.Interface,\n private getLayout: GetLayoutUseCase.Interface,\n private updateLayoutRepository: UpdateLayoutRepository.Interface,\n private listGlobalComponents: ListGlobalComponentsUseCase.Interface,\n private saveGlobalComponentRepository: SaveGlobalComponentRepository.Interface,\n private decoratee: TranslateLayoutUseCase.Interface\n ) {}\n\n async execute(params: TranslateLayoutUseCase.Params): TranslateLayoutUseCase.Return {\n const result = await this.decoratee.execute(params);\n if (result.isFail()) {\n return result;\n }\n\n try {\n return await this.translateLayout(params, result.value);\n } catch (error) {\n this.logger.warn(\n { reason: error instanceof Error ? error.message : String(error) },\n \"AI layout translation failed.\"\n );\n return result;\n }\n }\n\n private async translateLayout(\n params: TranslateLayoutUseCase.Params,\n layout: WbLayout\n ): TranslateLayoutUseCase.Return {\n const resolved = await this.resolveCapability.execute(WB_TRANSLATE_PAGE_CAPABILITY);\n if (resolved.isFail()) {\n if (resolved.error instanceof AiCapabilityDisabledError) {\n this.logger.info(\"AI page translation is switched off; skipping layout.\");\n return Result.ok(layout);\n }\n this.logger.warn({ reason: resolved.error.message }, \"Skipping AI layout translation.\");\n return Result.ok(layout);\n }\n const capability = resolved.value;\n\n const targetLanguage = GlobalComponentLanguage.from(params.language);\n const sourceLanguage = await this.getSourceLanguage(params.id);\n\n const globals = await this.getUntranslatedGlobalComponents(\n layout,\n sourceLanguage,\n targetLanguage\n );\n\n const input: TranslationInput = {\n bindings: extractTranslatableBindings(layout.bindings),\n globals: extractTranslatableGlobals(globals)\n };\n\n const hasLayoutText = Object.keys(input.bindings).length > 0;\n const hasGlobalText = Object.keys(input.globals).length > 0;\n\n let translations: TranslatedData = {};\n if (hasLayoutText || hasGlobalText) {\n const promptLanguage = sourceLanguage.isDefault()\n ? await this.getDefaultLanguageCode()\n : sourceLanguage.toString();\n const translated = await this.requestTranslation(\n capability,\n promptLanguage,\n targetLanguage.toString(),\n input\n );\n if (!translated) {\n this.logger.warn(\n { id: layout.id, language: targetLanguage.toString() },\n \"The AI layout translation could not be read; the layout stays untranslated.\"\n );\n return Result.ok(layout);\n }\n translations = translated;\n }\n\n // Globals are stored apart from the layout, so a failed layout update doesn't stop them.\n await saveTranslatedGlobalComponents({\n globals,\n translated: translations.globals,\n language: targetLanguage.toString(),\n lexicalParser: this.lexicalParser,\n repository: this.saveGlobalComponentRepository,\n logger: this.logger\n });\n\n if (!hasLayoutText) {\n return Result.ok(layout);\n }\n\n const bindings = await applyTranslatedBindings(\n layout.bindings,\n translations.bindings,\n this.lexicalParser\n );\n\n // The new language version is a draft, so it is written directly, as page translation does.\n const updateResult = await this.updateLayoutRepository.execute(layout.id, {\n properties: layout.properties,\n metadata: layout.metadata,\n elements: layout.elements,\n bindings,\n extensions: layout.extensions\n });\n if (updateResult.isFail()) {\n this.logger.warn(\n { reason: updateResult.error.message, id: layout.id },\n \"Could not save the AI translated layout.\"\n );\n return Result.ok(layout);\n }\n\n return Result.ok(updateResult.value);\n }\n\n /**\n * The language of the source layout: `\"default\"` if it has none.\n */\n private async getSourceLanguage(sourceId: string): Promise<GlobalComponentLanguage> {\n const source = await this.getLayout.execute(sourceId);\n if (source.isFail()) {\n return GlobalComponentLanguage.default();\n }\n return GlobalComponentLanguage.from(source.value.properties.language);\n }\n\n // The language named in the prompt when the source layout has none, as for pages.\n private async getDefaultLanguageCode(): Promise<string> {\n const result = await this.getDefaultLanguage.execute();\n if (result.isOk()) {\n return result.value.code;\n }\n return \"en\";\n }\n\n /**\n * The records to create in the target language: for each global placed in the layout that has no\n * record in the target language yet, its record in the source language, else its `\"default\"` one.\n * A global already stored in the target language is never overwritten. A placed component with no\n * record at all isn't a stored global, and is skipped.\n */\n private async getUntranslatedGlobalComponents(\n layout: WbLayout,\n sourceLanguage: GlobalComponentLanguage,\n targetLanguage: GlobalComponentLanguage\n ): Promise<GlobalComponent[]> {\n const placedNames = new Set<string>();\n for (const element of Object.values<any>(layout.elements ?? {})) {\n const name = element?.component?.name;\n if (typeof name === \"string\" && name) {\n placedNames.add(name);\n }\n }\n if (!placedNames.size) {\n return [];\n }\n\n const languages: GlobalComponentLanguage[] = [];\n for (const language of [\n targetLanguage,\n sourceLanguage,\n GlobalComponentLanguage.default()\n ]) {\n if (!languages.some(listed => listed.equals(language))) {\n languages.push(language);\n }\n }\n const results = await Promise.all(\n languages.map(language =>\n this.listGlobalComponents.execute({ language: language.toString() })\n )\n );\n\n const byLanguage: {\n language: GlobalComponentLanguage;\n records: Map<string, GlobalComponent>;\n }[] = [];\n for (const [index, listed] of results.entries()) {\n if (listed.isFail()) {\n this.logger.warn(\n { reason: listed.error.message, language: languages[index].toString() },\n \"Skipping AI translation of global components.\"\n );\n return [];\n }\n byLanguage.push({\n language: languages[index],\n records: new Map(\n listed.value.map(globalComponent => [globalComponent.name, globalComponent])\n )\n });\n }\n const recordsIn = (language: GlobalComponentLanguage) =>\n byLanguage.find(listed => listed.language.equals(language))!.records;\n\n const target = recordsIn(targetLanguage);\n const source = recordsIn(sourceLanguage);\n const fallback = recordsIn(GlobalComponentLanguage.default());\n\n const untranslated: GlobalComponent[] = [];\n for (const name of placedNames) {\n if (target.has(name)) {\n continue;\n }\n const record = source.get(name) ?? fallback.get(name);\n if (record) {\n untranslated.push(record);\n }\n }\n return untranslated;\n }\n\n private async requestTranslation(\n capability: ResolveAiCapabilityUseCase.Resolution,\n sourceLanguage: string,\n targetLanguage: string,\n input: TranslationInput\n ): Promise<TranslatedData | null> {\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. \"bindings\" values are located in the \"value\" key. \"globals\" holds more bindings of the same shape, grouped by component name; keep the grouping. ${JSON.stringify(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\nexport const WbTranslateLayoutDecorator = TranslateLayoutUseCase.createDecorator({\n decorator: WbTranslateLayoutDecoratorImpl,\n dependencies: [\n GetDefaultLanguageUseCase,\n ResolveAiCapabilityUseCase,\n Logger,\n Ai,\n LexicalParser,\n GetLayoutUseCase,\n UpdateLayoutRepository,\n ListGlobalComponentsUseCase,\n SaveGlobalComponentRepository\n ]\n});\n"],"names":["WbTranslateLayoutDecoratorImpl","getDefaultLanguage","resolveCapability","logger","ai","lexicalParser","getLayout","updateLayoutRepository","listGlobalComponents","saveGlobalComponentRepository","decoratee","params","result","error","Error","String","layout","resolved","WB_TRANSLATE_PAGE_CAPABILITY","AiCapabilityDisabledError","Result","capability","targetLanguage","GlobalComponentLanguage","sourceLanguage","globals","input","extractTranslatableBindings","extractTranslatableGlobals","hasLayoutText","Object","hasGlobalText","translations","promptLanguage","translated","saveTranslatedGlobalComponents","bindings","applyTranslatedBindings","updateResult","sourceId","source","placedNames","Set","element","name","languages","language","listed","results","Promise","byLanguage","index","Map","globalComponent","recordsIn","target","fallback","untranslated","record","withAdditionalInstructions","JSON","LlmJsonResponse","WbTranslateLayoutDecorator","TranslateLayoutUseCase","GetDefaultLanguageUseCase","ResolveAiCapabilityUseCase","Logger","Ai","LexicalParser","GetLayoutUseCase","UpdateLayoutRepository","ListGlobalComponentsUseCase","SaveGlobalComponentRepository"],"mappings":";;;;;;;;;;;;AAiDA,MAAMA;IACF,YACYC,kBAAuD,EACvDC,iBAAuD,EACvDC,MAAwB,EACxBC,EAAgB,EAChBC,aAAsC,EACtCC,SAAqC,EACrCC,sBAAwD,EACxDC,oBAA2D,EAC3DC,6BAAsE,EACtEC,SAA2C,CACrD;aAVUT,kBAAkB,GAAlBA;aACAC,iBAAiB,GAAjBA;aACAC,MAAM,GAANA;aACAC,EAAE,GAAFA;aACAC,aAAa,GAAbA;aACAC,SAAS,GAATA;aACAC,sBAAsB,GAAtBA;aACAC,oBAAoB,GAApBA;aACAC,6BAA6B,GAA7BA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,MAAqC,EAAiC;QAChF,MAAMC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QAC5C,IAAIC,OAAO,MAAM,IACb,OAAOA;QAGX,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,eAAe,CAACD,QAAQC,OAAO,KAAK;QAC1D,EAAE,OAAOC,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ;gBAAE,QAAQA,iBAAiBC,QAAQD,MAAM,OAAO,GAAGE,OAAOF;YAAO,GACjE;YAEJ,OAAOD;QACX;IACJ;IAEA,MAAc,gBACVD,MAAqC,EACrCK,MAAgB,EACa;QAC7B,MAAMC,WAAW,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACC;QACtD,IAAID,SAAS,MAAM,IAAI;YACnB,IAAIA,SAAS,KAAK,YAAYE,2BAA2B;gBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,OAAOC,OAAO,EAAE,CAACJ;YACrB;YACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,QAAQC,SAAS,KAAK,CAAC,OAAO;YAAC,GAAG;YACrD,OAAOG,OAAO,EAAE,CAACJ;QACrB;QACA,MAAMK,aAAaJ,SAAS,KAAK;QAEjC,MAAMK,iBAAiBC,wBAAwB,IAAI,CAACZ,OAAO,QAAQ;QACnE,MAAMa,iBAAiB,MAAM,IAAI,CAAC,iBAAiB,CAACb,OAAO,EAAE;QAE7D,MAAMc,UAAU,MAAM,IAAI,CAAC,+BAA+B,CACtDT,QACAQ,gBACAF;QAGJ,MAAMI,QAA0B;YAC5B,UAAUC,4BAA4BX,OAAO,QAAQ;YACrD,SAASY,2BAA2BH;QACxC;QAEA,MAAMI,gBAAgBC,OAAO,IAAI,CAACJ,MAAM,QAAQ,EAAE,MAAM,GAAG;QAC3D,MAAMK,gBAAgBD,OAAO,IAAI,CAACJ,MAAM,OAAO,EAAE,MAAM,GAAG;QAE1D,IAAIM,eAA+B,CAAC;QACpC,IAAIH,iBAAiBE,eAAe;YAChC,MAAME,iBAAiBT,eAAe,SAAS,KACzC,MAAM,IAAI,CAAC,sBAAsB,KACjCA,eAAe,QAAQ;YAC7B,MAAMU,aAAa,MAAM,IAAI,CAAC,kBAAkB,CAC5Cb,YACAY,gBACAX,eAAe,QAAQ,IACvBI;YAEJ,IAAI,CAACQ,YAAY;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ;oBAAE,IAAIlB,OAAO,EAAE;oBAAE,UAAUM,eAAe,QAAQ;gBAAG,GACrD;gBAEJ,OAAOF,OAAO,EAAE,CAACJ;YACrB;YACAgB,eAAeE;QACnB;QAGA,MAAMC,+BAA+B;YACjCV;YACA,YAAYO,aAAa,OAAO;YAChC,UAAUV,eAAe,QAAQ;YACjC,eAAe,IAAI,CAAC,aAAa;YACjC,YAAY,IAAI,CAAC,6BAA6B;YAC9C,QAAQ,IAAI,CAAC,MAAM;QACvB;QAEA,IAAI,CAACO,eACD,OAAOT,OAAO,EAAE,CAACJ;QAGrB,MAAMoB,WAAW,MAAMC,wBACnBrB,OAAO,QAAQ,EACfgB,aAAa,QAAQ,EACrB,IAAI,CAAC,aAAa;QAItB,MAAMM,eAAe,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAACtB,OAAO,EAAE,EAAE;YACtE,YAAYA,OAAO,UAAU;YAC7B,UAAUA,OAAO,QAAQ;YACzB,UAAUA,OAAO,QAAQ;YACzBoB;YACA,YAAYpB,OAAO,UAAU;QACjC;QACA,IAAIsB,aAAa,MAAM,IAAI;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ;gBAAE,QAAQA,aAAa,KAAK,CAAC,OAAO;gBAAE,IAAItB,OAAO,EAAE;YAAC,GACpD;YAEJ,OAAOI,OAAO,EAAE,CAACJ;QACrB;QAEA,OAAOI,OAAO,EAAE,CAACkB,aAAa,KAAK;IACvC;IAKA,MAAc,kBAAkBC,QAAgB,EAAoC;QAChF,MAAMC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QAC5C,IAAIC,OAAO,MAAM,IACb,OAAOjB,uBAAuB,CAAvBA,UAA+B;QAE1C,OAAOA,wBAAwB,IAAI,CAACiB,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ;IACxE;IAGA,MAAc,yBAA0C;QACpD,MAAM5B,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO;QACpD,IAAIA,OAAO,IAAI,IACX,OAAOA,OAAO,KAAK,CAAC,IAAI;QAE5B,OAAO;IACX;IAQA,MAAc,gCACVI,MAAgB,EAChBQ,cAAuC,EACvCF,cAAuC,EACb;QAC1B,MAAMmB,cAAc,IAAIC;QACxB,KAAK,MAAMC,WAAWb,OAAO,MAAM,CAAMd,OAAO,QAAQ,IAAI,CAAC,GAAI;YAC7D,MAAM4B,OAAOD,SAAS,WAAW;YACjC,IAAI,AAAgB,YAAhB,OAAOC,QAAqBA,MAC5BH,YAAY,GAAG,CAACG;QAExB;QACA,IAAI,CAACH,YAAY,IAAI,EACjB,OAAO,EAAE;QAGb,MAAMI,YAAuC,EAAE;QAC/C,KAAK,MAAMC,YAAY;YACnBxB;YACAE;YACAD,uBAAuB,CAAvBA,UAA+B;SAClC,CACG,IAAI,CAACsB,UAAU,IAAI,CAACE,CAAAA,SAAUA,OAAO,MAAM,CAACD,YACxCD,UAAU,IAAI,CAACC;QAGvB,MAAME,UAAU,MAAMC,QAAQ,GAAG,CAC7BJ,UAAU,GAAG,CAACC,CAAAA,WACV,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAAE,UAAUA,SAAS,QAAQ;YAAG;QAI1E,MAAMI,aAGA,EAAE;QACR,KAAK,MAAM,CAACC,OAAOJ,OAAO,IAAIC,QAAQ,OAAO,GAAI;YAC7C,IAAID,OAAO,MAAM,IAAI;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ;oBAAE,QAAQA,OAAO,KAAK,CAAC,OAAO;oBAAE,UAAUF,SAAS,CAACM,MAAM,CAAC,QAAQ;gBAAG,GACtE;gBAEJ,OAAO,EAAE;YACb;YACAD,WAAW,IAAI,CAAC;gBACZ,UAAUL,SAAS,CAACM,MAAM;gBAC1B,SAAS,IAAIC,IACTL,OAAO,KAAK,CAAC,GAAG,CAACM,CAAAA,kBAAmB;wBAACA,gBAAgB,IAAI;wBAAEA;qBAAgB;YAEnF;QACJ;QACA,MAAMC,YAAY,CAACR,WACfI,WAAW,IAAI,CAACH,CAAAA,SAAUA,OAAO,QAAQ,CAAC,MAAM,CAACD,WAAY,OAAO;QAExE,MAAMS,SAASD,UAAUhC;QACzB,MAAMkB,SAASc,UAAU9B;QACzB,MAAMgC,WAAWF,UAAU/B,uBAAuB,CAAvBA,UAA+B;QAE1D,MAAMkC,eAAkC,EAAE;QAC1C,KAAK,MAAMb,QAAQH,YAAa;YAC5B,IAAIc,OAAO,GAAG,CAACX,OACX;YAEJ,MAAMc,SAASlB,OAAO,GAAG,CAACI,SAASY,SAAS,GAAG,CAACZ;YAChD,IAAIc,QACAD,aAAa,IAAI,CAACC;QAE1B;QACA,OAAOD;IACX;IAEA,MAAc,mBACVpC,UAAiD,EACjDG,cAAsB,EACtBF,cAAsB,EACtBI,KAAuB,EACO;QAC9B,MAAMd,SAAS,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;YACtC,OAAOS,WAAW,KAAK;YACvB,YAAYA,WAAW,UAAU;YACjC,QAAQsC,2BAA2BtC;YACnC,QAAQ,CAAC,sCAAsC,EAAEG,eAAe,oBAAoB,EAAEF,eAAe,4KAA4K,EAAEsC,KAAK,SAAS,CAAClC,QAAQ;YAC1S,aAAa;QACjB;QAEA,IAAI;YACA,OAAOmC,gBAAgB,WAAW,CAACjD,OAAO,IAAI,EAAE,MAAM;QAC1D,EAAE,OAAM;YACJ,OAAO;QACX;IACJ;AACJ;AAEO,MAAMkD,6BAA6BC,uBAAuB,eAAe,CAAC;IAC7E,WAAW/D;IACX,cAAc;QACVgE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
|
|
7
|
+
import { ListGlobalComponentsUseCase, ListPageGlobalComponentsUseCase, SaveGlobalComponentRepository } from "@webiny/api-website-builder/exports/api/website-builder/globals.js";
|
|
8
|
+
import { ResolveAiCapabilityUseCase } from "../../../api/features/Capabilities/index.js";
|
|
9
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
10
|
+
declare class WbTranslatePageDecoratorImpl implements TranslatePageUseCase.Interface {
|
|
11
|
+
private getDefaultLanguage;
|
|
12
|
+
private getPageById;
|
|
13
|
+
private resolveCapability;
|
|
14
|
+
private logger;
|
|
15
|
+
private ai;
|
|
16
|
+
private lexicalParser;
|
|
17
|
+
private updatePageRepository;
|
|
18
|
+
private listPageGlobalComponents;
|
|
19
|
+
private listGlobalComponents;
|
|
20
|
+
private saveGlobalComponentRepository;
|
|
21
|
+
private decoratee;
|
|
22
|
+
constructor(getDefaultLanguage: GetDefaultLanguageUseCase.Interface, getPageById: GetPageByIdUseCase.Interface, resolveCapability: ResolveAiCapabilityUseCase.Interface, logger: Logger.Interface, ai: Ai.Interface, lexicalParser: LexicalParser.Interface, updatePageRepository: UpdatePageRepository.Interface, listPageGlobalComponents: ListPageGlobalComponentsUseCase.Interface, listGlobalComponents: ListGlobalComponentsUseCase.Interface, saveGlobalComponentRepository: SaveGlobalComponentRepository.Interface, decoratee: TranslatePageUseCase.Interface);
|
|
23
|
+
execute(params: TranslatePageUseCase.Params): TranslatePageUseCase.Return;
|
|
24
|
+
/**
|
|
25
|
+
* The global components the source page is shown with that have no record in the target language
|
|
26
|
+
* yet: each in the source language, or its fallback. A global already stored in the target language
|
|
27
|
+
* is never overwritten, so translating more pages, or translating again, keeps it as it is.
|
|
28
|
+
*/
|
|
29
|
+
private getUntranslatedGlobalComponents;
|
|
30
|
+
private resolveSourceLanguage;
|
|
31
|
+
private translate;
|
|
32
|
+
private slugify;
|
|
33
|
+
private buildUpdateData;
|
|
34
|
+
}
|
|
35
|
+
export declare const WbTranslatePageDecorator: typeof WbTranslatePageDecoratorImpl & {
|
|
36
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-website-builder/features/pages/TranslatePage/abstractions.js").ITranslatePageUseCase>;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { Ai } from "@webiny/api-core/features/ai/index.js";
|
|
3
|
+
import { Logger } from "@webiny/api-core/features/logger/index.js";
|
|
4
|
+
import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
|
|
5
|
+
import { TranslatePageUseCase } from "@webiny/api-website-builder/features/pages/TranslatePage/index.js";
|
|
6
|
+
import { UpdatePageRepository } from "@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js";
|
|
7
|
+
import { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
|
|
8
|
+
import { ListGlobalComponentsUseCase, ListPageGlobalComponentsUseCase, SaveGlobalComponentRepository } from "@webiny/api-website-builder/exports/api/website-builder/globals.js";
|
|
9
|
+
import { AiCapabilityDisabledError, ResolveAiCapabilityUseCase, withAdditionalInstructions } from "../Capabilities/index.js";
|
|
10
|
+
import { WB_TRANSLATE_PAGE_CAPABILITY } from "./capability.js";
|
|
11
|
+
import { LexicalParser } from "./abstractions/LexicalParser.js";
|
|
12
|
+
import { applyTranslatedBindings, extractTranslatableBindings } from "./translatableBindings.js";
|
|
13
|
+
import { extractTranslatableGlobals, saveTranslatedGlobalComponents } from "./translatableGlobals.js";
|
|
14
|
+
import { LlmJsonResponse } from "../../../domain/LlmJsonResponse.js";
|
|
15
|
+
class WbTranslatePageDecoratorImpl {
|
|
16
|
+
constructor(getDefaultLanguage, getPageById, resolveCapability, logger, ai, lexicalParser, updatePageRepository, listPageGlobalComponents, listGlobalComponents, saveGlobalComponentRepository, decoratee){
|
|
17
|
+
this.getDefaultLanguage = getDefaultLanguage;
|
|
18
|
+
this.getPageById = getPageById;
|
|
19
|
+
this.resolveCapability = resolveCapability;
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
this.ai = ai;
|
|
22
|
+
this.lexicalParser = lexicalParser;
|
|
23
|
+
this.updatePageRepository = updatePageRepository;
|
|
24
|
+
this.listPageGlobalComponents = listPageGlobalComponents;
|
|
25
|
+
this.listGlobalComponents = listGlobalComponents;
|
|
26
|
+
this.saveGlobalComponentRepository = saveGlobalComponentRepository;
|
|
27
|
+
this.decoratee = decoratee;
|
|
28
|
+
}
|
|
29
|
+
async execute(params) {
|
|
30
|
+
const result = await this.decoratee.execute(params);
|
|
31
|
+
if (result.isFail()) return result;
|
|
32
|
+
const page = result.value;
|
|
33
|
+
const sourceLanguage = await this.resolveSourceLanguage(page);
|
|
34
|
+
const globals = await this.getUntranslatedGlobalComponents(sourceLanguage, params.languageCode);
|
|
35
|
+
const translations = await this.translate(page, globals, sourceLanguage, params.languageCode);
|
|
36
|
+
if (!translations) return Result.ok(page);
|
|
37
|
+
await saveTranslatedGlobalComponents({
|
|
38
|
+
globals,
|
|
39
|
+
translated: translations.globals,
|
|
40
|
+
language: params.languageCode,
|
|
41
|
+
lexicalParser: this.lexicalParser,
|
|
42
|
+
repository: this.saveGlobalComponentRepository,
|
|
43
|
+
logger: this.logger
|
|
44
|
+
});
|
|
45
|
+
const updateData = await this.buildUpdateData(page, translations);
|
|
46
|
+
const updateResult = await this.updatePageRepository.execute(page.id, updateData);
|
|
47
|
+
if (updateResult.isFail()) return Result.ok(page);
|
|
48
|
+
return Result.ok(updateResult.value);
|
|
49
|
+
}
|
|
50
|
+
async getUntranslatedGlobalComponents(sourceLanguage, targetLanguage) {
|
|
51
|
+
const [source, target] = await Promise.all([
|
|
52
|
+
this.listPageGlobalComponents.execute({
|
|
53
|
+
language: sourceLanguage
|
|
54
|
+
}),
|
|
55
|
+
this.listGlobalComponents.execute({
|
|
56
|
+
language: targetLanguage
|
|
57
|
+
})
|
|
58
|
+
]);
|
|
59
|
+
if (source.isFail()) {
|
|
60
|
+
this.logger.warn({
|
|
61
|
+
reason: source.error.message
|
|
62
|
+
}, "Skipping AI translation of global components.");
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
if (target.isFail()) {
|
|
66
|
+
this.logger.warn({
|
|
67
|
+
reason: target.error.message
|
|
68
|
+
}, "Skipping AI translation of global components.");
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const translatedNames = new Set(target.value.map((globalComponent)=>globalComponent.name));
|
|
72
|
+
return source.value.filter((globalComponent)=>!translatedNames.has(globalComponent.name));
|
|
73
|
+
}
|
|
74
|
+
async resolveSourceLanguage(page) {
|
|
75
|
+
if (page.properties["sourcePage"]) {
|
|
76
|
+
const sourcePageId = `${page.properties["sourcePage"]}#0001`;
|
|
77
|
+
const sourcePage = await this.getPageById.execute(sourcePageId);
|
|
78
|
+
if (sourcePage.isOk()) return sourcePage.value.properties["language"];
|
|
79
|
+
return page.properties["language"] ?? "en";
|
|
80
|
+
}
|
|
81
|
+
const result = await this.getDefaultLanguage.execute();
|
|
82
|
+
if (result.isOk()) return result.value.code;
|
|
83
|
+
return "en";
|
|
84
|
+
}
|
|
85
|
+
async translate(page, globals, sourceLanguage, targetLanguage) {
|
|
86
|
+
const resolved = await this.resolveCapability.execute(WB_TRANSLATE_PAGE_CAPABILITY);
|
|
87
|
+
if (resolved.isFail()) {
|
|
88
|
+
if (resolved.error instanceof AiCapabilityDisabledError) {
|
|
89
|
+
this.logger.info("AI page translation is switched off; skipping.");
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
this.logger.warn({
|
|
93
|
+
reason: resolved.error.message
|
|
94
|
+
}, "Skipping AI page translation.");
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const capability = resolved.value;
|
|
98
|
+
const properties = {
|
|
99
|
+
title: page.properties["title"],
|
|
100
|
+
snippet: page.properties["snippet"],
|
|
101
|
+
pathSlug: page.properties["title"]
|
|
102
|
+
};
|
|
103
|
+
const bindings = extractTranslatableBindings(page.bindings);
|
|
104
|
+
const input = JSON.stringify({
|
|
105
|
+
properties,
|
|
106
|
+
bindings,
|
|
107
|
+
globals: extractTranslatableGlobals(globals)
|
|
108
|
+
});
|
|
109
|
+
const result = await this.ai.generateText({
|
|
110
|
+
model: capability.model,
|
|
111
|
+
connection: capability.connection,
|
|
112
|
+
system: withAdditionalInstructions(capability),
|
|
113
|
+
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. "globals" holds more bindings of the same shape, grouped by component name; keep the grouping. ${input}`,
|
|
114
|
+
temperature: 0.3
|
|
115
|
+
});
|
|
116
|
+
try {
|
|
117
|
+
return LlmJsonResponse.fromRawText(result.text).toJSON();
|
|
118
|
+
} catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
slugify(text) {
|
|
123
|
+
return text.toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
124
|
+
}
|
|
125
|
+
async buildUpdateData(page, translations) {
|
|
126
|
+
const properties = {
|
|
127
|
+
...page.properties
|
|
128
|
+
};
|
|
129
|
+
const translatedPathSlug = translations.properties["pathSlug"];
|
|
130
|
+
delete translations.properties["pathSlug"];
|
|
131
|
+
for (const [key, value] of Object.entries(translations.properties))properties[key] = value;
|
|
132
|
+
if (translatedPathSlug) {
|
|
133
|
+
const slug = this.slugify(translatedPathSlug);
|
|
134
|
+
if (slug) {
|
|
135
|
+
const languageCode = page.properties["language"];
|
|
136
|
+
properties["path"] = `/${languageCode}/${slug}`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const bindings = await applyTranslatedBindings(page.bindings, translations.bindings, this.lexicalParser);
|
|
140
|
+
return {
|
|
141
|
+
properties,
|
|
142
|
+
bindings
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const WbTranslatePageDecorator = TranslatePageUseCase.createDecorator({
|
|
147
|
+
decorator: WbTranslatePageDecoratorImpl,
|
|
148
|
+
dependencies: [
|
|
149
|
+
GetDefaultLanguageUseCase,
|
|
150
|
+
GetPageByIdUseCase,
|
|
151
|
+
ResolveAiCapabilityUseCase,
|
|
152
|
+
Logger,
|
|
153
|
+
Ai,
|
|
154
|
+
LexicalParser,
|
|
155
|
+
UpdatePageRepository,
|
|
156
|
+
ListPageGlobalComponentsUseCase,
|
|
157
|
+
ListGlobalComponentsUseCase,
|
|
158
|
+
SaveGlobalComponentRepository
|
|
159
|
+
]
|
|
160
|
+
});
|
|
161
|
+
export { WbTranslatePageDecorator };
|
|
162
|
+
|
|
163
|
+
//# 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 { 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 { GetPageByIdUseCase } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport {\n ListGlobalComponentsUseCase,\n ListPageGlobalComponentsUseCase,\n SaveGlobalComponentRepository,\n type GlobalComponent\n} from \"@webiny/api-website-builder/exports/api/website-builder/globals.js\";\nimport { AiCapabilityDisabledError } from \"~/api/features/Capabilities/index.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 {\n applyTranslatedBindings,\n extractTranslatableBindings,\n type TranslatableBindings\n} from \"./translatableBindings.js\";\nimport {\n extractTranslatableGlobals,\n saveTranslatedGlobalComponents,\n type TranslatableGlobals\n} from \"./translatableGlobals.js\";\nimport { LlmJsonResponse } from \"~/domain/LlmJsonResponse.js\";\n\ninterface TranslatedData {\n properties: Record<string, string>;\n bindings: TranslatableBindings;\n globals?: TranslatableGlobals;\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 listPageGlobalComponents: ListPageGlobalComponentsUseCase.Interface,\n private listGlobalComponents: ListGlobalComponentsUseCase.Interface,\n private saveGlobalComponentRepository: SaveGlobalComponentRepository.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 /*\n * The page's own overrides of globals and of its layout's elements are page data, so they're\n * translated with the rest of its bindings. Globals are stored apart from pages: those with no\n * record in the target language yet get one, translated in the same AI call. That covers globals\n * a frontend's code layout places, which no stored layout lists.\n */\n const globals = await this.getUntranslatedGlobalComponents(\n sourceLanguage,\n params.languageCode\n );\n const translations = await this.translate(\n page,\n globals,\n sourceLanguage,\n params.languageCode\n );\n if (!translations) {\n return Result.ok(page);\n }\n\n // Globals are stored apart from the page, so a failed page update doesn't stop them.\n await saveTranslatedGlobalComponents({\n globals,\n translated: translations.globals,\n language: params.languageCode,\n lexicalParser: this.lexicalParser,\n repository: this.saveGlobalComponentRepository,\n logger: this.logger\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 /**\n * The global components the source page is shown with that have no record in the target language\n * yet: each in the source language, or its fallback. A global already stored in the target language\n * is never overwritten, so translating more pages, or translating again, keeps it as it is.\n */\n private async getUntranslatedGlobalComponents(\n sourceLanguage: string,\n targetLanguage: string\n ): Promise<GlobalComponent[]> {\n const [source, target] = await Promise.all([\n this.listPageGlobalComponents.execute({ language: sourceLanguage }),\n this.listGlobalComponents.execute({ language: targetLanguage })\n ]);\n\n if (source.isFail()) {\n this.logger.warn(\n { reason: source.error.message },\n \"Skipping AI translation of global components.\"\n );\n return [];\n }\n if (target.isFail()) {\n this.logger.warn(\n { reason: target.error.message },\n \"Skipping AI translation of global components.\"\n );\n return [];\n }\n\n const translatedNames = new Set(target.value.map(globalComponent => globalComponent.name));\n return source.value.filter(globalComponent => !translatedNames.has(globalComponent.name));\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 globals: GlobalComponent[],\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\n * non-fatal: the page is already created, just untranslated. A misconfiguration is\n * logged as a warning, because a silently skipped translation was indistinguishable\n * from a broken one. Switched off is not a problem, so it is only noted.\n */\n if (resolved.error instanceof AiCapabilityDisabledError) {\n this.logger.info(\"AI page translation is switched off; skipping.\");\n return null;\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 = extractTranslatableBindings(page.bindings);\n const input = JSON.stringify({\n properties,\n bindings,\n globals: extractTranslatableGlobals(globals)\n });\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. \"globals\" holds more bindings of the same shape, grouped by component name; keep the grouping. ${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 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\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 const bindings = await applyTranslatedBindings(\n page.bindings,\n translations.bindings,\n this.lexicalParser\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 ListPageGlobalComponentsUseCase,\n ListGlobalComponentsUseCase,\n SaveGlobalComponentRepository\n ]\n});\n"],"names":["WbTranslatePageDecoratorImpl","getDefaultLanguage","getPageById","resolveCapability","logger","ai","lexicalParser","updatePageRepository","listPageGlobalComponents","listGlobalComponents","saveGlobalComponentRepository","decoratee","params","result","page","sourceLanguage","globals","translations","Result","saveTranslatedGlobalComponents","updateData","updateResult","targetLanguage","source","target","Promise","translatedNames","Set","globalComponent","sourcePageId","sourcePage","resolved","WB_TRANSLATE_PAGE_CAPABILITY","AiCapabilityDisabledError","capability","properties","bindings","extractTranslatableBindings","input","JSON","extractTranslatableGlobals","withAdditionalInstructions","LlmJsonResponse","text","translatedPathSlug","key","value","Object","slug","languageCode","applyTranslatedBindings","WbTranslatePageDecorator","TranslatePageUseCase","GetDefaultLanguageUseCase","GetPageByIdUseCase","ResolveAiCapabilityUseCase","Logger","Ai","LexicalParser","UpdatePageRepository","ListPageGlobalComponentsUseCase","ListGlobalComponentsUseCase","SaveGlobalComponentRepository"],"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 = "wbTranslatePage";
|
|
3
|
+
declare class WbTranslatePageCapabilityImpl implements AiCapability.Interface {
|
|
4
|
+
readonly id = "wbTranslatePage";
|
|
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 = "wbTranslatePage";
|
|
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 = \"wbTranslatePage\";\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"}
|