@ai-stack/payloadcms 3.76.0-beta.0 → 3.76.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/dist/ai/core/generateObject.js +1 -4
  2. package/dist/ai/core/generateObject.js.map +1 -1
  3. package/dist/ai/core/generateText.js +1 -5
  4. package/dist/ai/core/generateText.js.map +1 -1
  5. package/dist/ai/core/media/generateMedia.js +1 -4
  6. package/dist/ai/core/media/generateMedia.js.map +1 -1
  7. package/dist/ai/core/media/image/generateImage.js +4 -14
  8. package/dist/ai/core/media/image/generateImage.js.map +1 -1
  9. package/dist/ai/core/media/image/handlers/multimodal.js +21 -58
  10. package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
  11. package/dist/ai/core/media/image/handlers/standard.js +17 -9
  12. package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
  13. package/dist/ai/core/media/speech/generateSpeech.js +10 -11
  14. package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
  15. package/dist/ai/core/media/types.d.ts +3 -4
  16. package/dist/ai/core/media/types.js.map +1 -1
  17. package/dist/ai/core/streamObject.js +0 -3
  18. package/dist/ai/core/streamObject.js.map +1 -1
  19. package/dist/ai/core/streamText.js +1 -4
  20. package/dist/ai/core/streamText.js.map +1 -1
  21. package/dist/ai/core/types.d.ts +2 -2
  22. package/dist/ai/core/types.js.map +1 -1
  23. package/dist/ai/providers/blocks/anthropic.js +0 -42
  24. package/dist/ai/providers/blocks/anthropic.js.map +1 -1
  25. package/dist/ai/providers/blocks/elevenlabs.js +1 -106
  26. package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
  27. package/dist/ai/providers/blocks/fal.js +0 -118
  28. package/dist/ai/providers/blocks/fal.js.map +1 -1
  29. package/dist/ai/providers/blocks/google.js +2 -236
  30. package/dist/ai/providers/blocks/google.js.map +1 -1
  31. package/dist/ai/providers/blocks/openai-compatible.js +0 -144
  32. package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
  33. package/dist/ai/providers/blocks/openai.js +0 -200
  34. package/dist/ai/providers/blocks/openai.js.map +1 -1
  35. package/dist/ai/providers/blocks/xai.js +0 -53
  36. package/dist/ai/providers/blocks/xai.js.map +1 -1
  37. package/dist/ai/providers/index.d.ts +1 -1
  38. package/dist/ai/providers/index.js +0 -2
  39. package/dist/ai/providers/index.js.map +1 -1
  40. package/dist/ai/providers/registry.d.ts +24 -28
  41. package/dist/ai/providers/registry.js +186 -140
  42. package/dist/ai/providers/registry.js.map +1 -1
  43. package/dist/ai/providers/types.d.ts +12 -33
  44. package/dist/ai/providers/types.js +0 -1
  45. package/dist/ai/providers/types.js.map +1 -1
  46. package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
  47. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
  48. package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
  49. package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
  50. package/dist/ai/utilities/isObjectSchema.js.map +1 -0
  51. package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
  52. package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
  53. package/dist/ai/utilities/prompts.js.map +1 -0
  54. package/dist/ai/utilities/systemGenerate.js.map +1 -0
  55. package/dist/collections/AIJobs.js +3 -12
  56. package/dist/collections/AIJobs.js.map +1 -1
  57. package/dist/collections/AIProviders.d.ts +2 -0
  58. package/dist/collections/{AISettings.js → AIProviders.js} +54 -26
  59. package/dist/collections/AIProviders.js.map +1 -0
  60. package/dist/collections/Instructions.js +93 -57
  61. package/dist/collections/Instructions.js.map +1 -1
  62. package/dist/collections/shared.d.ts +30 -0
  63. package/dist/collections/shared.js +15 -0
  64. package/dist/collections/shared.js.map +1 -0
  65. package/dist/defaults.js +1 -1
  66. package/dist/defaults.js.map +1 -1
  67. package/dist/endpoints/fetchFields.js +15 -7
  68. package/dist/endpoints/fetchFields.js.map +1 -1
  69. package/dist/endpoints/fetchVoices.js +2 -2
  70. package/dist/endpoints/fetchVoices.js.map +1 -1
  71. package/dist/endpoints/generate.d.ts +7 -0
  72. package/dist/endpoints/generate.js +268 -0
  73. package/dist/endpoints/generate.js.map +1 -0
  74. package/dist/endpoints/index.js +9 -604
  75. package/dist/endpoints/index.js.map +1 -1
  76. package/dist/endpoints/promptMentions.d.ts +2 -0
  77. package/dist/endpoints/promptMentions.js +166 -0
  78. package/dist/endpoints/promptMentions.js.map +1 -0
  79. package/dist/endpoints/upload.d.ts +7 -0
  80. package/dist/endpoints/upload.js +294 -0
  81. package/dist/endpoints/upload.js.map +1 -0
  82. package/dist/endpoints/videogenWebhook.d.ts +7 -0
  83. package/dist/endpoints/videogenWebhook.js +132 -0
  84. package/dist/endpoints/videogenWebhook.js.map +1 -0
  85. package/dist/exports/client.d.ts +3 -2
  86. package/dist/exports/client.js +3 -2
  87. package/dist/exports/client.js.map +1 -1
  88. package/dist/exports/fields.d.ts +2 -1
  89. package/dist/exports/fields.js +2 -1
  90. package/dist/exports/fields.js.map +1 -1
  91. package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
  92. package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
  93. package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
  94. package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
  95. package/dist/fields/ComposeField/ComposeField.js +18 -8
  96. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  97. package/dist/fields/ComposeField/ComposeField.jsx +12 -7
  98. package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
  99. package/dist/fields/PromptEditorField/feature.client.js +173 -0
  100. package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
  101. package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
  102. package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
  103. package/dist/fields/PromptEditorField/feature.server.js +30 -0
  104. package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
  105. package/dist/fields/PromptField.d.ts +4 -0
  106. package/dist/fields/PromptField.js +18 -0
  107. package/dist/fields/PromptField.js.map +1 -0
  108. package/dist/fields/SelectField/SelectField.js +0 -1
  109. package/dist/fields/SelectField/SelectField.js.map +1 -1
  110. package/dist/fields/SelectField/SelectField.jsx +0 -1
  111. package/dist/index.d.ts +4 -3
  112. package/dist/index.js +4 -2
  113. package/dist/index.js.map +1 -1
  114. package/dist/libraries/handlebars/helpers.js +2 -2
  115. package/dist/libraries/handlebars/helpers.js.map +1 -1
  116. package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
  117. package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
  118. package/dist/payload-ai.d.ts +5 -19
  119. package/dist/plugin.js +19 -22
  120. package/dist/plugin.js.map +1 -1
  121. package/dist/providers/FieldProvider/FieldProvider.js +10 -19
  122. package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
  123. package/dist/providers/FieldProvider/FieldProvider.jsx +7 -17
  124. package/dist/providers/InstructionsProvider/InstructionsProvider.js +4 -1
  125. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  126. package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +3 -0
  127. package/dist/providers/InstructionsProvider/useInstructions.js +1 -1
  128. package/dist/providers/InstructionsProvider/useInstructions.js.map +1 -1
  129. package/dist/translations/de.json +47 -0
  130. package/dist/translations/en.json +45 -2
  131. package/dist/translations/es.json +45 -2
  132. package/dist/translations/fa.json +45 -2
  133. package/dist/translations/fr.json +46 -3
  134. package/dist/translations/hi.json +47 -0
  135. package/dist/translations/index.d.ts +88 -26
  136. package/dist/translations/index.js +18 -32
  137. package/dist/translations/index.js.map +1 -1
  138. package/dist/translations/ja.json +47 -0
  139. package/dist/translations/nb.json +47 -0
  140. package/dist/translations/nl.json +47 -0
  141. package/dist/translations/pl.json +45 -2
  142. package/dist/translations/pt.json +47 -0
  143. package/dist/translations/ru.json +45 -2
  144. package/dist/translations/th.json +47 -0
  145. package/dist/translations/translation-schema.json +184 -11
  146. package/dist/translations/uk.json +45 -2
  147. package/dist/translations/zh.json +47 -0
  148. package/dist/types.d.ts +57 -31
  149. package/dist/types.js.map +1 -1
  150. package/dist/ui/Compose/Compose.js +42 -79
  151. package/dist/ui/Compose/Compose.js.map +1 -1
  152. package/dist/ui/Compose/Compose.jsx +32 -86
  153. package/dist/ui/Compose/ComposePlaceholder.js +1 -1
  154. package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
  155. package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
  156. package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
  157. package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
  158. package/dist/ui/Compose/hooks/menu/Item.js +7 -3
  159. package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
  160. package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
  161. package/dist/ui/Compose/hooks/menu/TranslateMenu.d.ts +5 -0
  162. package/dist/ui/Compose/hooks/menu/TranslateMenu.js +48 -5
  163. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
  164. package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +44 -6
  165. package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
  166. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
  167. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
  168. package/dist/ui/Compose/hooks/menu/menu.module.scss +4 -1
  169. package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
  170. package/dist/ui/Compose/hooks/menu/types.js +3 -0
  171. package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
  172. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
  173. package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
  174. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  175. package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
  176. package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
  177. package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
  178. package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
  179. package/dist/ui/Compose/hooks/useActiveFieldTracking.js +34 -0
  180. package/dist/ui/Compose/hooks/useActiveFieldTracking.js.map +1 -1
  181. package/dist/ui/Compose/hooks/useGenerate.js +37 -12
  182. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  183. package/dist/ui/Compose/hooks/useGenerateUpload.js +67 -19
  184. package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
  185. package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
  186. package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
  187. package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
  188. package/dist/ui/ConfigDashboard/index.d.ts +2 -0
  189. package/dist/ui/ConfigDashboard/index.js +159 -0
  190. package/dist/ui/ConfigDashboard/index.js.map +1 -0
  191. package/dist/ui/ConfigDashboard/index.jsx +122 -0
  192. package/dist/ui/DynamicModelSelect/index.js +6 -27
  193. package/dist/ui/DynamicModelSelect/index.js.map +1 -1
  194. package/dist/ui/DynamicModelSelect/index.jsx +6 -29
  195. package/dist/ui/DynamicProviderSelect/index.js +6 -27
  196. package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
  197. package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
  198. package/dist/ui/DynamicVoiceSelect/index.js +34 -83
  199. package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
  200. package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
  201. package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
  202. package/dist/ui/GlobalProviderOptions/index.js +118 -0
  203. package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
  204. package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
  205. package/dist/ui/Icons/Icons.js +1 -1
  206. package/dist/ui/Icons/Icons.js.map +1 -1
  207. package/dist/ui/Icons/Icons.jsx +1 -1
  208. package/dist/ui/Icons/LottieAnimation.js +1 -1
  209. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  210. package/dist/ui/Icons/LottieAnimation.jsx +1 -1
  211. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
  212. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
  213. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
  214. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
  215. package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
  216. package/dist/ui/InstructionProviderOptions/index.js +157 -0
  217. package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
  218. package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
  219. package/dist/ui/VoicesFetcher/index.js.map +1 -1
  220. package/dist/ui/hooks/useAISettings.d.ts +26 -0
  221. package/dist/ui/hooks/useAISettings.js +73 -0
  222. package/dist/ui/hooks/useAISettings.js.map +1 -0
  223. package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
  224. package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
  225. package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
  226. package/dist/ui/shared/handleSelectChange.d.ts +5 -0
  227. package/dist/ui/shared/handleSelectChange.js +12 -0
  228. package/dist/ui/shared/handleSelectChange.js.map +1 -0
  229. package/dist/ui/shared/types.d.ts +11 -0
  230. package/dist/ui/shared/types.js +5 -0
  231. package/dist/ui/shared/types.js.map +1 -0
  232. package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
  233. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
  234. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
  235. package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
  236. package/dist/utilities/buildPromptUtils.js.map +1 -0
  237. package/dist/utilities/buildSmartPrompt.js +3 -3
  238. package/dist/utilities/buildSmartPrompt.js.map +1 -1
  239. package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
  240. package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
  241. package/dist/utilities/fields/getFieldInfo.js.map +1 -0
  242. package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +8 -3
  243. package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
  244. package/dist/utilities/images/extractImageData.js.map +1 -0
  245. package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
  246. package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
  247. package/dist/utilities/images/fetchImages.js +49 -0
  248. package/dist/utilities/images/fetchImages.js.map +1 -0
  249. package/dist/utilities/images/resolveImageReferences.js +183 -0
  250. package/dist/utilities/images/resolveImageReferences.js.map +1 -0
  251. package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
  252. package/dist/utilities/init/autoSetupProviders.js +216 -0
  253. package/dist/utilities/init/autoSetupProviders.js.map +1 -0
  254. package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
  255. package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
  256. package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
  257. package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
  258. package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
  259. package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
  260. package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
  261. package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
  262. package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
  263. package/dist/utilities/sanitizeLog.d.ts +1 -0
  264. package/dist/utilities/sanitizeLog.js +39 -0
  265. package/dist/utilities/sanitizeLog.js.map +1 -0
  266. package/dist/utilities/seedProperties.js +37 -22
  267. package/dist/utilities/seedProperties.js.map +1 -1
  268. package/package.json +5 -2
  269. package/dist/ai/analyse.d.ts +0 -1
  270. package/dist/ai/analyse.js +0 -3
  271. package/dist/ai/analyse.js.map +0 -1
  272. package/dist/ai/index.d.ts +0 -11
  273. package/dist/ai/index.js +0 -25
  274. package/dist/ai/index.js.map +0 -1
  275. package/dist/ai/prompts.js.map +0 -1
  276. package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
  277. package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
  278. package/dist/ai/utils/isObjectSchema.js.map +0 -1
  279. package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
  280. package/dist/ai/utils/systemGenerate.js.map +0 -1
  281. package/dist/collections/AISettings.d.ts +0 -2
  282. package/dist/collections/AISettings.js.map +0 -1
  283. package/dist/endpoints/buildPromptUtils.js.map +0 -1
  284. package/dist/endpoints/chat.d.ts +0 -4
  285. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
  286. package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
  287. package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
  288. package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
  289. package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
  290. package/dist/ui/AIConfigDashboard/index.js +0 -222
  291. package/dist/ui/AIConfigDashboard/index.js.map +0 -1
  292. package/dist/ui/AIConfigDashboard/index.jsx +0 -170
  293. package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
  294. package/dist/ui/ProviderOptionsEditor/index.js +0 -291
  295. package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
  296. package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
  297. package/dist/utilities/editorSchemaValidator.js.map +0 -1
  298. package/dist/utilities/extractImageData.js.map +0 -1
  299. package/dist/utilities/extractPromptAttachments.js.map +0 -1
  300. package/dist/utilities/fetchImages.js +0 -38
  301. package/dist/utilities/fetchImages.js.map +0 -1
  302. package/dist/utilities/fieldToJsonSchema.js.map +0 -1
  303. package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
  304. package/dist/utilities/getFieldInfo.js.map +0 -1
  305. package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
  306. package/dist/utilities/getProviderOptionsFields.js +0 -80
  307. package/dist/utilities/getProviderOptionsFields.js.map +0 -1
  308. package/dist/utilities/isPluginActivated.d.ts +0 -2
  309. package/dist/utilities/isPluginActivated.js +0 -5
  310. package/dist/utilities/isPluginActivated.js.map +0 -1
  311. package/dist/utilities/lexicalToHTML.js.map +0 -1
  312. package/dist/utilities/resolveImageReferences.js +0 -167
  313. package/dist/utilities/resolveImageReferences.js.map +0 -1
  314. package/dist/utilities/schemaConverter.d.ts +0 -3
  315. package/dist/utilities/schemaConverter.js +0 -93
  316. package/dist/utilities/schemaConverter.js.map +0 -1
  317. package/dist/utilities/setSafeLexicalState.js.map +0 -1
  318. package/dist/utilities/updateFieldsConfig.js.map +0 -1
  319. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
  320. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
  321. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
  322. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
  323. /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
  324. /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
  325. /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
  326. /package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +0 -0
  327. /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
  328. /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
  329. /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
  330. /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
  331. /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
  332. /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
  333. /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
  334. /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
  335. /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
  336. /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
  337. /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
  338. /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
  339. /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
  340. /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
  341. /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
  342. /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
  343. /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
  344. /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
  345. /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
  346. /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
  347. /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
  348. /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
  349. /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
