Skip to content

chore(release): version packages - #215

Merged
valstu merged 2 commits into
mainfrom
changeset-release/main
Nov 13, 2026
Merged

valstu merged 2 commits into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@intentface/latch-core@0.24.0

Minor Changes

  • 97ad289: An input queue: what arrives while an answer is running is held, and the answer that ends starts the next turn with all of it.

    • handleChat({ ifBusy: "queue" }), or queue: true in the body of POST agents/:agent/:chatId: a message sent to a busy chat is held and answered 202 { queued: { id } }, where it was refused with chat_busy. The default is unchanged.
    • sendSignal on a busy chat, or one waiting on an approval or tool result, now holds the signal and returns { id, queued: true }; its turn starts when the chat is free. Before, it waited for the user's next message. wake: false is unchanged.
    • The run that answers held inputs opens first, then takes everything held in one step. An input is answered once however many workers go for it; while it is being answered it is not listed, not counted against the cap, and can't be taken back; one taken back in time is never answered; one replaced by a retry is answered as replaced; and if the turn can't start, what it took waits again.
    • One turn takes everything held, signals read with the messages. A chat holds at most inputQueue.max inputs (20 by default); past it a message is refused with QueueFullError (queue_full, 429).
    • runtime.listQueued, runtime.cancelQueued, and DELETE chats/:chatId/queue/:messageId.
    • runtime.pollChat and GET chats/:chatId/poll?cursor=…: whether an answer is running, what is held, and the history when it changed. For a page with no stream open.
    • waitUntil on the runtime: with it, the turn for held inputs runs after the response has ended, so the answer's stream closes on time and a held message's 202 returns at once. Without it the stream stays open until that turn is done.
    • runtime.cron() starts the turn for inputs held more than 15 seconds with nobody starting one (a process that died first), and reports them as held. Needs the optional storage method listChatsWithQueuedInputs.
    • Storage: six optional methods (enqueueInput, listQueuedInputs, removeQueuedInputs, takeQueuedInputs, returnQueuedInputs, finishQueuedInputs), covered by the conformance suite. The Drizzle adapters implement them on a new latch_queued_inputs table; run migrate. An adapter without them behaves as before. listRuns takes chatId.
  • 1ef8051: runtime.sendSignal: tell a chat something from server code. The agent answers it at once, or reads it with the user's next message (wake: false); nothing already stored changes, so the prompt cache still hits.

    • A notice (the default) is the application speaking. It is sent as a system message after the user's next message on OpenAI models (direct or Azure) and on the Anthropic models that take one mid-conversation (direct, Vertex, or Bedrock through @ai-sdk/amazon-bedrock/anthropic), and as a <notice> block inside that message everywhere else. resolveNoticePlacement on the runtime overrides the choice per model.
    • A message is a named person other than the chat's user, always read as a person speaking.
    • Stored as an AppMessage with role: "system" and metadata.signal. Hidden from the user unless visibility: "user" is passed. A client can't create one.
    • By default it starts a turn with the signal as what the agent answers, when the chat is free, and resolves with the answer. With wake: false, or when the chat is busy, waiting on a person or over a limit, the signal is stored and waits for the next message.
    • toModelMessages takes notices and keepTrailingSignals; placeSignals, defaultNoticePlacement and isSignal are exported.

Patch Changes

  • @intentface/latch-net@0.24.0

@intentface/latch-drizzle@0.24.0

Minor Changes

  • 97ad289: An input queue: what arrives while an answer is running is held, and the answer that ends starts the next turn with all of it.

    • handleChat({ ifBusy: "queue" }), or queue: true in the body of POST agents/:agent/:chatId: a message sent to a busy chat is held and answered 202 { queued: { id } }, where it was refused with chat_busy. The default is unchanged.
    • sendSignal on a busy chat, or one waiting on an approval or tool result, now holds the signal and returns { id, queued: true }; its turn starts when the chat is free. Before, it waited for the user's next message. wake: false is unchanged.
    • The run that answers held inputs opens first, then takes everything held in one step. An input is answered once however many workers go for it; while it is being answered it is not listed, not counted against the cap, and can't be taken back; one taken back in time is never answered; one replaced by a retry is answered as replaced; and if the turn can't start, what it took waits again.
    • One turn takes everything held, signals read with the messages. A chat holds at most inputQueue.max inputs (20 by default); past it a message is refused with QueueFullError (queue_full, 429).
    • runtime.listQueued, runtime.cancelQueued, and DELETE chats/:chatId/queue/:messageId.
    • runtime.pollChat and GET chats/:chatId/poll?cursor=…: whether an answer is running, what is held, and the history when it changed. For a page with no stream open.
    • waitUntil on the runtime: with it, the turn for held inputs runs after the response has ended, so the answer's stream closes on time and a held message's 202 returns at once. Without it the stream stays open until that turn is done.
    • runtime.cron() starts the turn for inputs held more than 15 seconds with nobody starting one (a process that died first), and reports them as held. Needs the optional storage method listChatsWithQueuedInputs.
    • Storage: six optional methods (enqueueInput, listQueuedInputs, removeQueuedInputs, takeQueuedInputs, returnQueuedInputs, finishQueuedInputs), covered by the conformance suite. The Drizzle adapters implement them on a new latch_queued_inputs table; run migrate. An adapter without them behaves as before. listRuns takes chatId.

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0
    • @intentface/latch-agent-builder@0.24.0
    • @intentface/latch-memory@0.24.0

@intentface/latch-server@0.24.0

Minor Changes

  • 97ad289: An input queue: what arrives while an answer is running is held, and the answer that ends starts the next turn with all of it.

    • handleChat({ ifBusy: "queue" }), or queue: true in the body of POST agents/:agent/:chatId: a message sent to a busy chat is held and answered 202 { queued: { id } }, where it was refused with chat_busy. The default is unchanged.
    • sendSignal on a busy chat, or one waiting on an approval or tool result, now holds the signal and returns { id, queued: true }; its turn starts when the chat is free. Before, it waited for the user's next message. wake: false is unchanged.
    • The run that answers held inputs opens first, then takes everything held in one step. An input is answered once however many workers go for it; while it is being answered it is not listed, not counted against the cap, and can't be taken back; one taken back in time is never answered; one replaced by a retry is answered as replaced; and if the turn can't start, what it took waits again.
    • One turn takes everything held, signals read with the messages. A chat holds at most inputQueue.max inputs (20 by default); past it a message is refused with QueueFullError (queue_full, 429).
    • runtime.listQueued, runtime.cancelQueued, and DELETE chats/:chatId/queue/:messageId.
    • runtime.pollChat and GET chats/:chatId/poll?cursor=…: whether an answer is running, what is held, and the history when it changed. For a page with no stream open.
    • waitUntil on the runtime: with it, the turn for held inputs runs after the response has ended, so the answer's stream closes on time and a held message's 202 returns at once. Without it the stream stays open until that turn is done.
    • runtime.cron() starts the turn for inputs held more than 15 seconds with nobody starting one (a process that died first), and reports them as held. Needs the optional storage method listChatsWithQueuedInputs.
    • Storage: six optional methods (enqueueInput, listQueuedInputs, removeQueuedInputs, takeQueuedInputs, returnQueuedInputs, finishQueuedInputs), covered by the conformance suite. The Drizzle adapters implement them on a new latch_queued_inputs table; run migrate. An adapter without them behaves as before. listRuns takes chatId.

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0
    • @intentface/latch-mcp@0.24.0

@intentface/latch-agent-builder@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0

@intentface/latch-channels@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0

@intentface/latch-mcp@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0
    • @intentface/latch-net@0.24.0

@intentface/latch-memory@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0

@intentface/latch-openapi@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0
    • @intentface/latch-net@0.24.0

@intentface/latch-otel@0.24.0

Patch Changes

  • Updated dependencies [97ad289]
  • Updated dependencies [1ef8051]
    • @intentface/latch-core@0.24.0

@intentface/latch-net@0.24.0

@vercel

vercel Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
intentface-latch-docs Ready Ready Preview Nov 13, 2026 2:34pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b9e3038b-5fc4-4c7c-ada3-6e507f5b9fd4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 0a61f69 to d53ff28 Compare November 13, 2026 14:34
@valstu
valstu merged commit 4a0dafb into main Nov 13, 2026
8 checks passed

This branch was previously deployed

1 inactive deployment
Preview — 0a2b6579 Deployed Nov 13, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant