Repository navigation
feat: move idle channels between a host and a hosting service - #194
Merged
Merged
Conversation
This was referenced Oct 7, 2026
This was referenced Oct 15, 2026
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.
The owner can now move an idle channel between its host and a team-deployed hosting service, and back again, with
ace move <channel> --hosted <url> | --localor the channel's Move to: context menu. The channel keeps its ID, lanes, and workspace. All pi state comes back to the host, including work done while the channel was in the cloud. This is the first slice of #181 and does not close it. Refs #181, #13.@ace/channel/transfer: a runtime-neutral snapshot of pi's SQLite store.services/channel: an authenticatedPOST /channels/:id/transferendpoint.import(stored inactive),activate(only for the imported digest),freeze(drains admitted requests, refuses if busy),export(only while frozen), andthaw.apps/host:movingfence on the channel record stops workers from starting and clients from connecting while a move runs.move-targetsandmoveare limited to the owner on the local gateway. Destinations are deduplicated from the hosted URLs in this host's channel records plusservices.json, which keeps the URL after a channel returns.Out of scope for this slice: moving a channel while it is running, automatic backups, general recovery or restore of an interrupted move, streaming large channels, and a service-setup UI.
Real deployed roundtrip. I ran one roundtrip on the dedicated
ace-channel-pilotWorker, using an isolated pilot host and a fresh idle fixture channel with modelanthropic/claude-sonnet-5-5:ace move --hostedmoved the channel in about 1s. The workspace reconnected to the cloud copy, and its transcript events, channel info, and usage matched the local copy exactly.The existing deployed
ace-channelandace-directoryservices were not touched.bun typesandbun run cipass.Built in Ace
cloud-pilot-opsin lanecloud-move, using Ace's shell and file tools.cloud-move-service, and the app and UI menu by the Ace channelcloud-move-ui, in the same lane.