feat(core): add remote workspace lifecycle seam#37437
Draft
kitlangton wants to merge 4 commits into
Draft
Conversation
kitlangton
marked this pull request as draft
July 18, 2026 02:25
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.
What
Introduce the provider-neutral lifecycle and environment seam for centrally executed V2 Sessions to address hosted Workspaces without touching the server host checkout.
Workspace.Infometadata.Project.resolve.specs/v2/remote-workspace-execution.md.How
packages/core/src/workspace.tsowns Workspace creation, connection, suspension, and removal; compensates failed initial persistence; persists replacement bindings before reconciliation; and keeps deletion retryable when the provider fails.packages/core/src/workspace.tsreads durable metadata independently from provider connection, shares concurrent connections throughRcMap, and immediately evicts failed acquisitions.packages/core/src/workspace/sandbox.tsrequires a versionedkind: "sandbox"placement envelope before V2 can interpret legacy Workspace JSON. Providers own binding decoding and lifecycle operations.packages/core/src/workspace/environment.tsbinds separate local and hosted Location services. Hosted file operations borrow one connection, resolve provider-canonical paths, and reject direct or symlink escapes outside the Workspace root.packages/core/src/location.tsselects local Project resolution or hosted Workspace metadata at node-binding time and lexically rejects working directories outside the durable Workspace root.Scope
This PR establishes placement, lifecycle, and connection seams only.
Testing
bun run test test/workspace.test.ts test/location.test.ts test/location-layer.test.ts: 20 passed.bun run test --rerun-each 10 test/workspace.test.ts: 10 consecutive lifecycle runs passed.-1; current Python and JavaScript process handles expose no direct per-process termination.bun typecheckinpackages/core,packages/schema,packages/protocol,packages/server,packages/sdk-next, andpackages/opencode.bun turbo typecheck --concurrency=3, 32 configured tasks passed.bun run migration --checkinpackages/core.git diff --checkpassed.provider-opencodefive-second timeouts and 1provider-openaipolling timeout; both reproduce independently and do not touch Workspace or Location code.Flow