5 Commits
Author SHA1 Message Date
homelab-updaterandClaude Opus 5.5 615bf95ab5 feat(web): chart foundation on ECharts, run and cost aggregates
ci / check (push) Successful in 1m30s
ci / publish (push) Skipped
New dependency echarts: stacked bars, Gantt (custom series), donut and
sparklines with tooltips and theming, instead of a hand-written chart
engine; only the used parts are registered and loaded on demand.

stats.ts counts runs per day, success rate with the window before,
durations, apps with an update and model spend per day; option builders
take the theme's palette so both themes share one set of charts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 01:31:12 +02:00
homelab-updaterandClaude Sonnet 5 e7d0784f23 feat: add web UI for workflow graph editor, functions, instances and model profiles (stage 7 frontend)
Adds the Preact views for the stage 7 REST API committed previously:
workflow/function catalogs and editors, instance timeline, and model
profiles. New dependencies: cytoscape (graph rendering) and
monaco-editor (function editor).

CytoscapeGraph was rewritten to drop the duplicated manual HTML/SVG
node-and-edge renderer that lived alongside the real Cytoscape
instance (drag, pin, select and auto-layout were reimplemented twice).
Cytoscape is now the only renderer, driving those interactions through
its own event API (dragfree, select/unselect, double-tap to pin).
Environments without a working canvas 2D context (this project's own
vitest+jsdom suite included) get a plain node list instead of a blank
pane.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 14:08:32 +02:00
homelab-updater 96f37f8e4a feat: add versioned workflow foundation 2026-09-21 00:38:02 +02:00
homelab-updaterandClaude Sonnet 5 43f3b38f12 test(web): render the real UI against the real server in jsdom
jsdom (dev only): the only way to exercise Preact components here without a browser. fetch is routed to Fastify inject,
EventSource is a stub the test drives. Covers the queue flow (note validation, proceed with executor, refused decision),
live refresh, runs/apps views, starting a run.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 23:51:19 +02:00
homelab-updaterandClaude Sonnet 5 e4734e8c94 build: TypeScript, ESLint, Vitest, Vite scaffold with layer rule
typescript ~6.0.3 (not 7.x): typescript-eslint 8.70 peers typescript <6.1.0, so 7.x would break lint.
eslint + typescript-eslint: strict type-checked lint; @eslint/js: base rules.
vitest: tests next to code; vite + @preact/preset-vite: frontend bundle; preact: UI.
fastify + @fastify/static: HTTP API/SSE and serving the built UI; zod: validation at boundaries.
@types/node: Node 24 typings. SQLite uses the built-in node:sqlite, so no native dependency.
Layer rule domain -> app -> infra -> http/web lives in tools/layer-rules.ts and is tested.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 23:37:11 +02:00