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.
Files changed (245) hide show
  1. package/CLAUDE.md +112 -0
  2. package/README.md +417 -0
  3. package/dist/AgentBase.d.ts +481 -0
  4. package/dist/AgentBase.js +1155 -0
  5. package/dist/AgentBase.js.map +1 -0
  6. package/dist/AgentServer.d.ts +60 -0
  7. package/dist/AgentServer.js +128 -0
  8. package/dist/AgentServer.js.map +1 -0
  9. package/dist/AuthHandler.d.ts +56 -0
  10. package/dist/AuthHandler.js +119 -0
  11. package/dist/AuthHandler.js.map +1 -0
  12. package/dist/ConfigLoader.d.ts +68 -0
  13. package/dist/ConfigLoader.js +150 -0
  14. package/dist/ConfigLoader.js.map +1 -0
  15. package/dist/ContextBuilder.d.ts +431 -0
  16. package/dist/ContextBuilder.js +751 -0
  17. package/dist/ContextBuilder.js.map +1 -0
  18. package/dist/DataMap.d.ts +179 -0
  19. package/dist/DataMap.js +321 -0
  20. package/dist/DataMap.js.map +1 -0
  21. package/dist/Logger.d.ts +91 -0
  22. package/dist/Logger.js +191 -0
  23. package/dist/Logger.js.map +1 -0
  24. package/dist/PomBuilder.d.ts +144 -0
  25. package/dist/PomBuilder.js +249 -0
  26. package/dist/PomBuilder.js.map +1 -0
  27. package/dist/PromptManager.d.ts +85 -0
  28. package/dist/PromptManager.js +108 -0
  29. package/dist/PromptManager.js.map +1 -0
  30. package/dist/SchemaUtils.d.ts +42 -0
  31. package/dist/SchemaUtils.js +148 -0
  32. package/dist/SchemaUtils.js.map +1 -0
  33. package/dist/ServerlessAdapter.d.ts +100 -0
  34. package/dist/ServerlessAdapter.js +166 -0
  35. package/dist/ServerlessAdapter.js.map +1 -0
  36. package/dist/SessionManager.d.ts +86 -0
  37. package/dist/SessionManager.js +155 -0
  38. package/dist/SessionManager.js.map +1 -0
  39. package/dist/SslConfig.d.ts +77 -0
  40. package/dist/SslConfig.js +100 -0
  41. package/dist/SslConfig.js.map +1 -0
  42. package/dist/SwaigFunction.d.ts +88 -0
  43. package/dist/SwaigFunction.js +125 -0
  44. package/dist/SwaigFunction.js.map +1 -0
  45. package/dist/SwaigFunctionResult.d.ts +442 -0
  46. package/dist/SwaigFunctionResult.js +735 -0
  47. package/dist/SwaigFunctionResult.js.map +1 -0
  48. package/dist/SwmlBuilder.d.ts +37 -0
  49. package/dist/SwmlBuilder.js +55 -0
  50. package/dist/SwmlBuilder.js.map +1 -0
  51. package/dist/cli/agent-loader.d.ts +22 -0
  52. package/dist/cli/agent-loader.js +106 -0
  53. package/dist/cli/agent-loader.js.map +1 -0
  54. package/dist/cli/mock-data.d.ts +37 -0
  55. package/dist/cli/mock-data.js +79 -0
  56. package/dist/cli/mock-data.js.map +1 -0
  57. package/dist/cli/swaig-test.d.ts +32 -0
  58. package/dist/cli/swaig-test.js +405 -0
  59. package/dist/cli/swaig-test.js.map +1 -0
  60. package/dist/index.d.ts +36 -0
  61. package/dist/index.js +44 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/prefabs/ConciergeAgent.d.ts +64 -0
  64. package/dist/prefabs/ConciergeAgent.js +188 -0
  65. package/dist/prefabs/ConciergeAgent.js.map +1 -0
  66. package/dist/prefabs/FAQBotAgent.d.ts +68 -0
  67. package/dist/prefabs/FAQBotAgent.js +206 -0
  68. package/dist/prefabs/FAQBotAgent.js.map +1 -0
  69. package/dist/prefabs/InfoGathererAgent.d.ts +73 -0
  70. package/dist/prefabs/InfoGathererAgent.js +202 -0
  71. package/dist/prefabs/InfoGathererAgent.js.map +1 -0
  72. package/dist/prefabs/ReceptionistAgent.d.ts +65 -0
  73. package/dist/prefabs/ReceptionistAgent.js +205 -0
  74. package/dist/prefabs/ReceptionistAgent.js.map +1 -0
  75. package/dist/prefabs/SurveyAgent.d.ts +84 -0
  76. package/dist/prefabs/SurveyAgent.js +324 -0
  77. package/dist/prefabs/SurveyAgent.js.map +1 -0
  78. package/dist/prefabs/index.d.ts +13 -0
  79. package/dist/prefabs/index.js +14 -0
  80. package/dist/prefabs/index.js.map +1 -0
  81. package/dist/skills/SkillBase.d.ts +134 -0
  82. package/dist/skills/SkillBase.js +105 -0
  83. package/dist/skills/SkillBase.js.map +1 -0
  84. package/dist/skills/SkillManager.d.ts +83 -0
  85. package/dist/skills/SkillManager.js +159 -0
  86. package/dist/skills/SkillManager.js.map +1 -0
  87. package/dist/skills/SkillRegistry.d.ts +105 -0
  88. package/dist/skills/SkillRegistry.js +195 -0
  89. package/dist/skills/SkillRegistry.js.map +1 -0
  90. package/dist/skills/builtin/api_ninjas_trivia.d.ts +35 -0
  91. package/dist/skills/builtin/api_ninjas_trivia.js +161 -0
  92. package/dist/skills/builtin/api_ninjas_trivia.js.map +1 -0
  93. package/dist/skills/builtin/claude_skills.d.ts +34 -0
  94. package/dist/skills/builtin/claude_skills.js +156 -0
  95. package/dist/skills/builtin/claude_skills.js.map +1 -0
  96. package/dist/skills/builtin/custom_skills.d.ts +59 -0
  97. package/dist/skills/builtin/custom_skills.js +231 -0
  98. package/dist/skills/builtin/custom_skills.js.map +1 -0
  99. package/dist/skills/builtin/datasphere.d.ts +34 -0
  100. package/dist/skills/builtin/datasphere.js +163 -0
  101. package/dist/skills/builtin/datasphere.js.map +1 -0
  102. package/dist/skills/builtin/datasphere_serverless.d.ts +54 -0
  103. package/dist/skills/builtin/datasphere_serverless.js +155 -0
  104. package/dist/skills/builtin/datasphere_serverless.js.map +1 -0
  105. package/dist/skills/builtin/datetime.d.ts +31 -0
  106. package/dist/skills/builtin/datetime.js +95 -0
  107. package/dist/skills/builtin/datetime.js.map +1 -0
  108. package/dist/skills/builtin/google_maps.d.ts +33 -0
  109. package/dist/skills/builtin/google_maps.js +233 -0
  110. package/dist/skills/builtin/google_maps.js.map +1 -0
  111. package/dist/skills/builtin/index.d.ts +28 -0
  112. package/dist/skills/builtin/index.js +75 -0
  113. package/dist/skills/builtin/index.js.map +1 -0
  114. package/dist/skills/builtin/info_gatherer.d.ts +52 -0
  115. package/dist/skills/builtin/info_gatherer.js +237 -0
  116. package/dist/skills/builtin/info_gatherer.js.map +1 -0
  117. package/dist/skills/builtin/joke.d.ts +32 -0
  118. package/dist/skills/builtin/joke.js +142 -0
  119. package/dist/skills/builtin/joke.js.map +1 -0
  120. package/dist/skills/builtin/math.d.ts +33 -0
  121. package/dist/skills/builtin/math.js +120 -0
  122. package/dist/skills/builtin/math.js.map +1 -0
  123. package/dist/skills/builtin/mcp_gateway.d.ts +35 -0
  124. package/dist/skills/builtin/mcp_gateway.js +85 -0
  125. package/dist/skills/builtin/mcp_gateway.js.map +1 -0
  126. package/dist/skills/builtin/native_vector_search.d.ts +44 -0
  127. package/dist/skills/builtin/native_vector_search.js +248 -0
  128. package/dist/skills/builtin/native_vector_search.js.map +1 -0
  129. package/dist/skills/builtin/play_background_file.d.ts +34 -0
  130. package/dist/skills/builtin/play_background_file.js +135 -0
  131. package/dist/skills/builtin/play_background_file.js.map +1 -0
  132. package/dist/skills/builtin/spider.d.ts +34 -0
  133. package/dist/skills/builtin/spider.js +164 -0
  134. package/dist/skills/builtin/spider.js.map +1 -0
  135. package/dist/skills/builtin/swml_transfer.d.ts +44 -0
  136. package/dist/skills/builtin/swml_transfer.js +204 -0
  137. package/dist/skills/builtin/swml_transfer.js.map +1 -0
  138. package/dist/skills/builtin/weather_api.d.ts +34 -0
  139. package/dist/skills/builtin/weather_api.js +136 -0
  140. package/dist/skills/builtin/weather_api.js.map +1 -0
  141. package/dist/skills/builtin/web_search.d.ts +34 -0
  142. package/dist/skills/builtin/web_search.js +141 -0
  143. package/dist/skills/builtin/web_search.js.map +1 -0
  144. package/dist/skills/builtin/wikipedia_search.d.ts +34 -0
  145. package/dist/skills/builtin/wikipedia_search.js +166 -0
  146. package/dist/skills/builtin/wikipedia_search.js.map +1 -0
  147. package/dist/skills/index.d.ts +11 -0
  148. package/dist/skills/index.js +10 -0
  149. package/dist/skills/index.js.map +1 -0
  150. package/dist/types.d.ts +85 -0
  151. package/dist/types.js +5 -0
  152. package/dist/types.js.map +1 -0
  153. package/docs/agent-guide.md +869 -0
  154. package/docs/api-reference.md +2419 -0
  155. package/docs/architecture.md +843 -0
  156. package/docs/cli-guide.md +579 -0
  157. package/docs/configuration.md +422 -0
  158. package/docs/contexts-guide.md +787 -0
  159. package/docs/datamap-guide.md +1141 -0
  160. package/docs/prefabs-guide.md +830 -0
  161. package/docs/security.md +436 -0
  162. package/docs/serverless-guide.md +513 -0
  163. package/docs/skills-guide.md +845 -0
  164. package/docs/swaig-reference.md +1627 -0
  165. package/examples/call-flow.ts +60 -0
  166. package/examples/contexts-steps.ts +62 -0
  167. package/examples/datamap-tools.ts +52 -0
  168. package/examples/dynamic-config.ts +51 -0
  169. package/examples/multi-agent.ts +67 -0
  170. package/examples/pom-prompt.ts +68 -0
  171. package/examples/simple-agent.ts +33 -0
  172. package/package.json +35 -0
  173. package/src/AgentBase.ts +1279 -0
  174. package/src/AgentServer.ts +149 -0
  175. package/src/AuthHandler.ts +141 -0
  176. package/src/ConfigLoader.ts +165 -0
  177. package/src/ContextBuilder.ts +796 -0
  178. package/src/DataMap.ts +365 -0
  179. package/src/Logger.ts +197 -0
  180. package/src/PomBuilder.ts +298 -0
  181. package/src/PromptManager.ts +133 -0
  182. package/src/SchemaUtils.ts +170 -0
  183. package/src/ServerlessAdapter.ts +218 -0
  184. package/src/SessionManager.ts +161 -0
  185. package/src/SslConfig.ts +118 -0
  186. package/src/SwaigFunction.ts +168 -0
  187. package/src/SwaigFunctionResult.ts +864 -0
  188. package/src/SwmlBuilder.ts +62 -0
  189. package/src/cli/agent-loader.ts +122 -0
  190. package/src/cli/mock-data.ts +110 -0
  191. package/src/cli/swaig-test.ts +440 -0
  192. package/src/index.ts +99 -0
  193. package/src/prefabs/ConciergeAgent.ts +251 -0
  194. package/src/prefabs/FAQBotAgent.ts +263 -0
  195. package/src/prefabs/InfoGathererAgent.ts +276 -0
  196. package/src/prefabs/ReceptionistAgent.ts +277 -0
  197. package/src/prefabs/SurveyAgent.ts +413 -0
  198. package/src/prefabs/index.ts +23 -0
  199. package/src/skills/SkillBase.ts +184 -0
  200. package/src/skills/SkillManager.ts +177 -0
  201. package/src/skills/SkillRegistry.ts +231 -0
  202. package/src/skills/builtin/api_ninjas_trivia.ts +230 -0
  203. package/src/skills/builtin/claude_skills.ts +239 -0
  204. package/src/skills/builtin/custom_skills.ts +326 -0
  205. package/src/skills/builtin/datasphere.ts +225 -0
  206. package/src/skills/builtin/datasphere_serverless.ts +194 -0
  207. package/src/skills/builtin/datetime.ts +115 -0
  208. package/src/skills/builtin/google_maps.ts +347 -0
  209. package/src/skills/builtin/index.ts +79 -0
  210. package/src/skills/builtin/info_gatherer.ts +331 -0
  211. package/src/skills/builtin/joke.ts +180 -0
  212. package/src/skills/builtin/math.ts +150 -0
  213. package/src/skills/builtin/mcp_gateway.ts +99 -0
  214. package/src/skills/builtin/native_vector_search.ts +327 -0
  215. package/src/skills/builtin/play_background_file.ts +189 -0
  216. package/src/skills/builtin/spider.ts +232 -0
  217. package/src/skills/builtin/swml_transfer.ts +285 -0
  218. package/src/skills/builtin/weather_api.ts +193 -0
  219. package/src/skills/builtin/web_search.ts +212 -0
  220. package/src/skills/builtin/wikipedia_search.ts +248 -0
  221. package/src/skills/index.ts +12 -0
  222. package/src/types.ts +99 -0
  223. package/tests/AgentBase.test.ts +693 -0
  224. package/tests/AgentServer.test.ts +102 -0
  225. package/tests/AuthHandler.test.ts +121 -0
  226. package/tests/ConfigLoader.test.ts +121 -0
  227. package/tests/DataMap.test.ts +286 -0
  228. package/tests/Logger.test.ts +218 -0
  229. package/tests/PomBuilder.test.ts +164 -0
  230. package/tests/ProxyDetection.test.ts +185 -0
  231. package/tests/SchemaUtils.test.ts +106 -0
  232. package/tests/ServerlessAdapter.test.ts +200 -0
  233. package/tests/SessionManager.test.ts +139 -0
  234. package/tests/SslConfig.test.ts +97 -0
  235. package/tests/SwaigFunctionResult.test.ts +298 -0
  236. package/tests/cli/mock-data.test.ts +94 -0
  237. package/tests/cli/swaig-test.test.ts +96 -0
  238. package/tests/prefabs/prefabs.test.ts +854 -0
  239. package/tests/setup.ts +6 -0
  240. package/tests/skills/SkillBase.test.ts +118 -0
  241. package/tests/skills/SkillManager.test.ts +164 -0
  242. package/tests/skills/SkillRegistry.test.ts +124 -0
  243. package/tests/skills/builtin.test.ts +924 -0
  244. package/tsconfig.json +18 -0
  245. package/vitest.config.ts +9 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Google Maps Skill - Provides directions and place search via Google Maps APIs.
