release: Release v0.3.0 - #337
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (4)
📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
WalkthroughThe pull request updates the direct ChangesWeb assets dependency
Estimated code review effort: 1 (Trivial) | ~2 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
| Filename | Overview |
|---|---|
| CHANGELOG.md | Updates the v0.3.0 date and adds the latest feature and fix entries without an accepted finding. |
| RELEASE_BODY.md | Keeps the generated release body aligned with the updated changelog. |
| RELEASE_NOTES.md | Keeps the release notes aligned with the updated changelog. |
| go.mod | Advances the embedded web-assets module to v0.0.76; no changed-code defect was established. |
| go.sum | Replaces the web-assets checksums consistently with the module version update. |
Reviews (3): Last reviewed commit: "release: prepare release v0.3.0" | Re-trigger Greptile
✅ Dry-Run Completed Successfully📊 Build Summary
📦 Built ArtifactsNot available. This is an automated comment from the release dry-run check. |
5da6305 to
25d2e7e
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
✅ Dry-Run Completed Successfully📊 Build Summary
📦 Built ArtifactsNot available. This is an automated comment from the release dry-run check. |
25d2e7e to
36c55a8
Compare
✅ Dry-Run Completed Successfully📊 Build Summary
📦 Built ArtifactsNot available. This is an automated comment from the release dry-run check. |
Release v0.3.0
This PR prepares the release of version v0.3.0.
Changelog
0.3.0 - 2026-08-10
♻️ Refactoring
🎉 Features
MCP transport no longer accepts SSE.
🐛 Bug Fixes
🧪 Testing
Release Notes
Breaking Changes
Extension kits replace Bundles
The Bundle surface is gone. Extensions are now the single packaging unit, and installing one is inert: it publishes no tools and no resources until you explicitly enable it. Before enabling, you can preview exactly what an extension would publish and inspect what it is publishing right now, and any extension that declares network access must have its network requirement digest confirmed by a person. (#291)
compozy extension preview <name>shows what enabling would publish without changing state;compozy extension inventory <name>shows the live published inventory. Agents get the same reads throughcompozy__extensions_previewandcompozy__extensions_inventory.compozy extension enable|disable|update|installaccept--confirm-network-requirement <digest>, so a network-declaring extension cannot start publishing without an explicit confirmation recorded on the install.compozy extension secrets set|bind|list|unsetmanages write-only environment bindings that are scoped per workspace and stored as secret references, never as values.extension,mcp, andskill.Migration notes: the whole
compozy bundlecommand group is removed (catalog,preview,activate,list,get,deactivate,network-settings), along with thecompozy__bundles_*native tools, thecompozy__bundlestoolset, thebundlemarketplace kind, and the Bundle API surfaces. There is no alias — rebuild bundle-shaped setups as extensions and enable them explicitly.Runtime hardening and secret-safe provider login
A broad modernization pass across the Go runtime tightened lifecycle and cleanup ownership, ID allocation, task settlement, filesystem confinement, and streaming framing. Most of it is invisible, but it lands several deliberate cuts that change what operators, scripts, and agents see. (#293)
providers.<id>.auth_login_commandis now write-only. You can still set it throughconfig.toml,compozy config set, orcompozy__config_set, but no read surface returns it.compozy config show|list|get|diff, provider status, doctor, Settings, HTTP, and UDS return a safelogindescriptor instead: whether it is configured, its source, the executable basename, whether that executable is present, and a recommended action.<workspace>/knowledge/are injected as a bounded workspace knowledge snapshot before each accepted turn, including task, task-creator, and Heartbeat wakes. It is prompt context for the turn, not durable memory.extension_git_version_unsupportedwhen it is older. Git sources must be HTTPS and resolve to public addresses.Migration notes:
compozy provider auth login --print-commandis removed. The config keymemory.recall.signals.metrics_enabledis removed with no alias. The task-notification native tools takeworkspace_idinstead ofworkspace, and the old input is not an alias. Notification cursor identity anddelivery_idare now opaque values that must be echoed back byte for byte.implement-tasks replaces the software-delivery Loop
The bundled dev-cycle Loop now does one job clearly: implement authored task files in dependency order.
software-deliveryis gone andimplement-taskstakes its place, with a five-node graph —slug_input → load_tasks → implement → execute_task → collect— and only three inputs. The old second control layer for review, command verification, and human approval is removed from the bundled Loop; task-level validation, self-review, tracking updates, and optional per-task commits stay inside the implementation agent's own prompt. (#325)slug,implementer, andauto_commit. Thereview,verify, andapprovenodes and their edges are deleted, along with the verification contract, stale hash fields, and target-branch handling.review-and-fixLoop is unchanged, and custom Loops can still declare their own command gates —verify_commandremains part of the generic Loop DSL.implement-tasks.Migration notes: this is a hard cut with no alias. Any config, CLI or API call, automation binding, or documentation link that says
software-deliverymust sayimplement-tasks, and thetarget_branchandverify_commandinputs must be dropped from[loops.inputs.*].The OS Release
CompozyOS v0.3 is a new operating system boundary for agent work. Sessions, tasks, loops, memory,
permissions, automation, the OS shell, and Compozy Network now share one daemon-owned state model.
People can start and inspect that work from the web, CLI, HTTP/SSE, or UDS. Agents can operate the
same runtime through structured tools and extension contracts.
This is a breaking beta. The command, package, environment, storage, API, and tool namespaces move
to CompozyOS, and several v0.2 surfaces have deliberate replacements or removals. Follow the
v0.3 migration guide before replacing an existing install.
The maintained v0.2 line and its collateral remain on
legacy/v0.2.Install the beta through the verified hosted installer,
@compozy/cli@beta, or the explicitgithub.com/compozy/[email protected]Go version. The beta channel may change before v0.3.0stable; production rollouts should pin the version and review each prerelease.
The repository was already MIT licensed. v0.3 corrects stale BSL-1.1 text in distribution metadata;
it does not relicense the code.
Features
Bundled Tailscale connectivity extension
Gateway reachability ships with a first-party provider. The
tailscaleextension runs a Tailscalenode inside the CompozyOS process through
tsnet, against the operator's own account — nothing elseto install, and CompozyOS operates no relay, server, or account on anyone's behalf. The private tier
serves
https://compozy-gateway.<tailnet>.ts.net:8443on the tailnet; the public tier serves thesame hostname over Tailscale Funnel on 443. (#331)
compozy extension secrets set tailscale --env TS_AUTHKEY(hiddeninput); the value never appears in output, status, or diagnostics.
gateway.privateandgateway.public, so enabling asks for a one-time digest confirmation — and asks again only whenthat declaration changes.
public endpoints through authenticated DNS-over-TLS (
gateway.verify.public_dns_resolver), andkeeps unverified listeners staged with bounded retries instead of tearing them down.
connectivity.providercontract from the Go andTypeScript SDKs, gated by install-source trust and control-digest re-confirmation on every enable
and boot.
Complete Loop node lifecycle
Loops now have a full declarative failure contract at the node level and precise repair controls at the operator level. Authors classify failures, declare retries with backoff, route errors, absorb them with
allow_fail, set attempt timeouts and deadlines, emiton_*effects, and add durable wait nodes. Operators pause, resume, cancel, kill, or requeue individual nodes and list what is waiting, quarantined, retrying, or asking for attention — all from the CLI, HTTP, UDS, native tools, and MCP, without opening the web UI. (#305)compozy loop canceldrains a run safely andcompozy loop killcloses it immediately;compozy loop node pause|resume|cancel|kill|requeuerepairs a single node, andcompozy loop nodes --state waiting|quarantined|attention|retryinginventories a run.compozy__loop_cancel,compozy__loop_kill,compozy__loop_node_pause,compozy__loop_node_resume,compozy__loop_node_cancel,compozy__loop_node_kill,compozy__loop_node_requeue, andcompozy__loop_nodes;compozy__loop_statusnow reports node lifecycle state.loops.defaults.delivery.*,loops.defaults.watch.*, andloops.breaker.*, and new blocking lint rules reject invalid routes, impossible timing, malformed effects and waits, and watch sources without a stable identity.Migration notes:
compozy loop stopis deleted — the CLI verb, the HTTP route, and thecompozy__loop_stopnative tool. Choosecancelorkillexplicitly. Extension watch sources must now declareevent_key; a source without a stable event identity is rejected before a run starts.Cursor models come from your account
Cursor used to look curated in CompozyOS but was not truthful to the account that was signed in: a small hand-written list stood in for the real catalog and, worse, acted as an allowlist that rejected valid model ids before Cursor ever saw them. CompozyOS now reads the account catalog from
cursor-agent modelsbefore a session exists, and exact provider model ids are forwarded unchanged. (#320)composer-2.5.id - display namerows are parsed. Headings, tips, duplicates, and empty output can never become invented models.cursor/composer-2.5, and an unknown provider still fails with a structuredunknown_providererror.providers.<id>.models.discoveryapplies live — no daemon restart. A provider outage records the failure and keeps the rows you already have; disabling discovery clears them and recordsdisabled.Use "<id>", Enter and click both commit, and closing returns to normal catalog search.HOMEitsnative_clilogin contract expects.Migration notes: the curated Cursor allowlist and its session preflight are deleted with no compatibility bridge. If a provider rejects an id, that provider's error is now the authority.
Grouped skill directories
CompozyOS now discovers
SKILL.mddefinitions at any depth below each skill root, so teams can organize capabilities under folders such asmarketing/content/without changing frontmatter identity or normal precedence.compozy skill create <name> --group <relative/path>now scaffolds grouped workspace skills safely.Feedback semantics for durable Loops
A rejected Loop generation no longer restarts blind. The rejection is carried into the next attempt as context, only the producers responsible for it are re-run, and an opt-in ratchet keeps the best-scoring generation instead of losing it to a later regression. Every generation now records its origin, its parent, the gate verdict, the score, and the blocking issues inside claim-fenced transactions, so the CLI, HTTP, UDS, native tools, SSE, and the web UI all read the same durable run truth. (#290)
previous.*(includingprevious.generationandprevious.route_causes) andbest.*to steer the next attempt from what actually failed.maximizeorminimize— plus amin_deltaimprovement threshold, so a regression is rejected deterministically. Invalid thresholds fail authoring withmetric_min_delta_invalid.compozy__loop_statusandcompozy__loop_runsproject score, best generation, gate verdict, and generation origin and parentage; run detail, catalog, and recent-runs views render the same fields.compozy extension listandcompozy extension statusaccept--workspace, so agents can inspect workspace dev overlays without dropping to raw HTTP.Migration notes: this is a greenfield hard cut that discards existing Loop run history. The migration clears Loop runs, run events, gate decisions, generation outputs, goal turns and checkpoints, session bindings, and output blobs, along with the task and automation runs that referenced them. Export anything you need before upgrading.
Remote gateway: reach your daemon from anywhere
A fresh install is still reachable only from the machine it runs on — and now that is a choice
instead of a limitation. The remote gateway adds three independent, off-by-default switches: a
private overlay that serves the full product to devices you pair over your own Tailscale network, a
public delivery ingress that accepts only signed webhook and bridge callbacks, and consent-gated
public operator access for devices that cannot join the overlay. (#331)
connectivity provider publishes a verified route to them: an address is advertised only after the
daemon fetches a one-time challenge through it and gets its own nonce back.
written to private
0600files, credentials are stored only as hashes, andcompozy device revokecancels live streams before it returns.compozy gateway status|audit,compozy pair,compozy device, andcompozy connect(HTTPSprofiles plus zero-exposure SSH) operate everything, with the same state in Settings → Gateway
and the
compozy__gatewaynative tool.protection and per-source rate limits. There is no store-and-forward while the daemon is offline —
senders own retries.
Setup guides live in the new Gateway docs section: https://compozy.com/docs/gateway.
Reversible session archiving and list actions
A stopped session can now be archived so it leaves the default catalog without deleting anything. History, events, ledger, and the saved runtime choice stay readable, and unarchiving puts the session back exactly as it was — still stopped, so a normal prompt restarts it. Both session lists gained a row menu with state-aware Stop, Archive, Unarchive, and Delete, a delete confirmation, and a separate section for archived sessions. (#309)
compozy session archive <id>andcompozy session unarchive <id>, pluscompozy session list --archivedfor archived only and--include-archivedfor both. Agents getcompozy__session_archiveandcompozy__session_unarchive, and extensions getsessions/archiveandsessions/unarchiveundersession.write.archive=exclude|only|includeand defaults toexclude, with exact filtered totals and cursor fingerprints. Archived sessions are excluded from normal metrics.Migration notes: existing sessions are unarchived, so nothing changes until you archive something.
Rewind a session to an earlier checkpoint
You can now rewind an idle session back to one of your earlier messages instead of starting over. The selected message and everything after it leave the active transcript, the message text comes back as a composer draft, and the session continues under the same session ID with a fresh agent context rebuilt only from the part you kept. Rewind touches the conversation only — it does not undo file edits, tool effects, network activity, saved memory, or anything the provider already did outside CompozyOS — and the discarded events stay archived for audit. (#310)
compozy session rewind <session-id>picks the cut point with--message-idand reads the current transcript fences for you; scripts retrying a known request pass--expected-generation,--expected-epoch, and--expected-max-sequencetogether with the original--idempotency-key. Agents getcompozy__session_rewind.draft_textthat goes back into the composer.archiveselector:compozy session eventsandcompozy session historyaccept--archive active|archived|all, and the same selector exists on the HTTP and UDS reads.Migration notes:
session eventsandsession historynow default toarchive=active. They previously returned archived rows alongside active ones — pass--archive allto keep the old behavior.Session-aware slash commands
Slash commands in the composer are now backed by a single daemon-owned catalog scoped to the exact session, and they work anywhere in a prompt rather than only at the start. Built-in and ACP control commands stay standalone, while a skill command can be dropped inline, repeated, and mixed with the text you already typed; the matched skill's full instructions are injected into that same turn. The same catalog is readable from the CLI, HTTP, UDS, and a native tool, so agents can discover what a session can actually run. (#311)
compozy session commands <session-id>lists the catalog, and agents read it withcompozy__command_listin thecompozy__catalogtoolset.compozy__skill_viewaccepts a source-qualifiedcommand_idfrom that list./skillresolves the effective winner across bundled, global, additional, workspace, and agent-local sources; extension skills use/extension-id:skilland marketplace skills use/registry-id:skill.session_commands_changedstream frame refreshes only the affected session.compozy__session_promptkeep slash-shaped text literal, and hooks can remove an admitted invocation but never add one.Unified docs and Marketplace
compozy.comnow serves a single/docsexperience with reworked navigation, breadcrumbs, responsive layouts, generated CLI reference pages, and API references that include Go examples. A new/marketplacesection lists skills, extensions, MCP entries, bridge providers, and bundled capabilities with search, install commands, and detail pages. (#277)Migration notes: two CLI verbs were renamed and their old spellings removed —
compozy mcp authorize <server>is nowcompozy mcp auth login <server>, andcompozy memory extractor list-pendingis nowcompozy memory extractor list-failures. Thecompozy network work statusalias was removed in favor ofcompozy network work lookup, andcompozy network send --bodyaccepts a kind-specific JSON value rather than requiring an object.Window tabs in the OS shell
The OS shell now groups windows into first-class tab frames instead of assuming one window per app. Tabs carry ordered members, an active member, per-tab navigation stacks, pinning, scoped close and reopen, and bounded history. The same topology is exposed through Web, CLI, HTTP, UDS, native tools, streams, hooks, resources, layout profiles, and the bundled CompozyOS skill, so agents operate windows with the same semantics people see. (#287)
compozy config set window_manager.*applies through the canonical Settings section endpoint, so a live apply projects only that section and unrelated restart-required drift stays pending and truthful incompozy status.Migration notes: persisted window layouts move to v3 as a hard cut — v2 layout compatibility paths and singleton-window assumptions were removed from the runtime, generated contracts, and layout profiles.
Fixes
A crashed agent no longer looks like a finished one
When an agent process disconnected mid-answer, the stream simply ended — and everything downstream read that silence as success. A CLI consumer reached end of file and exited zero,
compozy__session_promptreturned a result, and the only evidence left behind was stderr with no exit code. Streams are now fail-closed: success requires an explicit completion event, and disconnect, terminal error, and process exit stay three distinct outcomes. (#315, #319)compozy__session_promptclassifies a subprocess exit astool_backend_failedwithbackend_deadinstead of reporting success; the partial events remain readable in the session transcript.Migration notes: crash bundles move to
compozy.session_crash_bundle.v2with structuredexit_codeandsignal, with no v1 branch. Any consumer that treated a closed stream as success will now correctly see a failure unless a completion event was sent.Dry-run proves the run you are about to submit
A Loop could validate, dry-run cleanly, and then fail at submission with
executed definition template manifest changed. The compiler folded default values into the definition it stored, but compiled templates from the definition before those defaults — so a persisted run carried more template keys than its own snapshot, and hydration rightly refused it. Compilation now uses one canonical definition throughout, and dry-run exercises the exact snapshot boundary a real submission uses. (#313, #317)modevalues no longer appear out of nowhere during hydration.compozy loop run --dry-runandcompozy__loop_runwithdry: truerun that same check, so a preview can no longer approve a definition that submission would reject.Migration notes: no storage, API, CLI, or configuration contract changed. Integrity checks were not relaxed — inconsistent definitions are still rejected, just earlier and with a readable reason.
Restart a stopped session and keep its runtime
A stopped session used to be a dead end: the UI went read-only and the only way forward was creating a new one. Sending a normal prompt to a stopped session now restarts its agent process, reloads the retained provider history, and continues under the same session ID and transcript. The provider, model, reasoning effort, and speed you picked are stored on the session itself, so they survive a stop and a daemon restart instead of silently reverting to the default. (#307)
startingstate, and a normal prompt is the only operation that moves a stopped session back toward execution.session resumestays attach-only, and queue, steer, interrupt, and attach do not restart a session.compozy session runtime set <id>takes--provider,--model,--reasoning-effort, and--speed, andcompozy session runtime clear <id>drops the choice. Both fence on--expected-revisionand report a conflict on a stale one. Agents getcompozy__session_runtime_setandcompozy__session_runtime_clear; extensions getsessions/runtime/setandsessions/runtime/clearundersession.write.runtime.selected,runtime.effective, andruntime.selection_revision. A prompt resolves its runtime from an explicit snapshot first, then the stored selection, then the current effective values, and an already-queued prompt keeps the snapshot it was accepted with.Migration notes: the
Use as Goalaction on settled assistant messages is removed./goalis the single entry point for Goals.Durable inputs for busy sessions
Queue, Steer, and Interrupt are now daemon-owned durable operations instead of client-side intent that could quietly disappear. An input is persisted before it is acknowledged, survives a refresh and a daemon restart, dispatches exactly once in FIFO order, and can be listed, edited, canceled, or promoted to steering by its entry ID from the CLI, HTTP, UDS, native tools, or the extension host. Disruptive changes are fenced against the turn you meant to change, so a stale client cannot interrupt a newer turn. (#304)
compozy session promptaccepts--queue,--interrupt, and--steer;compozy session input list|edit|steer|cancelmanages pending input by its persisted ID./api/workspaces/{workspace_id}/sessions/{session_id}/prompt/queue, including per-entry replace, steer, and cancel.compozy__session_inputs_list,compozy__session_input_replace,compozy__session_input_cancel, andcompozy__session_input_promote.Migration notes: the dedicated interrupt endpoint is removed — interrupt is now a prompt mode plus a fenced queue operation. The legacy ACP steer handler and the runtime steer source are removed, and the web client no longer mirrors the queue in local state.
Durable session messaging
Session prompts no longer duplicate, reorder, or disappear when an optimistic Web message settles, when a client reconnects, or after a cold reload. Every externally authored prompt now carries two durable identities —
message_idfor the rendered message andidempotency_keyfor the command execution — and both survive Web rendering, HTTP/UDS/CLI/native-tool ingress, queueing or steering, ACP dispatch, transcript projection, replay, and reload. (#288)replayed: truewithout re-running hooks or the provider.user_message_chunkechoes no longer appear as a second authored message, while locally authored steer events are preserved.compozy__session_promptexpose the retry identities.Migration notes: external prompt and steer inputs now require both
message_idandidempotency_key, and Goal prompt responses use the standard wrapped prompt-result envelope.Live changelog and composer fixes
The changelog on
compozy.comnow reads published releases directly from GitHub at request time instead of depending on a bot pushing a generated page back intomainafter every release. Each release gets its own page with rendered Markdown, category sections, evidence, compare links, and downloadable assets, plus an RSS feed at/changelog/feed.xml, and releases now appear in site search, the sitemap, and the text feeds that agents read. (#292)Migration notes: the release workflow no longer publishes a site changelog receipt commit, and the generator scripts behind it are removed.
Loop runs you can debug from the run page
A Loop run that failed used to be a dead end: every attempt died with "The agent output did not satisfy the action output schema", the node was quarantined, "Open quarantine entry" opened an empty sheet, "Open session" returned 404, the cell task sat in "Queued · attempt 1 of 10" forever, and Usage confidently reported
0 / ~$0.00. The agent had actually answered correctly every time — the daemon joined streamed text fragments with a newline, which landed inside a JSON string and corrupted a valid reply. That joiner is fixed, and so is every surface that made the failure impossible to read. (#324)output_schemain its prompt instead of prose that never said "JSON", extraction validates every candidate object newest-first (a quotedpackage.jsonno longer shadows the real answer), and the failure cause carries the underlying detail instead of one generic sentence.node_attention_flaggedis finally emitted when a run parks.readyafter a failed run: quarantine parks them as needs-attention and requeueing clears the park. The misleadingof 10attempt ceiling is gone, since the Loop owns the retry budget.generations[].outputs[].session_id— so "Open session" works from the hero and from every node row that has one.g2.execute_taskinstead ofloop.lo.Migration notes: adds the
attention_producer_node_idcolumn toloop_node_controlsthrough migration00055; run-detail payloads gainnode_controls[].attention_producer_node_idandgenerations[].outputs[].session_id.Skills load through the native seam inside managed sessions
Managed sessions load installed skills through the native
compozy__skill_viewtool only — including skills that are not listed in the prompt catalog. The earlier attempt to give managed agents a private CLI socket is removed rather than kept as a fallback: provider code runs as the daemon user, so environment values, headers, process ancestry, and file modes cannot tell those requests apart from an operator's. (#314, #323)compozy skillverb detects managed-session markers before doing any client, socket, registry, or filesystem work and points the caller atcompozy__skill_list,compozy__skill_search, andcompozy__skill_view. This is documented as a support guard, not an authorization boundary — same-user code can still clear those markers.Migration notes: the managed CLI transport is deleted — the socket,
COMPOZY_AGENT_TRANSPORT_SOCKET, the managed identity headers, and the managed skill API scope. Operator CLI behavior from a normal shell is unchanged.One owner per Loop run, and cancellation that sticks
Loop action runs now have exactly one daemon-owned worker, cancellation survives a restart, and a session that needs CompozyOS tools fails before the provider starts instead of running without them. Fresh CompozyOS homes also start with the bundled
dev-cycleextension already enabled, while a home that has been booted before keeps whatever you chose. (#321, #322, #326)loop-actionexecutor already owns.ErrHostedMCPUnavailablebefore the provider process is launched.Highlights
Gateway docs: zero to GitHub webhooks
compozy.com gains a dedicated Gateway section written for first-time operators: a ten-minute
quickstart from
gateway.enabledto a paired phone, a step-by-step "Receive GitHub webhooks"tutorial verified end to end — including why a native repository webhook cannot sign CompozyOS's
generic trigger contract and the GitHub Actions workflow that can — a Tailscale extension page
covering tailnet prerequisites through clean removal, a remote CLI/SSH/public-access guide, a
devices-audit-teardown runbook, and a plain-language security page. (#331)
Migration notes:
/docs/operations/remote-gateway,/docs/operations/gateway-threat-model, and/docs/configuration/gatewaymoved into/docs/gateway/*as a hard cut — update saved links.MCP catalog, session runtime, and extension management
CompozyOS beta expands how people and agents configure the runtime across MCP, sessions, extensions, workspace boundaries, and the session UI.
Migration notes: update MCP catalog manifests to version 2 and replace public SSE transport; create a session before submitting its first prompt and runtime selection; update extension manifests to version 2.
Summary by CodeRabbit