@pixelml/agenticflow-cli 1.1.0 → 1.2.0

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 (36) hide show
  1. package/README.md +85 -167
  2. package/dist/cli/company-blueprints.d.ts +42 -0
  3. package/dist/cli/company-blueprints.d.ts.map +1 -0
  4. package/dist/cli/company-blueprints.js +96 -0
  5. package/dist/cli/company-blueprints.js.map +1 -0
  6. package/dist/cli/gateway/connector.d.ts +31 -37
  7. package/dist/cli/gateway/connector.d.ts.map +1 -1
  8. package/dist/cli/gateway/connector.js +13 -5
  9. package/dist/cli/gateway/connector.js.map +1 -1
  10. package/dist/cli/gateway/connectors/linear.d.ts +7 -14
  11. package/dist/cli/gateway/connectors/linear.d.ts.map +1 -1
  12. package/dist/cli/gateway/connectors/linear.js +37 -82
  13. package/dist/cli/gateway/connectors/linear.js.map +1 -1
  14. package/dist/cli/gateway/connectors/paperclip.d.ts +6 -10
  15. package/dist/cli/gateway/connectors/paperclip.d.ts.map +1 -1
  16. package/dist/cli/gateway/connectors/paperclip.js +37 -80
  17. package/dist/cli/gateway/connectors/paperclip.js.map +1 -1
  18. package/dist/cli/gateway/connectors/webhook.d.ts +6 -10
  19. package/dist/cli/gateway/connectors/webhook.d.ts.map +1 -1
  20. package/dist/cli/gateway/connectors/webhook.js +15 -27
  21. package/dist/cli/gateway/connectors/webhook.js.map +1 -1
  22. package/dist/cli/gateway/server.d.ts +13 -12
  23. package/dist/cli/gateway/server.d.ts.map +1 -1
  24. package/dist/cli/gateway/server.js +118 -81
  25. package/dist/cli/gateway/server.js.map +1 -1
  26. package/dist/cli/main.d.ts.map +1 -1
  27. package/dist/cli/main.js +308 -30
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/cli/playbooks.d.ts.map +1 -1
  30. package/dist/cli/playbooks.js +169 -42
  31. package/dist/cli/playbooks.js.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/cli/paperclip-bridge.d.ts +0 -15
  34. package/dist/cli/paperclip-bridge.d.ts.map +0 -1
  35. package/dist/cli/paperclip-bridge.js +0 -244
  36. package/dist/cli/paperclip-bridge.js.map +0 -1
package/README.md CHANGED
@@ -1,232 +1,150 @@
1
1
  # @pixelml/agenticflow-cli
2
2
 
