UNPKG

@agentled/cli

Version:

CLI for Agentled — manage workflows, apps, and knowledge from the command line. Zero context-window cost for AI agents.

132 lines (131 loc) 5.8 kB
{ "name": "AI Extract + Threshold Check + Conditional Alert + KG Sync", "goal": "Extract structured metrics from free-form text, compare to configured thresholds, update an external system, alert on breaches only, and persist to the KG for trending.", "description": "Pattern 06 (conditional routing) + pattern 09 (KG history). Generic shape for any 'extract-then-monitor' flow: meeting transcripts → KPIs, support tickets → SLA metrics, incident reports → severity. Configure the target CRM/system, alert channel, and thresholds in input pages.", "status": "draft", "context": { "executionInputConfig": { "title": "Process Input", "description": "Paste the free-form text to extract metrics from.", "runCTALabel": "Process", "fields": [ { "name": "source_text", "label": "Source text", "type": "textarea", "required": true }, { "name": "entity_id", "label": "External entity id (e.g. CRM record id)", "type": "text", "required": true }, { "name": "language", "label": "Language", "type": "select", "options": ["en", "fr", "es", "de"], "required": true } ] }, "inputPages": [ { "title": "Alert Settings", "pathname": "alert-settings", "configuration": { "contextKey": "alertSettings", "shortDescriptionFields": ["slackChannel"], "fields": [ { "name": "slackWebhookUrl", "label": "Slack incoming webhook URL", "type": "text", "required": true }, { "name": "slackChannel", "label": "Slack channel", "type": "text", "required": true } ] } }, { "title": "Thresholds", "pathname": "thresholds", "configuration": { "contextKey": "thresholds", "fields": [ { "name": "metric_a_min", "label": "Metric A floor", "type": "numeric" }, { "name": "metric_b_max", "label": "Metric B ceiling", "type": "numeric" }, { "name": "metric_c_min", "label": "Metric C minimum", "type": "numeric" } ] } } ] }, "steps": [ { "id": "start", "type": "trigger", "name": "Manual Start", "pipelineStepStartConditions": { "trigger": { "type": "manual" } }, "next": { "stepId": "extract-metrics" } }, { "id": "extract-metrics", "type": "aiAction", "name": "Extract Metrics (multilingual)", "pipelineStepPrompt": { "template": "Extract the three target metrics (metric_a, metric_b, metric_c) from this {{input.language}} text. Return null for any metric you cannot confidently extract. Normalize units consistently.\n\nText:\n{{input.source_text}}", "responseStructure": { "metric_a": "number | null", "metric_b": "number | null", "metric_c": "number | null", "notes": "string" } }, "creditCost": 10, "next": { "stepId": "check-thresholds" } }, { "id": "check-thresholds", "type": "code", "name": "Compare to Thresholds", "codeConfig": { "language": "javascript", "code": "const k = steps['extract-metrics']; const t = context.thresholds || {}; const breaches = []; if (k.metric_a != null && t.metric_a_min != null && k.metric_a < t.metric_a_min) breaches.push({ metric: 'metric_a', value: k.metric_a, threshold: t.metric_a_min }); if (k.metric_b != null && t.metric_b_max != null && k.metric_b > t.metric_b_max) breaches.push({ metric: 'metric_b', value: k.metric_b, threshold: t.metric_b_max }); if (k.metric_c != null && t.metric_c_min != null && k.metric_c < t.metric_c_min) breaches.push({ metric: 'metric_c', value: k.metric_c, threshold: t.metric_c_min }); return { breaches, breach_count: breaches.length, summary: breaches.map(b => `${b.metric}=${b.value} (limit ${b.threshold})`).join(', ') };" }, "next": { "stepId": "update-external-system" } }, { "id": "update-external-system", "type": "appAction", "name": "Update External System", "app": { "id": "http-request", "actionId": "http-request.request", "source": "native" }, "stepInputData": { "url": "https://example.com/api/entities/{{input.entity_id}}", "method": "PATCH", "body": "{\"metrics\": {{steps.extract-metrics}}}" }, "next": { "stepId": "alert-on-breach" } }, { "id": "alert-on-breach", "type": "appAction", "name": "Slack Alert (breaches only)", "app": { "id": "webhook", "actionId": "webhook.trigger", "source": "native" }, "entryConditions": { "onCriteriaFail": "skip", "conditionText": "Only alert when at least one threshold is breached.", "criteria": [ { "variable": "{{steps.check-thresholds.breach_count}}", "operator": ">", "value": 0 }, { "variable": "{{context.alertSettings.slackWebhookUrl}}", "operator": "isNotNull" } ] }, "stepInputData": { "webhookUrl": "{{context.alertSettings.slackWebhookUrl}}", "inputsJson": "{\"text\":\"Threshold breach for {{input.entity_id}}: {{steps.check-thresholds.summary}}\",\"channel\":\"{{context.alertSettings.slackChannel}}\"}" }, "next": { "stepId": "store-history" } }, { "id": "store-history", "type": "knowledgeSync", "name": "Store Metric History", "knowledgeSync": { "source": { "stepId": "extract-metrics" }, "listKey": "metric_history", "fieldMapping": { "metric_a": "metric_a", "metric_b": "metric_b", "metric_c": "metric_c", "notes": "notes" } }, "next": { "stepId": "done" } }, { "id": "done", "type": "milestone", "name": "Done" } ] }