chore: publish new package versions#4525
Merged
Merged
Conversation
1971ac4 to
0c381e6
Compare
KyleAMathews
approved these changes
Jun 8, 2026
0c381e6 to
29aba20
Compare
✅ Deploy Preview for electric-next ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
45266dd to
667329e
Compare
667329e to
c1a759a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
@electric-ax/agents@0.4.15
Patch Changes
8bcadb7: Preserve existing undici global dispatcher interceptors when installing the Durable Streams fetch cache so Electric Agents Desktop keeps injecting Cloud auth headers after the built-in agents runtime starts.
5aa2d78: Give Horton a
forktool that creates a child session inheriting this conversation's history up to the latest completed response. Takes an optionalentityUrl(omit for self-fork), an optionalinitialMessage(server delivers to the fork in the same round-trip — no follow-upsendneeded; not atomic with fork creation), and optionaltags. The fork is created as a CHILD of the calling entity (same parent-ownership model asspawn_worker) and wires reply delivery through the same manifest-anchored wake — when the fork's next run finishes, the parent wakes with the response in the wake message.Horton's system prompt grows a "When to fork (vs spawn_worker)" section framing the two tools as a pair: both create a child the parent owns and gets replies from, the difference is what the child boots with —
spawn_workerstarts with an empty context (you brief it from scratch),forkstarts with a copy of the conversation up to the latest completed response. Includes an explicit trigger pattern ("prefer fork when generating multiple variants the user wants to compare; don't inline") to route "give me three takes" / "evaluate these N approaches" prompts to fork rather than collapsing them into one inline response, plus the workflow for the parallel-exploration loop (end-turn-first, fork-once-per-branch with a differentinitialMessageeach, wait for all responses before synthesising).a1c1e30: Add built-in schedule tools to Horton and document them in the system prompt.
1099366: Fix leftover Docker sandbox containers (
electric-sbx-*) piling up.Sandbox containers are meant to be short-lived, but several gaps let them
outlive the work they were created for — opening the desktop app could leave
15+ containers running that were never explicitly started. This closes those
gaps so a container only exists while something is actually using it:
actually uses its sandbox (runs a command, reads/writes a file), so trivial
wakes (scheduled ticks, bookkeeping) no longer spin one up.
instead of leaving their delayed-teardown timers to die with the process.
that created them; at startup, those whose owner is gone are reclaimed
(throwaway ones removed, reusable ones stopped so their files survive), while
containers a live process is still using are left untouched.
Also: a failed container setup step no longer strands an untracked container,
and all sandboxes are grouped under one
electric-sandboxesentry in DockerDesktop so they can be stopped/removed together.
Updated dependencies [d15852d]
Updated dependencies [5aa2d78]
Updated dependencies [1099366]
Updated dependencies [1099366]
@electric-ax/agents-runtime@0.3.11
Patch Changes
d15852d: Fix runtime-originated agent send attribution by sending
from_principal,from_agent, and the active wake write token, and acceptingfrom_agentwhen backed by a valid agent write token.5aa2d78: Add
ctx.fork(opts?)toHandlerContext, with an opts shape that mirrorsctx.spawn's where the semantics map:By default (
observe: true), the new fork is a CHILD of this entity (same parent-ownership model asctx.spawn), and arunFinished + includeResponsewake is registered on it server-side. Reply delivery uses the same manifest-anchored wake mechanismctx.spawnuses — when the fork's next run finishes, this entity wakes with the response.observe: falseopts out of the parent relationship entirely: no parent URL, no wake subscription, no manifest entry on the parent's stream.Internally writes a
kind: 'child'manifest row on the parent's stream alongside the server-side wake registration, mirroring the spawn flow's bookkeeping so the relationship persists across wakes. Wired through new fields onRuntimeServerClient.forkEntity(parent,wake,initialMessage,tags) andWiringConfig.forkEntity. AnormalizeWakehelper translates the user-facingWaketype into the wakeRegistry-compatible shape, same logiccreateOrGetChilduses for spawn.The
sendtool'spayloaddescription now documents the canonical{ text: "..." }shape for chat-rendered targets (Horton sessions, agent forks) so messages emitted bysendrender as chat bubbles instead of blank bars.1099366: Docker sandbox creation now pulls the image only when it isn't already present
locally, honoring the documented
pullIfMissingsemantics. Previously everycontainer create called
docker pull, which round-trips to the registry evenfor a fully cached digest-pinned image — making creation needlessly slow and
prone to failing whenever the registry was briefly unreachable.
1099366: Fix leftover Docker sandbox containers (
electric-sbx-*) piling up.Sandbox containers are meant to be short-lived, but several gaps let them
outlive the work they were created for — opening the desktop app could leave
15+ containers running that were never explicitly started. This closes those
gaps so a container only exists while something is actually using it:
actually uses its sandbox (runs a command, reads/writes a file), so trivial
wakes (scheduled ticks, bookkeeping) no longer spin one up.
instead of leaving their delayed-teardown timers to die with the process.
that created them; at startup, those whose owner is gone are reclaimed
(throwaway ones removed, reusable ones stopped so their files survive), while
containers a live process is still using are left untouched.
Also: a failed container setup step no longer strands an untracked container,
and all sandboxes are grouped under one
electric-sandboxesentry in DockerDesktop so they can be stopped/removed together.
@electric-ax/agents-server@0.4.18
Patch Changes
d15852d: Fix runtime-originated agent send attribution by sending
from_principal,from_agent, and the active wake write token, and acceptingfrom_agentwhen backed by a valid agent write token.5aa2d78: Add server-resolved fork anchor + spawn-parity body fields to
POST /_electric/entities/<type>/<id>/fork.anchor: 'latest_completed_run'is an alternative tofork_pointer: the server scans the source root'smainhistory, finds the most recentrunsrow withstatus === 'completed', derives the matching{ offset, sub_offset }pointer, and runs the existing pointer-fork path with it. Mutually exclusive withfork_pointer(400 if both); 400 if no completed run exists. Lets callers without access to the source's per-row pointer side-table (e.g. an agent forking via a tool) fork at the same anchor the per-row "Fork from here" UI uses.parentoverrides the new root fork'sparentfield, making it a CHILD of that URL (rather than inheriting the source's parent).wakeregisters a subscription on the new root fork at fork time (same shape asspawn'swake).initialMessageis delivered to the new root fork viaentityManager.sendafterlinkEntityDispatchSubscriptionruns — same ordering spawn uses, so the dispatcher is subscribed before the inbox row lands and the fork actually wakes on the message instead of sitting idle.tagsare stamped on the new root fork in addition to those copied from the source.Together these let an agent fork itself as a child and receive replies via the same manifest-anchored wake mechanism
spawnuses, with a single round-trip fork-and-dispatch.Chat UI:
readInboxTextfalls back tomessageandcontentkeys whentextisn't present, so messages sent by agents (which sometimes emit those shapes) render as a chat bubble body instead of a blank bar.Updated dependencies [d15852d]
Updated dependencies [5aa2d78]
Updated dependencies [1099366]
Updated dependencies [1099366]
electric-ax@0.2.15
Patch Changes
@electric-ax/example-agents-chat-starter@0.1.6
Patch Changes
@electric-ax/example-agents-walkthrough@0.1.3
Patch Changes
@electric-ax/example-deep-survey@0.1.22
Patch Changes
@electric-ax/agents-desktop@0.1.15
Patch Changes
@electric-ax/agents-mobile@0.0.13
Patch Changes
entityRuntimehelpers are loosened to structural subsets so the mobile app can reuse them.@electric-ax/agents-server-ui@0.4.18
Patch Changes
3dbd075: Add session pinning to the mobile app: long-press a root session row (or any search result) to open a context sheet with the entity info (title, session id, type/status, subagents, runner, sandbox, spawned, last active) and a Pin/Unpin action; the in-session kebab menu also gets a Pin/Unpin item, mirroring the desktop tile menu. Pinned sessions surface in a Pinned section above the groups, persisted per-device in AsyncStorage — the mobile mirror of the web sidebar's pinning. Runner-param types in agents-server-ui's
entityRuntimehelpers are loosened to structural subsets so the mobile app can reuse them.5aa2d78: Add server-resolved fork anchor + spawn-parity body fields to
POST /_electric/entities/<type>/<id>/fork.anchor: 'latest_completed_run'is an alternative tofork_pointer: the server scans the source root'smainhistory, finds the most recentrunsrow withstatus === 'completed', derives the matching{ offset, sub_offset }pointer, and runs the existing pointer-fork path with it. Mutually exclusive withfork_pointer(400 if both); 400 if no completed run exists. Lets callers without access to the source's per-row pointer side-table (e.g. an agent forking via a tool) fork at the same anchor the per-row "Fork from here" UI uses.parentoverrides the new root fork'sparentfield, making it a CHILD of that URL (rather than inheriting the source's parent).wakeregisters a subscription on the new root fork at fork time (same shape asspawn'swake).initialMessageis delivered to the new root fork viaentityManager.sendafterlinkEntityDispatchSubscriptionruns — same ordering spawn uses, so the dispatcher is subscribed before the inbox row lands and the fork actually wakes on the message instead of sitting idle.tagsare stamped on the new root fork in addition to those copied from the source.Together these let an agent fork itself as a child and receive replies via the same manifest-anchored wake mechanism
spawnuses, with a single round-trip fork-and-dispatch.Chat UI:
readInboxTextfalls back tomessageandcontentkeys whentextisn't present, so messages sent by agents (which sometimes emit those shapes) render as a chat bubble body instead of a blank bar.146f238: Polish the agents UI with improved spawn-form model controls, tooltips,
macOS sidebar vibrancy styling, select sizing fixes, and a response-footer
fork action in the timeline.
7892079: Per-runner recent working directories in the spawn UI, derived from the synced sessions list so the same recents appear on every device. The desktop picker becomes per-runner (replacing the localStorage list), and mobile gains sandbox-profile and working-directory selection — including sending the sandbox profile on spawn, without which the runtime ignores the chosen directory.
Updated dependencies [d15852d]
Updated dependencies [5aa2d78]
Updated dependencies [1099366]
Updated dependencies [1099366]
@core/electric-telemetry@0.2.8
Patch Changes
/metricsendpoint: number ofdefined shapes, number of active shapes, replication lag (byte-based slot lag
and time-based receive-lag histogram), retained WAL size, and per-status-code
counts of shape-endpoint HTTP responses
(
electric_plug_serve_shape_requests_count{status="200"},409,503, ...),and admission-control concurrency/rejection counts
(
electric_admission_control_acquire_current{kind=...},electric_admission_control_reject_count{kind=...}).These metrics were already collected and exported to OTel/StatsD/Call-Home but
not to Prometheus, which previously only served system-level (CPU/RAM/BEAM)
metrics. A new
additional_prometheus_metricstelemetry option routes themthrough the single shared Prometheus aggregator without double-reporting via the
other reporters. Assumes a single stack per instance.
electric.plug.serve_shape.requests.countmetric tagged bystatus,known_errorandlive.@core/sync-service@1.6.10
Patch Changes
55c063a: Speed up relation change routing by collecting shape ids directly from the filter's shape table instead of walking where-condition indexes.
9dfa0eb: Fix a
KeyError: key :consider_flushed? not found in: nilcrash inElectric.Shapes.Consumer.consumer_can_suspend?/1now refuses to suspend while a transaction is pending, so the consumer hibernates instead and suspends only once the transaction completes.52549d3: Cap the overload-protection (OLP) mailboxes of the default console, OpenTelemetry, and Sentry logger handlers so error/log bursts shed messages instead of blocking Logger callers or growing unbounded.
This is leading-edge protection only: it shields against the early phase of a redeployment/error burst but is not sufficient under deep scheduler starvation — the real fix for that is upstream (request-proxy admission control and snapshot-pool sizing).
Note:
sync_mode_qlenis intentionally not set on the OpenTelemetry log handler — its module forcessync_mode_qlen == drop_mode_qlen, so the option would be a no-op there.81f9d4b: Expose key stack-level metrics on the Prometheus
/metricsendpoint: number ofdefined shapes, number of active shapes, replication lag (byte-based slot lag
and time-based receive-lag histogram), retained WAL size, and per-status-code
counts of shape-endpoint HTTP responses
(
electric_plug_serve_shape_requests_count{status="200"},409,503, ...),and admission-control concurrency/rejection counts
(
electric_admission_control_acquire_current{kind=...},electric_admission_control_reject_count{kind=...}).These metrics were already collected and exported to OTel/StatsD/Call-Home but
not to Prometheus, which previously only served system-level (CPU/RAM/BEAM)
metrics. A new
additional_prometheus_metricstelemetry option routes themthrough the single shared Prometheus aggregator without double-reporting via the
other reporters. Assumes a single stack per instance.
fcf9749: Add
queryable_columnsas a means to restrict access to sensitive columns, a server-side shape allow-list for columns that may be synced or queried by subset snapshots.c025d2e: Export a per-request
electric.plug.serve_shape.requests.countmetric tagged bystatus,known_errorandlive.d3e1a64: Automatically recover sources whose replication slot creation is stuck waiting on a pending transaction, by periodically calling
pg_log_standby_snapshot(). Previously such sources required a manual restart. When the function is unavailable (PostgreSQL < 14 or missing EXECUTE privilege), Electric falls back to the previous behavior and emits a one-time notice.c015163: Add a
total_processing_timespan attribute that tracks the wall-clock timetaken to process all fragments of a single transaction.