feat(cli): complete the command surface — shell, workspace list, up flags, tunnel up/down (spec 26) - #85
Merged
Conversation
…lags, tunnel up/down (spec 26)
Land the spec-26 code deliverables (README already reconciled):
- shell <service>: real interactive exec via a NEW docker seam
(docker.InteractiveRunner + Compose.Exec) that wires Stdin + a -it TTY,
captures no stderr, and propagates the child exit code. Resolves
project/service (single-default, else required), ValidArgsFunction
completion, bash→sh default, clear non-TTY error.
- workspace list + registry: additive schemaV3 `workspace` pointer table
(keyed by ctx, CASCADE on docker_context) + RecordWorkspace/ListWorkspaces/
RemoveWorkspace CRUD; `up` upserts the row under the flock. `list`
re-derives projects/shared refs from each workspace.yaml at list time,
flags stale/unparseable roots, --prune drops vanished roots, --json.
- up flags: --rebuild (new UpDeps.Rebuild → build --no-cache), --skip-clone
(new UpDeps.SkipClone), --health-timeout (exposes existing HealthTimeout).
- self update --force: new selfupdate.Options.Force re-installs over an
up-to-date binary; the package-manager CanSelfReplace refusal still holds.
- tunnel up/down: standalone commands managing the cloudflared container;
default-DOWN; refuses services carrying non-local secret:// values
(--allow-secrets override); {tunnel,state} JSON.
- reserved post-1.0 stubs (dashboard/ide/telemetry, db + template v2
children); shell graduated out of stubs.go; logs re-tagged v2 (spec 16).
Tests: registry CRUD + context isolation + CASCADE, interactive Exec arg
construction, up rebuild threading, self --force semantics, tunnel secret
refusal + container up/down, workspace list projection/prune/degrade.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Spec 26 (code) — finishes the CLI surface. Built in a worktree, verified locally (
make ci+ determinism green, smoke-tested).shell <service>— real interactive exec via a newdocker.InteractiveRunner(wiresos.Stdin+ a real-itTTY, no stderr capture, propagates the child exit code verbatim); service resolution + completion; errors on non-TTY instead of hanging. Graduated out ofstubs.go.workspace list+ a machine-wide registry: additive schemaV3workspacepointer table (PK includes Docker context), CRUD under the flock, upserted onup;listre-derives from each root'sworkspace.yaml(flags stale/unparseable roots),--prune-only removal,--json.up --rebuild(build --no-cache),--skip-clone, and the exposed--health-timeout.self update --force(re-installs when up-to-date; keeps the package-manager refusal).tunnel up/down(default down; refuses non-localsecret://-bearing services,--allow-secretsoverride).db/dashboard/ide/telemetry/template push);logsre-tagged v2 (spec 16).make ci+ determinism green; CGO-free; no new deps. Note:--skip-cloneis wired ahead of the (deliberately deferred) saga clone phase;tunnel up's cloudflared credential-UUID/caddy-upstream are spec-05 placeholders (the secret-guard + lifecycle + JSON contract are complete + tested).🤖 Generated with Claude Code