Skip to content

Releases: jhb-software/payload-plugins

@jhb.software/payload-alt-text-plugin@0.5.0

26 Apr 16:11

Choose a tag to compare

! This release contains breaking changes.

Alt text is now scoped to image MIME types by default. Documents whose MIME type is not tracked no longer render the alt text field, are not validated for a required alt text, and are excluded from the alt text health widget.

This aligns the plugin with how other CMSs (WordPress, Drupal) handle alt text — as an image-only concept — and fixes mixed-media collections (e.g. videos alongside images) being counted as broken in the health widget. Projects whose configured upload collections only accept images see no behavior change.

The collections option now also accepts per-collection entries with a mimeTypes override. Bare slug strings continue to work as a shorthand for ['image/*']:

Before (v0.4.x):

payloadAltTextPlugin({
  collections: ['media'],
})

After (v0.5.0):

payloadAltTextPlugin({
  // Bare slug — defaults to ['image/*']
  collections: ['media'],

  // Or restrict / extend MIME types per collection
  collections: [
    { slug: 'media', mimeTypes: ['image/*'] },
    { slug: 'documents', mimeTypes: ['application/pdf'] },
  ],
})
  • feat: scope alt text tracking, validation, and health to configurable per-collection MIME types (default ['image/*'])
  • feat: add a per-collection validate option to override the alt text field validator. Exports the default validateAltText so projects can compose around it — e.g. to skip the required-alt check when the request body does not touch alt (folder moves, partial API updates in localized setups with fallback: false, #95)
  • refactor: stop auto-injecting the alt text health widget into admin.dashboard.defaultLayout. The widget is still registered under admin.dashboard.widgets; add { widgetSlug: 'alt-text-health', width: 'full' } to your defaultLayout to show it by default.
  • fix: support both Next.js 15 and 16 revalidateTag type signatures in the alt text health invalidation hook

@jhb.software/payload-pages-plugin@0.7.0

24 Apr 14:48

Choose a tag to compare

  • feat: add request-scoped ancestor caching to avoid redundant DB queries when computing virtual fields for sibling pages
  • feat: pass full req to payload.findByID in getBreadcrumbs
  • fix: populate virtual fields (path, breadcrumbs) on previousDoc in the afterChange hook, and run the plugin's hook before user-defined hooks so that doc also contains the virtual fields
  • fix: gracefully handle errors when computing virtual fields (e.g. when a parent document no longer exists) instead of crashing the operation
  • fix: use overrideAccess for parent document fetches in breadcrumb generation
  • fix: prevent circular parent references
  • fix: only set alternatePaths on previousDoc meta instead of copying entire meta
  • fix: pass draft arg to parent document lookups in breadcrumb generation
  • style: standardize icons to use Geist icon set (16x16 filled)
  • refactor: use i18next interpolation for translations
  • fix type issue in the afterChange virtual-fields hook
  • chore: upgrade to Payload 3.84.1

@jhb.software/payload-chat-agent@0.1.0-beta.4

21 Apr 06:26

Choose a tag to compare

BREAKING CHANGES:

  • feat!: rename the chat-conversations collection to agent-conversations and the default chat-token-usage budget collection to agent-token-usage. Existing projects must migrate data or override createPayloadBudget({ slug: 'chat-token-usage' }) to keep the previous slug.

OTHER CHANGES:

  • feat: surface a per-field lexical summary on FieldSchema (returned by getCollectionSchema / getGlobalSchema) that lists each richText field's enabled lexical features (bold, heading, link, blocks, ...) along with typed option projections (heading sizes, link fields, upload collections, block/inlineBlock slugs, relationship collections), so the agent can emit only the node types the editor actually allows.
  • feat: add listBlocks and getBlockSchema tools so the agent can enumerate and inspect globally-declared blocks (config.blocks) on demand instead of only seeing them through the collections/globals that reference them.
  • feat: surface endpoint.custom.schema (query / body / response shapes) through listEndpoints so the agent sees each custom endpoint's request/response contract and can construct valid callEndpoint calls without trial-and-error.
  • feat: add a tools plugin option that composes the final toolset the agent sees. Supports user-defined tools (Slack webhooks, Axiom/Vercel log queries, ...) and provider-native ones (anthropic.tools.webSearch_*, openai.tools.webSearch, google.tools.googleSearch, ...) under the same surface.
  • feat: show a "Responding…" indicator in the message list while the agent is working on a response but hasn't streamed any output yet, and a shimmer skeleton while conversation history is loading instead of a blank area
  • feat: note in the system prompt that Payload uses Lexical for rich text so the agent reads/writes rich-text field values as Lexical editor JSON state instead of HTML or Markdown
  • feat: note in the system prompt how Payload's draft query flag differs from the _status field (the document's actual 'draft' / 'published' state) so the agent stops conflating the two
  • feat: include the canonical Lexical SerializedBlockNode shape in the system prompt when a richText field carries the blocks / inlineBlocks feature, so agents stop guessing the node structure and failing Lexical validation
  • perf: restrict the sidebar conversation list query to title + updatedAt via select so the full messages JSON is no longer fetched just to render the list
  • perf: index the user field on the agent-conversations collection so read-access filtering and the sidebar list query no longer require a full scan
  • fix: redirect unauthenticated visitors of /admin/chat to the login page instead of rendering the admin chrome around a "Not authorized" message
  • fix: drop tool calls that never reached a terminal state before forwarding messages to the provider, so resumed conversations with an interrupted tool call no longer fail with tool_use.input: Input should be a valid dictionary (or analogous orphan-tool-use errors on other providers)

