feat: add Tuner Integration to Dograh (#311)

* Add tuner integration

* bump pipecat version

* chore: update pipecat submodule to match upstream and use tuner-pipecat-sdk 0.2.0

Update pipecat submodule from 0.0.109.dev23 to 13e98d0d9 (the exact commit
upstream dograh-hq/dograh uses after v1.30.1). This installs pipecat-ai as
1.1.0.post277 via setuptools_scm, satisfying tuner-pipecat-sdk 0.2.0's
pipecat-ai>=1.0.0 requirement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* wire tuner

* feat: refactor integrations into self contained packages

* chore: simplify ensure_public_access_token

* fix: remove NodeSpec and make DTOs the source of truth

* feat: send relevant signal to mcp using to_mcp_dict

* fix: fix tests

* cleanup: remove nango integrations

* feat: add agents.md for integrations

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
This commit is contained in:
Mohamed-Mamdouh 2026-05-20 10:07:33 +01:00 committed by GitHub
parent afa78fe859
commit 5f28c1b2a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
93 changed files with 3388 additions and 3414 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -136,28 +136,6 @@ export type AriConfigurationResponse = {
from_numbers: Array<string>;
};
/**
* AccessTokenResponse
*/
export type AccessTokenResponse = {
/**
* Access Token
*/
access_token: string | null;
/**
* Refresh Token
*/
refresh_token: string | null;
/**
* Expires At
*/
expires_at: string | null;
/**
* Connection Id
*/
connection_id: string;
};
/**
* AmbientNoiseUploadRequest
*/
@ -1965,50 +1943,6 @@ export type InitiateCallRequest = {
from_phone_number_id?: number | null;
};
/**
* IntegrationResponse
*/
export type IntegrationResponse = {
/**
* Id
*/
id: number;
/**
* Integration Id
*/
integration_id: string;
/**
* Organization Id
*/
organization_id: number;
/**
* Created By
*/
created_by: number | null;
/**
* Provider
*/
provider: string;
/**
* Is Active
*/
is_active: boolean;
/**
* Created At
*/
created_at: string;
/**
* Action
*/
action: string;
/**
* Provider Data
*/
provider_data: {
[key: string]: unknown;
};
};
/**
* ItemKind
*/
@ -3090,20 +3024,6 @@ export type ServiceKeyResponse = {
created_by?: string | null;
};
/**
* SessionResponse
*/
export type SessionResponse = {
/**
* Session Token
*/
session_token: string;
/**
* Expires At
*/
expires_at: string;
};
/**
* SignupRequest
*/
@ -3895,18 +3815,6 @@ export type UpdateCredentialRequest = {
} | null;
};
/**
* UpdateIntegrationRequest
*/
export type UpdateIntegrationRequest = {
/**
* Selected Files
*/
selected_files: Array<{
[key: string]: unknown;
}>;
};
/**
* UpdateToolRequest
*
@ -7840,174 +7748,6 @@ export type UnarchiveToolApiV1ToolsToolUuidUnarchivePostResponses = {
export type UnarchiveToolApiV1ToolsToolUuidUnarchivePostResponse = UnarchiveToolApiV1ToolsToolUuidUnarchivePostResponses[keyof UnarchiveToolApiV1ToolsToolUuidUnarchivePostResponses];
export type GetIntegrationsApiV1IntegrationGetData = {
body?: never;
headers?: {
/**
* Authorization
*/
authorization?: string | null;
/**
* X-Api-Key
*/
'X-API-Key'?: string | null;
};
path?: never;
query?: never;
url: '/api/v1/integration/';
};
export type GetIntegrationsApiV1IntegrationGetErrors = {
/**
* Not found
*/
404: unknown;
/**
* Validation Error
*/
422: HttpValidationError;
};
export type GetIntegrationsApiV1IntegrationGetError = GetIntegrationsApiV1IntegrationGetErrors[keyof GetIntegrationsApiV1IntegrationGetErrors];
export type GetIntegrationsApiV1IntegrationGetResponses = {
/**
* Response Get Integrations Api V1 Integration Get
*
* Successful Response
*/
200: Array<IntegrationResponse>;
};
export type GetIntegrationsApiV1IntegrationGetResponse = GetIntegrationsApiV1IntegrationGetResponses[keyof GetIntegrationsApiV1IntegrationGetResponses];
export type CreateSessionApiV1IntegrationSessionPostData = {
body?: never;
headers?: {
/**
* Authorization
*/
authorization?: string | null;
/**
* X-Api-Key
*/
'X-API-Key'?: string | null;
};
path?: never;
query?: never;
url: '/api/v1/integration/session';
};
export type CreateSessionApiV1IntegrationSessionPostErrors = {
/**
* Not found
*/
404: unknown;
/**
* Validation Error
*/
422: HttpValidationError;
};
export type CreateSessionApiV1IntegrationSessionPostError = CreateSessionApiV1IntegrationSessionPostErrors[keyof CreateSessionApiV1IntegrationSessionPostErrors];
export type CreateSessionApiV1IntegrationSessionPostResponses = {
/**
* Successful Response
*/
200: SessionResponse;
};
export type CreateSessionApiV1IntegrationSessionPostResponse = CreateSessionApiV1IntegrationSessionPostResponses[keyof CreateSessionApiV1IntegrationSessionPostResponses];
export type UpdateIntegrationApiV1IntegrationIntegrationIdPutData = {
body: UpdateIntegrationRequest;
headers?: {
/**
* Authorization
*/
authorization?: string | null;
/**
* X-Api-Key
*/
'X-API-Key'?: string | null;
};
path: {
/**
* Integration Id
*/
integration_id: number;
};
query?: never;
url: '/api/v1/integration/{integration_id}';
};
export type UpdateIntegrationApiV1IntegrationIntegrationIdPutErrors = {
/**
* Not found
*/
404: unknown;
/**
* Validation Error
*/
422: HttpValidationError;
};
export type UpdateIntegrationApiV1IntegrationIntegrationIdPutError = UpdateIntegrationApiV1IntegrationIntegrationIdPutErrors[keyof UpdateIntegrationApiV1IntegrationIntegrationIdPutErrors];
export type UpdateIntegrationApiV1IntegrationIntegrationIdPutResponses = {
/**
* Successful Response
*/
200: IntegrationResponse;
};
export type UpdateIntegrationApiV1IntegrationIntegrationIdPutResponse = UpdateIntegrationApiV1IntegrationIntegrationIdPutResponses[keyof UpdateIntegrationApiV1IntegrationIntegrationIdPutResponses];
export type GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetData = {
body?: never;
headers?: {
/**
* Authorization
*/
authorization?: string | null;
/**
* X-Api-Key
*/
'X-API-Key'?: string | null;
};
path: {
/**
* Integration Id
*/
integration_id: number;
};
query?: never;
url: '/api/v1/integration/{integration_id}/access-token';
};
export type GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetErrors = {
/**
* Not found
*/
404: unknown;
/**
* Validation Error
*/
422: HttpValidationError;
};
export type GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetError = GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetErrors[keyof GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetErrors];
export type GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetResponses = {
/**
* Successful Response
*/
200: AccessTokenResponse;
};
export type GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetResponse = GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetResponses[keyof GetIntegrationAccessTokenApiV1IntegrationIntegrationIdAccessTokenGetResponses];
export type GetTelephonyProvidersMetadataApiV1OrganizationsTelephonyProvidersMetadataGetData = {
body?: never;
headers?: {