Portal Community

WorkDesk — HIL Inbox

WorkDesk HIL Inbox

WorkDesk is the employee portal for the BizFirstGO platform. Its HIL Inbox is the primary surface where employees receive and respond to interaction requests from running workflows.

The inbox is powered entirely by EdgeInteract:

  • On login, WorkDesk's InteractionProvider connects to EdgeStream and subscribes to interactions.{currentUserId}
  • Incoming InteractionRequest messages appear in the inbox as cards, sorted by priority and timestamp
  • Each card renders the appropriate InteractionComponent (approval, form, picker, etc.)
  • When the employee responds, the InteractionResponse is published back and the card is dismissed
  • Timed-out interactions are grayed out and marked "Expired" — they cannot be responded to

Key WorkDesk interactions: expense approvals, leave requests, document sign-offs, bulk action confirmations, policy acknowledgements.

Flow Studio — HIL Nodes

HumanInLoopNode in Flow Studio

Flow Studio's workflow engine contains the HumanInLoopNode — a first-class execution node that pauses a workflow and waits for a human response before continuing. The node uses EdgeInteract internally.

How the HumanInLoopNode works:

1

Node Configuration

The workflow designer sets the interaction type, target user/role, payload template, and timeout. These are stored as node settings.

2

Execution: Suspend

When the node executes, it calls IInteractionPublisher.PublishAsync(), then suspends the workflow coroutine (via HIL suspension mechanism). The workflow state is persisted to the database.

3

Resume on Response

When the InteractionResponse arrives on the callback topic, the HIL resume service wakes the suspended workflow. The response data is injected into the node's output and the workflow continues.

!

Timeout Handling

If the interaction times out, the node receives an InteractionTimeout. The workflow takes the "timeout" branch — typically escalating to a manager or failing the workflow with a structured error.

Octopus — Agent Authorization

Octopus Agent HIL

Octopus AI agents run autonomously but are designed to pause and request human authorization before performing sensitive or irreversible actions. EdgeInteract is the mechanism for this authorization gate.

Agent authorization patterns:

  • Pre-action confirmation: Agent sends a confirmation interaction before performing a destructive operation (deleting records, sending bulk messages).
  • Data access approval: Agent sends an approval interaction when accessing sensitive data, including context about what it needs and why.
  • Option selection: Agent generates a list of candidate actions and sends a picker interaction so the human can choose the preferred path.

Octopus agents use the server-side IInteractionPublisher directly and await the response before proceeding. If the response is rejected or times out, the agent logs the event and aborts the operation.

Integration Architecture Diagram

┌─────────────────────────────────────────────────────────────────┐
│                     BizFirstGO Platform                          │
│                                                                   │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────┐   │
│  │  Flow Studio │    │   Octopus    │    │   WorkDesk       │   │
│  │  HIL Nodes   │    │   Agents     │    │   HIL Inbox      │   │
│  └──────┬───────┘    └──────┬───────┘    └────────┬─────────┘   │
│         │                   │                     │              │
│         ▼                   ▼                     ▼              │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                   EdgeInteract                            │   │
│  │  IInteractionPublisher  ←→  InteractionSubscriber         │   │
│  │  InteractionPipeline    ←→  InteractionResponsePublisher  │   │
│  └──────────────────────┬───────────────────────────────────┘   │
│                         │                                        │
│  ┌──────────────────────▼───────────────────────────────────┐   │
│  │                   EdgeStream                              │   │
│  │         interactions.{userId}  topic                      │   │
│  │         interactions.callback.{interactionId}  topic      │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

Shared Configuration

All three integrations share the same EdgeInteract configuration block in appsettings.json:

{
  "EdgeInteract": {
    "DefaultTimeoutMs": 86400000,
    "MaxConcurrentInteractionsPerUser": 10,
    "AuditLog": {
      "Enabled": true,
      "RetentionDays": 90
    },
    "RateLimiting": {
      "MaxPerMinutePerUser": 5
    }
  }
}