Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 28 May 13:30
· 38 commits to main since this release

@effect-uai/core

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: Multi-speaker dialogue + custom pronunciations on SpeechSynthesizer:

    • New optional pronunciations?: ReadonlyArray<CustomPronunciation> on
      CommonSynthesizeRequest. New types PhoneticEncoding
      ("ipa" | "x-sampa" | "cmu-arpabet") and CustomPronunciation
      ({phrase, pronunciation, encoding}). Adapters that can't honor an
      entry silently drop it; audio still renders with the default
      pronunciation.
    • New methods synthesizeDialogue and streamSynthesizeDialogue on
      SpeechSynthesizerService, taking CommonSynthesizeDialogueRequest
      ({model, turns, outputFormat?, languageCode?, pronunciations?}).
      DialogueTurn is {voiceId, text, styleDescription?, speed?}.
    • New capability marker MultiSpeakerTts — shipped only by provider
      Layers with native dialogue support. Top-level helpers
      synthesizeDialogue / streamSynthesizeDialogue require it in R,
      so providers without dialogue support fail at compile time. Mirrors
      the existing TtsIncrementalText pattern.
    • MockSpeechSynthesizer extended with dialogueBlobs and
      streamSynthesizeDialogueChunks script fields plus a new
      layerWithoutMultiSpeaker variant for testing the marker.

    Non-breaking: every existing call site continues to compile.

effect-uai

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.

@effect-uai/anthropic

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.

@effect-uai/deno

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.

@effect-uai/elevenlabs

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: - Wire ElevenLabsSynthesizer to the new core dialogue + pronunciation
    surface:

    • synthesizeDialoguePOST /v1/text-to-dialogue (raw audio bytes).
    • streamSynthesizeDialoguePOST /v1/text-to-dialogue/stream
      (chunked binary).
    • Layer now also registers the MultiSpeakerTts capability marker
      (alongside TtsIncrementalText). Per-turn styleDescription and
      speed are silently ignored — ElevenLabs inputs[] takes
      {voice_id, text} only.
    • pronunciations are applied as inline SSML <phoneme alphabet="ipa|cmu-arpabet" ph="...">phrase</phoneme>
      tags for the phoneme-gated legacy models (eleven_flash_v2,
      eleven_english_v1, eleven_monolingual_v1). Other models silently
      drop the overrides. x-sampa entries are always dropped.
    • Add optional region field to every Config (ElevenLabsSynthesizer,
      ElevenLabsTranscriber, realtimeTts, realtimeStt). Typed union
      ElevenLabsRegion = "default" | "eu" | "in" | (string & {}); resolves to
      api.{eu,in}.residency.elevenlabs.io (REST + WSS). Reminder: ElevenLabs
      API keys are workspace-bound — pair an EU-workspace key with region: "eu". baseUrl continues to win when set; unknown region strings pass
      through as residency host prefixes for forward compat. Exports a
      resolveHost(cfg) helper. Non-breaking.

@effect-uai/google

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: - GeminiSynthesizer implements the new SpeechSynthesizerService
    dialogue methods (synthesizeDialogue, streamSynthesizeDialogue) —
    both fail with AiError.Unsupported. The Layer does NOT ship the
    MultiSpeakerTts marker, so callers using the top-level
    synthesizeDialogue helper get a compile-time error against this
    Layer alone. For Gemini-voice multi-speaker, use the upcoming
    @effect-uai/google-speech package with Cloud TTS.

    • pronunciations on CommonSynthesizeRequest is silently ignored
      (Gemini API has no equivalent field).

