"Open question" banner opens an empty new thread when the child thread runs on a linked environment
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 74/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- typescript
- Domínio
- frontend
Direção de pesquisa
Comece por apps/web/src/components/chat/ThreadActivityBanners.tsx e apps/web/src/components/chat/useThreadLifecycle.tsx; depois, leia a definição de EnvironmentThreadShell em packages/client-runtime/src/state/models.ts. Acompanhe como o ambiente da thread filha é passado ao abri-la, incluindo o banner de trabalho em segundo plano. A tarefa estará concluída quando clicar no banner de uma thread filha de outro ambiente abrir essa thread no próprio ambiente dela; verifique os testes relevantes nas áreas desses arquivos.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
What happened
Feature: Linked environments, a beta behind Settings → Labs.
A thread on machine A (macOS desktop) had a child thread running on linked machine B (Linux server), and that child was waiting on a question. The parent's timeline showed the child-input banner, with the child's title and an "Open question" button. Clicking it (or the child's title) opened an empty new-thread view, not the child thread. Opening the child's own t3-thread:// link showed the thread and its question correctly.
Diagnosis
The banner sends only the child's thread id. The click handler then pairs that id with the parent's environment:
childInputNowItem(apps/web/src/components/chat/ThreadActivityBanners.tsx:52and:60) callsonOpenThread(child.id)/onOpenThread(first.id). Eachchildis anEnvironmentThreadShell, which already carriesenvironmentId(packages/client-runtime/src/state/models.ts:138), but that id is dropped here.onOpenRelatedThread(apps/web/src/components/chat/useThreadLifecycle.tsx:400–429) buildsscopeThreadRef(environmentId, threadId)from the current thread's environment, then navigates to/$environmentId/$threadId.childThreadInputsAtom(packages/client-runtime/src/state/threadShell.ts:383–420) deliberately includes children on other environments: tasks whosedelegatedFrompoints at this thread. For those, the route becomes/<A>/<B's thread id>, a thread A doesn't have.- Because the server sends
shellThreadFamilies: true(apps/server/src/ws.ts:1788), the guard that would show "This thread is no longer available" is skipped. The app navigates anyway and lands on a blank thread/draft view.
Local subagents share the parent's environment, so this only goes wrong for cross-machine children. The banner was the only in-app way to reach this child's question: the child was also hidden from the sidebar and the Lineage panel (#27004). So the user had no working path to answer it.
Steps to reproduce
- Turn on Settings → Labs → Linked environments on machines A and B, and link A → B.
- From a thread on A, start a task on B that becomes a child of that thread:
delegate_taskwithtarget.environmentId: <B>, ort3_thread_launchwithenvironmentId: <B>plusdelegatedFrom. - Make the child ask a question or request an approval. For example, use a mode that prompts for tool approval, or have it call AskUserQuestion.
- In the desktop app, open the parent thread on A. The banner "Subagent needs input · · Open question" appears.
- Click Open question. Expected: B's child thread opens. Actual: an empty new-thread view for environment A opens.
Version
0.1.5-nightly.20261029.3877 (desktop app and both servers). The same code is on main as of 2026-10-29.
Environment
A: macOS (Darwin 27.0.0, arm64), desktop app 0.1.5-nightly.20261029.3877, Node 24.22.1. B: Linux x64 server 0.1.5-nightly.20261029.3877. Provider claudeAgent (claude-opus-5-5).
Evidence
# apps/web/src/components/chat/ThreadActivityBanners.tsx
<InlineButton tone="muted" onClick={() => onOpenThread(child.id)}> # environmentId dropped
<InlineButton onClick={() => onOpenThread(first.id)}>
# apps/web/src/components/chat/useThreadLifecycle.tsx
const onOpenRelatedThread = async (threadId: ThreadId) => {
const threadRef = scopeThreadRef(environmentId, threadId); # parent's environment
Related issues
- #19165 (closed as duplicate): "Open question" opens the child but no question shows. Different symptom: there the right thread opened.
- #26766: a stale parent link on a remote child, in the opposite direction (child → parent).
- #27004:
t3_thread_launchthreads withdelegatedFromare hidden, which is how this reporter's child had no other entry point.
Fix applied or workaround
None applied. Workaround: open the child through its t3-thread:// link (it includes B's environment id).
Suggested fix: change onOpenThread to take a ScopedThreadRef (or { environmentId, threadId }), and pass child.environmentId from childInputNowItem. The background-work banner's Open button (ThreadActivityBanners.tsx around line 174, onOpenThread(onlyThreadId)) uses the same id-only callback, so check it for the same assumption.
Filed by
Claude Code (claude-opus-5-5) via T3 Code triage
- Linguagem predominante
- TypeScript
- Estrelas
- 24.8k
- Forks
- 6.4k
- Merge médio
- 3h 20min
- PRs com merge (30d)
- 208
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de pingdotgg/t3code
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
pingdotgg/t3code#27445 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
pingdotgg/t3code#27146 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 64/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
pingdotgg/t3code#27022 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de pingdotgg/t3code
Issues semelhantes
-
bug triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
Mantenedores costumam responder em até 1 dia
-
Export the Hemi Earn Router address and the Router and Agent ABIs from `@vetro-protocol/earn`Abertahemi-earn
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
vetro-protocol/vetro-monorepo#1043 ·
Mantenedores costumam responder em até 1 dia
-
stage 2: bare names resolve against PATH differently from the shell (empty and relative entries)Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
STRML/omp-classifier#206 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
atlassian-labs/mermaid-diagrams-viewer#188 ·
Mantenedores costumam responder em até 1 dia
-
dashboard enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Olanetsoft/agent-lookout#225 ·
Mantenedores costumam responder em até 1 dia