@ai-stack/payloadcms 3.76.0-beta.3 → 3.76.0-beta.4

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/README.md CHANGED
@@ -91,11 +91,11 @@ pnpm add @ai-stack/payloadcms
91
91
 
92
92
  ```typescript
93
93
  // payload.config.ts
94
- import { payloadAiPlugin } from '@ai-stack/payloadcms'
94
+ import { aiPlugin } from '@ai-stack/payloadcms'
95
95
 
96
96
  export default buildConfig({
97
97
  plugins: [
98
- payloadAiPlugin({
98
+ aiPlugin({
99
99
  collections: {
100
100
  [Posts.slug]: true,
101
101
  },
@@ -108,14 +108,14 @@ export default buildConfig({
108
108
 
109
109
  ```typescript
110
110
  // collections/Posts.ts
111
- import { PayloadAiPluginLexicalEditorFeature } from '@ai-stack/payloadcms'
111
+ import { aiPluginLexicalEditorFeature } from '@ai-stack/payloadcms'
112
112
 
113
113
  fields: [
114
114
  {
115
115
  name: 'content',
116
116
  type: 'richText',
117
117
  editor: lexicalEditor({
118
- features: ({ rootFeatures }) => [...rootFeatures, PayloadAiPluginLexicalEditorFeature()],
118
+ features: ({ rootFeatures }) => [...rootFeatures, aiPluginLexicalEditorFeature()],
119
119
  }),
120
120
  },
121
121
  ]
@@ -240,7 +240,7 @@ Images are automatically fetched and sent to vision-capable models like GPT-4o,
240
240
  <summary>šŸ”§ Access Control, Multi-Tenant, Custom Prompts</summary>
241
241
 
242
242
  ```typescript
243
- payloadAiPlugin({
243
+ aiPlugin({
244
244
  collections: {
245
245
  [Posts.slug]: true,
246
246
  },
@@ -1,2 +1,2 @@
1
- export type { payloadAiPlugin } from '../index.ts';
1
+ export type { aiPlugin } from '../index.ts';
2
2
  export type { ActionMenuItems, ActionPrompt, ActionPromptOptions, GenerationConfig, GenerationModel, PluginConfig, PluginConfigAccess, PluginConfigMediaUploadFunction, PluginOptions, PromptField, PromptFieldGetterContext, SeedPromptData, SeedPromptFunction, SeedPromptOptions, SeedPromptResult, } from '../types.ts';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type { payloadAiPlugin } from '../index.ts'\nexport type { \n ActionMenuItems,\n ActionPrompt,\n ActionPromptOptions,\n GenerationConfig, \n GenerationModel,\n PluginConfig, \n PluginConfigAccess,\n PluginConfigMediaUploadFunction,\n PluginOptions,\n PromptField,\n PromptFieldGetterContext,\n SeedPromptData,\n SeedPromptFunction,\n SeedPromptOptions,\n SeedPromptResult,\n} from '../types.ts'"],"names":[],"mappings":"AACA,WAgBoB"}
1
+ {"version":3,"sources":["../../src/exports/types.ts"],"sourcesContent":["export type { aiPlugin } from '../index.ts'\nexport type { \n ActionMenuItems,\n ActionPrompt,\n ActionPromptOptions,\n GenerationConfig, \n GenerationModel,\n PluginConfig, \n PluginConfigAccess,\n PluginConfigMediaUploadFunction,\n PluginOptions,\n PromptField,\n PromptFieldGetterContext,\n SeedPromptData,\n SeedPromptFunction,\n SeedPromptOptions,\n SeedPromptResult,\n} from '../types.ts'"],"names":[],"mappings":"AACA,WAgBoB"}
@@ -1 +1 @@
1
- export declare const PayloadAiPluginLexicalEditorFeature: import("@payloadcms/richtext-lexical").FeatureProviderProviderServer<undefined, undefined, undefined>;
1
+ export declare const aiPluginLexicalEditorFeature: import("@payloadcms/richtext-lexical").FeatureProviderProviderServer<undefined, undefined, undefined>;
@@ -1,7 +1,7 @@
1
1
  import { createServerFeature } from '@payloadcms/richtext-lexical';
2
2
  import { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js';
3
3
  // TODO: Find a way to check if the plugin is activated
4
- export const PayloadAiPluginLexicalEditorFeature = createServerFeature({
4
+ export const aiPluginLexicalEditorFeature = createServerFeature({
5
5
  feature: {
6
6
  ClientFeature: '@ai-stack/payloadcms/fields/LexicalEditor/feature.client.js#LexicalEditorFeatureClient'
7
7
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\n\n// TODO: Find a way to check if the plugin is activated\nexport const PayloadAiPluginLexicalEditorFeature = createServerFeature({\n feature: {\n ClientFeature: '@ai-stack/payloadcms/fields/LexicalEditor/feature.client.js#LexicalEditorFeatureClient',\n },\n key: PLUGIN_LEXICAL_EDITOR_FEATURE,\n})\n"],"names":["createServerFeature","PLUGIN_LEXICAL_EDITOR_FEATURE","PayloadAiPluginLexicalEditorFeature","feature","ClientFeature","key"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,+BAA8B;AAElE,SAASC,6BAA6B,QAAQ,oBAAmB;AAEjE,uDAAuD;AACvD,OAAO,MAAMC,sCAAsCF,oBAAoB;IACrEG,SAAS;QACPC,eAAe;IACjB;IACAC,KAAKJ;AACP,GAAE"}
1
+ {"version":3,"sources":["../../../src/fields/LexicalEditor/feature.server.ts"],"sourcesContent":["import { createServerFeature } from '@payloadcms/richtext-lexical'\n\nimport { PLUGIN_LEXICAL_EDITOR_FEATURE } from '../../defaults.js'\n\n// TODO: Find a way to check if the plugin is activated\nexport const aiPluginLexicalEditorFeature = createServerFeature({\n feature: {\n ClientFeature: '@ai-stack/payloadcms/fields/LexicalEditor/feature.client.js#LexicalEditorFeatureClient',\n },\n key: PLUGIN_LEXICAL_EDITOR_FEATURE,\n})\n"],"names":["createServerFeature","PLUGIN_LEXICAL_EDITOR_FEATURE","aiPluginLexicalEditorFeature","feature","ClientFeature","key"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,+BAA8B;AAElE,SAASC,6BAA6B,QAAQ,oBAAmB;AAEjE,uDAAuD;AACvD,OAAO,MAAMC,+BAA+BF,oBAAoB;IAC9DG,SAAS;QACPC,eAAe;IACjB;IACAC,KAAKJ;AACP,GAAE"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { defaultPrompts } from './ai/utilities/prompts.js';
2
2
  export { promptMentionsEndpoint } from './endpoints/promptMentions.js';
3
- export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
3
+ export { aiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
4
4
  export { PromptField } from './fields/PromptField.js';
5
5
  export type {} from './payload-ai.d.ts';
6
- export { payloadAiPlugin } from './plugin.js';
6
+ export { aiPlugin } from './plugin.js';
7
7
  export { fieldToJsonSchema } from './utilities/fields/fieldToJsonSchema.js';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  export { defaultPrompts } from './ai/utilities/prompts.js';
2
2
  export { promptMentionsEndpoint } from './endpoints/promptMentions.js';
3
- export { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
3
+ export { aiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js';
4
4
  export { PromptField } from './fields/PromptField.js';
5
- export { payloadAiPlugin } from './plugin.js';
5
+ export { aiPlugin } from './plugin.js';
6
6
  export { fieldToJsonSchema } from './utilities/fields/fieldToJsonSchema.js';
7
7
 
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { defaultPrompts } from './ai/utilities/prompts.js'\nexport { promptMentionsEndpoint } from './endpoints/promptMentions.js'\nexport { PayloadAiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\nexport { PromptField } from './fields/PromptField.js'\n// Re-export to ensure payload.ai module augmentation is included\nexport type {} from './payload-ai.d.ts'\nexport { payloadAiPlugin } from './plugin.js'\nexport { fieldToJsonSchema } from './utilities/fields/fieldToJsonSchema.js'\n"],"names":["defaultPrompts","promptMentionsEndpoint","PayloadAiPluginLexicalEditorFeature","PromptField","payloadAiPlugin","fieldToJsonSchema"],"mappings":"AAAA,SAASA,cAAc,QAAQ,4BAA2B;AAC1D,SAASC,sBAAsB,QAAQ,gCAA+B;AACtE,SAASC,mCAAmC,QAAQ,2CAA0C;AAC9F,SAASC,WAAW,QAAQ,0BAAyB;AAGrD,SAASC,eAAe,QAAQ,cAAa;AAC7C,SAASC,iBAAiB,QAAQ,0CAAyC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { defaultPrompts } from './ai/utilities/prompts.js'\nexport { promptMentionsEndpoint } from './endpoints/promptMentions.js'\nexport { aiPluginLexicalEditorFeature } from './fields/LexicalEditor/feature.server.js'\nexport { PromptField } from './fields/PromptField.js'\n// Re-export to ensure payload.ai module augmentation is included\nexport type {} from './payload-ai.d.ts'\nexport { aiPlugin } from './plugin.js'\nexport { fieldToJsonSchema } from './utilities/fields/fieldToJsonSchema.js'\n"],"names":["defaultPrompts","promptMentionsEndpoint","aiPluginLexicalEditorFeature","PromptField","aiPlugin","fieldToJsonSchema"],"mappings":"AAAA,SAASA,cAAc,QAAQ,4BAA2B;AAC1D,SAASC,sBAAsB,QAAQ,gCAA+B;AACtE,SAASC,4BAA4B,QAAQ,2CAA0C;AACvF,SAASC,WAAW,QAAQ,0BAAyB;AAGrD,SAASC,QAAQ,QAAQ,cAAa;AACtC,SAASC,iBAAiB,QAAQ,0CAAyC"}
package/dist/plugin.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { Config } from 'payload';
2
2
  import type { PluginConfig } from './types.js';
3
- declare const payloadAiPlugin: (pluginConfig: PluginConfig) => (incomingConfig: Config) => Config;
4
- export { payloadAiPlugin };
3
+ declare const aiPlugin: (pluginConfig: PluginConfig) => (incomingConfig: Config) => Config;
4
+ export { aiPlugin };
package/dist/plugin.js CHANGED
@@ -50,7 +50,7 @@ const securityMessage = `
50
50
  ā•‘ them explicitly in your plugin configuration. ā•‘
