@kodelyth/voice-call 2026.5.39

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/api.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/api.js";
2
+ import * as module from "../../../dist/extensions/voice-call/api.js";
3
+ let defaultExport = "default" in module ? module.default : module;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/cli-metadata.js";
2
+ import defaultModule from "../../../dist/extensions/voice-call/cli-metadata.js";
3
+ let defaultExport = defaultModule;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };
package/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/index.js";
2
+ import defaultModule from "../../../dist/extensions/voice-call/index.js";
3
+ let defaultExport = defaultModule;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };
@@ -0,0 +1,1021 @@
1
+ {
2
+ "id": "voice-call",
3
+ "commandAliases": [
4
+ {
5
+ "name": "voicecall"
6
+ }
7
+ ],
8
+ "activation": {
9
+ "onStartup": true,
10
+ "onCommands": [
11
+ "voicecall"
12
+ ]
13
+ },
14
+ "contracts": {
15
+ "tools": [
16
+ "voice_call"
17
+ ]
18
+ },
19
+ "channelEnvVars": {
20
+ "voice-call": [
21
+ "TELNYX_API_KEY",
22
+ "TELNYX_CONNECTION_ID",
23
+ "TELNYX_PUBLIC_KEY",
24
+ "TWILIO_ACCOUNT_SID",
25
+ "TWILIO_AUTH_TOKEN",
26
+ "TWILIO_FROM_NUMBER",
27
+ "PLIVO_AUTH_ID",
28
+ "PLIVO_AUTH_TOKEN",
29
+ "NGROK_AUTHTOKEN",
30
+ "NGROK_DOMAIN"
31
+ ]
32
+ },
33
+ "uiHints": {
34
+ "provider": {
35
+ "label": "Provider",
36
+ "help": "Use twilio, telnyx, or mock for dev/no-network."
37
+ },
38
+ "fromNumber": {
39
+ "label": "From Number",
40
+ "placeholder": "+15550001234"
41
+ },
42
+ "toNumber": {
43
+ "label": "Default To Number",
44
+ "placeholder": "+15550001234"
45
+ },
46
+ "inboundPolicy": {
47
+ "label": "Inbound Policy"
48
+ },
49
+ "allowFrom": {
50
+ "label": "Inbound Allowlist"
51
+ },
52
+ "inboundGreeting": {
53
+ "label": "Inbound Greeting",
54
+ "advanced": true
55
+ },
56
+ "numbers": {
57
+ "label": "Per-number Routing",
58
+ "help": "Inbound overrides keyed by dialed E.164 number.",
59
+ "advanced": true
60
+ },
61
+ "telnyx.apiKey": {
62
+ "label": "Telnyx API Key",
63
+ "sensitive": true
64
+ },
65
+ "telnyx.connectionId": {
66
+ "label": "Telnyx Connection ID"
67
+ },
68
+ "telnyx.publicKey": {
69
+ "label": "Telnyx Public Key",
70
+ "sensitive": true
71
+ },
72
+ "twilio.accountSid": {
73
+ "label": "Twilio Account SID"
74
+ },
75
+ "twilio.authToken": {
76
+ "label": "Twilio Auth Token",
77
+ "sensitive": true
78
+ },
79
+ "outbound.defaultMode": {
80
+ "label": "Default Call Mode"
81
+ },
82
+ "outbound.notifyHangupDelaySec": {
83
+ "label": "Notify Hangup Delay (sec)",
84
+ "advanced": true
85
+ },
86
+ "serve.port": {
87
+ "label": "Webhook Port"
88
+ },
89
+ "serve.bind": {
90
+ "label": "Webhook Bind"
91
+ },
92
+ "serve.path": {
93
+ "label": "Webhook Path"
94
+ },
95
+ "tailscale.mode": {
96
+ "label": "Tailscale Mode",
97
+ "advanced": true
98
+ },
99
+ "tailscale.path": {
100
+ "label": "Tailscale Path",
101
+ "advanced": true
102
+ },
103
+ "tunnel.provider": {
104
+ "label": "Tunnel Provider",
105
+ "advanced": true
106
+ },
107
+ "tunnel.ngrokAuthToken": {
108
+ "label": "ngrok Auth Token",
109
+ "sensitive": true,
110
+ "advanced": true
111
+ },
112
+ "tunnel.ngrokDomain": {
113
+ "label": "ngrok Domain",
114
+ "advanced": true
115
+ },
116
+ "tunnel.allowNgrokFreeTierLoopbackBypass": {
117
+ "label": "Allow ngrok Free Tier (Loopback Bypass)",
118
+ "advanced": true
119
+ },
120
+ "streaming.enabled": {
121
+ "label": "Enable Streaming",
122
+ "advanced": true
123
+ },
124
+ "streaming.provider": {
125
+ "label": "Streaming Provider",
126
+ "help": "Uses the first registered realtime transcription provider when unset.",
127
+ "advanced": true
128
+ },
129
+ "streaming.providers": {
130
+ "label": "Streaming Provider Config",
131
+ "advanced": true
132
+ },
133
+ "streaming.streamPath": {
134
+ "label": "Media Stream Path",
135
+ "advanced": true
136
+ },
137
+ "realtime.enabled": {
138
+ "label": "Enable Realtime Voice",
139
+ "advanced": true
140
+ },
141
+ "realtime.provider": {
142
+ "label": "Realtime Voice Provider",
143
+ "help": "Uses the first registered realtime voice provider when unset.",
144
+ "advanced": true
145
+ },
146
+ "realtime.streamPath": {
147
+ "label": "Realtime Stream Path",
148
+ "advanced": true
149
+ },
150
+ "realtime.instructions": {
151
+ "label": "Realtime Instructions",
152
+ "advanced": true
153
+ },
154
+ "realtime.toolPolicy": {
155
+ "label": "Realtime Tool Policy",
156
+ "help": "Controls the shared klaw_agent_consult tool.",
157
+ "advanced": true
158
+ },
159
+ "realtime.consultPolicy": {
160
+ "label": "Realtime Consult Policy",
161
+ "help": "Guides when the realtime voice model should call klaw_agent_consult.",
162
+ "advanced": true
163
+ },
164
+ "realtime.consultThinkingLevel": {
165
+ "label": "Consult Thinking Level",
166
+ "help": "Optional override for the regular agent run behind realtime klaw_agent_consult calls.",
167
+ "advanced": true
168
+ },
169
+ "realtime.consultFastMode": {
170
+ "label": "Consult Fast Mode",
171
+ "help": "Optional fast mode override for the regular agent run behind realtime klaw_agent_consult calls.",
172
+ "advanced": true
173
+ },
174
+ "realtime.fastContext.enabled": {
175
+ "label": "Enable Fast Realtime Context",
176
+ "help": "Searches memory/session context before the full consult agent.",
177
+ "advanced": true
178
+ },
179
+ "realtime.fastContext.timeoutMs": {
180
+ "label": "Fast Context Timeout",
181
+ "advanced": true
182
+ },
183
+ "realtime.fastContext.maxResults": {
184
+ "label": "Fast Context Result Limit",
185
+ "advanced": true
186
+ },
187
+ "realtime.fastContext.sources": {
188
+ "label": "Fast Context Sources",
189
+ "advanced": true
190
+ },
191
+ "realtime.fastContext.fallbackToConsult": {
192
+ "label": "Fallback To Full Consult",
193
+ "advanced": true
194
+ },
195
+ "realtime.agentContext.enabled": {
196
+ "label": "Enable Agent Voice Context",
197
+ "help": "Injects a compact agent identity, system prompt, and workspace context capsule into realtime voice instructions.",
198
+ "advanced": true
199
+ },
200
+ "realtime.agentContext.maxChars": {
201
+ "label": "Agent Voice Context Limit",
202
+ "advanced": true
203
+ },
204
+ "realtime.agentContext.includeIdentity": {
205
+ "label": "Include Agent Identity",
206
+ "advanced": true
207
+ },
208
+ "realtime.agentContext.includeSystemPrompt": {
209
+ "label": "Include Agent System Prompt",
210
+ "advanced": true
211
+ },
212
+ "realtime.agentContext.includeWorkspaceFiles": {
213
+ "label": "Include Agent Workspace Files",
214
+ "advanced": true
215
+ },
216
+ "realtime.agentContext.files": {
217
+ "label": "Agent Voice Context Files",
218
+ "advanced": true
219
+ },
220
+ "realtime.providers": {
221
+ "label": "Realtime Provider Config",
222
+ "advanced": true
223
+ },
224
+ "tts.provider": {
225
+ "label": "TTS Provider Override",
226
+ "help": "Deep-merges with messages.tts (Microsoft is ignored for calls).",
227
+ "advanced": true
228
+ },
229
+ "tts.providers": {
230
+ "label": "TTS Provider Config",
231
+ "advanced": true
232
+ },
233
+ "publicUrl": {
234
+ "label": "Public Webhook URL",
235
+ "advanced": true
236
+ },
237
+ "skipSignatureVerification": {
238
+ "label": "Skip Signature Verification",
239
+ "advanced": true
240
+ },
241
+ "store": {
242
+ "label": "Call Log Store Path",
243
+ "advanced": true
244
+ },
245
+ "sessionScope": {
246
+ "label": "Session Scope",
247
+ "help": "Use per-phone to preserve caller memory across calls, or per-call to isolate every call into a fresh voice session."
248
+ },
249
+ "responseModel": {
250
+ "label": "Response Model",
251
+ "help": "Optional override. Falls back to the runtime default model when unset.",
252
+ "advanced": true
253
+ },
254
+ "responseSystemPrompt": {
255
+ "label": "Response System Prompt",
256
+ "advanced": true
257
+ },
258
+ "responseTimeoutMs": {
259
+ "label": "Response Timeout (ms)",
260
+ "advanced": true
261
+ }
262
+ },
263
+ "configSchema": {
264
+ "type": "object",
265
+ "additionalProperties": false,
266
+ "properties": {
267
+ "enabled": {
268
+ "type": "boolean"
269
+ },
270
+ "provider": {
271
+ "type": "string",
272
+ "enum": [
273
+ "telnyx",
274
+ "twilio",
275
+ "plivo",
276
+ "mock"
277
+ ]
278
+ },
279
+ "telnyx": {
280
+ "type": "object",
281
+ "additionalProperties": false,
282
+ "properties": {
283
+ "apiKey": {
284
+ "type": "string"
285
+ },
286
+ "connectionId": {
287
+ "type": "string"
288
+ },
289
+ "publicKey": {
290
+ "type": "string"
291
+ }
292
+ }
293
+ },
294
+ "twilio": {
295
+ "type": "object",
296
+ "additionalProperties": false,
297
+ "properties": {
298
+ "accountSid": {
299
+ "type": "string"
300
+ },
301
+ "authToken": {
302
+ "type": [
303
+ "string",
304
+ "object"
305
+ ]
306
+ }
307
+ }
308
+ },
309
+ "plivo": {
310
+ "type": "object",
311
+ "additionalProperties": false,
312
+ "properties": {
313
+ "authId": {
314
+ "type": "string"
315
+ },
316
+ "authToken": {
317
+ "type": "string"
318
+ }
319
+ }
320
+ },
321
+ "fromNumber": {
322
+ "type": "string",
323
+ "pattern": "^\\+[1-9]\\d{1,14}$"
324
+ },
325
+ "toNumber": {
326
+ "type": "string",
327
+ "pattern": "^\\+[1-9]\\d{1,14}$"
328
+ },
329
+ "inboundPolicy": {
330
+ "type": "string",
331
+ "enum": [
332
+ "disabled",
333
+ "allowlist",
334
+ "pairing",
335
+ "open"
336
+ ]
337
+ },
338
+ "allowFrom": {
339
+ "type": "array",
340
+ "items": {
341
+ "type": "string",
342
+ "pattern": "^\\+[1-9]\\d{1,14}$"
343
+ }
344
+ },
345
+ "inboundGreeting": {
346
+ "type": "string"
347
+ },
348
+ "numbers": {
349
+ "type": "object",
350
+ "propertyNames": {
351
+ "pattern": "^\\+[1-9]\\d{1,14}$"
352
+ },
353
+ "additionalProperties": {
354
+ "type": "object",
355
+ "additionalProperties": false,
356
+ "properties": {
357
+ "inboundGreeting": {
358
+ "type": "string"
359
+ },
360
+ "tts": {
361
+ "$ref": "#/properties/tts"
362
+ },
363
+ "agentId": {
364
+ "type": "string",
365
+ "minLength": 1
366
+ },
367
+ "responseModel": {
368
+ "type": "string"
369
+ },
370
+ "responseSystemPrompt": {
371
+ "type": "string"
372
+ },
373
+ "responseTimeoutMs": {
374
+ "type": "integer",
375
+ "minimum": 1
376
+ }
377
+ }
378
+ }
379
+ },
380
+ "outbound": {
381
+ "type": "object",
382
+ "additionalProperties": false,
383
+ "properties": {
384
+ "defaultMode": {
385
+ "type": "string",
386
+ "enum": [
387
+ "notify",
388
+ "conversation"
389
+ ]
390
+ },
391
+ "notifyHangupDelaySec": {
392
+ "type": "integer",
393
+ "minimum": 0
394
+ }
395
+ }
396
+ },
397
+ "maxDurationSeconds": {
398
+ "type": "integer",
399
+ "minimum": 1
400
+ },
401
+ "staleCallReaperSeconds": {
402
+ "type": "integer",
403
+ "minimum": 0
404
+ },
405
+ "silenceTimeoutMs": {
406
+ "type": "integer",
407
+ "minimum": 1
408
+ },
409
+ "transcriptTimeoutMs": {
410
+ "type": "integer",
411
+ "minimum": 1
412
+ },
413
+ "ringTimeoutMs": {
414
+ "type": "integer",
415
+ "minimum": 1
416
+ },
417
+ "maxConcurrentCalls": {
418
+ "type": "integer",
419
+ "minimum": 1
420
+ },
421
+ "serve": {
422
+ "type": "object",
423
+ "additionalProperties": false,
424
+ "properties": {
425
+ "port": {
426
+ "type": "integer",
427
+ "minimum": 1
428
+ },
429
+ "bind": {
430
+ "type": "string"
431
+ },
432
+ "path": {
433
+ "type": "string"
434
+ }
435
+ }
436
+ },
437
+ "tailscale": {
438
+ "type": "object",
439
+ "additionalProperties": false,
440
+ "properties": {
441
+ "mode": {
442
+ "type": "string",
443
+ "enum": [
444
+ "off",
445
+ "serve",
446
+ "funnel"
447
+ ]
448
+ },
449
+ "path": {
450
+ "type": "string"
451
+ }
452
+ }
453
+ },
454
+ "tunnel": {
455
+ "type": "object",
456
+ "additionalProperties": false,
457
+ "properties": {
458
+ "provider": {
459
+ "type": "string",
460
+ "enum": [
461
+ "none",
462
+ "ngrok",
463
+ "tailscale-serve",
464
+ "tailscale-funnel"
465
+ ]
466
+ },
467
+ "ngrokAuthToken": {
468
+ "type": "string"
469
+ },
470
+ "ngrokDomain": {
471
+ "type": "string"
472
+ },
473
+ "allowNgrokFreeTierLoopbackBypass": {
474
+ "type": "boolean"
475
+ }
476
+ }
477
+ },
478
+ "webhookSecurity": {
479
+ "type": "object",
480
+ "additionalProperties": false,
481
+ "properties": {
482
+ "allowedHosts": {
483
+ "type": "array",
484
+ "items": {
485
+ "type": "string"
486
+ }
487
+ },
488
+ "trustForwardingHeaders": {
489
+ "type": "boolean"
490
+ },
491
+ "trustedProxyIPs": {
492
+ "type": "array",
493
+ "items": {
494
+ "type": "string"
495
+ }
496
+ }
497
+ }
498
+ },
499
+ "streaming": {
500
+ "type": "object",
501
+ "additionalProperties": false,
502
+ "properties": {
503
+ "enabled": {
504
+ "type": "boolean"
505
+ },
506
+ "provider": {
507
+ "type": "string"
508
+ },
509
+ "streamPath": {
510
+ "type": "string"
511
+ },
512
+ "providers": {
513
+ "type": "object",
514
+ "additionalProperties": {
515
+ "type": "object",
516
+ "additionalProperties": true
517
+ }
518
+ },
519
+ "preStartTimeoutMs": {
520
+ "type": "integer",
521
+ "minimum": 1
522
+ },
523
+ "maxPendingConnections": {
524
+ "type": "integer",
525
+ "minimum": 1
526
+ },
527
+ "maxPendingConnectionsPerIp": {
528
+ "type": "integer",
529
+ "minimum": 1
530
+ },
531
+ "maxConnections": {
532
+ "type": "integer",
533
+ "minimum": 1
534
+ }
535
+ }
536
+ },
537
+ "realtime": {
538
+ "type": "object",
539
+ "additionalProperties": false,
540
+ "properties": {
541
+ "enabled": {
542
+ "type": "boolean"
543
+ },
544
+ "provider": {
545
+ "type": "string"
546
+ },
547
+ "streamPath": {
548
+ "type": "string"
549
+ },
550
+ "instructions": {
551
+ "type": "string"
552
+ },
553
+ "toolPolicy": {
554
+ "type": "string",
555
+ "enum": [
556
+ "safe-read-only",
557
+ "owner",
558
+ "none"
559
+ ]
560
+ },
561
+ "consultPolicy": {
562
+ "type": "string",
563
+ "enum": [
564
+ "auto",
565
+ "substantive",
566
+ "always"
567
+ ]
568
+ },
569
+ "consultThinkingLevel": {
570
+ "type": "string",
571
+ "enum": [
572
+ "off",
573
+ "minimal",
574
+ "low",
575
+ "medium",
576
+ "high",
577
+ "xhigh",
578
+ "adaptive",
579
+ "max"
580
+ ]
581
+ },
582
+ "consultFastMode": {
583
+ "type": "boolean"
584
+ },
585
+ "tools": {
586
+ "type": "array",
587
+ "items": {
588
+ "type": "object",
589
+ "additionalProperties": false,
590
+ "properties": {
591
+ "type": {
592
+ "type": "string",
593
+ "enum": [
594
+ "function"
595
+ ]
596
+ },
597
+ "name": {
598
+ "type": "string"
599
+ },
600
+ "description": {
601
+ "type": "string"
602
+ },
603
+ "parameters": {
604
+ "type": "object",
605
+ "additionalProperties": false,
606
+ "properties": {
607
+ "type": {
608
+ "type": "string",
609
+ "enum": [
610
+ "object"
611
+ ]
612
+ },
613
+ "properties": {
614
+ "type": "object",
615
+ "additionalProperties": true
616
+ },
617
+ "required": {
618
+ "type": "array",
619
+ "items": {
620
+ "type": "string"
621
+ }
622
+ }
623
+ },
624
+ "required": [
625
+ "type",
626
+ "properties"
627
+ ]
628
+ }
629
+ },
630
+ "required": [
631
+ "type",
632
+ "name",
633
+ "description",
634
+ "parameters"
635
+ ]
636
+ }
637
+ },
638
+ "fastContext": {
639
+ "type": "object",
640
+ "additionalProperties": false,
641
+ "properties": {
642
+ "enabled": {
643
+ "type": "boolean"
644
+ },
645
+ "timeoutMs": {
646
+ "type": "number",
647
+ "minimum": 1
648
+ },
649
+ "maxResults": {
650
+ "type": "number",
651
+ "minimum": 1
652
+ },
653
+ "sources": {
654
+ "type": "array",
655
+ "minItems": 1,
656
+ "items": {
657
+ "type": "string",
658
+ "enum": [
659
+ "memory",
660
+ "sessions"
661
+ ]
662
+ }
663
+ },
664
+ "fallbackToConsult": {
665
+ "type": "boolean"
666
+ }
667
+ }
668
+ },
669
+ "agentContext": {
670
+ "type": "object",
671
+ "additionalProperties": false,
672
+ "properties": {
673
+ "enabled": {
674
+ "type": "boolean"
675
+ },
676
+ "maxChars": {
677
+ "type": "integer",
678
+ "minimum": 1
679
+ },
680
+ "includeIdentity": {
681
+ "type": "boolean"
682
+ },
683
+ "includeSystemPrompt": {
684
+ "type": "boolean"
685
+ },
686
+ "includeWorkspaceFiles": {
687
+ "type": "boolean"
688
+ },
689
+ "files": {
690
+ "type": "array",
691
+ "items": {
692
+ "type": "string",
693
+ "minLength": 1
694
+ }
695
+ }
696
+ }
697
+ },
698
+ "providers": {
699
+ "type": "object",
700
+ "additionalProperties": {
701
+ "type": "object",
702
+ "additionalProperties": true
703
+ }
704
+ }
705
+ }
706
+ },
707
+ "publicUrl": {
708
+ "type": "string"
709
+ },
710
+ "skipSignatureVerification": {
711
+ "type": "boolean"
712
+ },
713
+ "tts": {
714
+ "type": "object",
715
+ "additionalProperties": false,
716
+ "properties": {
717
+ "auto": {
718
+ "type": "string",
719
+ "enum": [
720
+ "off",
721
+ "always",
722
+ "inbound",
723
+ "tagged"
724
+ ]
725
+ },
726
+ "enabled": {
727
+ "type": "boolean"
728
+ },
729
+ "mode": {
730
+ "type": "string",
731
+ "enum": [
732
+ "final",
733
+ "all"
734
+ ]
735
+ },
736
+ "provider": {
737
+ "type": "string"
738
+ },
739
+ "summaryModel": {
740
+ "type": "string"
741
+ },
742
+ "modelOverrides": {
743
+ "type": "object",
744
+ "additionalProperties": false,
745
+ "properties": {
746
+ "enabled": {
747
+ "type": "boolean"
748
+ },
749
+ "allowText": {
750
+ "type": "boolean"
751
+ },
752
+ "allowProvider": {
753
+ "type": "boolean"
754
+ },
755
+ "allowVoice": {
756
+ "type": "boolean"
757
+ },
758
+ "allowModelId": {
759
+ "type": "boolean"
760
+ },
761
+ "allowVoiceSettings": {
762
+ "type": "boolean"
763
+ },
764
+ "allowNormalization": {
765
+ "type": "boolean"
766
+ },
767
+ "allowSeed": {
768
+ "type": "boolean"
769
+ }
770
+ }
771
+ },
772
+ "providers": {
773
+ "type": "object",
774
+ "properties": {
775
+ "openai": {
776
+ "type": "object",
777
+ "additionalProperties": false,
778
+ "properties": {
779
+ "apiKey": {
780
+ "type": [
781
+ "string",
782
+ "object"
783
+ ]
784
+ },
785
+ "baseUrl": {
786
+ "type": "string"
787
+ },
788
+ "model": {
789
+ "type": "string"
790
+ },
791
+ "voice": {
792
+ "type": "string"
793
+ },
794
+ "speed": {
795
+ "type": "number",
796
+ "minimum": 0.25,
797
+ "maximum": 4
798
+ },
799
+ "instructions": {
800
+ "type": "string"
801
+ }
802
+ }
803
+ },
804
+ "elevenlabs": {
805
+ "type": "object",
806
+ "additionalProperties": false,
807
+ "properties": {
808
+ "apiKey": {
809
+ "type": [
810
+ "string",
811
+ "object"
812
+ ]
813
+ },
814
+ "baseUrl": {
815
+ "type": "string"
816
+ },
817
+ "voiceId": {
818
+ "type": "string"
819
+ },
820
+ "modelId": {
821
+ "type": "string"
822
+ },
823
+ "seed": {
824
+ "type": "integer",
825
+ "minimum": 0,
826
+ "maximum": 4294967295
827
+ },
828
+ "applyTextNormalization": {
829
+ "type": "string",
830
+ "enum": [
831
+ "auto",
832
+ "on",
833
+ "off"
834
+ ]
835
+ },
836
+ "languageCode": {
837
+ "type": "string"
838
+ },
839
+ "voiceSettings": {
840
+ "type": "object",
841
+ "additionalProperties": false,
842
+ "properties": {
843
+ "stability": {
844
+ "type": "number",
845
+ "minimum": 0,
846
+ "maximum": 1
847
+ },
848
+ "similarityBoost": {
849
+ "type": "number",
850
+ "minimum": 0,
851
+ "maximum": 1
852
+ },
853
+ "style": {
854
+ "type": "number",
855
+ "minimum": 0,
856
+ "maximum": 1
857
+ },
858
+ "useSpeakerBoost": {
859
+ "type": "boolean"
860
+ },
861
+ "speed": {
862
+ "type": "number",
863
+ "minimum": 0.5,
864
+ "maximum": 2
865
+ }
866
+ }
867
+ }
868
+ }
869
+ },
870
+ "microsoft": {
871
+ "type": "object",
872
+ "additionalProperties": false,
873
+ "properties": {
874
+ "enabled": {
875
+ "type": "boolean"
876
+ },
877
+ "voice": {
878
+ "type": "string"
879
+ },
880
+ "lang": {
881
+ "type": "string"
882
+ },
883
+ "outputFormat": {
884
+ "type": "string"
885
+ },
886
+ "pitch": {
887
+ "type": "string"
888
+ },
889
+ "rate": {
890
+ "type": "string"
891
+ },
892
+ "volume": {
893
+ "type": "string"
894
+ },
895
+ "saveSubtitles": {
896
+ "type": "boolean"
897
+ },
898
+ "proxy": {
899
+ "type": "string"
900
+ },
901
+ "timeoutMs": {
902
+ "type": "integer",
903
+ "minimum": 1000,
904
+ "maximum": 120000
905
+ }
906
+ }
907
+ },
908
+ "edge": {
909
+ "type": "object",
910
+ "additionalProperties": false,
911
+ "properties": {
912
+ "enabled": {
913
+ "type": "boolean"
914
+ },
915
+ "voice": {
916
+ "type": "string"
917
+ },
918
+ "lang": {
919
+ "type": "string"
920
+ },
921
+ "outputFormat": {
922
+ "type": "string"
923
+ },
924
+ "pitch": {
925
+ "type": "string"
926
+ },
927
+ "rate": {
928
+ "type": "string"
929
+ },
930
+ "volume": {
931
+ "type": "string"
932
+ },
933
+ "saveSubtitles": {
934
+ "type": "boolean"
935
+ },
936
+ "proxy": {
937
+ "type": "string"
938
+ },
939
+ "timeoutMs": {
940
+ "type": "integer",
941
+ "minimum": 1000,
942
+ "maximum": 120000
943
+ }
944
+ }
945
+ }
946
+ },
947
+ "additionalProperties": {
948
+ "type": "object",
949
+ "properties": {
950
+ "apiKey": {
951
+ "type": [
952
+ "string",
953
+ "object"
954
+ ]
955
+ }
956
+ },
957
+ "additionalProperties": true
958
+ }
959
+ },
960
+ "prefsPath": {
961
+ "type": "string"
962
+ },
963
+ "maxTextLength": {
964
+ "type": "integer",
965
+ "minimum": 1
966
+ },
967
+ "timeoutMs": {
968
+ "type": "integer",
969
+ "minimum": 1000,
970
+ "maximum": 120000
971
+ }
972
+ }
973
+ },
974
+ "store": {
975
+ "type": "string"
976
+ },
977
+ "sessionScope": {
978
+ "type": "string",
979
+ "enum": [
980
+ "per-phone",
981
+ "per-call"
982
+ ]
983
+ },
984
+ "responseModel": {
985
+ "type": "string"
986
+ },
987
+ "responseSystemPrompt": {
988
+ "type": "string"
989
+ },
990
+ "responseTimeoutMs": {
991
+ "type": "integer",
992
+ "minimum": 1
993
+ }
994
+ }
995
+ },
996
+ "configContracts": {
997
+ "compatibilityMigrationPaths": [
998
+ "plugins.entries.voice-call.config"
999
+ ],
1000
+ "secretInputs": {
1001
+ "paths": [
1002
+ {
1003
+ "path": "twilio.authToken",
1004
+ "expected": "string"
1005
+ },
1006
+ {
1007
+ "path": "realtime.providers.*.apiKey",
1008
+ "expected": "string"
1009
+ },
1010
+ {
1011
+ "path": "streaming.providers.*.apiKey",
1012
+ "expected": "string"
1013
+ },
1014
+ {
1015
+ "path": "tts.providers.*.apiKey",
1016
+ "expected": "string"
1017
+ }
1018
+ ]
1019
+ }
1020
+ }
1021
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@kodelyth/voice-call",
3
+ "version": "2026.5.39",
4
+ "description": "Klaw voice-call plugin",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/kodelyth/klaw"
8
+ },
9
+ "type": "module",
10
+ "dependencies": {
11
+ "commander": "14.0.3",
12
+ "typebox": "1.1.38",
13
+ "ws": "8.20.1",
14
+ "zod": "4.4.3"
15
+ },
16
+ "devDependencies": {
17
+ "@kodelyth/plugin-sdk": "1.0.1",
18
+ "@kodelyth/klaw": "2026.5.41"
19
+ },
20
+ "peerDependencies": {
21
+ "@kodelyth/klaw": ">=2026.5.19"
22
+ },
23
+ "peerDependenciesMeta": {
24
+ "@kodelyth/klaw": {
25
+ "optional": true
26
+ }
27
+ },
28
+ "klaw": {
29
+ "extensions": [
30
+ "./index.js"
31
+ ],
32
+ "install": {
33
+ "npmSpec": "@kodelyth/voice-call",
34
+ "defaultChoice": "npm",
35
+ "minHostVersion": ">=2026.4.10"
36
+ },
37
+ "compat": {
38
+ "pluginApi": ">=2026.5.39"
39
+ },
40
+ "build": {
41
+ "klawVersion": "2026.5.39"
42
+ },
43
+ "release": {
44
+ "publishToClawHub": true,
45
+ "publishToNpm": true
46
+ }
47
+ }
48
+ }
package/runtime-api.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/runtime-api.js";
2
+ import * as module from "../../../dist/extensions/voice-call/runtime-api.js";
3
+ let defaultExport = "default" in module ? module.default : module;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/runtime-entry.js";
2
+ import * as module from "../../../dist/extensions/voice-call/runtime-entry.js";
3
+ let defaultExport = "default" in module ? module.default : module;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };
package/setup-api.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from "../../../dist/extensions/voice-call/setup-api.js";
2
+ import defaultModule from "../../../dist/extensions/voice-call/setup-api.js";
3
+ let defaultExport = defaultModule;
4
+ for (let index = 0; index < 4 && defaultExport && typeof defaultExport === "object" && "default" in defaultExport; index += 1) {
5
+ defaultExport = defaultExport.default;
6
+ }
7
+ export { defaultExport as default };