Skip to content

Commit 3069cc3

Browse files
committed
fix(tui): surface permission prompts from deeply nested subagent sessions
1 parent bd5356e commit 3069cc3

2 files changed

Lines changed: 31 additions & 5 deletions

File tree

packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,19 @@ export function Footer() {
1515
const lsp = createMemo(() => Object.keys(sync.data.lsp))
1616
const permissions = createMemo(() => {
1717
if (route.data.type !== "session") return []
18-
return sync.data.permission[route.data.sessionID] ?? []
18+
// Collect permissions from all descendant sessions (full tree)
19+
const rootID = route.data.sessionID
20+
const ids: string[] = [rootID]
21+
const queue = [rootID]
22+
while (queue.length > 0) {
23+
const parentID = queue.pop()!
24+
for (const s of sync.data.session) {
25+
if (s.parentID !== parentID) continue
26+
ids.push(s.id)
27+
queue.push(s.id)
28+
}
29+
}
30+
return ids.flatMap((id) => sync.data.permission[id] ?? [])
1931
})
2032
const directory = useDirectory()
2133
const connected = useConnected()

packages/opencode/src/cli/cmd/tui/routes/session/index.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,27 @@ export function Session() {
145145
})
146146
const messages = createMemo(() => sync.data.message[route.sessionID] ?? [])
147147
const paging = createMemo(() => sync.data.message_page[route.sessionID])
148+
// Collect all descendant session IDs (full tree) for permission/question aggregation
149+
const descendants = createMemo(() => {
150+
const rootID = session()?.id
151+
if (!rootID || session()?.parentID) return []
152+
const ids: string[] = [rootID]
153+
const queue = [rootID]
154+
while (queue.length > 0) {
155+
const parentID = queue.pop()!
156+
for (const s of sync.data.session) {
157+
if (s.parentID !== parentID) continue
158+
ids.push(s.id)
159+
queue.push(s.id)
160+
}
161+
}
162+
return ids
163+
})
148164
const permissions = createMemo(() => {
149-
if (session()?.parentID) return []
150-
return children().flatMap((x) => sync.data.permission[x.id] ?? [])
165+
return descendants().flatMap((id) => sync.data.permission[id] ?? [])
151166
})
152167
const questions = createMemo(() => {
153-
if (session()?.parentID) return []
154-
return children().flatMap((x) => sync.data.question[x.id] ?? [])
168+
return descendants().flatMap((id) => sync.data.question[id] ?? [])
155169
})
156170

157171
const LOAD_MORE_THRESHOLD = 5

0 commit comments

Comments
 (0)