@jhb.software/payload-chat-agent@0.1.0-beta.3

16 Apr 07:40

Choose a tag to compare

  • feat: surface tool-call status in the chat UI (running / failed / denied) and show failed tool error text in a collapsible panel instead of only a colored dot.
  • feat: add an in-chat header showing the conversation title with inline rename, and move the mode / model selectors and token counter into it
  • feat: make the chat view usable on narrow viewports
  • fix: keep streamed messages visible after the first save of a new conversation
  • fix: retarget saves to the new conversation id after switching conversations from the sidebar

@jhb.software/payload-chat-agent@0.1.0-beta.2

15 Apr 10:20

Choose a tag to compare

  • fix: normalize all Payload label shapes (string, localized Record, LabelFunction, false) in getCollectionSchema / getGlobalSchema output instead of emitting "[object Object]".

@jhb.software/payload-vercel-deployments@0.2.1

09 Apr 12:36

Choose a tag to compare

  • style: standardize icons to use Geist icon set (16x16 filled)
  • style: use cloud icon for deployment widget title instead of info icon
  • refactor: improve widget translations (remove "Vercel" from title, simplify German translations)

@jhb.software/payload-vercel-deployments@0.2.0

09 Apr 07:38

Choose a tag to compare

  • fix: prevent widget from refreshing when deployment data has not changed (fixes constant refresh in dashboard edit mode)
  • feat: display icon and title in same row with larger title using Payload CSS vars
  • feat: add optional widget.websiteUrl config to display a website link
  • feat: make widget description optional and configurable via widget.description
  • refactor: use i18next interpolation for translations

@jhb.software/payload-alt-text-plugin@0.4.4

09 Apr 12:21

Choose a tag to compare

  • style: standardize icons to use Geist icon set (16x16 filled)
  • refactor: improve widget translations (pluralize title, simplify German translations, use i18next plural keys for bulk generate button)

@jhb.software/payload-alt-text-plugin@0.4.3

09 Apr 07:42

Choose a tag to compare

  • fix: reject unsupported file types (e.g. SVG) with clear error showing the MIME type
  • style: use Payload Pill component and SVG icons in health widget
  • refactor: use i18next interpolation for translations

@jhb.software/payload-alt-text-plugin@0.4.2

07 Apr 16:24

Choose a tag to compare

  • fix: dashboard health widget not rendering on Payload <3.79.0 (ComponentPath was renamed to Component in 3.79.0)