signalwire-sdk 2.0.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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +259 -0
- data/bin/swaig-test +872 -0
- data/lib/signalwire/agent/agent_base.rb +2134 -0
- data/lib/signalwire/contexts/context_builder.rb +861 -0
- data/lib/signalwire/core/logging_config.rb +54 -0
- data/lib/signalwire/datamap/data_map.rb +315 -0
- data/lib/signalwire/logging.rb +92 -0
- data/lib/signalwire/pom/prompt_object_model.rb +269 -0
- data/lib/signalwire/pom/section.rb +202 -0
- data/lib/signalwire/prefabs/concierge.rb +92 -0
- data/lib/signalwire/prefabs/faq_bot.rb +67 -0
- data/lib/signalwire/prefabs/info_gatherer.rb +79 -0
- data/lib/signalwire/prefabs/receptionist.rb +74 -0
- data/lib/signalwire/prefabs/survey.rb +75 -0
- data/lib/signalwire/relay/action.rb +291 -0
- data/lib/signalwire/relay/call.rb +523 -0
- data/lib/signalwire/relay/client.rb +789 -0
- data/lib/signalwire/relay/constants.rb +124 -0
- data/lib/signalwire/relay/message.rb +137 -0
- data/lib/signalwire/relay/relay_event.rb +670 -0
- data/lib/signalwire/rest/http_client.rb +159 -0
- data/lib/signalwire/rest/namespaces/addresses.rb +19 -0
- data/lib/signalwire/rest/namespaces/calling.rb +179 -0
- data/lib/signalwire/rest/namespaces/chat.rb +18 -0
- data/lib/signalwire/rest/namespaces/compat.rb +229 -0
- data/lib/signalwire/rest/namespaces/datasphere.rb +39 -0
- data/lib/signalwire/rest/namespaces/fabric.rb +235 -0
- data/lib/signalwire/rest/namespaces/imported_numbers.rb +18 -0
- data/lib/signalwire/rest/namespaces/logs.rb +46 -0
- data/lib/signalwire/rest/namespaces/lookup.rb +18 -0
- data/lib/signalwire/rest/namespaces/mfa.rb +26 -0
- data/lib/signalwire/rest/namespaces/number_groups.rb +32 -0
- data/lib/signalwire/rest/namespaces/phone_numbers.rb +124 -0
- data/lib/signalwire/rest/namespaces/project.rb +33 -0
- data/lib/signalwire/rest/namespaces/pubsub.rb +18 -0
- data/lib/signalwire/rest/namespaces/queues.rb +28 -0
- data/lib/signalwire/rest/namespaces/recordings.rb +18 -0
- data/lib/signalwire/rest/namespaces/registry.rb +67 -0
- data/lib/signalwire/rest/namespaces/short_codes.rb +26 -0
- data/lib/signalwire/rest/namespaces/sip_profile.rb +22 -0
- data/lib/signalwire/rest/namespaces/verified_callers.rb +24 -0
- data/lib/signalwire/rest/namespaces/video.rb +129 -0
- data/lib/signalwire/rest/pagination.rb +89 -0
- data/lib/signalwire/rest/phone_call_handler.rb +56 -0
- data/lib/signalwire/rest/rest_client.rb +114 -0
- data/lib/signalwire/runtime.rb +98 -0
- data/lib/signalwire/security/session_manager.rb +124 -0
- data/lib/signalwire/security/webhook_middleware.rb +191 -0
- data/lib/signalwire/security/webhook_validator.rb +327 -0
- data/lib/signalwire/server/agent_server.rb +413 -0
- data/lib/signalwire/serverless/lambda_handler.rb +251 -0
- data/lib/signalwire/skills/builtin/api_ninjas_trivia.rb +99 -0
- data/lib/signalwire/skills/builtin/claude_skills.rb +92 -0
- data/lib/signalwire/skills/builtin/custom_skills.rb +54 -0
- data/lib/signalwire/skills/builtin/datasphere.rb +153 -0
- data/lib/signalwire/skills/builtin/datasphere_serverless.rb +107 -0
- data/lib/signalwire/skills/builtin/datetime.rb +97 -0
- data/lib/signalwire/skills/builtin/google_maps.rb +168 -0
- data/lib/signalwire/skills/builtin/info_gatherer.rb +189 -0
- data/lib/signalwire/skills/builtin/joke.rb +65 -0
- data/lib/signalwire/skills/builtin/math.rb +176 -0
- data/lib/signalwire/skills/builtin/mcp_gateway.rb +121 -0
- data/lib/signalwire/skills/builtin/native_vector_search.rb +116 -0
- data/lib/signalwire/skills/builtin/play_background_file.rb +86 -0
- data/lib/signalwire/skills/builtin/spider.rb +169 -0
- data/lib/signalwire/skills/builtin/swml_transfer.rb +118 -0
- data/lib/signalwire/skills/builtin/weather_api.rb +92 -0
- data/lib/signalwire/skills/builtin/web_search.rb +141 -0
- data/lib/signalwire/skills/builtin/wikipedia_search.rb +125 -0
- data/lib/signalwire/skills/skill_base.rb +82 -0
- data/lib/signalwire/skills/skill_manager.rb +97 -0
- data/lib/signalwire/skills/skill_registry.rb +258 -0
- data/lib/signalwire/swaig/function_result.rb +777 -0
- data/lib/signalwire/swml/document.rb +84 -0
- data/lib/signalwire/swml/schema.json +12250 -0
- data/lib/signalwire/swml/schema.rb +81 -0
- data/lib/signalwire/swml/service.rb +650 -0
- data/lib/signalwire/utils/schema_utils.rb +298 -0
- data/lib/signalwire/utils/serverless.rb +19 -0
- data/lib/signalwire/utils/url_validator.rb +138 -0
- data/lib/signalwire/version.rb +5 -0
- data/lib/signalwire.rb +114 -0
- metadata +225 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module SignalWire
|
|
6
|
+
module SWML
|
|
7
|
+
class Schema
|
|
8
|
+
attr_reader :verbs
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@verbs = {}
|
|
12
|
+
load_schema
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Is +name+ a recognised SWML verb?
|
|
16
|
+
def valid_verb?(name)
|
|
17
|
+
@verbs.key?(name.to_s)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Sorted list of all known verb names.
|
|
21
|
+
def verb_names
|
|
22
|
+
@verbs.keys.sort
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# How many verbs are defined in the schema.
|
|
26
|
+
def verb_count
|
|
27
|
+
@verbs.size
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Return the full definition hash for a verb, or nil.
|
|
31
|
+
def get_verb(name)
|
|
32
|
+
@verbs[name.to_s]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def load_schema
|
|
38
|
+
schema_path = File.join(__dir__, 'schema.json')
|
|
39
|
+
unless File.exist?(schema_path)
|
|
40
|
+
raise "SWML schema.json not found at #{schema_path}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
raw = JSON.parse(File.read(schema_path))
|
|
44
|
+
defs = raw['$defs'] || {}
|
|
45
|
+
swml_method = defs['SWMLMethod'] || {}
|
|
46
|
+
any_of = swml_method['anyOf'] || []
|
|
47
|
+
|
|
48
|
+
any_of.each do |entry|
|
|
49
|
+
ref = entry['$ref']
|
|
50
|
+
next unless ref
|
|
51
|
+
|
|
52
|
+
# e.g. "#/$defs/Answer" -> "Answer"
|
|
53
|
+
def_name = ref.split('/').last
|
|
54
|
+
defn = defs[def_name]
|
|
55
|
+
next unless defn
|
|
56
|
+
|
|
57
|
+
props = defn['properties']
|
|
58
|
+
next unless props && !props.empty?
|
|
59
|
+
|
|
60
|
+
# The first property key is the actual verb name (e.g. "answer", "ai")
|
|
61
|
+
actual_verb = props.keys.first
|
|
62
|
+
@verbs[actual_verb] = {
|
|
63
|
+
'name' => actual_verb,
|
|
64
|
+
'schema_name' => def_name,
|
|
65
|
+
'definition' => defn
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Module-level singleton so the schema is loaded at most once.
|
|
72
|
+
def self.schema
|
|
73
|
+
@schema ||= Schema.new
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Allow resetting for tests
|
|
77
|
+
def self.reset_schema!
|
|
78
|
+
@schema = nil
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|