Skip to content

feat(workflow): webhook_respond node and respond_mode#612

Merged
yogasw merged 3 commits into
feat/workflow-webhook-nodefrom
feat/workflow-webhook-response
Jun 8, 2026
Merged

feat(workflow): webhook_respond node and respond_mode#612
yogasw merged 3 commits into
feat/workflow-webhook-nodefrom
feat/workflow-webhook-response

Conversation

@yogasw

@yogasw yogasw commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • webhook_respond node — new node type that sends a custom HTTP response back to the webhook caller (configurable status code, body, headers, all template-rendered)
  • Trigger respond_mode — three modes: immediately (202 fire-and-forget, default), last_node (block ≤30s, return last node output as JSON), respond_node (block until webhook_respond node fires)
  • Path-match guard — both /webhook/ and /webhook-test/ return 404 when no trigger matches the path; was silently returning 202
  • 502 on missing respond node — runtime 502 when respond_node mode set but no webhook_respond node ran
  • Publish-time warning — BFS check from trigger entry_node; warns if no webhook_respond reachable
  • Canvas: trigger validation badges, edge hover highlight, validate-on-load, "Open inspector" in context menu, layout gap fix

Test plan

  • Drop webhook_respond node, set trigger respond_mode = respond_node → curl /webhook-test/ blocks and returns custom body
  • Trigger with respond_node mode but no webhook_respond in graph → publish shows warning, curl returns 502
  • /webhook-test/.../nonexistent → 404
  • Canvas: trigger card shows amber badge when respond_node set but no respond node reachable
  • Canvas: hover edge → turns green; right-click → "Open inspector" in menu

🤖 Generated with Claude Code

yogasw added 3 commits June 8, 2026 07:43
feat(workflow): env/secrets system with Settings modal
feat(workflow): webhook trigger with dual endpoint, path-based routing, and theme fixes
Backend:
- Add webhook_respond node: custom HTTP status/body/headers, _webhook_respond
  sentinel for reliable extraction, template rendering via RenderCtx
- Add Trigger.RespondMode (immediately/last_node/respond_node) with full doc
- Router: RunNowWithDone + DispatchWithDone for blocking webhook response
- Router: respondModeFor lookup, 404 on no-match path (draft + published)
- DraftWebhookHandler: path-match guard before run, method check
- writeWebhookResult: 502 when respond_node mode but no respond node ran
- Validator: warning when respond_node set but no webhook_respond reachable
  from trigger entry_node (BFS via existing BfsReachable)
- graph.entry dangling reference silently ignored (was warning, confused users)
- Publish preserves enabled flag from published copy
- spa_workflows: webhook-test source buckets to test KIND=test filter

Frontend:
- Trigger inspector: respond_mode radio picker (3 options with descriptions)
- NodeDetailModal: webhook_respond section (status, body, headers, ArgField)
- Canvas: trigger validation badges (error/warning) with click-to-inspector
- Canvas: edge hover highlight (emerald stroke), activeEdge persists during ctx menu
- Canvas: validate-on-load so badges appear immediately
- Canvas: "Open inspector" in context menu for nodes + triggers
- Canvas: layout fix — overflow-hidden on island wrapper prevents main scroll gap
- BottomTabs: remove border-b when collapsed, flush to canvas edge
- BaseNode: border-2 border-emerald-400 on selected (visible inside overflow-hidden)
- Editor stores: validate on loadWorkflow

Docs: remove all YAML examples from triggers.md (storage is JSON)
@yogasw yogasw merged commit ac26e81 into feat/workflow-webhook-node Jun 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant