@contractspec/lib.contracts-spec 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/integrations/index.js +379 -53
- package/dist/integrations/providers/deepgram.d.ts +3 -0
- package/dist/integrations/providers/deepgram.js +129 -0
- package/dist/integrations/providers/elevenlabs.js +6 -3
- package/dist/integrations/providers/fal-image.d.ts +3 -0
- package/dist/integrations/providers/fal-image.js +122 -0
- package/dist/integrations/providers/fal.js +2 -2
- package/dist/integrations/providers/gradium.js +2 -2
- package/dist/integrations/providers/image.d.ts +85 -0
- package/dist/integrations/providers/image.js +46 -0
- package/dist/integrations/providers/index.d.ts +6 -0
- package/dist/integrations/providers/index.js +380 -54
- package/dist/integrations/providers/openai-image.d.ts +3 -0
- package/dist/integrations/providers/openai-image.js +126 -0
- package/dist/integrations/providers/openai-realtime.d.ts +3 -0
- package/dist/integrations/providers/openai-realtime.js +127 -0
- package/dist/integrations/providers/registry.js +192 -33
- package/dist/integrations/providers/voice-video-sync.d.ts +29 -0
- package/dist/integrations/providers/voice-video-sync.js +1 -0
- package/dist/integrations/providers/voice.d.ts +149 -12
- package/dist/integrations/spec.d.ts +1 -1
- package/dist/node/integrations/index.js +379 -53
- package/dist/node/integrations/providers/deepgram.js +129 -0
- package/dist/node/integrations/providers/elevenlabs.js +6 -3
- package/dist/node/integrations/providers/fal-image.js +122 -0
- package/dist/node/integrations/providers/fal.js +2 -2
- package/dist/node/integrations/providers/gradium.js +2 -2
- package/dist/node/integrations/providers/image.js +46 -0
- package/dist/node/integrations/providers/index.js +380 -54
- package/dist/node/integrations/providers/openai-image.js +126 -0
- package/dist/node/integrations/providers/openai-realtime.js +127 -0
- package/dist/node/integrations/providers/registry.js +192 -33
- package/dist/node/integrations/providers/voice-video-sync.js +0 -0
- package/dist/node/translations/i18n-factory.js +229 -0
- package/dist/node/translations/index.js +64 -4
- package/dist/translations/i18n-factory.d.ts +90 -0
- package/dist/translations/i18n-factory.js +229 -0
- package/dist/translations/index.d.ts +1 -0
- package/dist/translations/index.js +64 -4
- package/package.json +88 -4
|
@@ -518,17 +518,20 @@ var elevenLabsIntegrationSpec = defineIntegration({
|
|
|
518
518
|
meta: {
|
|
519
519
|
key: "ai-voice.elevenlabs",
|
|
520
520
|
version: "1.0.0",
|
|
521
|
-
category: "ai-voice",
|
|
521
|
+
category: "ai-voice-tts",
|
|
522
522
|
title: "ElevenLabs Text-to-Speech",
|
|
523
523
|
description: "ElevenLabs integration for neural voice synthesis and voice catalog access.",
|
|
524
524
|
domain: "ai",
|
|
525
525
|
owners: ["platform.ai"],
|
|
526
|
-
tags: ["voice", "tts"],
|
|
526
|
+
tags: ["voice", "tts", "stt"],
|
|
527
527
|
stability: StabilityEnum7.Beta
|
|
528
528
|
},
|
|
529
529
|
supportedModes: ["managed", "byok"],
|
|
530
530
|
capabilities: {
|
|
531
|
-
provides: [
|
|
531
|
+
provides: [
|
|
532
|
+
{ key: "ai.voice.tts", version: "1.0.0" },
|
|
533
|
+
{ key: "ai.voice.stt", version: "1.0.0" }
|
|
534
|
+
]
|
|
532
535
|
},
|
|
533
536
|
configSchema: {
|
|
534
537
|
schema: {
|
|
@@ -583,7 +586,7 @@ var gradiumIntegrationSpec = defineIntegration({
|
|
|
583
586
|
meta: {
|
|
584
587
|
key: "ai-voice.gradium",
|
|
585
588
|
version: "1.0.0",
|
|
586
|
-
category: "ai-voice",
|
|
589
|
+
category: "ai-voice-tts",
|
|
587
590
|
title: "Gradium Text-to-Speech",
|
|
588
591
|
description: "Gradium integration for low-latency voice synthesis and voice catalog access.",
|
|
589
592
|
domain: "ai",
|
|
@@ -593,7 +596,7 @@ var gradiumIntegrationSpec = defineIntegration({
|
|
|
593
596
|
},
|
|
594
597
|
supportedModes: ["byok"],
|
|
595
598
|
capabilities: {
|
|
596
|
-
provides: [{ key: "ai.voice.
|
|
599
|
+
provides: [{ key: "ai.voice.tts", version: "1.0.0" }]
|
|
597
600
|
},
|
|
598
601
|
configSchema: {
|
|
599
602
|
schema: {
|
|
@@ -672,7 +675,7 @@ var falIntegrationSpec = defineIntegration({
|
|
|
672
675
|
meta: {
|
|
673
676
|
key: "ai-voice.fal",
|
|
674
677
|
version: "1.0.0",
|
|
675
|
-
category: "ai-voice",
|
|
678
|
+
category: "ai-voice-tts",
|
|
676
679
|
title: "Fal Chatterbox Text-to-Speech",
|
|
677
680
|
description: "Fal integration for voice synthesis using Chatterbox text-to-speech models.",
|
|
678
681
|
domain: "ai",
|
|
@@ -682,7 +685,7 @@ var falIntegrationSpec = defineIntegration({
|
|
|
682
685
|
},
|
|
683
686
|
supportedModes: ["byok"],
|
|
684
687
|
capabilities: {
|
|
685
|
-
provides: [{ key: "ai.voice.
|
|
688
|
+
provides: [{ key: "ai.voice.tts", version: "1.0.0" }]
|
|
686
689
|
},
|
|
687
690
|
configSchema: {
|
|
688
691
|
schema: {
|
|
@@ -757,8 +760,162 @@ function registerFalIntegration(registry) {
|
|
|
757
760
|
return registry.register(falIntegrationSpec);
|
|
758
761
|
}
|
|
759
762
|
|
|
760
|
-
// src/integrations/providers/
|
|
763
|
+
// src/integrations/providers/deepgram.ts
|
|
761
764
|
import { StabilityEnum as StabilityEnum10 } from "@contractspec/lib.contracts-spec/ownership";
|
|
765
|
+
var deepgramIntegrationSpec = defineIntegration({
|
|
766
|
+
meta: {
|
|
767
|
+
key: "ai-voice-stt.deepgram",
|
|
768
|
+
version: "1.0.0",
|
|
769
|
+
category: "ai-voice-stt",
|
|
770
|
+
title: "Deepgram Speech-to-Text",
|
|
771
|
+
description: "Deepgram integration for real-time and batch speech-to-text transcription with speaker diarization.",
|
|
772
|
+
domain: "ai",
|
|
773
|
+
owners: ["platform.ai"],
|
|
774
|
+
tags: ["voice", "stt", "transcription", "diarization"],
|
|
775
|
+
stability: StabilityEnum10.Experimental
|
|
776
|
+
},
|
|
777
|
+
supportedModes: ["byok"],
|
|
778
|
+
capabilities: {
|
|
779
|
+
provides: [
|
|
780
|
+
{ key: "ai.voice.stt", version: "1.0.0" },
|
|
781
|
+
{ key: "ai.voice.conversational", version: "1.0.0" }
|
|
782
|
+
]
|
|
783
|
+
},
|
|
784
|
+
configSchema: {
|
|
785
|
+
schema: {
|
|
786
|
+
type: "object",
|
|
787
|
+
properties: {
|
|
788
|
+
model: {
|
|
789
|
+
type: "string",
|
|
790
|
+
description: "Deepgram model to use (e.g. nova-3, nova-2, enhanced)."
|
|
791
|
+
},
|
|
792
|
+
language: {
|
|
793
|
+
type: "string",
|
|
794
|
+
description: "Default language code for transcription (e.g. en-US)."
|
|
795
|
+
},
|
|
796
|
+
enableDiarization: {
|
|
797
|
+
type: "boolean",
|
|
798
|
+
description: "Enable speaker diarization by default."
|
|
799
|
+
},
|
|
800
|
+
enableSmartFormat: {
|
|
801
|
+
type: "boolean",
|
|
802
|
+
description: "Enable smart formatting (punctuation, capitalization)."
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
},
|
|
806
|
+
example: {
|
|
807
|
+
model: "nova-3",
|
|
808
|
+
language: "en-US",
|
|
809
|
+
enableDiarization: true,
|
|
810
|
+
enableSmartFormat: true
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
secretSchema: {
|
|
814
|
+
schema: {
|
|
815
|
+
type: "object",
|
|
816
|
+
required: ["apiKey"],
|
|
817
|
+
properties: {
|
|
818
|
+
apiKey: {
|
|
819
|
+
type: "string",
|
|
820
|
+
description: "Deepgram API key with transcription permissions."
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
example: {
|
|
825
|
+
apiKey: "dg_***"
|
|
826
|
+
}
|
|
827
|
+
},
|
|
828
|
+
healthCheck: {
|
|
829
|
+
method: "custom",
|
|
830
|
+
timeoutMs: 5000
|
|
831
|
+
},
|
|
832
|
+
docsUrl: "https://developers.deepgram.com/docs",
|
|
833
|
+
byokSetup: {
|
|
834
|
+
setupInstructions: "Create a Deepgram API key with speech-to-text permissions and store it in your secret provider."
|
|
835
|
+
}
|
|
836
|
+
});
|
|
837
|
+
function registerDeepgramIntegration(registry) {
|
|
838
|
+
return registry.register(deepgramIntegrationSpec);
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
// src/integrations/providers/openai-realtime.ts
|
|
842
|
+
import { StabilityEnum as StabilityEnum11 } from "@contractspec/lib.contracts-spec/ownership";
|
|
843
|
+
var openaiRealtimeIntegrationSpec = defineIntegration({
|
|
844
|
+
meta: {
|
|
845
|
+
key: "ai-voice-conv.openai",
|
|
846
|
+
version: "1.0.0",
|
|
847
|
+
category: "ai-voice-conversational",
|
|
848
|
+
title: "OpenAI Realtime Voice",
|
|
849
|
+
description: "OpenAI Realtime API integration for bidirectional conversational voice with GPT models.",
|
|
850
|
+
domain: "ai",
|
|
851
|
+
owners: ["platform.ai"],
|
|
852
|
+
tags: ["voice", "conversational", "realtime", "openai"],
|
|
853
|
+
stability: StabilityEnum11.Experimental
|
|
854
|
+
},
|
|
855
|
+
supportedModes: ["byok"],
|
|
856
|
+
capabilities: {
|
|
857
|
+
provides: [{ key: "ai.voice.conversational", version: "1.0.0" }]
|
|
858
|
+
},
|
|
859
|
+
configSchema: {
|
|
860
|
+
schema: {
|
|
861
|
+
type: "object",
|
|
862
|
+
properties: {
|
|
863
|
+
model: {
|
|
864
|
+
type: "string",
|
|
865
|
+
description: "OpenAI model for realtime conversations (e.g. gpt-4o-realtime-preview)."
|
|
866
|
+
},
|
|
867
|
+
defaultVoice: {
|
|
868
|
+
type: "string",
|
|
869
|
+
description: "Default voice for agent responses (e.g. alloy, echo, shimmer)."
|
|
870
|
+
},
|
|
871
|
+
turnDetection: {
|
|
872
|
+
type: "string",
|
|
873
|
+
enum: ["server_vad", "push_to_talk"],
|
|
874
|
+
description: "Turn detection strategy."
|
|
875
|
+
},
|
|
876
|
+
maxSessionDurationSeconds: {
|
|
877
|
+
type: "number",
|
|
878
|
+
description: "Maximum session duration in seconds."
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
example: {
|
|
883
|
+
model: "gpt-4o-realtime-preview",
|
|
884
|
+
defaultVoice: "alloy",
|
|
885
|
+
turnDetection: "server_vad",
|
|
886
|
+
maxSessionDurationSeconds: 600
|
|
887
|
+
}
|
|
888
|
+
},
|
|
889
|
+
secretSchema: {
|
|
890
|
+
schema: {
|
|
891
|
+
type: "object",
|
|
892
|
+
required: ["apiKey"],
|
|
893
|
+
properties: {
|
|
894
|
+
apiKey: {
|
|
895
|
+
type: "string",
|
|
896
|
+
description: "OpenAI API key with realtime API access."
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
example: {
|
|
901
|
+
apiKey: "sk-***"
|
|
902
|
+
}
|
|
903
|
+
},
|
|
904
|
+
healthCheck: {
|
|
905
|
+
method: "custom",
|
|
906
|
+
timeoutMs: 5000
|
|
907
|
+
},
|
|
908
|
+
docsUrl: "https://platform.openai.com/docs/guides/realtime",
|
|
909
|
+
byokSetup: {
|
|
910
|
+
setupInstructions: "Create an OpenAI API key with Realtime API access enabled and store it in your secret provider."
|
|
911
|
+
}
|
|
912
|
+
});
|
|
913
|
+
function registerOpenaiRealtimeIntegration(registry) {
|
|
914
|
+
return registry.register(openaiRealtimeIntegrationSpec);
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
// src/integrations/providers/gmail.ts
|
|
918
|
+
import { StabilityEnum as StabilityEnum12 } from "@contractspec/lib.contracts-spec/ownership";
|
|
762
919
|
var gmailIntegrationSpec = defineIntegration({
|
|
763
920
|
meta: {
|
|
764
921
|
key: "email.gmail",
|
|
@@ -769,7 +926,7 @@ var gmailIntegrationSpec = defineIntegration({
|
|
|
769
926
|
domain: "communications",
|
|
770
927
|
owners: ["platform.messaging"],
|
|
771
928
|
tags: ["email", "gmail"],
|
|
772
|
-
stability:
|
|
929
|
+
stability: StabilityEnum12.Beta
|
|
773
930
|
},
|
|
774
931
|
supportedModes: ["managed", "byok"],
|
|
775
932
|
capabilities: {
|
|
@@ -846,7 +1003,7 @@ function registerGmailIntegration(registry) {
|
|
|
846
1003
|
}
|
|
847
1004
|
|
|
848
1005
|
// src/integrations/providers/google-calendar.ts
|
|
849
|
-
import { StabilityEnum as
|
|
1006
|
+
import { StabilityEnum as StabilityEnum13 } from "@contractspec/lib.contracts-spec/ownership";
|
|
850
1007
|
var googleCalendarIntegrationSpec = defineIntegration({
|
|
851
1008
|
meta: {
|
|
852
1009
|
key: "calendar.google",
|
|
@@ -857,7 +1014,7 @@ var googleCalendarIntegrationSpec = defineIntegration({
|
|
|
857
1014
|
domain: "productivity",
|
|
858
1015
|
owners: ["platform.messaging"],
|
|
859
1016
|
tags: ["calendar", "google"],
|
|
860
|
-
stability:
|
|
1017
|
+
stability: StabilityEnum13.Beta
|
|
861
1018
|
},
|
|
862
1019
|
supportedModes: ["managed", "byok"],
|
|
863
1020
|
capabilities: {
|
|
@@ -917,7 +1074,7 @@ function registerGoogleCalendarIntegration(registry) {
|
|
|
917
1074
|
}
|
|
918
1075
|
|
|
919
1076
|
// src/integrations/providers/twilio-sms.ts
|
|
920
|
-
import { StabilityEnum as
|
|
1077
|
+
import { StabilityEnum as StabilityEnum14 } from "@contractspec/lib.contracts-spec/ownership";
|
|
921
1078
|
var twilioSmsIntegrationSpec = defineIntegration({
|
|
922
1079
|
meta: {
|
|
923
1080
|
key: "sms.twilio",
|
|
@@ -928,7 +1085,7 @@ var twilioSmsIntegrationSpec = defineIntegration({
|
|
|
928
1085
|
domain: "communications",
|
|
929
1086
|
owners: ["platform.messaging"],
|
|
930
1087
|
tags: ["sms", "messaging"],
|
|
931
|
-
stability:
|
|
1088
|
+
stability: StabilityEnum14.Stable
|
|
932
1089
|
},
|
|
933
1090
|
supportedModes: ["managed", "byok"],
|
|
934
1091
|
capabilities: {
|
|
@@ -987,7 +1144,7 @@ function registerTwilioSmsIntegration(registry) {
|
|
|
987
1144
|
}
|
|
988
1145
|
|
|
989
1146
|
// src/integrations/providers/gcs-storage.ts
|
|
990
|
-
import { StabilityEnum as
|
|
1147
|
+
import { StabilityEnum as StabilityEnum15 } from "@contractspec/lib.contracts-spec/ownership";
|
|
991
1148
|
var gcsStorageIntegrationSpec = defineIntegration({
|
|
992
1149
|
meta: {
|
|
993
1150
|
key: "storage.gcs",
|
|
@@ -998,7 +1155,7 @@ var gcsStorageIntegrationSpec = defineIntegration({
|
|
|
998
1155
|
domain: "infrastructure",
|
|
999
1156
|
owners: ["platform.infrastructure"],
|
|
1000
1157
|
tags: ["storage", "gcs", "google-cloud"],
|
|
1001
|
-
stability:
|
|
1158
|
+
stability: StabilityEnum15.Beta
|
|
1002
1159
|
},
|
|
1003
1160
|
supportedModes: ["managed", "byok"],
|
|
1004
1161
|
capabilities: {
|
|
@@ -1063,7 +1220,7 @@ function registerGcsStorageIntegration(registry) {
|
|
|
1063
1220
|
}
|
|
1064
1221
|
|
|
1065
1222
|
// src/integrations/providers/powens.ts
|
|
1066
|
-
import { StabilityEnum as
|
|
1223
|
+
import { StabilityEnum as StabilityEnum16 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1067
1224
|
var powensIntegrationSpec = defineIntegration({
|
|
1068
1225
|
meta: {
|
|
1069
1226
|
key: "openbanking.powens",
|
|
@@ -1074,7 +1231,7 @@ var powensIntegrationSpec = defineIntegration({
|
|
|
1074
1231
|
domain: "finance",
|
|
1075
1232
|
owners: ["platform.finance"],
|
|
1076
1233
|
tags: ["open-banking", "powens", "finance"],
|
|
1077
|
-
stability:
|
|
1234
|
+
stability: StabilityEnum16.Experimental
|
|
1078
1235
|
},
|
|
1079
1236
|
supportedModes: ["byok"],
|
|
1080
1237
|
capabilities: {
|
|
@@ -1166,7 +1323,7 @@ function registerPowensIntegration(registry) {
|
|
|
1166
1323
|
}
|
|
1167
1324
|
|
|
1168
1325
|
// src/integrations/providers/posthog.ts
|
|
1169
|
-
import { StabilityEnum as
|
|
1326
|
+
import { StabilityEnum as StabilityEnum17 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1170
1327
|
var posthogIntegrationSpec = defineIntegration({
|
|
1171
1328
|
meta: {
|
|
1172
1329
|
key: "analytics.posthog",
|
|
@@ -1177,7 +1334,7 @@ var posthogIntegrationSpec = defineIntegration({
|
|
|
1177
1334
|
domain: "analytics",
|
|
1178
1335
|
owners: ["@platform.integrations"],
|
|
1179
1336
|
tags: ["analytics", "posthog", "llm", "ai"],
|
|
1180
|
-
stability:
|
|
1337
|
+
stability: StabilityEnum17.Beta
|
|
1181
1338
|
},
|
|
1182
1339
|
supportedModes: ["managed", "byok"],
|
|
1183
1340
|
capabilities: {
|
|
@@ -1251,7 +1408,7 @@ function registerPosthogIntegration(registry) {
|
|
|
1251
1408
|
}
|
|
1252
1409
|
|
|
1253
1410
|
// src/integrations/providers/linear.ts
|
|
1254
|
-
import { StabilityEnum as
|
|
1411
|
+
import { StabilityEnum as StabilityEnum18 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1255
1412
|
var linearIntegrationSpec = defineIntegration({
|
|
1256
1413
|
meta: {
|
|
1257
1414
|
key: "project-management.linear",
|
|
@@ -1262,7 +1419,7 @@ var linearIntegrationSpec = defineIntegration({
|
|
|
1262
1419
|
domain: "productivity",
|
|
1263
1420
|
owners: ["@platform.integrations"],
|
|
1264
1421
|
tags: ["project-management", "linear"],
|
|
1265
|
-
stability:
|
|
1422
|
+
stability: StabilityEnum18.Beta
|
|
1266
1423
|
},
|
|
1267
1424
|
supportedModes: ["managed", "byok"],
|
|
1268
1425
|
capabilities: {
|
|
@@ -1337,7 +1494,7 @@ function registerLinearIntegration(registry) {
|
|
|
1337
1494
|
}
|
|
1338
1495
|
|
|
1339
1496
|
// src/integrations/providers/jira.ts
|
|
1340
|
-
import { StabilityEnum as
|
|
1497
|
+
import { StabilityEnum as StabilityEnum19 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1341
1498
|
var jiraIntegrationSpec = defineIntegration({
|
|
1342
1499
|
meta: {
|
|
1343
1500
|
key: "project-management.jira",
|
|
@@ -1348,7 +1505,7 @@ var jiraIntegrationSpec = defineIntegration({
|
|
|
1348
1505
|
domain: "productivity",
|
|
1349
1506
|
owners: ["@platform.integrations"],
|
|
1350
1507
|
tags: ["project-management", "jira"],
|
|
1351
|
-
stability:
|
|
1508
|
+
stability: StabilityEnum19.Beta
|
|
1352
1509
|
},
|
|
1353
1510
|
supportedModes: ["managed", "byok"],
|
|
1354
1511
|
capabilities: {
|
|
@@ -1424,7 +1581,7 @@ function registerJiraIntegration(registry) {
|
|
|
1424
1581
|
}
|
|
1425
1582
|
|
|
1426
1583
|
// src/integrations/providers/notion.ts
|
|
1427
|
-
import { StabilityEnum as
|
|
1584
|
+
import { StabilityEnum as StabilityEnum20 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1428
1585
|
var notionIntegrationSpec = defineIntegration({
|
|
1429
1586
|
meta: {
|
|
1430
1587
|
key: "project-management.notion",
|
|
@@ -1435,7 +1592,7 @@ var notionIntegrationSpec = defineIntegration({
|
|
|
1435
1592
|
domain: "productivity",
|
|
1436
1593
|
owners: ["@platform.integrations"],
|
|
1437
1594
|
tags: ["project-management", "notion"],
|
|
1438
|
-
stability:
|
|
1595
|
+
stability: StabilityEnum20.Beta
|
|
1439
1596
|
},
|
|
1440
1597
|
supportedModes: ["managed", "byok"],
|
|
1441
1598
|
capabilities: {
|
|
@@ -1516,7 +1673,7 @@ function registerNotionIntegration(registry) {
|
|
|
1516
1673
|
}
|
|
1517
1674
|
|
|
1518
1675
|
// src/integrations/providers/granola.ts
|
|
1519
|
-
import { StabilityEnum as
|
|
1676
|
+
import { StabilityEnum as StabilityEnum21 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1520
1677
|
var granolaIntegrationSpec = defineIntegration({
|
|
1521
1678
|
meta: {
|
|
1522
1679
|
key: "meeting-recorder.granola",
|
|
@@ -1527,7 +1684,7 @@ var granolaIntegrationSpec = defineIntegration({
|
|
|
1527
1684
|
domain: "productivity",
|
|
1528
1685
|
owners: ["platform.integrations"],
|
|
1529
1686
|
tags: ["meeting-recorder", "granola", "transcripts"],
|
|
1530
|
-
stability:
|
|
1687
|
+
stability: StabilityEnum21.Experimental
|
|
1531
1688
|
},
|
|
1532
1689
|
supportedModes: ["byok"],
|
|
1533
1690
|
capabilities: {
|
|
@@ -1602,7 +1759,7 @@ function registerGranolaIntegration(registry) {
|
|
|
1602
1759
|
}
|
|
1603
1760
|
|
|
1604
1761
|
// src/integrations/providers/tldv.ts
|
|
1605
|
-
import { StabilityEnum as
|
|
1762
|
+
import { StabilityEnum as StabilityEnum22 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1606
1763
|
var tldvIntegrationSpec = defineIntegration({
|
|
1607
1764
|
meta: {
|
|
1608
1765
|
key: "meeting-recorder.tldv",
|
|
@@ -1613,7 +1770,7 @@ var tldvIntegrationSpec = defineIntegration({
|
|
|
1613
1770
|
domain: "productivity",
|
|
1614
1771
|
owners: ["platform.integrations"],
|
|
1615
1772
|
tags: ["meeting-recorder", "tldv", "transcripts"],
|
|
1616
|
-
stability:
|
|
1773
|
+
stability: StabilityEnum22.Experimental
|
|
1617
1774
|
},
|
|
1618
1775
|
supportedModes: ["byok"],
|
|
1619
1776
|
capabilities: {
|
|
@@ -1687,7 +1844,7 @@ function registerTldvIntegration(registry) {
|
|
|
1687
1844
|
}
|
|
1688
1845
|
|
|
1689
1846
|
// src/integrations/providers/fireflies.ts
|
|
1690
|
-
import { StabilityEnum as
|
|
1847
|
+
import { StabilityEnum as StabilityEnum23 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1691
1848
|
var firefliesIntegrationSpec = defineIntegration({
|
|
1692
1849
|
meta: {
|
|
1693
1850
|
key: "meeting-recorder.fireflies",
|
|
@@ -1698,7 +1855,7 @@ var firefliesIntegrationSpec = defineIntegration({
|
|
|
1698
1855
|
domain: "productivity",
|
|
1699
1856
|
owners: ["platform.integrations"],
|
|
1700
1857
|
tags: ["meeting-recorder", "fireflies", "transcripts"],
|
|
1701
|
-
stability:
|
|
1858
|
+
stability: StabilityEnum23.Experimental
|
|
1702
1859
|
},
|
|
1703
1860
|
supportedModes: ["byok"],
|
|
1704
1861
|
capabilities: {
|
|
@@ -1772,7 +1929,7 @@ function registerFirefliesIntegration(registry) {
|
|
|
1772
1929
|
}
|
|
1773
1930
|
|
|
1774
1931
|
// src/integrations/providers/fathom.ts
|
|
1775
|
-
import { StabilityEnum as
|
|
1932
|
+
import { StabilityEnum as StabilityEnum24 } from "@contractspec/lib.contracts-spec/ownership";
|
|
1776
1933
|
var fathomIntegrationSpec = defineIntegration({
|
|
1777
1934
|
meta: {
|
|
1778
1935
|
key: "meeting-recorder.fathom",
|
|
@@ -1783,7 +1940,7 @@ var fathomIntegrationSpec = defineIntegration({
|
|
|
1783
1940
|
domain: "productivity",
|
|
1784
1941
|
owners: ["platform.integrations"],
|
|
1785
1942
|
tags: ["meeting-recorder", "fathom", "transcripts"],
|
|
1786
|
-
stability:
|
|
1943
|
+
stability: StabilityEnum24.Experimental
|
|
1787
1944
|
},
|
|
1788
1945
|
supportedModes: ["byok"],
|
|
1789
1946
|
capabilities: {
|
|
@@ -1901,6 +2058,8 @@ function createDefaultIntegrationSpecRegistry() {
|
|
|
1901
2058
|
registerTldvIntegration(registry);
|
|
1902
2059
|
registerFirefliesIntegration(registry);
|
|
1903
2060
|
registerFathomIntegration(registry);
|
|
2061
|
+
registerDeepgramIntegration(registry);
|
|
2062
|
+
registerOpenaiRealtimeIntegration(registry);
|
|
1904
2063
|
return registry;
|
|
1905
2064
|
}
|
|
1906
2065
|
export {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { WordTiming } from './voice';
|
|
2
|
+
/**
|
|
3
|
+
* Timing map produced by voice/tts, consumed by video-gen.
|
|
4
|
+
* Video-gen uses this to adjust scene durations to match voice.
|
|
5
|
+
*/
|
|
6
|
+
export interface VoiceTimingMap {
|
|
7
|
+
totalDurationMs: number;
|
|
8
|
+
segments: VoiceSegmentTiming[];
|
|
9
|
+
fps: number;
|
|
10
|
+
}
|
|
11
|
+
export interface VoiceSegmentTiming {
|
|
12
|
+
/** Matches a sceneId from video-gen's ScenePlan */
|
|
13
|
+
sceneId: string;
|
|
14
|
+
/** Voice audio duration for this segment in ms */
|
|
15
|
+
durationMs: number;
|
|
16
|
+
/** Equivalent duration in frames */
|
|
17
|
+
durationInFrames: number;
|
|
18
|
+
/** Recommended scene duration (voice + breathing room) */
|
|
19
|
+
recommendedSceneDurationInFrames: number;
|
|
20
|
+
wordTimings?: WordTiming[];
|
|
21
|
+
}
|
|
22
|
+
export interface VoicePacingDirective {
|
|
23
|
+
sceneId: string;
|
|
24
|
+
rate: number;
|
|
25
|
+
emphasis: 'reduced' | 'normal' | 'strong';
|
|
26
|
+
tone: 'neutral' | 'urgent' | 'excited' | 'calm' | 'authoritative';
|
|
27
|
+
leadingSilenceMs: number;
|
|
28
|
+
trailingSilenceMs: number;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @bun
|
|
@@ -5,27 +5,164 @@ export interface Voice {
|
|
|
5
5
|
language?: string;
|
|
6
6
|
gender?: 'male' | 'female' | 'neutral';
|
|
7
7
|
previewUrl?: string;
|
|
8
|
+
capabilities?: ('tts' | 'conversational')[];
|
|
8
9
|
metadata?: Record<string, string>;
|
|
9
10
|
}
|
|
10
|
-
export
|
|
11
|
+
export type AudioFormat = 'mp3' | 'wav' | 'ogg' | 'pcm' | 'opus';
|
|
12
|
+
export interface AudioData {
|
|
13
|
+
data: Uint8Array;
|
|
14
|
+
format: AudioFormat;
|
|
15
|
+
sampleRateHz: number;
|
|
16
|
+
durationMs?: number;
|
|
17
|
+
channels?: 1 | 2;
|
|
18
|
+
}
|
|
19
|
+
export interface WordTiming {
|
|
20
|
+
word: string;
|
|
21
|
+
startMs: number;
|
|
22
|
+
endMs: number;
|
|
23
|
+
confidence?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface TTSSynthesisInput {
|
|
11
26
|
text: string;
|
|
12
|
-
voiceId
|
|
27
|
+
voiceId: string;
|
|
13
28
|
language?: string;
|
|
29
|
+
format?: AudioFormat;
|
|
30
|
+
sampleRateHz?: number;
|
|
31
|
+
/** Speech rate multiplier (0.5-2.0). Default 1.0 */
|
|
32
|
+
rate?: number;
|
|
33
|
+
/** Pitch adjustment in semitones (-12 to +12). Default 0 */
|
|
34
|
+
pitch?: number;
|
|
35
|
+
/** Emphasis level */
|
|
36
|
+
emphasis?: 'reduced' | 'normal' | 'strong';
|
|
37
|
+
/** Style (0-1, provider-specific) */
|
|
14
38
|
style?: number;
|
|
39
|
+
/** Stability (0-1, provider-specific) */
|
|
15
40
|
stability?: number;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
41
|
+
/** SSML markup. Overrides text if set. */
|
|
42
|
+
ssml?: string;
|
|
43
|
+
metadata?: Record<string, string>;
|
|
44
|
+
}
|
|
45
|
+
export interface TTSSynthesisResult {
|
|
46
|
+
audio: AudioData;
|
|
47
|
+
wordTimings?: WordTiming[];
|
|
48
|
+
/** Provider may return revised/normalized text */
|
|
49
|
+
normalizedText?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface TTSProvider {
|
|
52
|
+
synthesize(input: TTSSynthesisInput): Promise<TTSSynthesisResult>;
|
|
53
|
+
listVoices(): Promise<Voice[]>;
|
|
54
|
+
}
|
|
55
|
+
export interface STTTranscriptionInput {
|
|
56
|
+
audio: AudioData;
|
|
57
|
+
language?: string;
|
|
58
|
+
/** Enable speaker diarization */
|
|
59
|
+
diarize?: boolean;
|
|
60
|
+
/** Expected number of speakers (hint for diarization) */
|
|
61
|
+
speakerCount?: number;
|
|
62
|
+
/** Include word-level timestamps */
|
|
63
|
+
wordTimestamps?: boolean;
|
|
64
|
+
/** Vocabulary hints for domain-specific terms */
|
|
65
|
+
vocabularyHints?: string[];
|
|
66
|
+
/** Model to use (provider-specific) */
|
|
67
|
+
model?: string;
|
|
19
68
|
metadata?: Record<string, string>;
|
|
20
69
|
}
|
|
21
|
-
export interface
|
|
70
|
+
export interface TranscriptionSegment {
|
|
71
|
+
text: string;
|
|
72
|
+
startMs: number;
|
|
73
|
+
endMs: number;
|
|
74
|
+
speakerId?: string;
|
|
75
|
+
speakerName?: string;
|
|
76
|
+
confidence?: number;
|
|
77
|
+
wordTimings?: WordTiming[];
|
|
78
|
+
}
|
|
79
|
+
export interface STTTranscriptionResult {
|
|
80
|
+
text: string;
|
|
81
|
+
segments: TranscriptionSegment[];
|
|
82
|
+
language: string;
|
|
83
|
+
durationMs: number;
|
|
84
|
+
speakers?: {
|
|
85
|
+
id: string;
|
|
86
|
+
name?: string;
|
|
87
|
+
}[];
|
|
88
|
+
wordTimings?: WordTiming[];
|
|
89
|
+
}
|
|
90
|
+
export interface STTProvider {
|
|
91
|
+
transcribe(input: STTTranscriptionInput): Promise<STTTranscriptionResult>;
|
|
92
|
+
/** Stream transcription (real-time audio input) */
|
|
93
|
+
transcribeStream?(audio: AsyncIterable<Uint8Array>, options?: Omit<STTTranscriptionInput, 'audio'>): AsyncIterable<TranscriptionSegment>;
|
|
94
|
+
}
|
|
95
|
+
export interface ConversationalSessionConfig {
|
|
96
|
+
voiceId: string;
|
|
97
|
+
language?: string;
|
|
98
|
+
systemPrompt?: string;
|
|
99
|
+
/** LLM model for response generation */
|
|
100
|
+
llmModel?: string;
|
|
101
|
+
/** Audio input format */
|
|
102
|
+
inputFormat?: AudioFormat;
|
|
103
|
+
/** Audio output format */
|
|
104
|
+
outputFormat?: AudioFormat;
|
|
105
|
+
/** Turn detection mode */
|
|
106
|
+
turnDetection?: 'server_vad' | 'push_to_talk';
|
|
107
|
+
/** Silence threshold in ms to detect end of turn */
|
|
108
|
+
silenceThresholdMs?: number;
|
|
109
|
+
/** Maximum session duration in seconds */
|
|
110
|
+
maxDurationSeconds?: number;
|
|
111
|
+
metadata?: Record<string, string>;
|
|
112
|
+
}
|
|
113
|
+
export type ConversationalEvent = {
|
|
114
|
+
type: 'session_started';
|
|
115
|
+
sessionId: string;
|
|
116
|
+
} | {
|
|
117
|
+
type: 'user_speech_started';
|
|
118
|
+
} | {
|
|
119
|
+
type: 'user_speech_ended';
|
|
120
|
+
transcript: string;
|
|
121
|
+
} | {
|
|
122
|
+
type: 'agent_speech_started';
|
|
123
|
+
text: string;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'agent_audio';
|
|
22
126
|
audio: Uint8Array;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
127
|
+
} | {
|
|
128
|
+
type: 'agent_speech_ended';
|
|
129
|
+
} | {
|
|
130
|
+
type: 'transcript';
|
|
131
|
+
role: 'user' | 'agent';
|
|
132
|
+
text: string;
|
|
133
|
+
timestamp: number;
|
|
134
|
+
} | {
|
|
135
|
+
type: 'error';
|
|
136
|
+
error: Error;
|
|
137
|
+
} | {
|
|
138
|
+
type: 'session_ended';
|
|
139
|
+
reason: string;
|
|
140
|
+
durationMs: number;
|
|
141
|
+
};
|
|
142
|
+
export interface ConversationalSession {
|
|
143
|
+
/** Send audio chunk from user */
|
|
144
|
+
sendAudio(chunk: Uint8Array): void;
|
|
145
|
+
/** Send text input (bypass STT) */
|
|
146
|
+
sendText(text: string): void;
|
|
147
|
+
/** Interrupt the agent's current speech */
|
|
148
|
+
interrupt(): void;
|
|
149
|
+
/** End the session */
|
|
150
|
+
close(): Promise<ConversationalSessionSummary>;
|
|
151
|
+
/** Event stream */
|
|
152
|
+
events: AsyncIterable<ConversationalEvent>;
|
|
153
|
+
}
|
|
154
|
+
export interface ConversationalSessionSummary {
|
|
155
|
+
sessionId: string;
|
|
156
|
+
durationMs: number;
|
|
157
|
+
turns: {
|
|
158
|
+
role: 'user' | 'agent';
|
|
159
|
+
text: string;
|
|
160
|
+
startMs: number;
|
|
161
|
+
endMs: number;
|
|
162
|
+
}[];
|
|
163
|
+
transcript: string;
|
|
27
164
|
}
|
|
28
|
-
export interface
|
|
165
|
+
export interface ConversationalProvider {
|
|
166
|
+
startSession(config: ConversationalSessionConfig): Promise<ConversationalSession>;
|
|
29
167
|
listVoices(): Promise<Voice[]>;
|
|
30
|
-
synthesize(input: VoiceSynthesisInput): Promise<VoiceSynthesisResult>;
|
|
31
168
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { OwnerShipMeta } from '@contractspec/lib.contracts-spec/ownership';
|
|
2
2
|
import type { CapabilityRef, CapabilityRequirement } from '@contractspec/lib.contracts-spec/capabilities';
|
|
3
3
|
import { SpecContractRegistry } from '@contractspec/lib.contracts-spec/registry';
|
|
4
|
-
export type IntegrationCategory = 'payments' | 'email' | 'calendar' | 'sms' | 'ai-llm' | 'ai-voice' | '
|
|
4
|
+
export type IntegrationCategory = 'payments' | 'email' | 'calendar' | 'sms' | 'ai-llm' | 'ai-voice-tts' | 'ai-voice-stt' | 'ai-voice-conversational' | 'ai-image' | 'analytics' | 'vector-db' | 'storage' | 'accounting' | 'crm' | 'helpdesk' | 'project-management' | 'open-banking' | 'meeting-recorder' | 'database' | 'custom';
|
|
5
5
|
export type IntegrationOwnershipMode = 'managed' | 'byok';
|
|
6
6
|
export interface IntegrationMeta extends OwnerShipMeta {
|
|
7
7
|
category: IntegrationCategory;
|