Open source voice AI platform. Self-hosted alternative to Vapi and Retell. On Prem, BYOK across Speech to Speech or LLM/STT/TTS, with a visual workflow builder, MCP native and telephony support.
This report summarizes scanner evidence for dograh-hq/dograh, a Python project with 5,842 GitHub stars. SynthScan examined 354,486 lines of code across 1566 source files, recording 5253 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 19.2 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 3813 finding(s).
Are imports declared and package/API names verified? 415 finding(s).
Are wrappers, guards, and repeated structures necessary? 4453 finding(s).
Which changes need focused human review? 5253 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 5253 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/public/embed/dograh-widget.js | 993 | function handlePeerConnectionStateChange() { | CODE |
| LOW | ui/public/embed/dograh-widget.js | 1971 | function notifyNewAssistantMessages() { | CODE |
| LOW | ui/public/embed/dograh-widget.js | 2392 | function updateChatEndConfirmationState() { | CODE |
| LOW | ui/src/types/workflow-configurations.ts | 159 | export function resolveWorkflowConfigurations( | CODE |
| LOW | ui/src/context/TelephonyConfigWarningsContext.tsx | 26 | export function TelephonyConfigWarningsProvider({ children }: { children: ReactNode }) { | CODE |
| LOW | ui/src/context/TelephonyConfigWarningsContext.tsx | 72 | export function useTelephonyConfigWarnings() { | CODE |
| LOW | …/app/model-configurations/[configurationUuid]/page.tsx | 3 | export default async function EditModelConfigurationPage({ params }: { params: Promise<{ configurationUuid: string }> }) | CODE |
| LOW | ui/src/app/model-configurations/new/page.tsx | 3 | export default async function NewModelConfigurationPage({ searchParams }: { searchParams: Promise<{ duplicate?: string | | CODE |
| LOW | ui/src/app/tools/config.tsx | 37 | export function createContextDestinationRouteRow( | CODE |
| LOW | ui/src/app/tools/config.tsx | 47 | export function createContextDestinationRuleRow( | CODE |
| LOW | ui/src/app/tools/config.tsx | 70 | export function ruleRowsToContextMappingRules( | CODE |
| LOW | ui/src/app/tools/config.tsx | 266 | export function createTransferCallDefinition(config: TransferCallConfig): TransferCallToolDefinition { | CODE |
| LOW | ui/src/app/tools/config.tsx | 279 | export function createTransferAgentDefinition( | CODE |
| LOW | ui/src/app/tools/config.tsx | 300 | export function createCalculatorDefinition(): CalculatorToolDefinition { | CODE |
| LOW | …/tools/[toolUuid]/components/http-tool-test/helpers.ts | 78 | export function buildHttpToolTestSnapshot(fields: HttpToolTestSnapshotFields): string { | CODE |
| LOW | ui/src/app/telephony-configurations/page.tsx | 50 | export default function TelephonyConfigurationsPage() { | CODE |
| LOW | ui/src/app/telephony-configurations/[configId]/page.tsx | 76 | export default function TelephonyConfigurationDetailPage() { | CODE |
| LOW⚡ | …kflowId]/settings/components/CallDispositionEditor.tsx | 45 | export function createCallDispositionRows( | CODE |
| LOW⚡ | …kflowId]/settings/components/CallDispositionEditor.tsx | 54 | export function normalizeCallDispositions( | CODE |
| LOW⚡ | …kflowId]/settings/components/CallDispositionEditor.tsx | 63 | export function validateCallDispositionRows( | CODE |
| LOW | …kflowId]/settings/components/CallDispositionEditor.tsx | 242 | function CallDispositionRowsEditor({ | CODE |
| LOW | …[workflowId]/components/EditVersionMetadataPopover.tsx | 21 | export function EditVersionMetadataPopover({ workflowId, version, onUpdated }: EditVersionMetadataPopoverProps) { | CODE |
| LOW | …low/[workflowId]/components/AnswerSupervisorFields.tsx | 16 | export function readAnswerSupervisorSettings(config: AnswerSupervisorSettings): AnswerSupervisorSettings { | CODE |
| LOW | …low/[workflowId]/components/AnswerSupervisorFields.tsx | 25 | export function isVoicemailMessageMissing(config: AnswerSupervisorSettings): boolean { | CODE |
| LOW | ui/src/app/api/config/version/route.ts | 15 | function getHealthcheckFailureMessage(error: unknown, backendUrl: string) { | CODE |
| LOW | …src/app/provider-connections/[connectionUuid]/page.tsx | 3 | export default async function EditProviderConnectionPage({ params }: { params: Promise<{ connectionUuid: string }> }) { | CODE |
| LOW | ui/src/app/provider-connections/new/page.tsx | 3 | export default function NewProviderConnectionPage() { | CODE |
| LOW | ui/src/components/OrganizationPreferencesSection.tsx | 110 | export function OrganizationPreferencesSection() { | CODE |
| LOW | ui/src/components/OrganizationPreferencesSection.tsx | 212 | async function handleDispositionMappingSave( | CODE |
| LOW | ui/src/components/layout/SidebarTeamSwitcher.tsx | 37 | function SidebarTeamSwitcherContent({ user }: { user: CurrentUser }) { | CODE |
| LOW | ui/src/components/http/url-input.tsx | 24 | function extractUrlSegmentParameters(segment: string): string[] { | CODE |
| LOW | ui/src/components/http/url-input.tsx | 29 | export function extractUrlHostnameParameters(url: string): string[] { | CODE |
| LOW | ui/src/components/workflow/TemplateCard.tsx | 19 | export function DuplicateWorkflowTemplate({ id, title, description, serverAccessToken }: DuplicateWorkflowTemplateProps) | CODE |
| LOW | ui/src/components/workflow/conversation/utils.ts | 17 | export function countConversationMessages(items: ConversationItem[]) { | CODE |
| LOW | …workflow/conversation/adapters/fromRealtimeFeedback.ts | 109 | export function conversationItemsFromLiveFeedback(messages: RealtimeFeedbackMessage[]) { | CODE |
| LOW | …workflow/conversation/adapters/fromRealtimeFeedback.ts | 136 | export function conversationItemsFromRealtimeFeedbackEvents( | CODE |
| LOW | …ts/workflow/conversation/adapters/fromTextChatTurns.ts | 32 | function conversationItemsFromTextChatEvents( | CODE |
| LOW | …ts/workflow/conversation/adapters/fromTextChatTurns.ts | 147 | export function conversationItemsFromTextChatTurns(turns: TextChatTurnLike[]) { | CODE |
| LOW | …nents/model-connections/ModelConfigurationsManager.tsx | 31 | export default function ModelConfigurationsManager({ docsUrl }: { docsUrl?: string }) { | CODE |
| LOW | …nents/model-connections/WorkflowModelConfiguration.tsx | 13 | export function WorkflowModelConfiguration({ workflowConfigurations, workflowName, onSave }: { | CODE |
| LOW | …nents/model-connections/ProviderConnectionsManager.tsx | 22 | export default function ProviderConnectionsManager({ docsUrl }: { docsUrl?: string }) { | CODE |
| LOW | ui/src/components/flow/nodes/GenericNode.tsx | 107 | function resolveIntegrationEnabled( | CODE |
| LOW | ui/src/components/flow/nodes/GenericNode.tsx | 119 | function resolveIntegrationSummary( | CODE |
| LOW | ui/src/lib/filterAttributes.ts | 167 | export function withDispositionCodeOptions( | CODE |
| LOW | ui/src/lib/metaPixel.ts | 36 | export function trackMetaCompleteRegistration(params?: MetaEventParams): void { | CODE |
| LOW | ui/src/lib/metaPixel.ts | 44 | export function trackMetaInitiateCheckout(params?: MetaEventParams): void { | CODE |
| LOW | sdk/python/src/dograh_sdk/codegen.py | 143 | def _render_nested_row_dataclass( | STRING |
| LOW | api/conftest.py | 267 | def reopen_nested_transaction(session_sync, transaction: SessionTransaction): | CODE |
| LOW | api/app.py | 123 | async def handle_mps_unavailable_error( | CODE |
| LOW | api/app.py | 166 | def _add_public_embed_cors_middleware() -> None: | CODE |
| LOW | api/tasks/webhook_delivery.py | 56 | def _normalize_webhook_field_name(key: Any) -> str: | CODE |
| LOW | api/tasks/webhook_delivery.py | 214 | async def _handle_transient_failure( | CODE |
| LOW | api/tasks/workflow_completion.py | 13 | async def process_workflow_completion( | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 28 | async def sweep_inactive_text_chat_sessions(_ctx) -> None: | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 89 | async def _enqueue_inactive_text_chat_completion( | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 107 | async def complete_inactive_text_chat_session( | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 146 | def _text_chat_inactivity_timeout_seconds( | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 172 | def _text_chat_inactivity_deadline( | CODE |
| LOW | api/tasks/run_integrations.py | 133 | async def _update_usage_info_with_qa_tokens( | CODE |
| LOW | api/tasks/run_integrations.py | 174 | async def run_integrations_post_workflow_run(_ctx, workflow_run_id: int): | CODE |
| 3348 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ui/src/components/flow/renderer/PropertyInput.tsx | 131 | // ─── Layout helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/renderer/PropertyInput.tsx | 147 | // ─── Widgets ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 27 | // ─── Static per-spec UI maps ────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 72 | // ─── Helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 179 | // ─── Canvas preview dispatch ────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 473 | // ─── GenericNode ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 500 | // ── Form state ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 521 | // ── Trigger auto-UUID + canvas copy state ────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 544 | // ── Stale tool/document cleanup (was duplicated in Start/Agent) ───── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 572 | // ── Dirty / save / open handlers ──────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/flow/nodes/GenericNode.tsx | 608 | // ── Render ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/hostinger/docker-compose.yaml | 2 | # ================================================================= | COMMENT |
| MEDIUM | deploy/hostinger/docker-compose.yaml | 26 | # ================================================================= | COMMENT |
| MEDIUM | deploy/hostinger/docker-compose.traefik.yaml | 2 | # ================================================================= | COMMENT |
| MEDIUM | deploy/hostinger/docker-compose.traefik.yaml | 18 | # ================================================================= | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 11 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 13 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 31 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 47 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 101 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 104 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 126 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 130 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 176 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 178 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 264 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 266 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 322 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 329 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 355 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 361 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 387 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 389 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 443 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 445 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 508 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 510 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 528 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 553 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 603 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | deploy/helm/dograh/values.yaml | 612 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/client.py | 84 | # ── spec discovery overrides (generated methods + caching) ──────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/client.py | 106 | # ── ergonomic workflow wrappers ─────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/client.py | 131 | # ── low-level ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/workflow.py | 71 | # ── node construction ────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/workflow.py | 122 | # ── edge construction ────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/workflow.py | 163 | # ── serialization ────────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/codegen.py | 28 | # ── property type → Python type annotation ──────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/codegen.py | 125 | # ── source rendering ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/python/src/dograh_sdk/codegen.py | 262 | # ── public entry points ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/typescript/src/client.ts | 86 | // ── spec discovery overrides (generated methods + caching) ──────── | COMMENT |
| MEDIUM | sdk/typescript/src/client.ts | 112 | // ── ergonomic workflow wrappers ─────────────────────────────────── | COMMENT |
| MEDIUM | sdk/typescript/src/client.ts | 138 | // ── low-level (overrides `_GeneratedClient.request`) ────────────── | COMMENT |
| MEDIUM | sdk/codegen/client_codegen.py | 169 | # ── Python emitter ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | sdk/codegen/client_codegen.py | 245 | # ── TypeScript emitter ───────────────────────────────────────────────── | STRING |
| MEDIUM | sdk/codegen/client_codegen.py | 332 | # ── CLI ──────────────────────────────────────────────────────────────── | STRING |
| MEDIUM | scripts/generate_sdk.sh | 42 | # ── 1. Node-spec typed dataclasses ──────────────────────────────────── | COMMENT |
| MEDIUM | scripts/generate_sdk.sh | 57 | # ── 2. SDK-scoped OpenAPI spec ──────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/generate_sdk.sh | 79 | # ── 3. Request/response models (off-the-shelf) ──────────────────────── | COMMENT |
| MEDIUM | scripts/generate_sdk.sh | 105 | # ── 4. Client method mixins ────────────────────────────────────────── | COMMENT |
| 329 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/benchmark.py | 66 | except Exception as e: | CODE |
| MEDIUM | evals/stt/benchmark.py | 67 | print(f"Error with {provider.name}: {e}") | CODE |
| MEDIUM | evals/stt/benchmark.py | 207 | print(f"Error: Audio file not found: {audio_path}") | STRING |
| LOW | evals/stt/benchmark.py | 232 | except Exception as e: | STRING |
| MEDIUM | evals/stt/event_capture.py | 239 | print(f"Error: Audio file not found: {audio_path}") | STRING |
| LOW | evals/stt/event_capture.py | 281 | except Exception as e: | STRING |
| LOW | evals/stt/providers/local_smart_turn_provider.py | 83 | except Exception: | CODE |
| LOW | evals/stt/providers/local_smart_turn_provider.py | 88 | except Exception: | CODE |
| LOW | evals/stt/providers/deepgram_provider.py | 189 | except Exception as e: | CODE |
| LOW | scripts/fix_broken_langfuse_trace_urls.py | 72 | except Exception: | CODE |
| LOW | api/constants.py | 171 | except Exception: | CODE |
| LOW | api/tasks/webhook_delivery.py | 349 | except Exception as e: | CODE |
| LOW | api/tasks/webhook_delivery.py | 377 | except Exception as e: | CODE |
| LOW | api/tasks/workflow_completion.py | 35 | except Exception as e: | CODE |
| LOW | api/tasks/workflow_completion.py | 41 | except Exception as e: | CODE |
| LOW | api/tasks/workflow_completion.py | 55 | except Exception as e: | CODE |
| LOW | api/tasks/text_chat_inactivity.py | 68 | except Exception as e: # noqa: BLE001 - retry on the next sweep | CODE |
| LOW | api/tasks/run_integrations.py | 126 | except Exception as e: | CODE |
| LOW | api/tasks/run_integrations.py | 170 | except Exception as e: | CODE |
| LOW | api/tasks/run_integrations.py | 346 | except Exception as e: | CODE |
| LOW | api/tasks/run_integrations.py | 359 | except Exception as e: | CODE |
| LOW | api/tasks/text_chat_completion.py | 16 | except Exception: | CODE |
| LOW | api/tasks/campaign_tasks.py | 72 | except Exception as e: | CODE |
| LOW | api/tasks/campaign_tasks.py | 131 | except Exception as e: | CODE |
| LOW | api/tasks/knowledge_base_processing.py | 283 | except Exception as e: | CODE |
| LOW | api/tasks/knowledge_base_processing.py | 297 | except Exception as e: | CODE |
| LOW | api/tests/test_loop_exception_routing.py | 40 | except Exception as exc: # noqa: BLE001 - the exception is the fixture | CODE |
| MEDIUM | api/tests/test_failure_classification.py | 486 | def reporting_layer(): | CODE |
| LOW⚡ | api/tests/test_failure_classification.py | 489 | except Exception as e: | CODE |
| LOW | …/tests/integrations/test_run_pipeline_text_greeting.py | 320 | except Exception: | CODE |
| LOW | api/tests/support/mcp_mock_server.py | 86 | except Exception: | CODE |
| LOW | api/utils/telephony_helper.py | 154 | except Exception: | CODE |
| LOW | api/utils/telephony_helper.py | 157 | except Exception: | CODE |
| MEDIUM | api/utils/audio_converter.py | 26 | print(f"Error: Input file '{input_path}' not found") | CODE |
| LOW | api/utils/tunnel.py | 31 | except Exception as e: | CODE |
| LOW | api/utils/tunnel.py | 93 | except Exception as e: | CODE |
| LOW | api/utils/common.py | 177 | except Exception as e: | CODE |
| LOW | api/utils/common.py | 196 | except Exception as e: | CODE |
| LOW | api/utils/template_renderer.py | 160 | except Exception: | CODE |
| LOW | api/utils/template_renderer.py | 172 | except Exception: | CODE |
| LOW | api/db/campaign_client.py | 446 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 573 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 764 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 868 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 1042 | except Exception: | CODE |
| LOW | api/db/campaign_client.py | 1074 | except Exception: | CODE |
| LOW | api/db/campaign_client.py | 1099 | except Exception: | CODE |
| LOW | api/db/campaign_client.py | 1111 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 1132 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 1162 | except Exception: | CODE |
| LOW | api/db/campaign_client.py | 1300 | except Exception as e: | CODE |
| LOW | api/db/campaign_client.py | 1430 | except Exception as e: | CODE |
| LOW | api/db/organization_usage_client.py | 358 | except Exception: | CODE |
| LOW | api/db/workflow_run_text_session_client.py | 58 | except Exception as e: | CODE |
| LOW | api/db/workflow_run_text_session_client.py | 208 | except Exception as e: | CODE |
| LOW | api/db/workflow_run_text_session_client.py | 281 | except Exception: | CODE |
| LOW | api/db/workflow_template_client.py | 49 | except Exception as e: | CODE |
| LOW | api/db/workflow_template_client.py | 79 | except Exception as e: | CODE |
| LOW | api/db/workflow_template_client.py | 97 | except Exception as e: | CODE |
| LOW | api/db/integration_client.py | 44 | except Exception as e: | CODE |
| 446 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/event_capture.py | 16 | CODE | |
| LOW | evals/stt/providers/local_smart_turn_provider.py | 7 | CODE | |
| LOW | evals/stt/providers/__init__.py | 1 | CODE | |
| LOW | evals/stt/providers/__init__.py | 1 | CODE | |
| LOW | evals/stt/providers/__init__.py | 1 | CODE | |
| LOW | evals/stt/providers/__init__.py | 1 | CODE | |
| LOW | evals/stt/providers/__init__.py | 2 | CODE | |
| LOW | evals/stt/providers/__init__.py | 3 | CODE | |
| LOW | evals/stt/providers/__init__.py | 4 | CODE | |
| LOW | evals/stt/providers/__init__.py | 5 | CODE | |
| LOW | …skills/review-agents-md/scripts/inventory_agents_md.py | 12 | CODE | |
| LOW | sdk/python/src/dograh_sdk/_generated_models.py | 5 | CODE | |
| LOW | sdk/python/src/dograh_sdk/_generated_client.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/client.py | 13 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 21 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 22 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 22 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 22 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 22 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 23 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 24 | CODE | |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 24 | CODE | |
| LOW | sdk/python/src/dograh_sdk/_validation.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/workflow.py | 13 | CODE | |
| LOW | sdk/python/src/dograh_sdk/workflow.py | 15 | CODE | |
| LOW | sdk/python/src/dograh_sdk/workflow.py | 23 | CODE | |
| LOW | sdk/python/src/dograh_sdk/codegen.py | 18 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/_base.py | 14 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/agent_node.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/agent_node.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/paygent.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/paygent.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/paygent.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/paygent.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/paygent.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/global_node.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/global_node.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/global_node.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/global_node.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/global_node.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/end_call.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/end_call.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/webhook.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 7 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 9 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 12 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 13 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 14 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 15 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 16 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 17 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/start_call.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/start_call.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/tuner.py | 8 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/tuner.py | 10 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/tuner.py | 11 | CODE | |
| LOW | sdk/python/src/dograh_sdk/typed/tuner.py | 11 | CODE | |
| 313 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | evals/stt/providers/speechmatics_provider.py | 193 | except asyncio.TimeoutError: | CODE |
| HIGH | evals/stt/providers/speechmatics_provider.py | 199 | except asyncio.CancelledError: | CODE |
| HIGH | evals/stt/providers/deepgram_flux_provider.py | 192 | except asyncio.TimeoutError: | CODE |
| HIGH | evals/stt/providers/deepgram_provider.py | 187 | except asyncio.TimeoutError: | CODE |
| HIGH | api/conftest.py | 48 | except ValueError: | CODE |
| HIGH | api/logging_config.py | 91 | except ValueError: | CODE |
| HIGH | api/tasks/webhook_delivery.py | 81 | except ValueError: | CODE |
| HIGH | api/tests/test_pipeline_cancellation.py | 103 | except asyncio.TimeoutError: | CODE |
| HIGH | api/tests/test_tts_endframe_with_audio_write_failure.py | 266 | except asyncio.TimeoutError: | CODE |
| HIGH | api/tests/test_tts_endframe_with_audio_write_failure.py | 383 | except asyncio.TimeoutError: | CODE |
| HIGH | …/tests/integrations/test_run_pipeline_text_greeting.py | 320 | except Exception: | CODE |
| HIGH | api/utils/url_security.py | 44 | except ValueError: | CODE |
| HIGH | api/errors/failure.py | 490 | except Exception: | CODE |
| HIGH | api/errors/failure.py | 525 | except Exception: | CODE |
| HIGH | api/errors/failure.py | 553 | except Exception: | CODE |
| HIGH | api/errors/failure.py | 580 | except Exception: | CODE |
| HIGH | api/routes/telephony.py | 804 | except RuntimeError: | CODE |
| HIGH | api/routes/agent_stream.py | 133 | except RuntimeError: | CODE |
| HIGH | api/routes/agent_stream.py | 141 | except RuntimeError: | CODE |
| HIGH | api/routes/organization.py | 1536 | except Exception: | CODE |
| HIGH | api/routes/organization.py | 1551 | except Exception: | CODE |
| HIGH | api/routes/organization.py | 1592 | except Exception: | CODE |
| HIGH | api/routes/campaign.py | 58 | except Exception: | CODE |
| HIGH | api/routes/campaign.py | 79 | except Exception: | CODE |
| HIGH | api/routes/campaign.py | 557 | except Exception: | CODE |
| HIGH | api/routes/webrtc_signaling.py | 174 | except (ValueError, IndexError): | CODE |
| HIGH | api/services/workflow_run_artifacts.py | 181 | except OSError: | CODE |
| HIGH | api/services/worker_sync/manager.py | 60 | except asyncio.CancelledError: | CODE |
| HIGH | api/services/gender/gender_service.py | 185 | except Exception as e: | CODE |
| HIGH | api/services/filesystem/local.py | 88 | except Exception: | CODE |
| HIGH | api/services/observability/loop_lag.py | 62 | except asyncio.CancelledError: | CODE |
| HIGH | api/services/integrations/noveum/completion.py | 72 | except OSError: | CODE |
| HIGH | api/services/telephony/failure_reporting.py | 84 | except Exception: | CODE |
| HIGH | api/services/telephony/ari_manager.py | 1793 | except asyncio.CancelledError: | CODE |
| HIGH | api/services/telephony/ari_manager.py | 283 | except asyncio.CancelledError: | CODE |
| HIGH | api/services/telephony/ari_manager.py | 1053 | except Exception: | CODE |
| HIGH | api/services/telephony/call_transfer_manager.py | 279 | except Exception: | CODE |
| HIGH | api/services/telephony/providers/telnyx/strategies.py | 185 | except Exception: | CODE |
| HIGH | api/services/telephony/providers/exotel/provider.py | 131 | except Exception: | CODE |
| HIGH | api/services/pipecat/fallback_llm.py | 502 | except TimeoutError: | CODE |
| HIGH | api/services/pipecat/turn_context.py | 44 | except RuntimeError: | CODE |
| HIGH | api/services/pipecat/turn_context.py | 59 | except RuntimeError: | CODE |
| HIGH | api/services/pipecat/event_handlers.py | 464 | except Exception: | CODE |
| HIGH | api/services/pipecat/minimax_tts.py | 66 | except (ValueError, TypeError, KeyError): | CODE |
| HIGH | api/services/pipecat/recording_audio_cache.py | 258 | except OSError: | CODE |
| HIGH | api/services/pipecat/audio_file_cache.py | 153 | except OSError: | CODE |
| HIGH | api/services/pipecat/audio_playback.py | 211 | except asyncio.TimeoutError: | CODE |
| HIGH | api/services/workflow/mcp_tool_session.py | 201 | except Exception: | CODE |
| HIGH | api/services/workflow/answer_classification_service.py | 137 | except (ValueError, TypeError): | CODE |
| HIGH | api/services/workflow/qa/tracing.py | 29 | except Exception: | CODE |
| HIGH | api/services/reports/daily_report.py | 127 | except (ValueError, TypeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/providers/speechmatics_provider.py | 44 | CODE | |
| LOW | evals/stt/providers/speechmatics_provider.py | 204 | CODE | |
| LOW | evals/stt/providers/speechmatics_provider.py | 152 | CODE | |
| LOW | evals/stt/providers/deepgram_flux_provider.py | 53 | CODE | |
| LOW | evals/stt/providers/deepgram_flux_provider.py | 141 | CODE | |
| LOW | evals/stt/providers/local_smart_turn_provider.py | 68 | CODE | |
| LOW | evals/stt/providers/deepgram_provider.py | 48 | CODE | |
| LOW | evals/stt/providers/deepgram_provider.py | 142 | CODE | |
| LOW | sdk/codegen/client_codegen.py | 96 | CODE | |
| LOW | api/tasks/run_integrations.py | 133 | CODE | |
| LOW | api/tasks/run_integrations.py | 174 | CODE | |
| LOW | api/tests/test_workflow_text_chat.py | 2581 | CODE | |
| LOW | api/tests/test_workflow_text_chat.py | 2721 | CODE | |
| LOW | api/tests/test_user_muting_during_bot_speech.py | 82 | CODE | |
| LOW | api/tests/test_realtime_tool_deferral.py | 77 | CODE | |
| LOW | api/tests/test_openai_live_wrapper.py | 266 | CODE | |
| LOW | api/tests/test_openai_live_wrapper.py | 281 | CODE | |
| LOW | api/tests/test_tts_cache.py | 296 | CODE | |
| LOW | api/tests/test_tts_cache.py | 301 | CODE | |
| LOW | api/tests/test_fallback_llm_processor.py | 74 | CODE | |
| LOW | api/tests/test_campaign_stale_dispatch_recovery.py | 101 | CODE | |
| LOW | api/tests/test_dograh_sdk_typed.py | 58 | CODE | |
| LOW | api/tests/test_pipecat_engine_end_call.py | 1257 | CODE | |
| LOW | api/tests/test_realtime_conversation_contract.py | 43 | CODE | |
| LOW | api/tests/test_tts_endframe_with_audio_write_failure.py | 167 | CODE | |
| LOW | api/tests/test_tts_endframe_with_audio_write_failure.py | 284 | CODE | |
| LOW | api/tests/test_db_layer_boundary.py | 40 | CODE | |
| LOW | api/tests/integrations/test_call_events.py | 27 | CODE | |
| LOW | …/tests/integrations/test_run_pipeline_text_greeting.py | 151 | CODE | |
| LOW | api/utils/credential_auth.py | 15 | CODE | |
| LOW | api/utils/credential_auth.py | 57 | CODE | |
| LOW | api/utils/common.py | 134 | CODE | |
| LOW | api/utils/telephony_address.py | 73 | CODE | |
| LOW | api/db/filters.py | 61 | CODE | |
| LOW | api/alembic/env.py | 64 | CODE | |
| LOW | …/b41f7c9d2e05_migrate_gemini_2_5_flash_to_3_5_flash.py | 76 | CODE | |
| LOW | …bic/versions/b3c1d9e4f7a2_backfill_model_catalog_v3.py | 313 | CODE | |
| LOW | …f3a1c47b9e02_migrate_pre_call_fetch_enabled_to_mode.py | 94 | CODE | |
| LOW | api/errors/failure.py | 532 | CODE | |
| LOW | api/routes/superuser.py | 66 | CODE | |
| LOW | api/routes/telephony.py | 634 | CODE | |
| LOW | api/routes/telephony.py | 1202 | CODE | |
| LOW | api/routes/public_download.py | 24 | CODE | |
| LOW | api/routes/credentials.py | 51 | CODE | |
| LOW | api/routes/organization.py | 491 | CODE | |
| LOW | api/routes/organization.py | 1517 | CODE | |
| LOW | api/routes/campaign.py | 463 | CODE | |
| LOW | api/routes/webrtc_signaling.py | 416 | CODE | |
| LOW | api/routes/webrtc_signaling.py | 515 | CODE | |
| LOW | api/routes/workflow.py | 1165 | CODE | |
| LOW | api/routes/workflow_text_chat.py | 425 | CODE | |
| LOW | api/routes/workflow_text_chat.py | 441 | CODE | |
| LOW | api/routes/public_embed.py | 229 | CODE | |
| LOW | api/routes/public_embed.py | 258 | CODE | |
| LOW | api/mcp_server/tools/docs_search.py | 405 | CODE | |
| LOW | api/mcp_server/tools/docs_search.py | 474 | CODE | |
| LOW | api/mcp_server/tools/docs_search.py | 496 | CODE | |
| LOW | api/services/quota_service.py | 626 | CODE | |
| LOW | api/services/configuration/registry.py | 354 | CODE | |
| LOW | api/services/configuration/registry.py | 357 | CODE | |
| 78 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/rolling_update.sh | 301 | # Create a new timestamped log dir for this deploy | COMMENT |
| MEDIUM | api/conftest.py | 336 | # Create a custom user | STRING |
| MEDIUM | api/conftest.py | 339 | # Create a test client for this user | STRING |
| MEDIUM | api/tests/test_pipecat_engine_variable_extraction.py | 140 | # Create the pipeline | COMMENT |
| MEDIUM | api/tests/test_mcp_tool_route.py | 273 | # Create a user and an organization, then link them so the route's | COMMENT |
| MEDIUM | api/tests/test_custom_tools.py | 1683 | # Create a mock engine | COMMENT |
| MEDIUM | api/tests/test_custom_tools.py | 1757 | # Create a mock engine with a mock LLM | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 225 | # Create the pipeline with transport input -> user aggregator -> LLM -> TTS -> transport output -> assistant aggrega | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 611 | # Create a simple text response | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 700 | # Create a simple text response | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 891 | # Create a simple text response | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 901 | # Create a custom extraction mock that signals when called | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 974 | # Create a simple text response | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_end_call.py | 980 | # Create a workflow where start node has NO extraction | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_context_update.py | 108 | # Create the pipeline | COMMENT |
| MEDIUM⚡ | api/tests/test_workflow_versioning.py | 758 | # Create a draft | COMMENT |
| MEDIUM⚡ | api/tests/test_workflow_versioning.py | 888 | # Create a draft (unpublished) | COMMENT |
| MEDIUM⚡ | api/tests/test_workflow_versioning.py | 897 | # Create a run (simulating campaign dispatch) | COMMENT |
| MEDIUM | api/tests/test_workflow_versioning.py | 920 | # Create a test run | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_tool_calls.py | 98 | # Create the pipeline with the mock LLM and TTS | COMMENT |
| MEDIUM | api/tests/test_pipecat_engine_tool_calls.py | 109 | # Create a real pipeline task | COMMENT |
| MEDIUM | api/tests/test_tts_endframe_with_audio_write_failure.py | 143 | # Create the pipeline | COMMENT |
| MEDIUM | …ts/test_pipecat_engine_node_switch_with_user_speech.py | 194 | # Create the pipeline: | COMMENT |
| MEDIUM | api/db/organization_client.py | 94 | # Create a default API key for the new organization | COMMENT |
| MEDIUM | api/db/workflow_client.py | 149 | # Create the first definition as V1 published | COMMENT |
| MEDIUM | …/b79f19f68157_add_call_type_column_to_workflow_runs.py | 23 | # Create the workflow_call_type enum | COMMENT |
| MEDIUM | …sions/49a8fe6841e6_add_state_field_to_workflow_runs.py | 21 | # Create the workflow_run_state enum type | COMMENT |
| MEDIUM | api/routes/webrtc_signaling.py | 932 | # Create a minimal user object for compatibility with signaling manager | COMMENT |
| MEDIUM | api/routes/workflow.py | 596 | # Create the workflow in our database | COMMENT |
| MEDIUM | api/routes/workflow.py | 1657 | # Create a new workflow from the template | COMMENT |
| MEDIUM | api/mcp_server/instructions.py | 39 | ### Creating a reusable tool and using it in workflow | COMMENT |
| MEDIUM | api/mcp_server/instructions.py | 57 | ### Creating a new workflow | COMMENT |
| MEDIUM | api/services/mps_service_key_client.py | 1006 | # Create a singleton instance | COMMENT |
| MEDIUM | api/services/storage.py | 86 | # Create a single storage instance at module load time. | COMMENT |
| MEDIUM | api/services/filesystem/local.py | 70 | # Create a temporary directory for symlinks | COMMENT |
| MEDIUM | api/services/workflow/workflow_graph.py | 252 | # Create the edge with properties from dto | COMMENT |
| MEDIUM | api/services/workflow/qa/tracing.py | 112 | # Create a root span (new trace) for this node summary generation | COMMENT |
| MEDIUM | api/services/workflow/qa/node_summary.py | 164 | # Create a Langfuse trace for this summary generation | COMMENT |
| MEDIUM | api/services/campaign/campaign_orchestrator.py | 527 | # Create a shutdown event for clean coordination | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sdk/python/src/dograh_sdk/typed/agent_node.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/paygent.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/global_node.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/end_call.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/webhook.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/start_call.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/tuner.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/noveum.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/qa.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/trigger.py | 0 | generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/agent_node.py | 0 | when true and a global node exists, prepends the global prompt to this node's prompt at runtime. | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/end_call.py | 0 | when true and a global node exists, prepends the global prompt to this node's prompt at runtime. | STRING |
| HIGH | sdk/python/src/dograh_sdk/typed/start_call.py | 0 | when true and a global node exists, prepends the global prompt to this node's prompt at runtime. | STRING |
| HIGH | api/services/telephony/providers/telnyx/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| HIGH | api/services/telephony/providers/vonage/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| HIGH | api/services/telephony/providers/plivo/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| HIGH | api/services/telephony/providers/cloudonix/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| HIGH | api/services/telephony/providers/vobiz/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| HIGH | api/services/telephony/providers/twilio/routes.py | 0 | twilio telephony routes (webhooks, status callbacks, answer urls). mounted under ``/api/v1/telephony`` by ``api.routes.t | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | api/utils/template_renderer.py | 22 | Get a nested value from a dictionary using dot notation. Args: obj: The object to traverse (dict or an | STRING |
| HIGH | api/db/workflow_client.py | 751 | Update an existing workflow in the database. Name changes are applied directly to the workflow. | STRING |
| HIGH | api/db/workflow_client.py | 860 | Update the status of a workflow. Args: workflow_id: The ID of the workflow to update | STRING |
| HIGH | api/routes/public_download.py | 31 | Download a workflow recording or transcript via public access token. This endpoint: 1. Validates the public acc | STRING |
| HIGH | api/routes/s3_signed_url.py | 96 | Validate the S3 key format and extract workflow_run_id if present. Args: key: S3 object key allow_s | STRING |
| HIGH | api/routes/s3_signed_url.py | 131 | Authorize access to workflow run and retrieve it. Args: run_id: Workflow run ID (can be None for special pa | STRING |
| HIGH | api/routes/workflow.py | 558 | Create a new workflow from a natural language template request. This endpoint: 1. Uses mps_service_key_cli | STRING |
| HIGH | api/routes/workflow.py | 1170 | Update an existing workflow. Args: workflow_id: The ID of the workflow to update request: The | STRING |
| HIGH | api/routes/turn_credentials.py | 59 | Generate time-limited TURN credentials using HMAC-SHA1. Args: user_id: Unique identifier for the user (for | STRING |
| HIGH | api/services/mps_service_key_client.py | 307 | Check the usage and quota of a service key. Args: service_key: The service key to check us | STRING |
| HIGH | api/services/mps_service_key_client.py | 719 | Transcribe an audio file via MPS STT API. Args: audio_data: Raw audio bytes fi | STRING |
| HIGH | api/services/mps_service_key_client.py | 830 | Get available voices for a TTS provider from MPS. Args: provider: TTS provider name (eleve | STRING |
| HIGH | api/services/mps_service_key_client.py | 963 | Call the MPS workflow creation API using secret key authentication. For OSS mode: Pass created_by in h | STRING |
| HIGH | api/services/telephony/base.py | 528 | Initiate a call transfer to a destination number. Args: destination: The destination phone | STRING |
| HIGH | api/services/telephony/providers/twilio/provider.py | 621 | Initiate a call transfer via Twilio. Uses inline TwiML to put the destination into a conference when t | STRING |
| HIGH | api/services/workflow/duplicate.py | 47 | Duplicate a workflow including its definition, config, and triggers. Recordings are org-scoped and shared, so they | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 273 | // Step 1: Get presigned URLs for all files | COMMENT |
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 291 | // Step 2: Upload all files to storage in parallel | COMMENT |
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 308 | // Step 3: Create all recording records | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 447 | // Step 1: Finalize the last bot message (user started speaking) | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 456 | // Step 2: Remove any previous interim transcription | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 461 | // Step 3: Add new transcription (interim or final) | COMMENT |
| LOW | ui/src/app/files/DocumentUpload.tsx | 165 | // Step 2: File selected — show retrieval mode choice | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 43 | // Step 1: Request presigned upload URL | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 59 | // Step 2: Upload file directly to S3/MinIO | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 75 | // Step 3: Notify parent with file_key | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 219 | # Step 2: Get workflow definition from the run's pinned version | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 227 | # Step 3: Extract integration nodes | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 233 | # Step 4: Generate a public access token for any run that needs post-call work. | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 304 | # Step 7: Execute webhooks | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 311 | # Step 8: Build render context (includes annotations from QA and integrations) | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 314 | # Step 9: Execute each webhook node | COMMENT |
| LOW | api/tasks/run_integrations.py | 188 | # Step 1: Get workflow run with full context | COMMENT |
| LOW | api/tasks/run_integrations.py | 246 | # Step 5: Run QA analysis before webhooks | COMMENT |
| LOW | api/tasks/run_integrations.py | 284 | # Step 6: Run registered third-party integrations after uploads are complete | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 221 | # Step 0: Short greeting on Start node | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 223 | # Step 1: Longer response (TTS 400ms > idle timeout 200ms) | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 228 | # Step 2: Transition from Start → Agent node | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 234 | # Step 3: Transition from Agent → End node (ends call) | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_end_call.py | 787 | # Step 0: Text response | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_end_call.py | 790 | # Step 1: call end_call tool | COMMENT |
| LOW | api/tests/test_pipecat_engine_end_call.py | 449 | # Step 0: call end_call tool | COMMENT |
| LOW | api/tests/test_pipecat_engine_end_call.py | 530 | # Step 0: call end_call tool | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 259 | # Step 0: Start node - should have start prompt | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 262 | # Step 1: Agent node - should have agent prompt | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 265 | # Step 2: End node - should have end prompt | COMMENT |
| LOW | …688d0da1123_backfill_workflow_definition_versioning.py | 30 | # Step 1: For each workflow's is_current=True definition, copy configs from | COMMENT |
| LOW⚡ | …688d0da1123_backfill_workflow_definition_versioning.py | 47 | # Step 2: Mark all pre-versioning non-current definitions as legacy. | STRING |
| LOW⚡ | …688d0da1123_backfill_workflow_definition_versioning.py | 56 | # Step 3: Set released_definition_id on workflows to their published definition. | STRING |
| LOW | api/services/gender/gender_service.py | 134 | # Step 1: Check local model | COMMENT |
| LOW | api/services/gender/gender_service.py | 152 | # Step 2: Check Redis cache for previous API responses | COMMENT |
| LOW⚡ | api/services/gender/gender_service.py | 167 | # Step 3: Fallback to GenderAPI | COMMENT |
| LOW⚡ | api/services/gender/gender_service.py | 189 | # Step 4: Return best guess from model or unknown | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 273 | // Step 1: Get presigned URLs for all files | COMMENT |
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 291 | // Step 2: Upload all files to storage in parallel | COMMENT |
| LOW | …/workflow/[workflowId]/components/RecordingsDialog.tsx | 308 | // Step 3: Create all recording records | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 447 | // Step 1: Finalize the last bot message (user started speaking) | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 456 | // Step 2: Remove any previous interim transcription | COMMENT |
| LOW⚡ | …low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx | 461 | // Step 3: Add new transcription (interim or final) | COMMENT |
| LOW | ui/src/app/files/DocumentUpload.tsx | 165 | // Step 2: File selected — show retrieval mode choice | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 43 | // Step 1: Request presigned upload URL | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 59 | // Step 2: Upload file directly to S3/MinIO | COMMENT |
| LOW | ui/src/app/campaigns/CsvUploadSelector.tsx | 75 | // Step 3: Notify parent with file_key | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 219 | # Step 2: Get workflow definition from the run's pinned version | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 227 | # Step 3: Extract integration nodes | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 233 | # Step 4: Generate a public access token for any run that needs post-call work. | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 304 | # Step 7: Execute webhooks | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 311 | # Step 8: Build render context (includes annotations from QA and integrations) | COMMENT |
| LOW⚡ | api/tasks/run_integrations.py | 314 | # Step 9: Execute each webhook node | COMMENT |
| LOW | api/tasks/run_integrations.py | 188 | # Step 1: Get workflow run with full context | COMMENT |
| LOW | api/tasks/run_integrations.py | 246 | # Step 5: Run QA analysis before webhooks | COMMENT |
| LOW | api/tasks/run_integrations.py | 284 | # Step 6: Run registered third-party integrations after uploads are complete | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 221 | # Step 0: Short greeting on Start node | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 223 | # Step 1: Longer response (TTS 400ms > idle timeout 200ms) | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 228 | # Step 2: Transition from Start → Agent node | COMMENT |
| LOW⚡ | api/tests/test_user_idle_handler.py | 234 | # Step 3: Transition from Agent → End node (ends call) | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_end_call.py | 787 | # Step 0: Text response | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_end_call.py | 790 | # Step 1: call end_call tool | COMMENT |
| LOW | api/tests/test_pipecat_engine_end_call.py | 449 | # Step 0: call end_call tool | COMMENT |
| LOW | api/tests/test_pipecat_engine_end_call.py | 530 | # Step 0: call end_call tool | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 259 | # Step 0: Start node - should have start prompt | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 262 | # Step 1: Agent node - should have agent prompt | COMMENT |
| LOW⚡ | api/tests/test_pipecat_engine_context_update.py | 265 | # Step 2: End node - should have end prompt | COMMENT |
| LOW | …688d0da1123_backfill_workflow_definition_versioning.py | 30 | # Step 1: For each workflow's is_current=True definition, copy configs from | COMMENT |
| LOW⚡ | …688d0da1123_backfill_workflow_definition_versioning.py | 47 | # Step 2: Mark all pre-versioning non-current definitions as legacy. | STRING |
| LOW⚡ | …688d0da1123_backfill_workflow_definition_versioning.py | 56 | # Step 3: Set released_definition_id on workflows to their published definition. | STRING |
| LOW | api/services/gender/gender_service.py | 134 | # Step 1: Check local model | COMMENT |
| LOW | api/services/gender/gender_service.py | 152 | # Step 2: Check Redis cache for previous API responses | COMMENT |
| LOW⚡ | api/services/gender/gender_service.py | 167 | # Step 3: Fallback to GenderAPI | COMMENT |
| LOW⚡ | api/services/gender/gender_service.py | 189 | # Step 4: Return best guess from model or unknown | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yaml | 1 | # Dograh deployment stack — driven by the helper scripts, not by a bare | COMMENT |
| LOW | docker-compose.yaml | 161 | COMMENT | |
| LOW | docker-compose.yaml | 221 | ENABLE_PROMETHEUS_METRICS: "${ENABLE_PROMETHEUS_METRICS:-false}" | COMMENT |
| LOW | …Id]/components/workflow-tester/EmbeddedVoiceTester.tsx | 61 | COMMENT | |
| LOW | ui/src/config/event-banner.config.ts | 1 | // Event announcement bar — the only file to touch when an event changes. | COMMENT |
| LOW | ui/src/config/event-banner.config.ts | 21 | // startsAt: "2026-10-20T00:00:00+05:30", | COMMENT |
| LOW | ui/src/components/EventBanner.tsx | 1 | "use client"; | COMMENT |
| LOW | ui/src/components/EventBanner.tsx | 21 | // Why sticky rather than a bar that scrolls away: the app's chrome is a fixed | COMMENT |
| LOW | ui/src/components/EventBanner.tsx | 201 | // and the lockup costs ~236px, so one of them has to go and the event's date | COMMENT |
| LOW | ui/src/components/lead-forms/onboardingServiceClient.ts | 1 | // Thin client for the SEPARATE user_onboarding service (its own base URL). | COMMENT |
| LOW | ui/src/components/lead-forms/detectCountry.ts | 1 | // Best-effort country detection for lead provenance — no permission prompt, no | COMMENT |
| LOW | ui/src/lib/utils.ts | 181 | targetWindow?.close(); | COMMENT |
| LOW | deploy/hostinger/docker-compose.yaml | 1 | # Dograh — Hostinger VPS Docker Manager deployment | COMMENT |
| LOW | deploy/hostinger/docker-compose.yaml | 161 | # Must match the MinIO root creds above (same env vars). | COMMENT |
| LOW | deploy/hostinger/docker-compose.traefik.yaml | 1 | # Standalone Traefik + Let's Encrypt — STANDS IN FOR Hostinger's managed Traefik. | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 1 | # Dograh Helm chart — default values. | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 21 | # - name: regcred | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 41 | # internalMinio — bundled MinIO manifest (see `minio` below) | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 121 | # Reject media WebSocket connections whose capability token is missing or | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 161 | langfusePublicKey: "" | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 181 | port: 8000 | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 201 | # covers a max-length call, initial delay, and 60s of shutdown headroom. | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 281 | # The entrypoint exec's the worker, so it runs as PID 1; grep its cmdline. | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 521 | requests: | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 541 | # while you saturate per-pod connection limits. Replace this with a custom | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 561 | # Call-based autoscaling via KEDA (the preferred web signal — CPU is a poor | COMMENT |
| LOW | deploy/helm/dograh/values.yaml | 601 | targetMemoryUtilizationPercentage: null | COMMENT |
| LOW | deploy/helm/dograh/examples/values-aws.yaml | 1 | # AWS EKS — uses ALB (via AWS Gateway API controller) for HTTP and NLB | COMMENT |
| LOW | sdk/typescript/src/index.ts | 61 | // Typed SDK — generated per-node interfaces + factories. Importable as | COMMENT |
| LOW | examples/typescript/fetch_workflow_and_call.ts | 1 | // Fetch a workflow by ID and place a test phone call using the TypeScript SDK. | COMMENT |
| LOW | examples/typescript/load_and_edit_workflow.ts | 1 | // Load an existing workflow, edit a node prompt, and save it as a draft. | COMMENT |
| LOW | examples/typescript/create_workflow.ts | 1 | // Create a new workflow using the TypeScript SDK. | COMMENT |
| LOW | examples/typescript/build_workflow_with_sdk.ts | 1 | // Build a multi-node voice agent using the Workflow SDK and save it as a draft. | COMMENT |
| LOW | scripts/generate_sdk.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/worktree-sync-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/worktree-sync-env.sh | 21 | # hard-code a UI origin, so they have to follow this worktree's UI port. Under | COMMENT |
| LOW | scripts/setup-worktree.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/rolling_update.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/drain_web.sh | 1 | #!/bin/sh | COMMENT |
| LOW | scripts/release_sdks.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/lib/setup_common.sh | 401 | [[ "$rendered_secret" == "$TURN_SECRET" ]] || dograh_fail "TURN_SECRET in .env does not match turnserver.conf" | COMMENT |
| LOW | api/logging_config.py | 121 | serialize=SERIALIZE_LOG_OUTPUT, # Use JSON serialization for structured logs | COMMENT |
| LOW | api/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | api/alembic.ini | 21 | # The default rendered in new alembic.ini files is "os", which uses os.pathsep | COMMENT |
| LOW | api/alembic.ini | 41 | # a source .py file to be detected as revisions in the | COMMENT |
| LOW | api/alembic.ini | 61 | # Use os.pathsep. Default configuration used for new projects. | COMMENT |
| LOW | api/alembic.ini | 81 | # detail and examples | COMMENT |
| LOW | api/constants.py | 41 | # The server's own IPv4 address, as the operator supplied it to the setup | COMMENT |
| LOW | api/constants.py | 121 | COMMENT | |
| LOW | api/app.py | 181 | COMMENT | |
| LOW | …/b41f7c9d2e05_migrate_gemini_2_5_flash_to_3_5_flash.py | 21 | # Google no longer grants new users access to the Gemini 2.5 Flash family, so | COMMENT |
| LOW | …ns/00b0201ad918_backfill_org_model_configuration_v2.py | 21 | # Organizations created before MODEL_CONFIGURATION_V2 only have per-user legacy | COMMENT |
| LOW | …ions/c4e21b7f80a9_retire_provisional_vad_turn_start.py | 21 | # `provisional_vad` gated the user turn start on a transcript, so the turn start | COMMENT |
| LOW | …f3a1c47b9e02_migrate_pre_call_fetch_enabled_to_mode.py | 21 | # The Start node's `pre_call_fetch_enabled` boolean was replaced by the | COMMENT |
| LOW | api/routes/webrtc_signaling.py | 241 | List of RTCIceServer configurations for WebRTC peer connection. | COMMENT |
| LOW | api/mcp_server/ts_validator/src/parse.ts | 1 | // TypeScript → workflow JSON. | COMMENT |
| LOW | api/services/configuration/options/google.py | 1 | # Vertex serves generative models from three shapes of endpoint, and the location | COMMENT |
| LOW | api/services/auth/stack_auth.py | 121 | # ------------------------------------------------------------------ | COMMENT |
| LOW | api/services/auth/stack_auth.py | 141 | # "Content-Type": "application/json", | COMMENT |
| LOW | api/services/auth/stack_auth.py | 161 | # raise ValueError("Access token required to update user") | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/providers/__init__.py | 7 | __all__ = [ | CODE |
| LOW | sdk/python/src/dograh_sdk/__init__.py | 26 | __all__ = [ | CODE |
| LOW | sdk/python/src/dograh_sdk/typed/__init__.py | 19 | __all__ = [ | CODE |
| LOW | api/tests/integrations/_run_pipeline_helpers.py | 246 | __all__ = [ | CODE |
| LOW | api/schemas/telephony_config.py | 182 | __all__ = [ | CODE |
| LOW | api/db/user_client.py | 125 | async def update_user_email(self, user_id: int, email: str) -> None: | CODE |
| LOW | api/routes/organization.py | 425 | def _set_nested_field(value: dict, dotted_path: str, field_value) -> None: | CODE |
| LOW | api/routes/tool.py | 50 | __all__ = [ | CODE |
| LOW | api/mcp_server/__init__.py | 3 | __all__ = ["mcp"] | CODE |
| LOW⚡ | api/services/posthog_client.py | 88 | def set_person_properties(distinct_id: str, properties: dict[str, Any]) -> None: | CODE |
| LOW | api/services/configuration/defaults.py | 34 | __all__ = [ | CODE |
| LOW | api/services/configuration/options/__init__.py | 64 | __all__ = [ | CODE |
| LOW | api/services/gen_ai/__init__.py | 15 | __all__ = [ | CODE |
| LOW | api/services/gen_ai/embedding/__init__.py | 12 | __all__ = [ | CODE |
| LOW | api/services/filesystem/__init__.py | 6 | __all__ = [ | CODE |
| LOW | api/services/observability/call_events/recorder.py | 193 | def set_turn(self, turn: int) -> None: | CODE |
| LOW | api/services/integrations/__init__.py | 22 | __all__ = [ | CODE |
| LOW⚡ | api/services/integrations/paygent/collector.py | 571 | def set_call_disposition(self, disposition: str | None) -> None: | CODE |
| LOW | api/services/integrations/paygent/__init__.py | 32 | __all__ = ["PACKAGE"] | CODE |
| LOW | api/services/integrations/tuner/collector.py | 71 | def set_disconnection_reason(self, reason: str | None) -> None: | CODE |
| LOW | api/services/integrations/tuner/__init__.py | 19 | __all__ = ["PACKAGE"] | CODE |
| LOW | api/services/integrations/noveum/__init__.py | 19 | __all__ = ["PACKAGE"] | CODE |
| LOW | api/services/telephony/outbound_readiness.py | 162 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/telnyx/serializers.py | 5 | __all__ = ["TelnyxFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/telnyx/__init__.py | 292 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/ari/serializers.py | 5 | __all__ = ["AsteriskFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/ari/__init__.py | 259 | __all__ = [ | CODE |
| LOW | …vices/telephony/providers/ari/external_pbx/__init__.py | 9 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/exotel/serializers.py | 5 | __all__ = ["ExotelFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/exotel/__init__.py | 79 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/vonage/serializers.py | 5 | __all__ = ["VonageFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/vonage/__init__.py | 85 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/plivo/serializers.py | 5 | __all__ = ["PlivoFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/plivo/__init__.py | 150 | __all__ = [ | CODE |
| LOW | …/services/telephony/providers/cloudonix/serializers.py | 5 | __all__ = ["CloudonixFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/cloudonix/__init__.py | 790 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/cloudonix/setup.py | 125 | __all__ = ["resolve_setup_checklist"] | CODE |
| LOW | …services/telephony/providers/cloudonix/provisioning.py | 126 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/vobiz/serializers.py | 5 | __all__ = ["VobizFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/vobiz/__init__.py | 160 | __all__ = [ | CODE |
| LOW | api/services/telephony/providers/twilio/serializers.py | 10 | __all__ = ["TwilioFrameSerializer"] | CODE |
| LOW | api/services/telephony/providers/twilio/__init__.py | 69 | __all__ = [ | CODE |
| LOW⚡ | api/services/pipecat/recording_router_processor.py | 80 | def set_enabled(self, enabled: bool) -> None: | CODE |
| LOW | api/services/pipecat/in_memory_buffers.py | 142 | def set_current_turn(self, turn: int) -> None: | CODE |
| LOW | api/services/pipecat/greeting.py | 55 | async def _update_strategies(self, user: LLMUserAggregator, frame: Frame) -> None: | CODE |
| LOW | api/services/pipecat/termination_funnel_processor.py | 105 | def set_termination_handler(self, handler: TerminationHandler) -> None: | CODE |
| LOW | api/services/call_concurrency/__init__.py | 17 | __all__ = [ | CODE |
| LOW⚡ | api/services/workflow/pipecat_engine.py | 1666 | def set_context(self, context: LLMContext) -> None: | CODE |
| LOW⚡ | api/services/workflow/pipecat_engine.py | 1682 | def set_agent_factory(self, factory) -> None: | CODE |
| LOW⚡ | api/services/workflow/pipecat_engine.py | 2042 | def set_fetch_recording_audio(self, fetch_fn) -> None: | CODE |
| LOW⚡ | api/services/workflow/pipecat_engine.py | 2046 | def set_mute_pipeline(self, mute: bool) -> None: | CODE |
| LOW | api/services/workflow/pipecat_engine.py | 875 | async def _setup_llm_context(self, node: Node) -> None: | CODE |
| LOW | api/services/workflow/pipecat_engine.py | 1200 | def set_call_disposition(self, disposition: str) -> None: | CODE |
| LOW | api/services/workflow/pipecat_engine.py | 1990 | def set_audio_config(self, audio_config) -> None: | CODE |
| LOW | api/services/workflow/pipecat_engine.py | 1994 | def set_transport_output(self, transport_output) -> None: | CODE |
| LOW | api/services/workflow/text_chat_session_service.py | 698 | __all__ = [ | CODE |
| LOW | api/services/workflow/qa/__init__.py | 12 | __all__ = ["run_per_node_qa_analysis"] | CODE |
| LOW | api/services/workflow/node_specs/__init__.py | 63 | __all__ = [ | CODE |
| LOW | api/services/voice_prompting_guide/__init__.py | 22 | __all__ = [ | CODE |
| LOW | api/services/reports/__init__.py | 9 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/providers/deepgram_provider.py | 165 | # Check if final | COMMENT |
| LOW | scripts/migrate.sh | 5 | # Set PYTHONPATH to the parent directory of the script's location | COMMENT |
| LOW | scripts/migrate.sh | 14 | # Check if environment file exists | COMMENT |
| LOW | scripts/stop_services.sh | 71 | # Check if any PID files exist | COMMENT |
| LOW | scripts/stop_services.sh | 95 | # Check if parent or any descendants are still alive | COMMENT |
| LOW | scripts/makemigrate.sh | 5 | # Set PYTHONPATH to the parent directory of the script's location | COMMENT |
| LOW | scripts/makemigrate.sh | 14 | # Check if environment file exists | COMMENT |
| LOW | scripts/makemigrate.sh | 26 | # Check if the migration name is empty or less than 5 characters | COMMENT |
| LOW | .github/workflows/slack-announcements.yml | 14 | # Check if the discussion is in the announcements category | COMMENT |
| LOW | api/conftest.py | 133 | # Check if database exists | COMMENT |
| LOW | api/logging_config.py | 154 | # Set level to INFO to avoid debug logs from libraries | COMMENT |
| LOW | api/tasks/arq.py | 24 | # Check if we're using TLS (rediss://) | COMMENT |
| LOW | api/utils/common.py | 124 | # Check if port is numeric | COMMENT |
| LOW | api/db/organization_client.py | 76 | # Check if we actually inserted (rowcount > 0) or if there was a conflict (rowcount == 0) | COMMENT |
| LOW | api/routes/auth.py | 28 | # Check if email is already taken | COMMENT |
| LOW | api/routes/workflow_embed.py | 82 | # Check if an embed token already exists for this workflow | COMMENT |
| LOW | api/routes/webrtc_signaling.py | 250 | # Check if TURN is configured. ENABLE_COTURN is the deployment's declared | COMMENT |
| LOW | api/routes/webrtc_signaling.py | 893 | # Check if session is expired | COMMENT |
| LOW | api/routes/public_embed.py | 323 | # Check if token is active | COMMENT |
| LOW | api/routes/public_embed.py | 512 | # Check if token is active | COMMENT |
| LOW | api/routes/public_embed.py | 583 | # Check if TURN is configured. Both conditions matter: ENABLE_COTURN is what | COMMENT |
| LOW⚡ | api/services/auth/depends.py | 38 | # Check if API key is provided (takes precedence) | COMMENT |
| LOW⚡ | api/services/auth/depends.py | 44 | # Check if we're using local (email/password) auth | COMMENT |
| LOW | api/services/auth/depends.py | 116 | # Check if user's selected organization differs from the current organization | COMMENT |
| LOW | api/services/gender/test_service.py | 96 | # Check if API key is available | COMMENT |
| LOW | api/services/telephony/ari_manager.py | 537 | # Check if this is a transfer destination channel (app_args starts with "transfer") | COMMENT |
| LOW | api/services/telephony/ari_manager.py | 602 | # Check if this is a transfer destination that failed | COMMENT |
| LOW | api/services/telephony/ari_manager.py | 1209 | # Check if this is a call transfer scenario external channel. Skip full teardown if | COMMENT |
| LOW | api/services/telephony/call_transfer_manager.py | 215 | # Check if this is a completion event | COMMENT |
| LOW | api/services/telephony/providers/cloudonix/provider.py | 851 | # Check if AccountSid is a Cloudonix domain | COMMENT |
| LOW | api/services/pipecat/pipeline_builder.py | 306 | # Check if turn logging is enabled | COMMENT |
| LOW⚡ | api/services/call_concurrency/rate_limiter.py | 331 | # Set expiry to match stale timeout | STRING |
| LOW | api/services/workflow/pipecat_engine_custom_tools.py | 663 | # Check if this is a WebRTC call - transfers are not supported | COMMENT |
| LOW | api/services/campaign/campaign_orchestrator.py | 414 | # Check if batch is stuck (initiated > 5 minutes ago but no completion) | COMMENT |
| LOW | api/services/campaign/campaign_orchestrator.py | 428 | # Check if there's work to be done | COMMENT |
| LOW | api/services/campaign/campaign_orchestrator.py | 458 | # Check if campaign should be marked complete | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | sdk/codegen/client_codegen.py | 42 | # optional string often shown as anyOf:[{type:string}, {type:null}] | COMMENT |
| HIGH | scripts/fix_broken_langfuse_trace_urls.py | 23 | source venv/bin/activate && set -a && source api/.env && set +a \ | STRING |
| HIGH | api/tests/test_call_event_sinks.py | 55 | "detail": '{"stt_ttfb_ms": 12.3, "llm_ttfb_ms": null}', | CODE |
| HIGH | api/tests/telephony/cloudonix/test_routes.py | 167 | request = _json_request(b'{"domain": "acme.cloudonix.io", "session": null}') | CODE |
| HIGH | api/db/campaign_client.py | 1030 | "SET logs = (logs::jsonb || CAST(:entry AS jsonb))::json, " | CODE |
| HIGH | api/routes/workflow.py | 1122 | """Move a workflow into a folder, or to "Uncategorized" (folder_id=null). | STRING |
| HIGH | api/mcp_server/instructions.py | 79 | Data-position values must be plain literals (strings, numbers, booleans, null, arrays/objects of same). A single `new Wo | CODE |
| HIGH | api/services/pipecat/tts_cache/redis.py | 16 | return false | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | api/tests/test_custom_tools.py | 2874 | mock_client.return_value.__aenter__.return_value.request.assert_called_once_with( | CODE |
| CRITICAL | api/tests/test_custom_tools.py | 2907 | mock_client.return_value.__aenter__.return_value.request.assert_called_once_with( | CODE |
| CRITICAL | api/tests/test_custom_tools.py | 3006 | mock_client.return_value.__aenter__.return_value.request.assert_called_once_with( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/src/app/superadmin/page.tsx | 145 | placeholder="user@example.com" | CODE |
| LOW | docs/api-reference/openapi.json | 1 | {"openapi":"3.1.0","info":{"title":"Dograh API","description":"API for the Dograh app","version":"1.0.0"},"servers":[{"u | CODE |
| LOW | api/tests/conftest.py | 135 | engine._call_context_vars = {"customer_name": "John Doe"} | CODE |
| LOW⚡ | api/tests/test_user_email_case_insensitive.py | 13 | assert user.email == "user@example.com" | CODE |
| LOW⚡ | api/tests/test_user_email_case_insensitive.py | 19 | assert fetched.email == "user@example.com" | CODE |
| LOW | api/tests/test_pipecat_engine_variable_extraction.py | 171 | return_value={"user_name": "John Doe"}, | CODE |
| LOW | api/tests/test_custom_tools.py | 1579 | arguments={"customer_name": "John Doe", "date": "2024-01-15"}, | CODE |
| LOW | api/tests/test_custom_tools.py | 1624 | assert received_arguments == {"customer_name": "John Doe", "date": "2024-01-15"} | CODE |
| LOW | api/tests/test_node_specs.py | 454 | "placeholder", | CODE |
| LOW⚡ | api/tests/test_workflow_versioning.py | 75 | TEMPLATE_VARS_V2 = {"company_name": "Acme Inc"} | CODE |
| LOW | api/tests/test_auth_depends.py | 316 | email="user@example.com", | CODE |
| LOW | api/tests/test_auth_depends.py | 355 | "email": "user@example.com", | CODE |
| LOW⚡ | api/tests/test_auth_routes.py | 25 | "email": "user@example.com", | CODE |
| LOW⚡ | api/tests/test_auth_routes.py | 33 | "email": "user@example.com", | CODE |
| LOW⚡ | api/tests/test_auth_routes.py | 51 | "email": "user@example.com", | CODE |
| LOW⚡ | api/tests/test_auth_routes.py | 66 | email="user@example.com", | CODE |
| LOW | api/tests/test_auth_routes.py | 77 | "email": "user@example.com", | CODE |
| LOW | api/db/user_client.py | 143 | log in as "user@example.com". Compare on lower(email) so lookups are | STRING |
| LOW | api/services/workflow/dto.py | 243 | "placeholder": "Greet the caller warmly and ask how you can help today.", | CODE |
| LOW | api/services/workflow/dto.py | 264 | "placeholder": "Hi {{first_name}}, this is Sarah from Acme.", | CODE |
| LOW | api/services/workflow/dto.py | 328 | "placeholder": "https://api.example.com/customer-lookup", | CODE |
| LOW | api/services/workflow/dto.py | 457 | "placeholder": "Ask the caller about their budget and timeline.", | CODE |
| LOW | api/services/workflow/dto.py | 526 | "placeholder": "Thank the caller and confirm next steps before ending the call.", | CODE |
| LOW | api/services/workflow/dto.py | 612 | "placeholder": ( | CODE |
| LOW | api/services/workflow/dto.py | 762 | "placeholder": "https://api.example.com/webhook", | CODE |
| LOW | api/services/workflow/node_specs/model_spec.py | 70 | "placeholder": placeholder, | CODE |
| LOW | api/services/workflow/node_specs/model_spec.py | 204 | placeholder=meta.get("placeholder"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ui/src/components/http/create-credential-dialog.tsx | 50 | { key: "api_key", label: "API Key", placeholder: "your-api-key", isSecret: true }, | CODE |
| HIGH | ui/src/components/flow/nodes/GenericNode.tsx | 344 | -H "X-API-Key: YOUR_API_KEY" \\ | CODE |
| HIGH | api/services/gender/README.md | 95 | gender_api_key="your-api-key", # Default: from GENDER_API_KEY env | CODE |
| HIGH | api/services/gender/README.md | 166 | export GENDERAPI_API_KEY=your-api-key-here | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/stt/providers/speechmatics_provider.py | 44 | CODE | |
| LOW | evals/stt/providers/deepgram_flux_provider.py | 53 | CODE | |
| LOW | evals/stt/providers/deepgram_provider.py | 48 | CODE | |
| LOW | api/tests/test_tts_cache.py | 89 | CODE | |
| LOW | api/tests/test_answer_supervisor_late_speech.py | 89 | CODE | |
| LOW | api/tests/test_public_embed_chat.py | 148 | CODE | |
| LOW | api/db/telephony_phone_number_client.py | 357 | CODE | |
| LOW | api/db/workflow_run_client.py | 37 | CODE | |
| LOW | api/db/workflow_run_client.py | 393 | CODE | |
| LOW | api/routes/organization_usage.py | 459 | CODE | |
| LOW | api/services/mps_service_key_client.py | 890 | CODE | |
| LOW | api/services/integrations/paygent/collector.py | 534 | CODE | |
| LOW | api/services/telephony/transfer_event_protocol.py | 57 | CODE | |
| LOW | api/services/pipecat/event_handlers.py | 76 | CODE | |
| LOW | api/services/pipecat/agent_runtime_factory.py | 71 | CODE | |
| LOW | api/services/pipecat/service_factory.py | 1125 | CODE | |
| LOW | api/services/workflow/pipecat_engine.py | 132 | CODE | |
| LOW | api/services/workflow/pipecat_engine.py | 1442 | CODE | |
| LOW | api/services/workflow/tools/knowledge_base.py | 21 | CODE | |
| LOW | api/services/workflow/node_specs/model_spec.py | 44 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | sdk/python/src/dograh_sdk/_validation.py | 120 | # Unknown field names — the most common LLM hallucination. | COMMENT |
| MEDIUM | api/tests/test_realtime_conversation_contract.py | 206 | # Keep the engine's transition orchestration real without opening sockets. | COMMENT |
| MEDIUM | api/db/campaign_client.py | 349 | # Recognize retries created by the earlier event-driven path too. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/tests/integrations/test_run_pipeline_text_greeting.py | 95 | # pytest worker alive indefinitely (the harness has no pytest-timeout plugin). | COMMENT |
| MEDIUM | api/services/integrations/paygent/collector.py | 127 | # Extremely robust extraction | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/setup_requirements.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/rolling_update.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/release_sdks.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | api/tests/test_json_parser.py | 144 | Let me know if you need anything else!""" | CODE |