@@ -1,4 +1,8 @@
1
+ import { lexicalEditor } from '@payloadcms/richtext-lexical';
1
2
  import { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js';
3
+ import { PromptMentionsFeature } from '../fields/PromptEditorField/feature.server.js';
4
+ import { applyInstructionDefaultsForDisplay } from '../utilities/ai/resolveEffectiveInstructionSettings.js';
5
+ import { pluginCollectionAccess, pluginCollectionAdmin } from './shared.js';
2
6
  // Defined capabilities replacing src/ai/models/
3
7
  // Defined capabilities replacing src/ai/models/
4
8
  const CAPABILITIES = [
@@ -39,36 +43,6 @@ const CAPABILITIES = [
39
43
  ]
40
44
  }
41
45
  ];
42
- const defaultAccessConfig = {
43
- create: ({ req })=>{
44
- if (!req.user) {
45
- return false;
46
- }
47
- return true;
48
- },
49
- delete: ({ req })=>{
50
- if (!req.user) {
51
- return false;
52
- }
53
- return true;
54
- },
55
- read: ({ req })=>{
56
- if (!req.user) {
57
- return false;
58
- }
59
- return true;
60
- },
61
- update: ({ req })=>{
62
- if (!req.user) {
63
- return false;
64
- }
65
- return true;
66
- }
67
- };
68
- const defaultAdminConfig = {
69
- group: 'Plugins',
70
- hidden: true
71
- };
72
46
  const providerSelect = {
73
47
  name: 'provider',
74
48
  type: 'text',
@@ -89,17 +63,6 @@ const modelSelect = {
89
63
  },
90
64
  label: 'Model'
91
65
  };
