Skip to content

feat(ui): administration console — tracker (feature-branch-chain) - #44

Merged
AndyTechnologies merged 28 commits into
masterfrom
feat/ui-console
Sep 23, 2026
Merged

AndyTechnologies merged 28 commits into
masterfrom
feat/ui-console

Conversation

@AndyTechnologies

Copy link
Copy Markdown
Owner

Work unit

Tracker PR of the WeaveLLM administration console — feat/ui-console accumulates the full 14-phase integration (28 commits, 105 files, ~17.2k changed lines vs master).

Start state: master.
End state: tracker holds the complete console; child slice PRs are reviewed on top of it.

Chain context (feature-branch-chain)

feat/ui-console (this tracker, DRAFT) ──→ master  (merge only after all children)
  ├─ ui-console/slice-1 ──→ feat/ui-console      (shell, API layer, overview)
  │    └─ ui-console/slice-2 ──→ slice-1         (workflow library)
  │         └─ ui-console/slice-3 ──→ slice-2    (editor + semantics)
  │              └─ ui-console/slice-4 ──→ slice-3 (execution, models, providers)
  │                   └─ ui-console/slice-5 ──→ slice-4 (executions, playground, runtime)
  │                        └─ ui-console/slice-6 ──→ slice-5 (settings, about, hardening)

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

  • Backend src/ changes (none — read-only by contract).
  • Merging this tracker to master until all child PRs are reviewed and integrated.

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).
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.
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​astrojs/​check@​0.9.101001008088100

View full report

@AndyTechnologies
AndyTechnologies marked this pull request as ready for review September 23, 2026 16:24
@AndyTechnologies
AndyTechnologies merged commit efcfbc6 into master Sep 23, 2026
3 checks passed
@AndyTechnologies
AndyTechnologies deleted the feat/ui-console branch September 23, 2026 16:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant