th-adc3d4: th code workspaces, persistent logs, queue/steer, task panel - #758
Merged
Merged
Conversation
🦋 Changeset detectedLatest commit: 0b18971 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
brentrager
force-pushed
the
th-adc3d4-th-code-workspaces-logs
branch
from
October 5, 2026 16:58
a2c4c1b to
14a4343
Compare
brentrager
enabled auto-merge (squash)
October 5, 2026 16:58
brentrager
force-pushed
the
th-adc3d4-th-code-workspaces-logs
branch
from
October 5, 2026 17:20
14a4343 to
d0c3486
Compare
…k panel Make th code behave like Claude Code/Codex in the launch repo: register the launch directory and allow explicitly adding other repos per session via a token-protected /api/session/workspaces route and SMOOTH_WORKSPACES. Inherit the caller's PATH in the shell tool, explain the sandbox posture in /environment and logs, persist sanitized tool/turn failures to JSONL and show log paths in /status, and separate the transcript, composer, queued messages and task checklist in the TUI and web UI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ATH order The shell tool prepended Homebrew and system dirs ahead of the caller's PATH, so a mise-pinned toolchain lost to Homebrew's copy. The caller's PATH now comes first, with fallbacks appended and deduplicated. PATH-string tests are unix-only because they use `:` separators. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Windows the ancestor walk reached the drive root, which canonicalizes to a verbatim path that never matches a non-canonical base, so every path under a nonexistent root was rejected. A root that isn't on disk has nothing a symlink could hide in, so the lexical check is sufficient there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
brentrager
force-pushed
the
th-adc3d4-th-code-workspaces-logs
branch
from
October 5, 2026 18:25
d0c3486 to
0b18971
Compare
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.
Problem
th codedidn't behave like Claude Code/Codex in the user's environment: cross-repo reads hit workspace-boundary errors with no explanation, the shell tool lost the user's PATH (mise/Homebrew toolchains), tool failures weren't persisted anywhere useful, the TUI task checklist overlaid the input, and user vs agent output was hard to tell apart.Solution
th coderegisters its launch directory;/workspace add <path>opens another repo for just that conversation via a token-protectedPOST /api/session/workspaces.SMOOTH_WORKSPACESadds daemon-wide roots. Root containment compares canonical paths (macOS/varvs/private/var)./environmentexplains the actual sandbox posture; daemon tool logs recordsandbox=scope.~/.smooth/logs/smooth-code-tool-errors.jsonl(categories only, no paths/args/results); daemonerror_kinduses stable categories (outside_workspace,permission_denied,blocked_by_hook, …)./statusliststh.log, the daemon log, and the JSONL.Verification
🤖 Generated with Claude Code