92
- const providerOptionsJson = {
93
- name: 'providerOptions',
94
- type: 'json',
95
- admin: {
96
- components: {
97
- Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor'
98
- },
99
- description: 'Provider-specific options. Defaults are inherited from AI Settings.'
100
- },
101
- label: 'Provider Options'
102
- };
103
66
  const commonTextParams = [
104
67
  {
105
68
  type: 'row',
@@ -128,6 +91,16 @@ const commonTextParams = [
128
91
  label: 'Extract Attachments'
129
92
  }
130
93
  ];
94
+ const providerOptionsUIField = {
95
+ name: 'providerOptions',
96
+ type: 'json',
97
+ admin: {
98
+ components: {
99
+ Field: '@ai-stack/payloadcms/client#InstructionProviderOptions'
100
+ }
101
+ },
102
+ label: 'Provider Options'
103
+ };
131
104
  export const instructionsCollection = (pluginConfig)=>({
132
105
  labels: {
133
106
  plural: 'Compose Settings',
@@ -136,15 +109,16 @@ export const instructionsCollection = (pluginConfig)=>({
136
109
  ...pluginConfig.overrideInstructions,
137
110
  slug: PLUGIN_INSTRUCTIONS_TABLE,
138
111
  access: {
139
- ...defaultAccessConfig,
112
+ ...pluginCollectionAccess,
140
113
  ...pluginConfig.overrideInstructions?.access
141
114
  },
142
115
  admin: {
143
- ...defaultAdminConfig,
116
+ description: 'Customize how AI interacts with specific fields within your enabled collections.',
117
+ ...pluginCollectionAdmin,
144
118
  ...pluginConfig.overrideInstructions?.admin,
145
119
  components: {
146
120
  beforeList: [
147
- '@ai-stack/payloadcms/client#AIConfigDashboard'
121
+ '@ai-stack/payloadcms/client#ConfigDashboard'
148
122
  ]
149
123
  }
150
124
  },
@@ -153,7 +127,8 @@ export const instructionsCollection = (pluginConfig)=>({
153
127
  name: 'schema-path',
154
128
  type: 'text',
155
129
  admin: {
156
- description: "Please don't change this unless you're sure of what you're doing"
130
+ description: "Please don't change this unless you're sure of what you're doing",
131
+ hidden: !pluginConfig.debugging
157
132
  },
158
133
  unique: true
159
134
  },
@@ -161,7 +136,8 @@ export const instructionsCollection = (pluginConfig)=>({
161
136
  name: 'field-type',
162
137
  type: 'select',
163
138
  admin: {
164
- description: "Please don't change this unless you're sure of what you're doing"
139
+ description: "Please don't change this unless you're sure of what you're doing",
140
+ hidden: !pluginConfig.debugging
165
141
  },
166
142
  defaultValue: 'text',
167
143
  label: 'Field type',
@@ -194,10 +170,19 @@ export const instructionsCollection = (pluginConfig)=>({
194
170
  admin: {
195
171
  condition: (_, current)=>{
196
172
  return current['field-type'] === 'upload';
197
- }
173
+ },
174
+ hidden: !pluginConfig.debugging
198
175
  },
199
176
  label: 'Relation to'
200
177
  },
178
+ {
179
+ name: 'hasMany',
180
+ type: 'checkbox',
181
+ admin: {
182
+ hidden: true
183
+ },
184
+ defaultValue: false
185
+ },
201
186
  {
202
187
  name: 'model-id',
203
188
  type: 'select',
@@ -231,6 +216,26 @@ export const instructionsCollection = (pluginConfig)=>({
231
216
  defaultValue: false,
232
217
  label: 'Hide Compose button for this field'
233
218
  },
219
+ {
220
+ name: 'alwaysShow',
221
+ type: 'checkbox',
222
+ admin: {
223
+ condition: (_, current)=>!current.disabled,
224
+ description: 'Compose button will always be visible without requiring field focus'
225
+ },
226
+ defaultValue: false,
227
+ label: 'Always show Compose button'
228
+ },
229
+ {
230
+ name: 'appendGenerated',
231
+ type: 'checkbox',
232
+ admin: {
233
+ condition: (_, current)=>current?.hasMany === true && current?.disabled !== true,
234
+ description: 'If enabled, generated values are appended to current values instead of replacing them.'
235
+ },
236
+ defaultValue: false,
237
+ label: 'Append generated values'
238
+ },
234
239
  {
235
240
  id: 'ai-prompts-tabs',
236
241
  type: 'tabs',
@@ -240,13 +245,15 @@ export const instructionsCollection = (pluginConfig)=>({
240
245
  fields: [
241
246
  {
242
247
  name: 'prompt',
243
- type: 'textarea',
248
+ type: 'richText',
244
249
  admin: {
245
- components: {
246
- Field: '@ai-stack/payloadcms/fields#PromptEditorField'
247
- },
248
250
  description: "Click 'Compose' to run this custom prompt and generate content"
249
251
  },
252
+ editor: lexicalEditor({
253
+ features: ({ rootFeatures: _rootFeatures })=>[
254
+ PromptMentionsFeature()
255
+ ]
256
+ }),
250
257
  label: ''
251
258
  }
252
259
  ],
@@ -343,7 +350,7 @@ informative and accurate but also captivating and beautifully structured.`,
343
350
  providerSelect,
344
351
  modelSelect,
345
352
  ...commonTextParams,
346
- providerOptionsJson
353
+ providerOptionsUIField
347
354
  ],
348
355
  label: 'Text Settings'
349
356
  },
@@ -359,7 +366,7 @@ informative and accurate but also captivating and beautifully structured.`,
359
366
  providerSelect,
360
367
  modelSelect,
361
368
  ...commonTextParams,
362
- providerOptionsJson
369
+ providerOptionsUIField
363
370
  ],
364
371
  label: 'Rich Text Settings'
365
372
  },
@@ -374,7 +381,7 @@ informative and accurate but also captivating and beautifully structured.`,
374
381
  fields: [
375
382
  providerSelect,
376
383
  modelSelect,
377
- providerOptionsJson
384
+ providerOptionsUIField
378
385
  ],
379
386
  label: 'Image Settings'
380
387
  },
@@ -399,7 +406,7 @@ informative and accurate but also captivating and beautifully structured.`,
399
406
  },
400
407
  label: 'Voice'
401
408
  },
402
- providerOptionsJson
409
+ providerOptionsUIField
403
410
  ],
404
411
  label: 'TTS Settings'
405
412
  },
@@ -425,11 +432,40 @@ informative and accurate but also captivating and beautifully structured.`,
425
432
  max: 20,
426
433
  min: 1
427
434
  },
428
- providerOptionsJson
435
+ providerOptionsUIField
429
436
  ],
430
437
  label: 'Array Settings'
431
438
  }
432
- ]
439
+ ],
440
+ hooks: {
441
+ ...pluginConfig.overrideInstructions?.hooks,
442
+ afterRead: [
443
+ ...pluginConfig.overrideInstructions?.hooks?.afterRead || [],
444
+ async ({ context, doc, req })=>{
445
+ if (!doc || typeof doc !== 'object') {
446
+ return doc;
447
+ }
448
+ const cacheKey = '__aiProvidersDefaults';
449
+ const hookContext = context || {};
450
+ let defaults = hookContext[cacheKey];
451
+ if (!defaults) {
452
+ try {
453
+ const aiSettings = await req.payload.findGlobal({
454
+ slug: 'ai-providers'
455
+ });
456
+ defaults = aiSettings?.defaults || {};
457
+ hookContext[cacheKey] = defaults;
458
+ } catch (_error) {
459
+ return doc;
460
+ }
461
+ }
462
+ return applyInstructionDefaultsForDisplay({
463
+ defaults,
464
+ instructions: doc
465
+ });
466
+ }
467
+ ]
468
+ }
433
469
  });
434
470
 
435
471
  //# sourceMappingURL=Instructions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\nimport type { PluginConfig } from 'src/types.js'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\n// Defined capabilities replacing src/ai/models/\nconst CAPABILITIES = [\n {\n id: 'text',\n name: 'Text Generation',\n fields: ['text', 'textarea'],\n },\n {\n id: 'richtext',\n name: 'Rich Text Generation',\n fields: ['richText'],\n },\n {\n id: 'image',\n name: 'Image Generation',\n fields: ['upload'],\n },\n {\n id: 'tts',\n name: 'Text to Speech',\n fields: ['upload'],\n },\n {\n id: 'array',\n name: 'Array Generation',\n fields: ['array'],\n },\n]\n\nconst defaultAccessConfig = {\n create: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n delete: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n read: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n update: ({ req }: { req: { user?: any } }) => {\n if (!req.user) {\n return false\n }\n return true\n },\n}\n\nconst defaultAdminConfig = {\n group: 'Plugins',\n hidden: true,\n}\n\nconst providerSelect = {\n name: 'provider',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Provider',\n}\n\nconst modelSelect = {\n name: 'model',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Model',\n}\n\nconst providerOptionsJson = {\n name: 'providerOptions',\n type: 'json' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#ProviderOptionsEditor',\n },\n description: 'Provider-specific options. Defaults are inherited from AI Settings.',\n },\n label: 'Provider Options',\n}\n\nconst commonTextParams = [\n {\n type: 'row' as const,\n fields: [\n {\n name: 'maxTokens',\n type: 'number' as const,\n admin: {\n placeholder: 'Model Default',\n },\n label: 'Max Tokens',\n },\n {\n name: 'temperature',\n type: 'number' as const,\n defaultValue: 0.7,\n label: 'Temperature',\n max: 1,\n min: 0,\n },\n ],\n },\n {\n name: 'extractAttachments',\n type: 'checkbox' as const,\n label: 'Extract Attachments',\n },\n]\n\nexport const instructionsCollection = (pluginConfig: PluginConfig) =>\n <CollectionConfig>{\n labels: {\n plural: 'Compose Settings',\n singular: 'Compose Setting',\n },\n ...pluginConfig.overrideInstructions,\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n access: {\n ...defaultAccessConfig,\n ...pluginConfig.overrideInstructions?.access,\n },\n admin: {\n ...defaultAdminConfig,\n ...pluginConfig.overrideInstructions?.admin,\n components: {\n beforeList: ['@ai-stack/payloadcms/client#AIConfigDashboard'],\n },\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n {\n label: 'array',\n value: 'array',\n },\n ],\n },\n {\n name: 'relation-to',\n type: 'text',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload'\n },\n },\n label: 'Relation to',\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: {\n clientProps: {\n filterByField: 'field-type',\n options: CAPABILITIES.map((c) => ({\n fields: c.fields,\n label: c.name,\n value: c.id,\n })),\n },\n path: '@ai-stack/payloadcms/fields#SelectField',\n },\n },\n },\n label: 'Capability',\n options: CAPABILITIES.map((c) => ({\n label: c.name,\n value: c.id,\n })),\n },\n {\n name: 'disabled',\n type: 'checkbox',\n admin: {\n description: 'Please reload your collection after applying the changes',\n },\n defaultValue: false,\n label: 'Hide Compose button for this field',\n },\n {\n id: 'ai-prompts-tabs',\n type: 'tabs',\n tabs: [\n {\n description:\n 'Define dynamic templates using {{ fieldName }}. Type { to see available field suggestions.',\n fields: [\n {\n name: 'prompt',\n type: 'textarea',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/fields#PromptEditorField',\n },\n description: \"Click 'Compose' to run this custom prompt and generate content\",\n },\n label: '',\n },\n ],\n label: 'Prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload' && current['model-id'] === 'image'\n },\n },\n description:\n 'These images will be used to generate new visuals in a similar style, layout, or content.',\n fields: [\n {\n name: 'images',\n type: 'array',\n fields: [\n {\n name: 'image',\n type: 'upload',\n admin: {\n description: 'Please make sure the image is publicly accessible.',\n },\n relationTo: pluginConfig.uploadCollectionSlug\n ? pluginConfig.uploadCollectionSlug\n : 'media',\n },\n ],\n },\n ],\n label: 'Sample Images',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'system',\n type: 'textarea',\n defaultValue: `INSTRUCTIONS:\nYou are a highly skilled and professional blog writer,\nrenowned for crafting engaging and well-organized articles.\nWhen given a title, you meticulously create blogs that are not only\ninformative and accurate but also captivating and beautifully structured.`,\n label: '',\n },\n ],\n label: 'System prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'layout',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.\n[horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.\n[list] - Create a list with 3-5 items. Each list item should contain:\n a. [heading] - A brief, descriptive heading (up to 5 words)\n b. [paragraph] - A short explanation or elaboration (1-2 sentences)\n[horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.\n[paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.\n[quote] - Include a relevant quote from a famous person, directly related to the topic. Format: \"Quote text.\" - Author Name`,\n label: '',\n },\n ],\n label: 'Layout',\n },\n ],\n },\n \n // Inline Settings Groups by Capability\n \n // Text Settings\n {\n name: 'text-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'text',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsJson,\n ],\n label: 'Text Settings',\n },\n \n // Rich Text Settings\n {\n name: 'richtext-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'richtext',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsJson,\n ],\n label: 'Rich Text Settings',\n },\n \n // Image Settings\n {\n name: 'image-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'image',\n },\n fields: [\n providerSelect,\n modelSelect,\n providerOptionsJson,\n ],\n label: 'Image Settings',\n },\n \n // TTS Settings\n {\n name: 'tts-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'tts',\n },\n fields: [\n providerSelect,\n modelSelect,\n {\n name: 'voice',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect',\n },\n },\n label: 'Voice',\n },\n providerOptionsJson,\n ],\n label: 'TTS Settings',\n },\n \n // Array Settings\n {\n name: 'array-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'array',\n },\n fields: [\n providerSelect,\n modelSelect,\n {\n name: 'count',\n type: 'number',\n admin: {\n description: 'Number of items to generate',\n },\n defaultValue: 3,\n label: 'Items to Generate',\n max: 20,\n min: 1,\n },\n providerOptionsJson,\n ],\n label: 'Array Settings',\n },\n ],\n }\n"],"names":["PLUGIN_INSTRUCTIONS_TABLE","CAPABILITIES","id","name","fields","defaultAccessConfig","create","req","user","delete","read","update","defaultAdminConfig","group","hidden","providerSelect","type","admin","components","Field","label","modelSelect","providerOptionsJson","description","commonTextParams","placeholder","defaultValue","max","min","instructionsCollection","pluginConfig","labels","plural","singular","overrideInstructions","slug","access","beforeList","unique","options","value","condition","_","current","clientProps","filterByField","map","c","path","tabs","relationTo","uploadCollectionSlug","data"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/collections/Instructions.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\nimport type { PluginConfig } from 'src/types.js'\n\nimport { lexicalEditor } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\nimport { PromptMentionsFeature } from '../fields/PromptEditorField/feature.server.js'\nimport { applyInstructionDefaultsForDisplay } from '../utilities/ai/resolveEffectiveInstructionSettings.js'\nimport { pluginCollectionAccess, pluginCollectionAdmin } from './shared.js'\n\n// Defined capabilities replacing src/ai/models/\nconst CAPABILITIES = [\n {\n id: 'text',\n name: 'Text Generation',\n fields: ['text', 'textarea'],\n },\n {\n id: 'richtext',\n name: 'Rich Text Generation',\n fields: ['richText'],\n },\n {\n id: 'image',\n name: 'Image Generation',\n fields: ['upload'],\n },\n {\n id: 'tts',\n name: 'Text to Speech',\n fields: ['upload'],\n },\n {\n id: 'array',\n name: 'Array Generation',\n fields: ['array'],\n },\n]\n\n\nconst providerSelect = {\n name: 'provider',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicProviderSelect',\n },\n },\n label: 'Provider',\n}\n\nconst modelSelect = {\n name: 'model',\n type: 'text' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicModelSelect',\n },\n },\n label: 'Model',\n}\n\n\nconst commonTextParams = [\n {\n type: 'row' as const,\n fields: [\n {\n name: 'maxTokens',\n type: 'number' as const,\n admin: {\n placeholder: 'Model Default',\n },\n label: 'Max Tokens',\n },\n {\n name: 'temperature',\n type: 'number' as const,\n defaultValue: 0.7,\n label: 'Temperature',\n max: 1,\n min: 0,\n },\n ],\n },\n {\n name: 'extractAttachments',\n type: 'checkbox' as const,\n label: 'Extract Attachments',\n },\n]\n\nconst providerOptionsUIField = {\n name: 'providerOptions',\n type: 'json' as const,\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#InstructionProviderOptions',\n },\n },\n label: 'Provider Options',\n}\n\nexport const instructionsCollection = (pluginConfig: PluginConfig) =>\n <CollectionConfig>{\n labels: {\n plural: 'Compose Settings',\n singular: 'Compose Setting',\n },\n ...pluginConfig.overrideInstructions,\n slug: PLUGIN_INSTRUCTIONS_TABLE,\n access: {\n ...pluginCollectionAccess,\n ...pluginConfig.overrideInstructions?.access,\n },\n admin: {\n description:\n 'Customize how AI interacts with specific fields within your enabled collections.',\n ...pluginCollectionAdmin,\n ...pluginConfig.overrideInstructions?.admin,\n components: {\n beforeList: ['@ai-stack/payloadcms/client#ConfigDashboard'],\n },\n },\n fields: [\n {\n name: 'schema-path',\n type: 'text',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n hidden: !pluginConfig.debugging,\n },\n unique: true,\n },\n {\n name: 'field-type',\n type: 'select',\n admin: {\n description: \"Please don't change this unless you're sure of what you're doing\",\n hidden: !pluginConfig.debugging,\n },\n defaultValue: 'text',\n label: 'Field type',\n options: [\n {\n label: 'text',\n value: 'text',\n },\n {\n label: 'textarea',\n value: 'textarea',\n },\n {\n label: 'upload',\n value: 'upload',\n },\n {\n label: 'richText',\n value: 'richText',\n },\n {\n label: 'array',\n value: 'array',\n },\n ],\n },\n {\n name: 'relation-to',\n type: 'text',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload'\n },\n hidden: !pluginConfig.debugging,\n },\n label: 'Relation to',\n },\n {\n name: 'hasMany',\n type: 'checkbox',\n admin: {\n hidden: true,\n },\n defaultValue: false,\n },\n {\n name: 'model-id',\n type: 'select',\n admin: {\n components: {\n Field: {\n clientProps: {\n filterByField: 'field-type',\n options: CAPABILITIES.map((c) => ({\n fields: c.fields,\n label: c.name,\n value: c.id,\n })),\n },\n path: '@ai-stack/payloadcms/fields#SelectField',\n },\n },\n },\n label: 'Capability',\n options: CAPABILITIES.map((c) => ({\n label: c.name,\n value: c.id,\n })),\n },\n {\n name: 'disabled',\n type: 'checkbox',\n admin: {\n description: 'Please reload your collection after applying the changes',\n },\n defaultValue: false,\n label: 'Hide Compose button for this field',\n },\n {\n name: 'alwaysShow',\n type: 'checkbox',\n admin: {\n condition: (_, current) => !current.disabled,\n description: 'Compose button will always be visible without requiring field focus',\n },\n defaultValue: false,\n label: 'Always show Compose button',\n },\n {\n name: 'appendGenerated',\n type: 'checkbox',\n admin: {\n condition: (_, current) => current?.hasMany === true && current?.disabled !== true,\n description: 'If enabled, generated values are appended to current values instead of replacing them.',\n },\n defaultValue: false,\n label: 'Append generated values',\n },\n {\n id: 'ai-prompts-tabs',\n type: 'tabs',\n tabs: [\n {\n description:\n 'Define dynamic templates using {{ fieldName }}. Type { to see available field suggestions.',\n fields: [\n { // TODO: update below to use PromptField\n name: 'prompt',\n type: 'richText',\n admin: {\n description: \"Click 'Compose' to run this custom prompt and generate content\",\n },\n editor: lexicalEditor({\n features: ({ rootFeatures: _rootFeatures }) => [PromptMentionsFeature()],\n }),\n label: '',\n },\n ],\n label: 'Prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'upload' && current['model-id'] === 'image'\n },\n },\n description:\n 'These images will be used to generate new visuals in a similar style, layout, or content.',\n fields: [\n {\n name: 'images',\n type: 'array',\n fields: [\n {\n name: 'image',\n type: 'upload',\n admin: {\n description: 'Please make sure the image is publicly accessible.',\n },\n relationTo: pluginConfig.uploadCollectionSlug\n ? pluginConfig.uploadCollectionSlug\n : 'media',\n },\n ],\n },\n ],\n label: 'Sample Images',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'system',\n type: 'textarea',\n defaultValue: `INSTRUCTIONS:\nYou are a highly skilled and professional blog writer,\nrenowned for crafting engaging and well-organized articles.\nWhen given a title, you meticulously create blogs that are not only\ninformative and accurate but also captivating and beautifully structured.`,\n label: '',\n },\n ],\n label: 'System prompt',\n },\n {\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n description: '',\n fields: [\n {\n name: 'layout',\n type: 'textarea',\n admin: {\n condition: (_, current) => {\n return current['field-type'] === 'richText'\n },\n },\n defaultValue: `[paragraph] - Write a concise introduction (2-3 sentences) that outlines the main topic.\n[horizontalrule] - Insert a horizontal rule to separate the introduction from the main content.\n[list] - Create a list with 3-5 items. Each list item should contain:\n a. [heading] - A brief, descriptive heading (up to 5 words)\n b. [paragraph] - A short explanation or elaboration (1-2 sentences)\n[horizontalrule] - Insert another horizontal rule to separate the main content from the conclusion.\n[paragraph] - Compose a brief conclusion (2-3 sentences) summarizing the key points.\n[quote] - Include a relevant quote from a famous person, directly related to the topic. Format: \"Quote text.\" - Author Name`,\n label: '',\n },\n ],\n label: 'Layout',\n },\n ],\n },\n\n // Inline Settings Groups by Capability\n\n // Text Settings\n {\n name: 'text-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'text',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsUIField,\n ],\n label: 'Text Settings',\n },\n\n // Rich Text Settings\n {\n name: 'richtext-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'richtext',\n },\n fields: [\n providerSelect,\n modelSelect,\n ...commonTextParams,\n providerOptionsUIField,\n ],\n label: 'Rich Text Settings',\n },\n\n // Image Settings\n {\n name: 'image-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'image',\n },\n fields: [providerSelect, modelSelect, providerOptionsUIField],\n label: 'Image Settings',\n },\n\n // TTS Settings\n {\n name: 'tts-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'tts',\n },\n fields: [\n providerSelect,\n modelSelect,\n {\n name: 'voice',\n type: 'text',\n admin: {\n components: {\n Field: '@ai-stack/payloadcms/client#DynamicVoiceSelect',\n },\n },\n label: 'Voice',\n },\n providerOptionsUIField,\n ],\n label: 'TTS Settings',\n },\n\n // Array Settings\n {\n name: 'array-settings',\n type: 'group',\n admin: {\n condition: (data) => data['model-id'] === 'array',\n },\n fields: [\n providerSelect,\n modelSelect,\n {\n name: 'count',\n type: 'number',\n admin: {\n description: 'Number of items to generate',\n },\n defaultValue: 3,\n label: 'Items to Generate',\n max: 20,\n min: 1,\n },\n providerOptionsUIField,\n ],\n label: 'Array Settings',\n },\n ],\n hooks: {\n ...pluginConfig.overrideInstructions?.hooks,\n afterRead: [\n ...(pluginConfig.overrideInstructions?.hooks?.afterRead || []),\n async ({ context, doc, req }) => {\n if (!doc || typeof doc !== 'object') {\n return doc\n }\n\n const cacheKey = '__aiProvidersDefaults'\n const hookContext = (context || {}) as Record<string, unknown>\n let defaults = hookContext[cacheKey] as Record<string, unknown> | undefined\n\n if (!defaults) {\n try {\n const aiSettings = await req.payload.findGlobal({\n slug: 'ai-providers',\n })\n defaults = (aiSettings?.defaults || {}) as Record<string, unknown>\n hookContext[cacheKey] = defaults\n } catch (_error) {\n return doc\n }\n }\n\n return applyInstructionDefaultsForDisplay({\n defaults,\n instructions: doc as Record<string, unknown>,\n })\n },\n ],\n },\n }\n"],"names":["lexicalEditor","PLUGIN_INSTRUCTIONS_TABLE","PromptMentionsFeature","applyInstructionDefaultsForDisplay","pluginCollectionAccess","pluginCollectionAdmin","CAPABILITIES","id","name","fields","providerSelect","type","admin","components","Field","label","modelSelect","commonTextParams","placeholder","defaultValue","max","min","providerOptionsUIField","instructionsCollection","pluginConfig","labels","plural","singular","overrideInstructions","slug","access","description","beforeList","hidden","debugging","unique","options","value","condition","_","current","clientProps","filterByField","map","c","path","disabled","hasMany","tabs","editor","features","rootFeatures","_rootFeatures","relationTo","uploadCollectionSlug","data","hooks","afterRead","context","doc","req","cacheKey","hookContext","defaults","aiSettings","payload","findGlobal","_error","instructions"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared collection defaults for plugin-internal collections.
3
+ * Used by AIJobs and Instructions to avoid duplicating access/admin config.
4
+ */
5
+ export declare const pluginCollectionAccess: {
6
+ create: ({ req }: {
7
+ req: {
8
+ user?: unknown;
9
+ };
10
+ }) => boolean;
11
+ delete: ({ req }: {
12
+ req: {
13
+ user?: unknown;
14
+ };
15
+ }) => boolean;
16
+ read: ({ req }: {
17
+ req: {
18
+ user?: unknown;
19
+ };
20
+ }) => boolean;
21
+ update: ({ req }: {
22
+ req: {
23
+ user?: unknown;
24
+ };
25
+ }) => boolean;
26
+ };
27
+ export declare const pluginCollectionAdmin: {
28
+ group: string;
29
+ hidden: boolean;
30
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Shared collection defaults for plugin-internal collections.
3
+ * Used by AIJobs and Instructions to avoid duplicating access/admin config.
4
+ */ export const pluginCollectionAccess = {
5
+ create: ({ req })=>!!req.user,
6
+ delete: ({ req })=>!!req.user,
7
+ read: ({ req })=>!!req.user,
8
+ update: ({ req })=>!!req.user
9
+ };
10
+ export const pluginCollectionAdmin = {
11
+ group: 'Plugins',
12
+ hidden: true
13
+ };
14
+
15
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/collections/shared.ts"],"sourcesContent":["/**\n * Shared collection defaults for plugin-internal collections.\n * Used by AIJobs and Instructions to avoid duplicating access/admin config.\n */\nexport const pluginCollectionAccess = {\n create: ({ req }: { req: { user?: unknown } }) => !!req.user,\n delete: ({ req }: { req: { user?: unknown } }) => !!req.user,\n read: ({ req }: { req: { user?: unknown } }) => !!req.user,\n update: ({ req }: { req: { user?: unknown } }) => !!req.user,\n}\n\nexport const pluginCollectionAdmin = {\n group: 'Plugins',\n hidden: true,\n}\n"],"names":["pluginCollectionAccess","create","req","user","delete","read","update","pluginCollectionAdmin","group","hidden"],"mappings":"AAAA;;;CAGC,GACD,OAAO,MAAMA,yBAAyB;IACpCC,QAAQ,CAAC,EAAEC,GAAG,EAA+B,GAAK,CAAC,CAACA,IAAIC,IAAI;IAC5DC,QAAQ,CAAC,EAAEF,GAAG,EAA+B,GAAK,CAAC,CAACA,IAAIC,IAAI;IAC5DE,MAAM,CAAC,EAAEH,GAAG,EAA+B,GAAK,CAAC,CAACA,IAAIC,IAAI;IAC1DG,QAAQ,CAAC,EAAEJ,GAAG,EAA+B,GAAK,CAAC,CAACA,IAAIC,IAAI;AAC9D,EAAC;AAED,OAAO,MAAMI,wBAAwB;IACnCC,OAAO;IACPC,QAAQ;AACV,EAAC"}
package/dist/defaults.js CHANGED
@@ -16,7 +16,7 @@ export const excludeCollections = [
16
16
  'payload-preferences',
17
17
  'payload-migrations',
18
18
  'payload-locked-documents',
19
- 'ai-settings',
19
+ 'ai-providers',
20
20
  PLUGIN_INSTRUCTIONS_TABLE,
21
21
  PLUGIN_AI_JOBS_TABLE
22
22
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_AI_JOBS_TABLE = `${PLUGIN_NAME}-ai-jobs`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\nexport const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`\nexport const PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK = `${PLUGIN_API_ENDPOINT_BASE}/videogen/webhook`\nexport const PLUGIN_API_ENDPOINT_FETCH_VOICES = `${PLUGIN_API_ENDPOINT_BASE}/elevenlabs/fetch-voices`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-5-sonnet-latest`\n\nexport const excludeCollections = [\n 'payload-preferences',\n 'payload-migrations',\n 'payload-locked-documents',\n 'ai-settings',\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_AI_JOBS_TABLE,\n]\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_AI_JOBS_TABLE","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK","PLUGIN_API_ENDPOINT_FETCH_VOICES","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL","excludeCollections"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,CAAC,EAAED,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,uBAAuB,CAAC,EAAEF,YAAY,QAAQ,CAAC,CAAA;AAC5D,OAAO,MAAMG,gCAAgC,CAAC,EAAEH,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMI,2BAA2B,CAAC,CAAC,EAAEJ,YAAY,CAAC,CAAA;AACzD,OAAO,MAAMK,+BAA+B,CAAC,EAAED,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,CAAC,EAAED,6BAA6B,OAAO,CAAC,CAAA;AAC3F,OAAO,MAAME,+BAA+B,CAAC,EAAEH,yBAAyB,aAAa,CAAC,CAAA;AACtF,OAAO,MAAMI,uCAAuC,CAAC,EAAEJ,yBAAyB,iBAAiB,CAAC,CAAA;AAClG,OAAO,MAAMK,mCAAmC,CAAC,EAAEL,yBAAyB,wBAAwB,CAAC,CAAA;AAErG,eAAe;AACf,OAAO,MAAMM,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA;AAExE,OAAO,MAAMC,qBAAqB;IAChC;IACA;IACA;IACA;IACAX;IACAC;CACD,CAAA"}
1
+ {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const PLUGIN_NAME = 'plugin-ai'\nexport const PLUGIN_INSTRUCTIONS_TABLE = `${PLUGIN_NAME}-instructions`\nexport const PLUGIN_AI_JOBS_TABLE = `${PLUGIN_NAME}-ai-jobs`\nexport const PLUGIN_LEXICAL_EDITOR_FEATURE = `${PLUGIN_NAME}-actions-feature`\n\n// Endpoint defaults\nexport const PLUGIN_API_ENDPOINT_BASE = `/${PLUGIN_NAME}`\nexport const PLUGIN_API_ENDPOINT_GENERATE = `${PLUGIN_API_ENDPOINT_BASE}/generate`\nexport const PLUGIN_API_ENDPOINT_GENERATE_UPLOAD = `${PLUGIN_API_ENDPOINT_GENERATE}/upload`\nexport const PLUGIN_FETCH_FIELDS_ENDPOINT = `${PLUGIN_API_ENDPOINT_BASE}/fetch-fields`\nexport const PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK = `${PLUGIN_API_ENDPOINT_BASE}/videogen/webhook`\nexport const PLUGIN_API_ENDPOINT_FETCH_VOICES = `${PLUGIN_API_ENDPOINT_BASE}/elevenlabs/fetch-voices`\n\n// LLM Settings\nexport const PLUGIN_DEFAULT_OPENAI_MODEL = `gpt-4o-mini`\nexport const PLUGIN_DEFAULT_ANTHROPIC_MODEL = `claude-3-5-sonnet-latest`\n\nexport const excludeCollections = [\n 'payload-preferences',\n 'payload-migrations',\n 'payload-locked-documents',\n 'ai-providers',\n PLUGIN_INSTRUCTIONS_TABLE,\n PLUGIN_AI_JOBS_TABLE,\n]\n"],"names":["PLUGIN_NAME","PLUGIN_INSTRUCTIONS_TABLE","PLUGIN_AI_JOBS_TABLE","PLUGIN_LEXICAL_EDITOR_FEATURE","PLUGIN_API_ENDPOINT_BASE","PLUGIN_API_ENDPOINT_GENERATE","PLUGIN_API_ENDPOINT_GENERATE_UPLOAD","PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_API_ENDPOINT_VIDEOGEN_WEBHOOK","PLUGIN_API_ENDPOINT_FETCH_VOICES","PLUGIN_DEFAULT_OPENAI_MODEL","PLUGIN_DEFAULT_ANTHROPIC_MODEL","excludeCollections"],"mappings":"AAAA,OAAO,MAAMA,cAAc,YAAW;AACtC,OAAO,MAAMC,4BAA4B,CAAC,EAAED,YAAY,aAAa,CAAC,CAAA;AACtE,OAAO,MAAME,uBAAuB,CAAC,EAAEF,YAAY,QAAQ,CAAC,CAAA;AAC5D,OAAO,MAAMG,gCAAgC,CAAC,EAAEH,YAAY,gBAAgB,CAAC,CAAA;AAE7E,oBAAoB;AACpB,OAAO,MAAMI,2BAA2B,CAAC,CAAC,EAAEJ,YAAY,CAAC,CAAA;AACzD,OAAO,MAAMK,+BAA+B,CAAC,EAAED,yBAAyB,SAAS,CAAC,CAAA;AAClF,OAAO,MAAME,sCAAsC,CAAC,EAAED,6BAA6B,OAAO,CAAC,CAAA;AAC3F,OAAO,MAAME,+BAA+B,CAAC,EAAEH,yBAAyB,aAAa,CAAC,CAAA;AACtF,OAAO,MAAMI,uCAAuC,CAAC,EAAEJ,yBAAyB,iBAAiB,CAAC,CAAA;AAClG,OAAO,MAAMK,mCAAmC,CAAC,EAAEL,yBAAyB,wBAAwB,CAAC,CAAA;AAErG,eAAe;AACf,OAAO,MAAMM,8BAA8B,CAAC,WAAW,CAAC,CAAA;AACxD,OAAO,MAAMC,iCAAiC,CAAC,wBAAwB,CAAC,CAAA;AAExE,OAAO,MAAMC,qBAAqB;IAChC;IACA;IACA;IACA;IACAX;IACAC;CACD,CAAA"}
@@ -12,30 +12,33 @@ export const fetchFields = (config)=>{
12
12
  let enabledCollections = [];
13
13
  try {
14
14
  const { enabledCollections: storedEnabledCollections } = await req.payload.findGlobal({
15
- slug: 'ai-settings'
15
+ slug: 'ai-providers'
16
16
  });
17
17
  enabledCollections = storedEnabledCollections || [];
18
- } catch (e) {
19
- req.payload.logger.error('Failed to fetch AI settings');
18
+ } catch (_e) {
19
+ req.payload.logger.error('— AI Plugin: Failed to fetch AI settings');
20
20
  }
21
21
  if (access?.settings) {
22
22
  try {
23
23
  isConfigAllowed = await access.settings({
24
24
  req
25
25
  });
26
- } catch (e) {
27
- req.payload.logger.error(req, 'Please check your "access.settings" for request');
26
+ } catch (_e) {
27
+ req.payload.logger.error(req, '— AI Plugin: Please check your "access.settings" for request');
28
28
  }
29
29
  }
30
30
  const fieldMap = {};
31
31
  docs.forEach((doc)=>{
32
32
  fieldMap[doc['schema-path']] = {
33
33
  id: doc.id,
34
+ alwaysShow: !!doc['alwaysShow'],
35
+ appendGenerated: !!doc['appendGenerated'],
34
36
  disabled: !!doc['disabled'],
35
- fieldType: doc['field-type']
37
+ fieldType: doc['field-type'],
38
+ hasMany: !!doc['hasMany']
36
39
  };
37
40
  });
38
- return Response.json({
41
+ return new Response(JSON.stringify({
39
42
  ...options,
40
43
  debugging: config.debugging,
41
44
  enabledCollections,
@@ -44,6 +47,11 @@ export const fetchFields = (config)=>{
44
47
  promptFields: promptFields.map(({ getter: _getter, ...field })=>{
45
48
  return field;
46
49
  })
50
+ }), {
51
+ headers: {
52
+ 'Cache-Control': 'private, max-age=60',
53
+ 'Content-Type': 'application/json'
54
+ }
47
55
  });
48
56
  },
49
57
  method: 'get',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoints/fetchFields.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport type { PluginConfig, SerializedPromptField } from '../types.js'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT, PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\nexport const fetchFields: (config: PluginConfig) => Endpoint = (config) => {\n const { access, options = {}, promptFields = [] } = config\n return {\n handler: async (req: PayloadRequest) => {\n const { docs = [] } = await req.payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n })\n\n let isConfigAllowed = true // Users allowed to update prompts by default\n let enabledCollections: string[] = []\n\n try {\n const { enabledCollections: storedEnabledCollections } = await req.payload.findGlobal({\n slug: 'ai-settings',\n })\n enabledCollections = (storedEnabledCollections as string[]) || []\n } catch (e) {\n req.payload.logger.error('Failed to fetch AI settings')\n }\n\n if (access?.settings) {\n try {\n isConfigAllowed = await access.settings({ req })\n } catch (e) {\n req.payload.logger.error(req, 'Please check your \"access.settings\" for request')\n }\n }\n\n const fieldMap: Record<string, { disabled?: boolean; fieldType: any; id: any }> = {}\n docs.forEach((doc) => {\n fieldMap[doc['schema-path']] = {\n id: doc.id,\n disabled: !!doc['disabled'],\n fieldType: doc['field-type'],\n }\n })\n\n return Response.json({\n ...options,\n debugging: config.debugging,\n enabledCollections,\n fields: fieldMap,\n isConfigAllowed,\n promptFields: promptFields.map(({ getter: _getter, ...field }): SerializedPromptField => {\n return field\n }),\n })\n },\n method: 'get',\n path: PLUGIN_FETCH_FIELDS_ENDPOINT,\n }\n}\n"],"names":["PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_INSTRUCTIONS_TABLE","fetchFields","config","access","options","promptFields","handler","req","docs","payload","find","collection","pagination","isConfigAllowed","enabledCollections","storedEnabledCollections","findGlobal","slug","e","logger","error","settings","fieldMap","forEach","doc","id","disabled","fieldType","Response","json","debugging","fields","map","getter","_getter","field","method","path"],"mappings":"AAIA,SAASA,4BAA4B,EAAEC,yBAAyB,QAAQ,iBAAgB;AAExF,OAAO,MAAMC,cAAkD,CAACC;IAC9D,MAAM,EAAEC,MAAM,EAAEC,UAAU,CAAC,CAAC,EAAEC,eAAe,EAAE,EAAE,GAAGH;IACpD,OAAO;QACLI,SAAS,OAAOC;YACd,MAAM,EAAEC,OAAO,EAAE,EAAE,GAAG,MAAMD,IAAIE,OAAO,CAACC,IAAI,CAAC;gBAC3CC,YAAYX;gBACZY,YAAY;YACd;YAEA,IAAIC,kBAAkB,KAAK,6CAA6C;;YACxE,IAAIC,qBAA+B,EAAE;YAErC,IAAI;gBACF,MAAM,EAAEA,oBAAoBC,wBAAwB,EAAE,GAAG,MAAMR,IAAIE,OAAO,CAACO,UAAU,CAAC;oBACpFC,MAAM;gBACR;gBACAH,qBAAqB,AAACC,4BAAyC,EAAE;YACnE,EAAE,OAAOG,GAAG;gBACVX,IAAIE,OAAO,CAACU,MAAM,CAACC,KAAK,CAAC;YAC3B;YAEA,IAAIjB,QAAQkB,UAAU;gBACpB,IAAI;oBACFR,kBAAkB,MAAMV,OAAOkB,QAAQ,CAAC;wBAAEd;oBAAI;gBAChD,EAAE,OAAOW,GAAG;oBACVX,IAAIE,OAAO,CAACU,MAAM,CAACC,KAAK,CAACb,KAAK;gBAChC;YACF;YAEA,MAAMe,WAA4E,CAAC;YACnFd,KAAKe,OAAO,CAAC,CAACC;gBACZF,QAAQ,CAACE,GAAG,CAAC,cAAc,CAAC,GAAG;oBAC7BC,IAAID,IAAIC,EAAE;oBACVC,UAAU,CAAC,CAACF,GAAG,CAAC,WAAW;oBAC3BG,WAAWH,GAAG,CAAC,aAAa;gBAC9B;YACF;YAEA,OAAOI,SAASC,IAAI,CAAC;gBACnB,GAAGzB,OAAO;gBACV0B,WAAW5B,OAAO4B,SAAS;gBAC3BhB;gBACAiB,QAAQT;gBACRT;gBACAR,cAAcA,aAAa2B,GAAG,CAAC,CAAC,EAAEC,QAAQC,OAAO,EAAE,GAAGC,OAAO;oBAC3D,OAAOA;gBACT;YACF;QACF;QACAC,QAAQ;QACRC,MAAMtC;IACR;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/endpoints/fetchFields.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport type { PluginConfig, SerializedPromptField } from '../types.js'\n\nimport { PLUGIN_FETCH_FIELDS_ENDPOINT, PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\n\nexport const fetchFields: (config: PluginConfig) => Endpoint = (config) => {\n const { access, options = {}, promptFields = [] } = config\n return {\n handler: async (req: PayloadRequest) => {\n const { docs = [] } = await req.payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n pagination: false,\n })\n\n let isConfigAllowed = true // Users allowed to update prompts by default\n let enabledCollections: string[] = []\n\n try {\n const { enabledCollections: storedEnabledCollections } = await req.payload.findGlobal({\n slug: 'ai-providers',\n })\n enabledCollections = (storedEnabledCollections as string[]) || []\n } catch (_e) {\n req.payload.logger.error('— AI Plugin: Failed to fetch AI settings')\n }\n\n if (access?.settings) {\n try {\n isConfigAllowed = await access.settings({ req })\n } catch (_e) {\n req.payload.logger.error(req, '— AI Plugin: Please check your \"access.settings\" for request')\n }\n }\n\n const fieldMap: Record<\n string,\n {\n alwaysShow?: boolean\n appendGenerated?: boolean\n disabled?: boolean\n fieldType: string\n hasMany?: boolean\n id: number | string\n }\n > = {}\n docs.forEach((doc) => {\n fieldMap[doc['schema-path']] = {\n id: doc.id,\n alwaysShow: !!(doc as Record<string, unknown>)['alwaysShow'],\n appendGenerated: !!(doc as Record<string, unknown>)['appendGenerated'],\n disabled: !!doc['disabled'],\n fieldType: doc['field-type'],\n hasMany: !!(doc as Record<string, unknown>)['hasMany'],\n }\n })\n\n return new Response(\n JSON.stringify({\n ...options,\n debugging: config.debugging,\n enabledCollections,\n fields: fieldMap,\n isConfigAllowed,\n promptFields: promptFields.map(({ getter: _getter, ...field }): SerializedPromptField => {\n return field\n }),\n }),\n {\n headers: {\n 'Cache-Control': 'private, max-age=60',\n 'Content-Type': 'application/json',\n },\n },\n )\n },\n method: 'get',\n path: PLUGIN_FETCH_FIELDS_ENDPOINT,\n }\n}\n"],"names":["PLUGIN_FETCH_FIELDS_ENDPOINT","PLUGIN_INSTRUCTIONS_TABLE","fetchFields","config","access","options","promptFields","handler","req","docs","payload","find","collection","pagination","isConfigAllowed","enabledCollections","storedEnabledCollections","findGlobal","slug","_e","logger","error","settings","fieldMap","forEach","doc","id","alwaysShow","appendGenerated","disabled","fieldType","hasMany","Response","JSON","stringify","debugging","fields","map","getter","_getter","field","headers","method","path"],"mappings":"AAIA,SAASA,4BAA4B,EAAEC,yBAAyB,QAAQ,iBAAgB;AAExF,OAAO,MAAMC,cAAkD,CAACC;IAC9D,MAAM,EAAEC,MAAM,EAAEC,UAAU,CAAC,CAAC,EAAEC,eAAe,EAAE,EAAE,GAAGH;IACpD,OAAO;QACLI,SAAS,OAAOC;YACd,MAAM,EAAEC,OAAO,EAAE,EAAE,GAAG,MAAMD,IAAIE,OAAO,CAACC,IAAI,CAAC;gBAC3CC,YAAYX;gBACZY,YAAY;YACd;YAEA,IAAIC,kBAAkB,KAAK,6CAA6C;;YACxE,IAAIC,qBAA+B,EAAE;YAErC,IAAI;gBACF,MAAM,EAAEA,oBAAoBC,wBAAwB,EAAE,GAAG,MAAMR,IAAIE,OAAO,CAACO,UAAU,CAAC;oBACpFC,MAAM;gBACR;gBACAH,qBAAqB,AAACC,4BAAyC,EAAE;YACnE,EAAE,OAAOG,IAAI;gBACXX,IAAIE,OAAO,CAACU,MAAM,CAACC,KAAK,CAAC;YAC3B;YAEA,IAAIjB,QAAQkB,UAAU;gBACpB,IAAI;oBACFR,kBAAkB,MAAMV,OAAOkB,QAAQ,CAAC;wBAAEd;oBAAI;gBAChD,EAAE,OAAOW,IAAI;oBACXX,IAAIE,OAAO,CAACU,MAAM,CAACC,KAAK,CAACb,KAAK;gBAChC;YACF;YAEA,MAAMe,WAUF,CAAC;YACLd,KAAKe,OAAO,CAAC,CAACC;gBACZF,QAAQ,CAACE,GAAG,CAAC,cAAc,CAAC,GAAG;oBAC7BC,IAAID,IAAIC,EAAE;oBACVC,YAAY,CAAC,CAAC,AAACF,GAA+B,CAAC,aAAa;oBAC5DG,iBAAiB,CAAC,CAAC,AAACH,GAA+B,CAAC,kBAAkB;oBACtEI,UAAU,CAAC,CAACJ,GAAG,CAAC,WAAW;oBAC3BK,WAAWL,GAAG,CAAC,aAAa;oBAC5BM,SAAS,CAAC,CAAC,AAACN,GAA+B,CAAC,UAAU;gBACxD;YACF;YAEA,OAAO,IAAIO,SACTC,KAAKC,SAAS,CAAC;gBACb,GAAG7B,OAAO;gBACV8B,WAAWhC,OAAOgC,SAAS;gBAC3BpB;gBACAqB,QAAQb;gBACRT;gBACAR,cAAcA,aAAa+B,GAAG,CAAC,CAAC,EAAEC,QAAQC,OAAO,EAAE,GAAGC,OAAO;oBAC3D,OAAOA;gBACT;YACF,IACA;gBACEC,SAAS;oBACP,iBAAiB;oBACjB,gBAAgB;gBAClB;YACF;QAEJ;QACAC,QAAQ;QACRC,MAAM3C;IACR;AACF,EAAC"}
@@ -12,7 +12,7 @@ export const fetchVoices = {
12
12
  }
13
13
  // Fetch AI Settings global to get the encrypted API key
14
14
  const aiSettings = await req.payload.findGlobal({
15
- slug: 'ai-settings',
15
+ slug: 'ai-providers',
16
16
  context: {
17
17
  unsafe: true
18
18
  }
@@ -81,7 +81,7 @@ export const fetchVoices = {
81
81
  throw error;
82
82
  }
83
83
  } catch (error) {
84
- req.payload.logger.error(error, 'Error fetching ElevenLabs voices');
84
+ req.payload.logger.error(error, '— AI Plugin: Error fetching ElevenLabs voices');
85
85
  return Response.json({
86
86
  message: error instanceof Error ? error.message : 'Internal server error'
87
87
  }, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoints/fetchVoices.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport { PLUGIN_API_ENDPOINT_FETCH_VOICES } from '../defaults.js'\n\ninterface ElevenLabsVoice {\n category?: string\n labels?: Record<string, string>\n name: string\n preview_url?: string\n voice_id: string\n}\n\nexport const fetchVoices: Endpoint = {\n handler: async (req: PayloadRequest) => {\n try {\n // Check authentication\n if (!req.user) {\n return Response.json({ message: 'Authentication required' }, { status: 401 })\n }\n\n // Fetch AI Settings global to get the encrypted API key\n const aiSettings = await req.payload.findGlobal({\n slug: 'ai-settings',\n context: { unsafe: true },\n })\n\n // Find the ElevenLabs provider block\n const elevenlabsProvider = aiSettings?.providers?.find(\n (provider: any) => provider.blockType === 'elevenlabs' && provider.enabled,\n )\n\n if (!elevenlabsProvider) {\n return Response.json(\n { message: 'ElevenLabs provider not found or not enabled in AI Settings' },\n { status: 400 },\n )\n }\n\n // Get the API key (already decrypted by afterRead hook due to unsafe context)\n const apiKey = elevenlabsProvider.apiKey\n\n if (!apiKey) {\n return Response.json(\n {\n message: 'API key not found. Please configure your ElevenLabs API key in AI Settings.',\n },\n { status: 400 },\n )\n }\n\n // Call ElevenLabs API to fetch voices with timeout\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 15000) // 15s timeout\n\n try {\n const response = await fetch('https://api.elevenlabs.io/v1/voices', {\n headers: {\n 'xi-api-key': apiKey,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorText = await response.text()\n return Response.json(\n { message: `ElevenLabs API error: ${errorText}` },\n { status: response.status },\n )\n }\n\n const data = await response.json()\n\n // Transform voices to match our schema\n const voices = (data.voices || []).map((voice: ElevenLabsVoice) => ({\n id: voice.voice_id,\n name: voice.name,\n category: voice.category || 'premade',\n enabled: true,\n labels: voice.labels || {},\n preview_url: voice.preview_url || '',\n }))\n\n return Response.json({\n success: true,\n voices,\n })\n } catch (error: unknown) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n return Response.json({ message: 'ElevenLabs API request timed out' }, { status: 504 })\n }\n throw error\n }\n } catch (error) {\n req.payload.logger.error(error, 'Error fetching ElevenLabs voices')\n return Response.json(\n { message: error instanceof Error ? error.message : 'Internal server error' },\n { status: 500 },\n )\n }\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_FETCH_VOICES,\n}\n"],"names":["PLUGIN_API_ENDPOINT_FETCH_VOICES","fetchVoices","handler","req","user","Response","json","message","status","aiSettings","payload","findGlobal","slug","context","unsafe","elevenlabsProvider","providers","find","provider","blockType","enabled","apiKey","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","headers","signal","clearTimeout","ok","errorText","text","data","voices","map","voice","id","voice_id","name","category","labels","preview_url","success","error","Error","logger","method","path"],"mappings":"AAEA,SAASA,gCAAgC,QAAQ,iBAAgB;AAUjE,OAAO,MAAMC,cAAwB;IACnCC,SAAS,OAAOC;QACd,IAAI;YACF,uBAAuB;YACvB,IAAI,CAACA,IAAIC,IAAI,EAAE;gBACb,OAAOC,SAASC,IAAI,CAAC;oBAAEC,SAAS;gBAA0B,GAAG;oBAAEC,QAAQ;gBAAI;YAC7E;YAEA,wDAAwD;YACxD,MAAMC,aAAa,MAAMN,IAAIO,OAAO,CAACC,UAAU,CAAC;gBAC9CC,MAAM;gBACNC,SAAS;oBAAEC,QAAQ;gBAAK;YAC1B;YAEA,qCAAqC;YACrC,MAAMC,qBAAqBN,YAAYO,WAAWC,KAChD,CAACC,WAAkBA,SAASC,SAAS,KAAK,gBAAgBD,SAASE,OAAO;YAG5E,IAAI,CAACL,oBAAoB;gBACvB,OAAOV,SAASC,IAAI,CAClB;oBAAEC,SAAS;gBAA8D,GACzE;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,8EAA8E;YAC9E,MAAMa,SAASN,mBAAmBM,MAAM;YAExC,IAAI,CAACA,QAAQ;gBACX,OAAOhB,SAASC,IAAI,CAClB;oBACEC,SAAS;gBACX,GACA;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,mDAAmD;YACnD,MAAMc,aAAa,IAAIC;YACvB,MAAMC,YAAYC,WAAW,IAAMH,WAAWI,KAAK,IAAI,OAAO,cAAc;;YAE5E,IAAI;gBACF,MAAMC,WAAW,MAAMC,MAAM,uCAAuC;oBAClEC,SAAS;wBACP,cAAcR;oBAChB;oBACAS,QAAQR,WAAWQ,MAAM;gBAC3B;gBAEAC,aAAaP;gBAEb,IAAI,CAACG,SAASK,EAAE,EAAE;oBAChB,MAAMC,YAAY,MAAMN,SAASO,IAAI;oBACrC,OAAO7B,SAASC,IAAI,CAClB;wBAAEC,SAAS,CAAC,sBAAsB,EAAE0B,UAAU,CAAC;oBAAC,GAChD;wBAAEzB,QAAQmB,SAASnB,MAAM;oBAAC;gBAE9B;gBAEA,MAAM2B,OAAO,MAAMR,SAASrB,IAAI;gBAEhC,uCAAuC;gBACvC,MAAM8B,SAAS,AAACD,CAAAA,KAAKC,MAAM,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,QAA4B,CAAA;wBAClEC,IAAID,MAAME,QAAQ;wBAClBC,MAAMH,MAAMG,IAAI;wBAChBC,UAAUJ,MAAMI,QAAQ,IAAI;wBAC5BtB,SAAS;wBACTuB,QAAQL,MAAMK,MAAM,IAAI,CAAC;wBACzBC,aAAaN,MAAMM,WAAW,IAAI;oBACpC,CAAA;gBAEA,OAAOvC,SAASC,IAAI,CAAC;oBACnBuC,SAAS;oBACTT;gBACF;YACF,EAAE,OAAOU,OAAgB;gBACvBf,aAAaP;gBACb,IAAIsB,iBAAiBC,SAASD,MAAML,IAAI,KAAK,cAAc;oBACzD,OAAOpC,SAASC,IAAI,CAAC;wBAAEC,SAAS;oBAAmC,GAAG;wBAAEC,QAAQ;oBAAI;gBACtF;gBACA,MAAMsC;YACR;QACF,EAAE,OAAOA,OAAO;YACd3C,IAAIO,OAAO,CAACsC,MAAM,CAACF,KAAK,CAACA,OAAO;YAChC,OAAOzC,SAASC,IAAI,CAClB;gBAAEC,SAASuC,iBAAiBC,QAAQD,MAAMvC,OAAO,GAAG;YAAwB,GAC5E;gBAAEC,QAAQ;YAAI;QAElB;IACF;IACAyC,QAAQ;IACRC,MAAMlD;AACR,EAAC"}
1
+ {"version":3,"sources":["../../src/endpoints/fetchVoices.ts"],"sourcesContent":["import type { Endpoint, PayloadRequest } from 'payload'\n\nimport { PLUGIN_API_ENDPOINT_FETCH_VOICES } from '../defaults.js'\n\ninterface ElevenLabsVoice {\n category?: string\n labels?: Record<string, string>\n name: string\n preview_url?: string\n voice_id: string\n}\n\nexport const fetchVoices: Endpoint = {\n handler: async (req: PayloadRequest) => {\n try {\n // Check authentication\n if (!req.user) {\n return Response.json({ message: 'Authentication required' }, { status: 401 })\n }\n\n // Fetch AI Settings global to get the encrypted API key\n const aiSettings = await req.payload.findGlobal({\n slug: 'ai-providers',\n context: { unsafe: true },\n })\n\n // Find the ElevenLabs provider block\n const elevenlabsProvider = aiSettings?.providers?.find(\n (provider: any) => provider.blockType === 'elevenlabs' && provider.enabled,\n )\n\n if (!elevenlabsProvider) {\n return Response.json(\n { message: 'ElevenLabs provider not found or not enabled in AI Settings' },\n { status: 400 },\n )\n }\n\n // Get the API key (already decrypted by afterRead hook due to unsafe context)\n const apiKey = elevenlabsProvider.apiKey\n\n if (!apiKey) {\n return Response.json(\n {\n message: 'API key not found. Please configure your ElevenLabs API key in AI Settings.',\n },\n { status: 400 },\n )\n }\n\n // Call ElevenLabs API to fetch voices with timeout\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 15000) // 15s timeout\n\n try {\n const response = await fetch('https://api.elevenlabs.io/v1/voices', {\n headers: {\n 'xi-api-key': apiKey,\n },\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n const errorText = await response.text()\n return Response.json(\n { message: `ElevenLabs API error: ${errorText}` },\n { status: response.status },\n )\n }\n\n const data = await response.json()\n\n // Transform voices to match our schema\n const voices = (data.voices || []).map((voice: ElevenLabsVoice) => ({\n id: voice.voice_id,\n name: voice.name,\n category: voice.category || 'premade',\n enabled: true,\n labels: voice.labels || {},\n preview_url: voice.preview_url || '',\n }))\n\n return Response.json({\n success: true,\n voices,\n })\n } catch (error: unknown) {\n clearTimeout(timeoutId)\n if (error instanceof Error && error.name === 'AbortError') {\n return Response.json({ message: 'ElevenLabs API request timed out' }, { status: 504 })\n }\n throw error\n }\n } catch (error) {\n req.payload.logger.error(error, '— AI Plugin: Error fetching ElevenLabs voices')\n return Response.json(\n { message: error instanceof Error ? error.message : 'Internal server error' },\n { status: 500 },\n )\n }\n },\n method: 'post',\n path: PLUGIN_API_ENDPOINT_FETCH_VOICES,\n}\n"],"names":["PLUGIN_API_ENDPOINT_FETCH_VOICES","fetchVoices","handler","req","user","Response","json","message","status","aiSettings","payload","findGlobal","slug","context","unsafe","elevenlabsProvider","providers","find","provider","blockType","enabled","apiKey","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","headers","signal","clearTimeout","ok","errorText","text","data","voices","map","voice","id","voice_id","name","category","labels","preview_url","success","error","Error","logger","method","path"],"mappings":"AAEA,SAASA,gCAAgC,QAAQ,iBAAgB;AAUjE,OAAO,MAAMC,cAAwB;IACnCC,SAAS,OAAOC;QACd,IAAI;YACF,uBAAuB;YACvB,IAAI,CAACA,IAAIC,IAAI,EAAE;gBACb,OAAOC,SAASC,IAAI,CAAC;oBAAEC,SAAS;gBAA0B,GAAG;oBAAEC,QAAQ;gBAAI;YAC7E;YAEA,wDAAwD;YACxD,MAAMC,aAAa,MAAMN,IAAIO,OAAO,CAACC,UAAU,CAAC;gBAC9CC,MAAM;gBACNC,SAAS;oBAAEC,QAAQ;gBAAK;YAC1B;YAEA,qCAAqC;YACrC,MAAMC,qBAAqBN,YAAYO,WAAWC,KAChD,CAACC,WAAkBA,SAASC,SAAS,KAAK,gBAAgBD,SAASE,OAAO;YAG5E,IAAI,CAACL,oBAAoB;gBACvB,OAAOV,SAASC,IAAI,CAClB;oBAAEC,SAAS;gBAA8D,GACzE;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,8EAA8E;YAC9E,MAAMa,SAASN,mBAAmBM,MAAM;YAExC,IAAI,CAACA,QAAQ;gBACX,OAAOhB,SAASC,IAAI,CAClB;oBACEC,SAAS;gBACX,GACA;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,mDAAmD;YACnD,MAAMc,aAAa,IAAIC;YACvB,MAAMC,YAAYC,WAAW,IAAMH,WAAWI,KAAK,IAAI,OAAO,cAAc;;YAE5E,IAAI;gBACF,MAAMC,WAAW,MAAMC,MAAM,uCAAuC;oBAClEC,SAAS;wBACP,cAAcR;oBAChB;oBACAS,QAAQR,WAAWQ,MAAM;gBAC3B;gBAEAC,aAAaP;gBAEb,IAAI,CAACG,SAASK,EAAE,EAAE;oBAChB,MAAMC,YAAY,MAAMN,SAASO,IAAI;oBACrC,OAAO7B,SAASC,IAAI,CAClB;wBAAEC,SAAS,CAAC,sBAAsB,EAAE0B,UAAU,CAAC;oBAAC,GAChD;wBAAEzB,QAAQmB,SAASnB,MAAM;oBAAC;gBAE9B;gBAEA,MAAM2B,OAAO,MAAMR,SAASrB,IAAI;gBAEhC,uCAAuC;gBACvC,MAAM8B,SAAS,AAACD,CAAAA,KAAKC,MAAM,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,QAA4B,CAAA;wBAClEC,IAAID,MAAME,QAAQ;wBAClBC,MAAMH,MAAMG,IAAI;wBAChBC,UAAUJ,MAAMI,QAAQ,IAAI;wBAC5BtB,SAAS;wBACTuB,QAAQL,MAAMK,MAAM,IAAI,CAAC;wBACzBC,aAAaN,MAAMM,WAAW,IAAI;oBACpC,CAAA;gBAEA,OAAOvC,SAASC,IAAI,CAAC;oBACnBuC,SAAS;oBACTT;gBACF;YACF,EAAE,OAAOU,OAAgB;gBACvBf,aAAaP;gBACb,IAAIsB,iBAAiBC,SAASD,MAAML,IAAI,KAAK,cAAc;oBACzD,OAAOpC,SAASC,IAAI,CAAC;wBAAEC,SAAS;oBAAmC,GAAG;wBAAEC,QAAQ;oBAAI;gBACtF;gBACA,MAAMsC;YACR;QACF,EAAE,OAAOA,OAAO;YACd3C,IAAIO,OAAO,CAACsC,MAAM,CAACF,KAAK,CAACA,OAAO;YAChC,OAAOzC,SAASC,IAAI,CAClB;gBAAEC,SAASuC,iBAAiBC,QAAQD,MAAMvC,OAAO,GAAG;YAAwB,GAC5E;gBAAEC,QAAQ;YAAI;QAElB;IACF;IACAyC,QAAQ;IACRC,MAAMlD;AACR,EAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PayloadRequest } from 'payload';
2
+ import type { PluginConfig } from '../types.js';
3
+ /**
4
+ * Text/rich-text generation endpoint handler.
5
+ * Uses payload.ai.streamObject for structured text generation.
6
+ */
7
+ export declare const generateHandler: (pluginConfig: PluginConfig) => (req: PayloadRequest) => Promise<Response>;