Repository Analysis

dograh-hq/dograh

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.

15.3 Moderate AI signal View on GitHub
15.3
Adjusted Score
15.3
Raw Score
100%
Time Factor
2026-05-29
Last Push
3,853
Stars
Python
Language
204,226
Lines of Code
947
Files
2084
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 43MEDIUM 317LOW 1724

Pattern Findings

2084 matches across 17 categories. Click a row to expand file-level details.

Decorative Section Separators271 hits · 978 pts
SeverityFileLineSnippet
MEDIUMui/src/components/flow/renderer/PropertyInput.tsx127// ─── Layout helpers ──────────────────────────────────────────────────────
MEDIUMui/src/components/flow/renderer/PropertyInput.tsx143// ─── Widgets ─────────────────────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx22// ─── Static per-spec UI maps ──────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx67// ─── Helpers ──────────────────────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx168// ─── Canvas preview dispatch ──────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx454// ─── GenericNode ──────────────────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx479 // ── Form state ─────────────────────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx500 // ── Trigger auto-UUID + canvas copy state ──────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx519 // ── Stale tool/document cleanup (was duplicated in Start/Agent) ─────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx547 // ── Dirty / save / open handlers ────────────────────────────────────
MEDIUMui/src/components/flow/nodes/GenericNode.tsx583 // ── Render ──────────────────────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/client.py84 # ── spec discovery overrides (generated methods + caching) ────────
MEDIUMsdk/python/src/dograh_sdk/client.py106 # ── ergonomic workflow wrappers ───────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/client.py131 # ── low-level ──────────────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/workflow.py71 # ── node construction ──────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/workflow.py122 # ── edge construction ──────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/workflow.py163 # ── serialization ──────────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/codegen.py28# ── property type → Python type annotation ────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/codegen.py125# ── source rendering ─────────────────────────────────────────────────────
MEDIUMsdk/python/src/dograh_sdk/codegen.py262# ── public entry points ──────────────────────────────────────────────────
MEDIUMsdk/typescript/src/client.ts59 // ── spec discovery overrides (generated methods + caching) ────────
MEDIUMsdk/typescript/src/client.ts85 // ── ergonomic workflow wrappers ───────────────────────────────────
MEDIUMsdk/typescript/src/client.ts111 // ── low-level (overrides `_GeneratedClient.request`) ──────────────
MEDIUMsdk/codegen/client_codegen.py169# ── Python emitter ─────────────────────────────────────────────────────
MEDIUMsdk/codegen/client_codegen.py245# ── TypeScript emitter ─────────────────────────────────────────────────
MEDIUMsdk/codegen/client_codegen.py332# ── CLI ────────────────────────────────────────────────────────────────
MEDIUMscripts/generate_sdk.sh42# ── 1. Node-spec typed dataclasses ────────────────────────────────────
MEDIUMscripts/generate_sdk.sh57# ── 2. SDK-scoped OpenAPI spec ────────────────────────────────────────
MEDIUMscripts/generate_sdk.sh79# ── 3. Request/response models (off-the-shelf) ────────────────────────
MEDIUMscripts/generate_sdk.sh105# ── 4. Client method mixins ──────────────────────────────────────────
MEDIUMscripts/generate_sdk.sh113# ── 5. Docs OpenAPI spec ─────────────────────────────────────────────
MEDIUMapi/tests/test_from_number_pool_isolation.py64# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_from_number_pool_isolation.py66# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_from_number_pool_isolation.py196# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_from_number_pool_isolation.py198# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_dograh_sdk.py42# ─── Builder + to_json round-trip ────────────────────────────────────────
MEDIUMapi/tests/test_dograh_sdk.py99# ─── Validation errors at call site ──────────────────────────────────────
MEDIUMapi/tests/test_dograh_sdk.py184# ─── Round-trip from_json → edit → to_json ────────────────────────────────
MEDIUMapi/tests/test_dograh_sdk.py223# ─── Sanity: all registered specs are reachable by name ───────────────────
MEDIUMapi/tests/test_ts_bridge.py189# ─── generate_code ───────────────────────────────────────────────────────
MEDIUMapi/tests/test_ts_bridge.py275# ─── parse_code ──────────────────────────────────────────────────────────
MEDIUMapi/tests/test_ts_bridge.py365# ─── Round-trip ──────────────────────────────────────────────────────────
MEDIUMapi/tests/test_workflow_qa_masking.py50# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_workflow_qa_masking.py52# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_workflow_qa_masking.py148# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_workflow_qa_masking.py150# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_workflow_qa_masking.py262# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_workflow_qa_masking.py264# ---------------------------------------------------------------------------
MEDIUMapi/tests/test_mcp_save_workflow.py28# ─── Fixtures & helpers ──────────────────────────────────────────────────
MEDIUMapi/tests/test_mcp_save_workflow.py100# ─── Happy path ──────────────────────────────────────────────────────────
MEDIUMapi/tests/test_mcp_save_workflow.py141# ─── Parse-stage rejections ──────────────────────────────────────────────
MEDIUMapi/tests/test_mcp_save_workflow.py170# ─── Validation-stage rejections ─────────────────────────────────────────
MEDIUMapi/tests/test_mcp_save_workflow.py228# ─── Graph-stage rejections ──────────────────────────────────────────────
MEDIUMapi/tests/test_mcp_save_workflow.py247# ─── Workflow not found / unauthorized ───────────────────────────────────
MEDIUMapi/tests/test_mcp_tool_route.py27# ── Canonical valid MCP request body ─────────────────────────────────────────
MEDIUMapi/tests/test_mcp_tool_route.py41# ── Part A regression: CreateToolRequest / UpdateToolRequest validation ───────
MEDIUMapi/tests/test_mcp_tool_route.py99# ── Invalid bodies are rejected ───────────────────────────────────────────────
MEDIUMapi/tests/test_mcp_tool_route.py141# ── Round-trip compatibility: request schema ↔ validate_mcp_definition ───────
MEDIUMapi/tests/test_mcp_tool_route.py203# ── Full HTTP round-trip via ASGI test client ─────────────────────────────────
MEDIUMapi/tests/test_mcp_tool_route.py280# ── Task 6: discovered_tools field and _populate_discovered_tools helper ──────
211 more matches not shown…
Hyper-Verbose Identifiers946 hits · 963 pts
SeverityFileLineSnippet
LOWui/src/context/TelephonyConfigWarningsContext.tsx24export function TelephonyConfigWarningsProvider({ children }: { children: ReactNode }) {
LOWui/src/context/TelephonyConfigWarningsContext.tsx66export function useTelephonyConfigWarnings() {
LOWui/src/app/tools/config.tsx178export function createTransferCallDefinition(config: TransferCallConfig): TransferCallToolDefinition {
LOWui/src/app/tools/config.tsx197export function createCalculatorDefinition(): CalculatorToolDefinition {
LOWui/src/app/telephony-configurations/page.tsx51export default function TelephonyConfigurationsPage() {
LOWui/src/app/telephony-configurations/[configId]/page.tsx69export default function TelephonyConfigurationDetailPage() {
LOWui/src/components/workflow/TemplateCard.tsx19export function DuplicateWorkflowTemplate({ id, title, description, serverAccessToken }: DuplicateWorkflowTemplateProps)
LOWui/src/components/workflow/conversation/utils.ts17export function countConversationMessages(items: ConversationItem[]) {
LOW…workflow/conversation/adapters/fromRealtimeFeedback.ts101export function conversationItemsFromLiveFeedback(messages: RealtimeFeedbackMessage[]) {
LOW…workflow/conversation/adapters/fromRealtimeFeedback.ts128export function conversationItemsFromRealtimeFeedbackEvents(events: RealtimeFeedbackEvent[]) {
LOW…ts/workflow/conversation/adapters/fromTextChatTurns.ts31function conversationItemsFromTextChatEvents(
LOW…ts/workflow/conversation/adapters/fromTextChatTurns.ts131export function conversationItemsFromTextChatTurns(turns: TextChatTurnLike[]) {
LOWui/src/components/flow/nodes/GenericNode.tsx104function resolveIntegrationEnabled(
LOWui/src/components/flow/nodes/GenericNode.tsx116function resolveIntegrationSummary(
LOWsdk/python/src/dograh_sdk/codegen.py143def _render_nested_row_dataclass(
LOWapi/conftest.py267 def reopen_nested_transaction(session_sync, transaction: SessionTransaction):
LOWapi/tasks/s3_upload.py74async def process_workflow_completion(
LOWapi/tasks/run_integrations.py125async def _update_usage_info_with_qa_tokens(
LOWapi/tasks/run_integrations.py166async def run_integrations_post_workflow_run(_ctx, workflow_run_id: int):
LOWapi/tasks/knowledge_base_processing.py22async def process_knowledge_base_document(
LOWapi/tests/test_openai_realtime_initial_context.py22async def test_initial_context_triggers_response_when_context_was_prepopulated():
LOWapi/tests/test_openai_realtime_initial_context.py36async def test_updated_context_uses_tool_result_path_after_initial_context():
LOWapi/tests/test_openai_realtime_initial_context.py51async def test_tts_greeting_uses_initial_context_handler():
LOWapi/tests/test_openai_realtime_initial_context.py66async def test_function_call_executes_immediately_when_bot_is_not_speaking():
LOWapi/tests/test_openai_realtime_initial_context.py81async def test_function_call_is_deferred_until_bot_stops_speaking():
LOWapi/tests/test_workflow_text_chat.py21async def _create_user_and_workflow(
LOWapi/tests/test_workflow_text_chat.py55async def test_text_chat_session_creation_executes_initial_assistant_turn(
LOWapi/tests/test_workflow_text_chat.py158async def test_text_chat_message_executes_assistant_turn(
LOWapi/tests/test_workflow_text_chat.py280async def test_text_chat_executes_deferred_tool_calls_after_text_response(
LOWapi/tests/test_workflow_text_chat.py410async def test_text_chat_chains_multiple_follow_up_completions_in_one_turn(
LOWapi/tests/test_workflow_text_chat.py550async def test_text_chat_greeting_only_plays_on_fresh_node_entry(
LOWapi/tests/test_workflow_text_chat.py666async def test_text_chat_rewind_reuses_checkpoint_snapshot(
LOWapi/tests/test_workflow_text_chat.py888async def test_text_chat_session_is_not_accessible_from_another_org(
LOWapi/tests/test_workflow_text_chat.py975async def test_text_chat_session_creation_requires_selected_org_scope(
LOWapi/tests/test_workflow_text_chat.py1052async def test_text_chat_session_creation_rejects_quota_before_creating_run(
LOWapi/tests/test_workflow_text_chat.py1107async def test_text_chat_append_rejects_quota_without_mutating_session(
LOWapi/tests/test_voicemail_detector.py84 async def test_voicemail_detector_conversation_flow(self):
LOWapi/tests/test_masked_key_rejection.py45 def test_rejects_masked_api_key_on_provider_change(self):
LOWapi/tests/test_masked_key_rejection.py76 def test_rejects_masked_api_key_in_list(self):
LOWapi/tests/test_masked_key_rejection.py144 def test_allows_same_provider_with_masked_key(self):
LOWapi/tests/test_masked_key_rejection.py173 def test_allows_same_provider_with_masked_vertex_credentials(self):
LOWapi/tests/test_user_muting_during_bot_speech.py111def set_workflow_allow_interrupt_in_start_node(
LOWapi/tests/test_user_muting_during_bot_speech.py120async def create_engine_for_mute_test(
LOWapi/tests/test_user_muting_during_bot_speech.py205async def queue_user_speaking_and_transcript_frames(task):
LOWapi/tests/test_user_muting_during_bot_speech.py219 async def test_muted_until_first_bot_stopped_speaking(
LOWapi/tests/test_user_muting_during_bot_speech.py307 async def test_allow_interrupt_true_not_muted_after_second_bot_started(
LOWapi/tests/test_user_muting_during_bot_speech.py401 async def test_allow_interrupt_false_muted_during_second_bot_speech(
LOWapi/tests/test_from_number_pool_isolation.py77 async def test_acquire_only_returns_numbers_for_requested_config(
LOWapi/tests/test_from_number_pool_isolation.py116 async def test_release_returns_number_to_owning_config_pool(
LOWapi/tests/test_from_number_pool_isolation.py167 async def test_workflow_from_number_mapping_round_trips_config(
LOWapi/tests/test_from_number_pool_isolation.py237 async def test_dispatch_call_acquires_from_number_for_campaign_config(self):
LOWapi/tests/test_from_number_pool_isolation.py324 async def test_release_call_slot_uses_stored_telephony_config(self):
LOWapi/tests/test_grok_realtime_wrapper.py26async def test_initial_context_triggers_response_when_context_was_prepopulated():
LOWapi/tests/test_grok_realtime_wrapper.py40async def test_tts_greeting_uses_initial_context_handler():
LOWapi/tests/test_grok_realtime_wrapper.py54async def test_messages_append_frame_sends_conversation_item():
LOWapi/tests/test_grok_realtime_wrapper.py79async def test_function_call_is_deferred_until_bot_stops_speaking():
LOWapi/tests/test_grok_realtime_wrapper.py104async def test_completed_input_transcription_is_broadcast_as_finalized():
LOWapi/tests/test_grok_realtime_wrapper.py122def test_factory_creates_dograh_grok_realtime_service():
LOWapi/tests/test_is_private_ip_candidate.py49 def test_cgnat_ip_upper_bound(self):
LOWapi/tests/test_is_private_ip_candidate.py89 def test_srflx_candidate_type(self):
886 more matches not shown…
Excessive Try-Catch Wrapping357 hits · 363 pts
SeverityFileLineSnippet
LOWevals/stt/benchmark.py66 except Exception as e:
MEDIUMevals/stt/benchmark.py67 print(f"Error with {provider.name}: {e}")
MEDIUMevals/stt/benchmark.py207 print(f"Error: Audio file not found: {audio_path}")
LOWevals/stt/benchmark.py232 except Exception as e:
MEDIUMevals/stt/event_capture.py239 print(f"Error: Audio file not found: {audio_path}")
LOWevals/stt/event_capture.py281 except Exception as e:
LOWevals/stt/providers/local_smart_turn_provider.py83 except Exception:
LOWevals/stt/providers/local_smart_turn_provider.py88 except Exception:
LOWevals/stt/providers/deepgram_provider.py189 except Exception as e:
LOWapi/constants.py82 except Exception:
LOWapi/tasks/s3_upload.py57 except Exception as e:
LOWapi/tasks/s3_upload.py68 except Exception as e:
LOWapi/tasks/s3_upload.py119 except Exception as e:
LOWapi/tasks/s3_upload.py126 except Exception as e:
LOWapi/tasks/s3_upload.py152 except Exception as e:
LOWapi/tasks/s3_upload.py163 except Exception as e:
LOWapi/tasks/s3_upload.py169 except Exception as e:
LOWapi/tasks/s3_upload.py175 except Exception as e:
LOWapi/tasks/run_integrations.py118 except Exception as e:
LOWapi/tasks/run_integrations.py162 except Exception as e:
LOWapi/tasks/run_integrations.py322 except Exception as e:
LOWapi/tasks/run_integrations.py325 except Exception as e:
LOWapi/tasks/run_integrations.py459 except Exception as e:
LOWapi/tasks/campaign_tasks.py79 except Exception as e:
LOWapi/tasks/campaign_tasks.py231 except Exception as e:
LOWapi/tasks/knowledge_base_processing.py227 except Exception as e:
LOWapi/tasks/knowledge_base_processing.py242 except Exception as e:
LOW…/tests/integrations/test_run_pipeline_text_greeting.py258 except Exception:
LOWapi/tests/support/mcp_mock_server.py86 except Exception:
LOWapi/utils/telephony_helper.py144 except Exception:
LOWapi/utils/telephony_helper.py148 except Exception as e:
MEDIUMapi/utils/audio_converter.py26 print(f"Error: Input file '{input_path}' not found")
LOWapi/utils/tunnel.py31 except Exception as e:
LOWapi/utils/tunnel.py93 except Exception as e:
LOWapi/utils/common.py138 except Exception as e:
LOWapi/utils/common.py160 except Exception as e:
LOWapi/utils/template_renderer.py140 except Exception:
LOWapi/utils/template_renderer.py152 except Exception:
LOWapi/db/campaign_client.py56 except Exception as e:
LOWapi/db/campaign_client.py132 except Exception as e:
LOWapi/db/campaign_client.py315 except Exception as e:
LOWapi/db/campaign_client.py421 except Exception as e:
LOWapi/db/campaign_client.py465 except Exception:
LOWapi/db/campaign_client.py497 except Exception:
LOWapi/db/campaign_client.py522 except Exception:
LOWapi/db/campaign_client.py534 except Exception as e:
LOWapi/db/campaign_client.py555 except Exception as e:
LOWapi/db/campaign_client.py585 except Exception:
LOWapi/db/campaign_client.py722 except Exception as e:
LOWapi/db/campaign_client.py850 except Exception as e:
LOWapi/db/organization_usage_client.py463 except Exception:
LOWapi/db/workflow_run_text_session_client.py54 except Exception as e:
LOWapi/db/workflow_run_text_session_client.py120 except Exception as e:
LOWapi/db/workflow_template_client.py49 except Exception as e:
LOWapi/db/workflow_template_client.py79 except Exception as e:
LOWapi/db/workflow_template_client.py97 except Exception as e:
LOWapi/db/integration_client.py44 except Exception as e:
LOWapi/db/integration_client.py65 except Exception as e:
LOWapi/db/integration_client.py86 except Exception as e:
LOWapi/db/organization_configuration_client.py63 except Exception as e:
297 more matches not shown…
Unused Imports219 hits · 218 pts
SeverityFileLineSnippet
LOWevals/stt/event_capture.py16
LOWevals/stt/providers/local_smart_turn_provider.py7
LOWevals/stt/providers/__init__.py1
LOWevals/stt/providers/__init__.py1
LOWevals/stt/providers/__init__.py1
LOWevals/stt/providers/__init__.py1
LOWevals/stt/providers/__init__.py2
LOWevals/stt/providers/__init__.py3
LOWevals/stt/providers/__init__.py4
LOWevals/stt/providers/__init__.py5
LOW…skills/review-agents-md/scripts/inventory_agents_md.py12
LOWsdk/python/src/dograh_sdk/_generated_models.py5
LOWsdk/python/src/dograh_sdk/_generated_client.py10
LOWsdk/python/src/dograh_sdk/client.py13
LOWsdk/python/src/dograh_sdk/__init__.py21
LOWsdk/python/src/dograh_sdk/__init__.py22
LOWsdk/python/src/dograh_sdk/__init__.py22
LOWsdk/python/src/dograh_sdk/__init__.py22
LOWsdk/python/src/dograh_sdk/__init__.py22
LOWsdk/python/src/dograh_sdk/__init__.py23
LOWsdk/python/src/dograh_sdk/__init__.py24
LOWsdk/python/src/dograh_sdk/__init__.py24
LOWsdk/python/src/dograh_sdk/_validation.py10
LOWsdk/python/src/dograh_sdk/workflow.py13
LOWsdk/python/src/dograh_sdk/workflow.py15
LOWsdk/python/src/dograh_sdk/workflow.py23
LOWsdk/python/src/dograh_sdk/codegen.py18
LOWsdk/python/src/dograh_sdk/typed/_base.py14
LOWsdk/python/src/dograh_sdk/typed/agent_node.py8
LOWsdk/python/src/dograh_sdk/typed/agent_node.py11
LOWsdk/python/src/dograh_sdk/typed/global_node.py8
LOWsdk/python/src/dograh_sdk/typed/global_node.py10
LOWsdk/python/src/dograh_sdk/typed/global_node.py11
LOWsdk/python/src/dograh_sdk/typed/global_node.py11
LOWsdk/python/src/dograh_sdk/typed/global_node.py11
LOWsdk/python/src/dograh_sdk/typed/end_call.py8
LOWsdk/python/src/dograh_sdk/typed/end_call.py11
LOWsdk/python/src/dograh_sdk/typed/webhook.py8
LOWsdk/python/src/dograh_sdk/typed/__init__.py7
LOWsdk/python/src/dograh_sdk/typed/__init__.py8
LOWsdk/python/src/dograh_sdk/typed/__init__.py9
LOWsdk/python/src/dograh_sdk/typed/__init__.py10
LOWsdk/python/src/dograh_sdk/typed/__init__.py11
LOWsdk/python/src/dograh_sdk/typed/__init__.py12
LOWsdk/python/src/dograh_sdk/typed/__init__.py13
LOWsdk/python/src/dograh_sdk/typed/__init__.py14
LOWsdk/python/src/dograh_sdk/typed/__init__.py15
LOWsdk/python/src/dograh_sdk/typed/start_call.py8
LOWsdk/python/src/dograh_sdk/typed/start_call.py11
LOWsdk/python/src/dograh_sdk/typed/tuner.py8
LOWsdk/python/src/dograh_sdk/typed/tuner.py10
LOWsdk/python/src/dograh_sdk/typed/tuner.py11
LOWsdk/python/src/dograh_sdk/typed/tuner.py11
LOWsdk/python/src/dograh_sdk/typed/tuner.py11
LOWsdk/python/src/dograh_sdk/typed/qa.py8
LOWsdk/python/src/dograh_sdk/typed/qa.py10
LOWsdk/python/src/dograh_sdk/typed/qa.py11
LOWsdk/python/src/dograh_sdk/typed/trigger.py8
LOWsdk/python/src/dograh_sdk/typed/trigger.py10
LOWsdk/python/src/dograh_sdk/typed/trigger.py11
159 more matches not shown…
Self-Referential Comments39 hits · 116 pts
SeverityFileLineSnippet
MEDIUMscripts/rolling_update.sh239 # Create a new timestamped log dir for this deploy
MEDIUMapi/conftest.py336 # Create a custom user
MEDIUMapi/conftest.py339 # Create a test client for this user
MEDIUMapi/tests/test_pipecat_engine_variable_extraction.py134 # Create the pipeline
MEDIUMapi/tests/test_mcp_tool_route.py210 # Create a user and an organization, then link them so the route's
MEDIUMapi/tests/test_custom_tools.py866 # Create a mock engine
MEDIUMapi/tests/test_custom_tools.py937 # Create a mock engine with a mock LLM
MEDIUMapi/tests/test_pipecat_engine_end_call.py212 # Create the pipeline with transport input -> user aggregator -> LLM -> TTS -> transport output -> assistant aggrega
MEDIUMapi/tests/test_pipecat_engine_end_call.py622 # Create a simple text response
MEDIUMapi/tests/test_pipecat_engine_end_call.py714 # Create a simple text response
MEDIUMapi/tests/test_pipecat_engine_end_call.py913 # Create a simple text response
MEDIUMapi/tests/test_pipecat_engine_end_call.py923 # Create a custom extraction mock that signals when called
MEDIUMapi/tests/test_pipecat_engine_end_call.py999 # Create a simple text response
MEDIUMapi/tests/test_pipecat_engine_end_call.py1005 # Create a workflow where start node has NO extraction
MEDIUMapi/tests/test_pipecat_engine_context_update.py108 # Create the pipeline
MEDIUMapi/tests/test_workflow_versioning.py446 # Create a draft
MEDIUMapi/tests/test_workflow_versioning.py571 # Create a draft (unpublished)
MEDIUMapi/tests/test_workflow_versioning.py577 # Create a run (simulating campaign dispatch)
MEDIUMapi/tests/test_workflow_versioning.py599 # Create a test run
MEDIUMapi/tests/test_pipecat_engine_tool_calls.py99 # Create the pipeline with the mock LLM and TTS
MEDIUMapi/tests/test_pipecat_engine_tool_calls.py109 # Create a real pipeline task
MEDIUMapi/tests/test_tts_endframe_with_audio_write_failure.py142 # Create the pipeline
MEDIUM…ts/test_pipecat_engine_node_switch_with_user_speech.py194 # Create the pipeline:
MEDIUMapi/db/organization_client.py76 # Create a default API key for the new organization
MEDIUMapi/db/workflow_client.py42 # Create the first definition as V1 published
MEDIUM…/b79f19f68157_add_call_type_column_to_workflow_runs.py23 # Create the workflow_call_type enum
MEDIUM…sions/49a8fe6841e6_add_state_field_to_workflow_runs.py21 # Create the workflow_run_state enum type
MEDIUMapi/routes/webrtc_signaling.py548 # Create a minimal user object for compatibility with signaling manager
MEDIUMapi/routes/workflow.py467 # Create the workflow in our database
MEDIUMapi/routes/workflow.py1352 # Create a new workflow from the template
MEDIUMapi/mcp_server/instructions.py39### Creating a new workflow
MEDIUMapi/services/mps_service_key_client.py610# Create a singleton instance
MEDIUMapi/services/storage.py77# Create a single storage instance at module load time.
MEDIUMapi/services/filesystem/local.py70 # Create a temporary directory for symlinks
MEDIUMapi/services/pipecat/run_pipeline.py670 # Create a separate LLM instance for the voicemail sub-pipeline
MEDIUMapi/services/workflow/workflow_graph.py122 # Create the edge with properties from dto
MEDIUMapi/services/workflow/qa/tracing.py112 # Create a root span (new trace) for this node summary generation
MEDIUMapi/services/workflow/qa/node_summary.py168 # Create a Langfuse trace for this summary generation
MEDIUMapi/services/campaign/campaign_orchestrator.py667 # Create a shutdown event for clean coordination
Cross-File Repetition18 hits · 90 pts
SeverityFileLineSnippet
HIGHsdk/python/src/dograh_sdk/typed/agent_node.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/global_node.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/end_call.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/webhook.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/start_call.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/tuner.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/qa.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/trigger.py0generated — do not edit by hand. regenerate with `python -m dograh_sdk.codegen` against the target dograh backend. sourc
HIGHsdk/python/src/dograh_sdk/typed/agent_node.py0each entry declares one variable to capture, with its name, data type, and extraction hint.
HIGHsdk/python/src/dograh_sdk/typed/agent_node.py0each entry declares one variable to capture, with its name, data type, and extraction hint.
HIGHsdk/python/src/dograh_sdk/typed/start_call.py0each entry declares one variable to capture, with its name, data type, and extraction hint.
HIGHsdk/python/src/dograh_sdk/typed/start_call.py0each entry declares one variable to capture, with its name, data type, and extraction hint.
HIGHsdk/python/src/dograh_sdk/typed/agent_node.py0when true and a global node exists, prepends the global prompt to this node's prompt at runtime.
HIGHsdk/python/src/dograh_sdk/typed/end_call.py0when true and a global node exists, prepends the global prompt to this node's prompt at runtime.
HIGHsdk/python/src/dograh_sdk/typed/start_call.py0when true and a global node exists, prepends the global prompt to this node's prompt at runtime.
HIGHapi/tests/test_pipecat_engine_tool_calls.py0test parallel function calls using pipecatengine's actual handlers. this test verifies that when the llm generates paral
HIGHapi/tests/test_pipecat_engine_tool_calls.py0test parallel function calls using pipecatengine's actual handlers. this test verifies that when the llm generates paral
HIGHapi/tests/test_pipecat_engine_tool_calls.py0test parallel function calls using pipecatengine's actual handlers. this test verifies that when the llm generates paral
Deep Nesting89 hits · 88 pts
SeverityFileLineSnippet
LOWevals/stt/providers/speechmatics_provider.py44
LOWevals/stt/providers/speechmatics_provider.py204
LOWevals/stt/providers/speechmatics_provider.py152
LOWevals/stt/providers/deepgram_flux_provider.py53
LOWevals/stt/providers/deepgram_flux_provider.py141
LOWevals/stt/providers/local_smart_turn_provider.py68
LOWevals/stt/providers/deepgram_provider.py48
LOWevals/stt/providers/deepgram_provider.py142
LOWsdk/codegen/client_codegen.py96
LOWapi/tasks/s3_upload.py74
LOWapi/tasks/run_integrations.py125
LOWapi/tasks/run_integrations.py166
LOWapi/tests/test_user_muting_during_bot_speech.py82
LOWapi/tests/test_dograh_sdk_typed.py58
LOWapi/tests/test_tts_endframe_with_audio_write_failure.py166
LOWapi/tests/test_tts_endframe_with_audio_write_failure.py284
LOW…/tests/integrations/test_run_pipeline_text_greeting.py146
LOWapi/utils/credential_auth.py15
LOWapi/utils/credential_auth.py57
LOWapi/utils/common.py96
LOWapi/utils/telephony_address.py73
LOWapi/db/filters.py58
LOWapi/alembic/env.py64
LOWapi/routes/telephony.py921
LOWapi/routes/credentials.py51
LOWapi/routes/organization.py881
LOWapi/routes/campaign.py348
LOWapi/routes/workflow.py910
LOWapi/routes/public_embed.py59
LOWapi/routes/public_embed.py318
LOWapi/mcp_server/tools/docs_search.py405
LOWapi/mcp_server/tools/docs_search.py474
LOWapi/mcp_server/tools/docs_search.py496
LOWapi/services/quota_service.py27
LOWapi/services/configuration/resolve.py37
LOWapi/services/gen_ai/json_parser.py69
LOWapi/services/gen_ai/json_parser.py113
LOWapi/services/auth/depends.py19
LOWapi/services/gender/build_model.py34
LOWapi/services/filesystem/s3.py47
LOWapi/services/integrations/tuner/collector.py122
LOWapi/services/telephony/ari_manager.py261
LOWapi/services/telephony/factory.py74
LOWapi/services/telephony/call_transfer_manager.py128
LOWapi/services/telephony/call_transfer_manager.py188
LOWapi/services/telephony/providers/telnyx/strategies.py116
LOWapi/services/telephony/providers/telnyx/strategies.py161
LOWapi/services/telephony/providers/vonage/routes.py49
LOWapi/services/telephony/providers/twilio/strategies.py106
LOWapi/services/pipecat/pipeline_metrics_aggregator.py36
LOWapi/services/pipecat/recording_router_processor.py94
LOWapi/services/pipecat/event_handlers.py60
LOWapi/services/pipecat/event_handlers.py99
LOWapi/services/pipecat/event_handlers.py220
LOWapi/services/pipecat/realtime_feedback_observer.py147
LOWapi/services/pipecat/realtime_feedback_observer.py178
LOW…ervices/pipecat/pipeline_engine_callbacks_processor.py39
LOW…ervices/pipecat/pipeline_engine_callbacks_processor.py61
LOWapi/services/pipecat/pre_call_fetch.py18
LOWapi/services/pipecat/run_pipeline.py307
29 more matches not shown…
Docstring Block Structure17 hits · 85 pts
SeverityFileLineSnippet
HIGHapi/utils/template_renderer.py18 Get a nested value from a dictionary using dot notation. Args: obj: The object to traverse (dict or an
HIGHapi/db/workflow_client.py530 Update an existing workflow in the database. Name changes are applied directly to the workflow.
HIGHapi/db/workflow_client.py641 Update the status of a workflow. Args: workflow_id: The ID of the workflow to update
HIGHapi/routes/public_download.py29Download a workflow recording or transcript via public access token. This endpoint: 1. Validates the public acc
HIGHapi/routes/s3_signed_url.py78Validate the S3 key format and extract workflow_run_id if present. Args: key: S3 object key allow_s
HIGHapi/routes/s3_signed_url.py108Authorize access to workflow run and retrieve it. Args: run_id: Workflow run ID (can be None for special pa
HIGHapi/routes/workflow.py429 Create a new workflow from a natural language template request. This endpoint: 1. Uses mps_service_key_cli
HIGHapi/routes/workflow.py915 Update an existing workflow. Args: workflow_id: The ID of the workflow to update request: The
HIGHapi/routes/turn_credentials.py58Generate time-limited TURN credentials using HMAC-SHA1. Args: user_id: Unique identifier for the user (for
HIGHapi/services/mps_service_key_client.py249 Check the usage and quota of a service key. Args: service_key: The service key to check us
HIGHapi/services/mps_service_key_client.py367 Transcribe an audio file via MPS STT API. Args: audio_data: Raw audio bytes fi
HIGHapi/services/mps_service_key_client.py454 Get available voices for a TTS provider from MPS. Args: provider: TTS provider name (eleve
HIGHapi/services/mps_service_key_client.py567 Call the MPS workflow creation API using secret key authentication. For OSS mode: Pass created_by in h
HIGHapi/services/telephony/base.py385 Initiate a call transfer to a destination number. Args: destination: The destination phone
HIGHapi/services/telephony/providers/cloudonix/provider.py957 Initiate a call transfer via Cloudonix. Uses inline CXML to put the destination into a conference when
HIGHapi/services/telephony/providers/twilio/provider.py563 Initiate a call transfer via Twilio. Uses inline TwiML to put the destination into a conference when t
HIGHapi/services/workflow/duplicate.py47Duplicate a workflow including its definition, config, and triggers. Recordings are org-scoped and shared, so they
Verbosity Indicators44 hits · 81 pts
SeverityFileLineSnippet
LOW…/workflow/[workflowId]/components/RecordingsDialog.tsx273 // Step 1: Get presigned URLs for all files
LOW…/workflow/[workflowId]/components/RecordingsDialog.tsx291 // Step 2: Upload all files to storage in parallel
LOW…/workflow/[workflowId]/components/RecordingsDialog.tsx308 // Step 3: Create all recording records
LOW…low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx319 // Step 1: Finalize the last bot message (user started speaking)
LOW…low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx328 // Step 2: Remove any previous interim transcription
LOW…low/[workflowId]/run/[runId]/hooks/useWebSocketRTC.tsx333 // Step 3: Add new transcription (interim or final)
LOWui/src/app/files/DocumentUpload.tsx181 // Step 2: File selected — show retrieval mode choice
LOWui/src/app/campaigns/CsvUploadSelector.tsx43 // Step 1: Request presigned upload URL
LOWui/src/app/campaigns/CsvUploadSelector.tsx59 // Step 2: Upload file directly to S3/MinIO
LOWui/src/app/campaigns/CsvUploadSelector.tsx75 // Step 3: Notify parent with file_key
LOWapi/tasks/s3_upload.py98 # Step 1: Upload audio if provided
LOWapi/tasks/s3_upload.py129 # Step 2: Upload transcript if provided
LOWapi/tasks/s3_upload.py166 # Step 3: Run integrations including QA analysis (after uploads are complete)
LOWapi/tasks/s3_upload.py172 # Step 4: Calculate cost after integrations (so QA token usage is included)
LOWapi/tasks/run_integrations.py180 # Step 1: Get workflow run with full context
LOWapi/tasks/run_integrations.py209 # Step 2: Get workflow definition from the run's pinned version
LOWapi/tasks/run_integrations.py217 # Step 3: Extract integration nodes
LOWapi/tasks/run_integrations.py223 # Step 4: Generate a public access token for any run that needs post-call work.
LOWapi/tasks/run_integrations.py236 # Step 5: Run QA analysis before webhooks
LOWapi/tasks/run_integrations.py274 # Step 6: Run registered third-party integrations after uploads are complete
LOWapi/tasks/run_integrations.py294 # Step 7: Execute webhooks
LOWapi/tasks/run_integrations.py301 # Step 8: Build render context (includes annotations from QA and integrations)
LOWapi/tasks/run_integrations.py304 # Step 9: Execute each webhook node
LOWapi/tests/test_voicemail_detector.py122 # Step 0: First response after CONVERSATION classification
LOWapi/tests/test_voicemail_detector.py123 # Step 1: Response to second user turn
LOWapi/tests/test_voicemail_detector.py124 # Step 2: end_call function call to end pipeline
LOWapi/tests/test_user_idle_handler.py228 # Step 0: Short greeting on Start node
LOWapi/tests/test_user_idle_handler.py230 # Step 1: Longer response (TTS 400ms > idle timeout 200ms)
LOWapi/tests/test_user_idle_handler.py235 # Step 2: Transition from Start → Agent node
LOWapi/tests/test_user_idle_handler.py241 # Step 3: Transition from Agent → End node (ends call)
LOWapi/tests/test_pipecat_engine_end_call.py437 # Step 0: call end_call tool
LOWapi/tests/test_pipecat_engine_end_call.py526 # Step 0: call end_call tool
LOWapi/tests/test_pipecat_engine_end_call.py804 # Step 0: Text response
LOWapi/tests/test_pipecat_engine_end_call.py807 # Step 1: call end_call tool
LOWapi/tests/test_pipecat_engine_context_update.py273 # Step 0: Start node - should have start prompt
LOWapi/tests/test_pipecat_engine_context_update.py276 # Step 1: Agent node - should have agent prompt
LOWapi/tests/test_pipecat_engine_context_update.py279 # Step 2: End node - should have end prompt
LOW…688d0da1123_backfill_workflow_definition_versioning.py30 # Step 1: For each workflow's is_current=True definition, copy configs from
LOW…688d0da1123_backfill_workflow_definition_versioning.py47 # Step 2: Mark all pre-versioning non-current definitions as legacy.
LOW…688d0da1123_backfill_workflow_definition_versioning.py56 # Step 3: Set released_definition_id on workflows to their published definition.
LOWapi/services/gender/gender_service.py134 # Step 1: Check local model
LOWapi/services/gender/gender_service.py152 # Step 2: Check Redis cache for previous API responses
LOWapi/services/gender/gender_service.py167 # Step 3: Fallback to GenderAPI
LOWapi/services/gender/gender_service.py189 # Step 4: Return best guess from model or unknown
Redundant / Tautological Comments48 hits · 74 pts
SeverityFileLineSnippet
LOWevals/stt/providers/deepgram_provider.py165 # Check if final
LOWscripts/migrate.sh5# Set PYTHONPATH to the parent directory of the script's location
LOWscripts/migrate.sh14# Check if environment file exists
LOWscripts/stop_services.sh71# Check if any PID files exist
LOWscripts/stop_services.sh95 # Check if parent or any descendants are still alive
LOWscripts/makemigrate.sh5# Set PYTHONPATH to the parent directory of the script's location
LOWscripts/makemigrate.sh14# Check if environment file exists
LOWscripts/makemigrate.sh26# Check if the migration name is empty or less than 5 characters
LOW.github/workflows/slack-announcements.yml14 # Check if the discussion is in the announcements category
LOWapi/conftest.py133 # Check if database exists
LOWapi/logging_config.py114 # Set level to INFO to avoid debug logs from libraries
LOWapi/tasks/arq.py20# Check if we're using TLS (rediss://)
LOWapi/tests/test_campaign_call_dispatcher.py772 # Set campaign to paused
LOWapi/utils/common.py86 # Check if port is numeric
LOWapi/db/organization_client.py58 # Check if we actually inserted (rowcount > 0) or if there was a conflict (rowcount == 0)
LOWapi/routes/auth.py20 # Check if email is already taken
LOWapi/routes/workflow_embed.py76 # Check if an embed token already exists for this workflow
LOWapi/routes/webrtc_signaling.py199 # Check if TURN is configured
LOWapi/routes/webrtc_signaling.py537 # Check if session is expired
LOWapi/routes/public_embed.py142 # Check if token is active
LOWapi/routes/public_embed.py221 # Check if token is active
LOWapi/routes/public_embed.py282 # Check if session is expired
LOWapi/routes/public_embed.py298 # Check if TURN is configured
LOWapi/routes/public_embed.py331 # Check if origin is in allowed domains (empty means allow all)
LOWapi/routes/public_embed.py361 # Check if origin is in allowed domains
LOWapi/services/quota_service.py63 # Check if user is using any Dograh service
LOWapi/services/auth/depends.py24 # Check if API key is provided (takes precedence)
LOWapi/services/auth/depends.py30 # Check if we're using local (email/password) auth
LOWapi/services/auth/depends.py97 # Check if user's selected organization differs from the current organization
LOWapi/services/gender/test_service.py96 # Check if API key is available
LOWapi/services/telephony/ari_manager.py320 # Check if this is a transfer destination channel (app_args starts with "transfer")
LOWapi/services/telephony/ari_manager.py384 # Check if this is a transfer destination that failed
LOWapi/services/telephony/ari_manager.py768 # Check if this is a call transfer scenario external channel. Skip full teardown if
LOWapi/services/telephony/call_transfer_manager.py160 # Check if this is a completion event
LOWapi/services/telephony/providers/cloudonix/provider.py664 # Check if AccountSid is a Cloudonix domain
LOWapi/services/pipecat/realtime_feedback_observer.py296 # Check if this MetricsFrame contains TTFB data from an LLM processor
LOWapi/services/pipecat/pipeline_builder.py208 # Check if turn logging is enabled
LOWapi/services/pipecat/run_pipeline.py512 # Check if the workflow has any active recordings so the engine can
LOWapi/services/pipecat/service_factory.py89 # Check if using Flux model (English-only, no language selection)
LOWapi/services/workflow/pipecat_engine.py590 # Check if delayed start is enabled
LOWapi/services/workflow/pipecat_engine_custom_tools.py514 # Check if this is a WebRTC call - transfers are not supported
LOWapi/services/campaign/campaign_orchestrator.py199 # Check if this reason should be retried
LOWapi/services/campaign/campaign_orchestrator.py481 # Check if batch is stuck (initiated > 5 minutes ago but no completion)
LOWapi/services/campaign/campaign_orchestrator.py495 # Check if there's work to be done
LOWapi/services/campaign/campaign_orchestrator.py521 # Check if campaign should be marked complete
LOWapi/services/campaign/rate_limiter.py208 # Set expiry to match stale timeout
LOWapi/services/campaign/campaign_call_dispatcher.py79 # Check if campaign is in running state
LOWapi/services/campaign/campaign_call_dispatcher.py509 # Check if we've been waiting too long
Magic Placeholder Names4 hits · 20 pts
SeverityFileLineSnippet
HIGHui/src/components/http/create-credential-dialog.tsx46 { key: "api_key", label: "API Key", placeholder: "your-api-key", isSecret: true },
HIGHui/src/components/flow/nodes/GenericNode.tsx329 -H "X-API-Key: YOUR_API_KEY" \\
HIGHapi/services/gender/README.md95 gender_api_key="your-api-key", # Default: from GENDER_API_KEY env
HIGHapi/services/gender/README.md166export GENDERAPI_API_KEY=your-api-key-here
Cross-Language Confusion4 hits · 20 pts
SeverityFileLineSnippet
HIGHsdk/codegen/client_codegen.py42 # optional string often shown as anyOf:[{type:string}, {type:null}]
HIGHapi/db/campaign_client.py453 "SET logs = (logs::jsonb || CAST(:entry AS jsonb))::json, "
HIGHapi/routes/workflow.py867 """Move a workflow into a folder, or to "Uncategorized" (folder_id=null).
HIGHapi/mcp_server/instructions.py59Data-position values must be plain literals (strings, numbers, booleans, null, arrays/objects of same). A single `new Wo
Over-Commented Block18 hits · 18 pts
SeverityFileLineSnippet
LOWexamples/typescript/fetch_workflow_and_call.ts1// Fetch a workflow by ID and place a test phone call using the TypeScript SDK.
LOWexamples/typescript/create_workflow.ts1// Create a new workflow using the TypeScript SDK.
LOWscripts/generate_sdk.sh1#!/usr/bin/env bash
LOWscripts/rolling_update.sh1#!/usr/bin/env bash
LOWscripts/release_sdks.sh1#!/usr/bin/env bash
LOWapi/alembic.ini1# A generic, single database configuration.
LOWapi/alembic.ini21# The default rendered in new alembic.ini files is "os", which uses os.pathsep
LOWapi/alembic.ini41# a source .py file to be detected as revisions in the
LOWapi/alembic.ini61# Use os.pathsep. Default configuration used for new projects.
LOWapi/alembic.ini81# detail and examples
LOWapi/mcp_server/ts_validator/src/parse.ts1// TypeScript → workflow JSON.
LOWapi/services/auth/stack_auth.py61 response = await response.json()
LOWapi/services/auth/stack_auth.py81 # headers = {
LOWapi/services/auth/stack_auth.py101
LOWapi/services/pipecat/realtime/gemini_live.py201 self._run_llm_when_session_ready = False
LOWapi/services/workflow/workflow_graph.py181 variables |= extract_template_variables(edge.transition_speech)
LOWapi/services/workflow/mcp_tool_session.py121 raise
LOW.vscode/launch.json1// Debug configurations for Dograh contributors.
Example Usage Blocks3 hits · 4 pts
SeverityFileLineSnippet
LOWscripts/setup_requirements.sh5# Usage:
LOWscripts/rolling_update.sh4# Usage:
LOWscripts/release_sdks.sh6# Usage:
Fake / Example Data5 hits · 4 pts
SeverityFileLineSnippet
LOWapi/tests/conftest.py134 engine._call_context_vars = {"customer_name": "John Doe"}
LOWapi/tests/test_pipecat_engine_variable_extraction.py169 return_value={"user_name": "John Doe"},
LOWapi/tests/test_custom_tools.py763 arguments={"customer_name": "John Doe", "date": "2024-01-15"},
LOWapi/tests/test_custom_tools.py807 assert received_arguments == {"customer_name": "John Doe", "date": "2024-01-15"}
LOWapi/tests/test_workflow_versioning.py70TEMPLATE_VARS_V2 = {"company_name": "Acme Inc"}
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUM…/tests/integrations/test_run_pipeline_text_greeting.py90# pytest worker alive indefinitely (the harness has no pytest-timeout plugin).
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippet
MEDIUMapi/tests/test_json_parser.py144Let me know if you need anything else!"""