feat(studio): the workbench gets a terminal of your own, as the Terminal board draws it

A fourth kind of tab opens a real shell (ConPTY on Windows, a pty elsewhere) in
the project folder, outside the model's permissions and sandbox and with the
host's provider keys left out of its environment. The kernel keeps each shell's
output, so a tab left or a window reloaded comes back as it was; a tab is named
for the command submitted while the shell is busy and carries a blue dot, and
closing a busy one asks first.

Also: the composer's note stack no longer clips to a few pixels when it holds
two notes, which left the second one overlapping the input.
This commit is contained in:
yhh committed 2026-11-06 04:44:41 -08:00
1 parent 3cf430d823
commit 83bdeb81f0
60 files changed
+2755 -55

No files matched your search

+1
View File
@@ -58,6 +58,7 @@ var leaves = []string{
"internal/safety/egress",
"internal/safety/redirectguard",
"internal/platform/releaseasset",
"internal/platform/terminal",
"internal/platform/wsl",
"internal/base/retrieval",
"internal/base/rulelist",
+4
View File
@@ -30,6 +30,7 @@ const (
tsProviderFile = "desktop/frontend-next/src/port/provider.ts"
tsFeedbackFile = "desktop/frontend-next/src/port/feedback.ts"
tsWorkspaceFile = "desktop/frontend-next/src/port/workspace.ts"
tsTerminalFile = "desktop/frontend-next/src/port/terminal.ts"
tsLookFile = "desktop/frontend-next/src/port/look.ts"
tsHubFile = "desktop/frontend-next/src/port/hub.ts"
tsMuxFile = "desktop/frontend-next/src/port/mux.ts"
@@ -312,6 +313,9 @@ var mirroredWireTypesHead = []wireMirror{
{"internal/platform/gitpush/plan.go", "Plan", tsWorkspaceFile, "PushPlan"},
{"internal/platform/gitpush/push.go", "Result", tsWorkspaceFile, "PushResult"},
{"internal/frontend/serve/changes.go", "gitRepoRow", tsWorkspaceFile, "GitRepoRow"},
{"internal/platform/terminal/terminal.go", "Info", tsTerminalFile, "TerminalInfo"},
{"internal/platform/terminal/shells.go", "Shell", tsTerminalFile, "ShellChoice"},
{"internal/frontend/serve/terminals.go", "terminalFrame", tsTerminalFile, "TerminalFrame"},
{"internal/frontend/serve/changes.go", "gitReposView", tsWorkspaceFile, "GitRepos"},
{"internal/platform/gitstatus/commitdetail.go", "CommitFile", tsWorkspaceFile, "GitCommitFile"},
{"internal/frontend/serve/git_commit_detail.go", "commitFilesView", tsWorkspaceFile, "GitCommitFiles"},