A shell is named, not implied by the connection - #188
Merged
Conversation
Adds SESSION_KIND_SHELL_ATTACH with the two parameters that distinguish it -- shell_id naming the shell and shell_cwd applied only when one has to be created -- and the layout methods that hold what a client reopens to. SHELL_ATTACH is a separate kind rather than a flag on SHELL so the command stays a function of the kind and its parameters, and a client cannot get one behavior while the ticket describes the other. SHELL keeps its meaning and its command. SandboxLayout is a versioned document rather than a row per tab. Reordering, closing and opening are one write, and the fields this is expected to grow -- split geometry, sizes, focus -- arrive without a method each. The version is what makes two devices safe: the loser refetches rather than silently overwriting. Identity is never a request field on the external methods. It comes from authenticated context, so there is no call that reads or writes another person's tabs. SetSandboxLayoutDirectories is internal and version-free. The orchestrator is its sole writer, touching one field immediately before a stop, and failing on a concurrent reorder would lose the snapshot for no benefit. Additive throughout; buf breaking is clean against main.
|
The latest Buf updates on your PR. Results from workflow buf-pr / buf (pull_request).
|
The proto comments explained service behavior -- attach-or-create semantics, why a document carries a version, which component is the sole writer of a field, what a client should do on conflict. None of that is the interface's to say, and stating it here duplicates it into a place that cannot be kept correct. What remains is the wire contract: what a field is, whether it is required, its pattern, and what an absent value means. The reasoning lives in the change doc in agynio/architecture.
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.
Adds the interface for persistent sandbox shells.
Design and rationale:
changes/2026-08-11-persistent-sandbox-shells.mdinagynio/architecture.Terminal sessions
SESSION_KIND_SHELL_ATTACH, with two parameters:shell_id^[A-Za-z0-9_-]{1,64}$shell_cwdAdded on
IssueTicketRequestandCreateTerminalSessionRequest.Sandbox layouts
GetSandboxLayout/SetSandboxLayoutonAgentsServiceandAgentsGateway, plus internalSetSandboxLayoutDirectories.SandboxLayoutis a versioned document holding an orderedSandboxTablist.identity_idis resolved from authenticated context on the external methods and is not a request field.Compatibility
Additive.
buf lint,buf buildandbuf breakingagainstmainare clean.Downstream
terminal-proxyandagentsgenerate frombuf.build/agynio/apiwith.gen/gitignored. Their CI stays red until this merges and the module is published.