@agentled/cli 0.7.6 → 0.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +44 -1
  2. package/dist/commands/do.js +1 -1
  3. package/dist/commands/do.js.map +1 -1
  4. package/dist/commands/examples.d.ts +5 -5
  5. package/dist/commands/examples.js +8 -2
  6. package/dist/commands/examples.js.map +1 -1
  7. package/dist/commands/executions.js +56 -0
  8. package/dist/commands/executions.js.map +1 -1
  9. package/dist/commands/onboarding.js +45 -17
  10. package/dist/commands/onboarding.js.map +1 -1
  11. package/dist/commands/skills.js +67 -2
  12. package/dist/commands/skills.js.map +1 -1
  13. package/dist/commands/workspace.js +41 -0
  14. package/dist/commands/workspace.js.map +1 -1
  15. package/dist/utils/agentled-home-content.d.ts +1 -1
  16. package/dist/utils/agentled-home-content.js +6 -3
  17. package/dist/utils/agentled-home-content.js.map +1 -1
  18. package/dist/utils/browser-auth.d.ts +1 -0
  19. package/dist/utils/browser-auth.js +3 -3
  20. package/dist/utils/browser-auth.js.map +1 -1
  21. package/dist/utils/pipeline-lint.js +3 -1
  22. package/dist/utils/pipeline-lint.js.map +1 -1
  23. package/dist/utils/skills.d.ts +65 -4
  24. package/dist/utils/skills.js +147 -5
  25. package/dist/utils/skills.js.map +1 -1
  26. package/dist/utils/workspace-folder.d.ts +2 -0
  27. package/dist/utils/workspace-folder.js +26 -3
  28. package/dist/utils/workspace-folder.js.map +1 -1
  29. package/dist/utils/workspace-meta.d.ts +7 -5
  30. package/dist/utils/workspace-meta.js +30 -7
  31. package/dist/utils/workspace-meta.js.map +1 -1
  32. package/llms-full.txt +9 -2
  33. package/llms.txt +18 -0
  34. package/package.json +2 -2
  35. package/patterns/v1/00-design-principles.md +161 -0
  36. package/patterns/v1/13-entity-pipeline-lifecycle.md +319 -0
  37. package/scaffolds/README.md +7 -1
  38. package/scaffolds/child-with-return.json +71 -0
  39. package/scaffolds/funnel-orchestrator.json +134 -0
  40. package/scaffolds/kg-process-update.json +88 -0
  41. package/scaffolds/orchestrator-kg-loop.json +96 -0
  42. package/scaffolds/source-from-platform.json +78 -0
  43. package/scaffolds/source-to-kg.json +88 -0
  44. package/skills/agentled/SKILL.md +66 -737
  45. package/skills/agentled/references/credits-apps-and-errors.md +40 -0
  46. package/skills/agentled/references/editing-workflows.md +109 -0
  47. package/skills/agentled/references/email-workflows.md +122 -0
  48. package/skills/agentled/references/entity-pipeline.md +106 -0
  49. package/skills/agentled/references/outreach-and-scale.md +43 -0
  50. package/skills/agentled/references/persistent-memory.md +106 -0
  51. package/skills/agentled/references/step-schemas.md +148 -0
  52. package/skills/agentled/references/workspace-folder.md +74 -0
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "Orchestrator: Loop call-workflow over KG",
3
+ "goal": "Read rows from a KG list, call a child workflow per row to score/process each, persist the results back to KG, then summarize.",
4
+ "description": "Pattern 11 (orchestrator) wired to a child built from the `child-with-return` scaffold. The KG list is the source of truth; the child encapsulates the per-row logic. Uses `entryConditions.type: \"loop_completion\"` with `onCriteriaFail: \"wait\"` so downstream steps block until every child finishes.",
5
+ "status": "draft",
6
+ "context": {
7
+ "executionInputConfig": {
8
+ "title": "Orchestrate Scoring",
9
+ "description": "Score every `new` row in the KG list by calling a child workflow per row.",
10
+ "runCTALabel": "Run",
11
+ "allowRegeneration": false,
12
+ "fields": [
13
+ { "name": "source_list_key", "label": "Source KG list key", "type": "text", "required": true },
14
+ { "name": "child_workflow_id", "label": "Child workflow id (the scoring workflow)", "type": "text", "required": true }
15
+ ]
16
+ }
17
+ },
18
+ "steps": [
19
+ {
20
+ "id": "start",
21
+ "type": "trigger",
22
+ "name": "Manual Start",
23
+ "pipelineStepStartConditions": { "trigger": { "type": "manual" } },
24
+ "next": { "stepId": "read-candidates" }
25
+ },
26
+ {
27
+ "id": "read-candidates",
28
+ "type": "appAction",
29
+ "name": "Read Candidates from KG",
30
+ "app": { "id": "kg", "actionId": "kg.read-list", "source": "native" },
31
+ "stepInputData": {
32
+ "listKey": "{{input.source_list_key}}",
33
+ "status": "new",
34
+ "limit": "50"
35
+ },
36
+ "next": { "stepId": "call-child" }
37
+ },
38
+ {
39
+ "id": "call-child",
40
+ "type": "appAction",
41
+ "name": "Score Row (child workflow)",
42
+ "loopConfig": {
43
+ "source": "executionContent",
44
+ "config": { "stepId": "read-candidates", "field": "listEntries" },
45
+ "ItemAlias": "row"
46
+ },
47
+ "app": { "id": "agentled", "actionId": "agentled.call-workflow", "source": "native" },
48
+ "stepInputData": {
49
+ "workflowId": "{{input.child_workflow_id}}",
50
+ "executionInputData": "{\"entity_id\": \"{{row.id}}\", \"entity_url\": \"{{row.url}}\"}",
51
+ "timeoutMinutes": "30"
52
+ },
53
+ "next": { "stepId": "persist-scores" }
54
+ },
55
+ {
56
+ "id": "persist-scores",
57
+ "type": "appAction",
58
+ "name": "Write Scores Back to KG",
59
+ "app": { "id": "kg", "actionId": "kg.update-rows", "source": "native" },
60
+ "entryConditions": {
61
+ "onCriteriaFail": "wait",
62
+ "conditionText": "Wait for every child call to complete before flipping status.",
63
+ "criteria": [
64
+ { "type": "loop_completion", "stepId": "call-child", "operator": "==", "value": true }
65
+ ]
66
+ },
67
+ "stepInputData": {
68
+ "listKey": "{{input.source_list_key}}",
69
+ "rowIds": "{{steps.call-child.rowIds}}",
70
+ "fieldUpdates": "{{steps.call-child.returnData}}",
71
+ "status": "scored"
72
+ },
73
+ "next": { "stepId": "summarize" }
74
+ },
75
+ {
76
+ "id": "summarize",
77
+ "type": "aiAction",
78
+ "name": "Summarize Run",
79
+ "pipelineStepPrompt": {
80
+ "template": "Summarize this orchestration run.\n\nRows processed: {{steps.read-candidates.count}}\nResults: {{steps.call-child.returnData}}\n\nReport totals, top-3 by score, and anything that looked anomalous.",
81
+ "responseStructure": {
82
+ "totals": "object — counts by decision bucket",
83
+ "top": "array — top 3 rows",
84
+ "notes": "string"
85
+ }
86
+ },
87
+ "creditCost": 5,
88
+ "next": { "stepId": "done" }
89
+ },
90
+ {
91
+ "id": "done",
92
+ "type": "milestone",
93
+ "name": "Orchestration Done"
94
+ }
95
+ ]
96
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "_scaffold": "source-from-platform",
3
+ "_description": "Source entities from a native app, normalize them, and upsert to KG with status:new. Pair with a downstream scoring workflow that reads status:new.",
4
+ "name": "Source from Platform",
5
+ "goal": "Source entities from a platform and write them to a Knowledge Graph list for downstream processing.",
6
+ "status": "draft",
7
+ "context": {
8
+ "executionInputConfig": {
9
+ "title": "Run Sourcing",
10
+ "description": "Source entities and add them to the Knowledge Graph.",
11
+ "runCTALabel": "Source",
12
+ "fields": [
13
+ { "name": "search_query", "label": "Search query", "type": "text", "required": true },
14
+ { "name": "target_list_key", "label": "Target list key", "type": "text", "required": true, "defaultValue": "leads", "description": "Knowledge list key (e.g. \"leads\", \"startups\")." }
15
+ ]
16
+ }
17
+ },
18
+ "steps": [
19
+ {
20
+ "id": "start",
21
+ "type": "trigger",
22
+ "name": "Scheduled sourcing",
23
+ "pipelineStepStartConditions": {
24
+ "trigger": {
25
+ "type": "schedule",
26
+ "description": "Run weekly.",
27
+ "config": { "frequency": "weekly", "dayOfWeek": "monday", "time": "08:00" }
28
+ }
29
+ },
30
+ "next": { "stepId": "source-entities" }
31
+ },
32
+ {
33
+ "id": "source-entities",
34
+ "type": "appAction",
35
+ "name": "Source entities",
36
+ "_comment": "Replace the app with the source action. Run: agentled apps for-source <platform>",
37
+ "app": { "id": "REPLACE_WITH_APP_ID", "actionId": "REPLACE_WITH_APP_ID.REPLACE_WITH_ACTION_ID", "source": "native" },
38
+ "stepInputData": {
39
+ "query": "{{input.search_query}}",
40
+ "limit": "25"
41
+ },
42
+ "creditCost": 2,
43
+ "next": { "stepId": "normalize-entities" }
44
+ },
45
+ {
46
+ "id": "normalize-entities",
47
+ "type": "aiAction",
48
+ "name": "Normalize entities",
49
+ "pipelineStepPrompt": {
50
+ "template": "Extract real entities from the source output.\n\nSource output:\n{{steps.source-entities}}\n\nRules:\n- Keep only identifiable entities.\n- Use a stable userKey, preferably domain, profile URL, email, or canonical source URL.\n- Set rowData.status to \"new\".\n- Include source, source_url, sourced_at, and enough evidence for a downstream scoring workflow.\n- Do not score, find contacts, or draft outreach here.\n\nReturn JSON only.",
51
+ "responseStructure": {
52
+ "rows": "array of { userKey: string, rowData: object }",
53
+ "count": "number"
54
+ }
55
+ },
56
+ "creditCost": 5,
57
+ "next": { "stepId": "save-entities" }
58
+ },
59
+ {
60
+ "id": "save-entities",
61
+ "type": "appAction",
62
+ "name": "Save entities",
63
+ "app": { "id": "kg", "actionId": "kg.upsert-rows", "source": "native" },
64
+ "stepInputData": {
65
+ "listKey": "{{input.target_list_key}}",
66
+ "rows": "{{steps.normalize-entities.rows}}",
67
+ "mergeStrategy": "merge",
68
+ "status": "new"
69
+ },
70
+ "next": { "stepId": "done" }
71
+ },
72
+ {
73
+ "id": "done",
74
+ "type": "milestone",
75
+ "name": "Sourcing complete"
76
+ }
77
+ ]
78
+ }
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "Source -> KG (idempotent sourcing)",
3
+ "goal": "Find entities and write them to a KG list with a stable userKey so re-running never produces duplicates.",
4
+ "description": "Pattern 15a (sourcing half of the Source -> Process split). Pair this scaffold with `kg-process-update` as the consumer. Uses `kg.upsert-rows` with `userKey` for O(1) dedup across runs and `status: \"new\"` so the processing workflow can filter cleanly.",
5
+ "status": "draft",
6
+ "context": {
7
+ "executionInputConfig": {
8
+ "title": "Source Entities",
9
+ "description": "Find entities and add them to the shared KG list.",
10
+ "runCTALabel": "Source",
11
+ "allowRegeneration": false,
12
+ "fields": [
13
+ { "name": "search_query", "label": "Search query / topic", "type": "text", "required": true },
14
+ { "name": "target_list_key", "label": "Target KG list key", "type": "text", "required": true }
15
+ ]
16
+ }
17
+ },
18
+ "steps": [
19
+ {
20
+ "id": "schedule",
21
+ "type": "trigger",
22
+ "name": "Weekly source",
23
+ "pipelineStepStartConditions": {
24
+ "trigger": {
25
+ "type": "schedule",
26
+ "description": "Run weekly on Monday morning.",
27
+ "config": { "frequency": "weekly", "dayOfWeek": "monday", "time": "08:00" }
28
+ }
29
+ },
30
+ "next": { "stepId": "generate-queries" }
31
+ },
32
+ {
33
+ "id": "generate-queries",
34
+ "type": "aiAction",
35
+ "name": "Generate Optimized Queries",
36
+ "pipelineStepPrompt": {
37
+ "template": "Generate 3 optimized search queries to find new entities matching: {{input.search_query}}\n\nUse boolean operators and filters appropriate to the target platform. Return a flat list of strings.",
38
+ "responseStructure": {
39
+ "queries": "array of strings"
40
+ }
41
+ },
42
+ "creditCost": 3,
43
+ "next": { "stepId": "search" }
44
+ },
45
+ {
46
+ "id": "search",
47
+ "type": "appAction",
48
+ "name": "Search (replace with target platform)",
49
+ "app": { "id": "REPLACE_WITH_APP_ID", "actionId": "REPLACE_WITH_APP_ID.REPLACE_WITH_ACTION_ID", "source": "native" },
50
+ "stepInputData": {
51
+ "queries": "{{steps.generate-queries.queries}}"
52
+ },
53
+ "creditCost": 2,
54
+ "next": { "stepId": "extract" }
55
+ },
56
+ {
57
+ "id": "extract",
58
+ "type": "aiAction",
59
+ "name": "Extract Entities",
60
+ "pipelineStepPrompt": {
61
+ "template": "Extract structured entity records from this raw source output.\n\nSource: {{steps.search.output}}\n\nEvery row MUST include a stable identifier (canonical URL, domain, or platform id) — this becomes the userKey for KG dedup. Drop rows you cannot uniquely identify.",
62
+ "responseStructure": {
63
+ "items": "array of { userKey: string (stable id e.g. canonical URL), rowData: { name, url, description, ...other fields } }"
64
+ }
65
+ },
66
+ "creditCost": 5,
67
+ "next": { "stepId": "save-to-kg" }
68
+ },
69
+ {
70
+ "id": "save-to-kg",
71
+ "type": "appAction",
72
+ "name": "Upsert to KG (status: new)",
73
+ "app": { "id": "kg", "actionId": "kg.upsert-rows", "source": "native" },
74
+ "stepInputData": {
75
+ "listKey": "{{input.target_list_key}}",
76
+ "rows": "{{steps.extract.items}}",
77
+ "mergeStrategy": "merge",
78
+ "status": "new"
79
+ },
80
+ "next": { "stepId": "done" }
81
+ },
82
+ {
83
+ "id": "done",
84
+ "type": "milestone",
85
+ "name": "Sourcing Done"
86
+ }
87
+ ]
88
+ }