3
+ *
4
+ * Tier 3 built-in skill: requires GOOGLE_MAPS_API_KEY environment variable.
5
+ * Uses Google Directions API for route information and Google Places API
6
+ * for place search and discovery.
7
+ */
8
+ import { SkillBase } from '../SkillBase.js';
9
+ import { SwaigFunctionResult } from '../../SwaigFunctionResult.js';
10
+ /**
11
+ * Provides driving/walking/transit directions and place search via Google Maps APIs.
12
+ *
13
+ * Tier 3 built-in skill. Requires the `GOOGLE_MAPS_API_KEY` environment variable.
14
+ * Supports a `default_mode` config option ("driving"|"walking"|"bicycling"|"transit").
15
+ */
16
+ export class GoogleMapsSkill extends SkillBase {
17
+ /**
18
+ * @param config - Optional configuration; supports `default_mode` for travel mode.
19
+ */
20
+ constructor(config) {
21
+ super('google_maps', config);
22
+ }
23
+ /** @returns Manifest declaring GOOGLE_MAPS_API_KEY as required and config schema for default_mode. */
24
+ getManifest() {
25
+ return {
26
+ name: 'google_maps',
27
+ description: 'Provides driving/walking/transit directions and place search via Google Maps APIs.',
28
+ version: '1.0.0',
29
+ author: 'SignalWire',
30
+ tags: ['maps', 'directions', 'places', 'google', 'navigation', 'external'],
31
+ requiredEnvVars: ['GOOGLE_MAPS_API_KEY'],
32
+ configSchema: {
33
+ default_mode: {
34
+ type: 'string',
35
+ description: 'Default travel mode: "driving", "walking", "bicycling", or "transit". Defaults to "driving".',
36
+ default: 'driving',
37
+ },
38
+ },
39
+ };
40
+ }
41
+ /** @returns Two tools: `get_directions` for route info and `find_place` for place discovery. */
42
+ getTools() {
43
+ const defaultMode = this.getConfig('default_mode', 'driving');
44
+ return [
45
+ {
46
+ name: 'get_directions',
47
+ description: 'Get directions between two locations. Returns distance, duration, and step-by-step directions summary.',
48
+ parameters: {
49
+ origin: {
50
+ type: 'string',
51
+ description: 'Starting location (address, city name, or place name).',
52
+ },
53
+ destination: {
54
+ type: 'string',
55
+ description: 'Destination location (address, city name, or place name).',
56
+ },
57
+ mode: {
58
+ type: 'string',
59
+ description: `Travel mode: "driving", "walking", "bicycling", or "transit". Defaults to "${defaultMode}".`,
60
+ },
61
+ },
62
+ required: ['origin', 'destination'],
63
+ handler: async (args) => {
64
+ const origin = args.origin;
65
+ const destination = args.destination;
66
+ const mode = args.mode ?? defaultMode;
67
+ if (!origin || typeof origin !== 'string' || origin.trim().length === 0) {
68
+ return new SwaigFunctionResult('Please provide a starting location (origin).');
69
+ }
70
+ if (!destination || typeof destination !== 'string' || destination.trim().length === 0) {
71
+ return new SwaigFunctionResult('Please provide a destination.');
72
+ }
73
+ const apiKey = process.env['GOOGLE_MAPS_API_KEY'];
74
+ if (!apiKey) {
75
+ return new SwaigFunctionResult('Google Maps is not configured. The GOOGLE_MAPS_API_KEY environment variable is required.');
76
+ }
77
+ const validModes = ['driving', 'walking', 'bicycling', 'transit'];
78
+ const travelMode = validModes.includes(mode) ? mode : defaultMode;
79
+ try {
80
+ const url = `https://maps.googleapis.com/maps/api/directions/json` +
81
+ `?origin=${encodeURIComponent(origin.trim())}` +
82
+ `&destination=${encodeURIComponent(destination.trim())}` +
83
+ `&mode=${travelMode}` +
84
+ `&key=${apiKey}`;
85
+ const response = await fetch(url);
86
+ const data = (await response.json());
87
+ if (data.status !== 'OK') {
88
+ const errorMsg = data.error_message ?? data.status;
89
+ return new SwaigFunctionResult(`Could not get directions from "${origin}" to "${destination}": ${errorMsg}`);
90
+ }
91
+ if (data.routes.length === 0) {
92
+ return new SwaigFunctionResult(`No routes found from "${origin}" to "${destination}".`);
93
+ }
94
+ const route = data.routes[0];
95
+ const leg = route.legs[0];
96
+ const parts = [
97
+ `Directions from ${leg.start_address} to ${leg.end_address}:`,
98
+ `Mode: ${travelMode}`,
99
+ `Distance: ${leg.distance.text}`,
100
+ `Estimated duration: ${leg.duration.text}`,
101
+ ];
102
+ if (route.summary) {
103
+ parts.push(`Route: via ${route.summary}`);
104
+ }
105
+ parts.push('');
106
+ parts.push('Steps:');
107
+ const maxSteps = Math.min(leg.steps.length, 10);
108
+ for (let i = 0; i < maxSteps; i++) {
109
+ const step = leg.steps[i];
110
+ const instruction = step.html_instructions
111
+ .replace(/<[^>]*>/g, '')
112
+ .replace(/&nbsp;/g, ' ')
113
+ .trim();
114
+ parts.push(`${i + 1}. ${instruction} (${step.distance.text}, ${step.duration.text})`);
115
+ }
116
+ if (leg.steps.length > maxSteps) {
117
+ parts.push(`... and ${leg.steps.length - maxSteps} more steps.`);
118
+ }
119
+ if (route.warnings.length > 0) {
120
+ parts.push('');
121
+ parts.push(`Note: ${route.warnings.join(' ')}`);
122
+ }
123
+ return new SwaigFunctionResult(parts.join('\n'));
124
+ }
125
+ catch (err) {
126
+ const message = err instanceof Error ? err.message : String(err);
127
+ return new SwaigFunctionResult(`Failed to get directions: ${message}`);
128
+ }
129
+ },
130
+ },
131
+ {
132
+ name: 'find_place',
133
+ description: 'Search for a place by name or description. Returns the place name, address, rating, and whether it is currently open.',
134
+ parameters: {
135
+ query: {
136
+ type: 'string',
137
+ description: 'The place to search for (e.g., "pizza near Times Square", "Eiffel Tower", "pharmacy in Chicago").',
138
+ },
139
+ },
140
+ required: ['query'],
141
+ handler: async (args) => {
142
+ const query = args.query;
143
+ if (!query || typeof query !== 'string' || query.trim().length === 0) {
144
+ return new SwaigFunctionResult('Please provide a place to search for.');
145
+ }
146
+ const apiKey = process.env['GOOGLE_MAPS_API_KEY'];
147
+ if (!apiKey) {
148
+ return new SwaigFunctionResult('Google Maps is not configured. The GOOGLE_MAPS_API_KEY environment variable is required.');
149
+ }
150
+ try {
151
+ const fields = 'name,formatted_address,geometry,rating,user_ratings_total,opening_hours,business_status,types';
152
+ const url = `https://maps.googleapis.com/maps/api/place/findplacefromtext/json` +
153
+ `?input=${encodeURIComponent(query.trim())}` +
154
+ `&inputtype=textquery` +
155
+ `&fields=${fields}` +
156
+ `&key=${apiKey}`;
157
+ const response = await fetch(url);
158
+ const data = (await response.json());
159
+ if (data.status !== 'OK' && data.status !== 'ZERO_RESULTS') {
160
+ const errorMsg = data.error_message ?? data.status;
161
+ return new SwaigFunctionResult(`Place search failed: ${errorMsg}`);
162
+ }
163
+ if (!data.candidates || data.candidates.length === 0) {
164
+ return new SwaigFunctionResult(`No places found for "${query}". Try a different search term.`);
165
+ }
166
+ const place = data.candidates[0];
167
+ const parts = [
168
+ `Place found: ${place.name}`,
169
+ `Address: ${place.formatted_address}`,
170
+ ];
171
+ if (place.rating !== undefined) {
172
+ const ratingInfo = place.user_ratings_total
173
+ ? `${place.rating}/5 (${place.user_ratings_total} reviews)`
174
+ : `${place.rating}/5`;
175
+ parts.push(`Rating: ${ratingInfo}`);
176
+ }
177
+ if (place.opening_hours?.open_now !== undefined) {
178
+ parts.push(`Currently open: ${place.opening_hours.open_now ? 'Yes' : 'No'}`);
179
+ }
180
+ if (place.business_status && place.business_status !== 'OPERATIONAL') {
181
+ parts.push(`Status: ${place.business_status.toLowerCase().replace(/_/g, ' ')}`);
182
+ }
183
+ if (place.types && place.types.length > 0) {
184
+ const readableTypes = place.types
185
+ .filter((t) => !t.startsWith('point_of_interest') && !t.startsWith('establishment'))
186
+ .slice(0, 5)
187
+ .map((t) => t.replace(/_/g, ' '));
188
+ if (readableTypes.length > 0) {
189
+ parts.push(`Type: ${readableTypes.join(', ')}`);
190
+ }
191
+ }
192
+ if (place.geometry?.location) {
193
+ const { lat, lng } = place.geometry.location;
194
+ parts.push(`Coordinates: ${lat}, ${lng}`);
195
+ }
196
+ return new SwaigFunctionResult(parts.join('\n'));
197
+ }
198
+ catch (err) {
199
+ const message = err instanceof Error ? err.message : String(err);
200
+ return new SwaigFunctionResult(`Failed to search for place "${query}": ${message}`);
201
+ }
202
+ },
203
+ },
204
+ ];
205
+ }
206
+ /** @returns Prompt section describing directions and place search capabilities. */
207
+ getPromptSections() {
208
+ const defaultMode = this.getConfig('default_mode', 'driving');
209
+ return [
210
+ {
211
+ title: 'Google Maps & Directions',
212
+ body: 'You can look up directions between locations and search for places.',
213
+ bullets: [
214
+ 'Use the get_directions tool to provide driving, walking, bicycling, or transit directions between two locations.',
215
+ `The default travel mode is ${defaultMode}. The user can request a different mode.`,
216
+ 'Directions include total distance, estimated duration, and step-by-step navigation.',
217
+ 'Use the find_place tool to search for businesses, landmarks, or any point of interest.',
218
+ 'Place results include address, rating, and whether the place is currently open.',
219
+ 'Summarize directions naturally rather than reading each step verbatim unless the user asks for details.',
220
+ ],
221
+ },
222
+ ];
223
+ }
224
+ }
225
+ /**
226
+ * Factory function for creating GoogleMapsSkill instances.
227
+ * @param config - Optional skill configuration.
228
+ * @returns A new GoogleMapsSkill instance.
229
+ */
230
+ export function createSkill(config) {
231
+ return new GoogleMapsSkill(config);
232
+ }
233
+ //# sourceMappingURL=google_maps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google_maps.js","sourceRoot":"","sources":["../../../src/skills/builtin/google_maps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAkDnE;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C;;OAEG;IACH,YAAY,MAAoB;QAC9B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,sGAAsG;IACtG,WAAW;QACT,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,oFAAoF;YACtF,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,YAAY;YACpB,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;YAC1E,eAAe,EAAE,CAAC,qBAAqB,CAAC;YACxC,YAAY,EAAE;gBACZ,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,8FAA8F;oBAChG,OAAO,EAAE,SAAS;iBACnB;aACF;SACF,CAAC;IACJ,CAAC;IAED,gGAAgG;IAChG,QAAQ;QACN,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAS,cAAc,EAAE,SAAS,CAAC,CAAC;QAEtE,OAAO;YACL;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,wGAAwG;gBAC1G,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,wDAAwD;qBAC3D;oBACD,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,2DAA2D;qBAC9D;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,8EAA8E,WAAW,IAAI;qBAChG;iBACF;gBACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;gBACnC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;oBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;oBACjD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAiC,CAAC;oBAC3D,MAAM,IAAI,GAAI,IAAI,CAAC,IAA2B,IAAI,WAAW,CAAC;oBAE9D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACxE,OAAO,IAAI,mBAAmB,CAAC,8CAA8C,CAAC,CAAC;oBACjF,CAAC;oBAED,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvF,OAAO,IAAI,mBAAmB,CAAC,+BAA+B,CAAC,CAAC;oBAClE,CAAC;oBAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAClD,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,IAAI,mBAAmB,CAC5B,0FAA0F,CAC3F,CAAC;oBACJ,CAAC;oBAED,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;oBAClE,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;oBAElE,IAAI,CAAC;wBACH,MAAM,GAAG,GACP,sDAAsD;4BACtD,WAAW,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;4BAC9C,gBAAgB,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;4BACxD,SAAS,UAAU,EAAE;4BACrB,QAAQ,MAAM,EAAE,CAAC;wBAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;wBAClC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;wBAE3D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;4BACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;4BACnD,OAAO,IAAI,mBAAmB,CAC5B,kCAAkC,MAAM,SAAS,WAAW,MAAM,QAAQ,EAAE,CAC7E,CAAC;wBACJ,CAAC;wBAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC7B,OAAO,IAAI,mBAAmB,CAC5B,yBAAyB,MAAM,SAAS,WAAW,IAAI,CACxD,CAAC;wBACJ,CAAC;wBAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAE1B,MAAM,KAAK,GAAa;4BACtB,mBAAmB,GAAG,CAAC,aAAa,OAAO,GAAG,CAAC,WAAW,GAAG;4BAC7D,SAAS,UAAU,EAAE;4BACrB,aAAa,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;4BAChC,uBAAuB,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;yBAC3C,CAAC;wBAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC5C,CAAC;wBAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;wBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;4BAClC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB;iCACvC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;iCACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;iCACvB,IAAI,EAAE,CAAC;4BACV,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;wBACxF,CAAC;wBAED,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;4BAChC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,cAAc,CAAC,CAAC;wBACnE,CAAC;wBAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACf,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAClD,CAAC;wBAED,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjE,OAAO,IAAI,mBAAmB,CAC5B,6BAA6B,OAAO,EAAE,CACvC,CAAC;oBACJ,CAAC;gBACH,CAAC;aACF;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,uHAAuH;gBACzH,UAAU,EAAE;oBACV,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,mGAAmG;qBACtG;iBACF;gBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;oBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;oBAE/C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACrE,OAAO,IAAI,mBAAmB,CAAC,uCAAuC,CAAC,CAAC;oBAC1E,CAAC;oBAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAClD,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,IAAI,mBAAmB,CAC5B,0FAA0F,CAC3F,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,+FAA+F,CAAC;wBAC/G,MAAM,GAAG,GACP,mEAAmE;4BACnE,UAAU,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;4BAC5C,sBAAsB;4BACtB,WAAW,MAAM,EAAE;4BACnB,QAAQ,MAAM,EAAE,CAAC;wBAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;wBAClC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;wBAEvD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;4BAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;4BACnD,OAAO,IAAI,mBAAmB,CAC5B,wBAAwB,QAAQ,EAAE,CACnC,CAAC;wBACJ,CAAC;wBAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACrD,OAAO,IAAI,mBAAmB,CAC5B,wBAAwB,KAAK,iCAAiC,CAC/D,CAAC;wBACJ,CAAC;wBAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM,KAAK,GAAa;4BACtB,gBAAgB,KAAK,CAAC,IAAI,EAAE;4BAC5B,YAAY,KAAK,CAAC,iBAAiB,EAAE;yBACtC,CAAC;wBAEF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;4BAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB;gCACzC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,kBAAkB,WAAW;gCAC3D,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;4BACxB,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;wBACtC,CAAC;wBAED,IAAI,KAAK,CAAC,aAAa,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;4BAChD,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC/E,CAAC;wBAED,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,KAAK,aAAa,EAAE,CAAC;4BACrE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBAClF,CAAC;wBAED,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK;iCAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;iCACnF,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iCACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;4BACpC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAClD,CAAC;wBACH,CAAC;wBAED,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;4BAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;4BAC7C,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;wBAC5C,CAAC;wBAED,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjE,OAAO,IAAI,mBAAmB,CAC5B,+BAA+B,KAAK,MAAM,OAAO,EAAE,CACpD,CAAC;oBACJ,CAAC;gBACH,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,iBAAiB;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAS,cAAc,EAAE,SAAS,CAAC,CAAC;QAEtE,OAAO;YACL;gBACE,KAAK,EAAE,0BAA0B;gBACjC,IAAI,EAAE,qEAAqE;gBAC3E,OAAO,EAAE;oBACP,kHAAkH;oBAClH,8BAA8B,WAAW,0CAA0C;oBACnF,qFAAqF;oBACrF,wFAAwF;oBACxF,iFAAiF;oBACjF,yGAAyG;iBAC1G;aACF;SACF,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Built-in skills registry for SignalWire AI Agents.
3
+ *
4
+ * Import this module to register all built-in skills with the global SkillRegistry.
5
+ */
6
+ export { DateTimeSkill, createSkill as createDateTimeSkill } from './datetime.js';
7
+ export { MathSkill, createSkill as createMathSkill } from './math.js';
8
+ export { JokeSkill, createSkill as createJokeSkill } from './joke.js';
9
+ export { WeatherApiSkill, createSkill as createWeatherApiSkill } from './weather_api.js';
10
+ export { PlayBackgroundFileSkill, createSkill as createPlayBackgroundFileSkill } from './play_background_file.js';
11
+ export { SwmlTransferSkill, createSkill as createSwmlTransferSkill } from './swml_transfer.js';
12
+ export { ApiNinjasTriviaSkill, createSkill as createApiNinjasTriviaSkill } from './api_ninjas_trivia.js';
13
+ export { InfoGathererSkill, createSkill as createInfoGathererSkill } from './info_gatherer.js';
14
+ export { CustomSkillsSkill, createSkill as createCustomSkillsSkill } from './custom_skills.js';
15
+ export { WebSearchSkill, createSkill as createWebSearchSkill } from './web_search.js';
16
+ export { WikipediaSearchSkill, createSkill as createWikipediaSearchSkill } from './wikipedia_search.js';
17
+ export { GoogleMapsSkill, createSkill as createGoogleMapsSkill } from './google_maps.js';
18
+ export { DataSphereSkill, createSkill as createDataSphereSkill } from './datasphere.js';
19
+ export { DataSphereServerlessSkill, createSkill as createDataSphereServerlessSkill } from './datasphere_serverless.js';
20
+ export { NativeVectorSearchSkill, createSkill as createNativeVectorSearchSkill } from './native_vector_search.js';
21
+ export { SpiderSkill, createSkill as createSpiderSkill } from './spider.js';
22
+ export { ClaudeSkill, createSkill as createClaudeSkill } from './claude_skills.js';
23
+ export { McpGatewaySkill, createSkill as createMcpGatewaySkill } from './mcp_gateway.js';
24
+ /**
25
+ * Register all 18 built-in skills with the global SkillRegistry singleton.
26
+ * Skips registration for any skill name already present in the registry.
27
+ */
28
+ export declare function registerBuiltinSkills(): void;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Built-in skills registry for SignalWire AI Agents.
3
+ *
4
+ * Import this module to register all built-in skills with the global SkillRegistry.
5
+ */
6
+ export { DateTimeSkill, createSkill as createDateTimeSkill } from './datetime.js';
7
+ export { MathSkill, createSkill as createMathSkill } from './math.js';
8
+ export { JokeSkill, createSkill as createJokeSkill } from './joke.js';
9
+ export { WeatherApiSkill, createSkill as createWeatherApiSkill } from './weather_api.js';
10
+ export { PlayBackgroundFileSkill, createSkill as createPlayBackgroundFileSkill } from './play_background_file.js';
11
+ export { SwmlTransferSkill, createSkill as createSwmlTransferSkill } from './swml_transfer.js';
12
+ export { ApiNinjasTriviaSkill, createSkill as createApiNinjasTriviaSkill } from './api_ninjas_trivia.js';
13
+ export { InfoGathererSkill, createSkill as createInfoGathererSkill } from './info_gatherer.js';
14
+ export { CustomSkillsSkill, createSkill as createCustomSkillsSkill } from './custom_skills.js';
15
+ export { WebSearchSkill, createSkill as createWebSearchSkill } from './web_search.js';
16
+ export { WikipediaSearchSkill, createSkill as createWikipediaSearchSkill } from './wikipedia_search.js';
17
+ export { GoogleMapsSkill, createSkill as createGoogleMapsSkill } from './google_maps.js';
18
+ export { DataSphereSkill, createSkill as createDataSphereSkill } from './datasphere.js';
19
+ export { DataSphereServerlessSkill, createSkill as createDataSphereServerlessSkill } from './datasphere_serverless.js';
20
+ export { NativeVectorSearchSkill, createSkill as createNativeVectorSearchSkill } from './native_vector_search.js';
21
+ export { SpiderSkill, createSkill as createSpiderSkill } from './spider.js';
22
+ export { ClaudeSkill, createSkill as createClaudeSkill } from './claude_skills.js';
23
+ export { McpGatewaySkill, createSkill as createMcpGatewaySkill } from './mcp_gateway.js';
24
+ import { SkillRegistry } from '../SkillRegistry.js';
25
+ import { createSkill as createDateTimeSkill } from './datetime.js';
26
+ import { createSkill as createMathSkill } from './math.js';
27
+ import { createSkill as createJokeSkill } from './joke.js';
28
+ import { createSkill as createWeatherApiSkill } from './weather_api.js';
29
+ import { createSkill as createPlayBackgroundFileSkill } from './play_background_file.js';
30
+ import { createSkill as createSwmlTransferSkill } from './swml_transfer.js';
31
+ import { createSkill as createApiNinjasTriviaSkill } from './api_ninjas_trivia.js';
32
+ import { createSkill as createInfoGathererSkill } from './info_gatherer.js';
33
+ import { createSkill as createCustomSkillsSkill } from './custom_skills.js';
34
+ import { createSkill as createWebSearchSkill } from './web_search.js';
35
+ import { createSkill as createWikipediaSearchSkill } from './wikipedia_search.js';
36
+ import { createSkill as createGoogleMapsSkill } from './google_maps.js';
37
+ import { createSkill as createDataSphereSkill } from './datasphere.js';
38
+ import { createSkill as createDataSphereServerlessSkill } from './datasphere_serverless.js';
39
+ import { createSkill as createNativeVectorSearchSkill } from './native_vector_search.js';
40
+ import { createSkill as createSpiderSkill } from './spider.js';
41
+ import { createSkill as createClaudeSkill } from './claude_skills.js';
42
+ import { createSkill as createMcpGatewaySkill } from './mcp_gateway.js';
43
+ /**
44
+ * Register all 18 built-in skills with the global SkillRegistry singleton.
45
+ * Skips registration for any skill name already present in the registry.
46
+ */
47
+ export function registerBuiltinSkills() {
48
+ const registry = SkillRegistry.getInstance();
49
+ const skills = [
50
+ ['datetime', createDateTimeSkill],
51
+ ['math', createMathSkill],
52
+ ['joke', createJokeSkill],
53
+ ['weather_api', createWeatherApiSkill],
54
+ ['play_background_file', createPlayBackgroundFileSkill],
55
+ ['swml_transfer', createSwmlTransferSkill],
56
+ ['api_ninjas_trivia', createApiNinjasTriviaSkill],
57
+ ['info_gatherer', createInfoGathererSkill],
58
+ ['custom_skills', createCustomSkillsSkill],
59
+ ['web_search', createWebSearchSkill],
60
+ ['wikipedia_search', createWikipediaSearchSkill],
61
+ ['google_maps', createGoogleMapsSkill],
62
+ ['datasphere', createDataSphereSkill],
63
+ ['datasphere_serverless', createDataSphereServerlessSkill],
64
+ ['native_vector_search', createNativeVectorSearchSkill],
65
+ ['spider', createSpiderSkill],
66
+ ['claude_skills', createClaudeSkill],
67
+ ['mcp_gateway', createMcpGatewaySkill],
68
+ ];
69
+ for (const [name, factory] of skills) {
70
+ if (!registry.has(name)) {
71
+ registry.register(name, factory);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/builtin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Info Gatherer Skill - Collects structured information from the user.
3
+ *
4
+ * Tier 2 built-in skill: no external dependencies required.
5
+ * Dynamically generates a save_info tool based on configured fields.
6
+ * Fields can have optional validation patterns and required/optional flags.
7
+ * Useful for collecting user details like name, email, phone, address, etc.
8
+ */
9
+ import { SkillBase } from '../SkillBase.js';
10
+ import type { SkillManifest, SkillToolDefinition, SkillPromptSection, SkillConfig } from '../SkillBase.js';
11
+ /** Key-value map of information gathered from a user during a call. */
12
+ interface GatheredInfo {
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Collects structured information from the user based on configurable fields.
17
+ *
18
+ * Tier 2 built-in skill with no external dependencies. Dynamically generates
19
+ * a `save_info` tool based on the `fields` config array. Fields support
20
+ * optional validation patterns and required/optional flags. Data is stored
21
+ * per-call and optionally merged into global data.
22
+ */
23
+ export declare class InfoGathererSkill extends SkillBase {
24
+ private gatheredData;
25
+ /**
26
+ * @param config - Optional configuration; supports `fields`, `purpose`, `confirmation_message`, `store_globally`.
27
+ */
28
+ constructor(config?: SkillConfig);
29
+ /** @returns Manifest with config schema for fields, purpose, confirmation_message, and store_globally. */
30
+ getManifest(): SkillManifest;
31
+ /** @returns A `save_info` tool (dynamic params from config) and a `get_gathered_info` retrieval tool. */
32
+ getTools(): SkillToolDefinition[];
33
+ /** @returns Prompt section listing required/optional fields and collection instructions. */
34
+ getPromptSections(): SkillPromptSection[];
35
+ /**
36
+ * Get all gathered data, keyed by call ID.
37
+ * @returns A copy of the internal gathered data map.
38
+ */
39
+ getAllGatheredData(): Map<string, GatheredInfo>;
40
+ /**
41
+ * Clear gathered data for a specific call or all calls.
42
+ * @param callId - If provided, clear data for this call only; otherwise clear all.
43
+ */
44
+ clearGatheredData(callId?: string): void;
45
+ }
46
+ /**
47
+ * Factory function for creating InfoGathererSkill instances.
48
+ * @param config - Optional skill configuration.
49
+ * @returns A new InfoGathererSkill instance.
50
+ */
51
+ export declare function createSkill(config?: SkillConfig): InfoGathererSkill;
52
+ export {};
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Info Gatherer Skill - Collects structured information from the user.
3
+ *
4
+ * Tier 2 built-in skill: no external dependencies required.
5
+ * Dynamically generates a save_info tool based on configured fields.
6
+ * Fields can have optional validation patterns and required/optional flags.
7
+ * Useful for collecting user details like name, email, phone, address, etc.
8
+ */
9
+ import { SkillBase } from '../SkillBase.js';
10
+ import { SwaigFunctionResult } from '../../SwaigFunctionResult.js';
11
+ /**
12
+ * Collects structured information from the user based on configurable fields.
13
+ *
14
+ * Tier 2 built-in skill with no external dependencies. Dynamically generates
15
+ * a `save_info` tool based on the `fields` config array. Fields support
16
+ * optional validation patterns and required/optional flags. Data is stored
17
+ * per-call and optionally merged into global data.
18
+ */
19
+ export class InfoGathererSkill extends SkillBase {
20
+ gatheredData = new Map();
21
+ /**
22
+ * @param config - Optional configuration; supports `fields`, `purpose`, `confirmation_message`, `store_globally`.
23
+ */
24
+ constructor(config) {
25
+ super('info_gatherer', config);
26
+ }
27
+ /** @returns Manifest with config schema for fields, purpose, confirmation_message, and store_globally. */
28
+ getManifest() {
29
+ return {
30
+ name: 'info_gatherer',
31
+ description: 'Collects structured information from the user based on configurable fields. Validates and stores gathered data.',
32
+ version: '1.0.0',
33
+ author: 'SignalWire',
34
+ tags: ['data-collection', 'form', 'information', 'utility'],
35
+ configSchema: {
36
+ fields: {
37
+ type: 'array',
38
+ description: 'Array of field definitions to collect: { name, description, required?, validation?, type? }.',
39
+ items: {
40
+ type: 'object',
41
+ properties: {
42
+ name: { type: 'string', description: 'Field name (used as the parameter key).' },
43
+ description: { type: 'string', description: 'Description of what this field collects.' },
44
+ required: { type: 'boolean', description: 'Whether this field is required. Defaults to false.' },
45
+ validation: {
46
+ type: 'string',
47
+ description: 'Optional regex pattern for validation (e.g., "^[\\\\w.+-]+@[\\\\w-]+\\\\.[\\\\w.]+$" for email).',
48
+ },
49
+ type: {
50
+ type: 'string',
51
+ description: 'Parameter type for the tool schema. Defaults to "string".',
52
+ },
53
+ },
54
+ required: ['name', 'description'],
55
+ },
56
+ },
57
+ purpose: {
58
+ type: 'string',
59
+ description: 'A description of why this information is being collected (shown in prompt).',
60
+ },
61
+ confirmation_message: {
62
+ type: 'string',
63
+ description: 'Custom message returned after successful info collection.',
64
+ },
65
+ store_globally: {
66
+ type: 'boolean',
67
+ description: 'Whether to store gathered info in global data. Defaults to false.',
68
+ },
69
+ },
70
+ };
71
+ }
72
+ /** @returns A `save_info` tool (dynamic params from config) and a `get_gathered_info` retrieval tool. */
73
+ getTools() {
74
+ const fields = this.getConfig('fields', []);
75
+ const confirmationMessage = this.getConfig('confirmation_message', 'Information has been saved successfully.');
76
+ const storeGlobally = this.getConfig('store_globally', false);
77
+ if (fields.length === 0) {
78
+ return [];
79
+ }
80
+ // Build dynamic parameters from field definitions
81
+ const parameters = {};
82
+ const requiredParams = [];
83
+ for (const field of fields) {
84
+ parameters[field.name] = {
85
+ type: field.type ?? 'string',
86
+ description: field.description,
87
+ };
88
+ if (field.required) {
89
+ requiredParams.push(field.name);
90
+ }
91
+ }
92
+ const tools = [
93
+ {
94
+ name: 'save_info',
95
+ description: 'Save information gathered from the user. Call this once you have collected the required fields.',
96
+ parameters,
97
+ required: requiredParams.length > 0 ? requiredParams : undefined,
98
+ handler: (args, rawData) => {
99
+ const errors = [];
100
+ const collected = {};
101
+ // Validate each field
102
+ for (const field of fields) {
103
+ const value = args[field.name];
104
+ // Check required fields
105
+ if (field.required) {
106
+ if (value === undefined || value === null || (typeof value === 'string' && value.trim().length === 0)) {
107
+ errors.push(`"${field.name}" is required but was not provided.`);
108
+ continue;
109
+ }
110
+ }
111
+ // Skip optional fields that weren't provided
112
+ if (value === undefined || value === null) {
113
+ continue;
114
+ }
115
+ // Validate against pattern if specified
116
+ if (field.validation && typeof value === 'string') {
117
+ try {
118
+ const regex = new RegExp(field.validation);
119
+ if (!regex.test(value)) {
120
+ errors.push(`"${field.name}" value "${value}" does not match the expected format.`);
121
+ continue;
122
+ }
123
+ }
124
+ catch {
125
+ // If regex is invalid, skip validation
126
+ }
127
+ }
128
+ collected[field.name] = typeof value === 'string' ? value.trim() : value;
129
+ }
130
+ if (errors.length > 0) {
131
+ return new SwaigFunctionResult(`Could not save information due to validation errors:\n${errors.join('\n')}\nPlease correct these fields and try again.`);
132
+ }
133
+ if (Object.keys(collected).length === 0) {
134
+ return new SwaigFunctionResult('No information was provided. Please collect at least one field before saving.');
135
+ }
136
+ // Store the gathered data keyed by call ID if available
137
+ const callId = rawData['call_id'] ?? 'default';
138
+ this.gatheredData.set(callId, {
139
+ ...this.gatheredData.get(callId),
140
+ ...collected,
141
+ });
142
+ // Build confirmation with collected fields summary
143
+ const fieldSummary = Object.entries(collected)
144
+ .map(([key, val]) => `${key}: ${val}`)
145
+ .join(', ');
146
+ const result = new SwaigFunctionResult(`${confirmationMessage} Saved: ${fieldSummary}.`);
147
+ // Optionally store in global data
148
+ if (storeGlobally) {
149
+ result.updateGlobalData({ gathered_info: collected });
150
+ }
151
+ return result;
152
+ },
153
+ },
154
+ {
155
+ name: 'get_gathered_info',
156
+ description: 'Retrieve previously gathered information for the current call. Useful to review what has already been collected.',
157
+ parameters: {},
158
+ handler: (_args, rawData) => {
159
+ const callId = rawData['call_id'] ?? 'default';
160
+ const info = this.gatheredData.get(callId);
161
+ if (!info || Object.keys(info).length === 0) {
162
+ return new SwaigFunctionResult('No information has been gathered yet for this call.');
163
+ }
164
+ const summary = Object.entries(info)
165
+ .map(([key, val]) => `${key}: ${val}`)
166
+ .join(', ');
167
+ return new SwaigFunctionResult(`Previously gathered information: ${summary}.`);
168
+ },
169
+ },
170
+ ];
171
+ return tools;
172
+ }
173
+ /** @returns Prompt section listing required/optional fields and collection instructions. */
174
+ getPromptSections() {
175
+ const fields = this.getConfig('fields', []);
176
+ const purpose = this.getConfig('purpose', undefined);
177
+ if (fields.length === 0) {
178
+ return [];
179
+ }
180
+ const requiredFields = fields.filter((f) => f.required);
181
+ const optionalFields = fields.filter((f) => !f.required);
182
+ const bullets = [];
183
+ if (purpose) {
184
+ bullets.push(`Purpose: ${purpose}`);
185
+ }
186
+ bullets.push('Use the save_info tool to store information once you have collected it from the user.');
187
+ if (requiredFields.length > 0) {
188
+ const reqNames = requiredFields.map((f) => `"${f.name}"`).join(', ');
189
+ bullets.push(`Required fields (must be collected): ${reqNames}.`);
190
+ }
191
+ if (optionalFields.length > 0) {
192
+ const optNames = optionalFields.map((f) => `"${f.name}"`).join(', ');
193
+ bullets.push(`Optional fields (collect if available): ${optNames}.`);
194
+ }
195
+ // Add field descriptions
196
+ for (const field of fields) {
197
+ const reqLabel = field.required ? ' (required)' : ' (optional)';
198
+ bullets.push(`${field.name}${reqLabel}: ${field.description}`);
199
+ }
200
+ bullets.push('Ask for information naturally in conversation rather than as a list of questions.', 'Use get_gathered_info to review what has already been collected.', 'Once all required fields are gathered, call save_info to store the data.');
201
+ return [
202
+ {
203
+ title: 'Information Collection',
204
+ body: 'You need to collect specific information from the user during this conversation.',
205
+ bullets,
206
+ },
207
+ ];
208
+ }
209
+ /**
210
+ * Get all gathered data, keyed by call ID.
211
+ * @returns A copy of the internal gathered data map.
212
+ */
213
+ getAllGatheredData() {
214
+ return new Map(this.gatheredData);
215
+ }
216
+ /**
217
+ * Clear gathered data for a specific call or all calls.
218
+ * @param callId - If provided, clear data for this call only; otherwise clear all.
219
+ */
220
+ clearGatheredData(callId) {
221
+ if (callId) {
222
+ this.gatheredData.delete(callId);
223
+ }
224
+ else {
225
+ this.gatheredData.clear();
226
+ }
227
+ }
228
+ }
229
+ /**
230
+ * Factory function for creating InfoGathererSkill instances.
231
+ * @param config - Optional skill configuration.
232
+ * @returns A new InfoGathererSkill instance.
233
+ */
234
+ export function createSkill(config) {
235
+ return new InfoGathererSkill(config);
236
+ }
237
+ //# sourceMappingURL=info_gatherer.js.map