tui: add session search functionality with debounced input and server-side filtering

This commit is contained in:
Dax Raad
2026-01-04 13:38:30 -05:00
parent cdd6ea514b
commit 7304ba616e
9 changed files with 79 additions and 12 deletions

View File

@@ -701,8 +701,27 @@ export namespace Server {
},
},
}),
validator(
"query",
z.object({
start: z.coerce
.number()
.optional()
.meta({ description: "Filter sessions updated on or after this timestamp (milliseconds since epoch)" }),
search: z.string().optional().meta({ description: "Filter sessions by title (case-insensitive)" }),
limit: z.coerce.number().optional().meta({ description: "Maximum number of sessions to return" }),
}),
),
async (c) => {
const sessions = await Array.fromAsync(Session.list())
const query = c.req.valid("query")
const term = query.search?.toLowerCase()
const sessions: Session.Info[] = []
for await (const session of Session.list()) {
if (query.start !== undefined && session.time.updated < query.start) continue
if (term !== undefined && !session.title.toLowerCase().includes(term)) continue
sessions.push(session)
if (query.limit !== undefined && sessions.length >= query.limit) break
}
return c.json(sessions)
},
)