Automatisierungsvorschlaege: Agenten schlagen n8n-Workflows vor, der Mensch importiert von Hand (#726)

- Core/Automation/WorkflowReview: free check of an n8n export - every node
  with its effect and target, code/command/SSH nodes only with a stated
  reason, embedded secrets refused (by name or by look), a short summary of
  what the workflow does.
- AutomationProposals: measured saving from the replaced tasks' receipts
  (28 days), at most 3 open per agent, the same purpose not twice, a
  rejected proposal must be answered; the human gets a task and decides in
  the approvals view. Accepting records it - importing stays a human's step.
- Candidates: recurring tasks whose runs repeat the same calls (>= 75 % of
  >= 8 runs in 14 days) are put to their agent once a month.
- Escalation tool: automation_find, automation_propose.
- Approvals view: proposals with nodes, targets, warnings, saving, JSON
  download, accept/reject.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-01 18:58:36 +02:00
co-authored by Claude Opus 5.5
parent 64e09b82d5
commit 067ff62317
13 changed files with 992 additions and 4 deletions
@@ -395,6 +395,36 @@ public sealed class SqliteStorage
CREATE INDEX IF NOT EXISTS IX_InboundTriggerEvents_Trigger ON InboundTriggerEvents (TriggerId, ReceivedAt);
-- #726: workflows agents propose, the human decides; and the tasks already put to their agent.
CREATE TABLE IF NOT EXISTS AutomationProposals (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
AgentId TEXT NOT NULL,
Purpose TEXT NOT NULL,
Trigger TEXT NOT NULL,
TaskIds TEXT NOT NULL,
Services TEXT NOT NULL,
Risks TEXT NOT NULL,
TestGuide TEXT NOT NULL,
WorkflowJson TEXT NOT NULL,
Justification TEXT NULL,
Summary TEXT NOT NULL,
Nodes TEXT NOT NULL,
Warnings TEXT NOT NULL,
Savings TEXT NOT NULL,
Status TEXT NOT NULL,
Reason TEXT NULL,
CreatedAt TEXT NOT NULL,
DecidedAt TEXT NULL,
TaskId TEXT NULL,
Answers INTEGER NULL,
Argument TEXT NULL
);
CREATE TABLE IF NOT EXISTS AutomationCandidates (
TaskId TEXT NOT NULL,
NotedAt TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS StagedCalls (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
RunId TEXT NOT NULL,