Composio powers 1000+ toolkits, tool search, context management, authentication, and a sandboxed workbench to help you build AI agents that turn intent into action.
This report presents the forensic synthetic code analysis of ComposioHQ/composio, a TypeScript project with 29,490 GitHub stars. SynthScan v2.0 examined 377,185 lines of code across 1925 source files, recording 1836 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 8.2 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1836 distinct pattern matches across 23 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/release-workflow.test.ts | 114 | function readDocumentedSdkVersions(sdkLabel) { | CODE |
| LOW | python/providers/gemini/composio_gemini/provider.py | 54 | def _process_execution_result(result: t.Any) -> t.Dict: | CODE |
| LOW | python/providers/openai_agents/tests/test_provider.py | 11 | def test_wrap_tool_does_not_mutate_input_parameters(): | CODE |
| LOW | python/providers/openai_agents/tests/test_provider.py | 84 | def test_wrap_tool_preserves_array_item_schemas(items_schema): | CODE |
| LOW | …iders/openai_agents/composio_openai_agents/provider.py | 17 | def _remove_examples_from_schema(schema_obj: t.Dict[str, t.Any]) -> None: | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 89 | def test_simple_schema_passthrough(self, provider): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 110 | def test_wrap_tool_returns_sdk_mcp_tool( | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 125 | def test_wrap_tool_without_description(self, provider, mock_execute_tool): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 142 | def test_wrap_tool_without_input_parameters(self, provider, mock_execute_tool): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 179 | def test_wrap_empty_tools_list(self, provider, mock_execute_tool): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 188 | def test_create_mcp_server_with_default_options(self, provider): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 204 | def test_create_mcp_server_with_custom_options(self, custom_provider): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 220 | def test_create_mcp_server_with_empty_tools(self, provider): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 238 | def test_tool_handler_success(self, provider, mock_tool): | CODE |
| LOW | …thon/providers/claude_agent_sdk/tests/test_provider.py | 289 | def test_tool_handler_string_result(self, provider, mock_tool): | CODE |
| LOW | …claude_agent_sdk/composio_claude_agent_sdk/provider.py | 139 | def _json_schema_to_simple_schema(self, schema: dict) -> dict: | CODE |
| LOW | python/providers/autogen/composio_autogen/provider.py | 29 | def _process_function_name_for_registration( | CODE |
| LOW | python/tests/test_cross_sdk_compatibility.py | 27 | def test_fixtures_are_identical(self, fixture_name: str) -> None: | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 38 | def test_alias_tool_input_schema_restores_nested_aliases_without_mutating_schema(): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 81 | def test_alias_tool_input_schema_rejects_duplicate_aliases(): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 94 | def test_legacy_keyword_helpers_use_tool_schema_aliases(): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 124 | def test_alias_tool_input_schema_dereferences_refs_before_aliasing(): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 155 | def test_gemini_manual_response_restores_provider_visible_aliases(monkeypatch): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 221 | def test_google_adk_wrap_tool_aliases_signature_and_restores_arguments(monkeypatch): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 268 | def test_anthropic_wrap_tool_aliases_schema_and_restores_arguments(monkeypatch): | CODE |
| LOW | python/tests/test_tool_schema_aliasing.py | 355 | def test_claude_agent_sdk_wrap_tool_aliases_schema_and_restores_arguments(monkeypatch): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 75 | def test_get_processes_schema_for_file_uploadable(self, mock_client, mock_provider): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 119 | def test_execute_calls_substitute_file_uploads(self, mock_client, mock_provider): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 178 | def test_execute_runs_substitute_before_before_execute( | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 243 | def test_execute_calls_substitute_file_downloads(self, mock_client, mock_provider): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 312 | def test_get_does_not_process_file_uploadable_when_disabled( | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 356 | def test_get_still_enhances_descriptions_when_disabled( | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 417 | def test_execute_skips_file_uploads_when_disabled(self, mock_client, mock_provider): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 459 | def test_execute_skips_file_downloads_when_disabled( | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 519 | def test_sdk_passes_auto_upload_download_off_to_tools_by_default(self): | CODE |
| LOW | python/tests/test_auto_upload_download_files.py | 540 | def test_sdk_passes_true_when_dangerously_enabled(self): | CODE |
| LOW⚡ | python/tests/test_connected_accounts.py | 693 | def test_update_acl_omits_absent_fields(self, experimental, mock_client): | CODE |
| LOW⚡ | python/tests/test_connected_accounts.py | 703 | def test_update_acl_preserves_empty_array(self, experimental, mock_client): | CODE |
| LOW⚡ | python/tests/test_connected_accounts.py | 711 | def test_update_acl_rejects_all_none(self, experimental, mock_client): | CODE |
| LOW⚡ | python/tests/test_connected_accounts.py | 716 | def test_update_acl_maps_acl_only_for_shared_to_typed_error( | CODE |
| LOW⚡ | python/tests/test_connected_accounts.py | 726 | def test_update_acl_rethrows_non_acl_bad_request_errors( | CODE |
| LOW | python/tests/test_connected_accounts.py | 115 | def test_auth_scheme_helpers_set_expected_auth_scheme_and_status( | CODE |
| LOW | python/tests/test_connected_accounts.py | 130 | def test_wait_for_connection_returns_when_active(self, monkeypatch): | CODE |
| LOW | python/tests/test_connected_accounts.py | 164 | def test_wait_for_connection_times_out(self, monkeypatch): | CODE |
| LOW | python/tests/test_connected_accounts.py | 196 | def test_wait_for_connection_fails_fast_on_terminal_status( | CODE |
| LOW | python/tests/test_connected_accounts.py | 230 | def test_wait_for_connection_does_not_treat_inactive_as_terminal(self, monkeypatch): | CODE |
| LOW | python/tests/test_connected_accounts.py | 261 | def test_from_id_uses_client_retrieve(self): | CODE |
| LOW | python/tests/test_connected_accounts.py | 295 | def test_constructor_binds_methods(self, connected_accounts, mock_client): | CODE |
| LOW | python/tests/test_connected_accounts.py | 305 | def test_enable_and_disable_partials(self, connected_accounts, mock_client): | CODE |
| LOW | python/tests/test_connected_accounts.py | 316 | def test_initiate_raises_when_multiple_accounts_and_not_allow_multiple( | CODE |
| LOW | python/tests/test_connected_accounts.py | 328 | def test_initiate_filters_by_active_status_when_checking_existing_accounts( | CODE |
| LOW | python/tests/test_connected_accounts.py | 352 | def test_initiate_warns_and_creates_when_allow_multiple( | CODE |
| LOW | python/tests/test_connected_accounts.py | 396 | def test_link_builds_payload_and_returns_connection_request( | CODE |
| LOW | python/tests/test_connected_accounts.py | 426 | def test_link_omits_callback_url_when_not_provided( | CODE |
| LOW | python/tests/test_connected_accounts.py | 445 | def test_link_raises_when_active_connection_exists_and_not_allow_multiple( | CODE |
| LOW | python/tests/test_connected_accounts.py | 461 | def test_link_skips_guard_when_allow_multiple_is_true( | CODE |
| LOW | python/tests/test_connected_accounts.py | 512 | def test_wait_for_connection_delegates_to_connection_request(self, mock_client): | CODE |
| LOW | python/tests/test_connected_accounts.py | 584 | def test_link_forwards_experimental_block(self, connected_accounts, mock_client): | CODE |
| LOW | python/tests/test_connected_accounts.py | 606 | def test_link_omits_experimental_when_not_provided( | CODE |
| LOW | python/tests/test_connected_accounts.py | 617 | def test_link_preserves_explicit_empty_lists(self, connected_accounts, mock_client): | CODE |
| 969 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 124 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 420 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 422 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 615 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_gemini_provider.py | 617 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 460 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 462 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 538 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_gemini_provider.py | 540 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 403 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 405 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 443 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 445 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 509 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_custom_tools.py | 511 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 44 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 46 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 115 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 117 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 541 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 543 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 619 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 621 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 743 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_custom_tools.py | 745 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/tests/test_type_inference_custom_provider.py | 25 | # ============================================ | COMMENT |
| MEDIUM | python/tests/test_type_inference_custom_provider.py | 27 | # ============================================ | COMMENT |
| MEDIUM⚡ | python/tests/test_type_inference_custom_provider.py | 57 | # ============================================ | COMMENT |
| MEDIUM⚡ | python/tests/test_type_inference_custom_provider.py | 59 | # ============================================ | COMMENT |
| MEDIUM | python/examples/custom_tools_agent_test.py | 50 | # ── 2. Standalone tool with overrides ────────────────────────────────── | COMMENT |
| MEDIUM | python/examples/custom_tools_agent_test.py | 102 | # ── 4. Custom toolkit — groups related tools under one namespace ─────── | COMMENT |
| MEDIUM | python/examples/custom_tools_agent_test.py | 128 | # ── Agent ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool_types.py | 23 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool_types.py | 25 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool_types.py | 31 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool_types.py | 33 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 48 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 50 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 89 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 91 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 122 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 124 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 146 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool_types.py | 148 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/webhook_events.py | 35 | # ============================================================================= | COMMENT |
| MEDIUM | python/composio/core/models/webhook_events.py | 37 | # ============================================================================= | COMMENT |
| MEDIUM | python/composio/core/models/webhook_events.py | 132 | # ============================================================================= | COMMENT |
| MEDIUM | python/composio/core/models/webhook_events.py | 134 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool.py | 481 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | python/composio/core/models/custom_tool.py | 483 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 76 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 78 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 154 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 156 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 360 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 362 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | python/composio/core/models/custom_tool.py | 569 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| 116 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | python/tests/test_tool_router_session_files.py | 70 | mock_client.tool_router.session.files.list.assert_called_once() | CODE |
| CRITICAL⚡ | python/tests/test_tool_router_session_files.py | 111 | mock_client.tool_router.session.files.create_upload_url.assert_called_once() | CODE |
| CRITICAL⚡ | python/tests/test_tool_router_session_files.py | 112 | mock_client.tool_router.session.files.create_download_url.assert_called_once() | CODE |
| CRITICAL | python/tests/test_tool_router_session_files.py | 148 | mock_client.tool_router.session.files.create_download_url.assert_called_once_with( | CODE |
| CRITICAL | python/tests/test_tool_router_session_files.py | 159 | mock_client.tool_router.session.files.delete.assert_called_once_with( | CODE |
| CRITICAL | …thon/composio/core/models/tool_router_session_files.py | 223 | return self._client.tool_router.session.files.list( | CODE |
| CRITICAL | …thon/composio/core/models/tool_router_session_files.py | 296 | create_resp = self._client.tool_router.session.files.create_upload_url( | CODE |
| CRITICAL | …thon/composio/core/models/tool_router_session_files.py | 318 | download_resp = self._client.tool_router.session.files.create_download_url( | CODE |
| CRITICAL | …thon/composio/core/models/tool_router_session_files.py | 335 | resp = self._client.tool_router.session.files.create_download_url( | CODE |
| CRITICAL | …thon/composio/core/models/tool_router_session_files.py | 349 | return self._client.tool_router.session.files.delete( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 43 | mockClient.toolRouter.session.files.list.mockResolvedValueOnce({ items: [] }); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 60 | mockClient.toolRouter.session.files.list.mockResolvedValueOnce({ items: [] }); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 87 | mockClient.toolRouter.session.files.list.mockResolvedValueOnce(apiResponse); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 105 | mockClient.toolRouter.session.files.list.mockResolvedValueOnce({ items: [] }); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 134 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 153 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 176 | mockClient.toolRouter.session.files.delete.mockResolvedValueOnce(deleteResponse); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 194 | mockClient.toolRouter.session.files.delete.mockResolvedValueOnce(deleteResponse); | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 277 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 281 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 322 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 325 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 357 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 362 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce( | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 377 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 381 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 404 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 408 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 429 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 433 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 457 | mockClient.toolRouter.session.files.createUploadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 461 | mockClient.toolRouter.session.files.createDownloadURL.mockResolvedValueOnce({ | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 483 | mockClient.toolRouter.session.files.createUploadURL.mockImplementation((_, params) => | CODE |
| CRITICAL | …s/core/test/models/ToolRouterSessionFilesMount.test.ts | 489 | mockClient.toolRouter.session.files.createDownloadURL.mockImplementation((_, params) => | CODE |
| CRITICAL | …packages/core/src/models/ToolRouterSessionFileMount.ts | 88 | const response = await this.client.toolRouter.session.files.list(listOptions.data.mountId, { | CODE |
| CRITICAL | …packages/core/src/models/ToolRouterSessionFileMount.ts | 226 | const createUploadURLResponse = await this.client.toolRouter.session.files.createUploadURL( | CODE |
| CRITICAL | …packages/core/src/models/ToolRouterSessionFileMount.ts | 252 | const createDownloadURLResponse = await this.client.toolRouter.session.files.createDownloadURL( | CODE |
| CRITICAL | …packages/core/src/models/ToolRouterSessionFileMount.ts | 317 | const createDownloadURLResponse = await this.client.toolRouter.session.files.createDownloadURL( | CODE |
| CRITICAL | …packages/core/src/models/ToolRouterSessionFileMount.ts | 378 | const deleteResponse = await this.client.toolRouter.session.files.delete( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/docs/tool-router.md | 521 | print(f"MCP Headers: {mcp_headers}") # {'x-api-key': 'your-api-key'} | CODE |
| HIGH⚡ | python/examples/tool_router/tool_router_mcp.py | 24 | print("Please set it using: export COMPOSIO_API_KEY='your_api_key'") | CODE |
| HIGH⚡ | python/examples/tool_router/authorize.py | 17 | print("Please set it using: export COMPOSIO_API_KEY='your_api_key'") | CODE |
| HIGH | python/scripts/create-provider.sh | 434 | api_key="your-api-key", | CODE |
| HIGH | python/scripts/generate-docs.py | 544 | composio = Composio(api_key="your-api-key") | CODE |
| HIGH | docs/app/llms.mdx/[[...slug]]/route.ts | 358 | curl += ` \\\n -H "x-api-key: YOUR_API_KEY"`; | CODE |
| HIGH | docs/app/llms.mdx/[[...slug]]/route.ts | 818 | " -H 'x-api-key: YOUR_API_KEY'", | CODE |
| HIGH | docs/agent-guidance/agents/connect-clients-sync.md | 126 | - Use `YOUR_API_KEY` as the placeholder (not the `${token}` variable from the dashboard) | CODE |
| HIGH | .github/ISSUE_TEMPLATE/bug-report.yml | 104 | composio = Composio(api_key="YOUR_API_KEY") | CODE |
| HIGH | ts/docs/getting-started.md | 29 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/getting-started.md | 41 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/getting-started.md | 92 | apiKey: 'your-api-key' | CODE |
| HIGH | ts/docs/getting-started.md | 102 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/README.md | 59 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/core-concepts.md | 320 | apiKey: 'your-api-key', | CODE |
| HIGH⚡ | ts/docs/advanced/modifiers.md | 132 | apiKey: 'your-api-key', | CODE |
| HIGH⚡ | ts/docs/advanced/modifiers.md | 166 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/advanced/telemetry.md | 38 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/advanced/telemetry.md | 75 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/advanced/session-management.md | 11 | apiKey: 'your-api-key', // required | CODE |
| HIGH | ts/docs/advanced/session-management.md | 65 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/advanced/session-management.md | 146 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/internal/configuration.md | 67 | apiKey: 'your-api-key', // Override COMPOSIO_API_KEY | CODE |
| HIGH | ts/docs/internal/configuration.md | 93 | export COMPOSIO_API_KEY=your-api-key | CODE |
| HIGH | ts/docs/internal/configuration.md | 102 | export COMPOSIO_API_KEY=your-api-key | CODE |
| HIGH | ts/docs/api/providers.md | 60 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/api/composio.md | 11 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/api/triggers.md | 99 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/api/triggers.md | 290 | apiKey: 'your-api-key', | CODE |
| HIGH | ts/docs/api/connected-accounts.md | 356 | api_key: 'your_api_key', | CODE |
| HIGH | ts/examples/connected-accounts/README.md | 91 | export COMPOSIO_API_KEY=your_api_key | CODE |
| HIGH | ts/examples/connected-accounts/src/api-key.ts | 9 | api_key: 'your_api_key', | CODE |
| HIGH | ts/packages/core/scripts/generate-docs.ts | 952 | lines.push(`const composio = new Composio({ apiKey: 'your-api-key' });`); | CODE |
| HIGH | ts/packages/core/src/composio.ts | 293 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/core/src/composio.ts | 299 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/core/src/composio.ts | 455 | * apiKey: 'your-api-key' | COMMENT |
| HIGH | ts/packages/core/src/provider/OpenAIProvider.ts | 41 | * apiKey: 'your-api-key' | COMMENT |
| HIGH | ts/packages/core/src/provider/OpenAIProvider.ts | 46 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/core/src/models/ConnectedAccounts.ts | 188 | * api_key: 'your_api_key' | COMMENT |
| HIGH | ts/packages/providers/vercel/src/index.ts | 47 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/langchain/src/index.ts | 44 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/google/src/index.ts | 67 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/google/src/index.ts | 121 | * const genAI = new GoogleGenerativeAI('YOUR_API_KEY'); | COMMENT |
| HIGH | ts/packages/providers/google/src/index.ts | 185 | * const genAI = new GoogleGenerativeAI('YOUR_API_KEY'); | COMMENT |
| HIGH | ts/packages/providers/google/src/index.ts | 231 | * const genAI = new GoogleGenerativeAI('YOUR_API_KEY'); | COMMENT |
| HIGH | ts/packages/providers/cloudflare/src/index.ts | 45 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/anthropic/src/index.ts | 112 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/openai-agents/src/index.ts | 47 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | ts/packages/providers/openai-agents/src/index.ts | 163 | * apiKey: 'your-api-key', | COMMENT |
| HIGH | …ckages/providers/openai/src/OpenAIResponsesProvider.ts | 60 | * apiKey: 'your-api-key' | COMMENT |
| HIGH | …ckages/providers/openai/src/OpenAIResponsesProvider.ts | 65 | * apiKey: 'your-api-key', | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | python/providers/langgraph/langgraph_demo_toolnode.py | 38 | # Define the two nodes we will cycle between | COMMENT |
| MEDIUM | python/providers/gemini/composio_gemini/provider.py | 113 | # Create a real function object (passes inspect.isfunction) | COMMENT |
| MEDIUM | python/providers/openai_agents/openai_agents_demo.py | 17 | # Create an agent with the tools | COMMENT |
| MEDIUM | …iders/openai_agents/composio_openai_agents/provider.py | 76 | # Create a function that accepts explicit JSON string for parameters | COMMENT |
| MEDIUM | …iders/openai_agents/composio_openai_agents/provider.py | 121 | # Create a custom FunctionTool with the appropriate schema | COMMENT |
| MEDIUM | …thon/providers/claude_agent_sdk/tests/test_provider.py | 242 | # Create a real wrapped tool to test the handler | COMMENT |
| MEDIUM | python/providers/autogen/autogen_demo.py | 32 | # Create a user proxy agent | COMMENT |
| MEDIUM | python/tests/test_tool_router.py | 1646 | # Create a proper modifier structure | COMMENT |
| MEDIUM | python/tests/test_tool_router.py | 1737 | # Create a new session | COMMENT |
| MEDIUM | python/tests/test_tool_router.py | 1904 | # Create a real Tools instance to test the execute function | COMMENT |
| MEDIUM | python/tests/test_tool_router.py | 1994 | # Create a real execute function with modifiers | COMMENT |
| MEDIUM | python/tests/test_tool_router.py | 2036 | # Create a real execute function | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 101 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 149 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 198 | # Create a mock GitHub tool (not in toolkit_versions) | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 245 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 368 | # Create a mock GitHub tool with proper input_parameters for file helper | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 397 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 444 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 494 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 543 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 590 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 637 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 685 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 736 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 754 | # Create a before_execute modifier that changes the arguments | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 792 | # Create a mock GitHub tool | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 810 | # Create an after_execute modifier that modifies the response | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 1040 | # Create a mock GitHub tool with proper structure | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 1093 | # Create a mock GitHub tool with proper structure | COMMENT |
| MEDIUM | python/tests/test_tool_execution.py | 1125 | # Create a mock GitHub tool | COMMENT |
| MEDIUM⚡ | python/tests/test_files.py | 2102 | # Create a filename exactly at the limit (100 chars by default) | COMMENT |
| MEDIUM | python/tests/test_files.py | 2219 | # Create a very long filename (hash-based, common in public buckets) | COMMENT |
| MEDIUM | python/examples/triggers.py | 22 | # Create a trigger instance | COMMENT |
| MEDIUM | python/examples/triggers.py | 84 | # Define a callback functions | COMMENT |
| MEDIUM | python/examples/experimental_tool_router_example.py | 21 | # Create a tool router session | COMMENT |
| MEDIUM | python/examples/experimental_tool_router_example.py | 44 | # Create a tool router session with connection management | COMMENT |
| MEDIUM | python/examples/experimental_tool_router_example.py | 66 | # Create a session | COMMENT |
| MEDIUM | python/examples/experimental_tool_router_example.py | 93 | # Create a session | COMMENT |
| MEDIUM | python/examples/fastapi_app.py | 6 | # Create a FastAPI app | COMMENT |
| MEDIUM | python/examples/fastapi_app.py | 9 | # Create a Composio client | COMMENT |
| MEDIUM | python/examples/connected_accounts.py | 10 | # Create a new connected account (OAuth) | COMMENT |
| MEDIUM | python/examples/connected_accounts.py | 21 | # Create a new connected account (API Key) | COMMENT |
| MEDIUM | python/examples/tool_router/toolkits.py | 12 | # Create a tool router session | COMMENT |
| MEDIUM⚡ | python/examples/tool_router/tool_router_mcp.py | 29 | # Create a tool router session | COMMENT |
| MEDIUM | python/examples/tool_router/tool_router_mcp.py | 49 | # Create an agent with the tools from tool router | COMMENT |
| MEDIUM | python/examples/tool_router/files.py | 20 | # Create a session | COMMENT |
| MEDIUM | python/examples/tool_router/session_update.py | 15 | # Create a session with gmail only | COMMENT |
| MEDIUM | python/examples/tool_router/tools.py | 22 | # Create a tool router session for a specific user | COMMENT |
| MEDIUM | python/examples/tool_router/tools.py | 60 | # Create an agent with the tools from the session | COMMENT |
| MEDIUM | python/examples/tool_router/tools.py | 71 | # Define the task | COMMENT |
| MEDIUM⚡ | python/examples/tool_router/authorize.py | 22 | # Create a tool router session | COMMENT |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 796 | # Create a basic session | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 799 | # Create a session with specific toolkits | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 805 | # Create a direct-tools session when all needed tools are known upfront | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 812 | # Create a session with per-toolkit tool configuration | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 822 | # Create a session with global tag filtering | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 828 | # Create a session with toolkit-specific tag filtering (array format) | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 837 | # Create a session with toolkit-specific tag filtering (object format) | STRING |
| MEDIUM⚡ | python/composio/core/models/tool_router.py | 846 | # Create a session with connection management | STRING |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …n/providers/llamaindex/composio_llamaindex/__init__.py | 1 | CODE | |
| LOW | …hon/providers/langgraph/composio_langgraph/__init__.py | 1 | CODE | |
| LOW | python/providers/crewai/composio_crewai/__init__.py | 1 | CODE | |
| LOW | python/providers/gemini/composio_gemini/__init__.py | 1 | CODE | |
| LOW | …hon/providers/langchain/composio_langchain/__init__.py | 1 | CODE | |
| LOW | python/providers/google/composio_google/__init__.py | 1 | CODE | |
| LOW | …iders/openai_agents/composio_openai_agents/__init__.py | 1 | CODE | |
| LOW | …claude_agent_sdk/composio_claude_agent_sdk/__init__.py | 1 | CODE | |
| LOW | …hon/providers/anthropic/composio_anthropic/__init__.py | 1 | CODE | |
| LOW | …n/providers/google_adk/composio_google_adk/__init__.py | 1 | CODE | |
| LOW | python/providers/autogen/composio_autogen/__init__.py | 1 | CODE | |
| LOW | python/providers/openai/composio_openai/provider.py | 5 | CODE | |
| LOW | python/providers/openai/composio_openai/provider.py | 6 | CODE | |
| LOW | python/providers/openai/composio_openai/__init__.py | 1 | CODE | |
| LOW | python/providers/openai/composio_openai/__init__.py | 1 | CODE | |
| LOW | python/tests/test_sensitive_file_upload_paths.py | 3 | CODE | |
| LOW | python/tests/test_generate_docs.py | 3 | CODE | |
| LOW | python/tests/test_gemini_provider.py | 22 | CODE | |
| LOW | python/tests/test_upload_dir_allowlist.py | 3 | CODE | |
| LOW | python/tests/test_url_safety.py | 3 | CODE | |
| LOW | python/scripts/generate-docs.py | 11 | CODE | |
| LOW | python/composio/sdk.py | 1 | CODE | |
| LOW | python/composio/sdk.py | 21 | CODE | |
| LOW | python/composio/sdk.py | 21 | CODE | |
| LOW | python/composio/__init__.py | 1 | CODE | |
| LOW | python/composio/__init__.py | 2 | CODE | |
| LOW | python/composio/__init__.py | 3 | CODE | |
| LOW | python/composio/__init__.py | 3 | CODE | |
| LOW | python/composio/__init__.py | 7 | CODE | |
| LOW | python/composio/__init__.py | 8 | CODE | |
| LOW | python/composio/__init__.py | 9 | CODE | |
| LOW | python/composio/__init__.py | 9 | CODE | |
| LOW | python/composio/__init__.py | 9 | CODE | |
| LOW | python/composio/__init__.py | 9 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 15 | CODE | |
| LOW | python/composio/__init__.py | 25 | CODE | |
| LOW | python/composio/__init__.py | 25 | CODE | |
| LOW | python/composio/__init__.py | 25 | CODE | |
| LOW | python/composio/__init__.py | 25 | CODE | |
| LOW | python/composio/__init__.py | 31 | CODE | |
| LOW | python/composio/types.py | 1 | CODE | |
| LOW | python/composio/types.py | 2 | CODE | |
| LOW | python/composio/types.py | 3 | CODE | |
| LOW | python/composio/types.py | 3 | CODE | |
| LOW | python/composio/types.py | 3 | CODE | |
| LOW | python/composio/types.py | 8 | CODE | |
| LOW | python/composio/types.py | 9 | CODE | |
| LOW | python/composio/types.py | 9 | CODE | |
| LOW | python/composio/types.py | 10 | CODE | |
| LOW | python/composio/types.py | 10 | CODE | |
| LOW | python/composio/types.py | 10 | CODE | |
| LOW | python/composio/types.py | 10 | CODE | |
| LOW | python/composio/core/provider/none_agentic.py | 1 | CODE | |
| 101 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | python/providers/openai/README.md | 15 | This package exports two providers: `OpenAIResponsesProvider` for the [Responses API](https://platform.openai.com/docs/a | CODE |
| MEDIUM | python/tests/test_tool_router.py | 1919 | # Verify execute was called with direct offload opt-in for agentic calls | COMMENT |
| MEDIUM | python/composio/core/models/tool_router_session.py | 227 | # For agentic providers: if custom tools are bound, create a routing | COMMENT |
| MEDIUM⚡ | python/composio/core/models/tools.py | 432 | # Dangerously skip version check for agentic tool execution via providers | COMMENT |
| MEDIUM⚡ | python/composio/core/models/tools.py | 433 | # This can be safe because most agentic flows users fetch latest version and then execute the tool | COMMENT |
| MEDIUM | python/composio/core/models/tools.py | 519 | # Provider-wrapped session tools are agentic calls, so they opt into | COMMENT |
| MEDIUM | docs/tests/integration/llm-endpoints.test.ts | 57 | // Default guardrails should be appended (session-based pattern) | COMMENT |
| MEDIUM | docs/decisions/llm-guardrails.md | 86 | ## Session guardrails content | COMMENT |
| MEDIUM | docs/decisions/llm-guardrails.md | 96 | ## Direct execution guardrails content | COMMENT |
| MEDIUM | docs/lib/llm-guardrails/direct-execution.ts | 21 | Create an **Auth Config** on [dashboard.composio.dev](https://dashboard.composio.dev?utm_source=docs&utm_medium=llm-guar | CODE |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 129 | // With an agentic provider (e.g., Vercel, Langchain) | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 136 | // All modifiers work with agentic providers | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 149 | // Before execution modifier (only works with agentic providers) | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 155 | // After execution modifier (only works with agentic providers) | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 163 | // With a non-agentic provider (e.g., OpenAI) | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 170 | // Only schema modifiers work with non-agentic providers | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 183 | // These will be ignored by non-agentic providers | COMMENT |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 184 | beforeExecute: () => {}, // No effect with non-agentic providers | CODE |
| MEDIUM⚡ | ts/docs/advanced/modifiers.md | 185 | afterExecute: () => {}, // No effect with non-agentic providers | CODE |
| MEDIUM | ts/docs/advanced/modifiers.md | 246 | // Non-agentic provider example (OpenAI) | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 252 | // Schema modifiers work with non-agentic providers | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 270 | // All modifiers work with agentic providers | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 279 | // Execution modifiers (only work with agentic providers) | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 654 | // Before Execution Modifier (supported by agentic providers only) | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 661 | // After Execution Modifier (supported by agentic providers only) | COMMENT |
| MEDIUM | ts/docs/advanced/modifiers.md | 677 | beforeExecute?: beforeExecuteModifier; // Only applied by agentic providers | CODE |
| MEDIUM | ts/docs/advanced/modifiers.md | 678 | afterExecute?: afterExecuteModifier; // Only applied by agentic providers | CODE |
| MEDIUM | ts/docs/advanced/telemetry.md | 146 | isAgentic: boolean // Whether the provider is agentic | CODE |
| MEDIUM | ts/docs/advanced/telemetry.md | 241 | isAgentic: boolean; // Whether the provider is agentic | CODE |
| MEDIUM | ts/e2e-tests/cli/setup-plugins/e2e.test.ts | 20 | ? `# Keep this suite focused on packaged plugin orchestration. The standalone | CODE |
| MEDIUM | ts/scripts/create-provider.sh | 14 | # Check if provider should be agentic | COMMENT |
| MEDIUM | ts/packages/core/test/tools/tools.test.ts | 2376 | // Now call the stored execute function (simulating agentic provider calling it) | COMMENT |
| MEDIUM | ts/packages/core/src/types/modifiers.types.ts | 560 | * // Configure agentic tools with schema and execution modifications | COMMENT |
| MEDIUM | ts/packages/core/src/types/modifiers.types.ts | 640 | * // With standard provider (non-agentic) | COMMENT |
| MEDIUM | ts/packages/core/src/types/modifiers.types.ts | 645 | * // With agentic provider (e.g., VercelProvider) | COMMENT |
| MEDIUM | ts/packages/core/src/models/Tools.ts | 866 | // dangerously skip version check for agentic tool execution via providers | COMMENT |
| MEDIUM | ts/packages/core/src/models/Tools.ts | 867 | // this can be safe because most agentic flows users fetch latest version and then execute the tool | COMMENT |
| MEDIUM | ts/packages/core/src/models/Tools.ts | 1137 | // Provider-wrapped session tools are agentic calls, so they opt into | COMMENT |
| MEDIUM | ts/packages/providers/vercel/README.md | 3 | Composio provider for the [Vercel AI SDK](https://sdk.vercel.ai) (`ai`). It converts Composio tools into the AI SDK's to | CODE |
| MEDIUM | ts/packages/cli/CHANGELOG.md | 16 | - fc17c37: Security: the CLI's tool file-upload path now enforces the sensitive-file denylist (issue #3746 / GHSA-hp3h-8 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/lib/llm-guardrails/direct-execution.ts | 31 | print(connection.redirect_url) # send user here to authenticate | CODE |
| HIGH | ts/packages/experimental/test/workbench/shim.test.ts | 80 | print(_json.dumps({ | CODE |
| HIGH | ts/packages/experimental/test/workbench/shim.test.ts | 152 | print(_json.dumps({ | CODE |
| HIGH⚡ | …experimental/src/workbench/python-helpers.generated.ts | 4 | 'import json\nimport os\nimport random\nimport time\nimport urllib.error\nimport urllib.parse\nimport urllib.request\n | CODE |
| HIGH⚡ | …experimental/src/workbench/python-helpers.generated.ts | 4 | 'import json\nimport os\nimport random\nimport time\nimport urllib.error\nimport urllib.parse\nimport urllib.request\n | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 50 | print(result) | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 63 | print(f"Area: {area}") | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 93 | print(formatted) | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 101 | print("This is missing a closing parenthesis" | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 112 | print("Missing colon") | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 137 | print(f"Result: {result}") | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 160 | print(f"Calling {func.__name__}") | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 169 | print(result) | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 184 | print(result) | CODE |
| HIGH | ts/packages/cli/test/__utils__/python-compiler.ts | 204 | print(result) | CODE |
| HIGH⚡ | ts/packages/cli/test/__utils__/python-compiler.ts | 229 | print(f_string) | CODE |
| HIGH⚡ | ts/packages/cli/test/__utils__/python-compiler.ts | 247 | print("Hello",) # This trailing comma is valid | CODE |
| HIGH⚡ | ts/packages/cli/test/__utils__/python-compiler.ts | 248 | print("Hello",,) # This double comma is invalid | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …iders/openai_agents/composio_openai_agents/provider.py | 99 | except Exception as e: | CODE |
| LOW | …claude_agent_sdk/composio_claude_agent_sdk/provider.py | 121 | except Exception as e: | CODE |
| LOW | python/examples/experimental_tool_router_example.py | 81 | except Exception as e: | CODE |
| MEDIUM | python/examples/experimental_tool_router_example.py | 82 | print(f"Error authorizing toolkit: {e}") | CODE |
| LOW | python/examples/experimental_tool_router_example.py | 136 | except Exception as e: | CODE |
| LOW | python/examples/experimental_tool_router_example.py | 183 | except Exception as e: | CODE |
| LOW | …/examples/experimental_tool_router_advanced_example.py | 185 | except Exception as e: | CODE |
| LOW | python/examples/custom_tools_agent_test.py | 161 | except Exception as e: | CODE |
| MEDIUM | python/examples/custom_tools_agent_test.py | 198 | print("Error: OPENAI_API_KEY env var required") | CODE |
| MEDIUM⚡ | python/examples/tool_router/tool_router_mcp.py | 23 | print("Error: COMPOSIO_API_KEY environment variable not set") | CODE |
| MEDIUM⚡ | python/examples/tool_router/authorize.py | 16 | print("Error: COMPOSIO_API_KEY environment variable not set") | CODE |
| LOW | python/examples/tool_router/authorize.py | 46 | except Exception as e: | CODE |
| LOW | python/examples/tool_router/langchain_agent.py | 43 | except Exception as e: | CODE |
| MEDIUM | python/examples/tool_router/langchain_agent.py | 15 | def main(): | CODE |
| MEDIUM | python/scripts/generate-docs.py | 35 | print("Error: griffe not installed. Run: pip install griffe") | CODE |
| LOW | python/scripts/generate-docs.py | 576 | except Exception as e: | STRING |
| MEDIUM | python/scripts/generate-docs.py | 577 | print(f"Error: {e}") | STRING |
| LOW | python/scripts/bump.py | 177 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/conftest.py | 68 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/conftest.py | 112 | except Exception as e: | CODE |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 87 | except Exception as e: | CODE |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 99 | except Exception as e: | CODE |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 162 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 117 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 214 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 321 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 410 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 503 | except Exception as e: | CODE |
| LOW | python/composio/integration_test/test_mcp.py | 633 | except Exception as e: | CODE |
| LOW | python/composio/core/models/triggers.py | 615 | except Exception as e: | CODE |
| LOW | python/composio/core/models/triggers.py | 662 | except Exception as e: | CODE |
| LOW | python/composio/core/models/triggers.py | 702 | except Exception as e: | CODE |
| LOW | python/composio/core/models/triggers.py | 758 | except Exception: | CODE |
| LOW | python/composio/core/models/triggers.py | 931 | except Exception: | CODE |
| LOW⚡ | python/composio/core/models/triggers.py | 1580 | except Exception: | CODE |
| LOW | …thon/composio/core/models/tool_router_session_files.py | 44 | except Exception: | CODE |
| LOW | python/composio/core/models/custom_tool_execution.py | 74 | except Exception as e: | CODE |
| LOW | python/composio/core/models/_files.py | 181 | except Exception: | CODE |
| LOW | python/composio/core/models/mcp.py | 231 | except Exception as e: | CODE |
| LOW | python/composio/core/models/mcp.py | 289 | except Exception as e: | CODE |
| LOW | python/composio/core/models/mcp.py | 312 | except Exception as e: | CODE |
| LOW | python/composio/core/models/mcp.py | 410 | except Exception as e: | CODE |
| LOW | python/composio/core/models/mcp.py | 437 | except Exception as e: | CODE |
| LOW | python/composio/core/models/mcp.py | 497 | except Exception as e: | CODE |
| LOW | python/composio/core/models/custom_tool.py | 260 | except Exception: | CODE |
| LOW | python/composio/core/models/base.py | 56 | except Exception as e: | CODE |
| LOW | python/composio/utils/schema_converter.py | 381 | except Exception as e: | CODE |
| LOW | python/composio/utils/schema_converter.py | 410 | except Exception: | CODE |
| LOW | python/composio/client/__init__.py | 257 | except Exception: | CODE |
| LOW | …mental/src/workbench/python-helpers/composio_helper.py | 401 | except Exception as error: | CODE |
| MEDIUM | …mental/src/workbench/python-helpers/composio_helper.py | 84 | def _safe_json(text): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.sh | 301 | success "Composio CLI was installed successfully to $Bold_Green$(tildify "$exe")" | COMMENT |
| LOW | pnpm-workspace.yaml | 101 | # in 2.0.10); drop when the SDK depends on >=2.0.10 itself. | COMMENT |
| LOW | python/config/vulture_allowlist.py | 1 | # Vulture allowlist — confirmed false positives. | COMMENT |
| LOW | python/examples/triggers.py | 61 | # result = composio.triggers.verify_webhook( | COMMENT |
| LOW | python/scripts/create-provider.sh | 261 | :param modifiers: Modifiers to use for executing function calls. | COMMENT |
| LOW | python/scripts/create-provider.sh | 301 | tools = composio.tools.get( | COMMENT |
| LOW | python/scripts/create-provider.sh | 341 | # from ${PROVIDER_NAME} import ${TITLE_CASE_PROVIDER_NAME} # Import your AI client | COMMENT |
| LOW | python/scripts/create-provider.sh | 441 | toolkits=["github"] | COMMENT |
| LOW | python/composio/core/models/tool_router.py | 61 | # Type alias for MCP tag literals | COMMENT |
| LOW | docs/lib/eve-empty-module.js | 1 | // Browser stub for `node:module`. eve's bundled rolldown CJS-interop helper | COMMENT |
| LOW | .github/workflows/claude-code-doc-review.yml | 61 | # - For React components: Performance, accessibility, and best practices | COMMENT |
| LOW | .github/workflows/claude.yml | 41 | allowed_bots: "devin-ai-integration[bot],decimal-pr-bot[bot],github-actions[bot],dependabot[bot],zen-agent" | COMMENT |
| LOW | .github/workflows/claude.yml | 61 | COMMENT | |
| LOW | .github/scripts/check-orphan-ci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/scripts/check-action-repos.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/scripts/cli-release/create-or-resume-draft.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/scripts/cli-release/resolve-release-target.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/scripts/cli-release/verify-assets.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …examples/cloudflare-wrangler/worker-configuration.d.ts | 6681 | } : T; | COMMENT |
| LOW | ts/packages/core/test/AuthConfigs/authConfigs.test.ts | 101 | COMMENT | |
| LOW | ts/packages/core/test/AuthConfigs/authConfigs.test.ts | 701 | // it('should preserve ValidationError details when parsing fails', async () => { | COMMENT |
| LOW | ts/packages/core/test/AuthConfigs/authConfigs.test.ts | 721 | // }).toThrow(ValidationError); | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 741 | COMMENT | |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 761 | // tools: { | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 781 | // }; | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 801 | // it('should create a session with tools overrides with disable tools', async () => { | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 821 | // gmail: { disable: ['GMAIL_DELETE_EMAIL'] }, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 841 | // expect(mockClient.toolRouter.session.create).toHaveBeenCalledWith({ | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 861 | // tools: { | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 881 | // }); | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 901 | // overrides: undefined, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 921 | // }, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1401 | workbench: { sandboxSize: 'huge' }, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1421 | // }, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1441 | // }, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1461 | // enable_proxy_execution: true, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1481 | COMMENT | |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1501 | // }); | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1521 | // connectedAccounts: {}, | COMMENT |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 1541 | // overrides: { | COMMENT |
| LOW | …ges/core/src/types/connectedAccountAuthStates.types.ts | 521 | // SnowflakeInitiatingSchema.extend({ | COMMENT |
| LOW | ts/packages/providers/mastra/src/index.ts | 101 | : inputParams; | COMMENT |
| LOW | …es/cli-keyring/src/stores/macos-security-subprocess.ts | 121 | // If a previous composio version wrote this entry with a | COMMENT |
| LOW | …es/cli-keyring/src/stores/macos-security-subprocess.ts | 141 | // (produces a genuine allow-any ACL — the only configuration | COMMENT |
| LOW | …/packages/cli-keyring/src/stores/macos-security-ffi.ts | 461 | // (subprocess) because that is the ONLY path that reliably produces | COMMENT |
| LOW | …/packages/cli-keyring/src/stores/macos-security-ffi.ts | 481 | // produces per-binary ACLs — see the long comment block above), | COMMENT |
| LOW | ts/packages/cli/src/services/tool-file-uploads.ts | 181 | // CLI's upload path would silently exfiltrate ~/.ssh/id_rsa, ~/.aws/credentials, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/release-workflow.test.ts | 1101 | GITHUB_TOKEN: 'fake-token', | CODE |
| LOW | test/release-workflow.test.ts | 1127 | GITHUB_TOKEN: 'fake-token', | CODE |
| LOW⚡ | python/tests/test_provider.py | 863 | "for_rs": "user@example.com", | CODE |
| LOW⚡ | python/tests/test_provider.py | 872 | "for": "user@example.com", | CODE |
| LOW | python/docs/tool-router.md | 491 | ("placeholder", "{agent_scratchpad}"), | CODE |
| LOW | python/composio/sdk.py | 211 | session = composio.sessions.create(user_id="user@example.com") | STRING |
| LOW | docs/app/llms.mdx/[[...slug]]/route.ts | 201 | if (schema.format === 'email') return 'user@example.com'; | CODE |
| LOW | docs/public/openapi-v3.json | 950 | "example": "Acme Corp" | CODE |
| LOW | docs/public/openapi-v3.json | 1068 | "example": "user@example.com" | CODE |
| LOW | docs/public/openapi-v3.json | 1073 | "example": "John Doe" | CODE |
| LOW | docs/public/openapi-v3.json | 1138 | "email": "user@example.com", | CODE |
| LOW | docs/public/openapi-v3.json | 1139 | "name": "John Doe", | CODE |
| LOW | ts/docs/core-concepts.md | 77 | const userId = user.email; // e.g., "user@example.com" | CODE |
| LOW | …-tests/runtimes/node/json-schema-to-zod-v4/e2e.test.ts | 92 | name: 'Jane Doe', | CODE |
| LOW | …-tests/runtimes/node/json-schema-to-zod-v4/e2e.test.ts | 95 | { type: 'phone', value: '555-1234' }, | CODE |
| LOW | …-tests/runtimes/node/json-schema-to-zod-v3/e2e.test.ts | 93 | name: 'Jane Doe', | CODE |
| LOW | …-tests/runtimes/node/json-schema-to-zod-v3/e2e.test.ts | 96 | { type: 'phone', value: '555-1234' }, | CODE |
| LOW | ts/packages/core/test/models/customToolRouting.test.ts | 309 | await session.execute('GMAIL_SEND_EMAIL', { to: 'test@test.com' }); | CODE |
| LOW | ts/packages/core/test/models/customToolRouting.test.ts | 315 | arguments: { to: 'test@test.com' }, | CODE |
| LOW | ts/packages/core/test/models/customToolRouting.test.ts | 389 | await session.execute('CHAINED_TOOL', { to: 'test@test.com' }); | CODE |
| LOW | ts/packages/core/test/models/customToolRouting.test.ts | 395 | arguments: { to: 'test@test.com' }, | CODE |
| LOW | ts/packages/core/test/models/customToolRouting.test.ts | 555 | tools: [{ tool_slug: 'GMAIL_SEND_EMAIL', arguments: { to: 'test@test.com' } }], | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2567 | to: 'user@example.com', | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2576 | arguments: { to: 'user@example.com', subject: 'Hi', body: 'Hello' }, | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2616 | await session.execute('GMAIL_SEND_EMAIL', { to: 'user@example.com' }, { account: 'work' }); | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2622 | arguments: { to: 'user@example.com' }, | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2653 | await session.execute('GMAIL_SEND_EMAIL', { to: 'user@example.com' }); | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2659 | arguments: { to: 'user@example.com' }, | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2885 | await routingExecute('GMAIL_SEND_EMAIL', { to: 'user@example.com' }); | CODE |
| LOW | ts/packages/core/test/models/toolRouter.test.ts | 2889 | { sessionId, arguments: { to: 'user@example.com' } }, | CODE |
| LOW | ts/packages/core/test/models/customTool.test.ts | 641 | const result = await ctx.execute('GMAIL_SEND_EMAIL', { to: 'test@test.com' }); | CODE |
| LOW | ts/packages/core/test/models/customTool.test.ts | 647 | arguments: { to: 'test@test.com' }, | CODE |
| LOW | ts/packages/core/test/models/customTool.test.ts | 675 | await ctx.execute('GMAIL_SEND_EMAIL', { to: 'test@test.com' }); | CODE |
| LOW | ts/packages/core/test/models/customTool.test.ts | 681 | arguments: { to: 'test@test.com' }, | CODE |
| LOW | …on-schema-to-zod/test/comprehensive-edge-case-tests.ts | 234 | user: { name: 'John Doe', email: 'john@example.com' }, | CODE |
| LOW | ts/packages/json-schema-to-zod/test/json-to-zod.test.ts | 736 | name: 'John Doe', | CODE |
| LOW | ts/packages/json-schema-to-zod/test/json-to-zod.test.ts | 748 | name: 'John Doe', | CODE |
| LOW | ts/packages/cli/test/src/models/project-keys.test.ts | 29 | email: 'test@test.com', | CODE |
| LOW | ts/packages/cli/test/src/models/project-keys.test.ts | 39 | expect(Option.getOrUndefined(result.email)).toBe('test@test.com'); | CODE |
| LOW | ts/packages/cli/test/src/models/project-keys.test.ts | 138 | email: Option.some('test@test.com'), | CODE |
| LOW | ts/packages/cli/test/src/models/project-keys.test.ts | 149 | expect(parsed.email).toBe('test@test.com'); | CODE |
| LOW | ts/packages/cli/test/src/models/project-keys.test.ts | 186 | email: Option.some('user@example.com'), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/tests/test_auto_upload_download_files.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| HIGH | python/tests/test_gemini_provider.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| HIGH | python/tests/test_tool_execution.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| HIGH | python/tests/test_provider.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| HIGH | python/tests/test_files.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| HIGH | python/tests/test_no_retry_writes.py | 0 | disable telemetry for all tests to prevent thread issues. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/scripts/create-provider.sh | 3 | # Check if provider name is provided | COMMENT |
| LOW | python/scripts/create-provider.sh | 41 | # Check if provider directory already exists | COMMENT |
| LOW⚡ | python/composio/core/models/triggers.py | 1575 | # Check if any of the provided signatures match (timing-safe) | COMMENT |
| LOW | python/composio/core/models/tool_router_session.py | 723 | # Check if this is a local tool (by original or final slug) | COMMENT |
| LOW | python/composio/core/models/tools.py | 578 | # Check if the version is 'latest' and dangerously_skip_version_check is not True | COMMENT |
| LOW | python/composio/core/models/_modifiers.py | 627 | # Check if modifier should be applied | COMMENT |
| LOW | python/composio/core/models/_modifiers.py | 645 | # Check if modifier should be applied | COMMENT |
| LOW | python/composio/core/models/connected_accounts.py | 522 | # Check if there are multiple connected accounts for the authConfig of the user | COMMENT |
| LOW | python/composio/core/models/base.py | 28 | # Check if the method is a class method | COMMENT |
| LOW | python/composio/utils/toolkit_version.py | 73 | # Check if there are envs similar to COMPOSIO_TOOLKIT_VERSION_GITHUB then extract the toolkit name | COMMENT |
| LOW | python/composio/utils/shared.py | 384 | # Check if the field name is a reserved Pydantic name | COMMENT |
| LOW | python/composio/client/__init__.py | 104 | # Check if running in a container (generic) | COMMENT |
| LOW | .github/workflows/cli.test-installation.yml | 169 | # Check if binary exists | COMMENT |
| LOW | .github/workflows/cli.test-installation.yml | 201 | # Check if binary exists | COMMENT |
| LOW | .github/workflows/cli.test-installation.yml | 407 | # Check if binary is gone | COMMENT |
| LOW | ts/scripts/create-example.sh | 3 | # Check if example name is provided | COMMENT |
| LOW | ts/scripts/create-example.sh | 14 | # Check if example directory already exists | COMMENT |
| LOW | ts/scripts/create-provider.sh | 3 | # Check if provider name is provided | COMMENT |
| LOW | ts/scripts/create-provider.sh | 14 | # Check if provider should be agentic | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | python/composio/integration_test/test_mcp.py | 474 | # Step 1: Create MCP config | COMMENT |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 488 | # Step 2: Generate server instance | COMMENT |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 492 | # Step 3: Verify server instance | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 530 | # Step 1: CREATE MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 551 | # Step 2: GET MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 562 | # Step 3: UPDATE MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 578 | # Step 4: GET updated MCP server | COMMENT |
| LOW | .claude/commands/api-update.md | 7 | ### Step 1: Check for Open PRs | COMMENT |
| LOW⚡ | .claude/commands/api-update.md | 20 | ### Step 2: Get PR Patches | COMMENT |
| LOW⚡ | .claude/commands/api-update.md | 28 | ### Step 3: Analyze Changes | COMMENT |
| LOW⚡ | .claude/commands/api-update.md | 38 | ### Step 4: Identify SDK Impact | COMMENT |
| LOW | .claude/commands/api-update.md | 62 | ### Step 5: Check Current Client Versions | COMMENT |
| LOW | .claude/commands/api-update.md | 68 | ### Step 6: Create Update Plan | COMMENT |
| LOW | ts/docs/getting-started.md | 206 | // Step 1: Authorize the toolkit | COMMENT |
| LOW | ts/docs/getting-started.md | 212 | // Step 2: Wait for the connection to be established | COMMENT |
| LOW | ts/docs/advanced/error-handling.md | 105 | // Step 1: Authorize the toolkit | COMMENT |
| LOW | ts/docs/advanced/error-handling.md | 108 | // Step 2: Wait for the connection to be established | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/providers/google/composio_google/provider.py | 84 | CODE | |
| LOW | …iders/openai_agents/composio_openai_agents/provider.py | 17 | CODE | |
| LOW | python/tests/test_sdk.py | 21 | CODE | |
| LOW | python/tests/test_sdk.py | 32 | CODE | |
| LOW | python/tests/test_sdk.py | 80 | CODE | |
| LOW | python/tests/test_sdk.py | 99 | CODE | |
| LOW | python/tests/test_sdk.py | 113 | CODE | |
| LOW | python/tests/test_sdk.py | 148 | CODE | |
| LOW | python/tests/test_sdk.py | 177 | CODE | |
| LOW | python/scripts/generate-docs.py | 167 | CODE | |
| LOW | python/scripts/generate-docs.py | 257 | CODE | |
| LOW | python/scripts/generate-docs.py | 325 | CODE | |
| LOW | python/scripts/generate-docs.py | 561 | CODE | |
| LOW | python/composio/integration_test/conftest.py | 40 | CODE | |
| LOW | python/composio/core/models/tool_router.py | 557 | CODE | |
| LOW | python/composio/core/models/tool_router.py | 655 | CODE | |
| LOW | python/composio/core/models/_files.py | 263 | CODE | |
| LOW | python/composio/core/models/_files.py | 662 | CODE | |
| LOW | python/composio/core/models/_modifiers.py | 597 | CODE | |
| LOW | python/composio/core/models/mcp.py | 315 | CODE | |
| LOW | python/composio/core/models/custom_tool.py | 637 | CODE | |
| LOW | python/composio/core/models/connected_accounts.py | 478 | CODE | |
| LOW | python/composio/utils/schema_converter.py | 83 | CODE | |
| LOW | python/composio/utils/schema_converter.py | 282 | CODE | |
| LOW | python/composio/utils/openapi.py | 93 | CODE | |
| LOW | python/composio/utils/shared.py | 290 | CODE | |
| LOW | python/composio/utils/shared.py | 550 | CODE | |
| LOW | python/composio/utils/json_schema.py | 80 | CODE | |
| LOW | python/composio/utils/json_schema.py | 126 | CODE | |
| LOW | python/composio/utils/json_schema.py | 163 | CODE | |
| LOW | …mental/src/workbench/python-helpers/composio_helper.py | 271 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/tests/test_schema_parser.py | 913 | Test that CustomFields with anyOf [object, null] returns Dict, not str. | STRING |
| HIGH | python/tests/test_schema_parser.py | 1168 | Test that anyOf [boolean, null] with boolean default preserves types. | STRING |
| HIGH | python/tests/test_schema_parser.py | 1629 | """Nullable anyOf [type, null] continues to resolve without raising.""" | STRING |
| HIGH | python/scripts/generate-docs.py | 8 | Run: cd python && uv run --with griffe python scripts/generate-docs.py | STRING |
| HIGH | …mental/src/workbench/python-helpers/composio_helper.py | 384 | # `status` can arrive as a string or null, so coerce it before comparing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/providers/openai/composio_openai/provider.py | 8 | __all__ = ["OpenAIProvider", "OpenAIResponsesProvider"] | CODE |
| LOW | python/composio/types.py | 17 | __all__ = [ | CODE |
| LOW | python/composio/integration_test/__init__.py | 8 | __all__ = [] | CODE |
| LOW | python/composio/core/types.py | 15 | __all__ = [ | CODE |
| LOW | python/composio/core/provider/__init__.py | 7 | __all__ = [ | CODE |
| LOW | python/composio/core/provider/base.py | 72 | def set_execute_tool_fn(self, execute_tool_fn: ExecuteToolFn) -> None: | CODE |
| LOW | python/composio/core/models/triggers.py | 802 | def set_alive(self) -> None: | CODE |
| LOW | python/composio/core/models/tools.py | 761 | __all__ = [ | CODE |
| LOW | python/composio/core/models/__init__.py | 31 | __all__ = [ | CODE |
| LOW | python/composio/core/models/tool_router.py | 1291 | __all__ = [ | CODE |
| LOW | python/composio/core/models/connected_accounts.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | python/composio/utils/__init__.py | 27 | __all__ = [ | CODE |
| LOW | python/composio/utils/shared.py | 31 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | python/composio/integration_test/test_mcp.py | 474 | # Step 1: Create MCP config | COMMENT |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 488 | # Step 2: Generate server instance | COMMENT |
| LOW⚡ | python/composio/integration_test/test_mcp.py | 492 | # Step 3: Verify server instance | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 530 | # Step 1: CREATE MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 551 | # Step 2: GET MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 562 | # Step 3: UPDATE MCP server | COMMENT |
| LOW | python/composio/integration_test/test_mcp.py | 578 | # Step 4: GET updated MCP server | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .github/workflows/docs.sdk-change-sync.yml | 160 | Generated by Claude Code via GitHub Actions. | CODE |
| HIGH | .github/workflows/docs.sync-connect-clients.yml | 88 | Generated by Claude Code via GitHub Actions. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/examples/mcp.py | 31 | CODE | |
| LOW | python/composio/core/models/tool_router_session.py | 111 | CODE | |
| LOW | python/composio/core/models/tool_router_session.py | 835 | CODE | |
| LOW | python/composio/core/models/tools.py | 604 | CODE | |
| LOW | python/composio/core/models/tool_router.py | 600 | CODE | |
| LOW | python/composio/core/models/tool_router.py | 628 | CODE | |
| LOW | python/composio/core/models/tool_router.py | 655 | CODE | |
| LOW | python/composio/client/__init__.py | 135 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/claude-code-doc-review.yml | 61 | # - For React components: Performance, accessibility, and best practices | COMMENT |
| MEDIUM | .github/workflows/claude-code-doc-review.yml | 68 | # 'Please provide a thorough code review focusing on our coding standards and best practices.' }} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/composio/core/models/_files.py | 267 | Fetch file content from a URL with security protections. Security features: - Response size limiting (prevents | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | ts/packages/cli/test/__utils__/python-compiler.ts | 236 | def test_function(): | CODE |
| LOW⚡ | ts/packages/cli/test/__utils__/python-compiler.ts | 246 | def test_function(): | CODE |