Plano is an AI-native proxy server and data plane for agentic apps. Smart LLM routing, observability, agent orchestration, and guardrails so you stay focused on your agents core logic.
This report presents the forensic synthetic code analysis of katanemo/plano, a Rust project with 6,916 GitHub stars. SynthScan v2.0 examined 120,207 lines of code across 555 source files, recording 696 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 9.8 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 696 distinct pattern matches across 20 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 | crates/brightstaff/src/state/memory.rs | 387 | // Step 1: Previous state contains the initial exchange | COMMENT |
| LOW⚡ | crates/brightstaff/src/state/memory.rs | 413 | // Step 2: Current request includes function call output | COMMENT |
| LOW⚡ | crates/brightstaff/src/state/memory.rs | 422 | // Step 3: Merge should combine all conversation history | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 282 | # Step 1: Extract origin, destination, and date | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 288 | # Step 2: Short circuit if missing origin or destination | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 339 | # Step 4: Get live flight data | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 315 | # Step 3: Resolve airport codes | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 370 | # Step 5: Prepare context for LLM - append flight data to last user message | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 397 | # Step 6: Stream response | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/weather.py | 134 | # Step 2: Fetch weather data for the extracted location | COMMENT |
| LOW | cli/planoai/init_cmd.py | 251 | # Step 1: choose template (or clean) | COMMENT |
| LOW | cli/planoai/init_cmd.py | 270 | # Step 2: output path (default: config.yaml) | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 20 | # Step 3: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 30 | # Step 2: Stop Plano | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM) | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/llm_routing/codex_router/README.md | 33 | ### Step 1: Open the Demo | COMMENT |
| LOW⚡ | demos/llm_routing/codex_router/README.md | 40 | ### Step 2: Set API Keys | COMMENT |
| LOW⚡ | demos/llm_routing/codex_router/README.md | 49 | ### Step 3: Start Plano | COMMENT |
| LOW⚡ | demos/llm_routing/codex_router/README.md | 56 | ### Step 4: Launch Codex Through Plano | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 46 | ### Step 1: Get Configuration | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 53 | ### Step 2: Set API Keys | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 64 | ### Step 3: Start Plano | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 76 | ### Step 4: Launch Enhanced Claude Code | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 27 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 34 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/llm_routing/model_alias_routing/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/llm_routing/model_alias_routing/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW | demos/llm_routing/model_alias_routing/run_demo.sh | 27 | # Step 3: Start Plano | COMMENT |
| LOW | demos/llm_routing/model_alias_routing/run_demo.sh | 49 | # Step 2: Stop Plano | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 21 | # Step 3: Optionally start UI services (Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 32 | # Step 5: Start filter service natively | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/hermesllm/src/providers/request.rs | 1093 | // But we need to check if the system prompt was actually set | COMMENT |
| LOW | crates/brightstaff/src/state/memory.rs | 387 | // Step 1: Previous state contains the initial exchange | COMMENT |
| LOW⚡ | crates/brightstaff/src/state/memory.rs | 413 | // Step 2: Current request includes function call output | COMMENT |
| LOW⚡ | crates/brightstaff/src/state/memory.rs | 422 | // Step 3: Merge should combine all conversation history | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 282 | # Step 1: Extract origin, destination, and date | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 288 | # Step 2: Short circuit if missing origin or destination | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 339 | # Step 4: Get live flight data | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 315 | # Step 3: Resolve airport codes | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 370 | # Step 5: Prepare context for LLM - append flight data to last user message | COMMENT |
| LOW | docs/source/resources/includes/agents/flights.py | 397 | # Step 6: Stream response | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/weather.py | 134 | # Step 2: Fetch weather data for the extracted location | COMMENT |
| LOW | cli/planoai/init_cmd.py | 251 | # Step 1: choose template (or clean) | COMMENT |
| LOW | cli/planoai/init_cmd.py | 270 | # Step 2: output path (default: config.yaml) | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/advanced/currency_exchange/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 20 | # Step 3: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/model_choice_test_harness/run_demo.sh | 30 | # Step 2: Stop Plano | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM) | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/advanced/multi_turn_rag/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/advanced/stock_quote/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 27 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/llm_routing/preference_based_routing/run_demo.sh | 34 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/llm_routing/model_alias_routing/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/llm_routing/model_alias_routing/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW | demos/llm_routing/model_alias_routing/run_demo.sh | 27 | # Step 3: Start Plano | COMMENT |
| LOW | demos/llm_routing/model_alias_routing/run_demo.sh | 49 | # Step 2: Stop Plano | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/http_filter/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 21 | # Step 3: Optionally start UI services (Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/pii_anonymizer/run_demo.sh | 32 | # Step 5: Start filter service natively | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/filter_chains/mcp_filter/run_demo.sh | 32 | # Step 5: Start agents natively | COMMENT |
| LOW⚡ | demos/integrations/spotify_bearer_auth/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/integrations/spotify_bearer_auth/run_demo.sh | 10 | # Step 2: Create `.env` file and set OpenAI key | COMMENT |
| LOW⚡ | demos/integrations/spotify_bearer_auth/run_demo.sh | 21 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| LOW⚡ | demos/integrations/spotify_bearer_auth/run_demo.sh | 28 | # Step 4: Start Plano | COMMENT |
| LOW⚡ | demos/integrations/ollama/run_demo.sh | 6 | # Step 1: Check if .env file exists | COMMENT |
| LOW⚡ | demos/integrations/ollama/run_demo.sh | 10 | # Step 2: Create `.env` file and set API keys | COMMENT |
| LOW⚡ | demos/integrations/ollama/run_demo.sh | 27 | # Step 3: Optionally start UI services (AnythingLLM, Jaeger) | COMMENT |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/archgw/test_prompt_gateway.py | 14 | def httpserver_listen_address(): | CODE |
| LOW | tests/archgw/test_prompt_gateway.py | 25 | def normalize_tool_call_arguments(tool_call): | CODE |
| LOW⚡ | tests/e2e/test_model_alias_routing.py | 25 | def test_assistant_message_with_null_content_and_tool_calls(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 200 | def test_openai_client_with_alias_streaming(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 234 | def test_anthropic_client_with_alias_streaming(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 429 | def test_anthropic_thinking_mode_streaming(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 484 | def test_openai_client_with_coding_model_alias_and_tools(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 534 | def test_anthropic_client_with_coding_model_alias_and_tools(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 582 | def test_anthropic_client_with_coding_model_alias_and_tools_streaming(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 677 | def test_anthropic_client_streaming_with_bedrock(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 718 | def test_openai_client_streaming_with_bedrock(): | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 757 | def test_openai_client_streaming_with_bedrock_and_tools(): | CODE |
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 20 | def test_conversation_state_management_two_turn(): | CODE |
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 106 | def test_conversation_state_management_two_turn_streaming(): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 27 | def normalize_tool_call_arguments(tool_call): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 143 | def test_prompt_gateway_arch_direct_response(stream): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 186 | def test_prompt_gateway_param_gathering(stream): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 229 | def test_prompt_gateway_param_tool_call(stream): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 310 | def test_prompt_gateway_default_target(stream): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 354 | def test_prompt_gateway_prompt_guard_jailbreak(stream): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 439 | def test_anthropic_client_with_openai_model_streaming(): | CODE |
| LOW | tests/e2e/test_prompt_gateway.py | 527 | def test_openai_client_with_claude_model_streaming(): | CODE |
| LOW⚡ | tests/e2e/test_openai_responses_api_client.py | 23 | def test_openai_responses_api_non_streaming_passthrough(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 47 | def test_openai_responses_api_with_streaming_passthrough(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 92 | def test_openai_responses_api_non_streaming_with_tools_passthrough(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 124 | def test_openai_responses_api_with_streaming_with_tools_passthrough(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 179 | def test_openai_responses_api_non_streaming_upstream_chat_completions(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 198 | def test_openai_responses_api_with_streaming_upstream_chat_completions(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 243 | def test_openai_responses_api_non_streaming_with_tools_upstream_chat_completions(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 275 | def test_openai_responses_api_streaming_with_tools_upstream_chat_completions(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 331 | def test_openai_responses_api_non_streaming_upstream_bedrock(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 352 | def test_openai_responses_api_with_streaming_upstream_bedrock(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 398 | def test_openai_responses_api_non_streaming_with_tools_upstream_bedrock(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 431 | def test_openai_responses_api_streaming_with_tools_upstream_bedrock(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 486 | def test_openai_responses_api_non_streaming_upstream_anthropic(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 505 | def test_openai_responses_api_with_streaming_upstream_anthropic(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 550 | def test_openai_responses_api_non_streaming_with_tools_upstream_anthropic(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 582 | def test_openai_responses_api_streaming_with_tools_upstream_anthropic(): | CODE |
| LOW | tests/e2e/test_openai_responses_api_client.py | 637 | def test_openai_responses_api_mixed_content_types(): | CODE |
| LOW | cli/test/test_config_generator.py | 20 | def test_validate_and_render_happy_path(monkeypatch): | CODE |
| LOW | cli/test/test_config_generator.py | 83 | def test_validate_and_render_happy_path_agent_config(monkeypatch): | STRING |
| LOW | cli/test/test_config_generator.py | 444 | def test_validate_and_render_schema_tests(monkeypatch, plano_config_test_case): | STRING |
| LOW | cli/test/test_config_generator.py | 489 | def test_convert_legacy_llm_providers(): | STRING |
| LOW | cli/test/test_config_generator.py | 559 | def test_convert_legacy_llm_providers_no_prompt_gateway(): | STRING |
| LOW | cli/test/test_config_generator.py | 612 | def test_inline_routing_preferences_migrated_to_top_level(): | STRING |
| LOW | cli/test/test_config_generator.py | 656 | def test_inline_same_name_across_providers_merges_models(): | STRING |
| LOW | cli/test/test_config_generator.py | 692 | def test_existing_top_level_routing_preferences_preserved(): | STRING |
| LOW | cli/test/test_config_generator.py | 722 | def test_existing_top_level_wins_over_inline_migration(): | STRING |
| LOW | cli/test/test_config_generator.py | 754 | def test_wildcard_with_inline_routing_preferences_errors(): | STRING |
| LOW | cli/test/test_config_generator.py | 777 | def test_migration_bumps_version_even_without_inline_preferences(): | STRING |
| LOW | cli/test/test_config_generator.py | 826 | def test_migration_does_not_downgrade_newer_versions(): | STRING |
| LOW | cli/test/test_config_generator.py | 860 | def test_apply_kimi_code_provider_defaults_injects_user_agent(): | STRING |
| LOW | cli/test/test_obs_pricing.py | 18 | def test_lookup_matches_bare_and_prefixed(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 31 | def test_cost_computation_without_cache(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 39 | def test_cost_computation_with_cached_discount(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 52 | def test_empty_catalog_returns_none(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 56 | def test_parse_do_catalog_treats_small_values_as_per_token(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 86 | def test_anthropic_aliases_match_plano_emitted_names(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 129 | def test_parse_do_catalog_divides_large_values_as_per_million(): | CODE |
| LOW | cli/test/test_obs_pricing.py | 173 | def test_parse_models_dev_composes_provider_keys_and_per_token_rates(): | CODE |
| 99 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/e2e/test_model_alias_routing.py | 20 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/e2e/test_model_alias_routing.py | 22 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/e2e/test_model_alias_routing.py | 375 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/e2e/test_model_alias_routing.py | 377 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/e2e/test_openai_responses_api_client.py | 20 | # ----------------------- | COMMENT |
| MEDIUM⚡ | tests/e2e/test_openai_responses_api_client.py | 22 | # ----------------------- | COMMENT |
| MEDIUM⚡ | .github/workflows/ci.yml | 17 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | .github/workflows/ci.yml | 19 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | .github/workflows/ci.yml | 27 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | .github/workflows/ci.yml | 29 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 56 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 58 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 160 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 162 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 201 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 203 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 221 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 223 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 265 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 267 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 315 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 317 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 365 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 367 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 415 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 417 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 480 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 482 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 532 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 534 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | apps/www/src/utils/asciiBuilder.ts | 100 | // Line 20: bottom ╚══════╝ | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 8 | # ── Wait for Plano to be ready ────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 22 | # ── Helper ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 44 | # ── /v1/chat/completions ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 72 | # ── /v1/responses ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 91 | # ── /v1/messages (Anthropic) ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/pii_anonymizer/test.sh | 113 | # ── Summary ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/model_listener_filter/test.sh | 8 | # ── Wait for Plano to be ready ────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/model_listener_filter/test.sh | 22 | # ── Helper ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/model_listener_filter/test.sh | 60 | # ── Tests ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | demos/filter_chains/model_listener_filter/test.sh | 82 | # ── Summary ────────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 37 | **Jump to our [docs](https://docs.planoai.dev)** to learn how you can use Plano to improve the speed, safety and obervab | CODE |
| MEDIUM | README.md | 185 | - **[Filter Chains](https://docs.planoai.dev/concepts/filter_chain.html)** - Add guardrails, moderation, and memory hook | CODE |
| MEDIUM | crates/hermesllm/src/apis/amazon_bedrock.rs | 337 | /// Trace information for guardrails | COMMENT |
| MEDIUM | crates/brightstaff/src/app_state.rs | 34 | /// When false, agentic signal analysis is skipped on LLM responses to save CPU. | COMMENT |
| MEDIUM | …ce/resources/includes/plano_config_full_reference.yaml | 158 | # Prompt targets for function calling and API orchestration | COMMENT |
| MEDIUM⚡ | …ce/resources/includes/plano_config_full_reference.yaml | 204 | # Trim conversation history to fit within the model's context window | COMMENT |
| MEDIUM⚡ | …ce/resources/includes/plano_config_full_reference.yaml | 206 | # Use Plano's agent orchestrator for multi-agent request routing | COMMENT |
| MEDIUM⚡ | …ce/resources/includes/plano_config_full_reference.yaml | 214 | # Model used for agent orchestration (must be listed in model_providers) | COMMENT |
| MEDIUM⚡ | …ce/resources/includes/plano_config_full_reference.yaml | 216 | # Disable agentic signal analysis (frustration, repetition, escalation, etc.) | COMMENT |
| MEDIUM⚡ | …ce/resources/includes/plano_config_full_reference.yaml | 220 | # Model affinity — pin routing decisions for agentic loops | COMMENT |
| MEDIUM | …ce/resources/includes/plano_config_full_reference.yaml | 240 | # Input guardrails applied globally to all incoming requests | COMMENT |
| MEDIUM | skills/test-cases.json | 232 | "input": "filters:\n - id: context_builder\n url: http://host.docker.internal:10502 # Runs expensive RAG re | CODE |
| MEDIUM | skills/AGENTS.md | 984 | url: http://host.docker.internal:10502 # Runs expensive RAG retrieval first | CODE |
| MEDIUM | skills/AGENTS.md | 1500 | # Initialize a RAG with guardrails project | COMMENT |
| MEDIUM | skills/AGENTS.md | 1500 | # Initialize a RAG with guardrails project | COMMENT |
| MEDIUM | skills/AGENTS.md | 1876 | # --- Listener 3: Agent orchestration gateway --- | COMMENT |
| MEDIUM | skills/rules/advanced-multi-listener.md | 66 | # --- Listener 3: Agent orchestration gateway --- | COMMENT |
| MEDIUM | skills/rules/filter-ordering.md | 24 | url: http://host.docker.internal:10502 # Runs expensive RAG retrieval first | CODE |
| MEDIUM | skills/rules/cli-init.md | 31 | # Initialize a RAG with guardrails project | COMMENT |
| MEDIUM | skills/rules/cli-init.md | 31 | # Initialize a RAG with guardrails project | COMMENT |
| MEDIUM | apps/www/src/lib/metadata.ts | 90 | // Emerging trends (A2A, agentic RAG) | COMMENT |
| MEDIUM | demos/advanced/multi_turn_rag/README.md | 1 | # Multi-Turn Agentic Demo (RAG) | COMMENT |
| MEDIUM | demos/llm_routing/openclaw_routing/config.yaml | 15 | # Great for general conversation, agentic tasks, and multimodal work | COMMENT |
| MEDIUM | demos/filter_chains/http_filter/README.md | 1 | # RAG Agent Demo | COMMENT |
| MEDIUM | demos/filter_chains/http_filter/README.md | 28 | ### RAG Agent (REST/OpenAI) | COMMENT |
| MEDIUM | demos/filter_chains/http_filter/sample_queries.md | 1 | # Sample Queries for Knowledge Base RAG Agent | COMMENT |
| MEDIUM | demos/filter_chains/mcp_filter/README.md | 1 | # RAG Agent Demo | COMMENT |
| MEDIUM | demos/filter_chains/mcp_filter/README.md | 31 | ### RAG Agent (REST/OpenAI) | COMMENT |
| MEDIUM | demos/filter_chains/mcp_filter/sample_queries.md | 1 | # Sample Queries for Knowledge Base RAG Agent | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | docs/source/resources/includes/agents/flights.py | 78 | 4. Return JSON: {"origin": "City" or null, "destination": "City" or null, "date": "YYYY-MM-DD" or null} | CODE |
| HIGH⚡ | docs/source/resources/includes/agents/flights.py | 82 | - "What flights go to New York?" -> {"origin": null, "destination": "New York", "date": null} | CODE |
| HIGH⚡ | docs/source/resources/includes/agents/flights.py | 83 | - "Flights to Miami on Christmas" -> {"origin": null, "destination": "Miami", "date": "2025-12-25"} | CODE |
| HIGH | docs/source/resources/includes/agents/flights.py | 53 | - "terminal_origin": Departure terminal (may be null) | CODE |
| HIGH | docs/source/resources/includes/agents/flights.py | 54 | - "gate_origin": Departure gate (may be null) | CODE |
| HIGH | docs/source/resources/includes/agents/weather.py | 333 | Remember: Only use the provided data. If fields are null, mention data is unavailable.""" | CODE |
| HIGH | …ration/travel_agents/src/travel_agents/flight_agent.py | 40 | - terminal_origin/gate_origin: Departure terminal and gate (may be null) | CODE |
| HIGH⚡ | …ration/travel_agents/src/travel_agents/flight_agent.py | 59 | Output format: {"cities": ["City1", "City2", ...], "date": "YYYY-MM-DD" or null} | CODE |
| HIGH⚡ | …ration/travel_agents/src/travel_agents/flight_agent.py | 63 | - "Seattle to Dubai to Lahore" → {"cities": ["Seattle", "Dubai", "Lahore"], "date": null} | CODE |
| HIGH⚡ | …ration/travel_agents/src/travel_agents/flight_agent.py | 64 | - "Flights from LA through Chicago to NYC" → {"cities": ["LA", "Chicago", "NYC"], "date": null} | CODE |
| HIGH | …ation/travel_agents/src/travel_agents/weather_agent.py | 348 | Remember: Only use the provided data. If fields are null, mention data is unavailable.""" | CODE |
| HIGH | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 272 | Remember: Only use the provided data. If fields are null, mention data is unavailable.""" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/hermesllm/src/lib.rs | 121 | COMMENT | |
| LOW | crates/hermesllm/src/clients/lib.rs | 1 | //! Helper functions and utilities for API transformations | COMMENT |
| LOW | crates/hermesllm/src/apis/openai_responses.rs | 181 | COMMENT | |
| LOW | crates/hermesllm/src/apis/openai_responses.rs | 601 | id: String, | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 61 | } | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 81 | #[serde(rename = "toolConfig")] | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 521 | #[derive(Serialize, Deserialize, Debug, Clone)] | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 601 | pub name: String, | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 621 | COMMENT | |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 701 | #[serde(rename = "totalTokens")] | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 721 | COMMENT | |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 741 | #[serde(rename = "modelOutput")] | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 861 | /// Stream metrics | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 881 | // PROMPT MANAGEMENT | COMMENT |
| LOW | crates/hermesllm/src/apis/anthropic.rs | 381 | None => {} | COMMENT |
| LOW | crates/hermesllm/src/apis/openai.rs | 581 | #[derive(Serialize, Deserialize, Debug, Clone)] | COMMENT |
| LOW | …esllm/src/apis/streaming_shapes/sse_chunk_processor.rs | 1 | use crate::apis::streaming_shapes::sse::{ | COMMENT |
| LOW | …esllm/src/apis/streaming_shapes/sse_chunk_processor.rs | 41 | Err(_) => false, | COMMENT |
| LOW | …esllm/src/apis/streaming_shapes/sse_chunk_processor.rs | 81 | /// | COMMENT |
| LOW | …esllm/src/apis/streaming_shapes/sse_chunk_processor.rs | 101 | // bytes after the final `\n` form a partial line that may be split across | COMMENT |
| LOW | …esllm/src/apis/streaming_shapes/sse_chunk_processor.rs | 261 | // Captured GPT-5.6 Responses-API SSE stream (direct from backend, streams fine). | COMMENT |
| LOW | crates/hermesllm/src/apis/streaming_shapes/sse.rs | 21 | /// For example, Anthropic buffers inject ContentBlockStart before the first ContentBlockDelta. | COMMENT |
| LOW | …rc/apis/streaming_shapes/anthropic_streaming_buffer.rs | 1 | use crate::apis::anthropic::{ | COMMENT |
| LOW | …rc/apis/streaming_shapes/anthropic_streaming_buffer.rs | 381 | // Convert all accumulated events to bytes and clear buffer. | COMMENT |
| LOW | crates/hermesllm/src/bin/fetch_models.rs | 1 | // Fetch latest provider models from canonical provider APIs and merge into | COMMENT |
| LOW | crates/hermesllm/src/providers/streaming_response.rs | 41 | SupportedUpstreamAPIs::OpenAIResponsesAPI(_), | COMMENT |
| LOW | crates/hermesllm/src/providers/id.rs | 101 | /// of gateway provider, the underlying model family, and the upstream API shape — not | COMMENT |
| LOW | crates/hermesllm/src/providers/id.rs | 221 | SupportedUpstreamAPIs::OpenAIResponsesAPI(_) => CacheMarkerStrategy::Automatic, | COMMENT |
| LOW | …c/transforms/response_streaming/to_openai_streaming.rs | 21 | // # Architecture Separation | COMMENT |
| LOW | crates/common/src/configuration.rs | 261 | /// (b) derives an implicit session key from the stable prompt prefix so follow-up | COMMENT |
| LOW | crates/common/src/configuration.rs | 281 | } | COMMENT |
| LOW | crates/common/src/configuration.rs | 301 | pub struct RoutingBudget { | COMMENT |
| LOW | crates/common/src/configuration.rs | 441 | /// event format and streamed in addition to any `opentracing_grpc_endpoint`. | COMMENT |
| LOW | crates/common/src/configuration.rs | 461 | /// `$ai_generation` events and POSTed to the configured `url`. | COMMENT |
| LOW | crates/common/src/traces/span_builder.rs | 1 | use super::shapes::{Attribute, AttributeValue, Span}; | COMMENT |
| LOW | crates/common/src/traces/span_builder.rs | 21 | /// use common::traces::{SpanBuilder, SpanKind}; | COMMENT |
| LOW | crates/brightstaff/src/affinity.rs | 1 | //! Implicit session-affinity key derivation. | COMMENT |
| LOW | crates/brightstaff/src/metrics/mod.rs | 1 | //! Prometheus metrics for brightstaff. | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 21 | /// Provider-qualified model that handled the latest request (e.g. `openai/gpt-4o`). | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 41 | #[serde(default = "SystemTime::now", with = "epoch_secs")] | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 61 | /// Bounded most-recent-first-ish record of the models this session has been | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 81 | /// Provider-qualified model id (e.g. `openai/gpt-4o`). | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 1 | /// OpenTelemetry Semantic Conventions | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 41 | } | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 161 | /// Caller identity used to populate downstream observability `distinct_id` | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 201 | /// Tokens the switch candidate still has cached from an earlier visit this session | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 281 | /// Agent execution | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 301 | /// let op = OperationNameBuilder::new() | COMMENT |
| LOW | crates/brightstaff/src/tracing/posthog_exporter.rs | 1 | //! PostHog Span Exporter | COMMENT |
| LOW | crates/brightstaff/src/tracing/service_name_exporter.rs | 1 | //! Service Name Override Exporter | COMMENT |
| LOW | crates/brightstaff/src/tracing/mod.rs | 21 | /// OpenTelemetry span, which allows observability backends to filter and group | COMMENT |
| LOW | crates/brightstaff/src/bin/signals_replay.rs | 1 | //! `signals-replay` — batch driver for the `brightstaff` signal analyzer. | COMMENT |
| LOW | crates/brightstaff/src/signals/analyzer.rs | 21 | use super::text_processing::NormalizedMessage; | COMMENT |
| LOW | crates/brightstaff/src/signals/analyzer.rs | 301 | COMMENT | |
| LOW | crates/brightstaff/src/signals/mod.rs | 1 | //! Plano signals: behavioral quality indicators for agent interactions. | COMMENT |
| LOW | crates/brightstaff/src/signals/schemas.rs | 1 | //! Data shapes for the signal analyzer. | COMMENT |
| LOW | crates/brightstaff/src/handlers/llm/prompt_caching.rs | 1 | //! Prompt-caching request handling for the LLM path. | COMMENT |
| LOW | crates/brightstaff/src/handlers/llm/session_router.rs | 1 | //! Session-cache-aware routing. | COMMENT |
| LOW | crates/brightstaff/src/handlers/llm/session_router.rs | 41 | use crate::tracing::plano as tracing_plano; | COMMENT |
| LOW | crates/brightstaff/src/handlers/llm/session_router.rs | 881 | (d.switch_spend_usd - 0.02).abs() < 1e-6, | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/parity/signals/run_parity.py | 255 | except Exception as e: | CODE |
| LOW | tests/parity/signals/run_parity.py | 273 | except Exception: | CODE |
| LOW | tests/parity/signals/run_parity.py | 287 | except Exception: | CODE |
| LOW⚡ | tests/e2e/test_model_alias_routing.py | 370 | except Exception as e: | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 295 | except Exception as e: | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 336 | except Exception as e: | CODE |
| LOW | tests/e2e/test_model_alias_routing.py | 646 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/flights.py | 119 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/flights.py | 151 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/flights.py | 257 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/flights.py | 418 | except Exception as e: | CODE |
| LOW⚡ | docs/source/resources/includes/agents/weather.py | 128 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/weather.py | 247 | except Exception as e: | CODE |
| LOW | docs/source/resources/includes/agents/weather.py | 369 | except Exception as e: | CODE |
| LOW | cli/planoai/trace_cmd.py | 150 | except Exception: | CODE |
| MEDIUM | cli/planoai/native_binaries.py | 134 | print("Error: Could not find envoy binary in the downloaded archive.") | CODE |
| MEDIUM | cli/planoai/native_binaries.py | 143 | print("Error: Could not extract envoy binary from archive.") | CODE |
| MEDIUM | cli/planoai/native_binaries.py | 299 | print(f"Error: WASM plugins not found: {', '.join(missing)}") | CODE |
| MEDIUM | cli/planoai/native_binaries.py | 321 | print(f"Error: brightstaff binary not found at {brightstaff_path}") | CODE |
| LOW | cli/planoai/obs_cmd.py | 54 | except Exception as exc: # noqa: BLE001 — config is optional for obs | CODE |
| LOW | cli/planoai/utils.py | 81 | except Exception as e: | CODE |
| LOW | cli/planoai/chatgpt_cmd.py | 37 | except Exception as e: | CODE |
| LOW | cli/planoai/chatgpt_auth.py | 76 | except Exception: | CODE |
| LOW | cli/planoai/config_generator.py | 222 | except Exception as e: | CODE |
| LOW | cli/planoai/config_generator.py | 698 | except Exception as e: | CODE |
| LOW | cli/planoai/main.py | 142 | except Exception as e: | CODE |
| LOW | cli/planoai/main.py | 407 | except Exception as e: | CODE |
| LOW | cli/planoai/main.py | 503 | except Exception as e: | CODE |
| LOW | cli/planoai/main.py | 710 | except Exception as e: | CODE |
| LOW | cli/planoai/obs/pricing.py | 84 | except Exception as exc: # noqa: BLE001 — best-effort; never fatal | CODE |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 73 | except Exception as e: | CODE |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 122 | except Exception as e: | CODE |
| LOW | …er_chains/http_filter/src/rag_agent/context_builder.py | 58 | except Exception as e: | CODE |
| LOW | …er_chains/http_filter/src/rag_agent/context_builder.py | 133 | except Exception as e: | CODE |
| MEDIUM | …os/filter_chains/http_filter/src/rag_agent/__init__.py | 50 | print(f"Error: Unknown agent '{agent}'") | CODE |
| MEDIUM | …os/filter_chains/http_filter/src/rag_agent/__init__.py | 72 | print(f"Error: Agent '{agent}' does not support REST server mode.") | CODE |
| MEDIUM | …os/filter_chains/http_filter/src/rag_agent/__init__.py | 81 | print(f"Error: Agent '{agent}' does not support MCP mode.") | CODE |
| LOW | …s/filter_chains/http_filter/src/rag_agent/rag_agent.py | 166 | except Exception as e: | CODE |
| LOW | …lter_chains/mcp_filter/src/rag_agent/query_rewriter.py | 72 | except Exception as e: | CODE |
| LOW | …filter_chains/mcp_filter/src/rag_agent/input_guards.py | 117 | except Exception as e: | CODE |
| LOW | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 54 | except Exception as e: | CODE |
| LOW | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 133 | except Exception as e: | CODE |
| MEDIUM | …mos/filter_chains/mcp_filter/src/rag_agent/__init__.py | 50 | print(f"Error: Unknown agent '{agent}'") | CODE |
| MEDIUM | …mos/filter_chains/mcp_filter/src/rag_agent/__init__.py | 72 | print(f"Error: Agent '{agent}' does not support REST server mode.") | CODE |
| MEDIUM | …mos/filter_chains/mcp_filter/src/rag_agent/__init__.py | 81 | print(f"Error: Agent '{agent}' does not support MCP mode.") | CODE |
| LOW | …os/filter_chains/mcp_filter/src/rag_agent/rag_agent.py | 168 | except Exception as e: | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 103 | except Exception as e: | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 135 | except Exception as e: | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 225 | except Exception as e: | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 373 | except Exception as e: | CODE |
| LOW⚡ | …ation/travel_agents/src/travel_agents/weather_agent.py | 131 | except Exception as e: | CODE |
| LOW | …ation/travel_agents/src/travel_agents/weather_agent.py | 250 | except Exception as e: | CODE |
| LOW | …ation/travel_agents/src/travel_agents/weather_agent.py | 386 | except Exception as e: | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 225 | except Exception as e: | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 315 | except Exception as e: | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 370 | except Exception as e: | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 396 | except Exception as e: | CODE |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 108 | except Exception as e: | CODE |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 228 | except Exception as e: | CODE |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 348 | except Exception as e: | CODE |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/parity/signals/_smoke_test.py | 10 | CODE | |
| LOW | tests/parity/signals/run_parity.py | 18 | CODE | |
| LOW | tests/parity/signals/compare.py | 9 | CODE | |
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 2 | CODE | |
| LOW | docs/source/resources/includes/agents/flights.py | 10 | CODE | |
| LOW | docs/source/resources/includes/agents/weather.py | 11 | CODE | |
| LOW | docs/source/_ext/llms_txt.py | 1 | CODE | |
| LOW | docs/source/_ext/provider_models.py | 3 | CODE | |
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 1 | CODE | |
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 2 | CODE | |
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 4 | CODE | |
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 7 | CODE | |
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 8 | CODE | |
| LOW | cli/test/test_obs_collector.py | 3 | CODE | |
| LOW | cli/test/test_version_check.py | 1 | CODE | |
| LOW | cli/test/test_version_check.py | 3 | CODE | |
| LOW | cli/test/test_version_check.py | 3 | CODE | |
| LOW | cli/planoai/template_sync.py | 1 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 5 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 6 | CODE | |
| LOW | cli/planoai/obs_cmd.py | 3 | CODE | |
| LOW | cli/planoai/utils.py | 1 | CODE | |
| LOW | cli/planoai/defaults.py | 14 | CODE | |
| LOW | cli/planoai/obs/render.py | 3 | CODE | |
| LOW | cli/planoai/obs/collector.py | 3 | CODE | |
| LOW | cli/planoai/obs/__init__.py | 3 | CODE | |
| LOW | cli/planoai/obs/__init__.py | 3 | CODE | |
| LOW | cli/planoai/obs/__init__.py | 3 | CODE | |
| LOW | cli/planoai/obs/__init__.py | 4 | CODE | |
| LOW | cli/planoai/obs/pricing.py | 8 | CODE | |
| LOW | demos/advanced/multi_turn_rag/main.py | 1 | CODE | |
| LOW | demos/advanced/multi_turn_rag/main.py | 2 | CODE | |
| LOW | demos/advanced/multi_turn_rag/main.py | 4 | CODE | |
| LOW | demos/advanced/multi_turn_rag/main.py | 7 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 1 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 3 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 4 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 4 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 5 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 6 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 11 | CODE | |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 11 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 1 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 3 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 5 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 6 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 13 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 13 | CODE | |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 14 | CODE | |
| LOW | …er_chains/http_filter/src/rag_agent/context_builder.py | 2 | CODE | |
| LOW | …s/filter_chains/http_filter/src/rag_agent/rag_agent.py | 10 | CODE | |
| LOW | …s/filter_chains/http_filter/src/rag_agent/rag_agent.py | 12 | CODE | |
| LOW | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 1 | CODE | |
| LOW | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 2 | CODE | |
| LOW | …os/filter_chains/mcp_filter/src/rag_agent/rag_agent.py | 10 | CODE | |
| LOW | …os/filter_chains/mcp_filter/src/rag_agent/rag_agent.py | 12 | CODE | |
| LOW | …ation/travel_agents/src/travel_agents/weather_agent.py | 11 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/parity/signals/compare.py | 168 | CODE | |
| LOW | tests/e2e/test_model_alias_routing.py | 429 | CODE | |
| LOW | tests/e2e/test_model_alias_routing.py | 582 | CODE | |
| LOW | tests/e2e/test_model_alias_routing.py | 677 | CODE | |
| LOW | tests/e2e/test_model_alias_routing.py | 757 | CODE | |
| LOW | cli/test/test_config_generator.py | 444 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 123 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 431 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 647 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 767 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 779 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 937 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 348 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 463 | CODE | |
| LOW | cli/planoai/native_runner.py | 309 | CODE | |
| LOW | cli/planoai/native_binaries.py | 49 | CODE | |
| LOW | cli/planoai/native_binaries.py | 92 | CODE | |
| LOW | cli/planoai/core.py | 49 | CODE | |
| LOW | cli/planoai/obs_cmd.py | 28 | CODE | |
| LOW | cli/planoai/utils.py | 171 | CODE | |
| LOW | cli/planoai/chatgpt_auth.py | 178 | CODE | |
| LOW | cli/planoai/config_generator.py | 98 | CODE | |
| LOW | cli/planoai/config_generator.py | 202 | CODE | |
| LOW | cli/planoai/main.py | 356 | CODE | |
| LOW | cli/planoai/main.py | 589 | CODE | |
| LOW | cli/planoai/obs/collector.py | 219 | CODE | |
| LOW | cli/planoai/obs/pricing.py | 186 | CODE | |
| LOW | cli/planoai/obs/pricing.py | 389 | CODE | |
| LOW | demos/filter_chains/pii_anonymizer/store.py | 59 | CODE | |
| LOW | demos/filter_chains/pii_anonymizer/store.py | 92 | CODE | |
| LOW | …s/filter_chains/model_listener_filter/content_guard.py | 50 | CODE | |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 49 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/archgw/test_prompt_gateway.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/e2e/test_model_alias_routing.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/e2e/test_openai_responses_api_client.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | docs/source/resources/includes/agents/flights.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | docs/source/resources/includes/agents/weather.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | cli/planoai/obs_cmd.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | cli/planoai/main.py | 533 | def _update_progress(message: str) -> None: | CODE |
| LOW | cli/planoai/obs/__init__.py | 6 | __all__ = ["LLMCall", "LLMCallStore", "ObsCollector", "PricingCatalog"] | CODE |
| LOW | cli/planoai/obs/pricing.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | demos/shared/test_runner/test_demos.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ter_chains/http_filter/src/rag_agent/query_rewriter.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ilter_chains/http_filter/src/rag_agent/input_guards.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | …er_chains/http_filter/src/rag_agent/context_builder.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/filter_chains/http_filter/src/rag_agent/rag_agent.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | demos/filter_chains/pii_anonymizer/store.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | demos/filter_chains/pii_anonymizer/pii_anonymizer.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | …lter_chains/mcp_filter/src/rag_agent/query_rewriter.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | …filter_chains/mcp_filter/src/rag_agent/input_guards.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …os/filter_chains/mcp_filter/src/rag_agent/rag_agent.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/filter_chains/model_listener_filter/content_guard.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ation/travel_agents/src/travel_agents/weather_agent.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 27 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/source/resources/includes/agents/flights.py | 0 | http endpoint for chat completions with streaming support. | STRING |
| HIGH | docs/source/resources/includes/agents/weather.py | 0 | http endpoint for chat completions with streaming support. | STRING |
| HIGH | …s/filter_chains/http_filter/src/rag_agent/rag_agent.py | 0 | http endpoint for chat completions with streaming support. | STRING |
| HIGH | …os/filter_chains/mcp_filter/src/rag_agent/rag_agent.py | 0 | http endpoint for chat completions with streaming support. | STRING |
| HIGH | …ation/travel_agents/src/travel_agents/weather_agent.py | 0 | http endpoint for chat completions with streaming support. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | config/grafana/prometheus_scrape.yaml | 17 | # This file is unrelated to demos/llm_routing/model_routing_service/prometheus.yaml, | COMMENT |
| MEDIUM | tests/e2e/test_openai_responses_api_client.py | 97 | # Define a simple tool/function for the Responses API | COMMENT |
| MEDIUM | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 13 | # Define the request model | COMMENT |
| MEDIUM | cli/planoai/trace_cmd.py | 375 | # Create the group if needed. | COMMENT |
| MEDIUM | demos/advanced/multi_turn_rag/main.py | 12 | # Define the request model | COMMENT |
| MEDIUM | …er_chains/http_filter/src/rag_agent/context_builder.py | 75 | # Create a system prompt for passage selection | COMMENT |
| MEDIUM | …ter_chains/mcp_filter/src/rag_agent/context_builder.py | 71 | # Create a system prompt for passage selection | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 72 | # Check if the model acknowledges receiving multiple messages | COMMENT |
| LOW | …sts/e2e/test_openai_responses_api_client_with_state.py | 189 | # Check if the model acknowledges receiving multiple messages | COMMENT |
| LOW⚡ | docs/source/resources/includes/agents/flights.py | 346 | # Check if there's a specific error message (e.g., date too far in future) | COMMENT |
| LOW | cli/planoai/trace_cmd.py | 549 | # Check if the requested port is already in use. | COMMENT |
| LOW | cli/planoai/native_runner.py | 259 | # Check if processes are still alive | COMMENT |
| LOW | cli/planoai/native_runner.py | 415 | os.kill(pid, 0) # Check if still alive | CODE |
| LOW | cli/planoai/native_binaries.py | 98 | # Check if cached binary matches the pinned version | COMMENT |
| LOW | cli/planoai/core.py | 99 | # Check if timeout is reached | COMMENT |
| LOW | cli/planoai/config_generator.py | 379 | # Check if this is a wildcard model (provider/*) | COMMENT |
| LOW | cli/planoai/config_generator.py | 405 | # Check if this is a wildcard (provider/*) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/hermesllm/src/apis/anthropic.rs | 1592 | "text": "\nYou are an interactive CLI tool that helps users with software engineering tasks. Use the | CODE |
| MEDIUM | docs/source/conf.py | 53 | # Allow importing extensions from docs/source/_ext (robust to current working directory) | COMMENT |
| LOW | …lter_chains/mcp_filter/src/rag_agent/query_rewriter.py | 45 | # Prepare messages for the query rewriter - just add system prompt to existing messages | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/source/resources/includes/agents/flights.py | 266 | async def handle_request(request: Request): | CODE |
| LOW | docs/source/resources/includes/agents/weather.py | 263 | async def handle_request(request: Request): | CODE |
| LOW | …ration/travel_agents/src/travel_agents/flight_agent.py | 284 | async def handle_request(request: Request): | CODE |
| LOW | …ation/travel_agents/src/travel_agents/weather_agent.py | 266 | async def handle_request(request: Request): | CODE |
| LOW | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 329 | async def handle_request(request: Request): | CODE |
| LOW | …ulti_agent_crewai_langchain/langchain/weather_agent.py | 318 | async def handle_request(request: Request): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli/planoai/main.py | 156 | console.print(f' [cyan]export {key}="your-api-key"[/cyan]') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …on/multi_agent_crewai_langchain/crewai/flight_agent.py | 93 | Convert a city name to its primary airport IATA code. Args: city_name: Name of the city (e.g., 'Sea | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/hermesllm/src/apis/anthropic.rs | 1592 | "text": "\nYou are an interactive CLI tool that helps users with software engineering tasks. Use the | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …build_with_plano/includes/multi_turn/multi_turn_rag.py | 39 | CODE | |
| LOW | demos/advanced/multi_turn_rag/main.py | 38 | CODE |