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,324 @@
|
|
|
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 { SwaigFunctionResult } from '../SwaigFunctionResult.js';
|
|
10
|
+
// ── Agent ───────────────────────────────────────────────────────────────────
|
|
11
|
+
/** Prefab agent that conducts surveys with branching logic, answer scoring, and conditional question flow. */
|
|
12
|
+
export class SurveyAgent extends AgentBase {
|
|
13
|
+
questions;
|
|
14
|
+
questionMap;
|
|
15
|
+
introMessage;
|
|
16
|
+
completionMessage;
|
|
17
|
+
onCompleteCallback;
|
|
18
|
+
sessions = new Map();
|
|
19
|
+
/** Declarative prompt sections merged by AgentBase constructor. */
|
|
20
|
+
static PROMPT_SECTIONS = [
|
|
21
|
+
{
|
|
22
|
+
title: 'Role',
|
|
23
|
+
body: 'You are a friendly survey agent. Your job is to ask the caller a series of questions and record their answers accurately.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: 'Rules',
|
|
27
|
+
bullets: [
|
|
28
|
+
'Always start by calling get_current_question to know which question to ask.',
|
|
29
|
+
'Ask one question at a time.',
|
|
30
|
+
'For multiple choice questions, read all available options to the caller.',
|
|
31
|
+
'For rating questions, specify the scale (1-5 or 1-10 as appropriate).',
|
|
32
|
+
'For yes/no questions, accept variations like "yeah", "nope", "sure", etc.',
|
|
33
|
+
'After each answer, use answer_question to record the response.',
|
|
34
|
+
'Use get_survey_progress to check how far along the survey is.',
|
|
35
|
+
'Do not skip questions unless the branching logic directs you to.',
|
|
36
|
+
'When the survey is complete, thank the caller for their time.',
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Create a SurveyAgent with the specified questions and callbacks.
|
|
42
|
+
* @param config - Configuration including questions, messages, and completion callback.
|
|
43
|
+
*/
|
|
44
|
+
constructor(config) {
|
|
45
|
+
const agentName = config.name ?? 'SurveyAgent';
|
|
46
|
+
super({
|
|
47
|
+
name: agentName,
|
|
48
|
+
...config.agentOptions,
|
|
49
|
+
});
|
|
50
|
+
this.questions = config.questions;
|
|
51
|
+
this.questionMap = new Map(config.questions.map((q) => [q.id, q]));
|
|
52
|
+
this.introMessage = config.introMessage ?? 'Thank you for taking our survey. I have a few questions for you.';
|
|
53
|
+
this.completionMessage = config.completionMessage ?? 'Thank you for completing the survey! Your responses have been recorded.';
|
|
54
|
+
this.onCompleteCallback = config.onComplete;
|
|
55
|
+
// Build questions overview for the prompt
|
|
56
|
+
const questionBullets = this.questions.map((q) => {
|
|
57
|
+
let desc = `[${q.id}] (${q.type}) ${q.text}`;
|
|
58
|
+
if (q.options)
|
|
59
|
+
desc += ` Options: ${q.options.join(', ')}`;
|
|
60
|
+
return desc;
|
|
61
|
+
});
|
|
62
|
+
this.promptAddSection('Survey Questions', { bullets: questionBullets, numbered: true });
|
|
63
|
+
this.promptAddSection('Introduction', {
|
|
64
|
+
body: `Begin the conversation with: "${this.introMessage}"`,
|
|
65
|
+
});
|
|
66
|
+
// Register tools after all fields are initialized
|
|
67
|
+
this.defineTools();
|
|
68
|
+
}
|
|
69
|
+
// ── Session helpers ───────────────────────────────────────────────────
|
|
70
|
+
getSession(rawData) {
|
|
71
|
+
const callId = rawData['call_id'] ?? 'default';
|
|
72
|
+
let session = this.sessions.get(callId);
|
|
73
|
+
if (!session) {
|
|
74
|
+
const firstQuestion = this.questions[0];
|
|
75
|
+
session = {
|
|
76
|
+
currentQuestionIndex: 0,
|
|
77
|
+
currentQuestionId: firstQuestion ? firstQuestion.id : '',
|
|
78
|
+
responses: {},
|
|
79
|
+
score: 0,
|
|
80
|
+
completed: false,
|
|
81
|
+
};
|
|
82
|
+
this.sessions.set(callId, session);
|
|
83
|
+
}
|
|
84
|
+
return session;
|
|
85
|
+
}
|
|
86
|
+
resolveNextQuestion(question, answer) {
|
|
87
|
+
if (!question.nextQuestion) {
|
|
88
|
+
// Default: find next in array order
|
|
89
|
+
const idx = this.questions.findIndex((q) => q.id === question.id);
|
|
90
|
+
if (idx >= 0 && idx < this.questions.length - 1) {
|
|
91
|
+
return this.questions[idx + 1].id;
|
|
92
|
+
}
|
|
93
|
+
return null; // end of survey
|
|
94
|
+
}
|
|
95
|
+
if (typeof question.nextQuestion === 'string') {
|
|
96
|
+
return question.nextQuestion;
|
|
97
|
+
}
|
|
98
|
+
// Conditional branching: try exact match first, then case-insensitive
|
|
99
|
+
const normalizedAnswer = answer.toLowerCase().trim();
|
|
100
|
+
for (const [key, nextId] of Object.entries(question.nextQuestion)) {
|
|
101
|
+
if (key.toLowerCase().trim() === normalizedAnswer) {
|
|
102
|
+
return nextId;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// If no branch matches, try default key or fall through to next in order
|
|
106
|
+
if ('_default' in question.nextQuestion) {
|
|
107
|
+
return question.nextQuestion['_default'];
|
|
108
|
+
}
|
|
109
|
+
const idx = this.questions.findIndex((q) => q.id === question.id);
|
|
110
|
+
if (idx >= 0 && idx < this.questions.length - 1) {
|
|
111
|
+
return this.questions[idx + 1].id;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
calculatePoints(question, answer) {
|
|
116
|
+
if (question.points === undefined)
|
|
117
|
+
return 0;
|
|
118
|
+
if (typeof question.points === 'number')
|
|
119
|
+
return question.points;
|
|
120
|
+
// Per-answer scoring
|
|
121
|
+
const normalizedAnswer = answer.toLowerCase().trim();
|
|
122
|
+
for (const [key, pts] of Object.entries(question.points)) {
|
|
123
|
+
if (key.toLowerCase().trim() === normalizedAnswer) {
|
|
124
|
+
return pts;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
validateAnswer(question, answer) {
|
|
130
|
+
switch (question.type) {
|
|
131
|
+
case 'multiple_choice': {
|
|
132
|
+
if (!question.options || question.options.length === 0)
|
|
133
|
+
return null;
|
|
134
|
+
const normalized = answer.toLowerCase().trim();
|
|
135
|
+
const match = question.options.find((o) => o.toLowerCase().trim() === normalized);
|
|
136
|
+
if (!match) {
|
|
137
|
+
return `Invalid answer. Please choose one of: ${question.options.join(', ')}`;
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
case 'rating': {
|
|
142
|
+
const num = parseInt(answer, 10);
|
|
143
|
+
if (isNaN(num) || num < 1 || num > 10) {
|
|
144
|
+
return 'Please provide a rating between 1 and 10.';
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
case 'yes_no': {
|
|
149
|
+
const normalized = answer.toLowerCase().trim();
|
|
150
|
+
const yesValues = ['yes', 'y', 'yeah', 'yep', 'sure', 'absolutely', 'correct', 'true'];
|
|
151
|
+
const noValues = ['no', 'n', 'nah', 'nope', 'negative', 'false'];
|
|
152
|
+
if (!yesValues.includes(normalized) && !noValues.includes(normalized)) {
|
|
153
|
+
return 'Please answer with yes or no.';
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
case 'open_ended':
|
|
158
|
+
return null; // Accept anything
|
|
159
|
+
default:
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
normalizeAnswer(question, answer) {
|
|
164
|
+
if (question.type === 'yes_no') {
|
|
165
|
+
const normalized = answer.toLowerCase().trim();
|
|
166
|
+
const yesValues = ['yes', 'y', 'yeah', 'yep', 'sure', 'absolutely', 'correct', 'true'];
|
|
167
|
+
return yesValues.includes(normalized) ? 'yes' : 'no';
|
|
168
|
+
}
|
|
169
|
+
return answer;
|
|
170
|
+
}
|
|
171
|
+
// ── Tool registration ─────────────────────────────────────────────────
|
|
172
|
+
/** Register the answer_question, get_current_question, and get_survey_progress SWAIG tools. */
|
|
173
|
+
defineTools() {
|
|
174
|
+
// Tool: answer_question
|
|
175
|
+
this.defineTool({
|
|
176
|
+
name: 'answer_question',
|
|
177
|
+
description: 'Record the caller\'s answer to the current survey question. Validates the answer based on question type and advances to the next question.',
|
|
178
|
+
parameters: {
|
|
179
|
+
type: 'object',
|
|
180
|
+
properties: {
|
|
181
|
+
question_id: {
|
|
182
|
+
type: 'string',
|
|
183
|
+
description: 'The ID of the question being answered.',
|
|
184
|
+
},
|
|
185
|
+
answer: {
|
|
186
|
+
type: 'string',
|
|
187
|
+
description: 'The caller\'s answer to the question.',
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
required: ['question_id', 'answer'],
|
|
191
|
+
},
|
|
192
|
+
handler: async (args, rawData) => {
|
|
193
|
+
const questionId = args['question_id'];
|
|
194
|
+
const answer = args['answer'];
|
|
195
|
+
if (!questionId || !answer) {
|
|
196
|
+
return new SwaigFunctionResult('Both question_id and answer are required.');
|
|
197
|
+
}
|
|
198
|
+
const question = this.questionMap.get(questionId);
|
|
199
|
+
if (!question) {
|
|
200
|
+
return new SwaigFunctionResult(`Unknown question ID "${questionId}".`);
|
|
201
|
+
}
|
|
202
|
+
const session = this.getSession(rawData);
|
|
203
|
+
if (session.completed) {
|
|
204
|
+
return new SwaigFunctionResult('The survey has already been completed.');
|
|
205
|
+
}
|
|
206
|
+
// Validate the answer
|
|
207
|
+
const validationError = this.validateAnswer(question, answer);
|
|
208
|
+
if (validationError) {
|
|
209
|
+
return new SwaigFunctionResult(validationError);
|
|
210
|
+
}
|
|
211
|
+
// Normalize and save
|
|
212
|
+
const normalizedAnswer = this.normalizeAnswer(question, answer);
|
|
213
|
+
session.responses[questionId] = normalizedAnswer;
|
|
214
|
+
// Calculate and add points
|
|
215
|
+
const points = this.calculatePoints(question, normalizedAnswer);
|
|
216
|
+
session.score += points;
|
|
217
|
+
// Determine next question
|
|
218
|
+
const nextId = this.resolveNextQuestion(question, normalizedAnswer);
|
|
219
|
+
if (!nextId || !this.questionMap.has(nextId)) {
|
|
220
|
+
// Survey complete
|
|
221
|
+
session.completed = true;
|
|
222
|
+
if (this.onCompleteCallback) {
|
|
223
|
+
try {
|
|
224
|
+
await this.onCompleteCallback({ ...session.responses }, session.score);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
this.log.error(`onComplete callback error: ${err}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const answeredCount = Object.keys(session.responses).length;
|
|
231
|
+
return new SwaigFunctionResult(`Answer recorded. The survey is now complete! ${answeredCount} questions answered, total score: ${session.score}. ${this.completionMessage}`);
|
|
232
|
+
}
|
|
233
|
+
// Advance to next question
|
|
234
|
+
session.currentQuestionId = nextId;
|
|
235
|
+
const nextQ = this.questionMap.get(nextId);
|
|
236
|
+
const nextIdx = this.questions.findIndex((q) => q.id === nextId);
|
|
237
|
+
if (nextIdx >= 0)
|
|
238
|
+
session.currentQuestionIndex = nextIdx;
|
|
239
|
+
let nextInfo = `Answer recorded. Next question [${nextQ.id}]: "${nextQ.text}"`;
|
|
240
|
+
if (nextQ.type === 'multiple_choice' && nextQ.options) {
|
|
241
|
+
nextInfo += ` (Options: ${nextQ.options.join(', ')})`;
|
|
242
|
+
}
|
|
243
|
+
else if (nextQ.type === 'rating') {
|
|
244
|
+
nextInfo += ' (Rating: 1-10)';
|
|
245
|
+
}
|
|
246
|
+
else if (nextQ.type === 'yes_no') {
|
|
247
|
+
nextInfo += ' (Yes/No)';
|
|
248
|
+
}
|
|
249
|
+
return new SwaigFunctionResult(nextInfo);
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
// Tool: get_current_question
|
|
253
|
+
this.defineTool({
|
|
254
|
+
name: 'get_current_question',
|
|
255
|
+
description: 'Get the current question that should be asked to the caller.',
|
|
256
|
+
parameters: {
|
|
257
|
+
type: 'object',
|
|
258
|
+
properties: {},
|
|
259
|
+
},
|
|
260
|
+
handler: (_args, rawData) => {
|
|
261
|
+
const session = this.getSession(rawData);
|
|
262
|
+
if (session.completed) {
|
|
263
|
+
return new SwaigFunctionResult('The survey has been completed. No more questions.');
|
|
264
|
+
}
|
|
265
|
+
const question = this.questionMap.get(session.currentQuestionId);
|
|
266
|
+
if (!question) {
|
|
267
|
+
return new SwaigFunctionResult('No current question available.');
|
|
268
|
+
}
|
|
269
|
+
let info = `Current question [${question.id}] (${question.type}): "${question.text}"`;
|
|
270
|
+
if (question.type === 'multiple_choice' && question.options) {
|
|
271
|
+
info += ` Options: ${question.options.join(', ')}`;
|
|
272
|
+
}
|
|
273
|
+
else if (question.type === 'rating') {
|
|
274
|
+
info += ' (Caller should provide a rating from 1 to 10)';
|
|
275
|
+
}
|
|
276
|
+
else if (question.type === 'yes_no') {
|
|
277
|
+
info += ' (Caller should answer yes or no)';
|
|
278
|
+
}
|
|
279
|
+
return new SwaigFunctionResult(info);
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
// Tool: get_survey_progress
|
|
283
|
+
this.defineTool({
|
|
284
|
+
name: 'get_survey_progress',
|
|
285
|
+
description: 'Get the current progress of the survey, including how many questions have been answered and the current score.',
|
|
286
|
+
parameters: {
|
|
287
|
+
type: 'object',
|
|
288
|
+
properties: {},
|
|
289
|
+
},
|
|
290
|
+
handler: (_args, rawData) => {
|
|
291
|
+
const session = this.getSession(rawData);
|
|
292
|
+
const answeredCount = Object.keys(session.responses).length;
|
|
293
|
+
const totalCount = this.questions.length;
|
|
294
|
+
const percentage = totalCount > 0 ? Math.round((answeredCount / totalCount) * 100) : 0;
|
|
295
|
+
let progress = `Survey progress: ${answeredCount}/${totalCount} questions answered (${percentage}%). Current score: ${session.score}.`;
|
|
296
|
+
if (session.completed) {
|
|
297
|
+
progress += ' Survey is COMPLETE.';
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
progress += ` Current question: ${session.currentQuestionId}.`;
|
|
301
|
+
}
|
|
302
|
+
// List answered questions
|
|
303
|
+
if (answeredCount > 0) {
|
|
304
|
+
const answered = Object.entries(session.responses)
|
|
305
|
+
.map(([qId, ans]) => `${qId}: ${ans}`)
|
|
306
|
+
.join('; ');
|
|
307
|
+
progress += ` Answers so far: ${answered}`;
|
|
308
|
+
}
|
|
309
|
+
return new SwaigFunctionResult(progress);
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// ── Factory function ────────────────────────────────────────────────────────
|
|
315
|
+
/**
|
|
316
|
+
* Factory function that creates and returns a new SurveyAgent.
|
|
317
|
+
* @param config - Configuration for the survey agent.
|
|
318
|
+
* @returns A configured SurveyAgent instance.
|
|
319
|
+
*/
|
|
320
|
+
export function createSurveyAgent(config) {
|
|
321
|
+
return new SurveyAgent(config);
|
|
322
|
+
}
|
|
323
|
+
export default SurveyAgent;
|
|
324
|
+
//# sourceMappingURL=SurveyAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SurveyAgent.js","sourceRoot":"","sources":["../../src/prefabs/SurveyAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prefab agents - Ready-to-use agent implementations built on AgentBase.
|
|
3
|
+
*/
|
|
4
|
+
export { InfoGathererAgent, createInfoGathererAgent } from './InfoGathererAgent.js';
|
|
5
|
+
export type { InfoGathererConfig, InfoGathererField } from './InfoGathererAgent.js';
|
|
6
|
+
export { SurveyAgent, createSurveyAgent } from './SurveyAgent.js';
|
|
7
|
+
export type { SurveyConfig, SurveyQuestion } from './SurveyAgent.js';
|
|
8
|
+
export { FAQBotAgent, createFAQBotAgent } from './FAQBotAgent.js';
|
|
9
|
+
export type { FAQBotConfig, FAQEntry } from './FAQBotAgent.js';
|
|
10
|
+
export { ConciergeAgent, createConciergeAgent } from './ConciergeAgent.js';
|
|
11
|
+
export type { ConciergeConfig, Department } from './ConciergeAgent.js';
|
|
12
|
+
export { ReceptionistAgent, createReceptionistAgent } from './ReceptionistAgent.js';
|
|
13
|
+
export type { ReceptionistConfig, ReceptionistDepartment } from './ReceptionistAgent.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prefab agents - Ready-to-use agent implementations built on AgentBase.
|
|
3
|
+
*/
|
|
4
|
+
// InfoGathererAgent
|
|
5
|
+
export { InfoGathererAgent, createInfoGathererAgent } from './InfoGathererAgent.js';
|
|
6
|
+
// SurveyAgent
|
|
7
|
+
export { SurveyAgent, createSurveyAgent } from './SurveyAgent.js';
|
|
8
|
+
// FAQBotAgent
|
|
9
|
+
export { FAQBotAgent, createFAQBotAgent } from './FAQBotAgent.js';
|
|
10
|
+
// ConciergeAgent
|
|
11
|
+
export { ConciergeAgent, createConciergeAgent } from './ConciergeAgent.js';
|
|
12
|
+
// ReceptionistAgent
|
|
13
|
+
export { ReceptionistAgent, createReceptionistAgent } from './ReceptionistAgent.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prefabs/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGpF,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGlE,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGlE,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3E,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillBase - Abstract base class for agent skills.
|
|
3
|
+
*
|
|
4
|
+
* Skills are modular capabilities that can be added to an agent.
|
|
5
|
+
* They define tools, prompt sections, hints, and global data.
|
|
6
|
+
*/
|
|
7
|
+
import type { SwaigHandler } from '../SwaigFunction.js';
|
|
8
|
+
/** Configuration key-value pairs passed to a skill at construction time. */
|
|
9
|
+
export interface SkillConfig {
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
/** Definition of a SWAIG tool provided by a skill. */
|
|
13
|
+
export interface SkillToolDefinition {
|
|
14
|
+
/** Unique tool name used in SWAIG function registration. */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Human-readable description of what the tool does, shown to the AI. */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Parameter schema for the tool, keyed by parameter name. */
|
|
19
|
+
parameters?: Record<string, unknown>;
|
|
20
|
+
/** Handler function invoked when the tool is called. */
|
|
21
|
+
handler: SwaigHandler;
|
|
22
|
+
/** Whether the tool requires secure (authenticated) invocation. */
|
|
23
|
+
secure?: boolean;
|
|
24
|
+
/** Filler phrases spoken while the tool executes, keyed by language. */
|
|
25
|
+
fillers?: Record<string, string[]>;
|
|
26
|
+
/** List of parameter names that are required. */
|
|
27
|
+
required?: string[];
|
|
28
|
+
}
|
|
29
|
+
/** A section of prompt content injected into the agent's system prompt by a skill. */
|
|
30
|
+
export interface SkillPromptSection {
|
|
31
|
+
/** Section heading displayed in the prompt. */
|
|
32
|
+
title: string;
|
|
33
|
+
/** Optional body text for the section. */
|
|
34
|
+
body?: string;
|
|
35
|
+
/** Optional bullet points appended after the body. */
|
|
36
|
+
bullets?: string[];
|
|
37
|
+
/** If true, render bullets as a numbered list instead of unordered. */
|
|
38
|
+
numbered?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Metadata describing a skill's identity, requirements, and configuration schema. */
|
|
41
|
+
export interface SkillManifest {
|
|
42
|
+
/** Unique skill name used for registration and lookup. */
|
|
43
|
+
name: string;
|
|
44
|
+
/** Human-readable description of the skill's purpose. */
|
|
45
|
+
description: string;
|
|
46
|
+
/** Semantic version string (e.g., "1.0.0"). */
|
|
47
|
+
version: string;
|
|
48
|
+
/** Author or organization that created the skill. */
|
|
49
|
+
author?: string;
|
|
50
|
+
/** Tags for categorization and discovery. */
|
|
51
|
+
tags?: string[];
|
|
52
|
+
/** Environment variables that must be set for the skill to function. */
|
|
53
|
+
requiredEnvVars?: string[];
|
|
54
|
+
/** NPM packages or external dependencies required by the skill. */
|
|
55
|
+
requiredPackages?: string[];
|
|
56
|
+
/** JSON-schema-like description of the skill's configuration options. */
|
|
57
|
+
configSchema?: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Abstract base class for agent skills.
|
|
61
|
+
*
|
|
62
|
+
* Skills are modular capabilities that can be added to an agent.
|
|
63
|
+
* They define tools, prompt sections, hints, and global data.
|
|
64
|
+
*/
|
|
65
|
+
export declare abstract class SkillBase {
|
|
66
|
+
/** The registered name of this skill type. */
|
|
67
|
+
readonly skillName: string;
|
|
68
|
+
/** Unique identifier for this skill instance (includes timestamp and random bytes). */
|
|
69
|
+
readonly instanceId: string;
|
|
70
|
+
/** Configuration options provided at construction time. */
|
|
71
|
+
protected config: SkillConfig;
|
|
72
|
+
private _initialized;
|
|
73
|
+
/**
|
|
74
|
+
* Create a new skill instance.
|
|
75
|
+
* @param skillName - The registered name for this skill type.
|
|
76
|
+
* @param config - Optional configuration key-value pairs.
|
|
77
|
+
*/
|
|
78
|
+
constructor(skillName: string, config?: SkillConfig);
|
|
79
|
+
/**
|
|
80
|
+
* Get the skill manifest containing metadata, requirements, and config schema.
|
|
81
|
+
* @returns The skill's manifest object.
|
|
82
|
+
*/
|
|
83
|
+
abstract getManifest(): SkillManifest;
|
|
84
|
+
/**
|
|
85
|
+
* Setup the skill. Called when the skill is added to an agent.
|
|
86
|
+
* Override to perform initialization (API connections, config validation, etc.)
|
|
87
|
+
*/
|
|
88
|
+
setup(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Return the SWAIG tool definitions this skill provides.
|
|
91
|
+
* @returns Array of tool definitions to register with the agent.
|
|
92
|
+
*/
|
|
93
|
+
abstract getTools(): SkillToolDefinition[];
|
|
94
|
+
/**
|
|
95
|
+
* Get prompt sections to inject into the agent's system prompt.
|
|
96
|
+
* @returns Array of prompt sections with titles, bodies, and bullets.
|
|
97
|
+
*/
|
|
98
|
+
getPromptSections(): SkillPromptSection[];
|
|
99
|
+
/**
|
|
100
|
+
* Get speech recognition hints relevant to this skill.
|
|
101
|
+
* @returns Array of hint strings to improve speech recognition accuracy.
|
|
102
|
+
*/
|
|
103
|
+
getHints(): string[];
|
|
104
|
+
/**
|
|
105
|
+
* Get global data to merge into the agent's global data store.
|
|
106
|
+
* @returns Key-value pairs to be merged into the agent's global data.
|
|
107
|
+
*/
|
|
108
|
+
getGlobalData(): Record<string, unknown>;
|
|
109
|
+
/**
|
|
110
|
+
* Cleanup resources. Called when the skill is removed from an agent.
|
|
111
|
+
*/
|
|
112
|
+
cleanup(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Validate that all required environment variables declared in the manifest are set.
|
|
115
|
+
* @returns Array of missing environment variable names (empty if all are present).
|
|
116
|
+
*/
|
|
117
|
+
validateEnvVars(): string[];
|
|
118
|
+
/**
|
|
119
|
+
* Check if the skill has been initialized by the SkillManager.
|
|
120
|
+
* @returns True if setup() has completed and the skill is marked initialized.
|
|
121
|
+
*/
|
|
122
|
+
isInitialized(): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Mark the skill as initialized (called by SkillManager).
|
|
125
|
+
*/
|
|
126
|
+
markInitialized(): void;
|
|
127
|
+
/**
|
|
128
|
+
* Get a configuration value by key, falling back to a default if not set.
|
|
129
|
+
* @param key - The configuration key to look up.
|
|
130
|
+
* @param defaultValue - Value to return if the key is not present.
|
|
131
|
+
* @returns The configuration value cast to type T, or the default value.
|
|
132
|
+
*/
|
|
133
|
+
getConfig<T = unknown>(key: string, defaultValue?: T): T;
|
|
134
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillBase - Abstract base class for agent skills.
|
|
3
|
+
*
|
|
4
|
+
* Skills are modular capabilities that can be added to an agent.
|
|
5
|
+
* They define tools, prompt sections, hints, and global data.
|
|
6
|
+
*/
|
|
7
|
+
import { randomBytes } from 'node:crypto';
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base class for agent skills.
|
|
10
|
+
*
|
|
11
|
+
* Skills are modular capabilities that can be added to an agent.
|
|
12
|
+
* They define tools, prompt sections, hints, and global data.
|
|
13
|
+
*/
|
|
14
|
+
export class SkillBase {
|
|
15
|
+
/** The registered name of this skill type. */
|
|
16
|
+
skillName;
|
|
17
|
+
/** Unique identifier for this skill instance (includes timestamp and random bytes). */
|
|
18
|
+
instanceId;
|
|
19
|
+
/** Configuration options provided at construction time. */
|
|
20
|
+
config;
|
|
21
|
+
_initialized = false;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new skill instance.
|
|
24
|
+
* @param skillName - The registered name for this skill type.
|
|
25
|
+
* @param config - Optional configuration key-value pairs.
|
|
26
|
+
*/
|
|
27
|
+
constructor(skillName, config) {
|
|
28
|
+
this.skillName = skillName;
|
|
29
|
+
this.config = config ?? {};
|
|
30
|
+
this.instanceId = `${skillName}-${Date.now().toString(36)}-${randomBytes(4).toString('hex')}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Setup the skill. Called when the skill is added to an agent.
|
|
34
|
+
* Override to perform initialization (API connections, config validation, etc.)
|
|
35
|
+
*/
|
|
36
|
+
async setup() {
|
|
37
|
+
// Default no-op
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get prompt sections to inject into the agent's system prompt.
|
|
41
|
+
* @returns Array of prompt sections with titles, bodies, and bullets.
|
|
42
|
+
*/
|
|
43
|
+
getPromptSections() {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get speech recognition hints relevant to this skill.
|
|
48
|
+
* @returns Array of hint strings to improve speech recognition accuracy.
|
|
49
|
+
*/
|
|
50
|
+
getHints() {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get global data to merge into the agent's global data store.
|
|
55
|
+
* @returns Key-value pairs to be merged into the agent's global data.
|
|
56
|
+
*/
|
|
57
|
+
getGlobalData() {
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Cleanup resources. Called when the skill is removed from an agent.
|
|
62
|
+
*/
|
|
63
|
+
async cleanup() {
|
|
64
|
+
// Default no-op
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate that all required environment variables declared in the manifest are set.
|
|
68
|
+
* @returns Array of missing environment variable names (empty if all are present).
|
|
69
|
+
*/
|
|
70
|
+
validateEnvVars() {
|
|
71
|
+
const manifest = this.getManifest();
|
|
72
|
+
const missing = [];
|
|
73
|
+
if (manifest.requiredEnvVars) {
|
|
74
|
+
for (const envVar of manifest.requiredEnvVars) {
|
|
75
|
+
if (!process.env[envVar]) {
|
|
76
|
+
missing.push(envVar);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return missing;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if the skill has been initialized by the SkillManager.
|
|
84
|
+
* @returns True if setup() has completed and the skill is marked initialized.
|
|
85
|
+
*/
|
|
86
|
+
isInitialized() {
|
|
87
|
+
return this._initialized;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Mark the skill as initialized (called by SkillManager).
|
|
91
|
+
*/
|
|
92
|
+
markInitialized() {
|
|
93
|
+
this._initialized = true;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get a configuration value by key, falling back to a default if not set.
|
|
97
|
+
* @param key - The configuration key to look up.
|
|
98
|
+
* @param defaultValue - Value to return if the key is not present.
|
|
99
|
+
* @returns The configuration value cast to type T, or the default value.
|
|
100
|
+
*/
|
|
101
|
+
getConfig(key, defaultValue) {
|
|
102
|
+
return (this.config[key] !== undefined ? this.config[key] : defaultValue);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=SkillBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillBase.js","sourceRoot":"","sources":["../../src/skills/SkillBase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0D1C;;;;;GAKG;AACH,MAAM,OAAgB,SAAS;IAC7B,8CAA8C;IACrC,SAAS,CAAS;IAC3B,uFAAuF;IAC9E,UAAU,CAAS;IAC5B,2DAA2D;IACjD,MAAM,CAAc;IACtB,YAAY,GAAG,KAAK,CAAC;IAE7B;;;;OAIG;IACH,YAAY,SAAiB,EAAE,MAAoB;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAChG,CAAC;IAQD;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,gBAAgB;IAClB,CAAC;IAQD;;;OAGG;IACH,iBAAiB;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,gBAAgB;IAClB,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC7B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAc,GAAW,EAAE,YAAgB;QAClD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAM,CAAC;IACjF,CAAC;CACF"}
|