signalwire-agents 0.1.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/CLAUDE.md +112 -0
- package/README.md +417 -0
- package/dist/AgentBase.d.ts +481 -0
- package/dist/AgentBase.js +1155 -0
- package/dist/AgentBase.js.map +1 -0
- package/dist/AgentServer.d.ts +60 -0
- package/dist/AgentServer.js +128 -0
- package/dist/AgentServer.js.map +1 -0
- package/dist/AuthHandler.d.ts +56 -0
- package/dist/AuthHandler.js +119 -0
- package/dist/AuthHandler.js.map +1 -0
- package/dist/ConfigLoader.d.ts +68 -0
- package/dist/ConfigLoader.js +150 -0
- package/dist/ConfigLoader.js.map +1 -0
- package/dist/ContextBuilder.d.ts +431 -0
- package/dist/ContextBuilder.js +751 -0
- package/dist/ContextBuilder.js.map +1 -0
- package/dist/DataMap.d.ts +179 -0
- package/dist/DataMap.js +321 -0
- package/dist/DataMap.js.map +1 -0
- package/dist/Logger.d.ts +91 -0
- package/dist/Logger.js +191 -0
- package/dist/Logger.js.map +1 -0
- package/dist/PomBuilder.d.ts +144 -0
- package/dist/PomBuilder.js +249 -0
- package/dist/PomBuilder.js.map +1 -0
- package/dist/PromptManager.d.ts +85 -0
- package/dist/PromptManager.js +108 -0
- package/dist/PromptManager.js.map +1 -0
- package/dist/SchemaUtils.d.ts +42 -0
- package/dist/SchemaUtils.js +148 -0
- package/dist/SchemaUtils.js.map +1 -0
- package/dist/ServerlessAdapter.d.ts +100 -0
- package/dist/ServerlessAdapter.js +166 -0
- package/dist/ServerlessAdapter.js.map +1 -0
- package/dist/SessionManager.d.ts +86 -0
- package/dist/SessionManager.js +155 -0
- package/dist/SessionManager.js.map +1 -0
- package/dist/SslConfig.d.ts +77 -0
- package/dist/SslConfig.js +100 -0
- package/dist/SslConfig.js.map +1 -0
- package/dist/SwaigFunction.d.ts +88 -0
- package/dist/SwaigFunction.js +125 -0
- package/dist/SwaigFunction.js.map +1 -0
- package/dist/SwaigFunctionResult.d.ts +442 -0
- package/dist/SwaigFunctionResult.js +735 -0
- package/dist/SwaigFunctionResult.js.map +1 -0
- package/dist/SwmlBuilder.d.ts +37 -0
- package/dist/SwmlBuilder.js +55 -0
- package/dist/SwmlBuilder.js.map +1 -0
- package/dist/cli/agent-loader.d.ts +22 -0
- package/dist/cli/agent-loader.js +106 -0
- package/dist/cli/agent-loader.js.map +1 -0
- package/dist/cli/mock-data.d.ts +37 -0
- package/dist/cli/mock-data.js +79 -0
- package/dist/cli/mock-data.js.map +1 -0
- package/dist/cli/swaig-test.d.ts +32 -0
- package/dist/cli/swaig-test.js +405 -0
- package/dist/cli/swaig-test.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/prefabs/ConciergeAgent.d.ts +64 -0
- package/dist/prefabs/ConciergeAgent.js +188 -0
- package/dist/prefabs/ConciergeAgent.js.map +1 -0
- package/dist/prefabs/FAQBotAgent.d.ts +68 -0
- package/dist/prefabs/FAQBotAgent.js +206 -0
- package/dist/prefabs/FAQBotAgent.js.map +1 -0
- package/dist/prefabs/InfoGathererAgent.d.ts +73 -0
- package/dist/prefabs/InfoGathererAgent.js +202 -0
- package/dist/prefabs/InfoGathererAgent.js.map +1 -0
- package/dist/prefabs/ReceptionistAgent.d.ts +65 -0
- package/dist/prefabs/ReceptionistAgent.js +205 -0
- package/dist/prefabs/ReceptionistAgent.js.map +1 -0
- package/dist/prefabs/SurveyAgent.d.ts +84 -0
- package/dist/prefabs/SurveyAgent.js +324 -0
- package/dist/prefabs/SurveyAgent.js.map +1 -0
- package/dist/prefabs/index.d.ts +13 -0
- package/dist/prefabs/index.js +14 -0
- package/dist/prefabs/index.js.map +1 -0
- package/dist/skills/SkillBase.d.ts +134 -0
- package/dist/skills/SkillBase.js +105 -0
- package/dist/skills/SkillBase.js.map +1 -0
- package/dist/skills/SkillManager.d.ts +83 -0
- package/dist/skills/SkillManager.js +159 -0
- package/dist/skills/SkillManager.js.map +1 -0
- package/dist/skills/SkillRegistry.d.ts +105 -0
- package/dist/skills/SkillRegistry.js +195 -0
- package/dist/skills/SkillRegistry.js.map +1 -0
- package/dist/skills/builtin/api_ninjas_trivia.d.ts +35 -0
- package/dist/skills/builtin/api_ninjas_trivia.js +161 -0
- package/dist/skills/builtin/api_ninjas_trivia.js.map +1 -0
- package/dist/skills/builtin/claude_skills.d.ts +34 -0
- package/dist/skills/builtin/claude_skills.js +156 -0
- package/dist/skills/builtin/claude_skills.js.map +1 -0
- package/dist/skills/builtin/custom_skills.d.ts +59 -0
- package/dist/skills/builtin/custom_skills.js +231 -0
- package/dist/skills/builtin/custom_skills.js.map +1 -0
- package/dist/skills/builtin/datasphere.d.ts +34 -0
- package/dist/skills/builtin/datasphere.js +163 -0
- package/dist/skills/builtin/datasphere.js.map +1 -0
- package/dist/skills/builtin/datasphere_serverless.d.ts +54 -0
- package/dist/skills/builtin/datasphere_serverless.js +155 -0
- package/dist/skills/builtin/datasphere_serverless.js.map +1 -0
- package/dist/skills/builtin/datetime.d.ts +31 -0
- package/dist/skills/builtin/datetime.js +95 -0
- package/dist/skills/builtin/datetime.js.map +1 -0
- package/dist/skills/builtin/google_maps.d.ts +33 -0
- package/dist/skills/builtin/google_maps.js +233 -0
- package/dist/skills/builtin/google_maps.js.map +1 -0
- package/dist/skills/builtin/index.d.ts +28 -0
- package/dist/skills/builtin/index.js +75 -0
- package/dist/skills/builtin/index.js.map +1 -0
- package/dist/skills/builtin/info_gatherer.d.ts +52 -0
- package/dist/skills/builtin/info_gatherer.js +237 -0
- package/dist/skills/builtin/info_gatherer.js.map +1 -0
- package/dist/skills/builtin/joke.d.ts +32 -0
- package/dist/skills/builtin/joke.js +142 -0
- package/dist/skills/builtin/joke.js.map +1 -0
- package/dist/skills/builtin/math.d.ts +33 -0
- package/dist/skills/builtin/math.js +120 -0
- package/dist/skills/builtin/math.js.map +1 -0
- package/dist/skills/builtin/mcp_gateway.d.ts +35 -0
- package/dist/skills/builtin/mcp_gateway.js +85 -0
- package/dist/skills/builtin/mcp_gateway.js.map +1 -0
- package/dist/skills/builtin/native_vector_search.d.ts +44 -0
- package/dist/skills/builtin/native_vector_search.js +248 -0
- package/dist/skills/builtin/native_vector_search.js.map +1 -0
- package/dist/skills/builtin/play_background_file.d.ts +34 -0
- package/dist/skills/builtin/play_background_file.js +135 -0
- package/dist/skills/builtin/play_background_file.js.map +1 -0
- package/dist/skills/builtin/spider.d.ts +34 -0
- package/dist/skills/builtin/spider.js +164 -0
- package/dist/skills/builtin/spider.js.map +1 -0
- package/dist/skills/builtin/swml_transfer.d.ts +44 -0
- package/dist/skills/builtin/swml_transfer.js +204 -0
- package/dist/skills/builtin/swml_transfer.js.map +1 -0
- package/dist/skills/builtin/weather_api.d.ts +34 -0
- package/dist/skills/builtin/weather_api.js +136 -0
- package/dist/skills/builtin/weather_api.js.map +1 -0
- package/dist/skills/builtin/web_search.d.ts +34 -0
- package/dist/skills/builtin/web_search.js +141 -0
- package/dist/skills/builtin/web_search.js.map +1 -0
- package/dist/skills/builtin/wikipedia_search.d.ts +34 -0
- package/dist/skills/builtin/wikipedia_search.js +166 -0
- package/dist/skills/builtin/wikipedia_search.js.map +1 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.js +10 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/agent-guide.md +869 -0
- package/docs/api-reference.md +2419 -0
- package/docs/architecture.md +843 -0
- package/docs/cli-guide.md +579 -0
- package/docs/configuration.md +422 -0
- package/docs/contexts-guide.md +787 -0
- package/docs/datamap-guide.md +1141 -0
- package/docs/prefabs-guide.md +830 -0
- package/docs/security.md +436 -0
- package/docs/serverless-guide.md +513 -0
- package/docs/skills-guide.md +845 -0
- package/docs/swaig-reference.md +1627 -0
- package/examples/call-flow.ts +60 -0
- package/examples/contexts-steps.ts +62 -0
- package/examples/datamap-tools.ts +52 -0
- package/examples/dynamic-config.ts +51 -0
- package/examples/multi-agent.ts +67 -0
- package/examples/pom-prompt.ts +68 -0
- package/examples/simple-agent.ts +33 -0
- package/package.json +35 -0
- package/src/AgentBase.ts +1279 -0
- package/src/AgentServer.ts +149 -0
- package/src/AuthHandler.ts +141 -0
- package/src/ConfigLoader.ts +165 -0
- package/src/ContextBuilder.ts +796 -0
- package/src/DataMap.ts +365 -0
- package/src/Logger.ts +197 -0
- package/src/PomBuilder.ts +298 -0
- package/src/PromptManager.ts +133 -0
- package/src/SchemaUtils.ts +170 -0
- package/src/ServerlessAdapter.ts +218 -0
- package/src/SessionManager.ts +161 -0
- package/src/SslConfig.ts +118 -0
- package/src/SwaigFunction.ts +168 -0
- package/src/SwaigFunctionResult.ts +864 -0
- package/src/SwmlBuilder.ts +62 -0
- package/src/cli/agent-loader.ts +122 -0
- package/src/cli/mock-data.ts +110 -0
- package/src/cli/swaig-test.ts +440 -0
- package/src/index.ts +99 -0
- package/src/prefabs/ConciergeAgent.ts +251 -0
- package/src/prefabs/FAQBotAgent.ts +263 -0
- package/src/prefabs/InfoGathererAgent.ts +276 -0
- package/src/prefabs/ReceptionistAgent.ts +277 -0
- package/src/prefabs/SurveyAgent.ts +413 -0
- package/src/prefabs/index.ts +23 -0
- package/src/skills/SkillBase.ts +184 -0
- package/src/skills/SkillManager.ts +177 -0
- package/src/skills/SkillRegistry.ts +231 -0
- package/src/skills/builtin/api_ninjas_trivia.ts +230 -0
- package/src/skills/builtin/claude_skills.ts +239 -0
- package/src/skills/builtin/custom_skills.ts +326 -0
- package/src/skills/builtin/datasphere.ts +225 -0
- package/src/skills/builtin/datasphere_serverless.ts +194 -0
- package/src/skills/builtin/datetime.ts +115 -0
- package/src/skills/builtin/google_maps.ts +347 -0
- package/src/skills/builtin/index.ts +79 -0
- package/src/skills/builtin/info_gatherer.ts +331 -0
- package/src/skills/builtin/joke.ts +180 -0
- package/src/skills/builtin/math.ts +150 -0
- package/src/skills/builtin/mcp_gateway.ts +99 -0
- package/src/skills/builtin/native_vector_search.ts +327 -0
- package/src/skills/builtin/play_background_file.ts +189 -0
- package/src/skills/builtin/spider.ts +232 -0
- package/src/skills/builtin/swml_transfer.ts +285 -0
- package/src/skills/builtin/weather_api.ts +193 -0
- package/src/skills/builtin/web_search.ts +212 -0
- package/src/skills/builtin/wikipedia_search.ts +248 -0
- package/src/skills/index.ts +12 -0
- package/src/types.ts +99 -0
- package/tests/AgentBase.test.ts +693 -0
- package/tests/AgentServer.test.ts +102 -0
- package/tests/AuthHandler.test.ts +121 -0
- package/tests/ConfigLoader.test.ts +121 -0
- package/tests/DataMap.test.ts +286 -0
- package/tests/Logger.test.ts +218 -0
- package/tests/PomBuilder.test.ts +164 -0
- package/tests/ProxyDetection.test.ts +185 -0
- package/tests/SchemaUtils.test.ts +106 -0
- package/tests/ServerlessAdapter.test.ts +200 -0
- package/tests/SessionManager.test.ts +139 -0
- package/tests/SslConfig.test.ts +97 -0
- package/tests/SwaigFunctionResult.test.ts +298 -0
- package/tests/cli/mock-data.test.ts +94 -0
- package/tests/cli/swaig-test.test.ts +96 -0
- package/tests/prefabs/prefabs.test.ts +854 -0
- package/tests/setup.ts +6 -0
- package/tests/skills/SkillBase.test.ts +118 -0
- package/tests/skills/SkillManager.test.ts +164 -0
- package/tests/skills/SkillRegistry.test.ts +124 -0
- package/tests/skills/builtin.test.ts +924 -0
- package/tsconfig.json +18 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InfoGathererAgent - A prefab agent that sequentially collects information
|
|
3
|
+
* from callers through conversational interaction.
|
|
4
|
+
*
|
|
5
|
+
* Tracks fields per call, validates with optional regex patterns, and fires
|
|
6
|
+
* an onComplete callback once all required fields are gathered.
|
|
7
|
+
*/
|
|
8
|
+
import { AgentBase } from '../AgentBase.js';
|
|
9
|
+
import { SwaigFunctionResult } from '../SwaigFunctionResult.js';
|
|
10
|
+
// ── Agent ───────────────────────────────────────────────────────────────────
|
|
11
|
+
/** Prefab agent that sequentially collects named fields from a caller with optional validation and completion callback. */
|
|
12
|
+
export class InfoGathererAgent extends AgentBase {
|
|
13
|
+
fields;
|
|
14
|
+
introMessage;
|
|
15
|
+
confirmationMessage;
|
|
16
|
+
onCompleteCallback;
|
|
17
|
+
sessions = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Declarative prompt sections merged by AgentBase constructor.
|
|
20
|
+
* Additional dynamic sections are added in the constructor body below.
|
|
21
|
+
*/
|
|
22
|
+
static PROMPT_SECTIONS = [
|
|
23
|
+
{
|
|
24
|
+
title: 'Role',
|
|
25
|
+
body: 'You are an information-gathering assistant. Your job is to collect specific pieces of information from the caller in a friendly, conversational manner.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: 'Rules',
|
|
29
|
+
bullets: [
|
|
30
|
+
'Ask for one field at a time, in the order listed.',
|
|
31
|
+
'If the caller provides information for a later field, accept it and move on.',
|
|
32
|
+
'Always confirm each piece of information before saving it using the save_field tool.',
|
|
33
|
+
'If validation fails, politely ask the caller to try again.',
|
|
34
|
+
'Use the get_status tool when you need to check progress.',
|
|
35
|
+
'Once all required fields are collected, summarize the information and confirm with the caller.',
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Create an InfoGathererAgent with the specified fields and callbacks.
|
|
41
|
+
* @param config - Configuration including fields to collect, messages, and completion callback.
|
|
42
|
+
*/
|
|
43
|
+
constructor(config) {
|
|
44
|
+
const agentName = config.name ?? 'InfoGatherer';
|
|
45
|
+
super({
|
|
46
|
+
name: agentName,
|
|
47
|
+
...config.agentOptions,
|
|
48
|
+
});
|
|
49
|
+
this.fields = config.fields;
|
|
50
|
+
this.introMessage = config.introMessage ?? 'Hello! I need to collect some information from you. Let me walk you through it.';
|
|
51
|
+
this.confirmationMessage = config.confirmationMessage ?? 'Thank you! I have collected all the required information.';
|
|
52
|
+
this.onCompleteCallback = config.onComplete;
|
|
53
|
+
// Build the dynamic fields section
|
|
54
|
+
const fieldBullets = this.fields.map((f) => {
|
|
55
|
+
const reqLabel = f.required === false ? '(optional)' : '(required)';
|
|
56
|
+
const valLabel = f.validation ? ` [validation: ${f.validation instanceof RegExp ? f.validation.source : f.validation}]` : '';
|
|
57
|
+
return `${f.name}: ${f.description} ${reqLabel}${valLabel}`;
|
|
58
|
+
});
|
|
59
|
+
this.promptAddSection('Fields to Collect', { bullets: fieldBullets, numbered: true });
|
|
60
|
+
if (this.introMessage) {
|
|
61
|
+
this.promptAddSection('Introduction', {
|
|
62
|
+
body: `Begin the conversation with: "${this.introMessage}"`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Hints for speech recognition
|
|
66
|
+
this.addHints(this.fields.map((f) => f.name));
|
|
67
|
+
// Register tools after all fields are initialized
|
|
68
|
+
this.defineTools();
|
|
69
|
+
}
|
|
70
|
+
// ── Session helpers ───────────────────────────────────────────────────
|
|
71
|
+
getSession(rawData) {
|
|
72
|
+
const callId = rawData['call_id'] ?? 'default';
|
|
73
|
+
let session = this.sessions.get(callId);
|
|
74
|
+
if (!session) {
|
|
75
|
+
session = { collected: {}, completeFired: false };
|
|
76
|
+
this.sessions.set(callId, session);
|
|
77
|
+
}
|
|
78
|
+
return session;
|
|
79
|
+
}
|
|
80
|
+
getFieldByName(name) {
|
|
81
|
+
return this.fields.find((f) => f.name.toLowerCase() === name.toLowerCase());
|
|
82
|
+
}
|
|
83
|
+
validateValue(field, value) {
|
|
84
|
+
if (!field.validation)
|
|
85
|
+
return true;
|
|
86
|
+
const pattern = field.validation instanceof RegExp
|
|
87
|
+
? field.validation
|
|
88
|
+
: new RegExp(field.validation);
|
|
89
|
+
return pattern.test(value);
|
|
90
|
+
}
|
|
91
|
+
getRequiredFields() {
|
|
92
|
+
return this.fields.filter((f) => f.required !== false);
|
|
93
|
+
}
|
|
94
|
+
allRequiredCollected(session) {
|
|
95
|
+
return this.getRequiredFields().every((f) => f.name in session.collected);
|
|
96
|
+
}
|
|
97
|
+
// ── Tool registration ─────────────────────────────────────────────────
|
|
98
|
+
/** Register the save_field and get_status SWAIG tools. */
|
|
99
|
+
defineTools() {
|
|
100
|
+
// Tool: save_field
|
|
101
|
+
this.defineTool({
|
|
102
|
+
name: 'save_field',
|
|
103
|
+
description: 'Save a collected field value from the caller. Validates the value if a validation pattern is configured for the field.',
|
|
104
|
+
parameters: {
|
|
105
|
+
type: 'object',
|
|
106
|
+
properties: {
|
|
107
|
+
field_name: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
description: 'The name of the field to save.',
|
|
110
|
+
},
|
|
111
|
+
value: {
|
|
112
|
+
type: 'string',
|
|
113
|
+
description: 'The value provided by the caller.',
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
required: ['field_name', 'value'],
|
|
117
|
+
},
|
|
118
|
+
handler: async (args, rawData) => {
|
|
119
|
+
const fieldName = args['field_name'];
|
|
120
|
+
const value = args['value'];
|
|
121
|
+
if (!fieldName || !value) {
|
|
122
|
+
return new SwaigFunctionResult('Both field_name and value are required.');
|
|
123
|
+
}
|
|
124
|
+
const field = this.getFieldByName(fieldName);
|
|
125
|
+
if (!field) {
|
|
126
|
+
const available = this.fields.map((f) => f.name).join(', ');
|
|
127
|
+
return new SwaigFunctionResult(`Unknown field "${fieldName}". Available fields: ${available}`);
|
|
128
|
+
}
|
|
129
|
+
if (!this.validateValue(field, value)) {
|
|
130
|
+
return new SwaigFunctionResult(`The value "${value}" is not valid for field "${field.name}". Please ask the caller to provide a valid value. Expected format: ${field.validation instanceof RegExp ? field.validation.source : field.validation}`);
|
|
131
|
+
}
|
|
132
|
+
const session = this.getSession(rawData);
|
|
133
|
+
session.collected[field.name] = value;
|
|
134
|
+
// Check if all required fields are now collected
|
|
135
|
+
if (this.allRequiredCollected(session) && !session.completeFired) {
|
|
136
|
+
session.completeFired = true;
|
|
137
|
+
if (this.onCompleteCallback) {
|
|
138
|
+
try {
|
|
139
|
+
await this.onCompleteCallback({ ...session.collected });
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
this.log.error(`onComplete callback error: ${err}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const collectedSummary = Object.entries(session.collected)
|
|
146
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
147
|
+
.join(', ');
|
|
148
|
+
return new SwaigFunctionResult(`Field "${field.name}" saved successfully. All required fields are now collected! Summary: ${collectedSummary}. ${this.confirmationMessage}`);
|
|
149
|
+
}
|
|
150
|
+
// Determine remaining fields
|
|
151
|
+
const remaining = this.fields
|
|
152
|
+
.filter((f) => f.required !== false && !(f.name in session.collected))
|
|
153
|
+
.map((f) => f.name);
|
|
154
|
+
return new SwaigFunctionResult(`Field "${field.name}" saved as "${value}". Remaining required fields: ${remaining.length > 0 ? remaining.join(', ') : 'none'}.`);
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
// Tool: get_status
|
|
158
|
+
this.defineTool({
|
|
159
|
+
name: 'get_status',
|
|
160
|
+
description: 'Get the current status of information gathering, showing which fields have been collected and which remain.',
|
|
161
|
+
parameters: {
|
|
162
|
+
type: 'object',
|
|
163
|
+
properties: {},
|
|
164
|
+
},
|
|
165
|
+
handler: (args, rawData) => {
|
|
166
|
+
const session = this.getSession(rawData);
|
|
167
|
+
const collectedEntries = Object.entries(session.collected);
|
|
168
|
+
const collectedStr = collectedEntries.length > 0
|
|
169
|
+
? collectedEntries.map(([k, v]) => `${k}: ${v}`).join(', ')
|
|
170
|
+
: 'none';
|
|
171
|
+
const remainingRequired = this.getRequiredFields()
|
|
172
|
+
.filter((f) => !(f.name in session.collected))
|
|
173
|
+
.map((f) => f.name);
|
|
174
|
+
const remainingOptional = this.fields
|
|
175
|
+
.filter((f) => f.required === false && !(f.name in session.collected))
|
|
176
|
+
.map((f) => f.name);
|
|
177
|
+
let status = `Collected: ${collectedStr}.`;
|
|
178
|
+
if (remainingRequired.length > 0) {
|
|
179
|
+
status += ` Remaining required: ${remainingRequired.join(', ')}.`;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
status += ' All required fields have been collected!';
|
|
183
|
+
}
|
|
184
|
+
if (remainingOptional.length > 0) {
|
|
185
|
+
status += ` Optional fields not yet collected: ${remainingOptional.join(', ')}.`;
|
|
186
|
+
}
|
|
187
|
+
return new SwaigFunctionResult(status);
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ── Factory function ────────────────────────────────────────────────────────
|
|
193
|
+
/**
|
|
194
|
+
* Factory function that creates and returns a new InfoGathererAgent.
|
|
195
|
+
* @param config - Configuration for the info gatherer agent.
|
|
196
|
+
* @returns A configured InfoGathererAgent instance.
|
|
197
|
+
*/
|
|
198
|
+
export function createInfoGathererAgent(config) {
|
|
199
|
+
return new InfoGathererAgent(config);
|
|
200
|
+
}
|
|
201
|
+
export default InfoGathererAgent;
|
|
202
|
+
//# sourceMappingURL=InfoGathererAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoGathererAgent.js","sourceRoot":"","sources":["../../src/prefabs/InfoGathererAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReceptionistAgent - A prefab front-desk agent that handles visitor
|
|
3
|
+
* check-in, department directory lookup, and call transfers by extension.
|
|
4
|
+
*/
|
|
5
|
+
import { AgentBase } from '../AgentBase.js';
|
|
6
|
+
import type { AgentOptions } from '../types.js';
|
|
7
|
+
export interface ReceptionistDepartment {
|
|
8
|
+
/** Department name (e.g. "Engineering", "HR"). */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Internal extension number or SIP address. */
|
|
11
|
+
extension: string;
|
|
12
|
+
/** Optional description of the department. */
|
|
13
|
+
description?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ReceptionistConfig {
|
|
16
|
+
/** Agent display name. */
|
|
17
|
+
name?: string;
|
|
18
|
+
/** Company name displayed in greetings and prompts. */
|
|
19
|
+
companyName: string;
|
|
20
|
+
/** Departments with extensions for the directory. */
|
|
21
|
+
departments: ReceptionistDepartment[];
|
|
22
|
+
/** Custom welcome message. */
|
|
23
|
+
welcomeMessage?: string;
|
|
24
|
+
/** Whether visitor check-in functionality is enabled. Default true. */
|
|
25
|
+
checkInEnabled?: boolean;
|
|
26
|
+
/** Callback fired when a visitor checks in. */
|
|
27
|
+
onVisitorCheckIn?: (visitor: Record<string, string>) => void | Promise<void>;
|
|
28
|
+
/** Additional AgentBase options forwarded to super(). */
|
|
29
|
+
agentOptions?: Partial<AgentOptions>;
|
|
30
|
+
}
|
|
31
|
+
/** Prefab front-desk agent that handles visitor check-in, department directory lookup, and call transfers by extension. */
|
|
32
|
+
export declare class ReceptionistAgent extends AgentBase {
|
|
33
|
+
private companyName;
|
|
34
|
+
private departments;
|
|
35
|
+
private welcomeMessage;
|
|
36
|
+
private checkInEnabled;
|
|
37
|
+
private onVisitorCheckInCallback?;
|
|
38
|
+
private sessions;
|
|
39
|
+
/** Declarative prompt sections merged by AgentBase constructor. */
|
|
40
|
+
static PROMPT_SECTIONS: ({
|
|
41
|
+
title: string;
|
|
42
|
+
body: string;
|
|
43
|
+
bullets?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
title: string;
|
|
46
|
+
bullets: string[];
|
|
47
|
+
body?: undefined;
|
|
48
|
+
})[];
|
|
49
|
+
/**
|
|
50
|
+
* Create a ReceptionistAgent with the specified company, departments, and check-in settings.
|
|
51
|
+
* @param config - Configuration including company name, departments, and visitor check-in callback.
|
|
52
|
+
*/
|
|
53
|
+
constructor(config: ReceptionistConfig);
|
|
54
|
+
private getSession;
|
|
55
|
+
private findDepartment;
|
|
56
|
+
/** Register the get_department_list, transfer_to_department, and optional check_in_visitor SWAIG tools. */
|
|
57
|
+
protected defineTools(): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Factory function that creates and returns a new ReceptionistAgent.
|
|
61
|
+
* @param config - Configuration for the receptionist agent.
|
|
62
|
+
* @returns A configured ReceptionistAgent instance.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createReceptionistAgent(config: ReceptionistConfig): ReceptionistAgent;
|
|
65
|
+
export default ReceptionistAgent;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReceptionistAgent - A prefab front-desk agent that handles visitor
|
|
3
|
+
* check-in, department directory lookup, and call transfers by extension.
|
|
4
|
+
*/
|
|
5
|
+
import { AgentBase } from '../AgentBase.js';
|
|
6
|
+
import { SwaigFunctionResult } from '../SwaigFunctionResult.js';
|
|
7
|
+
// ── Agent ───────────────────────────────────────────────────────────────────
|
|
8
|
+
/** Prefab front-desk agent that handles visitor check-in, department directory lookup, and call transfers by extension. */
|
|
9
|
+
export class ReceptionistAgent extends AgentBase {
|
|
10
|
+
companyName;
|
|
11
|
+
departments;
|
|
12
|
+
welcomeMessage;
|
|
13
|
+
checkInEnabled;
|
|
14
|
+
onVisitorCheckInCallback;
|
|
15
|
+
sessions = new Map();
|
|
16
|
+
/** Declarative prompt sections merged by AgentBase constructor. */
|
|
17
|
+
static PROMPT_SECTIONS = [
|
|
18
|
+
{
|
|
19
|
+
title: 'Role',
|
|
20
|
+
body: 'You are a friendly and professional receptionist. Greet visitors warmly, help them check in, look up department information, and transfer calls to the appropriate extension.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: 'Rules',
|
|
24
|
+
bullets: [
|
|
25
|
+
'Always greet the caller with the company welcome message.',
|
|
26
|
+
'If a caller wants to reach a department, use get_department_list to find the right one, then transfer_to_department.',
|
|
27
|
+
'If a caller wants to check in as a visitor, collect their name, purpose of visit, and who they are visiting, then use check_in_visitor.',
|
|
28
|
+
'Be warm, helpful, and professional at all times.',
|
|
29
|
+
'If you are unsure which department the caller needs, offer to list all departments.',
|
|
30
|
+
'Confirm the department name before transferring.',
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Create a ReceptionistAgent with the specified company, departments, and check-in settings.
|
|
36
|
+
* @param config - Configuration including company name, departments, and visitor check-in callback.
|
|
37
|
+
*/
|
|
38
|
+
constructor(config) {
|
|
39
|
+
const agentName = config.name ?? 'Receptionist';
|
|
40
|
+
super({
|
|
41
|
+
name: agentName,
|
|
42
|
+
...config.agentOptions,
|
|
43
|
+
});
|
|
44
|
+
this.companyName = config.companyName;
|
|
45
|
+
this.departments = config.departments;
|
|
46
|
+
this.welcomeMessage = config.welcomeMessage ?? `Welcome to ${this.companyName}! How may I help you today?`;
|
|
47
|
+
this.checkInEnabled = config.checkInEnabled ?? true;
|
|
48
|
+
this.onVisitorCheckInCallback = config.onVisitorCheckIn;
|
|
49
|
+
// Welcome section
|
|
50
|
+
this.promptAddSection('Welcome', {
|
|
51
|
+
body: `You are the receptionist for ${this.companyName}. Greet callers with: "${this.welcomeMessage}"`,
|
|
52
|
+
});
|
|
53
|
+
// Department directory section
|
|
54
|
+
const deptBullets = this.departments.map((dept) => {
|
|
55
|
+
let line = `${dept.name} (ext: ${dept.extension})`;
|
|
56
|
+
if (dept.description)
|
|
57
|
+
line += ` - ${dept.description}`;
|
|
58
|
+
return line;
|
|
59
|
+
});
|
|
60
|
+
this.promptAddSection('Department Directory', { bullets: deptBullets });
|
|
61
|
+
if (this.checkInEnabled) {
|
|
62
|
+
this.promptAddSection('Visitor Check-In', {
|
|
63
|
+
body: 'If a caller wants to check in as a visitor, collect their full name, the purpose of their visit, and the name of the person they are visiting. Then use the check_in_visitor tool.',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Speech recognition hints
|
|
67
|
+
const hints = [this.companyName];
|
|
68
|
+
hints.push(...this.departments.map((d) => d.name));
|
|
69
|
+
this.addHints(hints);
|
|
70
|
+
// Register tools after all fields are initialized
|
|
71
|
+
this.defineTools();
|
|
72
|
+
}
|
|
73
|
+
// ── Session helpers ───────────────────────────────────────────────────
|
|
74
|
+
getSession(rawData) {
|
|
75
|
+
const callId = rawData['call_id'] ?? 'default';
|
|
76
|
+
let session = this.sessions.get(callId);
|
|
77
|
+
if (!session) {
|
|
78
|
+
session = { visitors: [] };
|
|
79
|
+
this.sessions.set(callId, session);
|
|
80
|
+
}
|
|
81
|
+
return session;
|
|
82
|
+
}
|
|
83
|
+
// ── Department helpers ────────────────────────────────────────────────
|
|
84
|
+
findDepartment(name) {
|
|
85
|
+
const normalized = name.toLowerCase().trim();
|
|
86
|
+
return this.departments.find((d) => d.name.toLowerCase() === normalized);
|
|
87
|
+
}
|
|
88
|
+
// ── Tool registration ─────────────────────────────────────────────────
|
|
89
|
+
/** Register the get_department_list, transfer_to_department, and optional check_in_visitor SWAIG tools. */
|
|
90
|
+
defineTools() {
|
|
91
|
+
// Tool: get_department_list
|
|
92
|
+
this.defineTool({
|
|
93
|
+
name: 'get_department_list',
|
|
94
|
+
description: `List all departments at ${this.companyName} with their extensions and descriptions.`,
|
|
95
|
+
parameters: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {},
|
|
98
|
+
},
|
|
99
|
+
handler: () => {
|
|
100
|
+
if (this.departments.length === 0) {
|
|
101
|
+
return new SwaigFunctionResult('No departments are currently listed in the directory.');
|
|
102
|
+
}
|
|
103
|
+
const lines = this.departments.map((dept) => {
|
|
104
|
+
let line = `${dept.name} - Extension: ${dept.extension}`;
|
|
105
|
+
if (dept.description)
|
|
106
|
+
line += ` (${dept.description})`;
|
|
107
|
+
return line;
|
|
108
|
+
});
|
|
109
|
+
return new SwaigFunctionResult(`Department directory for ${this.companyName}:\n${lines.join('\n')}`);
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
// Tool: transfer_to_department
|
|
113
|
+
this.defineTool({
|
|
114
|
+
name: 'transfer_to_department',
|
|
115
|
+
description: 'Transfer the caller to a department by dialing its extension.',
|
|
116
|
+
parameters: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
department_name: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
description: 'The name of the department to transfer to.',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
required: ['department_name'],
|
|
125
|
+
},
|
|
126
|
+
handler: (_args) => {
|
|
127
|
+
const deptName = _args['department_name'];
|
|
128
|
+
if (!deptName) {
|
|
129
|
+
return new SwaigFunctionResult('Please provide a department name to transfer to.');
|
|
130
|
+
}
|
|
131
|
+
const dept = this.findDepartment(deptName);
|
|
132
|
+
if (!dept) {
|
|
133
|
+
const available = this.departments.map((d) => d.name).join(', ');
|
|
134
|
+
return new SwaigFunctionResult(`Department "${deptName}" not found in the directory. Available departments: ${available}`);
|
|
135
|
+
}
|
|
136
|
+
const result = new SwaigFunctionResult(`Transferring you to ${dept.name} at extension ${dept.extension}. One moment please.`);
|
|
137
|
+
result.connect(dept.extension);
|
|
138
|
+
return result;
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
// Tool: check_in_visitor (only if enabled)
|
|
142
|
+
if (this.checkInEnabled) {
|
|
143
|
+
this.defineTool({
|
|
144
|
+
name: 'check_in_visitor',
|
|
145
|
+
description: 'Check in a visitor by recording their name, purpose of visit, and who they are visiting.',
|
|
146
|
+
parameters: {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties: {
|
|
149
|
+
visitor_name: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
description: 'Full name of the visitor.',
|
|
152
|
+
},
|
|
153
|
+
purpose: {
|
|
154
|
+
type: 'string',
|
|
155
|
+
description: 'Purpose of the visit.',
|
|
156
|
+
},
|
|
157
|
+
visiting: {
|
|
158
|
+
type: 'string',
|
|
159
|
+
description: 'Name of the person or department the visitor is here to see.',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
required: ['visitor_name', 'purpose', 'visiting'],
|
|
163
|
+
},
|
|
164
|
+
handler: async (_args, rawData) => {
|
|
165
|
+
const visitorName = _args['visitor_name'];
|
|
166
|
+
const purpose = _args['purpose'];
|
|
167
|
+
const visiting = _args['visiting'];
|
|
168
|
+
if (!visitorName || !purpose || !visiting) {
|
|
169
|
+
return new SwaigFunctionResult('Please provide the visitor\'s name, purpose of visit, and who they are visiting.');
|
|
170
|
+
}
|
|
171
|
+
const visitorRecord = {
|
|
172
|
+
visitor_name: visitorName,
|
|
173
|
+
purpose,
|
|
174
|
+
visiting,
|
|
175
|
+
checked_in_at: new Date().toISOString(),
|
|
176
|
+
};
|
|
177
|
+
// Store in session
|
|
178
|
+
const session = this.getSession(rawData);
|
|
179
|
+
session.visitors.push(visitorRecord);
|
|
180
|
+
// Fire callback
|
|
181
|
+
if (this.onVisitorCheckInCallback) {
|
|
182
|
+
try {
|
|
183
|
+
await this.onVisitorCheckInCallback(visitorRecord);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
this.log.error(`onVisitorCheckIn callback error: ${err}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return new SwaigFunctionResult(`Visitor checked in successfully! Name: ${visitorName}, Purpose: ${purpose}, Visiting: ${visiting}. Welcome to ${this.companyName}!`);
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// ── Factory function ────────────────────────────────────────────────────────
|
|
196
|
+
/**
|
|
197
|
+
* Factory function that creates and returns a new ReceptionistAgent.
|
|
198
|
+
* @param config - Configuration for the receptionist agent.
|
|
199
|
+
* @returns A configured ReceptionistAgent instance.
|
|
200
|
+
*/
|
|
201
|
+
export function createReceptionistAgent(config) {
|
|
202
|
+
return new ReceptionistAgent(config);
|
|
203
|
+
}
|
|
204
|
+
export default ReceptionistAgent;
|
|
205
|
+
//# sourceMappingURL=ReceptionistAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReceptionistAgent.js","sourceRoot":"","sources":["../../src/prefabs/ReceptionistAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SurveyAgent - A prefab agent that conducts surveys with branching logic,
|
|
3
|
+
* scoring, and conditional question flow.
|
|
4
|
+
*
|
|
5
|
+
* Supports multiple question types (multiple choice, open ended, rating,
|
|
6
|
+
* yes/no), conditional branching based on answers, and per-answer scoring.
|
|
7
|
+
*/
|
|
8
|
+
import { AgentBase } from '../AgentBase.js';
|
|
9
|
+
import type { AgentOptions } from '../types.js';
|
|
10
|
+
export interface SurveyQuestion {
|
|
11
|
+
/** Unique question identifier. */
|
|
12
|
+
id: string;
|
|
13
|
+
/** The question text to ask the caller. */
|
|
14
|
+
text: string;
|
|
15
|
+
/** Question type determines validation and display. */
|
|
16
|
+
type: 'multiple_choice' | 'open_ended' | 'rating' | 'yes_no';
|
|
17
|
+
/** Options for multiple_choice questions. */
|
|
18
|
+
options?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* Next question ID after this one.
|
|
21
|
+
* - string: always go to that question
|
|
22
|
+
* - Record<string, string>: map from answer value to next question ID
|
|
23
|
+
* - undefined: proceed to next question in array order
|
|
24
|
+
*/
|
|
25
|
+
nextQuestion?: string | Record<string, string>;
|
|
26
|
+
/**
|
|
27
|
+
* Points awarded for answers.
|
|
28
|
+
* - number: fixed points for any answer
|
|
29
|
+
* - Record<string, number>: points per specific answer value
|
|
30
|
+
*/
|
|
31
|
+
points?: number | Record<string, number>;
|
|
32
|
+
}
|
|
33
|
+
export interface SurveyConfig {
|
|
34
|
+
/** Agent display name. */
|
|
35
|
+
name?: string;
|
|
36
|
+
/** Ordered list of survey questions. */
|
|
37
|
+
questions: SurveyQuestion[];
|
|
38
|
+
/** Opening message before the first question. */
|
|
39
|
+
introMessage?: string;
|
|
40
|
+
/** Message after the survey is complete. */
|
|
41
|
+
completionMessage?: string;
|
|
42
|
+
/** Callback fired when the survey is finished. */
|
|
43
|
+
onComplete?: (responses: Record<string, unknown>, score: number) => void | Promise<void>;
|
|
44
|
+
/** Additional AgentBase options forwarded to super(). */
|
|
45
|
+
agentOptions?: Partial<AgentOptions>;
|
|
46
|
+
}
|
|
47
|
+
/** Prefab agent that conducts surveys with branching logic, answer scoring, and conditional question flow. */
|
|
48
|
+
export declare class SurveyAgent extends AgentBase {
|
|
49
|
+
private questions;
|
|
50
|
+
private questionMap;
|
|
51
|
+
private introMessage;
|
|
52
|
+
private completionMessage;
|
|
53
|
+
private onCompleteCallback?;
|
|
54
|
+
private sessions;
|
|
55
|
+
/** Declarative prompt sections merged by AgentBase constructor. */
|
|
56
|
+
static PROMPT_SECTIONS: ({
|
|
57
|
+
title: string;
|
|
58
|
+
body: string;
|
|
59
|
+
bullets?: undefined;
|
|
60
|
+
} | {
|
|
61
|
+
title: string;
|
|
62
|
+
bullets: string[];
|
|
63
|
+
body?: undefined;
|
|
64
|
+
})[];
|
|
65
|
+
/**
|
|
66
|
+
* Create a SurveyAgent with the specified questions and callbacks.
|
|
67
|
+
* @param config - Configuration including questions, messages, and completion callback.
|
|
68
|
+
*/
|
|
69
|
+
constructor(config: SurveyConfig);
|
|
70
|
+
private getSession;
|
|
71
|
+
private resolveNextQuestion;
|
|
72
|
+
private calculatePoints;
|
|
73
|
+
private validateAnswer;
|
|
74
|
+
private normalizeAnswer;
|
|
75
|
+
/** Register the answer_question, get_current_question, and get_survey_progress SWAIG tools. */
|
|
76
|
+
protected defineTools(): void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Factory function that creates and returns a new SurveyAgent.
|
|
80
|
+
* @param config - Configuration for the survey agent.
|
|
81
|
+
* @returns A configured SurveyAgent instance.
|
|
82
|
+
*/
|
|
83
|
+
export declare function createSurveyAgent(config: SurveyConfig): SurveyAgent;
|
|
84
|
+
export default SurveyAgent;
|