Repository navigation
feat(ui): administration console — tracker (feature-branch-chain) - #44
Merged
Merged
Conversation
PHASE 1 of the revised UI spec: Gentle-AI token system (replaces #F095C8), AppLayout shell (sidebar/topbar/statusbar), command palette (Ctrl/Cmd+K), 12 route placeholders, typed API origin helpers, and the existing WorkflowEditor mounted at /workflows/[name]. No fake endpoints or data; backend untouched.
ApiError + request helper with injected fetch seam, typed clients for health, models, workflows and runtime status (auth probe) over the real /api surface, 26 tests. No invented endpoints: providers surface is absent in the backend and is intentionally not represented here.
Runtime/models/workflows cards fed by the typed API clients, 10s auto-refresh with stale-response guard, per-card Unavailable+Retry, quick actions as semantic anchors. Fixes U02 defect: defines the previously undefined RuntimeStatusOptions DI seam type (invisible to gates because frontend has no tsconfig — astro build does not typecheck).
…hardening for U14
WorkflowsList island over the real /api/workflows surface, accessible run/logs/delete dialogs, NewWorkflowModal with a template matching the real workflow-yaml parser (array-form nodes, non-empty llm_call model, edges-only flow — the previous map-form template 400ed on the backend), 21 pure-helper tests. Backend format verified against src/orchestrator/workflow-yaml.ts + graph.ts before landing.
14-type taxonomy (workflow-nodes), graph<->xyflow conversion with backend-whitelist field admission and stable round-trip, YAML parse via the same 'yaml' package the backend parser uses, flow editor canvas with custom grouped nodes, palette (click-to-add) and read-only inspector; workflows/[name] mounts the real editor. WorkflowEditor demo orphaned for U06 disposal. Writer-appended seam note documents the U07 save path (flowToGraph -> serializeGraphToYaml -> PUT).
Per-type inspector forms (llm_call mode/model/provider scaffolds, loop body+iterations, pipeline params, condition source, k/convId/code), client-side structural validateWorkflow mirroring graph.ts rules for fast feedback, explicit Save = flowToGraph -> serializeGraphToYaml -> PUT with backend 400 errors shown verbatim as authority, Cmd/Ctrl+S, start/end delete-protected. Fixes: seedFromGraph clobbering version, Inspector duplicate row keys, 4-level import depth. Removes orphaned WorkflowEditor demo + workflow-nodes-demo (zero references). 22 new condition/validate tests.
Typed /ws client (bind->run, status/step_started/step_completed/token/ error envelopes verbatim from src/app/ws.ts), pure SSE-frame decoder, pure run-transcript state machine (45 tests), RunPanel drawer with live step trace + output, honest one-shot HTTP fallback when the socket fails, executions refreshed from /api/workflows/:name/logs after runs. No invented token streaming: verified the protocol only streams step lifecycle and relays final output frames.
Registry from GET /api/models (auth-gated, verified): summary counts, state chips, pid/port/error verbatim, real Activate/Deactivate POSTs with per-row busy labels, 15s auto-refresh with stale guard, honest 401/empty/error states, detail panel. Catalog and downloads render 'Coming from backend' (no endpoint exists in src/routes/api.ts) — no invented telemetry: ModelStatus has no GPU/VRAM/tokens data.
Static shells for the three real contract kinds (openai/anthropic/ openrouter) — no provider endpoint exists, so rows/keys/fallbacks are never rendered; keys live server-side in the keychain, never exposed. Fixed Astro transform gotcha: frontmatter consts are not visible inside getStaticPaths in this build, inline the kinds literal instead.
Lazy runs history from /api/workflows/:name/logs per workflow (max 2 concurrent, generation-guarded pool), expandable rows, latest-run summary per row, honest strip labeled as loaded-data counts (no global API exists — nothing invented), manual Refresh only (completed runs are immutable; runner.ts writes the log row before resolving). 18 pure mapper tests.
Typed v1 client (chatCompletion + async-generator stream with frame|done|truncated|aborted union, splitSSEFrames), playground island with real datalist suggestions (local model ids + gateway/<name>), raw SSE progressive view with terminal [DONE], verbatim ApiError envelopes (401 Bearer hint — this console never holds credentials; 404 unknown-model with local-wiring hint), AbortController cancel, 22 new tests. Reuses lib/sse.ts frame semantics.
Health card (verbatim + measured latency + localModels), server address from client config (API/WS origins), auth status reusing the runtime probe (WEAVELLM_AUTH note), one-shot WS handshake probe with honest states and no auto-reconnect, version from root package.json. Flattened placeholder runtime.astro -> runtime/index.astro. 17 pure mapper tests.
Settings: auth status from the real runtime probe (server-owned WEAVELLM_AUTH, console never holds the key), server environment rows honestly 'Coming from backend' (no env endpoint exists), formless by design — nothing to save. About: real package.json rows + factual stack, admin-only note. 10 mapper tests incl. anti-fake-path guards.
astro check + @astrojs/check 0.9.10 + frontend/tsconfig.json (strict): typecheck:frontend now catches defects invisible to astro build (was 53 errors, now 0) — navigation literal unions, workflow-condition discriminant, loose test fixture typing. Real a11y fix: focus-trap for all five modals (WCAG 2.4.3), shared trapFocus() util. AppLayout chrome islands demoted client:load -> client:idle; responsive breakpoints verified (240/64/drawer); ui-state mapper tests added.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
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.
Work unit
Tracker PR of the WeaveLLM administration console —
feat/ui-consoleaccumulates the full 14-phase integration (28 commits, 105 files, ~17.2k changed lines vsmaster).Start state:
master.End state: tracker holds the complete console; child slice PRs are reviewed on top of it.
Chain context (feature-branch-chain)
Review budget
~17.2k changed lines total. The console is a single cohesive feature; the slice chain keeps each review diff focused on one phase group. Every slice exceeds 400 changed lines — size:exception applies per slice (rationale documented in each child PR).
Verification
Per-slice gates (lint, typecheck root,
typecheck:frontend, bun test ×2 scopes,build:frontend) are reported in each child PR. Tracker itself is never verified as a diff — the slices are.Out of scope
src/changes (none — read-only by contract).masteruntil all child PRs are reviewed and integrated.