@effect-uai/inworld

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: - InworldSynthesizer implements the new SpeechSynthesizerService
    dialogue methods (synthesizeDialogue, streamSynthesizeDialogue) —
    both fail with AiError.Unsupported. The Layer does NOT ship the
    MultiSpeakerTts marker; multi-speaker calls fail at compile time.

    • pronunciations on CommonSynthesizeRequest are applied as inline
      /ipa/ tokens in text (Inworld's documented mechanism). Only ipa
      entries are honored; x-sampa and cmu-arpabet entries are silently
      dropped. English-only.

@effect-uai/jina

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.

@effect-uai/microsandbox

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.

@effect-uai/openai

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: - OpenAISynthesizer implements the new SpeechSynthesizerService
    dialogue methods (synthesizeDialogue, streamSynthesizeDialogue) —
    both fail with AiError.Unsupported. The Layer does NOT ship the
    MultiSpeakerTts marker; multi-speaker calls fail at compile time.

    • pronunciations on CommonSynthesizeRequest is silently ignored —
      OpenAI TTS has no phoneme override surface.
    • Add optional region field to every Config (OpenAISynthesizer,
      OpenAITranscriber, realtimeStt). Typed union OpenAiRegion = "default" | "eu" | (string & {}); resolves to eu.api.openai.com for EU-residency
      projects. baseUrl continues to win when set; unknown region strings pass
      through as host prefixes ({region}.api.openai.com/v1) for forward compat.
      Each package exports a resolveHost(cfg) helper. Non-breaking.

@effect-uai/responses

Minor Changes

  • a332f0a: 0.6 bundles one large-but-mechanical naming sweep with a set of
    additive features. The breaking part is source-level only — the wire
    format is unchanged
    (function_call / function_call_output still
    go out on the wire, so no provider payloads change). Almost every
    rewrite is find-and-replace; the full before/after diffs and the
    recommended order live in Migrating to 0.6.

    Breaking: "function call" → "tool call" terminology

    Every public name that said "function call" now says "tool call":

    • ItemHistoryItem; FunctionCallToolCall;
      FunctionCallOutputToolCallOutput.
    • Items.functionCallOutputItems.toolCallOutput;
      Items.isFunctionCallItems.isToolCall;
      Items.isFunctionCallOutputItems.isToolCallOutput.
    • Turn.functionCallsTurn.getToolCalls.

    Breaking: module renames

    • @effect-uai/core/Outcome@effect-uai/core/ToolResult. Also
      ToolResult.ValueToolResult.Ok, isValueisOk,
      rejected(...)failed(...), toFunctionCallOutput
      toToolCallOutput.
    • @effect-uai/core/Resolvers@effect-uai/core/Approval. Also
      fromApprovalMapfromMap, fromVerdictQueuefromQueue,
      ToolCallDecisionApprovalDecision, and the queue helper's
      announce field → approvalRequests.

    Breaking: Turn / Toolkit / Tool / ToolEvent renames

    • Turn.appendTurnTurn.appendToHistory.
    • Turn.toStructuredTurn.decodeStructured.
    • Toolkit.executeAllToolkit.run.
    • Toolkit.continueWithToolkit.continueWithResults.
    • Toolkit.make(...) + Toolkit.toDescriptors(kit) → just
      Tool.toDescriptors([...]). The homogeneous-toolkit wrapper is gone.
    • Tool.AnyKindToolTool.AnyTool.
    • ToolEvent.IntermediateToolEvent.Progress;
      isIntermediateisProgress.

    Breaking: Loop helper trim

    • Loop.loopFrom(...)Loop.loopOver(...).
    • Loop.Event<A, S>Loop.Step<A, S>.
    • return stopreturn stop().
    • Loop.stopWith(state)Loop.stop(state).
    • nextAfter / stopAfter / stopWithAfter / stopEvent /
      nextAfterFold are removed — compose with Stream.concat instead.
      See the migration doc for one-line replacements.

    Additive: new Toolkit / Loop helpers

    • Toolkit.appendToolResults(state, turn) — shorthand for the canonical
      continueWithResults body that folds tool results into history.
    • Toolkit.collectResults — lower-level drain of a Stream<ToolEvent>
      to its ToolResults without advancing the loop.
    • Loop.emitValues(stream) / Loop.emitNext(effect) — fork-helper
      building blocks behind Toolkit.continueWithResults.

    Additive: sandboxes

    A new Sandbox capability in @effect-uai/core/sandbox for running
    untrusted code, commands, or LLM-generated scripts inside an isolated
    microVM. Two new provider packages ship behind the same
    SandboxService:

    • @effect-uai/microsandbox — local Firecracker microVMs via
      microsandbox.
    • @effect-uai/deno — hosted Firecracker microVMs on
      Deno Deploy.

    Both cover create / exec / execStream / volumes / snapshots /
    network policies / bound secrets / OCI image references. The
    recipes-extras/sandbox-code-interpreter recipe shows the "run, fix,
    repeat" pattern.

    Additive: new recipes

    • sleeper-agent — long-lived background agent waking on scheduled
      triggers.
    • external-task-polling — drive the loop from an external task
      queue.
    • sandbox-code-interpreter (in recipes-extras/) — agent writes
      Python, sandbox runs it, stderr feeds back into the next turn.
  • a332f0a: - Add optional region field to both Configs (Responses,
    OpenAIEmbedding). Typed union OpenAiRegion = "default" | "eu" | (string & {}); resolves to eu.api.openai.com for EU-residency projects. baseUrl
    continues to win when set; unknown region strings pass through as host
    prefixes ({region}.api.openai.com/v1) for forward compat. Exports a
    resolveHost(cfg) helper. Non-breaking.