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 summarizes scanner evidence for katanemo/plano, a Rust project with 7,084 GitHub stars. SynthScan examined 125,243 lines of code across 557 source files, recording 714 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 9.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 501 finding(s).
Are imports declared and package/API names verified? 70 finding(s).
Are wrappers, guards, and repeated structures necessary? 305 finding(s).
Which changes need focused human review? 714 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 714 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | 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 | 50 | ### Step 1: Get Configuration | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 57 | ### Step 2: Set API Keys | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 68 | ### Step 3: Start Plano | COMMENT |
| LOW | demos/llm_routing/claude_code_router/README.md | 80 | ### 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 |
| 100 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 | 203 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 205 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 223 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 225 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 267 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 269 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 317 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 319 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 367 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 369 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 417 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 419 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 482 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 484 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 534 | # ────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 536 | # ────────────────────────────────────────────── | 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 | 305 | /// 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 | 243 | # 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 |
|---|---|---|---|---|
| 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 | 981 | #[derive(Debug, Clone, Serialize, Deserialize)] | COMMENT |
| LOW | crates/hermesllm/src/apis/openai_responses.rs | 1341 | 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 | 281 | COMMENT | |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 481 | } | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 561 | COMMENT | |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 581 | #[serde(rename = "guardrailIdentifier")] | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 661 | pub struct BedrockTokenUsage { | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 701 | /// Guardrail trace assessment (simplified) | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 801 | COMMENT | |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 841 | /// Guardrail trace | COMMENT |
| LOW | crates/hermesllm/src/apis/amazon_bedrock.rs | 861 | // ============================================================================ | 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 | /// | COMMENT |
| LOW | crates/common/src/configuration.rs | 281 | /// Minimum estimated prefix tokens before a cache breakpoint is injected. | COMMENT |
| LOW | crates/common/src/configuration.rs | 301 | /// never credits the spend back — the "saving" is vs a path we didn't take, not real | COMMENT |
| LOW | crates/common/src/configuration.rs | 501 | /// | 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/streaming.rs | 261 | /// | COMMENT |
| LOW | crates/brightstaff/src/metrics/labels.rs | 61 | // `decision` label — the coarse outcome: | 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 | /// Hash of the stable prompt prefix (system + tools) observed when the binding was | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 61 | /// Monotonic: paid switches add to it, free/cheaper switches never subtract. A paid | COMMENT |
| LOW | crates/brightstaff/src/session_cache/mod.rs | 81 | pub session_cost_usd: f64, | 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 | /// Actual input-cost (USD) of the proposed model switch — computed from input-token | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 221 | /// *would* have selected had the switch been allowed. Recorded only on a `retained` | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 281 | pub const HANDOFF: &str = "plano(handoff)"; | COMMENT |
| LOW | crates/brightstaff/src/tracing/constants.rs | 301 | /// ``` | 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 | 1 | //! Top-level signal analyzer. | COMMENT |
| LOW | crates/brightstaff/src/signals/analyzer.rs | 221 | .collect(); | COMMENT |
| LOW | crates/brightstaff/src/signals/mod.rs | 1 | //! Plano signals: behavioral quality indicators for agent interactions. | COMMENT |
| LOW | crates/brightstaff/src/signals/execution/loops.rs | 301 | // retry and parameter_drift are exact: both are properties of the maximal | COMMENT |
| LOW | crates/brightstaff/src/handlers/llm/prompt_caching.rs | 1 | //! Prompt-caching request handling for the LLM path. | COMMENT |
| 19 more matches not shown… | ||||
| 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 | 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 |
|---|---|---|---|---|
| HIGH | tests/archgw/test_prompt_gateway.py | 41 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | tests/e2e/test_prompt_gateway.py | 43 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | cli/planoai/trace_cmd.py | 150 | except Exception: | CODE |
| HIGH | cli/planoai/trace_cmd.py | 543 | except KeyboardInterrupt: | CODE |
| HIGH | cli/planoai/trace_cmd.py | 549 | except NameError: | CODE |
| HIGH | cli/planoai/native_runner.py | 367 | except (ProcessLookupError, PermissionError): | CODE |
| HIGH | cli/planoai/native_runner.py | 424 | except ProcessLookupError: | CODE |
| HIGH | cli/planoai/docker_cli.py | 114 | except requests.RequestException as e: | CODE |
| HIGH | cli/planoai/chatgpt_auth.py | 63 | except FileNotFoundError: | CODE |
| HIGH | cli/planoai/trace_listener_runtime.py | 69 | except ProcessLookupError: | 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 | 441 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 657 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 777 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 789 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 947 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 348 | CODE | |
| LOW | cli/planoai/trace_cmd.py | 473 | 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 | 379 | # 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 | 559 | # 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 |