3
- Command-line interface for the [AgenticFlow](https://agenticflow.ai) platform.
4
- Manage agents, workflows, connections and more — directly from your terminal.
3
+ Command-line interface for the [AgenticFlow](https://agenticflow.ai) platform — build agents, deploy them to external platforms, and receive tasks from any webhook source.
5
4
 
6
5
  Built on [`@pixelml/agenticflow-sdk`](https://www.npmjs.com/package/@pixelml/agenticflow-sdk).
7
6
 
8
- ## Installation
7
+ ## Install
9
8
 
10
9
  ```bash
11
10
  npm install -g @pixelml/agenticflow-cli
12
11
  ```
13
12
 
14
- Or run directly via `npx`:
13
+ Available as both `agenticflow` and `af` (short alias). Requires Node.js 18+.
15
14
 
16
- ```bash
17
- npx @pixelml/agenticflow-cli --help
18
- ```
19
-
20
- ## Authentication
21
-
22
- ### Interactive login
15
+ ## Quick Start
23
16
 
24
17
  ```bash
25
- agenticflow login
18
+ af login # Authenticate
19
+ af doctor --json # Verify setup
20
+ af agent list --fields id,name,model --json # List agents
21
+ af agent stream --agent-id <id> --body '{"messages":[{"content":"Hello!"}]}'
26
22
  ```
27
23
 
28
- Prompts for API key, workspace ID and project ID, then saves them to
29
- `~/.agenticflow/auth.json`.
24
+ > **AI agents**: Run `af context --json` for a machine-readable bootstrap guide.
30
25
 
31
- ### Environment variables
26
+ ## Authentication
32
27
 
33
28
  ```bash
34
- export AGENTICFLOW_API_KEY="sk-..."
35
- export AGENTICFLOW_WORKSPACE_ID="ws-..."
36
- export AGENTICFLOW_PROJECT_ID="proj-..."
29
+ af login # Interactive (saves to ~/.agenticflow/auth.json)
30
+ export AGENTICFLOW_API_KEY=<key> # Environment variable
31
+ af --api-key <key> agent list # CLI flag
32
+ af auth import-env --file .env # Import from .env
33
+ af whoami --json # Verify
37
34
  ```
38
35
 
39
- ### Import from `.env` file
40
-
41
- ```bash
42
- agenticflow auth import-env --file .env
43
- ```
36
+ ## Core Commands
44
37
 
45
- ### CLI flags
38
+ ### Agents
46
39
 
47
40
  ```bash
48
- agenticflow --api-key sk-... --workspace-id ws-... agent list
41
+ af agent list --fields id,name,model --json
42
+ af agent get --agent-id <id> --json
43
+ af agent create --body @agent.json --dry-run # Validate first
44
+ af agent create --body @agent.json
45
+ af agent stream --agent-id <id> --body @stream.json
46
+ af agent update --agent-id <id> --body @update.json
47
+ af agent delete --agent-id <id>
49
48
  ```
50
49
 
51
- **Resolution order:** CLI flag → environment variable → `~/.agenticflow/auth.json`
52
-
53
- ### Verify
50
+ ### Workflows
54
51
 
55
52
  ```bash
56
- agenticflow whoami
53
+ af workflow list --fields id,name,status --json
54
+ af workflow create --body @wf.json --dry-run
55
+ af workflow create --body @wf.json
56
+ af workflow run --workflow-id <id> --input @input.json
57
+ af workflow run-status --workflow-run-id <run_id> --json
58
+ af workflow validate --body @wf.json --local-only
57
59
  ```
58
60
 
59
- ```
60
- Profile: default
61
- API Key: present
62
- Workspace ID: ws-abc123
63
- Project ID: proj-xyz789
64
- Config: ~/.agenticflow/auth.json
65
- ```
61
+ ### Webhook Gateway
66
62
 
67
- ### Logout
63
+ Receive tasks from any platform and route them to AgenticFlow agents:
68
64
 
69
65
  ```bash
70
- agenticflow logout # remove all credentials
71
- agenticflow logout --profile staging # remove a single profile
66
+ af gateway serve --channels paperclip,linear,webhook --verbose
67
+ af gateway channels # List available channels
72
68
  ```
73
69
 
74
- ## Commands
75
-
76
- ### Cold start
77
-
70
+ **Generic webhook** — any system can send tasks:
78
71
  ```bash
79
- # Machine-discoverable first-touch path
80
- agenticflow discover --json
81
- agenticflow playbook first-touch
82
-
83
- # Prime local template cache for workflow/agent/workforce examples
84
- agenticflow templates sync --json
85
- agenticflow templates index --json
72
+ curl -X POST http://localhost:4100/webhook/webhook \
73
+ -H "Content-Type: application/json" \
74
+ -d '{"agent_id":"<id>","message":"Summarize Q4 report"}'
86
75
  ```
87
76
 
88
- ### agent
89
-
77
+ **Paperclip** — AI company orchestration:
90
78
  ```bash
91
- agenticflow agent list [--project-id <id>] [--search <q>] [--limit <n>] [--offset <n>]
92
- agenticflow agent get --agent-id <id>
93
- agenticflow agent create --body <json|@file>
94
- agenticflow agent update --agent-id <id> --body <json|@file>
95
- agenticflow agent delete --agent-id <id>
96
- agenticflow agent stream --agent-id <id> --body <json|@file>
97
- agenticflow agent reference-impact --agent-id <id>
79
+ af gateway serve --channels paperclip
98
80
  ```
99
81
 
100
- ### workflow
101
-
82
+ **Linear** — engineering project management:
102
83
  ```bash
103
- agenticflow workflow list [--workspace-id <id>] [--project-id <id>] [--search <q>] [--limit <n>]
104
- agenticflow workflow get --workflow-id <id>
105
- agenticflow workflow create --body <json|@file> [--workspace-id <id>]
106
- agenticflow workflow update --workflow-id <id> --body <json|@file> [--workspace-id <id>]
107
- agenticflow workflow delete --workflow-id <id> [--workspace-id <id>]
108
- agenticflow workflow run --workflow-id <id> [--input <json|@file>]
109
- agenticflow workflow run-status --workflow-run-id <id>
110
- agenticflow workflow list-runs --workflow-id <id> [--sort-order asc|desc]
111
- agenticflow workflow run-history --workflow-id <id>
112
- agenticflow workflow validate --body <json|@file> [--local-only]
113
- agenticflow workflow reference-impact --workflow-id <id>
114
- agenticflow workflow like-status --workflow-id <id>
84
+ af gateway serve --channels linear
115
85
  ```
116
86
 
117
- ### connections
118
-
119
- ```bash
120
- agenticflow connections list [--workspace-id <id>] [--project-id <id>]
121
- agenticflow connections create --body <json|@file> [--workspace-id <id>]
122
- agenticflow connections update --connection-id <id> --body <json|@file> [--workspace-id <id>]
123
- agenticflow connections delete --connection-id <id> [--workspace-id <id>]
124
- ```
87
+ ### Paperclip Integration
125
88
 
126
- ### node-types
89
+ Deploy agents to [Paperclip](https://github.com/paperclipai/paperclip) companies:
127
90
 
128
91
  ```bash
129
- agenticflow node-types list
130
- agenticflow node-types get --name <name>
131
- agenticflow node-types search --query <q>
132
- agenticflow node-types dynamic-options --name <name> --field-name <field> [--connection <name>]
92
+ af paperclip company create --name "My Company" --budget 100000
93
+ af paperclip deploy --agent-id <id> --role engineer
94
+ af paperclip goal create --title "Build the product" --level company
95
+ af paperclip issue create --title "Design landing page" --assignee <agent-id>
96
+ af paperclip connect # Wire agents to gateway
97
+ af paperclip agent wakeup --id <id> # Trigger execution
98
+ af paperclip dashboard # Monitor
133
99
  ```
134
100
 
135
- ### uploads
101
+ ### AI-Agent Discovery
136
102
 
137
103
  ```bash
138
- agenticflow uploads create --body <json|@file>
139
- agenticflow uploads status --session-id <id>
104
+ af context --json # Bootstrap guide with invariants and schemas
105
+ af schema agent # Payload schema with examples
106
+ af schema --json # List all resource schemas
107
+ af discover --json # Full capability index
108
+ af playbook quickstart # Step-by-step guide
140
109
  ```
141
110
 
142
- ### Generic API call
143
-
144
- For any endpoint not covered by resource commands:
111
+ ### Node Types & Connections
145
112
 
146
113
  ```bash
147
- # By operation ID
148
- agenticflow call --operation-id get_by_id_v1_agents__agent_id__get -P agent_id=abc123
149
-
150
- # By method + path
151
- agenticflow call --method GET --path /v1/agents/
152
-
153
- # With parameters and body
154
- agenticflow call --operation-id update_v1_agents__agent_id__put \
155
- -P agent_id=abc123 \
156
- --body '{"name": "Updated"}'
157
-
158
- # Query parameters
159
- agenticflow call --method GET --path /v1/agents/ -Q limit=10
160
-
161
- # Dry run (shows request without executing)
162
- agenticflow call --operation-id get_all_v1_agents__get --dry-run
114
+ af node-types search --query "llm" --json
115
+ af node-types get --name <name> --json
116
+ af connections list --limit 200 --json
163
117
  ```
164
118
 
165
- ### Utilities
119
+ ### Playbooks
166
120
 
167
121
  ```bash
168
- # Preflight diagnostics
169
- agenticflow doctor
170
-
171
- # Machine-readable capability discovery
172
- agenticflow discover --json
173
-
174
- # OpenAPI operation discovery
175
- agenticflow ops list [--public-only] [--tag <tag>] [--json]
176
- agenticflow ops show <operation-id>
177
-
178
- # Operation catalog
179
- agenticflow catalog export [--public-only]
180
- agenticflow catalog rank --task "send a message" [--top <n>]
181
-
182
- # Policy guardrails
183
- agenticflow policy show
184
- agenticflow policy init [--spend-ceiling <amount>]
185
-
186
- # Built-in playbooks
187
- agenticflow playbook [topic] [--list]
188
- # First-touch onboarding for cold agents
189
- agenticflow playbook first-touch
190
- agenticflow playbook --list --json
191
-
192
- # Template bootstrap cache for cold agents
193
- agenticflow templates sync [--dir .agenticflow/templates] [--limit 100] [--strict] [--json]
194
- agenticflow templates index [--dir .agenticflow/templates] [--json]
195
-
196
- # Duplicate resources from templates (web-like flow)
197
- agenticflow templates duplicate workflow --template-id <workflow_template_id> --json
198
- agenticflow templates duplicate agent --template-id <agent_template_id> --json
199
- # Build payloads only (no create)
200
- agenticflow templates duplicate workflow --template-id <id> --dry-run --json
201
- # Resolve template IDs from local cache first (cold/sandbox-friendly)
202
- agenticflow templates duplicate workflow --template-id <id> --cache-dir .agenticflow/templates --json
203
- agenticflow templates duplicate agent --template-file .agenticflow/templates/agent/<file>.json --cache-dir .agenticflow/templates --dry-run --json
122
+ af playbook quickstart # Zero to working agent in 5 min
123
+ af playbook gateway-setup # Webhook gateway setup
124
+ af playbook deploy-to-paperclip # Paperclip company setup
125
+ af playbook agent-channels # Connect Linear, webhooks, etc.
126
+ af playbook agent-build # Agent configuration
127
+ af playbook workflow-build # Workflow design
128
+ af playbook template-bootstrap # Start from templates
204
129
  ```
205
130
 
206
131
  ## Global Options
207
132
 
208
- | Flag | Description |
209
- |---|---|
210
- | `--api-key <key>` | API key for authentication |
211
- | `--workspace-id <id>` | Default workspace ID |
212
- | `--project-id <id>` | Default project ID |
213
- | `--spec-file <path>` | Path to OpenAPI spec JSON |
214
- | `--no-color` | Disable ANSI color output |
215
- | `--json` | Force JSON output |
216
- | `--version` | Show version |
217
- | `--help` | Show help |
218
-
219
- ## Output
220
-
221
- Use `--json` for machine-readable output. In JSON mode, errors use a structured envelope and exit non-zero.
222
-
223
- Create/update/run/stream commands perform local payload validation first. This returns `local_schema_validation_failed` immediately for malformed inputs, before any API request is sent.
224
-
225
- `templates duplicate` can resolve workflow templates from a local `templates sync` cache via `--cache-dir` before attempting API fetches. This improves cold-start behavior in restricted environments.
226
-
227
- ```bash
228
- agenticflow agent list | jq '.[] | .name'
229
- ```
133
+ | Flag | Purpose |
134
+ |------|---------|
135
+ | `--json` | Machine-readable JSON output |
136
+ | `--fields <fields>` | Filter output fields (saves context window) |
137
+ | `--dry-run` | Validate without executing |
138
+ | `--api-key <key>` | Override API key |
139
+ | `--workspace-id <id>` | Override workspace |
140
+ | `--project-id <id>` | Override project |
141
+
142
+ ## Links
143
+
144
+ - [AgenticFlow Platform](https://agenticflow.ai)
145
+ - [Documentation](https://docs.agenticflow.ai)
146
+ - [SDK Package](https://www.npmjs.com/package/@pixelml/agenticflow-sdk)
147
+ - [GitHub](https://github.com/PixelML/agenticflow-cli)
230
148
 
231
149
  ## License
232
150
 
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pre-built company blueprints for Paperclip deployment.
3
+ *
4
+ * Each blueprint defines a team of AgenticFlow agents that can be
5
+ * deployed to Paperclip as a ready-made company. Agents are sourced
6
+ * from the AF marketplace templates or the user's existing agents.
7
+ */
8
+ export interface AgentSlot {
9
+ /** Paperclip role */
10
+ role: string;
11
+ /** What this slot does */
12
+ title: string;
13
+ /** Human description */
14
+ description: string;
15
+ /** Suggested AF agent name to search for (from marketplace) */
16
+ suggestedTemplate?: string;
17
+ /** Allow user to skip this slot */
18
+ optional?: boolean;
19
+ }
20
+ export interface CompanyBlueprint {
21
+ /** Short slug */
22
+ id: string;
23
+ /** Display name */
24
+ name: string;
25
+ /** What this company does */
26
+ description: string;
27
+ /** Company goal */
28
+ goal: string;
29
+ /** Starter tasks */
30
+ starterTasks: Array<{
31
+ title: string;
32
+ description: string;
33
+ assigneeRole: string;
34
+ priority: string;
35
+ }>;
36
+ /** Agent slots to fill */
37
+ agents: AgentSlot[];
38
+ }
39
+ export declare const BLUEPRINTS: Record<string, CompanyBlueprint>;
40
+ export declare function listBlueprints(): CompanyBlueprint[];
41
+ export declare function getBlueprint(id: string): CompanyBlueprint | null;
42
+ //# sourceMappingURL=company-blueprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-blueprints.d.ts","sourceRoot":"","sources":["../../src/cli/company-blueprints.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpG,0BAA0B;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAiFvD,CAAC;AAEF,wBAAgB,cAAc,IAAI,gBAAgB,EAAE,CAEnD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAEhE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Pre-built company blueprints for Paperclip deployment.
3
+ *
4
+ * Each blueprint defines a team of AgenticFlow agents that can be
5
+ * deployed to Paperclip as a ready-made company. Agents are sourced
6
+ * from the AF marketplace templates or the user's existing agents.
7
+ */
8
+ export const BLUEPRINTS = {
9
+ "dev-shop": {
10
+ id: "dev-shop",
11
+ name: "Software Dev Shop",
12
+ description: "A lean engineering team that builds and ships software products.",
13
+ goal: "Build and ship high-quality software products",
14
+ agents: [
15
+ { role: "ceo", title: "CEO / Tech Lead", description: "Strategic direction, delegation, project oversight" },
16
+ { role: "engineer", title: "Senior Engineer", description: "Core development, architecture, code implementation" },
17
+ { role: "designer", title: "UX Designer", description: "UI/UX design, user research, visual design", optional: true },
18
+ { role: "qa", title: "QA Engineer", description: "Testing, bug finding, quality assurance", optional: true },
19
+ ],
20
+ starterTasks: [
21
+ { title: "Define product roadmap", description: "Create a 3-month product roadmap with milestones and deliverables.", assigneeRole: "ceo", priority: "high" },
22
+ { title: "Set up project architecture", description: "Design the technical architecture and set up the development environment.", assigneeRole: "engineer", priority: "high" },
23
+ ],
24
+ },
25
+ "marketing-agency": {
26
+ id: "marketing-agency",
27
+ name: "Marketing Agency",
28
+ description: "A full-service marketing team for content, social media, SEO, and campaigns.",
29
+ goal: "Drive brand awareness and customer acquisition through multi-channel marketing",
30
+ agents: [
31
+ { role: "ceo", title: "Agency Director", description: "Strategy, client relations, campaign oversight" },
32
+ { role: "cmo", title: "Content Strategist", description: "Content planning, blog posts, newsletters", suggestedTemplate: "Content Writer" },
33
+ { role: "designer", title: "Visual Designer", description: "Graphics, social media visuals, brand assets", suggestedTemplate: "Visual designer" },
34
+ { role: "researcher", title: "Market Researcher", description: "Competitive analysis, trend research", suggestedTemplate: "Ari, the Market Researcher", optional: true },
35
+ ],
36
+ starterTasks: [
37
+ { title: "Develop content calendar", description: "Create a 4-week content calendar covering blog posts, social media, and email newsletters.", assigneeRole: "cmo", priority: "high" },
38
+ { title: "Create brand guidelines", description: "Define color palette, typography, logo usage, and visual style for all marketing materials.", assigneeRole: "designer", priority: "high" },
39
+ { title: "Competitive landscape report", description: "Research top 5 competitors and summarize their positioning, pricing, and marketing strategies.", assigneeRole: "researcher", priority: "medium" },
40
+ ],
41
+ },
42
+ "sales-team": {
43
+ id: "sales-team",
44
+ name: "Sales Team",
45
+ description: "A sales operation with outreach, research, and customer management.",
46
+ goal: "Generate qualified leads and close deals",
47
+ agents: [
48
+ { role: "ceo", title: "Sales Director", description: "Pipeline management, strategy, team coordination" },
49
+ { role: "researcher", title: "Sales Researcher", description: "Lead research, company profiling, ICP matching", suggestedTemplate: "Olivia, the Sales Strategist" },
50
+ { role: "general", title: "SDR / Outreach", description: "Email outreach, follow-ups, scheduling", suggestedTemplate: "Rachel, the Support Agent" },
51
+ ],
52
+ starterTasks: [
53
+ { title: "Define ICP and target list", description: "Create ideal customer profile and build a list of 50 target companies.", assigneeRole: "researcher", priority: "high" },
54
+ { title: "Write outreach sequences", description: "Draft 3-step email sequences for cold outreach, follow-up, and re-engagement.", assigneeRole: "general", priority: "high" },
55
+ ],
56
+ },
57
+ "content-studio": {
58
+ id: "content-studio",
59
+ name: "Content Studio",
60
+ description: "A creative content production team for video, social, and written content.",
61
+ goal: "Produce high-quality content across video, social media, and written formats",
62
+ agents: [
63
+ { role: "ceo", title: "Creative Director", description: "Content strategy, quality control, brand voice" },
64
+ { role: "cmo", title: "Social Media Manager", description: "Social media scheduling, engagement, analytics", suggestedTemplate: "Mason, the Social Media Manager" },
65
+ { role: "engineer", title: "Content Writer", description: "Blog posts, articles, scripts, copy", suggestedTemplate: "Content Writer" },
66
+ { role: "designer", title: "Visual Creator", description: "Graphics, thumbnails, social visuals", suggestedTemplate: "Visual designer", optional: true },
67
+ ],
68
+ starterTasks: [
69
+ { title: "Create content pillars", description: "Define 3-5 content themes/pillars that align with the brand and audience.", assigneeRole: "ceo", priority: "high" },
70
+ { title: "Write 5 blog posts", description: "Draft 5 blog posts of 800-1200 words each on the defined content pillars.", assigneeRole: "engineer", priority: "high" },
71
+ { title: "Design social media templates", description: "Create reusable templates for Instagram, Twitter, and LinkedIn posts.", assigneeRole: "designer", priority: "medium" },
72
+ ],
73
+ },
74
+ "support-center": {
75
+ id: "support-center",
76
+ name: "Customer Support Center",
77
+ description: "A customer support team with triage, resolution, and escalation.",
78
+ goal: "Provide fast, helpful customer support and maintain high satisfaction",
79
+ agents: [
80
+ { role: "ceo", title: "Support Manager", description: "Escalation handling, SLA monitoring, team coordination" },
81
+ { role: "general", title: "Support Agent", description: "Ticket triage, first response, common issue resolution", suggestedTemplate: "Rachel, the Support Agent" },
82
+ { role: "researcher", title: "Knowledge Base Manager", description: "FAQ maintenance, documentation, self-service content", optional: true },
83
+ ],
84
+ starterTasks: [
85
+ { title: "Set up support playbook", description: "Create a support playbook with common issues, resolution steps, and escalation criteria.", assigneeRole: "ceo", priority: "high" },
86
+ { title: "Draft FAQ document", description: "Write an FAQ with the top 20 most common customer questions and answers.", assigneeRole: "researcher", priority: "medium" },
87
+ ],
88
+ },
89
+ };
90
+ export function listBlueprints() {
91
+ return Object.values(BLUEPRINTS);
92
+ }
93
+ export function getBlueprint(id) {
94
+ return BLUEPRINTS[id] ?? null;
95
+ }
96
+ //# sourceMappingURL=company-blueprints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-blueprints.js","sourceRoot":"","sources":["../../src/cli/company-blueprints.ts"],"names":[],"mappings":"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"}
@@ -1,51 +1,45 @@
1
1
  /**
2
- * Channel connector interface — inspired by hermes-agent's platform adapters.
2
+ * Channel connector interface.
3
3
  *
4
- * A "channel" is any external platform that can send tasks to AgenticFlow
5
- * agents: Paperclip, Linear, GitHub, Slack, webhooks, etc.
4
+ * A connector is a THIN protocol translator between an external platform
5
+ * and the AgenticFlow runtime API. It does NOT contain business logic —
6
+ * the runtime handles agent execution, thread persistence, RAG, tools, etc.
6
7
  *
7
- * Each connector normalizes platform-specific events into a standard task
8
- * and posts results back to the originating channel.
8
+ * Connector responsibilities:
9
+ * 1. Parse platform webhook { afAgentId, message, threadId }
10
+ * 2. Post agent response back to platform
11
+ *
12
+ * Runtime responsibilities (NOT the connector's job):
13
+ * - Agent execution, streaming, tool calling
14
+ * - Thread/session persistence
15
+ * - Knowledge retrieval, sub-agents
16
+ * - Credit management, permissions
9
17
  */
10
- /** Platform-agnostic task representation (the "MessageEvent" equivalent). */
11
- export interface NormalizedTask {
12
- /** Stable UUID for AF thread continuity across messages. */
13
- threadId: string;
14
- /** Human-readable identifier, e.g. "PIX-1", "LIN-123". */
15
- taskIdentifier: string;
16
- /** The full message to send to the AF agent. */
17
- message: string;
18
+ /** What the connector extracts from a platform webhook. */
19
+ export interface InboundTask {
18
20
  /** AF agent ID to invoke. */
19
21
  afAgentId: string;
20
- /** Override AF stream URL. */
22
+ /** Message to send to the agent. */
23
+ message: string;
24
+ /** Thread ID for conversation continuity (reuse across calls for same task). */
25
+ threadId?: string;
26
+ /** Override AF stream URL (if stored in platform metadata). */
21
27
  afStreamUrl?: string;
22
- /** Source channel info (for routing responses back). */
23
- source: {
24
- channel: string;
25
- chatId: string;
26
- userId?: string;
27
- userName?: string;
28
- };
29
- /** Opaque platform data the connector needs in postResult. */
30
- platformContext: Record<string, unknown>;
28
+ /** Human-readable task label for logging. */
29
+ label: string;
30
+ /** Opaque data the connector needs to post results back. */
31
+ replyContext: Record<string, unknown>;
31
32
  }
32
- /** Channel connector for receiving tasks from an external platform. */
33
+ /** Channel connector thin protocol translator. */
33
34
  export interface ChannelConnector {
34
- /** Short slug: paperclip, linear, github, webhook, etc. */
35
+ /** Short slug: paperclip, linear, github, webhook */
35
36
  readonly name: string;
36
- /** Human-readable display name. */
37
- readonly displayName: string;
38
37
  /**
39
- * Parse incoming webhook into a NormalizedTask.
40
- * Return null to skip (irrelevant event type).
41
- * Throw to reject with 400.
38
+ * Parse incoming webhook InboundTask.
39
+ * Return null to acknowledge but skip.
42
40
  */
43
- parseWebhook(headers: Record<string, string | string[] | undefined>, body: string): Promise<NormalizedTask | null>;
44
- /** Post agent response back to the originating channel. */
45
- postResult(task: NormalizedTask, resultText: string): Promise<void>;
46
- /** Optional: check if the channel is reachable. */
47
- healthCheck?(): Promise<boolean>;
41
+ parseWebhook(headers: Record<string, string | string[] | undefined>, body: string): Promise<InboundTask | null>;
42
+ /** Post agent response back to originating platform. */
43
+ postResult(task: InboundTask, resultText: string): Promise<void>;
48
44
  }
49
- /** Registry of available channel connectors. */
50
- export type ConnectorRegistry = Map<string, ChannelConnector>;
51
45
  //# sourceMappingURL=connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/cli/gateway/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAElC,2DAA2D;IAC3D,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE,mDAAmD;IACnD,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAClC;AAED,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/cli/gateway/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACtD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE/B,wDAAwD;IACxD,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE"}
@@ -1,11 +1,19 @@
1
1
  /**
2
- * Channel connector interface — inspired by hermes-agent's platform adapters.
2
+ * Channel connector interface.
3
3
  *
4
- * A "channel" is any external platform that can send tasks to AgenticFlow
5
- * agents: Paperclip, Linear, GitHub, Slack, webhooks, etc.
4
+ * A connector is a THIN protocol translator between an external platform
5
+ * and the AgenticFlow runtime API. It does NOT contain business logic —
6
+ * the runtime handles agent execution, thread persistence, RAG, tools, etc.
6
7
  *
7
- * Each connector normalizes platform-specific events into a standard task
8
- * and posts results back to the originating channel.
8
+ * Connector responsibilities:
9
+ * 1. Parse platform webhook { afAgentId, message, threadId }
10
+ * 2. Post agent response back to platform
11
+ *
12
+ * Runtime responsibilities (NOT the connector's job):
13
+ * - Agent execution, streaming, tool calling
14
+ * - Thread/session persistence
15
+ * - Knowledge retrieval, sub-agents
16
+ * - Credit management, permissions
9
17
  */
10
18
  export {};
11
19
  //# sourceMappingURL=connector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/cli/gateway/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/cli/gateway/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -1,27 +1,20 @@
1
1
  /**
2
- * Linear channel connector.
2
+ * Linear channel connector (thin).
3
3
  *
4
- * Receives Linear webhooks (issue.create, issue.update, comment.create),
5
- * fetches issue context, and posts results back as comments.
6
- *
7
- * Setup: In Linear → Settings → API → Webhooks, add:
8
- * URL: https://your-gateway/webhook/linear
9
- * Events: Issues (created, updated), Comments (created)
4
+ * Translates Linear webhooks AF runtime call.
5
+ * Linear webhook events: issue.create, issue.update, comment.create.
10
6
  */
11
- import type { ChannelConnector, NormalizedTask } from "../connector.js";
7
+ import type { ChannelConnector, InboundTask } from "../connector.js";
12
8
  export interface LinearConnectorConfig {
13
9
  linearApiKey: string;
14
- /** Map of Linear team key → AF agent ID. e.g. { "ENG": "af-agent-uuid" } */
10
+ /** Team key → AF agent ID. e.g. { "ENG": "af-uuid" } */
15
11
  agentMapping: Record<string, string>;
16
- /** Optional: AF stream URL override per agent. */
17
- streamUrlMapping?: Record<string, string>;
18
12
  }
19
13
  export declare class LinearConnector implements ChannelConnector {
20
14
  private config;
21
15
  readonly name = "linear";
22
- readonly displayName = "Linear";
23
16
  constructor(config: LinearConnectorConfig);
24
- parseWebhook(_headers: Record<string, string | string[] | undefined>, body: string): Promise<NormalizedTask | null>;
25
- postResult(task: NormalizedTask, resultText: string): Promise<void>;
17
+ parseWebhook(_headers: Record<string, string | string[] | undefined>, body: string): Promise<InboundTask | null>;
18
+ postResult(task: InboundTask, resultText: string): Promise<void>;
26
19
  }
27
20
  //# sourceMappingURL=linear.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../../src/cli/gateway/connectors/linear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAgDD,qBAAa,eAAgB,YAAW,gBAAgB;IAI1C,OAAO,CAAC,MAAM;IAH1B,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;gBAEZ,MAAM,EAAE,qBAAqB;IAE3C,YAAY,CAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA4E3B,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAU1E"}
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../../src/cli/gateway/connectors/linear.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAcD,qBAAa,eAAgB,YAAW,gBAAgB;IAG1C,OAAO,CAAC,MAAM;IAF1B,QAAQ,CAAC,IAAI,YAAY;gBAEL,MAAM,EAAE,qBAAqB;IAE3C,YAAY,CAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA+CxB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUvE"}