Skip to content

feat(ai-sdk): neutral queue/broadcast adapter seam (configureAiQueue)#51

Merged
suleimansh merged 1 commit into
mainfrom
decouple/ai-sdk-queue-broadcast-seam
Jun 27, 2026
Merged

feat(ai-sdk): neutral queue/broadcast adapter seam (configureAiQueue)#51
suleimansh merged 1 commit into
mainfrom
decouple/ai-sdk-queue-broadcast-seam

Conversation

@suleimansh

Copy link
Copy Markdown
Member

What

Resolves the last @rudderjs/* coupling in the @gemstack/ai-sdk engine. agent.queue('...').send() and .broadcast(channel) no longer dynamically import @rudderjs/queue or @rudderjs/broadcast. Instead, the host registers a neutral adapter once at startup, mirroring the existing cache-adapter.ts / storage-adapter.ts seams.

New public API

configureAiQueue({ dispatch, broadcast }) registers the adapters and returns a restore function (handy in tests):

configureAiQueue({
  dispatch:  (fn, opts) => myQueue.push(fn, opts),
  broadcast: (channel, event, data) => myBus.emit(channel, event, data),
})

New exports from @gemstack/ai-sdk:

  • configureAiQueue (function)
  • QueueDispatch, QueueBroadcast (types, in new queue-adapter.ts)
  • BroadcastOptions (type)

Behavior of the defaults

When no adapter is registered, the defaults no longer try to import @rudderjs/*. They fail loudly with a clear "configure it" message instead:

  • agent.queue() throws: "agent.queue() needs a queue adapter. Register one at startup with configureAiQueue({ dispatch })."
  • .broadcast() throws: ".broadcast() needs a broadcast adapter. Register one with configureAiQueue({ broadcast })."

Scope

This is the engine half. A follow-up @rudderjs/ai PR will call configureAiQueue in AiProvider.boot (wiring @rudderjs/queue's dispatch and @rudderjs/broadcast's broadcast), so Rudder apps keep working with no app change. This PR does not touch the Rudder repo.

Verification

  • pnpm --filter @gemstack/ai-sdk build is clean.
  • pnpm --filter @gemstack/ai-sdk test passes (902 tests).
  • grep -rn '@rudderjs' packages/ai-sdk/src (excluding tests) is now empty.

Closes #48

… - drop @rudderjs/queue + @rudderjs/broadcast
@suleimansh suleimansh self-assigned this Jun 27, 2026
@suleimansh suleimansh added the enhancement New feature or request label Jun 27, 2026
@suleimansh suleimansh merged commit dbc8b3a into main Jun 27, 2026
1 check passed
@suleimansh suleimansh deleted the decouple/ai-sdk-queue-broadcast-seam branch June 27, 2026 11:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ai-sdk decouple: neutral seam for agent.queue() / .broadcast() (drop @rudderjs/queue + @rudderjs/broadcast string imports)

1 participant