Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

"Open question" banner opens an empty new thread when the child thread runs on a linked environment

Aberta Para iniciantes
#27,005 2 comentários 0 reações 0 responsáveis Ver no GitHub

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:52 and :60) calls onOpenThread(child.id) / onOpenThread(first.id). Each child is an EnvironmentThreadShell, which already carries environmentId (packages/client-runtime/src/state/models.ts:138), but that id is dropped here.
  • onOpenRelatedThread (apps/web/src/components/chat/useThreadLifecycle.tsx:400–429) builds scopeThreadRef(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 whose delegatedFrom points 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
  1. Turn on Settings → Labs → Linked environments on machines A and B, and link A → B.
  2. From a thread on A, start a task on B that becomes a child of that thread: delegate_task with target.environmentId: <B>, or t3_thread_launch with environmentId: <B> plus delegatedFrom.
  3. 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.
  4. In the desktop app, open the parent thread on A. The banner "Subagent needs input · · Open question" appears.
  5. 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_launch threads with delegatedFrom are 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

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de pingdotgg/t3code

Todas as issues de pingdotgg/t3code

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.