Commit Graph

87 Commits

Author SHA1 Message Date
Claude
8c2d630af5 fix(editor): Delete/Backspace key removes selected node + orphan edges
React Flow's built-in keyboard handling was silently no-op'd because
deleteKeyCode wasn't set (v12 defaults it to null when the prop is absent
in the strict TS types we consume). Set it to ['Delete', 'Backspace'] and
add an onNodesDelete handler that filters edges whose endpoints just
vanished — applyNodeChanges only touches nodes, so without this the graph
kept dangling edges.

Also fixes a tsc regression the same touch caught in ConnectionsPage.test
where a request.json() cast leaked 'never' back into a later access.
2026-08-28 19:51:37 +00:00
Claude
cd5827cca7 chore: untrack plan-4-kickoff-prompt.md (user's local prompt notes, not repo content) 2026-08-28 19:50:25 +00:00
Claude
4b30d4a44e feat(connections): edit connections via PUT — backend + UI + blank-secret merge
Backend: PUT /api/connections/{id} with UpdateConnectionRequest {Name, Config}.
Provider is immutable; a secret field left blank in the incoming config is
merged from the stored row so users can rename or rotate non-secret fields
without re-typing every credential. Invalidates the ConnectionInstanceRegistry
cache on update so the next GetConnection() re-opens with the fresh config.
409 on unique-name-per-provider collision, 404 on unknown id, 400 on non-
object config. 6 new xUnit tests cover the merge, overwrite, 404, 409, 400
paths plus the happy-path round-trip.

Frontend: ConnectionsPage gains an Edit pencil per row. The form is shared
between create and edit modes; provider select is disabled in edit; secret
fields render blank with an inline hint that leaving them blank keeps the
stored value. One new Vitest covers the edit flow.
2026-08-28 19:50:08 +00:00
Claude
d12581ad12 docs: fix Plan-4 order — push to origin BEFORE triggering Coolify deploy 2026-08-28 19:20:22 +00:00
Claude
bbb76b5920 docs: pin Plan-4 close-out head SHA 2026-08-28 19:11:43 +00:00
Claude
d237cc06e4 docs: close out Plan 4 — live at core.tes.gd, clear Plan-4 follow-ups 2026-08-28 19:11:33 +00:00
Claude
c41d0f9216 docs: add Plan 4 — Container + Coolify deploy 2026-08-28 19:11:33 +00:00
Claude
b6943c0e69 chore: gitignore deploy.json before populating 2026-08-28 19:07:03 +00:00
Claude
d82705d8ab feat(deploy): coolify docker-compose — expose:8080, /data volume, SERVICE_FQDN_APP_8080 2026-08-28 19:06:15 +00:00
Claude
a5d76e109f feat(docker): multi-stage Dockerfile — pnpm SPA build + dotnet publish + aspnet:9.0 runtime 2026-08-28 19:03:27 +00:00
Claude
32a2b2ee53 chore(docker): add .dockerignore excluding bin/obj/node_modules/wwwroot 2026-08-28 18:57:44 +00:00
Claude
6ffc59870c fix(auth): heal legacy plaintext admin.password_hash_source on boot 2026-08-28 18:54:35 +00:00
Claude
3d9df50f20 feat(api): honour X-Forwarded-Proto so Secure cookies flip on behind Traefik 2026-08-28 18:48:30 +00:00
Claude
7854cb02ec chore(frontend): exclude e2e/ from Vitest discovery 2026-08-28 16:40:16 +00:00
Claude
2a1b90c731 docs: close out Plan 3 — React SPA live 2026-08-28 16:38:55 +00:00
Claude
294bd57317 test(e2e): playwright smoke — login/create/edit/save happy path 2026-08-28 16:37:26 +00:00
Claude
03de45cf8e feat(api): serve SPA from wwwroot + SPA fallback for client-side routes 2026-08-28 16:32:16 +00:00
Claude
2f7f18008e feat(frontend): executions viewer — list + expandable per-node IO 2026-08-28 16:29:24 +00:00
Claude
64cf7fbed9 chore(frontend): vite dev proxy for /api and /wh 2026-08-28 16:27:43 +00:00
Claude
655bd17f55 feat(frontend): editor toolbar — Save / Test run / Activate / Deactivate 2026-08-28 16:27:15 +00:00
Claude
12c5fb1990 feat(frontend): editor — palette + drag-drop + config panel + selection 2026-08-28 16:25:33 +00:00
Claude
d81b59896e test(frontend): satisfy HttpResponse.json JsonBodyType constraint 2026-08-28 16:23:31 +00:00
Claude
891ff6a722 feat(frontend): editor scaffold — graph adapter + React Flow canvas 2026-08-28 16:21:33 +00:00
Claude
c9193dbf36 feat(frontend): connections page — schema-driven create + list + delete 2026-08-28 16:17:56 +00:00
Claude
03cb34d009 feat(frontend): SchemaForm — schema-driven form generator 2026-08-28 16:15:59 +00:00
Claude
942d001c1f feat(frontend): workflows list — create/activate/deactivate/delete 2026-08-28 16:14:09 +00:00
Claude
1f317564f5 feat(frontend): login page — POST /api/session + error UI 2026-08-28 16:12:15 +00:00
Claude
e0a2447d23 feat(frontend): router shell + PrivateRoute + stub pages 2026-08-28 16:10:51 +00:00
Claude
2cf3c8759f feat(frontend): TanStack Query hooks + useSession/useLogin/useLogout
Adds api/hooks.ts (query keys, list/detail queries, useApiMutation,
useInvalidate) and auth/session.ts (useSession swallows 401 into
authenticated=false; useLogin/useLogout invalidate the me key).
tsconfig now maps @/* -> src/* so tsc -b matches Vite's resolver.
2026-08-28 16:09:01 +00:00
Claude
e1632f1272 test(frontend): MSW server + renderWithProviders harness 2026-08-28 16:07:14 +00:00
Claude
a28d34a48c feat(frontend): apiFetch — cookie-included fetch wrapper with typed errors 2026-08-28 16:06:02 +00:00
Claude
a9b6ae6975 feat(frontend): API type surface for Plan 2 endpoints 2026-08-28 16:04:03 +00:00
Claude
5bfa7baad6 docs: add Plan 3 — React SPA plan 2026-08-28 16:03:16 +00:00
Claude
e29a4f7763 chore(frontend): wire Tailwind v3 + brand palette 2026-08-28 16:02:54 +00:00
Claude
c4c650e3d0 chore(frontend): scaffold Vite + React 18 + TypeScript under frontend/ 2026-08-28 16:00:34 +00:00
Claude
bc56e9edf1 docs: close out Plan 2 — workflow engine live 2026-08-28 15:39:36 +00:00
Claude
6065f0c91e feat(api): DI-register 5 nodes + NATS provider; enable pending integration tests 2026-08-28 15:35:43 +00:00
Claude
df64e9e512 feat(nodes): PythonTransformNode (IronPython 3) — items in, output out 2026-08-28 15:22:49 +00:00
Claude
ebd06a6abc feat(nodes): WebResponseNode — resolves webhook TCS with configured payload; move WebhookRouter to Core 2026-08-28 15:20:10 +00:00
Claude
3d7910c5e7 feat(nodes): WebhookNode — registers (workflow,path) route and emits body items 2026-08-28 15:16:51 +00:00
Claude
001c60bf86 feat(nodes): NatsPublishNode — publishes each item as its JSON bytes 2026-08-28 15:13:36 +00:00
Claude
b9a3926be2 feat(nodes): NatsHookNode — trigger emits one execution per message 2026-08-28 15:11:49 +00:00
Claude
b9097b1812 feat(providers): NatsConnectionProvider (NATS.Net) 2026-08-28 15:09:13 +00:00
Claude
5137591b8a feat(engine): RetentionService — hourly executions sweep 2026-08-28 15:07:58 +00:00
Claude
0895dc5f8f feat(api): manual run + executions REST (list + detail with per-node ports) 2026-08-28 15:05:54 +00:00
Claude
850eb4a12c feat(engine): TriggerHost with activation/deactivation + startup abort sweep 2026-08-28 15:03:35 +00:00
Claude
ff54b1f22d feat(api): POST /wh/{workflow-id}/{*path} endpoint 2026-08-28 15:00:24 +00:00
Claude
c88d27294b feat(engine): WebhookRegistry — (workflowId, path) → invocation lookup 2026-08-28 14:58:06 +00:00
Claude
eabd6f175d feat(engine): WebhookRouter (TCS + first-write-wins + timeout) 2026-08-28 14:56:52 +00:00
Claude
159102e27e feat(engine): Executor fan-out + failure propagation + status rollup 2026-08-28 14:52:53 +00:00