Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t3tools/desktop",
"version": "0.10.0",
"version": "0.11.0",
"private": true,
"main": "dist-electron/main.js",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion apps/server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "t3",
"version": "0.10.0",
"version": "0.11.0",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
1 change: 1 addition & 0 deletions apps/server/src/keybindings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export const DEFAULT_KEYBINDINGS: ReadonlyArray<KeybindingRule> = [
{ key: "mod+d", command: "diff.toggle" },
// Cmd-only instead of mod so Ctrl+L remains available to shells on non-macOS.
{ key: "cmd+l", command: "composer.focus.toggle" },
{ key: "mod+j", command: "composer.collapse.toggle" },
{ key: "mod+shift+m", command: "modelPicker.toggle" },
{ key: "mod+shift+e", command: "traitsPicker.toggle" },
{ key: "mod+shift+u", command: "settings.usage" },
Expand Down
3 changes: 2 additions & 1 deletion apps/server/src/orchestration/Layers/WorkerInboxReactor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
type OrchestrationTaskShell,
} from "@t3tools/contracts";
import { makeDrainableWorker } from "@t3tools/shared/DrainableWorker";
import { workerChannelRequestMessageId } from "@t3tools/shared/workerChannelMessages";
import { Cause, Effect, Layer, Stream } from "effect";

import { OrchestrationEngineService } from "../Services/OrchestrationEngine.ts";
Expand All @@ -29,7 +30,7 @@ import {
// partial failure replays the same commands instead of spawning a second Thread.
const spawnCommandIds = (taskId: TaskId) => ({
threadId: ThreadId.makeUnsafe(`worker-inbox:${taskId}`),
messageId: MessageId.makeUnsafe(`worker-inbox:${taskId}:request`),
messageId: MessageId.makeUnsafe(workerChannelRequestMessageId(taskId)),
threadCreate: CommandId.makeUnsafe(`worker-inbox:${taskId}:thread-create`),
taskInProgress: CommandId.makeUnsafe(`worker-inbox:${taskId}:in-progress`),
turnStart: CommandId.makeUnsafe(`worker-inbox:${taskId}:turn-start`),
Expand Down
7 changes: 6 additions & 1 deletion apps/server/src/orchestration/workerToolsMcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstab
import type { ServerConfigShape } from "../config.ts";
import { OrchestrationEngineService } from "./Services/OrchestrationEngine.ts";
import { ProjectionSnapshotQuery } from "./Services/ProjectionSnapshotQuery.ts";
import { workerChannelReplyMessageId } from "@t3tools/shared/workerChannelMessages";
import {
buildDelegationReplyPrompt,
peerThreadFor,
Expand Down Expand Up @@ -416,7 +417,11 @@ export function runWorkerTool(input: {
commandId: commandId(),
threadId: peer.peerThreadId,
message: {
messageId: MessageId.makeUnsafe(crypto.randomUUID()),
// Minted through the shared scheme so the transcript folds this into the
// channel card instead of rendering it as a typed user message.
messageId: MessageId.makeUnsafe(
workerChannelReplyMessageId(task.id, crypto.randomUUID()),
),
role: "user",
text: buildDelegationReplyPrompt({
task,
Expand Down
2 changes: 1 addition & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@t3tools/web",
"version": "0.10.0",
"version": "0.11.0",
"private": true,
"type": "module",
"scripts": {
Expand Down
14 changes: 7 additions & 7 deletions apps/web/src/components/BranchToolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,12 @@ export default function BranchToolbar({
!envLocked && !activeWorktreePath && effectiveEnvMode === "local",
);
const canSwitchToLocal = Boolean(!envLocked && effectiveEnvMode === "worktree");
const showEnvPicker = effectiveEnvMode === "local" || canSwitchToLocal;
// Once a Thread has its first message the environment is fixed, so naming it
// every time is noise — the branch alone identifies where the work is going.
// The panel variant still shows it, because that surface is the place you go to
// read the environment rather than to compose.
const showEnvPicker =
(isPanel || !envLocked) && (effectiveEnvMode === "local" || canSwitchToLocal);

const usageSummary = useProviderUsageSummary({
provider: activeProvider,
Expand Down Expand Up @@ -398,12 +403,7 @@ export default function BranchToolbar({
label={environmentPresentation.shortLabel}
/>
</div>
) : (
<span className="inline-flex items-center gap-2 px-1.5 text-[length:var(--app-font-size-ui-sm,13px)] font-normal text-[var(--color-text-foreground-secondary)]">
<WorktreeGlyph className="size-3.5" />
{environmentPresentation.shortLabel}
</span>
)}
) : null}

{showBranchSelector ? (
<BranchToolbarBranchSelector
Expand Down
6 changes: 4 additions & 2 deletions apps/web/src/components/BranchToolbarBranchSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,7 @@ export function BranchToolbarBranchSelector({
className={
isPanel
? ENVIRONMENT_ROW_CLASS_NAME
: `${COMPOSER_TOOLBAR_PICKER_TRIGGER_CLASS_NAME} disabled:cursor-not-allowed disabled:opacity-50`
: `${COMPOSER_TOOLBAR_PICKER_TRIGGER_CLASS_NAME} min-w-0 disabled:cursor-not-allowed disabled:opacity-50`
}
disabled={(branchesQuery.isLoading && branches.length === 0) || isBranchActionPending}
>
Expand All @@ -837,7 +837,9 @@ export function BranchToolbarBranchSelector({
) : (
<>
<CentralIcon name="branch" className="size-3.5 shrink-0" />
<span className="max-w-[240px] truncate">{triggerLabel}</span>
{/* Shrinkable, not a fixed max-width: at 240px a narrower row clipped
the label with a hard edge instead of letting it ellipsise. */}
<span className="min-w-0 max-w-[240px] flex-1 truncate">{triggerLabel}</span>
<ChevronDownIcon className="size-3.5 text-muted-foreground" />
</>
)}
Expand Down
Loading
Loading