@ariaflowagents/starters 0.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.
- package/README.md +157 -0
- package/package.json +36 -0
- package/starters/bank-hybrid/.ariaflow/flow/bank-balance-flow.json +26 -0
- package/starters/bank-hybrid/.ariaflow/flow/bank-dispute-flow.json +32 -0
- package/starters/bank-hybrid/.ariaflow/prompts/bank-balance.md +3 -0
- package/starters/bank-hybrid/.ariaflow/prompts/bank-dispute.md +4 -0
- package/starters/bank-hybrid/.ariaflow/prompts/bank-triage.md +8 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity/index.ts +21 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity/tool.json +6 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity_balance/index.ts +21 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity_balance/tool.json +6 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity_dispute/index.ts +21 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_identity_dispute/tool.json +6 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_transaction/index.ts +21 -0
- package/starters/bank-hybrid/.ariaflow/tools/collect_transaction/tool.json +6 -0
- package/starters/bank-hybrid/.ariaflow/tools/confirm_dispute/index.ts +22 -0
- package/starters/bank-hybrid/.ariaflow/tools/confirm_dispute/tool.json +6 -0
- package/starters/bank-hybrid/.ariaflow/tools/lookup_balance/index.ts +25 -0
- package/starters/bank-hybrid/.ariaflow/tools/lookup_balance/tool.json +6 -0
- package/starters/bank-hybrid/README.md +36 -0
- package/starters/bank-hybrid/ariaflow.jsonc +42 -0
- package/starters/basic/.ariaflow/prompts/support.md +4 -0
- package/starters/basic/.ariaflow/skill/shipping/SKILL.md +17 -0
- package/starters/basic/.ariaflow/tools/echo/index.ts +14 -0
- package/starters/basic/.ariaflow/tools/echo/tool.json +6 -0
- package/starters/basic/ariaflow.jsonc +27 -0
- package/starters/sales/.ariaflow/data/products.json +44 -0
- package/starters/sales/.ariaflow/prompts/sales-closer.md +6 -0
- package/starters/sales/.ariaflow/prompts/sales-rep.md +8 -0
- package/starters/sales/.ariaflow/prompts/sales-triage.md +8 -0
- package/starters/sales/.ariaflow/tools/product_catalog/index.ts +64 -0
- package/starters/sales/.ariaflow/tools/product_catalog/tool.json +6 -0
- package/starters/sales/README.md +28 -0
- package/starters/sales/ariaflow.jsonc +40 -0
- package/starters/support/.ariaflow/prompts/support.md +7 -0
- package/starters/support/.ariaflow/tools/create_ticket/index.ts +23 -0
- package/starters/support/.ariaflow/tools/create_ticket/tool.json +6 -0
- package/starters/support/README.md +26 -0
- package/starters/support/ariaflow.jsonc +18 -0
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# @ariaflowagents/starters
|
|
2
|
+
|
|
3
|
+
Production-ready AriaFlow starter packs for common use cases.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @ariaflowagents/starters @ariaflowagents/config @ai-sdk/openai
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Available Starters
|
|
12
|
+
|
|
13
|
+
| Starter | Description | Tags |
|
|
14
|
+
|---------|-------------|------|
|
|
15
|
+
| [basic](./starters/basic/) | Simple LLM agent with echo tool and skill loader | starter, beginner, template |
|
|
16
|
+
| [sales](./starters/sales/) | Multi-agent sales system with product catalog | sales, ecommerce, lead-qualification |
|
|
17
|
+
| [support](./starters/support/) | Customer support with ticket creation | support, ticketing, helpdesk |
|
|
18
|
+
| [bank-hybrid](./starters/bank-hybrid/) | Banking triage with balance/dispute flows | banking, finance, hybrid-flow |
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
Install the starter package and extend it:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @ariaflowagents/starters
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Create your `ariaflow.jsonc`:
|
|
29
|
+
|
|
30
|
+
```jsonc
|
|
31
|
+
{
|
|
32
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
33
|
+
"extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc"
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Run it:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import dotenv from 'dotenv';
|
|
41
|
+
import { openai } from '@ai-sdk/openai';
|
|
42
|
+
import { loadAriaflowConfig, createRuntimeFromConfig } from '@ariaflowagents/config';
|
|
43
|
+
|
|
44
|
+
dotenv.config();
|
|
45
|
+
|
|
46
|
+
const loaded = await loadAriaflowConfig({
|
|
47
|
+
configPath: './ariaflow.jsonc',
|
|
48
|
+
modelRegistry: {
|
|
49
|
+
default: openai('gpt-4o-mini') as any,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const runtime = createRuntimeFromConfig(loaded);
|
|
54
|
+
|
|
55
|
+
for await (const part of runtime.stream({ input: 'Hello!' })) {
|
|
56
|
+
if (part.type === 'text-delta') {
|
|
57
|
+
process.stdout.write(part.text);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Extend a Starter
|
|
63
|
+
|
|
64
|
+
Create your own config that extends the starter:
|
|
65
|
+
|
|
66
|
+
```jsonc
|
|
67
|
+
{
|
|
68
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
69
|
+
"extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc",
|
|
70
|
+
"runtime": {
|
|
71
|
+
"defaultAgent": "sales-triage"
|
|
72
|
+
},
|
|
73
|
+
"agents": {
|
|
74
|
+
"sales-triage": {
|
|
75
|
+
"prompt": "You are an ENTERPRISE sales agent for Fortune 500 companies. Ask about team size and budget immediately."
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Add Custom Tools
|
|
82
|
+
|
|
83
|
+
```jsonc
|
|
84
|
+
{
|
|
85
|
+
"extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc",
|
|
86
|
+
"tools": {
|
|
87
|
+
"my_custom_tool": {
|
|
88
|
+
"type": "module",
|
|
89
|
+
"entry": "./tools/my-custom-tool/index.ts"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"agents": {
|
|
93
|
+
"sales-agent": {
|
|
94
|
+
"tools": ["product_catalog", "my_custom_tool"]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Publish Your Own Starter
|
|
101
|
+
|
|
102
|
+
Create a starter package:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
my-starter/
|
|
106
|
+
├── package.json
|
|
107
|
+
├── ariaflow.jsonc
|
|
108
|
+
├── .ariaflow/
|
|
109
|
+
│ ├── prompts/
|
|
110
|
+
│ ├── tools/
|
|
111
|
+
│ └── flows/
|
|
112
|
+
└── README.md
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"name": "@myorg/ariaflow-my-starter",
|
|
118
|
+
"version": "1.0.0",
|
|
119
|
+
"main": "ariaflow.jsonc"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npm publish
|
|
125
|
+
Structure
|
|
126
|
+
|
|
127
|
+
Each starter contains```
|
|
128
|
+
|
|
129
|
+
## Directory:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
starter-name/
|
|
133
|
+
├── ariaflow.jsonc # Main config file
|
|
134
|
+
├── .ariaflow/
|
|
135
|
+
│ ├── prompts/ # System prompts (.md)
|
|
136
|
+
│ ├── tools/ # Tool implementations
|
|
137
|
+
│ │ └── tool-name/
|
|
138
|
+
│ │ ├── index.ts
|
|
139
|
+
│ │ └── tool.json
|
|
140
|
+
│ └── flows/ # Flow definitions (.json)
|
|
141
|
+
└── README.md
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## CLI Testing
|
|
145
|
+
|
|
146
|
+
Use the config package to test starters:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
cd packages/ariaflow-config
|
|
150
|
+
npx tsx examples/run-pack.ts sales
|
|
151
|
+
npx tsx examples/run-pack.ts support
|
|
152
|
+
npx tsx examples/run-pack.ts bank-hybrid
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ariaflowagents/starters",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Production-ready AriaFlow starter packs - sales, support, banking, and more",
|
|
5
|
+
"main": "starters/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./starters/index.js",
|
|
8
|
+
"./sales": "./starters/sales/ariaflow.jsonc",
|
|
9
|
+
"./support": "./starters/support/ariaflow.jsonc",
|
|
10
|
+
"./bank-hybrid": "./starters/bank-hybrid/ariaflow.jsonc",
|
|
11
|
+
"./basic": "./starters/basic/ariaflow.jsonc"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"ariaflow",
|
|
15
|
+
"ai-agents",
|
|
16
|
+
"conversational-ai",
|
|
17
|
+
"sales",
|
|
18
|
+
"support",
|
|
19
|
+
"banking",
|
|
20
|
+
"starter",
|
|
21
|
+
"template"
|
|
22
|
+
],
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/anomalyco/aria-flow",
|
|
27
|
+
"directory": "packages/ariaflow-starters"
|
|
28
|
+
},
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/anomalyco/aria-flow/issues"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://ariaflow.ai/docs/starters",
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "bank-balance-flow",
|
|
3
|
+
"entry": "verify_identity",
|
|
4
|
+
"defaultRolePrompt": "You are a banking balance specialist. Follow the flow strictly.",
|
|
5
|
+
"nodes": [
|
|
6
|
+
{
|
|
7
|
+
"id": "verify_identity",
|
|
8
|
+
"prompt": "Ask for the customer's full name, last 4 digits of their account, and ZIP code. Use the collect_identity_balance tool once provided.",
|
|
9
|
+
"tools": ["collect_identity_balance"],
|
|
10
|
+
"maxTurns": 3
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "lookup_balance",
|
|
14
|
+
"prompt": "Confirm the account and ask if they want current balance, recent transactions, or both. Use the lookup_balance tool once provided.",
|
|
15
|
+
"tools": ["lookup_balance"],
|
|
16
|
+
"maxTurns": 3
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "summary",
|
|
20
|
+
"prompt": "Share the balance and recent activity summary, then ask if they need anything else.",
|
|
21
|
+
"postActions": [
|
|
22
|
+
{ "type": "end", "reason": "balance_shared" }
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "bank-dispute-flow",
|
|
3
|
+
"entry": "verify_identity",
|
|
4
|
+
"defaultRolePrompt": "You are a banking dispute specialist. Follow the flow strictly.",
|
|
5
|
+
"nodes": [
|
|
6
|
+
{
|
|
7
|
+
"id": "verify_identity",
|
|
8
|
+
"prompt": "Ask for the customer's full name, last 4 digits of their account, and ZIP code. Use the collect_identity_dispute tool once provided.",
|
|
9
|
+
"tools": ["collect_identity_dispute"],
|
|
10
|
+
"maxTurns": 3
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "collect_transaction",
|
|
14
|
+
"prompt": "Ask for the disputed transaction details: date, merchant, and amount. Use the collect_transaction tool once provided.",
|
|
15
|
+
"tools": ["collect_transaction"],
|
|
16
|
+
"maxTurns": 3
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "confirm_dispute",
|
|
20
|
+
"prompt": "Summarize the dispute details and ask the customer to confirm. If they confirm, use the confirm_dispute tool.",
|
|
21
|
+
"tools": ["confirm_dispute"],
|
|
22
|
+
"maxTurns": 3
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "complete",
|
|
26
|
+
"prompt": "Provide the dispute reference ID and explain next steps and timelines.",
|
|
27
|
+
"postActions": [
|
|
28
|
+
{ "type": "end", "reason": "dispute_submitted" }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
You are a banking triage agent.
|
|
2
|
+
|
|
3
|
+
Your job is to route customers to the correct flow.
|
|
4
|
+
- If the customer is disputing a charge, transaction, or suspected fraud, handoff to bank-dispute-flow.
|
|
5
|
+
- If the customer wants balance info or recent activity, handoff to bank-balance-flow.
|
|
6
|
+
- Ask 1 clarifying question if unsure, then route.
|
|
7
|
+
|
|
8
|
+
Keep responses concise and compliant.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Collect and verify customer identity for banking flows',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
fullName: z.string().describe('Full legal name'),
|
|
9
|
+
last4: z.string().describe('Last 4 digits of account'),
|
|
10
|
+
zip: z.string().describe('Billing ZIP code'),
|
|
11
|
+
}),
|
|
12
|
+
execute: async ({ fullName, last4, zip }) => {
|
|
13
|
+
return createFlowTransition('collect_transaction', {
|
|
14
|
+
fullName,
|
|
15
|
+
last4,
|
|
16
|
+
zip,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default tool;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Collect and verify identity for balance flow',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
fullName: z.string().describe('Full legal name'),
|
|
9
|
+
last4: z.string().describe('Last 4 digits of account'),
|
|
10
|
+
zip: z.string().describe('Billing ZIP code'),
|
|
11
|
+
}),
|
|
12
|
+
execute: async ({ fullName, last4, zip }) => {
|
|
13
|
+
return createFlowTransition('lookup_balance', {
|
|
14
|
+
fullName,
|
|
15
|
+
last4,
|
|
16
|
+
zip,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default tool;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Collect and verify identity for dispute flow',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
fullName: z.string().describe('Full legal name'),
|
|
9
|
+
last4: z.string().describe('Last 4 digits of account'),
|
|
10
|
+
zip: z.string().describe('Billing ZIP code'),
|
|
11
|
+
}),
|
|
12
|
+
execute: async ({ fullName, last4, zip }) => {
|
|
13
|
+
return createFlowTransition('collect_transaction', {
|
|
14
|
+
fullName,
|
|
15
|
+
last4,
|
|
16
|
+
zip,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default tool;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Collect disputed transaction details',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
date: z.string().describe('Transaction date'),
|
|
9
|
+
merchant: z.string().describe('Merchant name'),
|
|
10
|
+
amount: z.string().describe('Transaction amount'),
|
|
11
|
+
}),
|
|
12
|
+
execute: async ({ date, merchant, amount }) => {
|
|
13
|
+
return createFlowTransition('confirm_dispute', {
|
|
14
|
+
date,
|
|
15
|
+
merchant,
|
|
16
|
+
amount,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default tool;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Confirm the dispute details and finalize submission',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
confirmed: z.boolean().describe('Customer confirmed details'),
|
|
9
|
+
}),
|
|
10
|
+
execute: async ({ confirmed }) => {
|
|
11
|
+
if (!confirmed) {
|
|
12
|
+
return { message: 'Please clarify what needs to be corrected.' };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const referenceId = `DSP-${Date.now().toString(36).toUpperCase()}`;
|
|
16
|
+
return createFlowTransition('complete', {
|
|
17
|
+
referenceId,
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default tool;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createFlowTransition } from '@ariaflowagents/core';
|
|
3
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
4
|
+
|
|
5
|
+
export const tool: ToolDefinition = {
|
|
6
|
+
description: 'Mock balance lookup and recent activity',
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
requestType: z.enum(['balance', 'transactions', 'both']).describe('What to return'),
|
|
9
|
+
}),
|
|
10
|
+
execute: async ({ requestType }) => {
|
|
11
|
+
const balance = '$2,845.20';
|
|
12
|
+
const transactions = [
|
|
13
|
+
{ date: '2026-01-12', merchant: 'Market Street Coffee', amount: '$6.85' },
|
|
14
|
+
{ date: '2026-01-10', merchant: 'Streamline Transit', amount: '$24.00' },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
return createFlowTransition('summary', {
|
|
18
|
+
requestType,
|
|
19
|
+
balance,
|
|
20
|
+
transactions,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default tool;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Banking Hybrid Starter
|
|
2
|
+
|
|
3
|
+
Triage agent routing to balance inquiry and dispute flows with hybrid conversational mode.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Install:
|
|
8
|
+
```bash
|
|
9
|
+
npm install @ariaflowagents/starters
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Extend in your `ariaflow.jsonc`:
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
16
|
+
"extends": "./node_modules/@ariaflowagents/starters/bank-hybrid/ariaflow.jsonc"
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Included Agents
|
|
21
|
+
|
|
22
|
+
- `bank-triage` (triage) - Routes to specialist flows
|
|
23
|
+
- `bank-dispute-flow` (flow) - Card dispute intake with identity/transaction collection
|
|
24
|
+
- `bank-balance-flow` (flow) - Balance inquiry with identity verification
|
|
25
|
+
|
|
26
|
+
## Flow Mode
|
|
27
|
+
|
|
28
|
+
Both flows use `hybrid` mode - can handle off-topic questions while in flow.
|
|
29
|
+
|
|
30
|
+
## Tools
|
|
31
|
+
|
|
32
|
+
- `collect_identity` - Identity verification
|
|
33
|
+
- `collect_identity_balance` / `collect_identity_dispute` - Specialized collection
|
|
34
|
+
- `lookup_balance` - Account balance lookup
|
|
35
|
+
- `collect_transaction` - Transaction details
|
|
36
|
+
- `confirm_dispute` - Dispute confirmation
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
3
|
+
"runtime": {
|
|
4
|
+
"defaultAgent": "bank-triage",
|
|
5
|
+
"defaultModel": "default"
|
|
6
|
+
},
|
|
7
|
+
"models": {
|
|
8
|
+
"default": "openai:gpt-4o-mini"
|
|
9
|
+
},
|
|
10
|
+
"agents": {
|
|
11
|
+
"bank-triage": {
|
|
12
|
+
"type": "triage",
|
|
13
|
+
"description": "Routes customers to the correct banking flow",
|
|
14
|
+
"prompt": { "file": "./.ariaflow/prompts/bank-triage.md" },
|
|
15
|
+
"routes": [
|
|
16
|
+
{
|
|
17
|
+
"agentId": "bank-dispute-flow",
|
|
18
|
+
"description": "Handles card or transaction disputes"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"agentId": "bank-balance-flow",
|
|
22
|
+
"description": "Handles balance checks and recent activity"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"defaultAgent": "bank-balance-flow"
|
|
26
|
+
},
|
|
27
|
+
"bank-dispute-flow": {
|
|
28
|
+
"type": "flow",
|
|
29
|
+
"description": "Guided dispute intake flow",
|
|
30
|
+
"prompt": { "file": "./.ariaflow/prompts/bank-dispute.md" },
|
|
31
|
+
"flowRef": "bank-dispute-flow",
|
|
32
|
+
"mode": "hybrid"
|
|
33
|
+
},
|
|
34
|
+
"bank-balance-flow": {
|
|
35
|
+
"type": "flow",
|
|
36
|
+
"description": "Guided balance inquiry flow",
|
|
37
|
+
"prompt": { "file": "./.ariaflow/prompts/bank-balance.md" },
|
|
38
|
+
"flowRef": "bank-balance-flow",
|
|
39
|
+
"mode": "hybrid"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: shipping
|
|
3
|
+
description: Provide shipping status guidelines and escalation steps for delayed packages.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
domain: logistics
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Shipping Support Guidelines
|
|
10
|
+
|
|
11
|
+
Use this when a customer asks about shipping delays.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
1. Confirm the order id and shipping address.
|
|
15
|
+
2. Check current carrier status.
|
|
16
|
+
3. If delay exceeds 5 business days, offer escalation.
|
|
17
|
+
4. Provide a clear next update window.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
3
|
+
|
|
4
|
+
export const tool: ToolDefinition = {
|
|
5
|
+
description: 'Echo back the provided text',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
text: z.string().describe('Text to echo back'),
|
|
8
|
+
}),
|
|
9
|
+
execute: async ({ text }) => {
|
|
10
|
+
return { echoed: text };
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default tool;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
3
|
+
"runtime": {
|
|
4
|
+
"defaultAgent": "support",
|
|
5
|
+
"defaultModel": "default"
|
|
6
|
+
},
|
|
7
|
+
"permissions": {
|
|
8
|
+
"skill": "allow"
|
|
9
|
+
},
|
|
10
|
+
"models": {
|
|
11
|
+
"default": "openai:gpt-4o-mini"
|
|
12
|
+
},
|
|
13
|
+
"agents": {
|
|
14
|
+
"support": {
|
|
15
|
+
"type": "llm",
|
|
16
|
+
"description": "Handles general customer support questions",
|
|
17
|
+
"prompt": { "file": "./.ariaflow/prompts/support.md" },
|
|
18
|
+
"tools": ["echo", "skill"]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"tools": {
|
|
22
|
+
"skill": {
|
|
23
|
+
"type": "skill-loader",
|
|
24
|
+
"paths": ["./.ariaflow/skill"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"products": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Premium Software Suite",
|
|
5
|
+
"description": "All-in-one business management platform",
|
|
6
|
+
"key_benefits": [
|
|
7
|
+
"Increases productivity by 40%",
|
|
8
|
+
"Reduces operational costs",
|
|
9
|
+
"Seamless integration"
|
|
10
|
+
],
|
|
11
|
+
"price_range": "$99-299/month",
|
|
12
|
+
"target_customers": "SMB, Enterprise"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"pricing": {
|
|
16
|
+
"starter": {
|
|
17
|
+
"price": 99,
|
|
18
|
+
"features": [
|
|
19
|
+
"Basic CRM",
|
|
20
|
+
"Email integration"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"professional": {
|
|
24
|
+
"price": 199,
|
|
25
|
+
"features": [
|
|
26
|
+
"Advanced analytics",
|
|
27
|
+
"Custom workflows"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"enterprise": {
|
|
31
|
+
"price": 299,
|
|
32
|
+
"features": [
|
|
33
|
+
"White-label",
|
|
34
|
+
"API access",
|
|
35
|
+
"Dedicated support"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"objection_handlers": {
|
|
40
|
+
"too_expensive": "I understand cost is important. Let's look at the ROI - most clients see 3x return in the first 6 months.",
|
|
41
|
+
"need_time_to_think": "I appreciate you want to make a thoughtful decision. What specific concerns can I address right now?",
|
|
42
|
+
"happy_with_current_solution": "That's great! What would need to change for you to consider switching?"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
You are a sales closer focused on pricing, objections, and next steps.
|
|
2
|
+
|
|
3
|
+
Use the product_catalog tool to confirm pricing ranges or key benefits.
|
|
4
|
+
- Address objections with empathy and clear reasoning.
|
|
5
|
+
- Propose concrete next steps (demo, trial, or quote).
|
|
6
|
+
- Summarize agreed points and ask for confirmation.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
You are a sales representative focused on discovery and product fit.
|
|
2
|
+
|
|
3
|
+
Use the product_catalog tool to answer questions about products, features, and benefits.
|
|
4
|
+
- Ask about company size, industry, and goals.
|
|
5
|
+
- Recommend 1-2 products that best match their needs.
|
|
6
|
+
- Keep the tone consultative and helpful.
|
|
7
|
+
|
|
8
|
+
When you identify pricing or objections, suggest a handoff to sales-closer.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
You are the sales triage agent.
|
|
2
|
+
|
|
3
|
+
Your job is to greet prospects, clarify their needs, and route them to the right specialist.
|
|
4
|
+
- If they want product details, use the handoff tool to route to sales-rep.
|
|
5
|
+
- If they are asking about pricing, objections, or next steps, handoff to sales-closer.
|
|
6
|
+
- If unsure, ask 1-2 clarifying questions before routing.
|
|
7
|
+
|
|
8
|
+
Keep responses concise and professional.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
6
|
+
|
|
7
|
+
const dataPath = join(dirname(fileURLToPath(import.meta.url)), '../../data/products.json');
|
|
8
|
+
let cachedData: { products?: any[]; pricing?: unknown; objection_handlers?: unknown } | null = null;
|
|
9
|
+
|
|
10
|
+
const inputSchema = z.object({
|
|
11
|
+
query: z.string().optional().describe('Search term for product name or description'),
|
|
12
|
+
includePricing: z.boolean().optional().describe('Include pricing overview'),
|
|
13
|
+
includeObjections: z.boolean().optional().describe('Include objection handling guidance'),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
function normalize(input: string) {
|
|
17
|
+
return input.toLowerCase().trim();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const tool: ToolDefinition = {
|
|
21
|
+
description: 'Search the product catalog and return relevant product details.',
|
|
22
|
+
inputSchema,
|
|
23
|
+
execute: async ({ query, includePricing, includeObjections }) => {
|
|
24
|
+
if (!cachedData) {
|
|
25
|
+
const raw = await readFile(dataPath, 'utf8');
|
|
26
|
+
cachedData = JSON.parse(raw);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const products = cachedData.products ?? [];
|
|
30
|
+
const filter = query ? normalize(query) : '';
|
|
31
|
+
const matches = filter
|
|
32
|
+
? products.filter(product => {
|
|
33
|
+
const name = normalize(String(product.name ?? ''));
|
|
34
|
+
const description = normalize(String(product.description ?? ''));
|
|
35
|
+
return name.includes(filter) || description.includes(filter);
|
|
36
|
+
})
|
|
37
|
+
: products;
|
|
38
|
+
|
|
39
|
+
const results = matches.slice(0, 5).map(product => ({
|
|
40
|
+
name: product.name,
|
|
41
|
+
description: product.description,
|
|
42
|
+
key_benefits: product.key_benefits,
|
|
43
|
+
price_range: product.price_range,
|
|
44
|
+
target_customers: product.target_customers,
|
|
45
|
+
}));
|
|
46
|
+
|
|
47
|
+
const payload: Record<string, unknown> = {
|
|
48
|
+
results,
|
|
49
|
+
total: matches.length,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
if (includePricing) {
|
|
53
|
+
payload.pricing = cachedData.pricing ?? null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (includeObjections) {
|
|
57
|
+
payload.objection_handlers = cachedData.objection_handlers ?? null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return payload;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export default tool;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sales Starter
|
|
2
|
+
|
|
3
|
+
Multi-agent sales system with product catalog, lead qualification, and closing strategies.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Install:
|
|
8
|
+
```bash
|
|
9
|
+
npm install @ariaflowagents/starters
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Extend in your `ariaflow.jsonc`:
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
16
|
+
"extends": "./node_modules/@ariaflowagents/starters/sales/ariaflow.jsonc"
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Included Agents
|
|
21
|
+
|
|
22
|
+
- `sales-triage` - Routes to sales-rep or sales-closer
|
|
23
|
+
- `sales-rep` - Answers product questions using product_catalog tool
|
|
24
|
+
- `sales-closer` - Handles pricing and closing
|
|
25
|
+
|
|
26
|
+
## Tools
|
|
27
|
+
|
|
28
|
+
- `product_catalog` - Product lookup with pricing and benefits
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
3
|
+
"runtime": {
|
|
4
|
+
"defaultAgent": "sales-triage",
|
|
5
|
+
"defaultModel": "default"
|
|
6
|
+
},
|
|
7
|
+
"models": {
|
|
8
|
+
"default": "openai:gpt-4o-mini"
|
|
9
|
+
},
|
|
10
|
+
"agents": {
|
|
11
|
+
"sales-triage": {
|
|
12
|
+
"type": "triage",
|
|
13
|
+
"description": "Routes prospects to the right sales specialist",
|
|
14
|
+
"prompt": { "file": "./.ariaflow/prompts/sales-triage.md" },
|
|
15
|
+
"routes": [
|
|
16
|
+
{
|
|
17
|
+
"agentId": "sales-rep",
|
|
18
|
+
"description": "Handles product discovery and feature questions"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"agentId": "sales-closer",
|
|
22
|
+
"description": "Handles pricing, objections, and next steps"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"defaultAgent": "sales-rep"
|
|
26
|
+
},
|
|
27
|
+
"sales-rep": {
|
|
28
|
+
"type": "llm",
|
|
29
|
+
"description": "Explains products, benefits, and fit",
|
|
30
|
+
"prompt": { "file": "./.ariaflow/prompts/sales-rep.md" },
|
|
31
|
+
"tools": ["product_catalog"]
|
|
32
|
+
},
|
|
33
|
+
"sales-closer": {
|
|
34
|
+
"type": "llm",
|
|
35
|
+
"description": "Handles pricing, objections, and closing",
|
|
36
|
+
"prompt": { "file": "./.ariaflow/prompts/sales-closer.md" },
|
|
37
|
+
"tools": ["product_catalog"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
You are a friendly, efficient support agent.
|
|
2
|
+
|
|
3
|
+
- Ask clarifying questions when details are missing.
|
|
4
|
+
- Summarize the customer's issue before proposing a solution.
|
|
5
|
+
- If the issue needs escalation, use the create_ticket tool.
|
|
6
|
+
|
|
7
|
+
Keep responses concise and empathetic.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolDefinition } from '@ariaflowagents/core';
|
|
3
|
+
|
|
4
|
+
export const tool: ToolDefinition = {
|
|
5
|
+
description: 'Create a support ticket and return the ticket id',
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
summary: z.string().describe('Short summary of the issue'),
|
|
8
|
+
priority: z.enum(['low', 'normal', 'high']).default('normal'),
|
|
9
|
+
email: z.string().optional().describe('Customer email if provided'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ summary, priority, email }) => {
|
|
12
|
+
const ticketId = `TCK-${Date.now().toString(36).toUpperCase()}`;
|
|
13
|
+
return {
|
|
14
|
+
ticketId,
|
|
15
|
+
status: 'created',
|
|
16
|
+
summary,
|
|
17
|
+
priority,
|
|
18
|
+
email: email ?? null,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default tool;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Support Starter
|
|
2
|
+
|
|
3
|
+
Customer support system with ticket creation, issue triage, and escalation workflows.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Install:
|
|
8
|
+
```bash
|
|
9
|
+
npm install @ariaflowagents/starters
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Extend in your `ariaflow.jsonc`:
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
16
|
+
"extends": "./node_modules/@ariaflowagents/starters/support/ariaflow.jsonc"
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Included Agents
|
|
21
|
+
|
|
22
|
+
- `support` - Handles customer inquiries, creates tickets
|
|
23
|
+
|
|
24
|
+
## Tools
|
|
25
|
+
|
|
26
|
+
- `create_ticket` - Creates support tickets with priority
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ariaflow.ai/config.json",
|
|
3
|
+
"runtime": {
|
|
4
|
+
"defaultAgent": "support",
|
|
5
|
+
"defaultModel": "default"
|
|
6
|
+
},
|
|
7
|
+
"models": {
|
|
8
|
+
"default": "openai:gpt-4o-mini"
|
|
9
|
+
},
|
|
10
|
+
"agents": {
|
|
11
|
+
"support": {
|
|
12
|
+
"type": "llm",
|
|
13
|
+
"description": "Handles general customer support inquiries",
|
|
14
|
+
"prompt": { "file": "./.ariaflow/prompts/support.md" },
|
|
15
|
+
"tools": ["create_ticket"]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|