feat(web): catalogs panel + async ingest dialog#57
Merged
Conversation
Surface catalogs and the ingest flow in the workspace detail page. Closes the end-to-end loop from the browser: create a catalog → ingest a document → watch it reach `ready` → see it listed. ## New UI - `CatalogsPanel` on the workspace detail page. Lists catalogs with a `bound` / `unbound` status chip, an expandable document list, and per-row actions (Ingest, Delete). Delete requires typing the name to confirm (mirrors the vector-store delete pattern). - `CreateCatalogDialog` — name + description + optional vector-store picker. The picker reads the workspace's vector stores so the common case (bind at create) is a single click. - `IngestDialog` — textarea for content, optional source filename, submit → 202 → live progress bar that reflects the job's processed/total. Stays open through the terminal state so the user sees success/failure before closing. `Ingest` is disabled on unbound catalogs with a tooltip explaining why. ## Lib additions - Schemas for Catalog, Document, Job, AsyncIngestResponse, IngestRequest — mirror the runtime shapes. - `api.listCatalogs` / `createCatalog` / `deleteCatalog` / `listDocuments` / `ingestAsync` / `getJob`. - Hooks: `useCatalogs`, `useCreateCatalog`, `useDeleteCatalog`, `useDocuments` (gated on expansion so the per-catalog query only fires when needed), `useAsyncIngest`, `useJobPoller`. - `useJobPoller` uses React Query's `refetchInterval` (500ms default), returning `false` once the job hits a terminal state so polling stops cleanly. - New `Textarea` UI primitive. ## Not in scope File upload, SSE streaming (polling works for the MVP), catalog editing in-place, lexical/rerank toggles on the search UI. Those land in follow-ups as the need arises. Fourth of four PRs in this Phase 2b tail batch. Full flow tested against a seeded mock workspace end to end: catalog created, 4 chunks ingested, job reached `succeeded`, document `status: ready` surfaced in the expanded row.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the end-to-end loop from the browser: create a catalog → ingest a document → watch it reach `ready` → see it listed.
New UI
Lib additions
Not in scope (follow-ups)
File upload, SSE streaming, in-place catalog editing, lexical/rerank UI toggles on the search surface.
Test plan
Fourth of four PRs in this Phase 2b tail batch. After this, the loop from "paste text" to "search it back" is fully browser-driven.