51
51
  ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•
52
52
  `;
53
- const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
53
+ const aiPlugin = (pluginConfig)=>(incomingConfig)=>{
54
54
  pluginConfig = {
55
55
  ...defaultPluginConfig,
56
56
  ...pluginConfig,
@@ -221,6 +221,6 @@ const payloadAiPlugin = (pluginConfig)=>(incomingConfig)=>{
221
221
  };
222
222
  return updatedConfig;
223
223
  };
224
- export { payloadAiPlugin };
224
+ export { aiPlugin };
225
225
 
226
226
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CollectionConfig, Config, GlobalConfig } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n PayloadGenerateMediaArgs,\n PayloadGenerateObjectArgs,\n PayloadGenerateTextArgs,\n} from './ai/core/types.js'\nimport type { PluginConfig } from './types.js'\n\nimport { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js'\nimport { aiJobsCollection } from './collections/AIJobs.js'\nimport { AIProvidersGlobal } from './collections/AIProviders.js'\nimport { instructionsCollection } from './collections/Instructions.js'\nimport { PLUGIN_NAME } from './defaults.js'\nimport { fetchFields } from './endpoints/fetchFields.js'\nimport { fetchVoices } from './endpoints/fetchVoices.js'\nimport { endpoints } from './endpoints/index.js'\nimport { translations } from './translations/index.js'\nimport { updateFieldsConfig } from './utilities/fields/updateFieldsConfig.js'\nimport { autoSetupProviders } from './utilities/init/autoSetupProviders.js'\n\nconst defaultPluginConfig: PluginConfig = {\n access: {\n generate: ({ req }) => !!req.user,\n settings: ({ req }) => !!req.user,\n },\n disableSponsorMessage: false,\n}\n\nconst sponsorMessage = `\n╔═══════════════════════════════════════════════════════════════╗\nā•‘ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ā•‘\nā•‘ ā•‘\nā•‘ If this plugin makes your life easier, please ā•‘\nā•‘ consider supporting its development and maintenance: ā•‘\nā•‘ ā•‘\nā•‘ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ā•‘\nā•‘ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ā•‘\nā•‘ ā•‘\nā•‘ Your support fuels continued improvements, ā•‘\nā•‘ new features, and more caffeinated coding sessions! ā˜• ā•‘\nā•‘ ā•‘\nā•‘ Got feedback or need help? Submit an issue here: ā•‘\nā•‘ • https://github.com/ashbuilds/payload-ai/issues/new ā•‘\nā•‘ ā•‘\nā•‘ Thank you again, and happy building! ā•‘\nā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n`\n\nconst securityMessage = `\n╔═══════════════════════════════════════════════════════════════╗\nā•‘ SECURITY NOTICE ā•‘\nā•‘ ā•‘\nā•‘ The AI Plugin now requires authentication by default. ā•‘\nā•‘ All AI features are restricted to authenticated users. ā•‘\nā•‘ ā•‘\nā•‘ To customize access control, configure the 'access' option ā•‘\nā•‘ in your plugin settings. See documentation for details. ā•‘\nā•‘ ā•‘\nā•‘ If you need different access patterns, please configure ā•‘\nā•‘ them explicitly in your plugin configuration. ā•‘\nā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n`\n\nconst payloadAiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n pluginConfig = {\n ...defaultPluginConfig,\n ...pluginConfig,\n access: {\n ...defaultPluginConfig.access,\n ...pluginConfig.access,\n },\n }\n\n const isActivated = !!pluginConfig\n let updatedConfig: Config = { ...incomingConfig }\n\n if (isActivated) {\n const Instructions = instructionsCollection(pluginConfig)\n const AIJobs = aiJobsCollection()\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes)\n\n if (!Instructions.admin) {\n Instructions.admin = {}\n }\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: lexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions, AIJobs]\n const globals = [...(incomingConfig.globals ?? []), AIProvidersGlobal]\n const { globals: globalsSlugs } = pluginConfig\n\n const { components: { providers = [] } = {} } = incomingConfig.admin || {}\n const updatedProviders = [\n ...(providers ?? []),\n {\n path: '@ai-stack/payloadcms/providers/InstructionsProvider/InstructionsProvider.js#InstructionsProvider',\n },\n ]\n\n incomingConfig.admin = {\n ...(incomingConfig.admin || {}),\n components: {\n ...(incomingConfig.admin?.components ?? {}),\n providers: updatedProviders,\n },\n }\n\n const pluginEndpoints = endpoints(pluginConfig)\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n // Always inject fields, but they will be dynamically enabled/disabled by the InstructionsProvider\n const { updatedCollectionConfig } = updateFieldsConfig(collection)\n return updatedCollectionConfig as CollectionConfig\n }),\n endpoints: [\n ...(incomingConfig.endpoints ?? []),\n pluginEndpoints.promptMentions,\n pluginEndpoints.textarea,\n pluginEndpoints.upload,\n ...(pluginEndpoints.videogenWebhook ? [pluginEndpoints.videogenWebhook] : []),\n fetchFields(pluginConfig),\n fetchVoices,\n ],\n globals: globals.map((global) => {\n if (globalsSlugs && globalsSlugs[global.slug]) {\n const { updatedCollectionConfig } = updateFieldsConfig(global)\n return updatedCollectionConfig as GlobalConfig\n }\n\n return global\n }),\n i18n: {\n ...(incomingConfig.i18n || {}),\n translations: deepMergeSimple(translations, incomingConfig.i18n?.translations ?? {}),\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) {\n await incomingConfig.onInit(payload)\n }\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n if (!pluginConfig.disableSponsorMessage) {\n setTimeout(() => {\n payload.logger.info(securityMessage)\n }, 1000)\n setTimeout(() => {\n payload.logger.info(sponsorMessage)\n }, 3000)\n }\n\n // Inject AI capabilities with the abstraction layer\n const ai = {\n // Core generation methods\n generateObject: async (args: Omit<PayloadGenerateObjectArgs, 'payload'>) => {\n const { generateObject } = await import('./ai/core/index.js')\n return generateObject({ ...args, payload })\n },\n\n generateText: async (args: Omit<PayloadGenerateTextArgs, 'payload'>) => {\n const { generateText } = await import('./ai/core/index.js')\n return generateText({ ...args, payload })\n },\n\n generateMedia: async (args: Omit<PayloadGenerateMediaArgs, 'payload'>) => {\n const { generateMedia } = await import('./ai/core/index.js')\n return generateMedia({ ...args, payload })\n },\n\n // Streaming variants\n streamObject: async (args: Omit<PayloadGenerateObjectArgs, 'payload'>) => {\n const { streamObject } = await import('./ai/core/index.js')\n const result = await streamObject({ ...args, payload })\n return result.toTextStreamResponse()\n },\n\n streamText: async (args: Omit<PayloadGenerateTextArgs, 'payload'>) => {\n const { streamText } = await import('./ai/core/index.js')\n return streamText({ ...args, payload })\n },\n\n // Helper utilities\n getModel: async (provider: string, modelId: string, type?: 'image' | 'text' | 'tts') => {\n const { getImageModel, getLanguageModel, getTTSModel } = await import(\n './ai/providers/registry.js'\n )\n if (type === 'image') {\n return getImageModel(payload, provider, modelId)\n }\n if (type === 'tts') {\n return getTTSModel(payload, provider, modelId)\n }\n return getLanguageModel(payload, provider, modelId)\n },\n\n getRegistry: async () => {\n const { getProviderRegistry } = await import('./ai/providers/registry.js')\n return getProviderRegistry(payload)\n },\n }\n\n // Use Object.defineProperty to safely add ai to payload\n Object.defineProperty(payload, 'ai', { value: ai, writable: true })\n\n // Handle Provider Options & seeding auto-setup\n await autoSetupProviders(payload, pluginConfig)\n }\n\n return updatedConfig\n }\n\nexport { payloadAiPlugin }\n"],"names":["deepMergeSimple","lexicalJsonSchema","aiJobsCollection","AIProvidersGlobal","instructionsCollection","PLUGIN_NAME","fetchFields","fetchVoices","endpoints","translations","updateFieldsConfig","autoSetupProviders","defaultPluginConfig","access","generate","req","user","settings","disableSponsorMessage","sponsorMessage","securityMessage","payloadAiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","Instructions","AIJobs","lexicalSchema","editorConfig","nodes","admin","debugging","hidden","custom","schema","collections","globals","globalsSlugs","components","providers","updatedProviders","path","pluginEndpoints","map","collection","updatedCollectionConfig","promptMentions","textarea","upload","videogenWebhook","global","slug","i18n","onInit","payload","logger","warn","setTimeout","info","ai","generateObject","args","generateText","generateMedia","streamObject","result","toTextStreamResponse","streamText","getModel","provider","modelId","type","getImageModel","getLanguageModel","getTTSModel","getRegistry","getProviderRegistry","Object","defineProperty","value","writable"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { CollectionConfig, Config, GlobalConfig } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\n\nimport type {\n PayloadGenerateMediaArgs,\n PayloadGenerateObjectArgs,\n PayloadGenerateTextArgs,\n} from './ai/core/types.js'\nimport type { PluginConfig } from './types.js'\n\nimport { lexicalJsonSchema } from './ai/schemas/lexicalJsonSchema.js'\nimport { aiJobsCollection } from './collections/AIJobs.js'\nimport { AIProvidersGlobal } from './collections/AIProviders.js'\nimport { instructionsCollection } from './collections/Instructions.js'\nimport { PLUGIN_NAME } from './defaults.js'\nimport { fetchFields } from './endpoints/fetchFields.js'\nimport { fetchVoices } from './endpoints/fetchVoices.js'\nimport { endpoints } from './endpoints/index.js'\nimport { translations } from './translations/index.js'\nimport { updateFieldsConfig } from './utilities/fields/updateFieldsConfig.js'\nimport { autoSetupProviders } from './utilities/init/autoSetupProviders.js'\n\nconst defaultPluginConfig: PluginConfig = {\n access: {\n generate: ({ req }) => !!req.user,\n settings: ({ req }) => !!req.user,\n },\n disableSponsorMessage: false,\n}\n\nconst sponsorMessage = `\n╔═══════════════════════════════════════════════════════════════╗\nā•‘ THANK YOU FOR USING THE PAYLOAD AI PLUGIN! ā•‘\nā•‘ ā•‘\nā•‘ If this plugin makes your life easier, please ā•‘\nā•‘ consider supporting its development and maintenance: ā•‘\nā•‘ ā•‘\nā•‘ • Buy me a coffee: https://buymeacoffee.com/ashbuilds ā•‘\nā•‘ • Sponsor on GitHub: https://github.com/sponsors/ashbuilds ā•‘\nā•‘ ā•‘\nā•‘ Your support fuels continued improvements, ā•‘\nā•‘ new features, and more caffeinated coding sessions! ā˜• ā•‘\nā•‘ ā•‘\nā•‘ Got feedback or need help? Submit an issue here: ā•‘\nā•‘ • https://github.com/ashbuilds/payload-ai/issues/new ā•‘\nā•‘ ā•‘\nā•‘ Thank you again, and happy building! ā•‘\nā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n`\n\nconst securityMessage = `\n╔═══════════════════════════════════════════════════════════════╗\nā•‘ SECURITY NOTICE ā•‘\nā•‘ ā•‘\nā•‘ The AI Plugin now requires authentication by default. ā•‘\nā•‘ All AI features are restricted to authenticated users. ā•‘\nā•‘ ā•‘\nā•‘ To customize access control, configure the 'access' option ā•‘\nā•‘ in your plugin settings. See documentation for details. ā•‘\nā•‘ ā•‘\nā•‘ If you need different access patterns, please configure ā•‘\nā•‘ them explicitly in your plugin configuration. ā•‘\nā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•\n`\n\nconst aiPlugin =\n (pluginConfig: PluginConfig) =>\n (incomingConfig: Config): Config => {\n pluginConfig = {\n ...defaultPluginConfig,\n ...pluginConfig,\n access: {\n ...defaultPluginConfig.access,\n ...pluginConfig.access,\n },\n }\n\n const isActivated = !!pluginConfig\n let updatedConfig: Config = { ...incomingConfig }\n\n if (isActivated) {\n const Instructions = instructionsCollection(pluginConfig)\n const AIJobs = aiJobsCollection()\n // Inject editor schema to config, so that it can be accessed when /textarea endpoint will hit\n const lexicalSchema = lexicalJsonSchema(pluginConfig.editorConfig?.nodes)\n\n if (!Instructions.admin) {\n Instructions.admin = {}\n }\n\n if (pluginConfig.debugging) {\n Instructions.admin.hidden = false\n }\n\n Instructions.admin.custom = {\n ...(Instructions.admin.custom || {}),\n [PLUGIN_NAME]: {\n editorConfig: {\n // Used in admin client for useObject hook\n schema: lexicalSchema,\n },\n },\n }\n\n const collections = [...(incomingConfig.collections ?? []), Instructions, AIJobs]\n const globals = [...(incomingConfig.globals ?? []), AIProvidersGlobal]\n const { globals: globalsSlugs } = pluginConfig\n\n const { components: { providers = [] } = {} } = incomingConfig.admin || {}\n const updatedProviders = [\n ...(providers ?? []),\n {\n path: '@ai-stack/payloadcms/providers/InstructionsProvider/InstructionsProvider.js#InstructionsProvider',\n },\n ]\n\n incomingConfig.admin = {\n ...(incomingConfig.admin || {}),\n components: {\n ...(incomingConfig.admin?.components ?? {}),\n providers: updatedProviders,\n },\n }\n\n const pluginEndpoints = endpoints(pluginConfig)\n updatedConfig = {\n ...incomingConfig,\n collections: collections.map((collection) => {\n // Always inject fields, but they will be dynamically enabled/disabled by the InstructionsProvider\n const { updatedCollectionConfig } = updateFieldsConfig(collection)\n return updatedCollectionConfig as CollectionConfig\n }),\n endpoints: [\n ...(incomingConfig.endpoints ?? []),\n pluginEndpoints.promptMentions,\n pluginEndpoints.textarea,\n pluginEndpoints.upload,\n ...(pluginEndpoints.videogenWebhook ? [pluginEndpoints.videogenWebhook] : []),\n fetchFields(pluginConfig),\n fetchVoices,\n ],\n globals: globals.map((global) => {\n if (globalsSlugs && globalsSlugs[global.slug]) {\n const { updatedCollectionConfig } = updateFieldsConfig(global)\n return updatedCollectionConfig as GlobalConfig\n }\n\n return global\n }),\n i18n: {\n ...(incomingConfig.i18n || {}),\n translations: deepMergeSimple(translations, incomingConfig.i18n?.translations ?? {}),\n },\n }\n }\n\n updatedConfig.onInit = async (payload) => {\n if (incomingConfig.onInit) {\n await incomingConfig.onInit(payload)\n }\n\n if (!isActivated) {\n payload.logger.warn(`— AI Plugin: Not activated. Please verify your environment keys.`)\n return\n }\n\n if (!pluginConfig.disableSponsorMessage) {\n setTimeout(() => {\n payload.logger.info(securityMessage)\n }, 1000)\n setTimeout(() => {\n payload.logger.info(sponsorMessage)\n }, 3000)\n }\n\n // Inject AI capabilities with the abstraction layer\n const ai = {\n // Core generation methods\n generateObject: async (args: Omit<PayloadGenerateObjectArgs, 'payload'>) => {\n const { generateObject } = await import('./ai/core/index.js')\n return generateObject({ ...args, payload })\n },\n\n generateText: async (args: Omit<PayloadGenerateTextArgs, 'payload'>) => {\n const { generateText } = await import('./ai/core/index.js')\n return generateText({ ...args, payload })\n },\n\n generateMedia: async (args: Omit<PayloadGenerateMediaArgs, 'payload'>) => {\n const { generateMedia } = await import('./ai/core/index.js')\n return generateMedia({ ...args, payload })\n },\n\n // Streaming variants\n streamObject: async (args: Omit<PayloadGenerateObjectArgs, 'payload'>) => {\n const { streamObject } = await import('./ai/core/index.js')\n const result = await streamObject({ ...args, payload })\n return result.toTextStreamResponse()\n },\n\n streamText: async (args: Omit<PayloadGenerateTextArgs, 'payload'>) => {\n const { streamText } = await import('./ai/core/index.js')\n return streamText({ ...args, payload })\n },\n\n // Helper utilities\n getModel: async (provider: string, modelId: string, type?: 'image' | 'text' | 'tts') => {\n const { getImageModel, getLanguageModel, getTTSModel } = await import(\n './ai/providers/registry.js'\n )\n if (type === 'image') {\n return getImageModel(payload, provider, modelId)\n }\n if (type === 'tts') {\n return getTTSModel(payload, provider, modelId)\n }\n return getLanguageModel(payload, provider, modelId)\n },\n\n getRegistry: async () => {\n const { getProviderRegistry } = await import('./ai/providers/registry.js')\n return getProviderRegistry(payload)\n },\n }\n\n // Use Object.defineProperty to safely add ai to payload\n Object.defineProperty(payload, 'ai', { value: ai, writable: true })\n\n // Handle Provider Options & seeding auto-setup\n await autoSetupProviders(payload, pluginConfig)\n }\n\n return updatedConfig\n }\n\nexport { aiPlugin }\n"],"names":["deepMergeSimple","lexicalJsonSchema","aiJobsCollection","AIProvidersGlobal","instructionsCollection","PLUGIN_NAME","fetchFields","fetchVoices","endpoints","translations","updateFieldsConfig","autoSetupProviders","defaultPluginConfig","access","generate","req","user","settings","disableSponsorMessage","sponsorMessage","securityMessage","aiPlugin","pluginConfig","incomingConfig","isActivated","updatedConfig","Instructions","AIJobs","lexicalSchema","editorConfig","nodes","admin","debugging","hidden","custom","schema","collections","globals","globalsSlugs","components","providers","updatedProviders","path","pluginEndpoints","map","collection","updatedCollectionConfig","promptMentions","textarea","upload","videogenWebhook","global","slug","i18n","onInit","payload","logger","warn","setTimeout","info","ai","generateObject","args","generateText","generateMedia","streamObject","result","toTextStreamResponse","streamText","getModel","provider","modelId","type","getImageModel","getLanguageModel","getTTSModel","getRegistry","getProviderRegistry","Object","defineProperty","value","writable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-stack/payloadcms",
3
- "version": "3.76.0-beta.3",
3
+ "version": "3.76.0-beta.4",
4
4
  "private": false,
5
5
  "bugs": "https://github.com/ashbuilds/payload-ai/issues",
6
6
  "repository": "https://github.com/ashbuilds/payload-ai",
@@ -152,7 +152,8 @@
152
152
  "@payloadcms/ui": "^3.55.1",
153
153
  "lexical": "^0.35.0",
154
154
  "next": ">=15.0.0",
155
- "payload": "^3.55.1"
155
+ "payload": "^3.55.1",
156
+ "@payloadcms/live-preview-react": "^3.76.0"
156
157
  },
157
158
  "engines": {
158
159
  "node": "^18.20.2 || >=20.9.0"
@@ -225,7 +226,6 @@
225
226
  "@anthropic-ai/sdk": "^0.62.0",
226
227
  "@fal-ai/client": "^1.7.0",
227
228
  "@google/genai": "^1.30.0",
228
- "@payloadcms/live-preview-react": "3.76.0",
229
229
  "ai": "^5.0.104",
230
230
  "ajv": "^8.17.1",
231
231
  "elevenlabs": "^0.8.2",