Skip to content

Support GitHub Release tarball distribution for t3 CLI#1

Merged
bscholar-tt merged 9 commits into
mainfrom
stuff
May 23, 2026
Merged

Support GitHub Release tarball distribution for t3 CLI#1
bscholar-tt merged 9 commits into
mainfrom
stuff

Conversation

@bscholar-tt

Copy link
Copy Markdown
Owner

No description provided.

bscholar-tt and others added 9 commits May 22, 2026 16:22
- Add `pack` CLI subcommand to create versioned .tgz tarballs
- Update release workflow to build and upload CLI tarballs as release assets
- Add `parseReleaseRepository` to extract owner/repo from URLs or slugs
- Remote t3 runners prefer GitHub Release URLs when fork repository is configured
- Desktop app passes fork repository to SSH tunnel for registry-free installation
So the runtime-derived GitHub Release tarball URLs in
resolveRemoteT3CliPackageSpec resolve to this fork's releases instead of
upstream pingdotgg/t3code.
The previous rename commit (27f1457) updated the legacy user-data dir
name and test fixtures but left the actual stage-label resolver and the
DesktopAppStageLabel contract still emitting "Alpha", so the rendered
app name and DesktopAppIdentity test diverged. Update the contract
literal/schema, the desktop resolver, and the web branding fallback so
non-dev/non-nightly builds advertise themselves as "T3 Code (Bscholar)"
end-to-end.
Pi SDK fires turn_end after each internal LLM call and agent_end once at
the end of the full run. Completing the t3code turn on turn_end fragmented
each Pi response into multiple turns: tool activities disappeared as soon
as a new sub-turn started (the work log filters by latestTurnId), and the
elapsed-time counter reset on every sub-turn boundary.

Making turn_end a no-op and letting agent_end drive completeTurn keeps all
tool activities and text deltas under the single turnId created by sendTurn,
matching how the Claude adapter behaves.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When a Pi thread is continued (e.g. page reload or new server session),
createAgentSession was always creating a blank session with no history.

Now startSession captures the Pi session file path as resumeCursor and
stores it via ProviderSessionDirectory (the same mechanism Claude uses).
On subsequent startSession calls for the same thread, SessionManager.open
is used to load the prior JSONL session file so Pi has full context.
Falls back to a fresh session gracefully if the file is inaccessible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Tool rows showed only the tool name because item.completed had no detail
or data fields — args were captured at tool_execution_start but never
stored or forwarded to item.completed, which is the event the UI renders.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bscholar-tt
bscholar-tt merged commit 357875b into main May 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant