pinecall 0.0.1
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/CHANGELOG.md +167 -0
- data/LICENSE +202 -0
- data/README.md +140 -0
- data/lib/pinecall/agent/author.rb +31 -0
- data/lib/pinecall/agent/config.rb +124 -0
- data/lib/pinecall/agent/doc.rb +73 -0
- data/lib/pinecall/agent/knowledge.rb +18 -0
- data/lib/pinecall/agent/searching.rb +33 -0
- data/lib/pinecall/agent/spec.rb +133 -0
- data/lib/pinecall/agent/state.rb +185 -0
- data/lib/pinecall/agent/tools.rb +119 -0
- data/lib/pinecall/agent.rb +160 -0
- data/lib/pinecall/blocks.rb +152 -0
- data/lib/pinecall/bridge.rb +239 -0
- data/lib/pinecall/call_world/answers.rb +61 -0
- data/lib/pinecall/call_world/room.rb +25 -0
- data/lib/pinecall/call_world.rb +175 -0
- data/lib/pinecall/client/agent.rb +179 -0
- data/lib/pinecall/client/call.rb +140 -0
- data/lib/pinecall/client/connection.rb +190 -0
- data/lib/pinecall/client/endpoints.rb +30 -0
- data/lib/pinecall/client/listeners.rb +42 -0
- data/lib/pinecall/client/observe.rb +109 -0
- data/lib/pinecall/client/rest.rb +61 -0
- data/lib/pinecall/client.rb +212 -0
- data/lib/pinecall/errors.rb +53 -0
- data/lib/pinecall/panel.rb +138 -0
- data/lib/pinecall/reading.rb +37 -0
- data/lib/pinecall/rules.rb +38 -0
- data/lib/pinecall/serve/held.rb +40 -0
- data/lib/pinecall/serve/loading.rb +102 -0
- data/lib/pinecall/serve/viewing.rb +40 -0
- data/lib/pinecall/serve.rb +169 -0
- data/lib/pinecall/testing.rb +190 -0
- data/lib/pinecall/version.rb +6 -0
- data/lib/pinecall/view.rb +70 -0
- data/lib/pinecall/wire/codec.rb +75 -0
- data/lib/pinecall/wire/enums.rb +104 -0
- data/lib/pinecall/wire/errors.rb +12 -0
- data/lib/pinecall/wire/reduce.rb +249 -0
- data/lib/pinecall/wire/registry.rb +168 -0
- data/lib/pinecall/wire/shapes.rb +33 -0
- data/lib/pinecall/wire/shapes_call_events.rb +137 -0
- data/lib/pinecall/wire/shapes_commands.rb +114 -0
- data/lib/pinecall/wire/shapes_config.rb +70 -0
- data/lib/pinecall/wire/shapes_doors.rb +96 -0
- data/lib/pinecall/wire/shapes_events.rb +358 -0
- data/lib/pinecall/wire/shapes_metrics.rb +109 -0
- data/lib/pinecall/wire/shapes_parts.rb +340 -0
- data/lib/pinecall/wire/state.rb +56 -0
- data/lib/pinecall/wire/validate.rb +154 -0
- data/lib/pinecall/wire.rb +43 -0
- data/lib/pinecall.rb +45 -0
- data/sig/pinecall.rbs +453 -0
- metadata +119 -0
data/sig/pinecall.rbs
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
# The public surface, as types. Ruby's answer to the `.d.ts` the TypeScript package ships.
|
|
2
|
+
#
|
|
3
|
+
# The state a class declares is generated at load, so it cannot be typed here — that is what a
|
|
4
|
+
# tenant's own `sig/` is for, one line per `state`. Everything the framework itself offers is.
|
|
5
|
+
|
|
6
|
+
module Pinecall
|
|
7
|
+
VERSION: String
|
|
8
|
+
|
|
9
|
+
type state = Hash[Symbol, untyped]
|
|
10
|
+
type spec = Hash[Symbol, untyped]
|
|
11
|
+
type line = { channel: String, ?from: String?, ?claimed: String? }
|
|
12
|
+
|
|
13
|
+
class Error < StandardError
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Refused < Error
|
|
17
|
+
attr_reader refusal: Hash[Symbol, untyped]
|
|
18
|
+
def code: () -> String
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class UnauthoredWrite < Error
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class DeclarationRefused < Error
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class DevRefused < Error
|
|
28
|
+
attr_reader status: Integer
|
|
29
|
+
attr_reader detail: String
|
|
30
|
+
def initialize: (Integer, String) -> void
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class ToolFailed < Error
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class NotConnected < Error
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Reading
|
|
40
|
+
def initialize: (state, ?Array[String]) -> void
|
|
41
|
+
def to_h: () -> state
|
|
42
|
+
def []: (String | Symbol) -> untyped
|
|
43
|
+
def key?: (String | Symbol) -> bool
|
|
44
|
+
def fetch: (String | Symbol, *untyped) -> untyped
|
|
45
|
+
def remembers?: (String) -> bool
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
type block_spec = { name: String, region: String }
|
|
49
|
+
|
|
50
|
+
class Block
|
|
51
|
+
attr_reader name: String
|
|
52
|
+
attr_reader region: String
|
|
53
|
+
attr_reader text: String
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class Blocks
|
|
57
|
+
attr_reader blocks: Array[Block]
|
|
58
|
+
attr_reader history: String
|
|
59
|
+
def []: (String | Symbol) -> String?
|
|
60
|
+
def static: () -> Array[Block]
|
|
61
|
+
def dynamic: () -> Array[Block]
|
|
62
|
+
def instructions: () -> String
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class View
|
|
66
|
+
def self.beside: (String, String) -> String
|
|
67
|
+
def self.file: (String) -> View
|
|
68
|
+
def self.inline: (String, ?String) -> View
|
|
69
|
+
attr_reader path: String
|
|
70
|
+
def render: (Reading) -> String
|
|
71
|
+
def tidy: (String) -> String
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
class Agent
|
|
75
|
+
def self.written: () -> Array[Class]
|
|
76
|
+
|
|
77
|
+
# config, declared on the class
|
|
78
|
+
def self.phone: (?String) -> untyped
|
|
79
|
+
def self.whatsapp: (?String) -> untyped
|
|
80
|
+
def self.web: (?bool) -> untyped
|
|
81
|
+
def self.channel_rules: (?bool) -> untyped
|
|
82
|
+
|
|
83
|
+
# the console's panel, drawn by `view.render`
|
|
84
|
+
def self.panel: (?String) { (Panel::Who) -> void } -> Panel::Declared
|
|
85
|
+
def self.declared_panel: () -> Panel::Declared?
|
|
86
|
+
|
|
87
|
+
# the world's, refused at load with the verb that sets each
|
|
88
|
+
def self.voice: (*untyped, **untyped) -> bot
|
|
89
|
+
def self.llm: (*untyped, **untyped) -> bot
|
|
90
|
+
def self.stt: (*untyped, **untyped) -> bot
|
|
91
|
+
def self.greeting: (*untyped, **untyped) -> bot
|
|
92
|
+
def self.hangup: (*untyped, **untyped) -> bot
|
|
93
|
+
def self.says: (*untyped, **untyped) -> bot
|
|
94
|
+
def self.hears: (*untyped, **untyped) -> bot
|
|
95
|
+
def self.memory: (*untyped, **untyped) -> bot
|
|
96
|
+
def self.record: (*untyped, **untyped) -> bot
|
|
97
|
+
def self.knowledge: (*untyped, **untyped) -> bot
|
|
98
|
+
def self.docs: (*untyped, **untyped) -> bot
|
|
99
|
+
|
|
100
|
+
def self.doc: (?String) -> String?
|
|
101
|
+
def self.slug: (?String) -> String
|
|
102
|
+
def self.declared_slug: () -> String?
|
|
103
|
+
def self.accepts: (String | Symbol, from: Array[String | Symbol]) -> untyped
|
|
104
|
+
def self.wire_config: (?tools: Array[spec]?) -> Hash[Symbol, untyped]
|
|
105
|
+
|
|
106
|
+
# the state and the verbs
|
|
107
|
+
def self.state: (Symbol, ?untyped, ?visibility: Symbol?) ?{ () -> untyped } -> Symbol
|
|
108
|
+
def self.stage: (*Symbol) -> Array[Symbol]
|
|
109
|
+
def self.stages: () -> Array[Symbol]?
|
|
110
|
+
def self.declared_state: () -> Hash[Symbol, untyped]
|
|
111
|
+
def self.derived_state: () -> Hash[Symbol, untyped]
|
|
112
|
+
def self.state_names: () -> Array[Symbol]
|
|
113
|
+
def self.tool: (**untyped) -> untyped
|
|
114
|
+
def self.declared_tools: () -> Hash[Symbol, untyped]
|
|
115
|
+
def self.tool_named: (String | Symbol) -> untyped
|
|
116
|
+
def self.view: (?String?, ?template: String?) -> View?
|
|
117
|
+
def self.beside_this_file: (String) -> String
|
|
118
|
+
def self.source_file: () -> String?
|
|
119
|
+
|
|
120
|
+
def doc: () -> String?
|
|
121
|
+
def tools: () -> Array[spec]
|
|
122
|
+
def visible_tools: () -> Array[spec]
|
|
123
|
+
def run_tool: (String | Symbol, ?Hash[Symbol, untyped]) -> untyped
|
|
124
|
+
def snapshot: () -> state
|
|
125
|
+
def restore: (state) -> Agent
|
|
126
|
+
def start_in: (state) -> Agent
|
|
127
|
+
def diff: (state, ?state) -> Array[Hash[Symbol, untyped]]
|
|
128
|
+
def collapse: (String) -> untyped
|
|
129
|
+
def changes: () -> Array[untyped]
|
|
130
|
+
def on_change: () { (untyped) -> void } -> ^() -> void
|
|
131
|
+
def on_log: () { (untyped) -> void } -> ^() -> void
|
|
132
|
+
def on_heard: () { (String, Hash[Symbol, untyped], Hash[Symbol, untyped]) -> void } -> ^() -> void
|
|
133
|
+
def seal: () -> Agent
|
|
134
|
+
def sealed?: () -> bool
|
|
135
|
+
def call: () -> CallWorld
|
|
136
|
+
def call?: () -> bool
|
|
137
|
+
def knowledge: () -> Agent::Knowledge
|
|
138
|
+
def say: (String, **untyped) -> bool
|
|
139
|
+
def reply: (String, **untyped) -> bool
|
|
140
|
+
def log: (String | Symbol, ?untyped) -> untyped
|
|
141
|
+
def logged: () -> Array[untyped]
|
|
142
|
+
def last: (String) -> state?
|
|
143
|
+
def on_call: (CallWorld) -> void
|
|
144
|
+
def on_end: (CallWorld) -> void
|
|
145
|
+
def on_event: (String, Hash[Symbol, untyped], Hash[Symbol, untyped]) -> void
|
|
146
|
+
def on_memory: (Array[untyped], CallWorld) -> void
|
|
147
|
+
def run_hook: (Symbol, *untyped) -> untyped
|
|
148
|
+
def serving: (CallWorld?) -> Agent
|
|
149
|
+
def reads_last_from: (^(String) -> state?) -> Agent
|
|
150
|
+
def notify_heard: (String, Hash[Symbol, untyped], Hash[Symbol, untyped]) -> void
|
|
151
|
+
|
|
152
|
+
module Author
|
|
153
|
+
KEY: Symbol
|
|
154
|
+
def self?.current: () -> String?
|
|
155
|
+
def self?.with: [T] (String) { () -> T } -> T
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
module Doc
|
|
159
|
+
def self.for_class: (Class) -> String?
|
|
160
|
+
def self.for_method: (Class, Symbol) -> String?
|
|
161
|
+
def self.above: (String, Integer) -> String?
|
|
162
|
+
def self.one_line: (Array[String]) -> String?
|
|
163
|
+
def self.forget: () -> untyped
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
class Agent
|
|
168
|
+
class Knowledge
|
|
169
|
+
def initialize: (Agent) -> void
|
|
170
|
+
def search: (String, ?k: Integer?) -> Array[CallWorld::Found]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
module Searching
|
|
174
|
+
SEARCHES: Array[Array[String]]
|
|
175
|
+
def self.searches?: (Class) -> bool
|
|
176
|
+
def self.in_source?: (String) -> bool
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
class CallWorld
|
|
181
|
+
LANDS_WITHIN_S: Integer
|
|
182
|
+
TRANSFER_WITHIN_S: Integer
|
|
183
|
+
A_MOMENT_S: Integer
|
|
184
|
+
NO_ANSWER: String
|
|
185
|
+
THE_CALL_ENDED: String
|
|
186
|
+
NO_GATEWAY_TO_SEARCH: String
|
|
187
|
+
|
|
188
|
+
class Transferred
|
|
189
|
+
attr_reader to: String
|
|
190
|
+
attr_reader mode: String?
|
|
191
|
+
attr_reader ok: bool
|
|
192
|
+
attr_reader error: String?
|
|
193
|
+
def initialize: (to: String, mode: String?, ok: bool, error: String?) -> void
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
class Attended
|
|
197
|
+
attr_reader ok: bool
|
|
198
|
+
attr_reader by: Hash[Symbol, untyped]?
|
|
199
|
+
attr_reader error: String?
|
|
200
|
+
def initialize: (ok: bool, by: Hash[Symbol, untyped]?, error: String?) -> void
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
class Found
|
|
204
|
+
attr_reader path: String
|
|
205
|
+
attr_reader heading: String?
|
|
206
|
+
attr_reader text: String
|
|
207
|
+
def initialize: (path: String, heading: String?, text: String) -> void
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class Waiting
|
|
211
|
+
def wait: [T] (Symbol, Numeric, T) { () -> void } -> T
|
|
212
|
+
def settle: (Symbol, untyped) -> void
|
|
213
|
+
def end_all: () -> void
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
attr_reader id: String
|
|
217
|
+
attr_reader contact: String?
|
|
218
|
+
attr_reader from: String?
|
|
219
|
+
attr_reader channel: String?
|
|
220
|
+
attr_reader medium: String
|
|
221
|
+
attr_reader today: String
|
|
222
|
+
attr_reader claimed: String?
|
|
223
|
+
attr_accessor cause: Hash[Symbol, untyped]?
|
|
224
|
+
def initialize: (id: String, ?contact: String?, ?from: String?, ?channel: String?, ?medium: String?, ?today: String, ?claimed: String?,
|
|
225
|
+
?searching: (^(String, Integer?) -> Array[Hash[Symbol, untyped]])?) { (String, Hash[Symbol, untyped]) -> untyped } -> void
|
|
226
|
+
def numbered: () -> Integer
|
|
227
|
+
def say: (String, **untyped) -> bool
|
|
228
|
+
def reply: (String, **untyped) -> bool
|
|
229
|
+
def search: (String, ?k: Integer?) -> Array[Found]
|
|
230
|
+
def transfer: (String, ?mode: (String | Symbol)?) -> Transferred
|
|
231
|
+
def attention: (String, wait_s: Numeric) -> Attended
|
|
232
|
+
def hold: () -> untyped
|
|
233
|
+
def unhold: () -> untyped
|
|
234
|
+
def dtmf: (String) -> untyped
|
|
235
|
+
def claim: (String) -> untyped
|
|
236
|
+
def callback: (String, ?at: String?, ?note: String?) -> untyped
|
|
237
|
+
def send_to: (String, untyped, ?to: Array[String]?) -> untyped
|
|
238
|
+
def participant: (String) -> untyped
|
|
239
|
+
def invite: (String, ?kind: String?) -> untyped
|
|
240
|
+
def log: (String | Symbol, ?Hash[Symbol, untyped]) -> untyped
|
|
241
|
+
def opt_out: (?String?) -> untyped
|
|
242
|
+
def hangup: (?String?) -> untyped
|
|
243
|
+
def take: (String, Hash[Symbol, untyped], Float) -> untyped
|
|
244
|
+
def participants: () -> Array[untyped]
|
|
245
|
+
def caller_seat: () -> untyped
|
|
246
|
+
def last_turn: () -> untyped
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
class Client
|
|
250
|
+
attr_reader url: String
|
|
251
|
+
attr_reader api_key: String
|
|
252
|
+
STOPPED: String
|
|
253
|
+
TOOLS_FINISH_WITHIN_S: Integer
|
|
254
|
+
|
|
255
|
+
class Drained
|
|
256
|
+
attr_reader handed: Integer
|
|
257
|
+
attr_reader parked: Integer
|
|
258
|
+
attr_reader tools: Integer
|
|
259
|
+
attr_reader finished: Integer
|
|
260
|
+
def initialize: (handed: Integer, parked: Integer, tools: Integer, finished: Integer) -> void
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
attr_reader env: String?
|
|
264
|
+
def initialize: (url: String, api_key: String, ?env: String?, ?ping_every: Numeric, ?backoff: Hash[Symbol, Numeric]) -> void
|
|
265
|
+
def drain: (?answer_s: Numeric, ?tools_s: Numeric) -> Drained
|
|
266
|
+
def on_entries: () { (untyped) -> void } -> ^() -> void
|
|
267
|
+
def on_stopped: () { (String) -> void } -> ^() -> void
|
|
268
|
+
def sdk: () -> String
|
|
269
|
+
def agent: (String, **untyped) -> Client::Agent
|
|
270
|
+
def agents: () -> Hash[String, Client::Agent]
|
|
271
|
+
def connect: () -> Client
|
|
272
|
+
def close: () -> untyped
|
|
273
|
+
def connected?: () -> bool
|
|
274
|
+
def on: (String) { (Hash[Symbol, untyped], Client::Call?) -> void } -> ^() -> void
|
|
275
|
+
def on_any: () { (untyped, Client::Call?) -> void } -> ^() -> void
|
|
276
|
+
def on_errors: () { (StandardError) -> void } -> ^() -> void
|
|
277
|
+
def observe: (Hash[Symbol, String], **untyped) { (untyped) -> void } -> void
|
|
278
|
+
def history: (Hash[Symbol, String], **untyped) -> untyped
|
|
279
|
+
def search: (String, String, ?k: Integer?) -> Array[Hash[Symbol, untyped]]
|
|
280
|
+
def send_command: (type: String, agent: String, call: String?, data: Hash[Symbol, untyped], ?id: String?) -> untyped
|
|
281
|
+
def seen: (untyped, Client::Call?) -> void
|
|
282
|
+
def on_error: (StandardError) -> void
|
|
283
|
+
def on_connected: () { () -> void } -> ^() -> void
|
|
284
|
+
|
|
285
|
+
class Agent
|
|
286
|
+
NO_DEV_HANDLER: String
|
|
287
|
+
attr_reader slug: String
|
|
288
|
+
attr_reader calls: CallBook
|
|
289
|
+
attr_reader config: Hash[Symbol, untyped]
|
|
290
|
+
attr_reader app: String?
|
|
291
|
+
def on: (String) { (Hash[Symbol, untyped], Client::Call?) -> void } -> ^() -> void
|
|
292
|
+
def on_any: () { (untyped, Client::Call?) -> void } -> ^() -> void
|
|
293
|
+
def on_dev: () { (String, Hash[Symbol, untyped]) -> Hash[Symbol, untyped] } -> untyped
|
|
294
|
+
def declare: (Array[Hash[Symbol, untyped]]) -> void
|
|
295
|
+
def configure: (?Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
296
|
+
def open: () -> Agent
|
|
297
|
+
def take: (untyped) -> void
|
|
298
|
+
def command: (String, String?, Hash[Symbol, untyped]) -> untyped
|
|
299
|
+
def ping: () -> untyped
|
|
300
|
+
def drain: (?answer_s: Numeric) -> Hash[Symbol, untyped]
|
|
301
|
+
def in_flight: () -> Integer
|
|
302
|
+
def settled: (?within_s: Numeric?) -> nil
|
|
303
|
+
def on_error: (StandardError) -> void
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
class Call
|
|
307
|
+
attr_reader id: String
|
|
308
|
+
attr_reader claimed: String?
|
|
309
|
+
attr_reader run: String?
|
|
310
|
+
attr_reader medium: String?
|
|
311
|
+
attr_reader today: String
|
|
312
|
+
attr_accessor status: String
|
|
313
|
+
attr_accessor channel: String?
|
|
314
|
+
attr_accessor from: String?
|
|
315
|
+
attr_accessor to: String?
|
|
316
|
+
attr_accessor contact: Hash[Symbol, untyped]?
|
|
317
|
+
attr_accessor state: Hash[Symbol, untyped]
|
|
318
|
+
def say: (String, **untyped) -> untyped
|
|
319
|
+
def reply: (String, **untyped) -> untyped
|
|
320
|
+
def set_prompt: (String | Symbol, String) -> untyped
|
|
321
|
+
def set_tools: (Array[Hash[Symbol, untyped]]) -> untyped
|
|
322
|
+
def set_state: (Hash[Symbol, untyped], ?Array[Symbol | String]?) -> untyped
|
|
323
|
+
def tool_result: (Hash[Symbol, untyped]) -> untyped
|
|
324
|
+
def event: (String, Hash[Symbol, untyped]) -> untyped
|
|
325
|
+
def hangup: (?String?) -> untyped
|
|
326
|
+
def log: (String | Symbol, ?Hash[Symbol, untyped]) -> untyped
|
|
327
|
+
def command: (String, Hash[Symbol, untyped]) -> untyped
|
|
328
|
+
def take: (untyped) -> void
|
|
329
|
+
def on: (String) { (Hash[Symbol, untyped], Call) -> void } -> ^() -> void
|
|
330
|
+
def on_any: () { (untyped, Call) -> void } -> ^() -> void
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
class CallBook
|
|
334
|
+
def live: () -> Array[Call]
|
|
335
|
+
def of: (String, Float) -> Call
|
|
336
|
+
def forget: (Call) -> untyped
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
class Listeners
|
|
340
|
+
def on: (String | Symbol) { (untyped, untyped) -> void } -> ^() -> void
|
|
341
|
+
def on_any: () { (untyped, untyped) -> void } -> ^() -> void
|
|
342
|
+
def emit: (untyped, untyped) -> void
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
module Rest
|
|
346
|
+
def self?.get: (String, api_key: String) -> Hash[Symbol, untyped]?
|
|
347
|
+
def self?.put: (String, untyped, api_key: String) -> Hash[Symbol, untyped]?
|
|
348
|
+
def self?.post: (String, untyped, api_key: String) -> Hash[Symbol, untyped]?
|
|
349
|
+
def self?.delete: (String, api_key: String) -> Hash[Symbol, untyped]?
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
module Prompt
|
|
354
|
+
FRAMEWORK: Array[block_spec]
|
|
355
|
+
def self?.render: (Agent, ?resumed: bool, ?remembered: Array[String], ?line: line?) -> Blocks
|
|
356
|
+
def self?.identity: (Agent) -> String
|
|
357
|
+
def self?.tools: (Agent) -> String
|
|
358
|
+
def self?.history: (Agent) -> String
|
|
359
|
+
def self?.collapsed: (Integer) -> String
|
|
360
|
+
def self?.show: (Agent, **untyped) -> String
|
|
361
|
+
def self?.header_for: (Symbol | String, ?String?) -> String
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
module Serve
|
|
365
|
+
USAGE: String
|
|
366
|
+
NO_DOOR: String
|
|
367
|
+
WORLDS: Array[String]
|
|
368
|
+
|
|
369
|
+
class CannotServe < Error
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
class Served
|
|
373
|
+
attr_reader file: String
|
|
374
|
+
attr_reader slug: String
|
|
375
|
+
def initialize: (file: String, slug: String) -> void
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
class Held
|
|
379
|
+
attr_reader client: Client
|
|
380
|
+
attr_reader mounted: Array[Bridge::Mounted]
|
|
381
|
+
def initialize: (Client, Array[Bridge::Mounted]) -> void
|
|
382
|
+
def stop: () -> Client::Drained
|
|
383
|
+
def close: () -> untyped
|
|
384
|
+
def join: () -> untyped
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
module Viewing
|
|
388
|
+
ONLY_THE_VIEW: String
|
|
389
|
+
def self?.answer: (Class, String, String, untyped) -> Hash[Symbol, untyped]
|
|
390
|
+
def self?.a_conversation: (String, untyped) -> Panel::Who
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
def self?.main: (Array[String], ?out: IO, ?err: IO, ?env: Hash[String, String], ?input: IO, ?signals: Thread::Queue?) -> Integer
|
|
394
|
+
def self?.drain_line: (Client::Drained) -> String
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
module Bridge
|
|
398
|
+
def self?.mount: (Class, client: untyped, ?slug: String?, ?last: untyped, ?takes_unclaimed: bool) -> Mounted
|
|
399
|
+
|
|
400
|
+
class Mounted
|
|
401
|
+
attr_reader slug: String
|
|
402
|
+
attr_reader agent: Client::Agent
|
|
403
|
+
attr_reader options: Hash[Symbol, untyped]
|
|
404
|
+
def serving: (String) -> Agent?
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
module Panel
|
|
409
|
+
TONES: Array[String]
|
|
410
|
+
|
|
411
|
+
class Who
|
|
412
|
+
attr_reader agent: String
|
|
413
|
+
attr_reader contact: String
|
|
414
|
+
attr_reader call: String
|
|
415
|
+
def initialize: (agent: String, contact: String, call: String) -> void
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
class Declared
|
|
419
|
+
attr_reader name: String
|
|
420
|
+
attr_reader draw: Proc
|
|
421
|
+
def initialize: (name: String, draw: Proc) -> void
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
class Drawing
|
|
425
|
+
attr_reader nodes: Array[Hash[Symbol, untyped]]
|
|
426
|
+
def initialize: (Class) -> void
|
|
427
|
+
def panel: (?untyped) ?{ () -> void } -> nil
|
|
428
|
+
def rows: () ?{ () -> void } -> nil
|
|
429
|
+
def row: (untyped, ?untyped) -> nil
|
|
430
|
+
def stat: (untyped, untyped) -> nil
|
|
431
|
+
def table: (columns: Array[untyped], rows: Array[untyped]) -> nil
|
|
432
|
+
def badge: (untyped, ?tone: String | Symbol) -> nil
|
|
433
|
+
def text: (untyped) -> nil
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
def self.said: (untyped) -> String
|
|
437
|
+
def self.draw: (Class, Panel::Who) -> Hash[Symbol, untyped]
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
module Rules
|
|
441
|
+
RULES: String
|
|
442
|
+
PROTOCOLS: String
|
|
443
|
+
SPOKEN: String
|
|
444
|
+
ON_A_WEBSITE: String
|
|
445
|
+
ON_WHATSAPP: String
|
|
446
|
+
def self?.channel_rules_for: (String | Symbol, String | Symbol) -> String
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def self.mount: (Class, client: untyped, **untyped) -> Bridge::Mounted
|
|
450
|
+
def self.render: (Agent, **untyped) -> Blocks
|
|
451
|
+
def self.show_prompt: (Agent, **untyped) -> String
|
|
452
|
+
def self.serve: (Class, ?client: Client?, ?url: String?, ?api_key: String?, ?env: String?, ?slug: String?, ?last: untyped) -> Serve::Held
|
|
453
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: pinecall
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Pinecall
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-10-09 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: websocket-driver
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.7'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.7'
|
|
27
|
+
description: The application's side of Pinecall. A class whose declared fields are
|
|
28
|
+
the state, whose `tool` methods are the model's verbs, whose comments are the prompt,
|
|
29
|
+
and whose ERB view is the part of that prompt which changes. It speaks commands
|
|
30
|
+
and reads entries over one socket; it never imports the runtime and never sees audio.
|
|
31
|
+
email:
|
|
32
|
+
- hello@pinecall.io
|
|
33
|
+
executables: []
|
|
34
|
+
extensions: []
|
|
35
|
+
extra_rdoc_files: []
|
|
36
|
+
files:
|
|
37
|
+
- CHANGELOG.md
|
|
38
|
+
- LICENSE
|
|
39
|
+
- README.md
|
|
40
|
+
- lib/pinecall.rb
|
|
41
|
+
- lib/pinecall/agent.rb
|
|
42
|
+
- lib/pinecall/agent/author.rb
|
|
43
|
+
- lib/pinecall/agent/config.rb
|
|
44
|
+
- lib/pinecall/agent/doc.rb
|
|
45
|
+
- lib/pinecall/agent/knowledge.rb
|
|
46
|
+
- lib/pinecall/agent/searching.rb
|
|
47
|
+
- lib/pinecall/agent/spec.rb
|
|
48
|
+
- lib/pinecall/agent/state.rb
|
|
49
|
+
- lib/pinecall/agent/tools.rb
|
|
50
|
+
- lib/pinecall/blocks.rb
|
|
51
|
+
- lib/pinecall/bridge.rb
|
|
52
|
+
- lib/pinecall/call_world.rb
|
|
53
|
+
- lib/pinecall/call_world/answers.rb
|
|
54
|
+
- lib/pinecall/call_world/room.rb
|
|
55
|
+
- lib/pinecall/client.rb
|
|
56
|
+
- lib/pinecall/client/agent.rb
|
|
57
|
+
- lib/pinecall/client/call.rb
|
|
58
|
+
- lib/pinecall/client/connection.rb
|
|
59
|
+
- lib/pinecall/client/endpoints.rb
|
|
60
|
+
- lib/pinecall/client/listeners.rb
|
|
61
|
+
- lib/pinecall/client/observe.rb
|
|
62
|
+
- lib/pinecall/client/rest.rb
|
|
63
|
+
- lib/pinecall/errors.rb
|
|
64
|
+
- lib/pinecall/panel.rb
|
|
65
|
+
- lib/pinecall/reading.rb
|
|
66
|
+
- lib/pinecall/rules.rb
|
|
67
|
+
- lib/pinecall/serve.rb
|
|
68
|
+
- lib/pinecall/serve/held.rb
|
|
69
|
+
- lib/pinecall/serve/loading.rb
|
|
70
|
+
- lib/pinecall/serve/viewing.rb
|
|
71
|
+
- lib/pinecall/testing.rb
|
|
72
|
+
- lib/pinecall/version.rb
|
|
73
|
+
- lib/pinecall/view.rb
|
|
74
|
+
- lib/pinecall/wire.rb
|
|
75
|
+
- lib/pinecall/wire/codec.rb
|
|
76
|
+
- lib/pinecall/wire/enums.rb
|
|
77
|
+
- lib/pinecall/wire/errors.rb
|
|
78
|
+
- lib/pinecall/wire/reduce.rb
|
|
79
|
+
- lib/pinecall/wire/registry.rb
|
|
80
|
+
- lib/pinecall/wire/shapes.rb
|
|
81
|
+
- lib/pinecall/wire/shapes_call_events.rb
|
|
82
|
+
- lib/pinecall/wire/shapes_commands.rb
|
|
83
|
+
- lib/pinecall/wire/shapes_config.rb
|
|
84
|
+
- lib/pinecall/wire/shapes_doors.rb
|
|
85
|
+
- lib/pinecall/wire/shapes_events.rb
|
|
86
|
+
- lib/pinecall/wire/shapes_metrics.rb
|
|
87
|
+
- lib/pinecall/wire/shapes_parts.rb
|
|
88
|
+
- lib/pinecall/wire/state.rb
|
|
89
|
+
- lib/pinecall/wire/validate.rb
|
|
90
|
+
- sig/pinecall.rbs
|
|
91
|
+
homepage: https://github.com/pinecall/ruby
|
|
92
|
+
licenses:
|
|
93
|
+
- Apache-2.0
|
|
94
|
+
metadata:
|
|
95
|
+
homepage_uri: https://github.com/pinecall/ruby
|
|
96
|
+
source_code_uri: https://github.com/pinecall/ruby
|
|
97
|
+
changelog_uri: https://github.com/pinecall/ruby/blob/main/CHANGELOG.md
|
|
98
|
+
rubygems_mfa_required: 'true'
|
|
99
|
+
post_install_message:
|
|
100
|
+
rdoc_options: []
|
|
101
|
+
require_paths:
|
|
102
|
+
- lib
|
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
|
+
requirements:
|
|
105
|
+
- - ">="
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
version: 3.2.0
|
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - ">="
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '0'
|
|
113
|
+
requirements: []
|
|
114
|
+
rubygems_version: 3.4.19
|
|
115
|
+
signing_key:
|
|
116
|
+
specification_version: 4
|
|
117
|
+
summary: 'Write a voice agent as a Ruby class: fields are state, tools are verbs,
|
|
118
|
+
the view is the prompt'
|
|
119
|
+
test_files: []
|