{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"Workflow._acontinue_execute_stream (cyclomatic 162): Workflow._acontinue_execute_stream has cyclomatic complexity 162 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":8496}}}],"partialFingerprints":{"codehealthFindingId/v1":"56edaddec43a950e98a8fb70d16173f5644a28fb4c41a46849afc7d765e14bfa"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._continue_execute_stream (cyclomatic 161): Workflow._continue_execute_stream has cyclomatic complexity 161 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6770}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae51c4cf7fdce2942bf933dbf2666e495e00f9cdcb70e3f00bc0fa78e08e6fb3"}},{"ruleId":"D1","level":"warning","message":{"text":"team.aprint_response_stream (cyclomatic 160): team.aprint_response_stream has cyclomatic complexity 160 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":1292}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e53ba97c926a1604e22d909e99432d6b79d67fa495c127a3b5f1386a4282e3b"}},{"ruleId":"D1","level":"warning","message":{"text":"team.print_response_stream (cyclomatic 154): team.print_response_stream has cyclomatic complexity 154 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b05f03400dbeff5625b57d195f6312f72774f904e3a6c22eba3404573813daa"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.stream_a2a_response (cyclomatic 151): utils.stream_a2a_response has cyclomatic complexity 151 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bed2df088b5e00aa76f45d54180869540e4050ad97a7c6b8d185bc35121097"}},{"ruleId":"D1","level":"warning","message":{"text":"workflow.print_response_stream (cyclomatic 131): workflow.print_response_stream has cyclomatic complexity 131 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"4973265e198d43098779484180705d69be3280a8c28bfd7b66ad5cc578902153"}},{"ruleId":"D1","level":"warning","message":{"text":"workflow.aprint_response_stream (cyclomatic 129): workflow.aprint_response_stream has cyclomatic complexity 129 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"40a1cd40d7e899c2700e2c8b681c14caff17a10060cbb61fca9eef23ccf5153a"}},{"ruleId":"D1","level":"warning","message":{"text":"_storage.to_dict (cyclomatic 125): _storage.to_dict has cyclomatic complexity 125 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5626046abab499145f844d77ef5cb228584bec28afaa8c72a8cd65d2f1abb1"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._acontinue_run_stream (cyclomatic 122): _run._acontinue_run_stream has cyclomatic complexity 122 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":8304}}}],"partialFingerprints":{"codehealthFindingId/v1":"9650d4d67d0e7987ad444845ff18d7e0a44ef0435d6c5a749d02786e0113a268"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._aexecute_stream (cyclomatic 122): Workflow._aexecute_stream has cyclomatic complexity 122 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":3424}}}],"partialFingerprints":{"codehealthFindingId/v1":"99056b250cd1a51898b6840746413eb6c319db8242fad42e3f5f21801bbf7219"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._acontinue_execute (cyclomatic 117): Workflow._acontinue_execute has cyclomatic complexity 117 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7967}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0f563d1f0e5e903d6c54271744636f065e7f873250a7bb2b784db5233eb1908"}},{"ruleId":"D1","level":"warning","message":{"text":"_storage.to_dict (cyclomatic 115): _storage.to_dict has cyclomatic complexity 115 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"c97aab1a04997f25099386679ddef3045e102c03ccfc1c56fceccc257caecdde"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._continue_execute (cyclomatic 115): Workflow._continue_execute has cyclomatic complexity 115 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5942}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ef198d5f7e5ca5ed4ab6c4711941cb9cca5e158a250468f2859cc91c12bef86"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._execute_stream (cyclomatic 107): Workflow._execute_stream has cyclomatic complexity 107 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":2394}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b3fceae883a82eb29233c50e82307a25f0d9fb8cd9ba10a65fbdc6034589150"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._acontinue_run_stream (cyclomatic 101): _run._acontinue_run_stream has cyclomatic complexity 101 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4972}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6efd43041fc4222289ce493cb5fb1964b751fe137255635f5309ef39877b652"}},{"ruleId":"D1","level":"warning","message":{"text":"_response._handle_model_response_chunk (cyclomatic 98): _response._handle_model_response_chunk has cyclomatic complexity 98 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2380a8d7c2e303388e2aa01267cc17d809e24b4e09189c38a487fa07c300e34"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.aexecute_stream (cyclomatic 98): Step.aexecute_stream has cyclomatic complexity 98 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1658}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aa4b94b32f7d51f7ae62eae627f5304e68ea66fe31cdec1e1cd2907d9093676"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.acontinue_run (cyclomatic 94): Workflow.acontinue_run has cyclomatic complexity 94 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7533}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab55a964aaab8e6aae3c642f936a3345eb12296d8833cce16b0a1d57fc3ebd0b"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.acontinue_run (cyclomatic 94): Workflow.acontinue_run has cyclomatic complexity 94 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7548}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad23705f39f08043b9a3515d942c8c371be77c32d4172b06d1f79c580e16458c"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.acontinue_run (cyclomatic 94): Workflow.acontinue_run has cyclomatic complexity 94 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7562}}}],"partialFingerprints":{"codehealthFindingId/v1":"e595e780dd0141a1ec56c723fbdb59209b51d8863520628da09b2e5f9d59e86d"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.execute_stream (cyclomatic 89): Step.execute_stream has cyclomatic complexity 89 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d7afa8b1d11d55eb6e516c320bbf36634f918c69fa7c727f9c4893762d6915"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.aget_system_message (cyclomatic 88): _messages.aget_system_message has cyclomatic complexity 88 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f777240a56191e70e07410864b3adab04f9f5d5df186fa6d03582670e879fbf"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.continue_run_dispatch (cyclomatic 88): _run.continue_run_dispatch has cyclomatic complexity 88 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6356}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff923a9a2d2f049b39648fbc7d0ef2c5a932099f55f14e7a6d18d3b4ef60b05"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.continue_run (cyclomatic 87): Workflow.continue_run has cyclomatic complexity 87 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5546}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7da36c72f6f36d61633b4df3f622af58a4fdc7665103119fb53eb2882b8c16"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.continue_run (cyclomatic 87): Workflow.continue_run has cyclomatic complexity 87 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5558}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c484ee6415d86ff184f61fd73b93657484f62f8c4b1d18890b7d9e4e83a692"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.continue_run (cyclomatic 87): Workflow.continue_run has cyclomatic complexity 87 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5569}}}],"partialFingerprints":{"codehealthFindingId/v1":"0980db5f7bd393ff13fddc91e68f7d646a28b80a4807fa9cbb2644a527321cdc"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_system_message (cyclomatic 85): _messages.get_system_message has cyclomatic complexity 85 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e86b31b3ad03007b229f451d7b3aa5c727a4b69df19926919abebe9b96dac8e"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.arun_function_calls (cyclomatic 85): Model.arun_function_calls has cyclomatic complexity 85 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2510}}}],"partialFingerprints":{"codehealthFindingId/v1":"610ed5d2af7a808f98e7ac60fd8e199086d1e1d05391ae86b078b57f4f656a8c"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.handle_model_response_chunk (cyclomatic 84): _response.handle_model_response_chunk has cyclomatic complexity 84 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1370}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6fe4d4c6d383b41a24cff105bb452e26d4c2de8dc4c777de151c4010a13565"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._acontinue_run (cyclomatic 81): _run._acontinue_run has cyclomatic complexity 81 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7875}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd3456d50732a1b50606eb285701dd634128a0a8d1ffaff7e9ffd64cba7101c3"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiInteractions._parse_provider_response_delta (cyclomatic 78): GeminiInteractions._parse_provider_response_delta has cyclomatic complexity 78 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":948}}}],"partialFingerprints":{"codehealthFindingId/v1":"a978ef781656a963e4b8d5eccee6771cdaa0bc4b842e2d9554c19dd8e854b534"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools._determine_tools_for_model (cyclomatic 77): _tools._determine_tools_for_model has cyclomatic complexity 77 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_tools.py"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4518d8fe97d96e3efa3eed25be15b549f6f5c8788d35a6d07c850adcfb10396"}},{"ruleId":"D1","level":"warning","message":{"text":"team.print_response (cyclomatic 76): team.print_response has cyclomatic complexity 76 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbfe7613894bbe57080295f0e5cdd625fefa4ef3ece4f85118a4dd21fb199870"}},{"ruleId":"D1","level":"warning","message":{"text":"team.aprint_response (cyclomatic 75): team.aprint_response has cyclomatic complexity 75 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe25c72467a2bac3edf6d31aaa93481098e45ce885e5443bb0c127512a29b3e"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.aexecute (cyclomatic 75): Step.aexecute has cyclomatic complexity 75 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"180be920bc36d7406a9aad0ab2f758d26aa2056193c72448cd482f403d312de9"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun_stream (cyclomatic 73): _run._arun_stream has cyclomatic complexity 73 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bbada4a1e8e86dfb5f2b63774b8473ec046c2762b45684f66655d1f08a6334a"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._acontinue_run (cyclomatic 72): _run._acontinue_run has cyclomatic complexity 72 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4478}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f466ba82fa2338f3985664e5e39de204e9730fba5926ee5b2ea3e45153ee7fa"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._aexecute (cyclomatic 67): Workflow._aexecute has cyclomatic complexity 67 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":3065}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5a5953ae4aad73b678e728edc16c5da9594d6f2f957959609d8cdbe16766ea"}},{"ruleId":"D1","level":"warning","message":{"text":"DbInstance._create (cyclomatic 67): DbInstance._create has cyclomatic complexity 67 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"8afd4245c228268fe6f2380c7628d408170e43c071b76b0b632bf6c8cf39977f"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseRunOutputEvent.to_dict (cyclomatic 65): BaseRunOutputEvent.to_dict has cyclomatic complexity 65 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/base.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc04ec13d4e325c4dbbacd1ac55551df55dc91972ba71b46561066d1673f81e"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.execute (cyclomatic 65): Step.execute has cyclomatic complexity 65 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2c53ad372d7af44f6a02c82853889aec797613c02f919480096ea37abc0092"}},{"ruleId":"D1","level":"warning","message":{"text":"DbInstance._update (cyclomatic 65): DbInstance._update has cyclomatic complexity 65 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4f465bc63bc9400d205853da3ffb66a0c29b326828c78292e71d231859001a"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._parse_provider_response (cyclomatic 63): Gemini._parse_provider_response has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1128}}}],"partialFingerprints":{"codehealthFindingId/v1":"5379a99985fab789e1d76c58c06429f4b6c324f6a3e09ba281e6ab683afe11a4"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._execute (cyclomatic 63): Workflow._execute has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":2052}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9061d595f732e5a4250fe5bdb4daee39304e9095f4771ca5965c2d3d23ca46"}},{"ruleId":"D1","level":"warning","message":{"text":"connect._connect (cyclomatic 62): connect._connect has cyclomatic complexity 62 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"773dd52280aa6f76b16e619abac07617ce2a2dca405be1821061c837e7168551"}},{"ruleId":"D1","level":"warning","message":{"text":"DbCluster._create (cyclomatic 61): DbCluster._create has cyclomatic complexity 61 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"97fe4086e5c8cac3597f5154b87a14277415ed52b8ed5b84660fb2253eb355f5"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run_stream (cyclomatic 60): _run._run_stream has cyclomatic complexity 60 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":754}}}],"partialFingerprints":{"codehealthFindingId/v1":"866a8145c4bea2feed0324ab983c06519211a62e41cb313d89b9a045f493d464"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiInteractions._parse_provider_response (cyclomatic 60): GeminiInteractions._parse_provider_response has cyclomatic complexity 60 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2da5ee40608410c762ffc1f587b76f205aaf47210bcba6c5e48f3fdb43676e3"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun_tasks_stream (cyclomatic 59): _run._arun_tasks_stream has cyclomatic complexity 59 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2415}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9d39c91633afa13ce00e7b299cabf50a791978613140263fb11190397900ef9"}},{"ruleId":"D1","level":"warning","message":{"text":"Condition.execute_stream (cyclomatic 57): Condition.execute_stream has cyclomatic complexity 57 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf7c00bb237e37a6f11dd4cc4a88f7647b28f1c72cf3f6d593dc6b6ae9779a6c"}},{"ruleId":"D1","level":"warning","message":{"text":"Condition.aexecute_stream (cyclomatic 57): Condition.aexecute_stream has cyclomatic complexity 57 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"760b538818faf68bca70798889837fe53e608979ff60b889ece2bb7d62286f25"}},{"ruleId":"D1","level":"warning","message":{"text":"TeamResponse.from_team (cyclomatic 56): TeamResponse.from_team has cyclomatic complexity 56 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/schema.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ffb8e61f54693cdca1a2013d9b95d7da5e7f5a60cba2a095a8ef768d4e4ae70"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.continue_run_dispatch (cyclomatic 54): _run.continue_run_dispatch has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3251}}}],"partialFingerprints":{"codehealthFindingId/v1":"938f80ac924926565ef5a93d88ed8b8da0bf5698ac0f8ab5f37e20a506bff09a"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.aresponse_stream (cyclomatic 54): Model.aresponse_stream has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1641}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be51441de12bc934a6ac478e0f138642936ffe22724e0bdd0b3d95b5c5dc421"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun_stream (cyclomatic 54): _run._arun_stream has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":3579}}}],"partialFingerprints":{"codehealthFindingId/v1":"55b52b011815576a7d4f10646fa61615310c5e6f3e3d4d8630feabb215306971"}},{"ruleId":"D1","level":"warning","message":{"text":"claude.format_messages (cyclomatic 54): claude.format_messages has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad84f20ba9eb7902e188bfff2c10de97acc1fbc081868ed3cd5a20796b1847a0"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.response_stream (cyclomatic 53): Model.response_stream has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cbe187f2aca5340fa77806463632327f2c54fd572f104031ea44f97b0d05c2b"}},{"ruleId":"D1","level":"warning","message":{"text":"Message.log (cyclomatic 53): Message.log has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"68aeaf16aa30065c779742200aa8257fe8a8210a988d43930b94c12174a21610"}},{"ruleId":"D1","level":"warning","message":{"text":"Function.process_entrypoint (cyclomatic 53): Function.process_entrypoint has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bad0730e028abcd9b71b57d8fe26a0aea2e09b1cc518e9576e6c385f05bd9a7"}},{"ruleId":"D1","level":"warning","message":{"text":"Loop.execute_stream (cyclomatic 53): Loop.execute_stream has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"3927e1b7338a773afcb14da2f6720286c6445497d89d838e33f6a16275a5e132"}},{"ruleId":"D1","level":"warning","message":{"text":"Loop.aexecute_stream (cyclomatic 53): Loop.aexecute_stream has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":977}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce3da475680a214386ca098d53f858bf9a1e5bebdfd094eb0ecd639fef167fd"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.response (cyclomatic 52): Model.response has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"90118a6dddd4ac87428e43c492f2b356b078ec4c327946e9a36adcc3d6a0bb37"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.aresponse (cyclomatic 52): Model.aresponse has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"298f2a4afbd6b6fb5c8f53129599f2111ea4f6728fa306663f4f2a5e13623409"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._parse_provider_response_delta (cyclomatic 52): Gemini._parse_provider_response_delta has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1302}}}],"partialFingerprints":{"codehealthFindingId/v1":"97c9b3ea72bef3608a8910a8c50a220d9f37bbf61a27803445163fb8cb19c980"}},{"ruleId":"D1","level":"warning","message":{"text":"DbCluster._update (cyclomatic 52): DbCluster._update has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee4a48d5d3b8b220b1fd6bdb4d1e75fcd8651d540a0dfececf3a305904e7b9e"}},{"ruleId":"D1","level":"warning","message":{"text":"Claude._parse_provider_response_delta (cyclomatic 51): Claude._parse_provider_response_delta has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de72d1776fb3c32ba4adf28c2a6cebcfcfcebd648a700ceb4897d0b36c78aa4"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_system_message (cyclomatic 51): _messages.get_system_message has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"85a89fa2994468c29f77592cca6d9f5325aecb80c7092efefa3b65d79950171f"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.aget_system_message (cyclomatic 51): _messages.aget_system_message has cyclomatic complexity 51 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"55befaaee929236136a58010b884616aed666aee3ce3b2b85ba146d1142aa6cc"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsResources.create_resources (cyclomatic 50): AwsResources.create_resources has cyclomatic complexity 50 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf67f63579c1a71e2be2176aef0d67a053896583bf6a7057ab300d5317a84624"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerResources.create_resources (cyclomatic 49): DockerResources.create_resources has cyclomatic complexity 49 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac59556580f61d16b28f1ac6195a86a4eb589e64aa608854aa93711a694765c"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._format_messages (cyclomatic 48): Gemini._format_messages has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"035384d52363cefb8033193ebdf62e76ba7b3b0cb0436208b2ea885ecceb5b34"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleToolkit._resolve_creds (cyclomatic 48): GoogleToolkit._resolve_creds has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/base.py"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fdc219f0cbc4c6830ab885b80cecaefb1b2e194575aced32eda4bc545b376e8"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentResponse.from_agent (cyclomatic 47): AgentResponse.from_agent has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/schema.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c891f37364611c302e33cb07cdb542aac98e135aa6535bb9f64cc3f9f82147"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run_tasks_stream (cyclomatic 47): _run._run_tasks_stream has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"425c203e3a5ed45254ac2a696d5f6c2b1fed211bf8c070001291dd559e15731a"}},{"ruleId":"D1","level":"warning","message":{"text":"connect._connect_one (cyclomatic 47): connect._connect_one has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"6286618c35b8f283ee4f1d43b8f874ff4400d54b3ce2173273786b11270a2ba9"}},{"ruleId":"D1","level":"warning","message":{"text":"Claude._parse_provider_response (cyclomatic 46): Claude._parse_provider_response has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d0e4244d3a9724be1c8ca45383a4296745e9a5b0cab3713beb118a6c202904"}},{"ruleId":"D1","level":"warning","message":{"text":"gemini.convert_schema (cyclomatic 46): gemini.convert_schema has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/gemini.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"16c858907517a987e6761179408771bc417f9f7076475002cb633954506a963c"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsResources.delete_resources (cyclomatic 46): AwsResources.delete_resources has cyclomatic complexity 46 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"d114bdfbe73dfff99bc56a7399d4ed9106d5f272c46ddf4546568a8f31542863"}},{"ruleId":"D1","level":"warning","message":{"text":"trace_to_database.run_trace_demo (cyclomatic 45): trace_to_database.run_trace_demo has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/observability/trace_to_database.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"909c8bc7fe7e5af76285be94614556531a5a87c29d41d7ead4524f4ab07275fd"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb._get_collection (cyclomatic 45): AsyncMongoDb._get_collection has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"a198e031e18c63b6ff75651357a5cfaca487eaf00f6856485befd648e8d21d45"}},{"ruleId":"D1","level":"warning","message":{"text":"AuthMiddleware.dispatch (cyclomatic 45): AuthMiddleware.dispatch has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"efc173b65b6e05d68d91ea85a7786241191f78345eb0d0ec045a029267c88ed3"}},{"ruleId":"D1","level":"warning","message":{"text":"TeamSession.get_messages (cyclomatic 45): TeamSession.get_messages has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/team.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e726b6abac291ade1220730e3251eed255956e58855fece465603e35f4bc96"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.print_response_stream (cyclomatic 45): agent.print_response_stream has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40bdaaab61aa8a21f8e314b7f78b01fe2545b982906f89c918ed49f8d641fa0"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_user_message (cyclomatic 44): _messages.get_user_message has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"cabece11d4771c079cef145ebd2623d68c3c2c3fce75b992c21ce13ecf2fdb17"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.aget_user_message (cyclomatic 44): _messages.aget_user_message has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1033}}}],"partialFingerprints":{"codehealthFindingId/v1":"09177d7e08bd70e6197f169d1958d5ad9fe7b593f94df738562976a7fcfc88bf"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun (cyclomatic 44): _run._arun has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1475}}}],"partialFingerprints":{"codehealthFindingId/v1":"4674dc6486389d7f6957dcb5af9d57eb5e9ffdec1d67bcfc4d86b12de4050fcc"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiInteractions._get_request_kwargs (cyclomatic 44): GeminiInteractions._get_request_kwargs has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ecca0122802b024eb5376f4e415b2f817f2f8f0afabe5f7ffb950383baa49c"}},{"ruleId":"D1","level":"warning","message":{"text":"GmailTools.__init__ (cyclomatic 44): GmailTools.__init__ has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"71887ddebec676b72cdbb746324a2827c3c1faece68b9fa268cf45538ed42701"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.aprint_response_stream (cyclomatic 44): agent.aprint_response_stream has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"5112a952db8555afc39db830d5e536f3ffb78ddbe47c09273a1b22182b0503ac"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsResources.update_resources (cyclomatic 44): AwsResources.update_resources has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1cc12f30405a9a63f3ac4c3bcc711619844197c361e1f36eeabea81666eb03"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerResources.delete_resources (cyclomatic 44): DockerResources.delete_resources has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"3337cc5cd9131a8ba82ae8680f39124134425e9c1d2b83ccc847267b8b89727b"}},{"ruleId":"D1","level":"warning","message":{"text":"FakeAgentOS.handler (cyclomatic 44): FakeAgentOS.handler has cyclomatic complexity 44 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/tests/conftest.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"97a5528b30085a0e8442a13a1622f2e6fab061d634dd13c75a9fae7d42ac9130"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.upsert_sessions (cyclomatic 43): PostgresDb.upsert_sessions has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f0b4812690bdc6dc4cc7bdada134f033760d83120a05222536ce022bc878510"}},{"ruleId":"D1","level":"warning","message":{"text":"ReliabilityEval._evaluate (cyclomatic 43): ReliabilityEval._evaluate has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/reliability.py"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"a436230de9a06f42a5a9838c382b269b752f887ffcc97df14dbf67a28d67d833"}},{"ruleId":"D1","level":"warning","message":{"text":"Message.from_dict (cyclomatic 43): Message.from_dict has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ea9def1c7a24c9ae401efe8e60e66b69450a43b964e4345439a2cee3889d10d"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS.get_app (cyclomatic 43): AgentOS.get_app has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6dbfaa00b08a71ee63798a5445f1d3a66c893e8a9998305176e04d9c87cf3c4"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run_stream (cyclomatic 43): _run._run_stream has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1396}}}],"partialFingerprints":{"codehealthFindingId/v1":"b20e8fc315cf039df402ba4d23991f69f51c2f900b4d78472242493f80028d20"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerResources.update_resources (cyclomatic 43): DockerResources.update_resources has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecec33d6ad06ff3b6d88f6cef05a0d31466d31edfa3ddffd56e687769a5322e6"}},{"ruleId":"D1","level":"warning","message":{"text":"connect._report (cyclomatic 43): connect._report has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"fad363d6e3536999ac599515c1bf3029511e55913cf591625f8d3484ee0d1c2b"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_sessions (cyclomatic 42): DynamoDb.get_sessions has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"c560cdd9b915edf08c57789dd6da0c553a765061176f036de78ebf7907050d5d"}},{"ruleId":"D1","level":"warning","message":{"text":"ReasoningManager.stream_native_reasoning (cyclomatic 42): ReasoningManager.stream_native_reasoning has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"8debdb0054e33bb55abda7b312506063fccddc1262b3da1ee97303fb84d2e1dd"}},{"ruleId":"D1","level":"warning","message":{"text":"ReasoningManager.astream_native_reasoning (cyclomatic 42): ReasoningManager.astream_native_reasoning has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"c54760d1f63ca90244a4e1b19fd10610bb9648f494015bdf50068ade3a0848d3"}},{"ruleId":"D1","level":"warning","message":{"text":"SecurityGroup.add_inbound_rules (cyclomatic 42): SecurityGroup.add_inbound_rules has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/security_group.py"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"5660cb02fe83a348a1079715e394fcee4f6a76efd36c00b4f5b6851282706c4a"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_run_messages (cyclomatic 41): _messages.get_run_messages has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"b364eff53e3b884226f512e147c6d4fe97bc4f7e2ff23b705952aefc015e4d8b"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.aget_run_messages (cyclomatic 41): _messages.aget_run_messages has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1409}}}],"partialFingerprints":{"codehealthFindingId/v1":"d68412a0208668b8258089dd2389c0a597cc1e98f9bb51718372be31659b5cfa"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._get_user_message (cyclomatic 41): _messages._get_user_message has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1120}}}],"partialFingerprints":{"codehealthFindingId/v1":"7312bf7802b5d06504b4ef3512b5d4b6fb4dcdf61b169989a24be342400642f6"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._aget_user_message (cyclomatic 41): _messages._aget_user_message has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1278}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae202eb6fe4692ba9d3f81e88b3e7c5a6387cc0054ad29751e20ef8a03191f89"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.parse_tools (cyclomatic 40): _tools.parse_tools has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d43a8f08b1d6855102d887b83b1041b3fa8604d7981c27c66cb0fad48f95d9c"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini.get_request_params (cyclomatic 40): Gemini.get_request_params has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e91b1478dceccaaf59ca2c50be366265467bd54d41c21381c6ca49870b954d1"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowRunOutput.to_dict (cyclomatic 40): WorkflowRunOutput.to_dict has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1c0e669435f9535cea3cabc6e2637a9a1ec94a715d8c02ce0d503c1ba80514"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.build_panels (cyclomatic 40): agent.build_panels has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":787}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4c543fed0933965acbfd198e20609142e2cd26f44e4934af6eec3107efecf3"}},{"ruleId":"D1","level":"warning","message":{"text":"EcsContainer.get_container_definition (cyclomatic 40): EcsContainer.get_container_definition has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/container.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"c386e20ff936e5f0c3a670d815d472aae1cd0a76d66c66328adea51a218eec76"}},{"ruleId":"D1","level":"warning","message":{"text":"RunOutput.to_dict (cyclomatic 39): RunOutput.to_dict has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ac72d770645bde1dc85c06fe179048d04e804878f4b240b155be4ffd9f5be6"}},{"ruleId":"D1","level":"warning","message":{"text":"SuperserveTools.__init__ (cyclomatic 39): SuperserveTools.__init__ has cyclomatic complexity 39 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/superserve.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"388726c15a9ae0a5f047f718ed6e654100fcaf0221b1848adbbc51540723e2b7"}},{"ruleId":"D1","level":"warning","message":{"text":"SecurityGroup.add_outbound_rules (cyclomatic 39): SecurityGroup.add_outbound_rules has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/security_group.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a945c3f3e3b3c0da1f174223f0afe40e30355ce071534fd4118edb6e1bdd23b"}},{"ruleId":"D1","level":"warning","message":{"text":"CacheCluster._create (cyclomatic 39): CacheCluster._create has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"1853f86fa5ef2f82ec2f78239de3e0abea2545e79b98114090517fc5d9063887"}},{"ruleId":"D1","level":"warning","message":{"text":"infra_cli.up (cyclomatic 39): infra_cli.up has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"0415cae424aedc5bb6ad0b41db1b94475e7d8df657fb9c6f19de64b3cf71d686"}},{"ruleId":"D1","level":"warning","message":{"text":"infra_cli.down (cyclomatic 39): infra_cli.down has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"b48bd200c85cb928f9bfc1ff1e470392897ad88aaac5f222750d5e9d7b2005cf"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._continue_run_stream (cyclomatic 38): _run._continue_run_stream has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3809}}}],"partialFingerprints":{"codehealthFindingId/v1":"f67e640d60363edbdd5343852b3a250976838539dc3b2406842b62322d14979f"}},{"ruleId":"D1","level":"warning","message":{"text":"utils._eval_filter_expr (cyclomatic 38): utils._eval_filter_expr has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/utils.py"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"04cec8ce3c7372848d7510050048bfe54089feebcfa7deb0c5bdd80135f4f9e5"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.run_function_call (cyclomatic 38): Model.run_function_call has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2133}}}],"partialFingerprints":{"codehealthFindingId/v1":"260765815bacfeccb8d1e66447b8c1a1842903d017de8cbea89cf97cab4543cf"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses._format_messages (cyclomatic 38): OpenAIResponses._format_messages has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a2dcf28017ad38f8983565fcae8d076bcbb8d4513d34918ed493c94300a41d8"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleSlidesTools.__init__ (cyclomatic 38): GoogleSlidesTools.__init__ has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9638b2b9deba8852c5e6bd6a568488b3e5936bec8b7364803380c98464ca51e"}},{"ruleId":"D1","level":"warning","message":{"text":"SlackTools.__init__ (cyclomatic 38): SlackTools.__init__ has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"7324b70a00f0045978f0a7aa24009e5fcb2b35d4963c848304e5d20b04225579"}},{"ruleId":"D1","level":"warning","message":{"text":"filters.from_dict (cyclomatic 37): filters.from_dict has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/filters.py"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d94fcac6dbac42979c41d10961f906ece153a29fc302c9314734a54fdc0b6b"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._aload_from_url (cyclomatic 37): Knowledge._aload_from_url has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1511}}}],"partialFingerprints":{"codehealthFindingId/v1":"d22abf93946b6881f8e0d156ca3adf5832ebcf1bb91ff6d4709912aa879fa285"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._load_from_url (cyclomatic 37): Knowledge._load_from_url has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1663}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e5bb01dcb359e2625fe34063c470561c096f03b4aa27b6e437d9a960d88e01"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.get_request_kwargs (cyclomatic 37): utils.get_request_kwargs has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7c07d5fa831184f6af5526e2b0f859311490d3d1a1bba376e60c8d755e0e8f"}},{"ruleId":"D1","level":"warning","message":{"text":"TeamRunOutput.to_dict (cyclomatic 37): TeamRunOutput.to_dict has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c49f35fafbeae8109f74e7e281556def6a967eff621097830ddc3bf692de5c"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._route_requirements_to_members_stream (cyclomatic 37): _run._route_requirements_to_members_stream has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5495}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2419cf878e81d659e3ebc0130f5ea2113b961a1f52d17cbeb2e8aff15b4867f"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._aroute_requirements_to_members_stream (cyclomatic 37): _run._aroute_requirements_to_members_stream has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5739}}}],"partialFingerprints":{"codehealthFindingId/v1":"794da1e3afb993e16125c98cf15218a580fb53bb931a3d5cf36973ae98b8083c"}},{"ruleId":"D1","level":"warning","message":{"text":"_storage.from_dict (cyclomatic 37): _storage.from_dict has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf28da33e17b33132916929063ebf0612aa72566ef6926693931e0bc5752374"}},{"ruleId":"D1","level":"warning","message":{"text":"Router.execute_stream (cyclomatic 37): Router.execute_stream has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"597d4f37cbda4500a96d2eac2820ad7cef60df8fe68a52997c6b03dab10b25b1"}},{"ruleId":"D1","level":"warning","message":{"text":"Router.aexecute_stream (cyclomatic 37): Router.aexecute_stream has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e7285c3c42ca6b443e4516c6e80cb40e8f83bed977ec4b128376515f0794f6"}},{"ruleId":"D1","level":"warning","message":{"text":"EcsService._create (cyclomatic 37): EcsService._create has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/service.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a330ff0e56b7500edb7e777936b504056860c22f5e085a2648eda8befb75c04a"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerImage.build_image (cyclomatic 37): DockerImage.build_image has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resource/image.py"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f2e04358eb926dd03c2205b34c329a92735952ef25acdc99cf1e91e8931f09"}},{"ruleId":"D1","level":"warning","message":{"text":"disconnect._disconnect (cyclomatic 37): disconnect._disconnect has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/disconnect.py"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"19deea19cee8e4d4c4e48f997847c1475b8514f8bc3cfda3bfd0a71d3481bacb"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run (cyclomatic 36): _run._run has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a6cd66d2731d306b3b249182a026fea7831fbb2bf1cc1f98bca8e934a8a201"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.upsert_sessions (cyclomatic 36): ValkeyDb.upsert_sessions has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"000ed827e24a9ffce09e8359b4c8d738049fcb3418d8015ce2603fef71b60440"}},{"ruleId":"D1","level":"warning","message":{"text":"RemoteDb.from_config (cyclomatic 36): RemoteDb.from_config has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/remote/base.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"6995117447ad297277f3bc310f90300c64643545e1867a32814810ca78e850ae"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentSession.get_messages (cyclomatic 36): AgentSession.get_messages has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/agent.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ead6b11db1febfeb3e32ae3f5e90f81720ed87ba8ca14b76382459fa020153"}},{"ruleId":"D1","level":"warning","message":{"text":"streamlit.session_selector_widget (cyclomatic 36): streamlit.session_selector_widget has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/streamlit.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c8bec4ab081f6995fdb1a0bf19e2beb3c1899355ad9e036831ea86464c9fb15"}},{"ruleId":"D1","level":"warning","message":{"text":"Parallel.execute_stream (cyclomatic 36): Parallel.execute_stream has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a230526bda05a7c5bf525fa1b6af87966a02fbae4fbdd1078ac14e65a79c49b"}},{"ruleId":"D1","level":"warning","message":{"text":"Model._populate_stream_data (cyclomatic 35): Model._populate_stream_data has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"731c9ac8811d07c77b8ebaa4f4731e0744d087afbea46db9f2110c74179ac44d"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS._auto_discover_databases (cyclomatic 35): AgentOS._auto_discover_databases has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1563}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f2304d1a33bedc0cfff56227f062d466295a5b5d25c3729c27cd55be445b49"}},{"ruleId":"D1","level":"warning","message":{"text":"router._resume_stream_generator (cyclomatic 35): router._resume_stream_generator has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e08161c87f5260e0f0dd6aa2467ab545d271a0daf602f9c2e04feb3ffea44c"}},{"ruleId":"D1","level":"warning","message":{"text":"router._resume_stream_generator (cyclomatic 35): router._resume_stream_generator has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"54c31616824d56314efd5f6f9e9a27d0af6b06a3b311ee557d8bad8313de0f4e"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun_tasks (cyclomatic 35): _run._arun_tasks has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2059}}}],"partialFingerprints":{"codehealthFindingId/v1":"12f7e4c5c8839afb7803c44cdff9e8c1c65f574b245d6d3a7ee6b8ce8855ccdd"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._continue_run_stream (cyclomatic 35): _run._continue_run_stream has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7266}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea11e3853f0fa7cbede02f12024be24ddcef6ad84b24ebac8b00351881aae80"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb._get_collection (cyclomatic 34): MongoDb._get_collection has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ad5f06fdd21feff3a66b66334649ee02e4a513ab4856e08c4176d8b101d816b"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb._create_table (cyclomatic 34): PostgresDb._create_table has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ced3e3f216b644b005ae3b76f431b6d1b4593f7f9e4bbc54e63415bbf714397"}},{"ruleId":"D1","level":"warning","message":{"text":"json_schema.get_json_schema_for_arg (cyclomatic 34): json_schema.get_json_schema_for_arg has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/json_schema.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a979cef7b9419f1df1290f0319cbd1f3591453d3dbb632c585b8a277e016b9f"}},{"ruleId":"D1","level":"warning","message":{"text":"ClaudeAgent._arun_adapter_stream (cyclomatic 33): ClaudeAgent._arun_adapter_stream has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/claude/agent.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc53e9e37d28b8c16e395a9dc4d948e486ac26e7b8b89808f24ed47b2ce1bf87"}},{"ruleId":"D1","level":"warning","message":{"text":"MySQLDb.upsert_sessions (cyclomatic 33): MySQLDb.upsert_sessions has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"1232f2f57478bc0210ff8e3f1f0e8e3a9077c14fb5d985fa82d976c37f513483"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.upsert_sessions (cyclomatic 33): AsyncSqliteDb.upsert_sessions has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"41643113436ae8a0e9648335de7db2cd6480ca376995a4c41b25239531d695e0"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb._create_table (cyclomatic 33): SqliteDb._create_table has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"be4c2a3e4406f8234f40b39ebf0f9de17ff211ae8ada6a786731f3b7024b6396"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.upsert_sessions (cyclomatic 33): SqliteDb.upsert_sessions has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd9509ecef8e9fd51f4268971c331d3545164ea2317c62def010377689359e3"}},{"ruleId":"D1","level":"warning","message":{"text":"runner._isolate_attempt (cyclomatic 33): runner._isolate_attempt has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d177d3332059a7c7c31e88d38da576d371293d158a17ce70429c9e3c6c4a73"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses._parse_provider_response_delta (cyclomatic 33): OpenAIResponses._parse_provider_response_delta has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1258}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a323b02efa367193aa159c1a64223d5f5e526c27a9ec6e6147f2824fafea940"}},{"ruleId":"D1","level":"warning","message":{"text":"router._resume_stream_generator (cyclomatic 33): router._resume_stream_generator has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c3807c8f02ff80375f508ac49700d2e830c51165269c805daafa6977cfb8850"}},{"ruleId":"D1","level":"warning","message":{"text":"TelegramTools.__init__ (cyclomatic 33): TelegramTools.__init__ has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/telegram.py"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0df21a1c49ccd5193abec713b382c17b9bca488a5cffbdfbe127d3f0b2595e"}},{"ruleId":"D1","level":"warning","message":{"text":"message.reformat_tool_call_ids (cyclomatic 33): message.reformat_tool_call_ids has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f15e3b7a7d5c4b244b1347db9f05bd4f5e15d22db28c8a21549fdbd5a667dc9"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb._build_search_results (cyclomatic 33): ChromaDb._build_search_results has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc244e594652b0134a8cf582b8cab7c1c09e7c5aa2c370f8297529df813cba21"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._deep_copy_single_step (cyclomatic 33): Workflow._deep_copy_single_step has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10594}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a670e3153f779a4b5296eb6f50d9f2d2d7277c5499006d50c29c5b7463f86b7"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsApp.build_resources (cyclomatic 33): AwsApp.build_resources has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/app/base.py"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc0be7de34fad4ef7b2ad7f13bf3eebbb003ceb35b76868030fd1e4ce9c3327b"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIChat._parse_provider_response (cyclomatic 32): OpenAIChat._parse_provider_response has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"9977e0e803b7d8a79e3d5e88ce9767944bf061bc77f1c92c7e4842ca0540ed1d"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._arun (cyclomatic 32): _run._arun has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2953}}}],"partialFingerprints":{"codehealthFindingId/v1":"744619320111e902c381e1a5deadbcaf02f7cd9847c716c6bc5eaa5384e9f217"}},{"ruleId":"D1","level":"warning","message":{"text":"Steps.execute_stream (cyclomatic 32): Steps.execute_stream has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c8cb88ef948d46926be27dc52191bcebac96ddace67c08fc2bc497911f04c8a"}},{"ruleId":"D1","level":"warning","message":{"text":"Steps.aexecute_stream (cyclomatic 32): Steps.aexecute_stream has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb2a80f62ff23ce8e6958cf530f07d0d9b2c63ebe91d7889f0d543197e2b9577"}},{"ruleId":"D1","level":"warning","message":{"text":"InfraApp.add_app_properties_to_resources (cyclomatic 32): InfraApp.add_app_properties_to_resources has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/base/app.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"467545e92c9d76a96599b60366af89e32c40d1bfc45a4e4ca9fe2de8591fa38c"}},{"ruleId":"D1","level":"warning","message":{"text":"suite._run_case_body (cyclomatic 31): suite._run_case_body has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ced129a2e4902cd0ac684486a6926b1e3141f5d1a137f1f534dc6f5edc986a44"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsBedrock._format_messages (cyclomatic 31): AwsBedrock._format_messages has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"c90c2ae2ca898ce175d8fb9a4d03f40c403196603d0e5712087ec0aecfada3f5"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteLLM._format_messages (cyclomatic 31): LiteLLM._format_messages has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea063a9e3daa88bf96144e6f2eaa2a6128217446e2cc847aae5e003c85e7f8f"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIChat._parse_provider_response_delta (cyclomatic 31): OpenAIChat._parse_provider_response_delta has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0d7bd445b6cfc38586e61fc130d9ea032b018fa926b8e33af5a4784b562ff4"}},{"ruleId":"D1","level":"warning","message":{"text":"MCPTools.__init__ (cyclomatic 31): MCPTools.__init__ has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d3e1e7109678dc352b7443bd91b4103787ab20bd576242b9619f164fb031e7"}},{"ruleId":"D1","level":"warning","message":{"text":"03_step_user_input_streaming.run_workflow_streaming (cyclomatic 30): 03_step_user_input_streaming.run_workflow_streaming has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e687fae9821ad5582bf741c3099822e6a22fd13bd9d18ab4a9267f8306d186"}},{"ruleId":"D1","level":"warning","message":{"text":"AntigravityAgent._translate_sse_event (cyclomatic 30): AntigravityAgent._translate_sse_event has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/antigravity/agent.py"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc67d196289d7e3e4ed9ec3d6244cd196ba94610e02de7a1ffab5a3bbf7d5b70"}},{"ruleId":"D1","level":"warning","message":{"text":"filter_converter.filter_expr_to_sqlalchemy (cyclomatic 30): filter_converter.filter_expr_to_sqlalchemy has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/filter_converter.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"36d71d7f20566356d2b789d7760ad00879ecf43d9cd71e5e0861af02e501bc01"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.get_sessions (cyclomatic 30): GcsJsonDb.get_sessions has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f4ce474a841f8d5b2c4532edce29b224e1f821705a4b41e019171e87b5708d"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.get_trace_stats (cyclomatic 30): GcsJsonDb.get_trace_stats has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca88f81393344ca738bfc010d37a90c9a88b5aaf9b2c86f3e236174d70d3385"}},{"ruleId":"D1","level":"warning","message":{"text":"InMemoryDb.get_sessions (cyclomatic 30): InMemoryDb.get_sessions has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"898d098791645ae0889eafd495c35798e6455dac99c4ffd1017785c5667283e4"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.get_sessions (cyclomatic 30): JsonDb.get_sessions has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca09fafbd012006c30fb3f56f33509ff5d7e344ab8d180d26a21caabe247dcf8"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMySQLDb.upsert_sessions (cyclomatic 30): AsyncMySQLDb.upsert_sessions has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":900}}}],"partialFingerprints":{"codehealthFindingId/v1":"6822774406504ccac74eb2535c46fec8f1da13e94de8503a9ea9645f7da3cd40"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.upsert_config (cyclomatic 30): PostgresDb.upsert_config has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4081}}}],"partialFingerprints":{"codehealthFindingId/v1":"37c64ef1ba10f4efcc9b645f0e5ef6e8d5e789bc29047ab1157f81f5aae52df9"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.upsert_config (cyclomatic 30): SqliteDb.upsert_config has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3967}}}],"partialFingerprints":{"codehealthFindingId/v1":"684ab5d6bdcaa73a4daa145ee5469e8e7657db6f48f2d3dbb52f9279ea046d1d"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._aprocess_lightrag_content (cyclomatic 30): Knowledge._aprocess_lightrag_content has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2630}}}],"partialFingerprints":{"codehealthFindingId/v1":"5868773814e53736964d571022c2dcedd0cce476a29bd687f752ffdcc67198a4"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._process_lightrag_content (cyclomatic 30): Knowledge._process_lightrag_content has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2787}}}],"partialFingerprints":{"codehealthFindingId/v1":"19765f13a828396300c0de86ed6076f49d41e9e3bd6caab47b974abd146b2fae"}},{"ruleId":"D1","level":"warning","message":{"text":"WebsiteReader.crawl (cyclomatic 30): WebsiteReader.crawl has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bc78f940aadf227a04090a445673854db7ccc2cb9b6b2c4d0d4162cc9b92c08"}},{"ruleId":"D1","level":"warning","message":{"text":"router.handle_workflow_subscription (cyclomatic 30): router.handle_workflow_subscription has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e83e00b4047153043fc0d501697ba5132054fcc6e49eef2e5bf2ebee96f1786"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowSession.get_messages_from_team_runs (cyclomatic 30): WorkflowSession.get_messages_from_team_runs has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"b435bd47da5e2f81343db883f20a43812ae3c9f5d96fdf1de8c20317e92cd3d1"}},{"ruleId":"D1","level":"warning","message":{"text":"SalesforceTools.__init__ (cyclomatic 30): SalesforceTools.__init__ has cyclomatic complexity 30 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/salesforce.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a48f7329ff34f02fc4e7c73f2decc037ac194bd0c3cea247ad6ff1642bf888"}},{"ruleId":"D1","level":"warning","message":{"text":"A2AClient._parse_stream_event (cyclomatic 29): A2AClient._parse_stream_event has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a45baf5855400abfb2a78b0274d33a850eecacf647bfd8e8a7a263777962b3"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb.upsert_sessions (cyclomatic 29): SingleStoreDb.upsert_sessions has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"f290b971f5ee0a44f9ecdfc66f4cd9d5d7ad5e72cf8e9c99926d8bf91c1f3372"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore._apply_remember (cyclomatic 29): EntityMemoryStore._apply_remember has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1551}}}],"partialFingerprints":{"codehealthFindingId/v1":"b071c95ad5c58178b593177bdea3f9175f7748c46017eace0980e6f11e05fcf4"}},{"ruleId":"D1","level":"warning","message":{"text":"RunMetrics.__add__ (cyclomatic 29): RunMetrics.__add__ has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba76b98e1ce9b3e8d4cac0624932b110fb2b898f0cf7d2ba849057756bd8d32"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses._parse_provider_response (cyclomatic 29): OpenAIResponses._parse_provider_response has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1162}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ad9701993e5ff73dd1243d162278fae32ab269a4805a9de3e57c071ae07bb89"}},{"ruleId":"D1","level":"warning","message":{"text":"input.extract_media (cyclomatic 29): input.extract_media has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/input.py"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bdc963314fefecb53934e0a5e6c36776ab10f4340ac81700270f1da91f3533a"}},{"ruleId":"D1","level":"warning","message":{"text":"RedmineTools.__init__ (cyclomatic 29): RedmineTools.__init__ has cyclomatic complexity 29 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"70d0babf2780e55b0bd1a5cd80d378ee7c7dad720461cb208e32975c57fc2257"}},{"ruleId":"D1","level":"warning","message":{"text":"message.get_text_from_message (cyclomatic 29): message.get_text_from_message has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be89c63fb0f446704d7faed69dff92df687ea37accde0181a172980b355dbc7"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb._hybrid_search (cyclomatic 29): ChromaDb._hybrid_search has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda79702e82aa9210b2c2cd9f03568635b1adec6ffed9e0d1c4797eb6b4c8af6"}},{"ruleId":"D1","level":"warning","message":{"text":"Step._execute_nested_workflow_stream_inner (cyclomatic 29): Step._execute_nested_workflow_stream_inner has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2496}}}],"partialFingerprints":{"codehealthFindingId/v1":"313d6dee234888c24315d6ce1311f71e402775c3551ccf93d84ebee4cf57920b"}},{"ruleId":"D1","level":"warning","message":{"text":"Step._aexecute_nested_workflow_stream_inner (cyclomatic 29): Step._aexecute_nested_workflow_stream_inner has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2766}}}],"partialFingerprints":{"codehealthFindingId/v1":"842e641ea80cd4a01efe520ec970f88a8d67255170a7cd1cf8eb0404fbad5343"}},{"ruleId":"D1","level":"warning","message":{"text":"EcsService._update (cyclomatic 29): EcsService._update has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/service.py"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"211ccc03f9337256c37495b1372546fa0e9c5c0236fbf1176ddcf1988c9d8714"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.aget_relevant_docs_from_knowledge (cyclomatic 28): _messages.aget_relevant_docs_from_knowledge has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1889}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2357a9d6b6401767fa5007cb494731cab6d193c13fa16c61d86bdd0650ae0b8"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.get_traces (cyclomatic 28): ValkeyDb.get_traces has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2214}}}],"partialFingerprints":{"codehealthFindingId/v1":"0de9b6172a51aed624dc43d295c269a0ffaa9adb6b0b12d23d4eb3ba79166a70"}},{"ruleId":"D1","level":"warning","message":{"text":"AccuracyEval.run (cyclomatic 28): AccuracyEval.run has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe6b10620489799de9ce755f1af4c80bc50ae1c60d1758ad3ce5bdb3ea642e2"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiInteractions._build_input (cyclomatic 28): GeminiInteractions._build_input has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"30aedc7863782dff1de4a343263e5e200c06dccb47be51dd986ff8dddb02bbb8"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses.get_request_params (cyclomatic 28): OpenAIResponses.get_request_params has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a736e8dfe575719f69c2ee0a579d3d793e7fa9f82be91a3969080ddbf57fa0b"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowSession.get_messages_from_agent_runs (cyclomatic 28): WorkflowSession.get_messages_from_agent_runs has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2d9dd4c924dcac1b539a9dae64af5a5ec91f2e06519d24169bd25cf79d4f8e"}},{"ruleId":"D1","level":"warning","message":{"text":"_default_tools.aget_relevant_docs_from_knowledge (cyclomatic 28): _default_tools.aget_relevant_docs_from_knowledge has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_default_tools.py"},"region":{"startLine":1725}}}],"partialFingerprints":{"codehealthFindingId/v1":"b99f2f0bf6f48e575320f2fb84136bff15f5cb1bd5f6057002bb0f1761cdf844"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run_tasks (cyclomatic 28): _run._run_tasks has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f57ab0e09c43f119711275fb2da76a67d6ce9fd25227e11bff3023961410180"}},{"ruleId":"D1","level":"warning","message":{"text":"GithubTools.get_repository_with_stats (cyclomatic 28): GithubTools.get_repository_with_stats has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/github.py"},"region":{"startLine":993}}}],"partialFingerprints":{"codehealthFindingId/v1":"d347b09737216ef6b564a63ef2dcb5c643f496810609d55ac750573816d662f8"}},{"ruleId":"D1","level":"warning","message":{"text":"workflow.print_response (cyclomatic 28): workflow.print_response has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc5222dd0026d191269eeefccd64ea53b2111a0f89a086a533d65317b6ebfaf1"}},{"ruleId":"D1","level":"warning","message":{"text":"workflow.aprint_response (cyclomatic 28): workflow.aprint_response has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e92637b7aece1ced8072ae020ed83b3005be6225d9bd58a792f0ea74fb956f"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb._build_get_results (cyclomatic 28): ChromaDb._build_get_results has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3741ba2f6ae1c1791542f98dc48a5a65a184da611472497aa6224e0408e3f57"}},{"ruleId":"D1","level":"warning","message":{"text":"Parallel.aexecute_stream (cyclomatic 28): Parallel.aexecute_stream has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"edff2fcf86e97d754032f4ffdccf32f9ffebed3c72a8ac3b9e6d279b9bec6f58"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._handle_event (cyclomatic 28): Workflow._handle_event has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1696}}}],"partialFingerprints":{"codehealthFindingId/v1":"04a24158404d780675e3a9fd9b1cc413fcfacb2b99511dede5b655cba1c5d659"}},{"ruleId":"D1","level":"warning","message":{"text":"EmrCluster._create (cyclomatic 28): EmrCluster._create has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/emr/cluster.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"32405723ede30a4620742f40c3abea79a0de6711ff28c5978a3e77d7bbb586a5"}},{"ruleId":"D1","level":"warning","message":{"text":"infra_cli.patch (cyclomatic 28): infra_cli.patch has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"d44f1b295ab49f68841b92681f22df41806aee3701b85551b67e2bd9b420e920"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.aget_tools (cyclomatic 27): _tools.aget_tools has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"e657ce5c67c256397a90b1bb13495997389544933061943a8175494238c27952"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_traces (cyclomatic 27): DynamoDb.get_traces has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2374}}}],"partialFingerprints":{"codehealthFindingId/v1":"56b38fbbb11c86e9b9af7f2b3431878224202c46933cc00c8fa204796691fd3d"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.get_traces (cyclomatic 27): GcsJsonDb.get_traces has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1532}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a99469fa23a77c3c53cc4060be5576f38fb00fc8459065b780928a412e9d86"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.get_traces (cyclomatic 27): JsonDb.get_traces has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6969926879a8870b661a0e95d79cb4bc9acfd06be750c340d9a8a91f3fa77a6"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.upsert_memories (cyclomatic 27): ValkeyDb.upsert_memories has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e56583592cc9f763824e54bfa98b81c801a23fac5a4c8aa5f1b52d35a1ca2af"}},{"ruleId":"D1","level":"warning","message":{"text":"AccuracyEval.arun (cyclomatic 27): AccuracyEval.arun has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4736a1327ad16a03328f0001e2380a0f8d81d7e3a835a9f6b9176d754da4d32"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._aload_from_content (cyclomatic 27): Knowledge._aload_from_content has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1818}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc84c0d50f9cf0ee281dac9c0e059fdacedbad48ad2b0e09162964c280a00267"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._load_from_content (cyclomatic 27): Knowledge._load_from_content has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1924}}}],"partialFingerprints":{"codehealthFindingId/v1":"856eb9f12168cec41940badf9980460e14a961c89dcadc6c4140632970a7eccc"}},{"ruleId":"D1","level":"warning","message":{"text":"DoclingReader.read (cyclomatic 27): DoclingReader.read has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/docling_reader.py"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a85593650cf366b64bba4e2501a1c3a1347b4e7688c73c4316fba53ea858de2"}},{"ruleId":"D1","level":"warning","message":{"text":"WebsiteReader.async_crawl (cyclomatic 27): WebsiteReader.async_crawl has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0631dae34108c5c051c430d0c22b4d584cecf9313c3b32bc38b8228ad62ab79"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._format_file_for_message (cyclomatic 27): Gemini._format_file_for_message has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"88f148888f98b04a7723a870b4c74b473a92e2bdc58a795d4ce01fab4559724b"}},{"ruleId":"D1","level":"warning","message":{"text":"approval._build_approval_dict (cyclomatic 27): approval._build_approval_dict has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/approval.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"412d356aa91dfac926ae30a3914d4756c5d82a6120db06d73953c127847bdb78"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseWorkflowRunOutputEvent.to_dict (cyclomatic 27): BaseWorkflowRunOutputEvent.to_dict has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e63eb49c55231bd979f0b26721cc762219c6d8fffaaca05a822c3146c837a7"}},{"ruleId":"D1","level":"warning","message":{"text":"_response._update_run_response (cyclomatic 27): _response._update_run_response has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":922}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fcba3ed314eb7dcfb06af001288cc71443cd7f3ca4fd90d929f12513d20bde"}},{"ruleId":"D1","level":"warning","message":{"text":"_response._ahandle_model_response_stream (cyclomatic 27): _response._ahandle_model_response_stream has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1166}}}],"partialFingerprints":{"codehealthFindingId/v1":"5efabc8acd8f9cd33bfd30a27a06a7f53f6febb9e1ddbd702c06e36022a60728"}},{"ruleId":"D1","level":"warning","message":{"text":"_response._convert_response_to_structured_format (cyclomatic 27): _response._convert_response_to_structured_format has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1688}}}],"partialFingerprints":{"codehealthFindingId/v1":"75ba45a50a10a252de7ad74af937ee011402c1179dcc0ba597d138e9183d8258"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._route_requirements_to_members (cyclomatic 27): _run._route_requirements_to_members has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5386}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7918f4332b1c7a21ea2b25e16fc99633395c742db7b37eb540e0b24dd6aaae"}},{"ruleId":"D1","level":"warning","message":{"text":"agentos._normalize_eval_run (cyclomatic 27): agentos._normalize_eval_run has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/agentos.py"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"44a5e7878d3db0701862ded4fc50ccd587e68ea75f0b10470145689fed4c016e"}},{"ruleId":"D1","level":"warning","message":{"text":"Function.from_callable (cyclomatic 27): Function.from_callable has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d696bff6caf5eae763c08cf09ab9ac37cfe352a5a9054b00bd5c3986811307f"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionCall.aexecute (cyclomatic 27): FunctionCall.aexecute has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf007eaf0430cfa2244f52e6980facf4f404ce083126b9d020852b9cf36256c8"}},{"ruleId":"D1","level":"warning","message":{"text":"PubmedTools.parse_details (cyclomatic 27): PubmedTools.parse_details has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/pubmed.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"18d2368509df7e5563c8a9bd709b7b84073aa1d23a195e8655c321bb03a8887a"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.filter_expr_to_clickhouse (cyclomatic 26): utils.filter_expr_to_clickhouse has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/utils.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"6513c46ebf13946e6d6334a76c4d7b8655055d768e3f83ac558a74f3e22405b3"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_trace_stats (cyclomatic 26): DynamoDb.get_trace_stats has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2541}}}],"partialFingerprints":{"codehealthFindingId/v1":"be447e2ba841be00cd7342a4cbd80fddd1e801589ac75ac3db3c2a7d8a985298"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.get_trace_stats (cyclomatic 26): JsonDb.get_trace_stats has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1606}}}],"partialFingerprints":{"codehealthFindingId/v1":"d992d895729672dd57a18cc2f43a6a32b808dda2c83573c136f01a13c8ba9f46"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMySQLDb.upsert_session (cyclomatic 26): AsyncMySQLDb.upsert_session has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"b710f695ffae32c89083f67b555b915b79d28d5c20894bd2e041f032e47d35d4"}},{"ruleId":"D1","level":"warning","message":{"text":"RedisDb.get_traces (cyclomatic 26): RedisDb.get_traces has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1880}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d48f5addcdee9c86b774e264d125043581676672c4834a8625799c9fc4feba"}},{"ruleId":"D1","level":"warning","message":{"text":"runner.arun_rollouts (cyclomatic 26): runner.arun_rollouts has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b48bab034ef42006d8a7597b797d07ee9a6d5e2f490d928df0d9f4a0a9c1c3"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.collect_mcp_tools_from_workflow_step (cyclomatic 26): utils.collect_mcp_tools_from_workflow_step has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1476}}}],"partialFingerprints":{"codehealthFindingId/v1":"af286dc3cc811704531ca4e6d7b70b84d0556c5d465d2f059fde261f78752faf"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseRunOutputEvent.from_dict (cyclomatic 26): BaseRunOutputEvent.from_dict has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/base.py"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"675192847778f8d7dc169140c74d38875d928a3d42ea83ec68bd59c10e456e3c"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._build_trailing_sections (cyclomatic 26): _messages._build_trailing_sections has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"4188cf25ebb29e1c74e24685ac24df7453881319a4fe106ea0a76b0f2ec0dc86"}},{"ruleId":"D1","level":"warning","message":{"text":"_response._handle_model_response_stream (cyclomatic 26): _response._handle_model_response_stream has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ccf0ee8426da7b8f842940b89d34c310ee43db4abbb3746d1c3bb39dc64df13"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._run (cyclomatic 26): _run._run has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb40776141116f70fbc0860a4c862ca5fbfdce55392ed9919d15d00bfcc0c2b"}},{"ruleId":"D1","level":"warning","message":{"text":"FileGenerationTools.__init__ (cyclomatic 26): FileGenerationTools.__init__ has cyclomatic complexity 26 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file_generation.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"55d19b3ba3c18734011ae4af599cfb4f68d66bb36339771ede33941f65bfdb80"}},{"ruleId":"D1","level":"warning","message":{"text":"YouTools._format_results (cyclomatic 26): YouTools._format_results has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/youcom.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"4075cee36d6dc2020aa25afdc21f84090c07e555a3ee324f9dc9a50f4ca471f4"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.from_dict (cyclomatic 26): Step.from_dict has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa6c70f565580c5ddebc58bcc41f7554111c7dddf46df49d6077378645aa432"}},{"ruleId":"D1","level":"warning","message":{"text":"02_error_retry_skip_streaming.main (cyclomatic 25): 02_error_retry_skip_streaming.main has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"71c688028156e4f46b4103265aa0a06e395d770ba73d75daaef8fe14f1963686"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseDb.__init__ (cyclomatic 25): BaseDb.__init__ has cyclomatic complexity 25 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dac40633dbea8025074d0d6a1359afff87e29b176caaa38f5eac89b37286d0d"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.get_eval_runs (cyclomatic 25): GcsJsonDb.get_eval_runs has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1115}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d984ebb3ee41171afd91a9307fa7772ec972504ac44156bc960a0b6136700fc"}},{"ruleId":"D1","level":"warning","message":{"text":"InMemoryDb.get_eval_runs (cyclomatic 25): InMemoryDb.get_eval_runs has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"821dd01bfb9bce72505ca928a9da005131cf3ad71438a7befeab8d93e26f61f5"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.get_eval_runs (cyclomatic 25): JsonDb.get_eval_runs has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62631097ecbad74cc9d6c4bce6e6e41ef7e7479735b11af4c268f40007999c7"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.upsert_sessions (cyclomatic 25): AsyncMongoDb.upsert_sessions has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"55df96409a120ba50e230fe7073158e505881d0fd80f699b5e62d3b3d4837300"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.upsert_sessions (cyclomatic 25): MongoDb.upsert_sessions has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"e61c5ab83aebce230256cca1a433eeb18240dbbe01632ade5484f5b2811a1464"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.deserialize_session_json_fields (cyclomatic 25): utils.deserialize_session_json_fields has cyclomatic complexity 25 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/utils.py"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6d308b17e437ff7508fb544134c6516149867607c3d6957051fa392adf0021b"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.get_trace_stats (cyclomatic 25): ValkeyDb.get_trace_stats has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2315}}}],"partialFingerprints":{"codehealthFindingId/v1":"68da9b912d590123498785b5c52ae4e3549015b6653606a0c834f30dae0bec49"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemory.get_context_text (cyclomatic 25): EntityMemory.get_context_text has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3e5ffbd39a845ee131d08507e2c905ad66d71cd3ef40f2c92d52fecc9b0051"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore._format_entity_hit (cyclomatic 25): EntityMemoryStore._format_entity_hit has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1988}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a917d0ae9cd194f9cfbd71e172805535c3f17c19c0be20811a3c73b990ed640"}},{"ruleId":"D1","level":"warning","message":{"text":"Model._populate_assistant_message (cyclomatic 25): Model._populate_assistant_message has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"24156a84b969d4742a4fd47fcd8ab43c0e2d7670f0a824270633138d27fef2e3"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.map_run_output_to_a2a_task (cyclomatic 25): utils.map_run_output_to_a2a_task has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"80299d17e9000b93685b6014c9506c0881c1e1ca468222b9571d9413426a20dd"}},{"ruleId":"D1","level":"warning","message":{"text":"helpers.upload_and_send_media_async (cyclomatic 25): helpers.upload_and_send_media_async has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/whatsapp/helpers.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e45e669e17904068803ac0287258b09658096209031929401768ef167cae4b"}},{"ruleId":"D1","level":"warning","message":{"text":"JWTValidator.validate_token (cyclomatic 25): JWTValidator.validate_token has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f53c2143d7414bb744bb8b2fd87591f40f484126c294bc4e7171425136bdf23"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowRunOutput.from_dict (cyclomatic 25): WorkflowRunOutput.from_dict has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":936}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cf80ac989fd7c7ea2913fa52f04ccdbffbc31e6cfd751e3b954f0553eba4e48"}},{"ruleId":"D1","level":"warning","message":{"text":"ScheduleExecutor.execute (cyclomatic 25): ScheduleExecutor.execute has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/scheduler/executor.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be5a21c2e9438092e5b77a654438d691d622379a248bf6fa6092b3089da3b40"}},{"ruleId":"D1","level":"warning","message":{"text":"_init.__init__ (cyclomatic 25): _init.__init__ has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_init.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"950b87d1773a0870bb7fa36b04683c9a3a0490ff304124927024c9a817d5cf57"}},{"ruleId":"D1","level":"warning","message":{"text":"MCPTools._connect (cyclomatic 25): MCPTools._connect has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"80bd463819fbbe4070718bf295243c7d079a0a3b0930acf009b96deb483dbff5"}},{"ruleId":"D1","level":"warning","message":{"text":"ParallelTools.parallel_extract (cyclomatic 25): ParallelTools.parallel_extract has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/parallel.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"9110a6fb743e84a5ea119ee1ce8d6d9dda41b891111288c9474bbe1822e5ba8e"}},{"ruleId":"D1","level":"warning","message":{"text":"Workspace.list_files (cyclomatic 25): Workspace.list_files has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workspace.py"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15ec43b2b4ed04d782fee1bfd7066036aab6ad4c10191995019d8c785a0adea"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.build_panels_stream (cyclomatic 25): agent.build_panels_stream has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47db07cecb08d6a6495727e1be9f3242873441d97241c7f798cf98bba5d35c9"}},{"ruleId":"D1","level":"warning","message":{"text":"EcsTaskDefinition._create (cyclomatic 25): EcsTaskDefinition._create has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/task_definition.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"0acb7202a9d06604dd2cac2e7dfb2d6cd42d2322e853114c02a23e222b6f9cc1"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_relevant_docs_from_knowledge (cyclomatic 24): _messages.get_relevant_docs_from_knowledge has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1790}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc4b31358ec36c233bfe3b8f35d477eb09a2cdfb07a0e6bc4657215b190f6ecd"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.ahandle_model_response_stream (cyclomatic 24): _response.ahandle_model_response_stream has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1208}}}],"partialFingerprints":{"codehealthFindingId/v1":"d59a409d86de4b9859d9558644679c8cc18dd4d19f7c4d0556d2bf2ac73bc408"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseExternalAgent.print_response (cyclomatic 24): BaseExternalAgent.print_response has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"60fd6102d067bd83adb187cfe9937c41a20f689bae687884d34bc4561624da8c"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseExternalAgent.aprint_response (cyclomatic 24): BaseExternalAgent.aprint_response has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c907567543b8390f818f7cde15a74d286f16df92e4f842379929e2bfa3fe66"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseExternalAgent._arun_stream (cyclomatic 24): BaseExternalAgent._arun_stream has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc45128a89820122ba620febd7f927359a5abd84f16248ded2f08cb40212e908"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb.get_sessions (cyclomatic 24): FirestoreDb.get_sessions has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"4712a80ca741969454ffe77b269c722ef9dda3265b9ec27548c0e11386410f33"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb._create_table (cyclomatic 24): SingleStoreDb._create_table has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"8059910370ce8fb45e71e9dbe4aaff81004f586c889ebef3552ff412e9af147e"}},{"ruleId":"D1","level":"warning","message":{"text":"Model.run_function_calls (cyclomatic 24): Model.run_function_calls has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2313}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7b2fef3d55b736e3012c048442baa3f1bdf0ccdd1094b96d3db7f0335394029"}},{"ruleId":"D1","level":"warning","message":{"text":"_default_tools.get_relevant_docs_from_knowledge (cyclomatic 24): _default_tools.get_relevant_docs_from_knowledge has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_default_tools.py"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"43f39e053b8050b67160d9adfde2dc2814b8861cf447b57bc8286a83abad85bd"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._continue_run_dispatch_stream_with_member_events (cyclomatic 24): _run._continue_run_dispatch_stream_with_member_events has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6882}}}],"partialFingerprints":{"codehealthFindingId/v1":"4230c46961a96033a5199d8ad1ae42fcec066a3e70586d3673c25c6df088a94b"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleSheetsTools.__init__ (cyclomatic 24): GoogleSheetsTools.__init__ has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/sheets.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"f484c33601e01374449429456ea924a55d368f139be6367f700e6e7e7d425988"}},{"ruleId":"D1","level":"warning","message":{"text":"ParallelTools.parallel_search (cyclomatic 24): ParallelTools.parallel_search has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/parallel.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff7f372822f128324e48dbe65b74de193de75a4e77822594dc4975579ef9c0a"}},{"ruleId":"D1","level":"warning","message":{"text":"SlackTools._build_instructions (cyclomatic 24): SlackTools._build_instructions has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"557e6dc61ed4b75c1362b03523fff21250d48a11d7974ad9677a7e2c182de9b1"}},{"ruleId":"D1","level":"warning","message":{"text":"LanceDb.__init__ (cyclomatic 24): LanceDb.__init__ has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39a00ec2ce80e639a41b1bbb6afddf073f66612e7830444c5b7fc834be05246"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._enrich_event_with_workflow_context (cyclomatic 24): Workflow._enrich_event_with_workflow_context has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1800}}}],"partialFingerprints":{"codehealthFindingId/v1":"4839f741c9b2fa8788dee68d61ba8f45827c4d2d05b0e70b4689cc3cfb700f8f"}},{"ruleId":"D1","level":"warning","message":{"text":"TargetGroup._create (cyclomatic 24): TargetGroup._create has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elb/target_group.py"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e639749c577c9b4ca5dd8e5c3de0a0e72a9b5e5823a5919773f64bfc7ecdb29"}},{"ruleId":"D1","level":"warning","message":{"text":"disruption_catchup.test_full_catchup (cyclomatic 23): disruption_catchup.test_full_catchup has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"f359b616497d030d47c6ea455aa85bb82587ff109b83a67a0f926f62b7bb9f76"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.update_run_response (cyclomatic 23): _response.update_run_response has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"458e10bf2c8a9c44c9dab9c431881ea03ab04459cc6333edf7503d844fdeefdc"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.handle_model_response_stream (cyclomatic 23): _response.handle_model_response_stream has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7593e96874738384e3de01c8bb42995535352068fa59eaade0114caffd0590"}},{"ruleId":"D1","level":"warning","message":{"text":"_storage.from_dict (cyclomatic 23): _storage.from_dict has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"800904bd58d6a22ef85c6fc9d7fb245908c42c1a0d47153d513dc4f577c17480"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb.get_trace_stats (cyclomatic 23): FirestoreDb.get_trace_stats has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":2127}}}],"partialFingerprints":{"codehealthFindingId/v1":"098b1cb14273bfb96171302b52c736256288f6e9f3d7f686dd69ef0e8990a26a"}},{"ruleId":"D1","level":"warning","message":{"text":"MySQLDb.upsert_session (cyclomatic 23): MySQLDb.upsert_session has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b44010aea271d31cf2d3d723d8b6e371fee29daea3e802eb7e618a1e01c4bc"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_trace_stats (cyclomatic 23): AsyncPostgresDb.get_trace_stats has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2690}}}],"partialFingerprints":{"codehealthFindingId/v1":"513977e6e3155b8294e945e481dad540e3ed1bb33115d8159f96a9cabdfc1dcb"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_trace_stats (cyclomatic 23): PostgresDb.get_trace_stats has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3163}}}],"partialFingerprints":{"codehealthFindingId/v1":"284474cc3ce0acdb73ff2401a791a3422fea652b0a16c7c823708d0273296000"}},{"ruleId":"D1","level":"warning","message":{"text":"RedisDb.get_sessions (cyclomatic 23): RedisDb.get_sessions has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"d60014d593db83a62d5b6f0aac763873918d4b11fbd1be4488f755f4f7049e8f"}},{"ruleId":"D1","level":"warning","message":{"text":"RedisDb.get_eval_runs (cyclomatic 23): RedisDb.get_eval_runs has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1436}}}],"partialFingerprints":{"codehealthFindingId/v1":"be78323f21c2a54d1e1ddee9bd171422e9adbe76cc9f147190e0b380acfc1c6b"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.get_sessions (cyclomatic 23): ValkeyDb.get_sessions has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fe581f7e335fba4e5a2769ba04cb69b4139a53f6ff96eebd1adf4de2d79d66"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.get_eval_runs (cyclomatic 23): ValkeyDb.get_eval_runs has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1866}}}],"partialFingerprints":{"codehealthFindingId/v1":"2692c79ca26d4c0bfe769590e0cba6adfefedcf18b9f8dff38b7fc1ba2cb1def"}},{"ruleId":"D1","level":"warning","message":{"text":"MarkdownChunking._split_large_section (cyclomatic 23): MarkdownChunking._split_large_section has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/markdown.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d161495a1db2dc560f4bd7439234f0b230b03f9272e19b710c98940703ce9d3"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore._forget_edge (cyclomatic 23): EntityMemoryStore._forget_edge has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2352}}}],"partialFingerprints":{"codehealthFindingId/v1":"75cbb94f634598e0ec7258850f6d1c342605aeacb23d90c40464b685d9130653"}},{"ruleId":"D1","level":"warning","message":{"text":"router.handle_workflow_via_websocket (cyclomatic 23): router.handle_workflow_via_websocket has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"dde31daa507a6bd1940397aba66c060ea4afd045804d47d5e4b9b8c3ff5ff307"}},{"ruleId":"D1","level":"warning","message":{"text":"ToolCallScorer.score (cyclomatic 23): ToolCallScorer.score has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/scorer/tools.py"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"327858ad027db32675e8ccbc67b8a7831fb9aebd28896e3400a4f0524c692bb9"}},{"ruleId":"D1","level":"warning","message":{"text":"_utils._deep_copy_field (cyclomatic 23): _utils._deep_copy_field has cyclomatic complexity 23 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_utils.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"9448e6e564c25e18796fddc7f1d5c14b5fadffb11b38e40946f53d9c93ec1518"}},{"ruleId":"D1","level":"warning","message":{"text":"MCPTools.get_session_for_run (cyclomatic 23): MCPTools.get_session_for_run has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba2b4e73736cd3434010184583fd35819b7949677f0127589d45cc7b50d2731"}},{"ruleId":"D1","level":"warning","message":{"text":"WhatsAppTools.__init__ (cyclomatic 23): WhatsAppTools.__init__ has cyclomatic complexity 23 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/whatsapp.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"accf803fcf30dd74b45d0f092bac3e28568dbd409118a61c5027f32a6b81815c"}},{"ruleId":"D1","level":"warning","message":{"text":"prompts.get_json_output_prompt (cyclomatic 23): prompts.get_json_output_prompt has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/prompts.py"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68ab52c9e2c12b697eb779856c381d109cef5ceca1360ba46faf7360d42b208"}},{"ruleId":"D1","level":"warning","message":{"text":"streamlit._load_session (cyclomatic 23): streamlit._load_session has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/streamlit.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"8023bdf05b297843f9cc0deb7f473a380e382f1663f810a58200ec6a14eaeef0"}},{"ruleId":"D1","level":"warning","message":{"text":"Loop.execute (cyclomatic 23): Loop.execute has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"115abf2fdf51f8b9d7234225b207682af0643280d7d6bdb8985a70ea56b136d7"}},{"ruleId":"D1","level":"warning","message":{"text":"Loop.aexecute (cyclomatic 23): Loop.aexecute has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"031322c043078c150a097a6c1b67ce306d2b0729b7f97d8c00adc279d698b5ce"}},{"ruleId":"D1","level":"warning","message":{"text":"ContinueExecutionState.__init__ (cyclomatic 23): ContinueExecutionState.__init__ has cyclomatic complexity 23 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/utils/hitl.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"10699b6d0b136a054a4641530f4715c9ac57454f1526026b51ef802394a4e14d"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.arun (cyclomatic 23): Workflow.arun has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":9639}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c167fb22fa0d149b1fad9f6a7ba4c7110f8ab0470760726e2d7aabef9b23b44"}},{"ruleId":"D1","level":"warning","message":{"text":"CacheCluster._update (cyclomatic 23): CacheCluster._update has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"014fb8c53a3f6556a66e7e685e6b765ed27825450d82af81a99af3f51c874970"}},{"ruleId":"D1","level":"warning","message":{"text":"InfraConfig.get_resources (cyclomatic 23): InfraConfig.get_resources has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/config.py"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"26b092d0d8c767d4bf79495e0abca0feff222aeb157bdeb21373cdf4c3d47900"}},{"ruleId":"D1","level":"warning","message":{"text":"A2AClient._build_message_request (cyclomatic 22): A2AClient._build_message_request has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"16628c127c411eb5c7cddad3f3d919b9740599cfd1061e8e9988e2400ae7252f"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_eval_runs (cyclomatic 22): DynamoDb.get_eval_runs has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1907}}}],"partialFingerprints":{"codehealthFindingId/v1":"a236958d8be0c1cd21461a5218964ab6df14664f194e75678723ec381a3c0fa4"}},{"ruleId":"D1","level":"warning","message":{"text":"v1_to_v2.convert_v1_media_to_v2 (cyclomatic 22): v1_to_v2.convert_v1_media_to_v2 has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"9790bc359341543e0b52472a68f7e5f85327a2ba7bedd2f601bc33fbeb7d8f36"}},{"ruleId":"D1","level":"warning","message":{"text":"v1_to_v2.convert_v1_fields_to_v2 (cyclomatic 22): v1_to_v2.convert_v1_fields_to_v2 has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"18b13e10c283887054176377f304b061af00396b9b38c84827673a1652f9d94b"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.get_sessions (cyclomatic 22): AsyncMongoDb.get_sessions has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffc62b243c5d3af1239adba754405d13108aaa78ea9a28b27cd2fbe15f029592"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.get_sessions (cyclomatic 22): MongoDb.get_sessions has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee20bcd2fc49c5da75fec68d33855bafe6be00766a536bf7ba302fd1dab80128"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb._create_table (cyclomatic 22): AsyncPostgresDb._create_table has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa1e2aa05102725a1f570402f9e6a931ce5e986d33e89d30bf56afcdf75bc91c"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_eval_runs (cyclomatic 22): AsyncPostgresDb.get_eval_runs has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2189}}}],"partialFingerprints":{"codehealthFindingId/v1":"57fa77f1dbf2f026f21423e3614b45e0060f9cde89f34740958ab0a5d5d40484"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_span_stats (cyclomatic 22): AsyncPostgresDb.get_span_stats has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3010}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6cfbde9bcb830d49e8a65772a9e3633276abd48d243ece7e368a27e9e57816"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.upsert_session (cyclomatic 22): PostgresDb.upsert_session has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"8abd7a42af342258c90c5da48a8be292335834c5d87401ea9823e5d07129c5a8"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_span_stats (cyclomatic 22): PostgresDb.get_span_stats has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3481}}}],"partialFingerprints":{"codehealthFindingId/v1":"681c0c8bcf4c2aa37f79ca1badcfeab22a8d7e38f9e5fb7882a38e7b02b528ec"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_trace_stats (cyclomatic 22): AsyncSqliteDb.get_trace_stats has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2873}}}],"partialFingerprints":{"codehealthFindingId/v1":"225500ecac2502808637ac7af75a8bbb220d40fbb896eb929dcf127bff897deb"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.get_trace_stats (cyclomatic 22): SqliteDb.get_trace_stats has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2783}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d32b149b99eb3e0fc0411abc8267c171bee62fc8d6831ff581046ca984dcae1"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore.build_context (cyclomatic 22): EntityMemoryStore.build_context has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b1f3e5ce7585470bd8bb268e3e3421d7158c2a63aab6e098ede6593dd150e2b"}},{"ruleId":"D1","level":"warning","message":{"text":"Ollama._format_message (cyclomatic 22): Ollama._format_message has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ollama/chat.py"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"09328e82f7056231f1e0a7d1a6aba858b7d934470398824527beda56b063f540"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.get_knowledge_instance (cyclomatic 22): utils.get_knowledge_instance has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"415475738ae56d5320f0583f20a57040744cac1380920f7ca2af155ccd033c32"}},{"ruleId":"D1","level":"warning","message":{"text":"RunInput.to_dict (cyclomatic 22): RunInput.to_dict has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"585e1578d527a731cc3c6b8d2de7ebbaaa7c4345f5b73d938a861400cd8eb795"}},{"ruleId":"D1","level":"warning","message":{"text":"TeamRunInput.to_dict (cyclomatic 22): TeamRunInput.to_dict has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"03b0bef0c59ad53925c19948247472bd52c3bd8279afa65a64e846b0e42d186f"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._handle_team_run_cancellation (cyclomatic 22): _run._handle_team_run_cancellation has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4334}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dee1b3892a8b1d0a0b5a36ce386483033c1c0f77dcf0d05f59b511a881b4b5f"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.acontinue_run_dispatch (cyclomatic 22): _run.acontinue_run_dispatch has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7705}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df384881d1add06117d1692b6f1709f93bf57d701d2229f19f7ae207093d02b"}},{"ruleId":"D1","level":"warning","message":{"text":"DoclingTools.__init__ (cyclomatic 22): DoclingTools.__init__ has cyclomatic complexity 22 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/docling.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3e1e2459cd5a14a9a5203a8e379a7dd1e4971c5f02be5f0b591f2596ee0b77"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleCalendarTools.__init__ (cyclomatic 22): GoogleCalendarTools.__init__ has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24d9e8d7bf90cea85b72406b809dcdc0b325538b8c058c6ff7b38760234cf76"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenCVTools.capture_video (cyclomatic 22): OpenCVTools.capture_video has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/opencv.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"b74b7b9e83bf9e96dfde6f32eb9730756903d5eb2c760b01858e6b6deacf6f3b"}},{"ruleId":"D1","level":"warning","message":{"text":"TwilioTools.__init__ (cyclomatic 22): TwilioTools.__init__ has cyclomatic complexity 22 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/twilio.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"c09be59f8a2821a81d43e99af538f56b5e7fb96e9ec35f2ab5c46a1b393851a5"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._arun_workflow_agent_stream (cyclomatic 22): Workflow._arun_workflow_agent_stream has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de2bfd0ea3f89fdc0afed270d69592935c192492005f2b74ef3a1d25c61660d"}},{"ruleId":"D1","level":"warning","message":{"text":"disconnect._report (cyclomatic 22): disconnect._report has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/disconnect.py"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24c7de936d05cd450a70d829abcb1d25eee3292ff6ebad00d2c87caac0f9c38"}},{"ruleId":"D1","level":"warning","message":{"text":"_run_options.resolve_run_options (cyclomatic 21): _run_options.resolve_run_options has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run_options.py"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"8813e365940230ae77db0df3c8558375a88bdf4d94a46c96da4c5733fbd4e882"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_spans (cyclomatic 21): DynamoDb.get_spans has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2819}}}],"partialFingerprints":{"codehealthFindingId/v1":"84be375cbe12b04d94c7ca2c413cd98a3f9c05f37650746beb175c4b34ff6250"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb.get_eval_runs (cyclomatic 21): FirestoreDb.get_eval_runs has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1741}}}],"partialFingerprints":{"codehealthFindingId/v1":"459a9e5a2b8b05c59ffa78c9e3442ecd3cbe100eb515783cf4b290b3f21e68cc"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb._ensure_client (cyclomatic 21): AsyncMongoDb._ensure_client has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e96bde26dd3bdf75d7eec33c62bfe195e141aad8aa8cff2ccaa447c2d3b5150"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.get_eval_runs (cyclomatic 21): AsyncMongoDb.get_eval_runs has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2158}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea7f793c0d846850823f59599743f550f6690766a2505201321f0d80f688be0"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.get_eval_runs (cyclomatic 21): MongoDb.get_eval_runs has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1937}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e994eff07e581934e2cac630720a4cbefaf2bbc1506b0ecf7fb198629be0cd"}},{"ruleId":"D1","level":"warning","message":{"text":"MySQLDb.get_sessions (cyclomatic 21): MySQLDb.get_sessions has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ae0c89525fade12e289d0d00ed5e28d7cb246b776cb2c26e5fe3b1005d0217"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_sessions (cyclomatic 21): AsyncPostgresDb.get_sessions has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"b32435dca50f7e3a1cb3e81b32d8b3b2220c85036dbbb3ac1b69b808cd6058ce"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb._get_table (cyclomatic 21): PostgresDb._get_table has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"97fd54ff8985c1c5376ea2d459c220d308881397adfb354ec1903540ecd24ce1"}},{"ruleId":"D1","level":"warning","message":{"text":"RedisDb.get_trace_stats (cyclomatic 21): RedisDb.get_trace_stats has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1973}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ea46fc7faa41a1a8b86bc766b85dc91dc581ff8e39e21bd665b82f7cd76c4d4"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb.get_sessions (cyclomatic 21): SingleStoreDb.get_sessions has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"5069b9e53596c4c22a683de9b48856e953dda92244e81f0e5ca92eda214c2c44"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb._create_table (cyclomatic 21): AsyncSqliteDb._create_table has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3c038b7f58e2bf00b831db5f18036d86e102bcb7f8e088131f979d74b0dd6e"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_sessions (cyclomatic 21): AsyncSqliteDb.get_sessions has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fc7c3a02acdd45fc8f7b3672ab2635f95997cb23aeb8c9c0162eb25c4fa79f8"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_eval_runs (cyclomatic 21): AsyncSqliteDb.get_eval_runs has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2150}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6fe80570af2453d25f9f188154903d1a8f2cc81fa4ec21ffecb459ae277a11d"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_span_stats (cyclomatic 21): AsyncSqliteDb.get_span_stats has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3179}}}],"partialFingerprints":{"codehealthFindingId/v1":"d00e03c75c8e9ece45d19205e20144c3190b69b765ff8d1b36e8cfbdeb5154c2"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.get_sessions (cyclomatic 21): SqliteDb.get_sessions has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a20aefc2273d0e19620e8480cb93a6788516dd69fc3a010211cf90ee72573af"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.get_span_stats (cyclomatic 21): SqliteDb.get_span_stats has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3084}}}],"partialFingerprints":{"codehealthFindingId/v1":"76939593dc57a097a9cd02d0e750696432b3e677da0e6f8a0b2008249b794ea9"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentAsJudgeEval.run (cyclomatic 21): AgentAsJudgeEval.run has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"067794f2ad34a1f60584cf723af9be0efb4e4d173b640b816e0667fdb62dcf10"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._aload_from_path (cyclomatic 21): Knowledge._aload_from_path has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1341}}}],"partialFingerprints":{"codehealthFindingId/v1":"62585c1f15c286361ec389ce5cb4281da5b110e9fe295f8c15acc1ecd5d66397"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._load_from_path (cyclomatic 21): Knowledge._load_from_path has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dbcb29c2d02e4a937fdb56883f6ad13d19865d7c6325ce01fcf04380dd3635f"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._build_remote_content_identity (cyclomatic 21): Knowledge._build_remote_content_identity has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2157}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93ba0927f301f26e3861886ddfc800f5bca5ddf5cc00da74e823ad91a2f328e"}},{"ruleId":"D1","level":"warning","message":{"text":"Cohere.get_request_params (cyclomatic 21): Cohere.get_request_params has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cohere/chat.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"3acc13309b11485125511d8f4e3a9d0c58f5c22db78e5359cdf317ec6d476cb5"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteLLM._parse_provider_response_delta (cyclomatic 21): LiteLLM._parse_provider_response_delta has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f14c36a1a915d5106c32b1fa597b036c06415cc0f0ec383c56fe96456082c3"}},{"ruleId":"D1","level":"warning","message":{"text":"MoonShot._format_message (cyclomatic 21): MoonShot._format_message has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/moonshot/moonshot.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"4475344b689a237bf91c6a8583366429c96c083065a0e5c8190748ab4ea0f2b9"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIChat._format_message (cyclomatic 21): OpenAIChat._format_message has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"08b669e305c97c01e6cc8eae37da2c611a30623aaab3accdd5600bcd487db205"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.map_a2a_request_to_run_input (cyclomatic 21): utils.map_a2a_request_to_run_input has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aaf1de3e2011c6fdb32607dc8c8bb9da4226900885a4e9a3e8d283e3b992148"}},{"ruleId":"D1","level":"warning","message":{"text":"AuthMiddleware.__init__ (cyclomatic 21): AuthMiddleware.__init__ has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"d71b49949cb3d493396bd095dfcf69c20ef39b4795a1fda0fa7b2622792da261"}},{"ruleId":"D1","level":"warning","message":{"text":"_run_options.resolve_run_options (cyclomatic 21): _run_options.resolve_run_options has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run_options.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a229b1bc1a46546c7f8da98bcd317ade24943bb60397a8c9ed5e01a3ccb545e"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleCalendarTools.find_available_slots (cyclomatic 21): GoogleCalendarTools.find_available_slots has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f3e954c0bb1be7d5e2c07609e13cb88fee764b2452afdf7205efaf2f529ad24"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleDriveTools.__init__ (cyclomatic 21): GoogleDriveTools.__init__ has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/drive.py"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf3733c714d5fc506a399fc8db70c3f9494bf7f4ab753e6be752f499b0b0a1c"}},{"ruleId":"D1","level":"warning","message":{"text":"GmailTools._extract_body (cyclomatic 21): GmailTools._extract_body has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba1328b80ca7a2dc7e752363cf6fd945ae46ea6d736cbe5de66093403d00b691"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleSlidesTools.add_slide (cyclomatic 21): GoogleSlidesTools.add_slide has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"1810b09a5fa334a604f67c9727e9c28f26bda138636b6c3add65c8fd47185e3e"}},{"ruleId":"D1","level":"warning","message":{"text":"JiraTools.__init__ (cyclomatic 21): JiraTools.__init__ has cyclomatic complexity 21 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/jira.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"f018499c8e2d8d3069d152ca96527726c23b9e1c1674ddf208b562501da5f033"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiMCPTools.__init__ (cyclomatic 21): MultiMCPTools.__init__ has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"d503dce3810d8af457e7eb90c40190ca62111750fbd9fff2c8bcfae50276b809"}},{"ruleId":"D1","level":"warning","message":{"text":"Toolkit._register_decorated_tool (cyclomatic 21): Toolkit._register_decorated_tool has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/toolkit.py"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"0972b1373eee4bc9e1753f48bb80a3fb110913cef6c19d4e2b9999a91d08a517"}},{"ruleId":"D1","level":"warning","message":{"text":"claude._format_file_for_message (cyclomatic 21): claude._format_file_for_message has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"286ebd019aa8ef603d4a481fe583e42c34ea24078e9b903f7783061de973ca8a"}},{"ruleId":"D1","level":"warning","message":{"text":"response.get_paused_content (cyclomatic 21): response.get_paused_content has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/response.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c63ceec637e7a603740b58993053442cc1bf4e1fda26326b9da793e15049d7"}},{"ruleId":"D1","level":"warning","message":{"text":"UpstashVectorDb.async_upsert (cyclomatic 21): UpstashVectorDb.async_upsert has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/upstashdb/upstashdb.py"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"c28454a654ebd0b865fe9996953a3ee81fa313291c0c48d10e46f99f50e85f8b"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.to_dict (cyclomatic 21): Workflow.to_dict has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9661990690d6e9ef9c5f97705512c2055ab971efbb02437feb1c90732a3f06"}},{"ruleId":"D1","level":"warning","message":{"text":"step_history.analyze_food_preferences (cyclomatic 20): step_history.analyze_food_preferences has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/history/step_history.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32b812e2fe3f2727652af546987e04ea3a22aad87ddc83fe901dcc891121ebd"}},{"ruleId":"D1","level":"warning","message":{"text":"events_replay.test_replay (cyclomatic 20): events_replay.test_replay has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db6b75f0260189f15a09bdef67d3c44b4e114e12016a89192d9f271fd51b2ca"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks.aexecute_pre_hooks (cyclomatic 20): _hooks.aexecute_pre_hooks has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa7a425a7aa3962f6aed42981a2463f4bac54cf6583cad85578c69f5089f8560"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks.aexecute_post_hooks (cyclomatic 20): _hooks.aexecute_post_hooks has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c2010bb96335126b3a00215b6e3c4c8a83f2687a1dd54d3d97a6a7cc36f44f2"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.ahandle_tool_call_updates (cyclomatic 20): _tools.ahandle_tool_call_updates has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"97cafa848c80e46f83ea3a4e6ae53624dffcbe900c55c8726f21e48fc85c0d2e"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.ahandle_tool_call_updates_stream (cyclomatic 20): _tools.ahandle_tool_call_updates_stream has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ee9cdb537122afc4832ad04a7d74c0aa3bb0ded8cb89f0f892001c87a39a89"}},{"ruleId":"D1","level":"warning","message":{"text":"notion_ops.blocks_to_markdown (cyclomatic 20): notion_ops.blocks_to_markdown has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/notion_ops.py"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"348fa3702a0d8634bfd2de0e628af01993309ab18eb72e1c3bad90518ab947ba"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb.upsert_trace (cyclomatic 20): FirestoreDb.upsert_trace has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1891}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4955c9773f7bc853f3290dcbd0d18badd7f435a227f6ce9f8916958b43de2b"}},{"ruleId":"D1","level":"warning","message":{"text":"v1_to_v2.safe_get_runs_from_memory (cyclomatic 20): v1_to_v2.safe_get_runs_from_memory has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"97109e05a40d306147f210e6b7ff080bb3f7458bf4dd0f053425c5efb2a15ee2"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMySQLDb.get_eval_runs (cyclomatic 20): AsyncMySQLDb.get_eval_runs has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2265}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4969f734ea800ef82068d2c405e55bd20339ebc5e99567512fb8b9ab2f09f7e"}},{"ruleId":"D1","level":"warning","message":{"text":"MySQLDb.get_eval_runs (cyclomatic 20): MySQLDb.get_eval_runs has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc6c47f0b7376ba0d7b482cb4de1d39acb73be8c05b93a26594fb28ce72d1fd6"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_sessions (cyclomatic 20): PostgresDb.get_sessions has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"75aa42436e5c2138785ccc473a741a1c67d247d3848267b2852046a16bac7785"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_eval_runs (cyclomatic 20): PostgresDb.get_eval_runs has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2425}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee5fe01356900d63650d0b443fcb590285b47f4ed5318b55dd4df6472bcf538"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb.upsert_session (cyclomatic 20): SingleStoreDb.upsert_session has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d81dc84ee916fb076c3722b428029acbfbd201944e5b63a3961a0e0b8b1d07"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb.get_eval_runs (cyclomatic 20): SingleStoreDb.get_eval_runs has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":2074}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de2afa2154fd0e37f97af5ea10e8e5360d17eab2fc425c11a8298fed1545b38"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.get_eval_runs (cyclomatic 20): SqliteDb.get_eval_runs has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2341}}}],"partialFingerprints":{"codehealthFindingId/v1":"2463a8a583bc6916ed101de75016d46c9bb092e246735624eb02a654cc455efc"}},{"ruleId":"D1","level":"warning","message":{"text":"SurrealDb.upsert_trace (cyclomatic 20): SurrealDb.upsert_trace has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1469}}}],"partialFingerprints":{"codehealthFindingId/v1":"d47e6363b3442ca5cd2acb59e5538ef4b11d44f427b63588bd39cb9ebb0cd2fa"}},{"ruleId":"D1","level":"warning","message":{"text":"_validate.validate_sft_jsonl (cyclomatic 20): _validate.validate_sft_jsonl has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/exporters/_validate.py"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"02691479477c35954f674148ba3ef88b3f2912f5d4dedb8e439fb6c8b3fa6a3c"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentAsJudgeEval.arun (cyclomatic 20): AgentAsJudgeEval.arun has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"be187f6590fff58b5fd8c90c05b95cbc32cf3467f13480a89af9a4a23434ab46"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore.print (cyclomatic 20): EntityMemoryStore.print has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3580}}}],"partialFingerprints":{"codehealthFindingId/v1":"98201aa16695c13ff46f07136625998ca2341ced629d20e0b645e5f362f90194"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionMetrics.__add__ (cyclomatic 20): SessionMetrics.__add__ has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7dd863db762c9b64dcd3bda1e1a107ae3307196a7760c1eacfc098b6132c4d0"}},{"ruleId":"D1","level":"warning","message":{"text":"metrics.accumulate_model_metrics (cyclomatic 20): metrics.accumulate_model_metrics has cyclomatic complexity 20 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a462d6fbcad2e64c63f7326a85e12006f675178aa9bf6b5c2deed9355b79167"}},{"ruleId":"D1","level":"warning","message":{"text":"metrics.merge_background_metrics (cyclomatic 20): metrics.merge_background_metrics has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fcfa692748ac21b24d3c377ce5e81aed44025618db28abd7c52ce58a7932df"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteLLM.parse_tool_calls (cyclomatic 20): LiteLLM.parse_tool_calls has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8e193d618f94f171b3fcdabf4ba86d784cc2e7fa330fc6ff2985308cb3f97c"}},{"ruleId":"D1","level":"warning","message":{"text":"LiteLLM._get_metrics (cyclomatic 20): LiteLLM._get_metrics has cyclomatic complexity 20 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"db281facd714f7a83ef9692e4a3b436a74003a58c78332102c93a5170ac1a52d"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.run_performance_eval (cyclomatic 20): utils.run_performance_eval has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"8425d9cc0934774ff6df07def0ab567a74ec0726ec9f077a8237e3efa8618d74"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceNode.from_span (cyclomatic 20): TraceNode.from_span has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/traces/schemas.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b9acbf0e3a6b6fc2a0ced2c818098c05dcbe1bfbfa53cc60aa3e9af2914d8a8"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.get_session_name (cyclomatic 20): utils.get_session_name has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6119321bf40032615ed76f1637144d56f524aee56a1c0e992f839a3f16cff2"}},{"ruleId":"D1","level":"warning","message":{"text":"RunOutput.from_dict (cyclomatic 20): RunOutput.from_dict has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4203342d6e2305b93d9b6d3edd5a4f195c9730d39d9512c51edf7bca344f94e"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks._aexecute_pre_hooks (cyclomatic 20): _hooks._aexecute_pre_hooks has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"87d6a9827f399d3ac752eb5fe1fed3b724c7da0b6bdb51246c0ae5f2bbbe8800"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks._aexecute_post_hooks (cyclomatic 20): _hooks._aexecute_post_hooks has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c9b6f310f82abb3230ad512e670b5c9c396de851e03f76761d5bd7f0ac51c1"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionCall._build_entrypoint_args (cyclomatic 20): FunctionCall._build_entrypoint_args has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c8cb45fc20893a69e23a3c37e8e0e41bd4606e0ac62e926c48fa0c92b20949a"}},{"ruleId":"D1","level":"warning","message":{"text":"NanoBananaTools.create_image (cyclomatic 20): NanoBananaTools.create_image has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/nano_banana.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d78a465cc7beca00122cf0d7b8c4efdede888c540a9ee05be3ca21d87bc875b"}},{"ruleId":"D1","level":"warning","message":{"text":"claude._format_image_for_message (cyclomatic 20): claude._format_image_for_message has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"06d3996ece1518a732b67a5cfa8a86f02380cdb1f87b14ebaba257794ae1c693"}},{"ruleId":"D1","level":"warning","message":{"text":"tokens._count_message_tokens (cyclomatic 20): tokens._count_message_tokens has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/tokens.py"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"19bbab64e78cbbafd004877b2f44cb82bcd65218e2fccec61ce2c0c019329346"}},{"ruleId":"D1","level":"warning","message":{"text":"PgVector._async_embed_documents (cyclomatic 20): PgVector._async_embed_documents has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d7e98c7fc91fe3359b9907d79ae9421c61f48a0d023c3d97f6e4bb11113485"}},{"ruleId":"D1","level":"warning","message":{"text":"StepRequirement._validate_user_input (cyclomatic 20): StepRequirement._validate_user_input has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/types.py"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd4b68c87e0548b64794a1b4d0bf770c4f3d02c87608ec7caf6850f205315825"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.deep_copy (cyclomatic 20): Workflow.deep_copy has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10485}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7961112c9f623ab992bc7ed00d3fc8edf4429b5c9bc58443627da5d9f561ef9"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_container_env (cyclomatic 20): PostgresDb.get_container_env has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/app/postgres/postgres.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"c070c9ea4e40482e6121d7183355653881a2b89389da62aebac756aa2302cf6a"}},{"ruleId":"D1","level":"warning","message":{"text":"InfraConfig.get_resources_from_file (cyclomatic 20): InfraConfig.get_resources_from_file has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/config.py"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"59fbc3af62492fab68e08c1d794141d8764ecebe15cb0161458549a08f044892"}},{"ruleId":"D1","level":"warning","message":{"text":"operator.create_infra_from_template (cyclomatic 20): operator.create_infra_from_template has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/operator.py"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d3bf9b5b3fbac5c8646d16aed8193546450c8ae4b39e3a544cbb9c619cbec5"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks.execute_pre_hooks (cyclomatic 19): _hooks.execute_pre_hooks has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b440c350db2b7d194867c4656614b7f8a3afbf6e6991d4d5eb3d078a489b9e04"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks.execute_post_hooks (cyclomatic 19): _hooks.execute_post_hooks has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"76204435ea2763cc3d403696d797351eac35250d4eab5e14008775d517fe2b66"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._continue_run (cyclomatic 19): _run._continue_run has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3588}}}],"partialFingerprints":{"codehealthFindingId/v1":"4018b059373c0e6edae77e591eedccb6452fefa950d0762b2944d99250b472ed"}},{"ruleId":"D1","level":"warning","message":{"text":"_session.get_session (cyclomatic 19): _session.get_session has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"50e3dd37d7ce811920430bfe2ebea8531c7c2a28ca85578669194b459583b476"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.get_tools (cyclomatic 19): _tools.get_tools has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5d87562ae308b011079fd8442e951b982da780e93899b7a73b8a0d157f1b20e"}},{"ruleId":"D1","level":"warning","message":{"text":"_utils.deep_copy_field (cyclomatic 19): _utils.deep_copy_field has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_utils.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"162fe472d8649138f3a4f9185947fa54ee8c437dfd1acf3e9c53e74a7a7a2184"}},{"ruleId":"D1","level":"warning","message":{"text":"Agent.__init__ (cyclomatic 19): Agent.__init__ has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/agent.py"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7ae9597e9ce075c0e8a4049785e1e17252b50c8ad3ba29b65e839b588838ef"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.upsert_trace (cyclomatic 19): GcsJsonDb.upsert_trace has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1389}}}],"partialFingerprints":{"codehealthFindingId/v1":"c894ee94ee93ba3b8b6a662386dbf60b899da16a6d226b1479121811cebb86b8"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.upsert_trace (cyclomatic 19): JsonDb.upsert_trace has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"42e41f62f9ff142db2b4a534263aea7fc09fc364082dcf9cda921fdd8671039b"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMySQLDb.get_sessions (cyclomatic 19): AsyncMySQLDb.get_sessions has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"b88a98c474ef8541816e8720d564fb9ab4253c018f00a8e20b448ee85025ea1d"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.upsert_session (cyclomatic 19): AsyncPostgresDb.upsert_session has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"54752713ddb20cc6c57f9e9871e05417c658fda488463ce8a4ed9e7a019438e0"}},{"ruleId":"D1","level":"warning","message":{"text":"PerformanceEval.run (cyclomatic 19): PerformanceEval.run has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b284507979a316bfe1964f89ad0604a5920ebd15b5c2e986557876f6b01cc76"}},{"ruleId":"D1","level":"warning","message":{"text":"PerformanceEval.arun (cyclomatic 19): PerformanceEval.arun has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"878afd81bce87adf1c2e4aa4625b623a7cca56ad7103b3874d1ba9462567ff94"}},{"ruleId":"D1","level":"warning","message":{"text":"S3Loader._aload_from_s3 (cyclomatic 19): S3Loader._aload_from_s3 has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd493a7d017da84de9a6d4fb051ae2354c4584ea35ddef6d5d23597b7a91f555"}},{"ruleId":"D1","level":"warning","message":{"text":"MessageMetrics.__add__ (cyclomatic 19): MessageMetrics.__add__ has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"221e6a7aa32d67f7bc073a5dae16a0fc1240a559af5725f0bd9a7e020bac48f7"}},{"ruleId":"D1","level":"warning","message":{"text":"AwsBedrock.get_async_client (cyclomatic 19): AwsBedrock.get_async_client has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b8b707af1d7073f34b362fd3ecc4fd4fbe76b32ca25fbb956a287265b9e4ac"}},{"ruleId":"D1","level":"warning","message":{"text":"Model._process_model_response (cyclomatic 19): Model._process_model_response has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cbf988d89d127d1c2bd0340a7916e4d4358a311df542223fae69245626d68b6"}},{"ruleId":"D1","level":"warning","message":{"text":"Model._aprocess_model_response (cyclomatic 19): Model._aprocess_model_response has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dcb074df9f0b208d2ab19e3537906c5ef9192bfd9f9fb872ff7240164720d4f"}},{"ruleId":"D1","level":"warning","message":{"text":"DeepSeek._format_message (cyclomatic 19): DeepSeek._format_message has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/deepseek/deepseek.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b49f425871e00dfe56fcc859ddb08a33dd2bfe323cb60eb2550a0ea170aea1"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._format_audio_for_message (cyclomatic 19): Gemini._format_audio_for_message has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f569e6586f16461e9dbc25981bc7ca341b4d8d48f75dd78dd68db0aa8f54984"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses._format_tool_params (cyclomatic 19): OpenAIResponses._format_tool_params has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c1018f922664d79416e25369621b5c5478ca4d4be03d45135f72473b7f8f104"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS.__init__ (cyclomatic 19): AgentOS.__init__ has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6f83b186cafb1305ba90c2fb639b22b61099f8eb7647954a4af36d116e4757"}},{"ruleId":"D1","level":"warning","message":{"text":"router.handle_workflow_continue_via_websocket (cyclomatic 19): router.handle_workflow_continue_via_websocket has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1aa535b0e5edaa796954a33290556dcd8e83bf7c64b6fd4bf5b038a4811d92"}},{"ruleId":"D1","level":"warning","message":{"text":"TeamRunOutput.from_dict (cyclomatic 19): TeamRunOutput.from_dict has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4666c444b9b9d57a3e2106706f85e1b1a39aa0f6ffd575c42b6fba39a5c5fa"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._get_json_output_prompt (cyclomatic 19): _messages._get_json_output_prompt has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1556}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c96629149741301ab0bdd67e09b7758c1206a1569465793a3551bb499ea957"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._get_continue_run_messages (cyclomatic 19): _run._get_continue_run_messages has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4920}}}],"partialFingerprints":{"codehealthFindingId/v1":"dad3587cb055f062b52d770acf42616f5269d364395ac30e4b2bc7e0cf6882a6"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._ahandle_team_tool_call_updates (cyclomatic 19): _run._ahandle_team_tool_call_updates has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5134}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d7a7346ef2891a6c94ed1e872c552bb55a5bc9d1c055bf993a3e77f7855ee2"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._ahandle_team_tool_call_updates_stream (cyclomatic 19): _run._ahandle_team_tool_call_updates_stream has cyclomatic complexity 19 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5191}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fd3fa417483317e89ddbd2baf889ec91920683a746e31c7337f8f9e22f4d387"}},{"ruleId":"D1","level":"warning","message":{"text":"_storage._hydrate_from_graph (cyclomatic 19): _storage._hydrate_from_graph has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"865b4c8ed7935ca531466b93910c9667707af503f3818a6adf0028dc4073894e"}},{"ruleId":"D1","level":"warning","message":{"text":"FileTools.__init__ (cyclomatic 19): FileTools.__init__ has cyclomatic complexity 19 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef65a5a24ee8ec4162f845f87ea9f446ec89d0a79a25ac9303c0dc025663fd2f"}},{"ruleId":"D1","level":"warning","message":{"text":"FileTools.search_content (cyclomatic 19): FileTools.search_content has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file.py"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba1b437f654aa42c0969625d2dbd61360c66ce8715b64afd8ee8ec42eee771a5"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiMCPTools.get_session_for_run (cyclomatic 19): MultiMCPTools.get_session_for_run has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"8288a776d65c55d576969c9870febf47a3269bfd4f14ce0620421d957257d730"}},{"ruleId":"D1","level":"warning","message":{"text":"ModelsLabTools.generate_media (cyclomatic 19): ModelsLabTools.generate_media has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/models_labs.py"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"df48654435c211e157c3abda9524c71a40de75bc4cd3e42bd404155a32145038"}},{"ruleId":"D1","level":"warning","message":{"text":"OxylabsTools.search_google (cyclomatic 19): OxylabsTools.search_google has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad05c7b8724d31e3c8695b37985f209625e43b807e24f89daf2e138842f945d6"}},{"ruleId":"D1","level":"warning","message":{"text":"OxylabsTools.search_amazon_products (cyclomatic 19): OxylabsTools.search_amazon_products has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5a0e76c9336105f3a52b92a7466109e3860a5a866e386a81f49132031a9bf7d"}},{"ruleId":"D1","level":"warning","message":{"text":"OxylabsTools.scrape_website (cyclomatic 19): OxylabsTools.scrape_website has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"756d0aa267b5e9365cae995df85e94835ac0d9d64e8674a3fb187c1689ccfbb2"}},{"ruleId":"D1","level":"warning","message":{"text":"YFinanceTools.__init__ (cyclomatic 19): YFinanceTools.__init__ has cyclomatic complexity 19 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/yfinance.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e9b9a0bf3ae73b67120d99230508fd58ef5c2939c943fd2b3f1989983da536a"}},{"ruleId":"D1","level":"warning","message":{"text":"llama.format_message (cyclomatic 19): llama.format_message has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/llama.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"7198ecdbcd5d65be0e5effd16b5c55b22ce089ec2a3dc4220e6e246eb8c597e1"}},{"ruleId":"D1","level":"warning","message":{"text":"mistral.format_messages (cyclomatic 19): mistral.format_messages has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/mistral.py"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee49ef36a4980e7753b88644328c0f998192e89efb8581162d96a991deb8448"}},{"ruleId":"D1","level":"warning","message":{"text":"response.create_paused_run_output_panel (cyclomatic 19): response.create_paused_run_output_panel has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/response.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a3bd2af4319f6196428c3180a0c50f14541ad5d4752c4ca22cc3f741fb8511"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb.async_insert (cyclomatic 19): ChromaDb.async_insert has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c5ad1fb501ba88554013495ccf98295945ecccd08dc7da0edfc53c6ef57113b"}},{"ruleId":"D1","level":"warning","message":{"text":"LanceDb.search (cyclomatic 19): LanceDb.search has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"f69313680f9981a4def99ba64e0fe688cd789c07a1809c37ff8df936e77f52af"}},{"ruleId":"D1","level":"warning","message":{"text":"PgVector.vector_search (cyclomatic 19): PgVector.vector_search has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bd3f3c7e8a9c3842efec25e611bce6cda9c1d70a00ea3889cb493c1fae43bf8"}},{"ruleId":"D1","level":"warning","message":{"text":"PgVector.hybrid_search (cyclomatic 19): PgVector.hybrid_search has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"3592c102f8f458ed10ceb4570b6ae2d08ca919de333253925c821f75cd8d2c17"}},{"ruleId":"D1","level":"warning","message":{"text":"Condition.execute (cyclomatic 19): Condition.execute has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"897c21bc014ec8917040e8bf30b851d0c3d9992e7995ad1ea404e47757baaeec"}},{"ruleId":"D1","level":"warning","message":{"text":"Condition.aexecute (cyclomatic 19): Condition.aexecute has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"9530acffad0cea9c1ce783d2129abe74a62b50b4faaefa1b00573c032a52ff27"}},{"ruleId":"D1","level":"warning","message":{"text":"Parallel._aggregate_results (cyclomatic 19): Parallel._aggregate_results has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"8149daca9553d69b6d1bd1d26c01de0dc1d0950135f2d0345029131f016ce6b5"}},{"ruleId":"D1","level":"warning","message":{"text":"Step.__init__ (cyclomatic 19): Step.__init__ has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cbfd835e97256d00ae6cdf7f858d97b92510217c5b220ae3940a0386aa1cd63"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._route_executor_requirements_stream (cyclomatic 19): Workflow._route_executor_requirements_stream has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6533}}}],"partialFingerprints":{"codehealthFindingId/v1":"701ccd129ba5224fb16c4367f440552ae12bf7e2231a1c4e521e4876486da5c8"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._aroute_executor_requirements_stream (cyclomatic 19): Workflow._aroute_executor_requirements_stream has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6621}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa5afc59f0e8acdff9e46a5189dcfc748ca54eae55d366dd068bd08ac607ae04"}},{"ruleId":"D1","level":"warning","message":{"text":"02_tool_error_persistence.scenario_b_model_call_fails (cyclomatic 18): 02_tool_error_persistence.scenario_b_model_call_fails has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"a05635232ca859d7e28af721f5c1dc2cbaaa05ad1fff6ddb215e94c49c741a01"}},{"ruleId":"D1","level":"warning","message":{"text":"11_streaming_events.streaming_with_events (cyclomatic 18): 11_streaming_events.streaming_with_events has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/02_modes/tasks/11_streaming_events.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c5b4f3d278d957510c701db22c0e3cadfdb1f4e987d6049fd05591ae018847f"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages.get_continue_run_messages (cyclomatic 18): _messages.get_continue_run_messages has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"03106eeba862895e8ccd117c35e233a21713de96c744cb664ecf190af83f1913"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.arun_dispatch (cyclomatic 18): _run.arun_dispatch has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2743}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4e6b5bc81827e0067635d98b554280bcc90b1472bf6f8bf22f3bd0851b017b"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.acontinue_run_dispatch (cyclomatic 18): _run.acontinue_run_dispatch has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7311570ebb51546e5ab29ecc86b6b935a76b6417261d0463c61926d354c3b69"}},{"ruleId":"D1","level":"warning","message":{"text":"_session.aget_session (cyclomatic 18): _session.aget_session has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dcda262f5a333fb5394c482733455442ea855cbe84d65cccc2425c46716f66f"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.handle_tool_call_updates (cyclomatic 18): _tools.handle_tool_call_updates has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"3afbd252242c23773e114c98043675c9c5c8bd5c5e423ddcef97c70597d2d576"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.handle_tool_call_updates_stream (cyclomatic 18): _tools.handle_tool_call_updates_stream has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1647e92406fcccea441eca741c34b59aaa52a35582c724e8913f6a60b11879f"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOSClient.upload_knowledge_content (cyclomatic 18): AgentOSClient.upload_knowledge_content has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":2373}}}],"partialFingerprints":{"codehealthFindingId/v1":"0add665d181cff95aabb4f62db559fb365894ad97b74aba1c21aaed5f6c036b9"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.upsert_trace (cyclomatic 18): DynamoDb.upsert_trace has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2195}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b9dc46550e7e1e863325c6d4b358bcb9b510b6703cb3686d8ed275760d1af6b"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb._get_collection (cyclomatic 18): FirestoreDb._get_collection has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e36c84cd3f3c09c59390761c8e85b678a4bf13883ab52d4b481ae720d7ad8b4"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.upsert_session (cyclomatic 18): AsyncMongoDb.upsert_session has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"136e386267e5661ca905271ebe7e1a0383bb5b23635b1e0e0a98dfbeabc95371"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.upsert_memories (cyclomatic 18): AsyncMongoDb.upsert_memories has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1442}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac995b6d609426c817b73a60039acea86c85491a4719f2399b2e4693885932a"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.get_traces (cyclomatic 18): AsyncMongoDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2543}}}],"partialFingerprints":{"codehealthFindingId/v1":"5adcf68fd1a20f583f5649e527173dcf3fc6d5ed26cf28ab366d067bdefcbfb4"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.upsert_session (cyclomatic 18): MongoDb.upsert_session has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"e954c1fb76d6eb4c2c31b534c4e3f1a85ef6c579bee6fd4467bd2f355049ceeb"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.upsert_memories (cyclomatic 18): MongoDb.upsert_memories has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1226}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a7b66cd89bd94cf48863622510f2c6884188716fa5d43df53d3ebe1c303d0d"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.get_traces (cyclomatic 18): MongoDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2381}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f781df140e00c36ae797c8736404efe47d8e5bbf377fd24462f028f55b6e7e7"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_traces (cyclomatic 18): AsyncPostgresDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2586}}}],"partialFingerprints":{"codehealthFindingId/v1":"966c54a10308da45d7a2fb43b00202c0ae1d3d4e55cab1a4bc2235b9c5114e53"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.get_traces (cyclomatic 18): PostgresDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3061}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e37a11feadd5aa1808c78c30d5d8ba36bbb86ed7621751d123347ba28c862fc"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_traces (cyclomatic 18): AsyncSqliteDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2770}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3f5c88b63840ae8a25f9c513e972ca747f8911fe1c91f7ff8e7c66a856dcc35"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.get_traces (cyclomatic 18): SqliteDb.get_traces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2675}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7d37a451f055691ad24c118a1c42580986681ba29703568f6a691468490d6d"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.upsert_component (cyclomatic 18): SqliteDb.upsert_component has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3554}}}],"partialFingerprints":{"codehealthFindingId/v1":"fab48ecfe54e3578fb2cd2d47089c69fe7c7afc7c415487be606772a7417e235"}},{"ruleId":"D1","level":"warning","message":{"text":"SurrealDb.get_sessions (cyclomatic 18): SurrealDb.get_sessions has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f43addbb90adcd63a1f9ed26bb1888ca480d623a531df8b04bb628e7f125f4"}},{"ruleId":"D1","level":"warning","message":{"text":"AccuracyEval.run_with_output (cyclomatic 18): AccuracyEval.run_with_output has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28f853a9a4cff7512fcf8c8fd6d75e4dc2a22f369a528bbddb756193af91934"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._validate_filters (cyclomatic 18): Knowledge._validate_filters has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"011246e3ff861d5c7682a5fd877e0e15ac9e69b50d4183ff7b27bc2671e2179b"}},{"ruleId":"D1","level":"warning","message":{"text":"Knowledge._build_content_hash (cyclomatic 18): Knowledge._build_content_hash has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2210}}}],"partialFingerprints":{"codehealthFindingId/v1":"690010b19816ae5725d4851fef812874f1a1ad17cb179ba837d122bb41231bc2"}},{"ruleId":"D1","level":"warning","message":{"text":"GitHubLoader._aload_from_github (cyclomatic 18): GitHubLoader._aload_from_github has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"08721023a78ffc671b6d41c32d101f506b3d1ceaa64869eb0c20c83e1e3b0b36"}},{"ruleId":"D1","level":"warning","message":{"text":"GitHubLoader._load_from_github (cyclomatic 18): GitHubLoader._load_from_github has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"98feef8c9398a994bfeb8320625c18fe8a1472ecd4c6ec698738ea879a557636"}},{"ruleId":"D1","level":"warning","message":{"text":"S3Loader._load_from_s3 (cyclomatic 18): S3Loader._load_from_s3 has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"25a27ef93015250d8b2651cf9827cbddc206acd523f033a36f4835d2d6a07a43"}},{"ruleId":"D1","level":"warning","message":{"text":"EntityMemoryStore._apply_forget (cyclomatic 18): EntityMemoryStore._apply_forget has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2139}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f8db85aedb44ec1a7a8e79374a3d572b86ee1dbc5872b6182e9e59c5f92f68"}},{"ruleId":"D1","level":"warning","message":{"text":"metrics.accumulate_eval_metrics (cyclomatic 18): metrics.accumulate_eval_metrics has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"51da72127d4cfa46d1ac6f6d6f2bcefbfa1d2f0f9973780986ffb95bd9496d60"}},{"ruleId":"D1","level":"warning","message":{"text":"Claude.get_request_params (cyclomatic 18): Claude.get_request_params has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f243a5b82c09ca8c779411574ec74d5119ac894481392714b3f1caa55d2d0f"}},{"ruleId":"D1","level":"warning","message":{"text":"Gemini._format_video_for_message (cyclomatic 18): Gemini._format_video_for_message has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"efda2b8026ac4842f888e0185198a08fa4517a01dfd23676ec093957593a8102"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiInteractions._call_step_info (cyclomatic 18): GeminiInteractions._call_step_info has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"694452ccfc2952ed34e659a18d1046d7397008735d2e39e6034f08bfcbed471b"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses.invoke (cyclomatic 18): OpenAIResponses.invoke has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"10fa0ebff12c91a35ba5ba3ed63a5cc0e28ab4ecbd567bc0fc961ad88bed5b93"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenAIResponses.ainvoke (cyclomatic 18): OpenAIResponses.ainvoke has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"3633060a86f4fb1b336813f778f932cd1e629058d9ccdf4136e7f11b8920fb9e"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS._initialize_agents (cyclomatic 18): AgentOS._initialize_agents has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"5edc0d43d691c4f7e52f74988ba0a0c839f1d26f5e5433b2fa1dd98bf92ea224"}},{"ruleId":"D1","level":"warning","message":{"text":"HITLHandler.handle_check_status (cyclomatic 18): HITLHandler.handle_check_status has cyclomatic complexity 18 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/hitl.py"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"6940a109e1ad4fffab1689e832a0d8608387d6c42e42c22b0e1ffafe21f2034c"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.run_reliability_eval (cyclomatic 18): utils.run_reliability_eval has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ab15a50f7ec8c12c5b94b8dc5a1206e9b456851fb6f495a1b2327cd22fa7e2"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.collect_mcp_tools_from_team (cyclomatic 18): utils.collect_mcp_tools_from_team has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1405}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ea74d589698932041166e9837812f12680496614363645680a5595f0ff5554"}},{"ruleId":"D1","level":"warning","message":{"text":"RunRequirement.from_dict (cyclomatic 18): RunRequirement.from_dict has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/requirement.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"975394fdac7e1b65a0bfd511b58f926fcc39708a516750e57c56cae24527796a"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionSummaryManager.get_system_message (cyclomatic 18): SessionSummaryManager.get_system_message has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/summary.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"a00fada796db484423dbc6f80a9c95a5948bc789f5448ccc2f0f21c12f461b4c"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks._execute_pre_hooks (cyclomatic 18): _hooks._execute_pre_hooks has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c26e233a34a31bdc14b67f4450b4b06de686cee200f448dde782e8f5ed9b045"}},{"ruleId":"D1","level":"warning","message":{"text":"_hooks._execute_post_hooks (cyclomatic 18): _hooks._execute_post_hooks has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"637f437772263a1a651de50dbed58c7d33ba562c84e65b71727cc404e65815f8"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._get_run_messages (cyclomatic 18): _messages._get_run_messages has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"b866d73acf4f055b8f8c968bfee83aef1f3df170f66f3c076a59233670d15451"}},{"ruleId":"D1","level":"warning","message":{"text":"_messages._aget_run_messages (cyclomatic 18): _messages._aget_run_messages has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7e4c98458c6a100beb7dc4504c2f9047f2eceb4afa610da4b635f7fb6f6551a"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.run_dispatch (cyclomatic 18): _run.run_dispatch has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1855}}}],"partialFingerprints":{"codehealthFindingId/v1":"48d12dcc8fa78b37ac3606e9888c48c815d1b99379398d30cc72966dd1af2ffd"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._continue_run (cyclomatic 18): _run._continue_run has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7070}}}],"partialFingerprints":{"codehealthFindingId/v1":"7942d1b27c2885899245c52e89f382469847a24817a263515d08abfee056bd02"}},{"ruleId":"D1","level":"warning","message":{"text":"apify.props_to_json_schema (cyclomatic 18): apify.props_to_json_schema has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/apify.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"643563dc75febd02112b94963dbaa05f12640b2440c906257874dd0bd43845c8"}},{"ruleId":"D1","level":"warning","message":{"text":"CodingTools.__init__ (cyclomatic 18): CodingTools.__init__ has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e032f1716aafe840c701d3d2f8eb65383cf907a2a69e57dcb2f463ec0f03df"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionCall.execute (cyclomatic 18): FunctionCall.execute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f6e95b64158cc192131d9d608a02ca953b632d585ff47cd2343ce0a84ad108"}},{"ruleId":"D1","level":"warning","message":{"text":"MultiMCPTools._connect (cyclomatic 18): MultiMCPTools._connect has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a06bc2e791a7d42d2be258897b8e37448a7d4c06339bc95e908e3393f98b81"}},{"ruleId":"D1","level":"warning","message":{"text":"PlivoTools.__init__ (cyclomatic 18): PlivoTools.__init__ has cyclomatic complexity 18 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/plivo.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"3251ae27620c081cc1ae9fb42b05c0450085d0eca9a6bc2e7d7e3066d4cc68c3"}},{"ruleId":"D1","level":"warning","message":{"text":"RedmineTools.update_issue (cyclomatic 18): RedmineTools.update_issue has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a36434be1ef4ddda75a1be422ac837b07ed284f994d8b499b35bfc7f649249b"}},{"ruleId":"D1","level":"warning","message":{"text":"Workspace.search_content (cyclomatic 18): Workspace.search_content has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workspace.py"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"142ef7a0164b0a9308df4be7ec208c9d25844c21312a78897177f83523c34bcd"}},{"ruleId":"D1","level":"warning","message":{"text":"functions.get_function_call (cyclomatic 18): functions.get_function_call has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/functions.py"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d27bb4f3aa84403bc5214f81a927d6f223035e0ff1c4c15f12dd595994ef3b0"}},{"ruleId":"D1","level":"warning","message":{"text":"mcp.prepare_command (cyclomatic 18): mcp.prepare_command has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/mcp.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76c0b953bbb39342678080395246194d35a101e2bab464bf55430110c9d2f90"}},{"ruleId":"D1","level":"warning","message":{"text":"tokens.count_file_tokens (cyclomatic 18): tokens.count_file_tokens has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/tokens.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"7385050dd29f9a7fcbdd1ef9db8417889cc49da3e6e366c8698c5064201f2c24"}},{"ruleId":"D1","level":"warning","message":{"text":"Cassandra.async_insert (cyclomatic 18): Cassandra.async_insert has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/cassandra/cassandra.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca82bdc2ed2965de5371a40dccfb0d5aa39d410bb5fd17bad852aca88dce3aa7"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb._async_upsert (cyclomatic 18): ChromaDb._async_upsert has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba28b0467d1c08e572f1b8ad28e64bcb3100290b91f932491f468d0bf7816cbb"}},{"ruleId":"D1","level":"warning","message":{"text":"CouchbaseSearch.async_insert (cyclomatic 18): CouchbaseSearch.async_insert has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ad375e57bae07d098345f5ce03a4f6f26fa92ff90c191b3193ad6d979118999"}},{"ruleId":"D1","level":"warning","message":{"text":"CouchbaseSearch._async_upsert (cyclomatic 18): CouchbaseSearch._async_upsert has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"e08d6cd6127d99c43ce38a9449f48cd7b9b8e677d08330c592dd0f31cae28e38"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb._create_search_index (cyclomatic 18): MongoDb._create_search_index has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf87d75c5b0bd1d1c7a0d487ccb34d7e52c77825be8d2f4c83be12a67e3b3744"}},{"ruleId":"D1","level":"warning","message":{"text":"Step._enrich_event_with_context (cyclomatic 18): Step._enrich_event_with_context has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a6025979b638380957fd7f883cee2655a1e3d1441070f939694092c3978f640"}},{"ruleId":"D1","level":"warning","message":{"text":"Steps.execute (cyclomatic 18): Steps.execute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56484476a57057e68c752dc03250ef4c171a101acec07a88f8303ab4686cbd3"}},{"ruleId":"D1","level":"warning","message":{"text":"Steps.aexecute (cyclomatic 18): Steps.aexecute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"52b03de182f6b455af4aad58f6df1b799be767cc4df31048e32bec8a61184d9d"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._run_workflow_agent_stream (cyclomatic 18): Workflow._run_workflow_agent_stream has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":4785}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dfdd73929cf49b4fb815f031aac29e8d0107c63c3a3f34141179ee6422979b9"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._arun_workflow_agent (cyclomatic 18): Workflow._arun_workflow_agent has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5359}}}],"partialFingerprints":{"codehealthFindingId/v1":"3acda1c27402f59e8da8de7342e647c1f9dbcee6537fc7615f42d3f4e1a45009"}},{"ruleId":"D1","level":"warning","message":{"text":"workflow._find_inner_step_by_executor (cyclomatic 18): workflow._find_inner_step_by_executor has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"0199c6a50cdde6cafe7b7b512b55cfc98e2e5778010267d3c31751d3876ba51b"}},{"ruleId":"D1","level":"warning","message":{"text":"GlueCrawler._create (cyclomatic 18): GlueCrawler._create has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/glue/crawler.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"e19e15579fc8a16dcb582dd9e055e76498729bdc76bff1912dcb3bfc86e2d743"}},{"ruleId":"D1","level":"warning","message":{"text":"__main__._run_case_async (cyclomatic 17): __main__._run_case_async has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/01_demo/evals/__main__.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"04efe536d5e096e3c12eae4a5ea50722d3e7ede6f7020dee6ba3b1b486b7e5e3"}},{"ruleId":"D1","level":"warning","message":{"text":"09_custom_tools.assess_risk_score (cyclomatic 17): 09_custom_tools.assess_risk_score has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/02_modes/tasks/09_custom_tools.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb37d80b1a49a519184726145be372dbca8084789bdc35edcf49e3a4d3aa9ac"}},{"ruleId":"D1","level":"warning","message":{"text":"cancel_run.long_running_task (cyclomatic 17): cancel_run.long_running_task has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/14_run_control/cancel_run.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"04924b09ddc73ce261bc1a2f0d16e4dd28a616147cca685ee6c0fda900d36b29"}},{"ruleId":"D1","level":"warning","message":{"text":"studio_hitl_agent_os.resolve_paused_tools (cyclomatic 17): studio_hitl_agent_os.resolve_paused_tools has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/22_studio/studio_hitl_agent_os.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc0025cd859477913ecd6a60a7e5fcbd2274447291bbec8625c06858dc4882f"}},{"ruleId":"D1","level":"warning","message":{"text":"ClaudeAgent._arun_adapter (cyclomatic 17): ClaudeAgent._arun_adapter has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/claude/agent.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"93adf87bbff7805c31f5ccd4ed06381c449e6f91371b029be69b131eafcdeb38"}},{"ruleId":"D1","level":"warning","message":{"text":"DSPyAgent._arun_adapter_stream (cyclomatic 17): DSPyAgent._arun_adapter_stream has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/dspy/agent.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a1fd57dd9dc30172ea7f16fcecc9cd4b08813193413f7f4ad7bddc151c7c118"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncBaseDb.__init__ (cyclomatic 17): AsyncBaseDb.__init__ has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"4960f6dbc4729dd495491803fe1195c21aec64e14f53b3690294b23ad21737ce"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_user_memories (cyclomatic 17): DynamoDb.get_user_memories has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"9315af7b1c80ea675173b8bf9330b4b80cba46496ad7206fa19de011501c3ec3"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMySQLDb._create_table (cyclomatic 17): AsyncMySQLDb._create_table has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"02f55271426b97f9b1cf66659cb6ad29e40a9355cab8c2ad2caf746be4ca1f58"}},{"ruleId":"D1","level":"warning","message":{"text":"MySQLDb._create_table (cyclomatic 17): MySQLDb._create_table has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a71b28a5e31f625b7d5550affc36a757b92db9cc0c6c1a4869501cedc820360"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb._get_table (cyclomatic 17): AsyncPostgresDb._get_table has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a6ccb90c05a09d9a355a58d4d62e8070d5899b31e3110baaeeac4702c17ef48"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncPostgresDb.get_user_memories (cyclomatic 17): AsyncPostgresDb.get_user_memories has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1164}}}],"partialFingerprints":{"codehealthFindingId/v1":"af238c336e8c98b2d0a2bd9675d6711a3e13f6dd9116ea6b4ac457459f4dff30"}},{"ruleId":"D1","level":"warning","message":{"text":"PostgresDb.create_component_with_config (cyclomatic 17): PostgresDb.create_component_with_config has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3874}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c202bdafe1be68b98ee1ab23aa6cb45fada15d2b4fae60fa2340b9e98dd9ec"}},{"ruleId":"D1","level":"warning","message":{"text":"RedisDb.upsert_trace (cyclomatic 17): RedisDb.upsert_trace has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1723}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5043a627b8a2b62f63e2fc850fbd56d6cef2931f716fe749988dc57825de62"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.create_component_with_config (cyclomatic 17): SqliteDb.create_component_with_config has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3760}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dede74d999097b260ead1859886ed56425433dafdf162951c63c9ccfc7ebd4a"}},{"ruleId":"D1","level":"warning","message":{"text":"SurrealDb.get_traces (cyclomatic 17): SurrealDb.get_traces has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1637}}}],"partialFingerprints":{"codehealthFindingId/v1":"569644df0180053e63a9f4d0227de381dcf245222f7b61f87dfe8f1d1cb0eaf8"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.delete_sessions (cyclomatic 17): ValkeyDb.delete_sessions has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6561c14d2e7a35012f322ce51a4b12fedebc245e8472f6a4afa414380ec094"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.delete_user_memories (cyclomatic 17): ValkeyDb.delete_user_memories has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53e5f5d518c40331651353e4af116be46f244db4b697e91017cf9ed6b731b27"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.upsert_trace (cyclomatic 17): ValkeyDb.upsert_trace has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2013}}}],"partialFingerprints":{"codehealthFindingId/v1":"91bd3e2caac570a3d373578ab7d06eb03049205eca5ac53e7a2b501e592d5725"}},{"ruleId":"D1","level":"warning","message":{"text":"DocumentChunking.chunk (cyclomatic 17): DocumentChunking.chunk has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/document.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"55c232d3389ab77b526ea7c2e86231aa192bcc9f3780b32de7c393bb888377d2"}},{"ruleId":"D1","level":"warning","message":{"text":"AzureBlobLoader._aload_from_azure_blob (cyclomatic 17): AzureBlobLoader._aload_from_azure_blob has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2bcfc696581f30707d90463e8c6e574e107d57e15184770ecdb486f2b7d2b64"}},{"ruleId":"D1","level":"warning","message":{"text":"AzureBlobLoader._load_from_azure_blob (cyclomatic 17): AzureBlobLoader._load_from_azure_blob has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac48ab97f38b5f699e55a50d36ec3d93a69c8a935604bd752856303ca8483428"}},{"ruleId":"D1","level":"warning","message":{"text":"FieldLabeledCSVReader.async_read (cyclomatic 17): FieldLabeledCSVReader.async_read has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"f66143fa6a42e73484628fac94f46e64954eb3320183c06e46d6664a11a2e9d4"}},{"ruleId":"D1","level":"warning","message":{"text":"TavilyReader._extract (cyclomatic 17): TavilyReader._extract has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/tavily_reader.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e896a2cd3ca3a9e7aaeb993fe8a9aef85ec9739308368b3a4ff572734fe3e5"}},{"ruleId":"D1","level":"warning","message":{"text":"ModelMetrics.accumulate (cyclomatic 17): ModelMetrics.accumulate has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"043077aa8768ee5c8ad0c1d143011ba5b6ba60fb0b35183489cf531c5586b50c"}},{"ruleId":"D1","level":"warning","message":{"text":"SessionMetrics.accumulate_from_run (cyclomatic 17): SessionMetrics.accumulate_from_run has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"25eaf3922d5d0c9f5fe2d353ce02a23af2fe571aedbe33a645d707e10d5eebbf"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS._add_auth_middleware (cyclomatic 17): AgentOS._add_auth_middleware has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1352}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcf106209706f39f54a84896d45fb0df366b84f0e545d174f35fcd9aae0f7678"}},{"ruleId":"D1","level":"warning","message":{"text":"handlers.on_run_completed (cyclomatic 17): handlers.on_run_completed has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/handlers.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"8adb74b3f69005b4717df65c87db888975462ac472ec2c860c0780b1a1408566"}},{"ruleId":"D1","level":"warning","message":{"text":"mcp._consume_workflow_stream (cyclomatic 17): mcp._consume_workflow_stream has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp.py"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6a978f75a5c3ef4a3848d4d13917ea956d9897c0ff5706a329ab59d97bc7a5"}},{"ruleId":"D1","level":"warning","message":{"text":"mcp.get_mcp_server (cyclomatic 17): mcp.get_mcp_server has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp.py"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdd00b660ea009d19b24f602f63e505fd2d9a45aaafb3751dac84c54427b562"}},{"ruleId":"D1","level":"warning","message":{"text":"router.workflow_response_streamer (cyclomatic 17): router.workflow_response_streamer has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"427131ddda1f057d0fe734fcf79f32481d2efdf21a444d59f522f10568650292"}},{"ruleId":"D1","level":"warning","message":{"text":"approval._apply_approval_to_tools (cyclomatic 17): approval._apply_approval_to_tools has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/approval.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"b54d2ff64348bc3b5e861da44ea727b08d40acd27b4c55d5ac236c5e83319ef4"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._handle_team_tool_call_updates (cyclomatic 17): _run._handle_team_tool_call_updates has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4997}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab60bf588e184af679bdd4f0ad471f673b2b62b6493967be38d9efa1fbe0536b"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._handle_team_tool_call_updates_stream (cyclomatic 17): _run._handle_team_tool_call_updates_stream has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5058}}}],"partialFingerprints":{"codehealthFindingId/v1":"da68786338a62a0c63d6eff798afba99ffa97fb0ab279c42efcf99fdfe596a17"}},{"ruleId":"D1","level":"warning","message":{"text":"AntigravityTools._load_agent_directory (cyclomatic 17): AntigravityTools._load_agent_directory has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/antigravity.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"93d9564dfe76dd736ec9cde5cce8211004899aa5b86ca388a053d41dc3deb584"}},{"ruleId":"D1","level":"warning","message":{"text":"CalComTools.__init__ (cyclomatic 17): CalComTools.__init__ has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/calcom.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb3274e8bdd550acda78cad1249b576b14cbbd92e96cb5e9056153720fb4ac01"}},{"ruleId":"D1","level":"warning","message":{"text":"CodingTools.grep (cyclomatic 17): CodingTools.grep has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca30d1a62c8cf43b2546116c9c1152f8af7ccc76f138567a9149f6ac6aa643a"}},{"ruleId":"D1","level":"warning","message":{"text":"CodingTools.ls (cyclomatic 17): CodingTools.ls has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e30008b3733db8aa00cf7d500d51f023052605dc916a22aa3a6a143e3b96231"}},{"ruleId":"D1","level":"warning","message":{"text":"Mem0Tools.__init__ (cyclomatic 17): Mem0Tools.__init__ has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mem0.py"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f961134159d3b68202a344999808df264734235fee7001f12ce892cc1017e23"}},{"ruleId":"D1","level":"warning","message":{"text":"OxylabsTools.get_amazon_product (cyclomatic 17): OxylabsTools.get_amazon_product has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"da11eca8ffe1f3734dc194d16ef03b0493ebb60a3fa0a4b23a1c15948f574feb"}},{"ruleId":"D1","level":"warning","message":{"text":"ScavioTools.__init__ (cyclomatic 17): ScavioTools.__init__ has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/scavio.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9bd694dd8b2746d8b67966a899bf3dee9dd3eced3b0e800ef7c5a36ed85638"}},{"ruleId":"D1","level":"warning","message":{"text":"ShopifyTools.get_product_sales_breakdown (cyclomatic 17): ShopifyTools.get_product_sales_breakdown has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/shopify.py"},"region":{"startLine":776}}}],"partialFingerprints":{"codehealthFindingId/v1":"06fead0247e2e68eae398631de2a59287e33d44c93b890edf66a44295e779e95"}},{"ruleId":"D1","level":"warning","message":{"text":"ValyuTools._valyu_search (cyclomatic 17): ValyuTools._valyu_search has cyclomatic complexity 17 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/valyu.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d4d831aeb4099809791f671d373465291012fcf2a38b25cd05c8ff42a7422f0"}},{"ruleId":"D1","level":"warning","message":{"text":"YouTools.you_search (cyclomatic 17): YouTools.you_search has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/youcom.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c5a6c7b6df67e277cab4e9ae49e7ea3da5d8b142a484efdfa1c706663d27d0"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.get_last_run_output_util (cyclomatic 17): agent.get_last_run_output_util has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b578b6918bed6386a01adba8f59c29d496f5ffa76a864391400f3a838678cd"}},{"ruleId":"D1","level":"warning","message":{"text":"pprint.pprint_run_response (cyclomatic 17): pprint.pprint_run_response has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/pprint.py"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"12976ae7e508cbbbef19026810e7333a3e4ab368722ddc6db370f63bab58d20e"}},{"ruleId":"D1","level":"warning","message":{"text":"pprint.apprint_run_response (cyclomatic 17): pprint.apprint_run_response has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/pprint.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8f467a4daa4a5dba2e41b2d961d5e6e1d533d30f1d132fd8c74ae92ee64e43f"}},{"ruleId":"D1","level":"warning","message":{"text":"Router.execute (cyclomatic 17): Router.execute has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a98b8bf693db7a44f5b81ab676574f4f946504617fc397432038fa52e872f51"}},{"ruleId":"D1","level":"warning","message":{"text":"Router.aexecute (cyclomatic 17): Router.aexecute has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":999}}}],"partialFingerprints":{"codehealthFindingId/v1":"69224732c67a601d0ff9bcbf58a72aea7c7e925f0fdab5726f221179b120463d"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._propagate_hooks_to_step (cyclomatic 17): Workflow._propagate_hooks_to_step has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10275}}}],"partialFingerprints":{"codehealthFindingId/v1":"693be4d62f3d70c9b5ca4d917002ecc641c801dbd231f0ad4d54f9d3da883285"}},{"ruleId":"D1","level":"warning","message":{"text":"test_workflow_cancellation.test_cancel_workflow_with_agents_during_streaming (cyclomatic 17): test_workflow_cancellation.test_cancel_workflow_with_agents_during_streaming has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_workflow_cancellation.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb8412efc6b58339652accdfeb4bab0387af1629f2bfc88f07fdb3b8589e4a67"}},{"ruleId":"D1","level":"warning","message":{"text":"test_workflow_cancellation.test_cancel_workflow_with_agents_during_async_streaming (cyclomatic 17): test_workflow_cancellation.test_cancel_workflow_with_agents_during_async_streaming has cyclomatic complexity 17 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_workflow_cancellation.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"78dcefc9052ee75edf94a4797bd5325640013b2e8e818ae860bc30cb90beb9fa"}},{"ruleId":"D1","level":"warning","message":{"text":"EbsVolume._create (cyclomatic 17): EbsVolume._create has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/volume.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e438dc05fb423fbb6620f462a1d2563ae614f778f1d5ec045e3cac1f214a641"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerApp.get_container_env (cyclomatic 17): DockerApp.get_container_env has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/app/base.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7a4b3d92e6de3ba4d4efc5530e773fa0dfe8ff3d4db65e332f32083b5fb035f"}},{"ruleId":"D1","level":"warning","message":{"text":"DockerImage.buildx (cyclomatic 17): DockerImage.buildx has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resource/image.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0499d91d1f90a523df86f4985fe9a1a0de18cfdfa956d1556a154e37ffce885"}},{"ruleId":"D1","level":"warning","message":{"text":"02_tool_error_persistence.scenario_b_model_call_fails (cyclomatic 16): 02_tool_error_persistence.scenario_b_model_call_fails has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/23_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"23bc3bafa693ccb9ba0d266875961cc757ea701eb283d2d88e9312fcd3e6a5e5"}},{"ruleId":"D1","level":"warning","message":{"text":"history_in_function.analyze_content_strategy (cyclomatic 16): history_in_function.analyze_content_strategy has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/history/history_in_function.py"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"181a8cc5c012a86c210948ffeb42560cba1b85893839ee7adc51a8b17754e44d"}},{"ruleId":"D1","level":"warning","message":{"text":"cancel_run.long_running_task (cyclomatic 16): cancel_run.long_running_task has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/run_control/cancel_run.py"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"426fd2dbed19c0fa3c8bd04cc326074b2ebf809a96143793d702a617713fccd2"}},{"ruleId":"D1","level":"warning","message":{"text":"01_step_confirmation_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 01_step_confirmation_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/01_step_confirmation_and_tool_confirmation.py"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec82a4e51928ecaf9703c202d4ce6c5a1568aeef85ac0615cb8ed40e463e56d0"}},{"ruleId":"D1","level":"warning","message":{"text":"02_step_user_input_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 02_step_user_input_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/02_step_user_input_and_tool_confirmation.py"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39882b6f7ff0467c8649ae8f72a8712d1435669ac69d8f49f29c79b424871f2"}},{"ruleId":"D1","level":"warning","message":{"text":"03_condition_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 03_condition_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"267d4bee1bfa2fed61623143b262bc7d452fa6c2d489618c2ff644960c321d8a"}},{"ruleId":"D1","level":"warning","message":{"text":"04_router_selection_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 04_router_selection_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/04_router_selection_and_tool_confirmation.py"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f7b6a435b0dbeeb1cc1656ce0c026cc73065c3a26779aab4c29c8eb5748a3c"}},{"ruleId":"D1","level":"warning","message":{"text":"05_output_review_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 05_output_review_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fd2ea5fbf0735f2bf4c430de0a9fc87eb8b02fd5288f0a6a6f567c1e0e0e78"}},{"ruleId":"D1","level":"warning","message":{"text":"06_loop_confirmation_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 06_loop_confirmation_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/06_loop_confirmation_and_tool_confirmation.py"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfcf49090a82b2f8498a89ccd2f47c5c8c36c795e12955c515c907080e5ce9d"}},{"ruleId":"D1","level":"warning","message":{"text":"07_router_confirmation_and_tool_confirmation.resolve_executor_pause (cyclomatic 16): 07_router_confirmation_and_tool_confirmation.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/07_router_confirmation_and_tool_confirmation.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab2d318eea616f4fecb7896d85544998c47e44613151c5528caf74f8393294d9"}},{"ruleId":"D1","level":"warning","message":{"text":"09_multi_step_mixed_hitl.resolve_executor_pause (cyclomatic 16): 09_multi_step_mixed_hitl.resolve_executor_pause has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"110c15323a82b844216f38fa9083dcbeb42308e72d487060600c687448b51fad"}},{"ruleId":"D1","level":"warning","message":{"text":"_default_tools._extract_session_preview (cyclomatic 16): _default_tools._extract_session_preview has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c86b4f606e55239f98ee6e587d8273f1857b72e141cac3f673d438bf4f6a947"}},{"ruleId":"D1","level":"warning","message":{"text":"_managers.make_memories (cyclomatic 16): _managers.make_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3595324fa0e0140c14586c2cc38c2e133084aeb0c6a834bc9b4058b94485ad"}},{"ruleId":"D1","level":"warning","message":{"text":"_managers.amake_memories (cyclomatic 16): _managers.amake_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"619f464367768c2a467def6da25655da8a388fefc2426a6a97d68d196a7aa4cb"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.update_reasoning_content_from_tool_call (cyclomatic 16): _response.update_reasoning_content_from_tool_call has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"059a3274a231e5fb888cc76f6f625b84793daa2a526fa40a07587372f5b807f1"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._truncate_run_to_checkpoint (cyclomatic 16): _run._truncate_run_to_checkpoint has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2966}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf969e6c642796649a0298cbf33f06f536a39af16a99295cc05fab8edaef725f"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._handle_run_cancellation (cyclomatic 16): _run._handle_run_cancellation has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":5653}}}],"partialFingerprints":{"codehealthFindingId/v1":"35d97cbb9f60350d204c2e3979fdb432695d014d4cadefdf82c0d26f9c4640ce"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.run_tool (cyclomatic 16): _tools.run_tool has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0cb1582cc609ec6024b65e9e4168fb7031dfbfeaa25047055ff02dee4b4011d"}},{"ruleId":"D1","level":"warning","message":{"text":"_tools.arun_tool (cyclomatic 16): _tools.arun_tool has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"4beb5583b1a1c8cec7655cb8c817e8260dd3ef4ac49c81174827bea45ef7fbfe"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.validate_google_credentials (cyclomatic 16): utils.validate_google_credentials has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/google/utils.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"acf2bcda760e6a2b25287d4a7865f8342104b2979625837bd3dd25f1ea912370"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamoDb.get_user_memory_stats (cyclomatic 16): DynamoDb.get_user_memory_stats has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b043075c95459b5b046a4f1971a71d733e3d348f65e1971f2ac1191e9d1947"}},{"ruleId":"D1","level":"warning","message":{"text":"FirestoreDb.get_traces (cyclomatic 16): FirestoreDb.get_traces has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":2034}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d3539020ce1251b7858ccc162a8281612ee5cf3113d8eb3f56c2420cf4d1a80"}},{"ruleId":"D1","level":"warning","message":{"text":"GcsJsonDb.get_user_memories (cyclomatic 16): GcsJsonDb.get_user_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d1e8ca58d11bbee1bbdc9fef49a51513430a5478e235b7463e91922c37fc41"}},{"ruleId":"D1","level":"warning","message":{"text":"InMemoryDb.get_user_memories (cyclomatic 16): InMemoryDb.get_user_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"04999024f2e99558bce5324eb185e0d182db39cf816ecfd4b1654ffe3ad2f77b"}},{"ruleId":"D1","level":"warning","message":{"text":"JsonDb.get_user_memories (cyclomatic 16): JsonDb.get_user_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab0e07e59bc45a6c812e0f878de3ef295e55628397481d6285fc928afc2dc30"}},{"ruleId":"D1","level":"warning","message":{"text":"MigrationManager.up (cyclomatic 16): MigrationManager.up has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/manager.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eb59d50026ce83d2840c2e1bf1f3f2bea8e4b30484aed764fc9ee75720bdabc"}},{"ruleId":"D1","level":"warning","message":{"text":"v1_to_v2.get_table_content_in_batches (cyclomatic 16): v1_to_v2.get_table_content_in_batches has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c2e3b2675e292a2af74cf336b24805f7f3f5d0c2885bd207ae498330457e853"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncMongoDb.get_trace_stats (cyclomatic 16): AsyncMongoDb.get_trace_stats has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2642}}}],"partialFingerprints":{"codehealthFindingId/v1":"098cef17565b85fbced829118110471c780d9550e8cd26497d6e859c24e02042"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.get_trace_stats (cyclomatic 16): MongoDb.get_trace_stats has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2480}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e8e64a90561089b9a6a5e1d432051e35e75b406783f9ea14db3cccf3b8e530a"}},{"ruleId":"D1","level":"warning","message":{"text":"SingleStoreDb.get_trace_stats (cyclomatic 16): SingleStoreDb.get_trace_stats has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":2708}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd473386a402f945ba162ca05470c7938c5be6345a80b559e7e353f994e326be"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.upsert_session (cyclomatic 16): AsyncSqliteDb.upsert_session has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3a9f622209d529ce83b9ccdb274a047a25b9f096996192eea8976413167a607"}},{"ruleId":"D1","level":"warning","message":{"text":"AsyncSqliteDb.get_user_memories (cyclomatic 16): AsyncSqliteDb.get_user_memories has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"a526e8abc860ad3c6012f8cd889f1da930af8ec78feeede19bdf90169793354b"}},{"ruleId":"D1","level":"warning","message":{"text":"SqliteDb.upsert_session (cyclomatic 16): SqliteDb.upsert_session has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f06a81bb0d640043918383051794ab2be85e08e5da4dd5d0a8166edf8ac97d0"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDb.delete_eval_runs (cyclomatic 16): ValkeyDb.delete_eval_runs has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1777}}}],"partialFingerprints":{"codehealthFindingId/v1":"bee9d1dd8405e9e443ef878395b4ee3cba97c7ab3cb346b9b20ce7703d43add6"}},{"ruleId":"D1","level":"warning","message":{"text":"AccuracyEval.arun_with_output (cyclomatic 16): AccuracyEval.arun_with_output has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b7e7555e392b02a409aa86e77cf1a91221354962b3c7fdd666a8a8875252bf8"}},{"ruleId":"D1","level":"warning","message":{"text":"FileSystemTools.list_files (cyclomatic 16): FileSystemTools.list_files has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/toolkit.py"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"489678792e9ebee763d667155dc541bc2b740b2b6e5d2c5dc82b3cb4fa052ef6"}},{"ruleId":"D1","level":"warning","message":{"text":"GeminiEmbedder.async_get_embeddings_batch_and_usage (cyclomatic 16): GeminiEmbedder.async_get_embeddings_batch_and_usage has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/google.py"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b1cafac3e02dbf337161ec5888293f187162d57610623ca4b3d507946042f8"}},{"ruleId":"D1","level":"warning","message":{"text":"LearningMachine._serialize_store_input (cyclomatic 16): LearningMachine._serialize_store_input has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"965373cdd882a6805e3a8605cfd1725bf992934424689c4b2818c584c2de249e"}},{"ruleId":"D1","level":"warning","message":{"text":"LearningMachine._deserialize_store_config (cyclomatic 16): LearningMachine._deserialize_store_config has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":1098}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0584cc2560e44a9e2b0cfb9c12ff239e5d2248d25fbef9aa2b4b3b8d90a6011"}},{"ruleId":"D1","level":"warning","message":{"text":"DecisionLogStore._filter_decisions (cyclomatic 16): DecisionLogStore._filter_decisions has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"d47ae21018f3a6afc436bc89cfc0633a541f6a282566dc8be209f45b2944fc4e"}},{"ruleId":"D1","level":"warning","message":{"text":"Model._populate_assistant_message_from_stream_data (cyclomatic 16): Model._populate_assistant_message_from_stream_data has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef77db6f5849374d394c1947d2a4efc1a0c564193cfb3e1925d3113571ef6a2e"}},{"ruleId":"D1","level":"warning","message":{"text":"HuggingFace.get_request_params (cyclomatic 16): HuggingFace.get_request_params has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c5d89edf28f88f393fee4de5c56f5e4fba893c4b9cc0f853381bcfb33507bc5"}},{"ruleId":"D1","level":"warning","message":{"text":"AgentOS._add_router (cyclomatic 16): AgentOS._add_router has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e403aeb6e4fb17948cbc3c80e1879f57dcd39b8cce6e5400f0b5cec50d3f1e"}},{"ruleId":"D1","level":"warning","message":{"text":"helpers.extract_message_payload (cyclomatic 16): helpers.extract_message_payload has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/telegram/helpers.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"2699cd551d9f652d61476b4ae42d78e9625a78223903e458d386d97be6dcd1c6"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.run_agent_as_judge_eval (cyclomatic 16): utils.run_agent_as_judge_eval has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f64f7e05ab786c4f3de998aa44bcdc0bd4c83daf06cb68bcc70f7bf769b288"}},{"ruleId":"D1","level":"warning","message":{"text":"utils.resolve_ws_jwt_config (cyclomatic 16): utils.resolve_ws_jwt_config has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bfd98333b0baba11bd3b21f45a1aa49397bbdbebefdd3fbf4620024b67d2d04"}},{"ruleId":"D1","level":"warning","message":{"text":"ReasoningManager.run_default_reasoning (cyclomatic 16): ReasoningManager.run_default_reasoning has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa3b66aa6ecfa4e4de067511bf10d795f64da5cf5f17e83d75b0d03990d5967"}},{"ruleId":"D1","level":"warning","message":{"text":"openai.get_openai_reasoning_stream (cyclomatic 16): openai.get_openai_reasoning_stream has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/openai.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f6ffa6577616203fa99a2feb595c3271945403f817b8b09d70830ce4eb1d55"}},{"ruleId":"D1","level":"warning","message":{"text":"openai.aget_openai_reasoning_stream (cyclomatic 16): openai.aget_openai_reasoning_stream has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/openai.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1d449c1c6efeac3177782671f74b5bf4f96579347024d6ef56ada06ee9b68b"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkflowSession.get_messages (cyclomatic 16): WorkflowSession.get_messages has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef5cb14a710c77bcaf6414d57e555d2052716613e293aec23697ca0928371965"}},{"ruleId":"D1","level":"warning","message":{"text":"_response.update_reasoning_content_from_tool_call (cyclomatic 16): _response.update_reasoning_content_from_tool_call has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a289e109c3aaa10fde5ecb4153111d391c4d3d799c8c4bdcaf61b502a65c17"}},{"ruleId":"D1","level":"warning","message":{"text":"_run.arun_dispatch (cyclomatic 16): _run.arun_dispatch has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4094}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e29e32d06965a93c9266279cff12e3bbed0219b772a109ca1e30b485e50a6c3"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._backfill_approval_to_requirements (cyclomatic 16): _run._backfill_approval_to_requirements has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5312}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee978a8895c82384acf426507e681acbc0577e93348c7c6d4e3623405b6c0325"}},{"ruleId":"D1","level":"warning","message":{"text":"_run._truncate_team_run_to_checkpoint (cyclomatic 16): _run._truncate_team_run_to_checkpoint has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6011}}}],"partialFingerprints":{"codehealthFindingId/v1":"a66f04aa35b45f60b63bed505865c5b35b332cc9261355e42bc3022b8a99dbf9"}},{"ruleId":"D1","level":"warning","message":{"text":"CodingTools._check_command (cyclomatic 16): CodingTools._check_command has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e3cd198431119daf63cba1637471fa9afd0e99c07ddb34f3e249a06c870909d"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleCalendarTools.update_event (cyclomatic 16): GoogleCalendarTools.update_event has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ebd5de7c43a86ea302f8844b2d31fac96ff3309fca670a3b08b1e20a177193"}},{"ruleId":"D1","level":"warning","message":{"text":"GoogleDriveTools.read_file (cyclomatic 16): GoogleDriveTools.read_file has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/drive.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b682daee40c9737906047c96bb6da1a0b468515f0e2194a315ef065c35caf54"}},{"ruleId":"D1","level":"warning","message":{"text":"MCPTools.get_temporary_session_for_run (cyclomatic 16): MCPTools.get_temporary_session_for_run has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad93358a5a0a689807b930fd5995deac6beca07fb1358607a9eb49783f109a7e"}},{"ruleId":"D1","level":"warning","message":{"text":"MemoryTools.__init__ (cyclomatic 16): MemoryTools.__init__ has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/memory.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"f561f66ba886a65db75893c08e550d3744f884e944bda929dc73a4480ed2e14f"}},{"ruleId":"D1","level":"warning","message":{"text":"MLXTranscribeTools.transcribe (cyclomatic 16): MLXTranscribeTools.transcribe has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mlx_transcribe.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"85c50325d6f4c8e2f6653c0391a15237e18fa6bed5d4391486b022502941b95f"}},{"ruleId":"D1","level":"warning","message":{"text":"Neo4jTools.__init__ (cyclomatic 16): Neo4jTools.__init__ has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/neo4j.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"7334bf5bb13e23ced062978b26ba849d0a73624004e1c459e7b05004b55fb09e"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenBBTools.__init__ (cyclomatic 16): OpenBBTools.__init__ has cyclomatic complexity 16 (threshold 15). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/openbb.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"6358a5eead94a243d00c3ab1c27f09bd9fb5c77c18ccb830e851dfdfafe6cec0"}},{"ruleId":"D1","level":"warning","message":{"text":"RedmineTools.search_issues (cyclomatic 16): RedmineTools.search_issues has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c8fbfdf635647913ec7e755ed0dad1df1e31fdc07f0fb49d5e917ec75cba029"}},{"ruleId":"D1","level":"warning","message":{"text":"VisualizationTools.create_scatter_plot (cyclomatic 16): VisualizationTools.create_scatter_plot has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/visualization.py"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"8302d4fae76c33f128847d07ea6a8c769ac25d1ef1de6311fecffc1288a835e9"}},{"ruleId":"D1","level":"warning","message":{"text":"agent.aget_last_run_output_util (cyclomatic 16): agent.aget_last_run_output_util has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"1be087103b09c0da0bae0bdc600113b353e5f446bcb96245556799b2a3853317"}},{"ruleId":"D1","level":"warning","message":{"text":"message.filter_tool_calls (cyclomatic 16): message.filter_tool_calls has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"570f01f065a33b695bc56bb6abaf21cf86b6496690b3b383828362a58b6987b6"}},{"ruleId":"D1","level":"warning","message":{"text":"openai.audio_to_message (cyclomatic 16): openai.audio_to_message has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/openai.py"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"15c32ef2bbf8941b349a363bc74a42a6808ad8a07c96866eb6eb9b80f6088a03"}},{"ruleId":"D1","level":"warning","message":{"text":"ChromaDb.update_metadata (cyclomatic 16): ChromaDb.update_metadata has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"89f843a4b4c4498c9a44184feaf0ec56737afd88bf3398b7f54b575adf140f53"}},{"ruleId":"D1","level":"warning","message":{"text":"MongoDb.async_insert (cyclomatic 16): MongoDb.async_insert has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f7dcd9f9304ab191bf9d09897c62b82875c48d7f648bbfe1b93701997050e9"}},{"ruleId":"D1","level":"warning","message":{"text":"ValkeyDB._parse_hash (cyclomatic 16): ValkeyDB._parse_hash has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"1175485ac381618a4e385d6165439a44b2fab2a524ca680788f5daa962153804"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow.run (cyclomatic 16): Workflow.run has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":9427}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9f39d54f01671e8f4959c30a5fcc7006acd37b33786691a96a8080a35775e1"}},{"ruleId":"D1","level":"warning","message":{"text":"Workflow._prepare_steps (cyclomatic 16): Workflow._prepare_steps has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":9861}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cfe9b335ae15b8a61f1d98d04172183c32575d511a7d75cf9bfe87cdc443831"}},{"ruleId":"D1","level":"warning","message":{"text":"LoadBalancer._create (cyclomatic 16): LoadBalancer._create has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elb/load_balancer.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f75a419b2a6c621152d7362aab1f7de445f409575f1b2a22d72fa48ebc7bcb5"}},{"ruleId":"D1","level":"warning","message":{"text":"mcp_client._verify_mcp (cyclomatic 16): mcp_client._verify_mcp has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/mcp_client.py"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a1888c89bfcb7b9e13a94d580228ac07cbcfb12f05dbbbc659ce703441f91b3"}},{"ruleId":"D2","level":"warning","message":{"text":"team.aprint_response_stream (cognitive 371): team.aprint_response_stream has cognitive complexity 371 (threshold 15). Drivers by points: if/else 237, loops 61, boolean chains 43, ternaries 20, error handling 10 (nesting depth added 217). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":1292}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdc991cc93a2f342dbf864d939c6bcee686d3eb1d0e6c94b88122f1bec9da335"}},{"ruleId":"D2","level":"warning","message":{"text":"team.print_response_stream (cognitive 349): team.print_response_stream has cognitive complexity 349 (threshold 15). Drivers by points: if/else 222, loops 56, boolean chains 41, ternaries 20, error handling 10 (nesting depth added 201). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a6d8053b508a859562c0c8c57a45095c88efc5bb53bd1053ce541fbe7c4b912"}},{"ruleId":"D2","level":"warning","message":{"text":"_response._handle_model_response_chunk (cognitive 342): _response._handle_model_response_chunk has cognitive complexity 342 (threshold 15). Drivers by points: if/else 272, loops 33, ternaries 20, boolean chains 11, error handling 6 (nesting depth added 245). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd0f54db4091ef3932647fcead0c945140b7ca7305d15790fc9986cfaff0c9f0"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._acontinue_execute_stream (cognitive 330): Workflow._acontinue_execute_stream has cognitive complexity 330 (threshold 15). Drivers by points: if/else 202, boolean chains 73, ternaries 32, loops 13, error handling 10 (nesting depth added 166). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":8496}}}],"partialFingerprints":{"codehealthFindingId/v1":"2548a398ad126c51ff2aed8beccffcca3e3991de14f025a318c2c801b5aee82b"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._continue_execute_stream (cognitive 328): Workflow._continue_execute_stream has cognitive complexity 328 (threshold 15). Drivers by points: if/else 200, boolean chains 73, ternaries 32, loops 13, error handling 10 (nesting depth added 165). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6770}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cd68164db6038e59f94f5bfd3a43563b1192db711a5253108ec554a174946a8"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._acontinue_run_stream (cognitive 321): _run._acontinue_run_stream has cognitive complexity 321 (threshold 15). Drivers by points: if/else 210, loops 60, boolean chains 25, error handling 23, ternaries 3 (nesting depth added 197). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":8304}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc3af3a29d1a40d7cf819270e6afaf9dcfb496f0c6fa94cff5e4e14d24949bdc"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.handle_model_response_chunk (cognitive 288): _response.handle_model_response_chunk has cognitive complexity 288 (threshold 15). Drivers by points: if/else 227, loops 34, boolean chains 11, ternaries 10, error handling 6 (nesting depth added 204). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1370}}}],"partialFingerprints":{"codehealthFindingId/v1":"756910a5a485958f3df5ce190525536bfb3100e63e2ec8ba1e98dc533e54f2b5"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._aexecute_stream (cognitive 288): Workflow._aexecute_stream has cognitive complexity 288 (threshold 15). Drivers by points: if/else 163, boolean chains 49, ternaries 32, error handling 29, loops 15 (nesting depth added 159). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":3424}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae219f2e8260a12ff4d2728fb0595b6227c80d40ca48c379c150e7192702bc47"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._acontinue_run_stream (cognitive 259): _run._acontinue_run_stream has cognitive complexity 259 (threshold 15). Drivers by points: if/else 177, loops 32, error handling 21, boolean chains 19, ternaries 10 (nesting depth added 154). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4972}}}],"partialFingerprints":{"codehealthFindingId/v1":"fde5e5be970a97a1bba1c39c6e096bc8e1c8af71bb6d813b119ad00c156b730f"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.aexecute_stream (cognitive 252): Step.aexecute_stream has cognitive complexity 252 (threshold 15). Drivers by points: if/else 181, boolean chains 28, ternaries 22, loops 17, error handling 4 (nesting depth added 156). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1658}}}],"partialFingerprints":{"codehealthFindingId/v1":"a525da6a2d268edfd5e325061cde4e52c74ed6f7481f197e915466fdcff624d1"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.stream_a2a_response (cognitive 251): utils.stream_a2a_response has cognitive complexity 251 (threshold 15). Drivers by points: if/else 176, boolean chains 54, ternaries 11, loops 10 (nesting depth added 124). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8b66d598f5d51311f20e3be45ad70f145d0a60f7c08a2759ebf8411810f5db"}},{"ruleId":"D2","level":"warning","message":{"text":"workflow.print_response_stream (cognitive 246): workflow.print_response_stream has cognitive complexity 246 (threshold 15). Drivers by points: if/else 124, ternaries 58, boolean chains 49, loops 14, error handling 1 (nesting depth added 130). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"4806e77a10e371b9e0baa45ecf3d198846dfafaab6b6d92e89aaf13255485d53"}},{"ruleId":"D2","level":"warning","message":{"text":"workflow.aprint_response_stream (cognitive 239): workflow.aprint_response_stream has cognitive complexity 239 (threshold 15). Drivers by points: if/else 118, ternaries 58, boolean chains 48, loops 14, error handling 1 (nesting depth added 125). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f6d4bfdca81d5c35e1c99d073dc9ec79570bbee395d8bab0930797980c76f4"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._execute_stream (cognitive 237): Workflow._execute_stream has cognitive complexity 237 (threshold 15). Drivers by points: if/else 122, boolean chains 47, ternaries 32, error handling 24, loops 12 (nesting depth added 127). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":2394}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8d4e9194f5405ec8e9887604071f20d65956838fa06e74f719cc6bd52b093ce"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.execute_stream (cognitive 231): Step.execute_stream has cognitive complexity 231 (threshold 15). Drivers by points: if/else 159, boolean chains 29, ternaries 22, loops 13, error handling 8 (nesting depth added 140). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"47409e9f0c0493fabd12e165baaeaf77ca0658c488a01d3fad848f063600c1ea"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.aexecute (cognitive 223): Step.aexecute has cognitive complexity 223 (threshold 15). Drivers by points: if/else 166, ternaries 22, boolean chains 16, loops 11, error handling 8 (nesting depth added 145). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f212d8cb2b8c6ffd2c40ef15a5bd1f13e1a8539bb15105a27b53aefa1e59f2"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.arun_function_calls (cognitive 220): Model.arun_function_calls has cognitive complexity 220 (threshold 15). Drivers by points: if/else 167, loops 27, boolean chains 18, error handling 8 (nesting depth added 133). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2510}}}],"partialFingerprints":{"codehealthFindingId/v1":"cafa1f6d431bc4c0e6175db10a249d9c2a8ee7ac8107534b674aa28a17974af3"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._acontinue_execute (cognitive 209): Workflow._acontinue_execute has cognitive complexity 209 (threshold 15). Drivers by points: if/else 131, boolean chains 52, ternaries 18, error handling 7, loops 1 (nesting depth added 91). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7967}}}],"partialFingerprints":{"codehealthFindingId/v1":"162080d8e716794d1c2b03f3878383e71c448f4aced532a64e5903ecb9a9b710"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._continue_execute (cognitive 206): Workflow._continue_execute has cognitive complexity 206 (threshold 15). Drivers by points: if/else 128, boolean chains 53, ternaries 18, error handling 6, loops 1 (nesting depth added 91). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5942}}}],"partialFingerprints":{"codehealthFindingId/v1":"c78edabdde9000da95560baa430794601d1bb122946b16058a0744f23ecec611"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._parse_provider_response (cognitive 185): GeminiInteractions._parse_provider_response has cognitive complexity 185 (threshold 15). Drivers by points: if/else 144, loops 18, boolean chains 15, ternaries 8 (nesting depth added 126). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"62a782957a751fb772ea5a14bfd1bf3f428ccb14c59ac711d5cf53f6ed2442c9"}},{"ruleId":"D2","level":"warning","message":{"text":"team.print_response (cognitive 184): team.print_response has cognitive complexity 184 (threshold 15). Drivers by points: if/else 116, loops 36, boolean chains 21, ternaries 11 (nesting depth added 112). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e5f88660e648154b7fa61da73e44a71079dcb1cacb8e6778fec64444d7c9b0"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.execute (cognitive 184): Step.execute has cognitive complexity 184 (threshold 15). Drivers by points: if/else 134, ternaries 22, boolean chains 15, error handling 8, loops 5 (nesting depth added 115). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"740a5598d8ae7961b7e523e04ec6556304dc99b5b9c16ab9b21bfa0ecdea2bfd"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._acontinue_run (cognitive 181): _run._acontinue_run has cognitive complexity 181 (threshold 15). Drivers by points: if/else 119, error handling 21, boolean chains 16, loops 14, ternaries 11 (nesting depth added 107). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4478}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f58c2325fc4ae662e5ae8493b21a10ac975e550181d90055253f3881108058d"}},{"ruleId":"D2","level":"warning","message":{"text":"team.aprint_response (cognitive 179): team.aprint_response has cognitive complexity 179 (threshold 15). Drivers by points: if/else 111, loops 36, boolean chains 21, ternaries 11 (nesting depth added 108). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0c95f51ee48b892113fcc86fe8238589274b4320550d19112dd80d86dff0e9"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun_stream (cognitive 177): _run._arun_stream has cognitive complexity 177 (threshold 15). Drivers by points: if/else 116, loops 30, error handling 20, boolean chains 9, ternaries 2 (nesting depth added 100). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2151}}}],"partialFingerprints":{"codehealthFindingId/v1":"42a07a09cc7428fedd1ecde0ea8bed6d12cfc5904f54f50e2473a5c97755a13e"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._acontinue_run (cognitive 169): _run._acontinue_run has cognitive complexity 169 (threshold 15). Drivers by points: if/else 115, boolean chains 23, error handling 20, loops 8, ternaries 3 (nesting depth added 90). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7875}}}],"partialFingerprints":{"codehealthFindingId/v1":"a75a38b0be5ce5c7051c92ccd9ca70741133874b4f53d4db77ee7198b026342b"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._parse_provider_response (cognitive 157): Gemini._parse_provider_response has cognitive complexity 157 (threshold 15). Drivers by points: if/else 116, boolean chains 20, ternaries 13, loops 8 (nesting depth added 91). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1128}}}],"partialFingerprints":{"codehealthFindingId/v1":"4723db2cf0abde099cdf004727af531468b82a45ade5d5d9aafdad299df63e55"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._aexecute (cognitive 151): Workflow._aexecute has cognitive complexity 151 (threshold 15). Drivers by points: if/else 87, boolean chains 23, ternaries 15, error handling 14, loops 12 (nesting depth added 79). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":3065}}}],"partialFingerprints":{"codehealthFindingId/v1":"a64097dafbc4f2600f96718d97154dcd48eccf19f188303ddb4b228a02c0ae14"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._parse_provider_response_delta (cognitive 150): GeminiInteractions._parse_provider_response_delta has cognitive complexity 150 (threshold 15). Drivers by points: if/else 101, ternaries 22, boolean chains 21, error handling 4, loops 2 (nesting depth added 86). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":948}}}],"partialFingerprints":{"codehealthFindingId/v1":"b42eafcc8b9698b42e40889b2c5ae022aaf17ec850700fe217bab3fed97ea70d"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.response (cognitive 148): Model.response has cognitive complexity 148 (threshold 15). Drivers by points: if/else 119, boolean chains 12, loops 7, ternaries 6, error handling 4 (nesting depth added 98). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3f74eafc8dc985c088528adde36efaa928cdcd5a2c532b4242701f0ac663ac"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.aresponse (cognitive 148): Model.aresponse has cognitive complexity 148 (threshold 15). Drivers by points: if/else 119, boolean chains 12, loops 7, ternaries 6, error handling 4 (nesting depth added 98). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"c524ac6cb8a5d36eadcfccca50d2d219215d372746aa8c3e9082f3a7c035c93d"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run_stream (cognitive 147): _run._run_stream has cognitive complexity 147 (threshold 15). Drivers by points: if/else 100, error handling 20, loops 18, boolean chains 7, ternaries 2 (nesting depth added 84). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":754}}}],"partialFingerprints":{"codehealthFindingId/v1":"478a93817449e2396070342e3a744a594d832b5dbf2a6f001d30ff627f44fabf"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools._determine_tools_for_model (cognitive 145): _tools._determine_tools_for_model has cognitive complexity 145 (threshold 15). Drivers by points: if/else 89, ternaries 27, boolean chains 18, loops 8, error handling 3 (nesting depth added 72). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_tools.py"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0d352a3531f8ec92430f24b1f526099dc983aded5d922a18fca1d78c4dc376"}},{"ruleId":"D2","level":"warning","message":{"text":"_storage.to_dict (cognitive 144): _storage.to_dict has cognitive complexity 144 (threshold 15). Drivers by points: if/else 120, loops 8, ternaries 7, boolean chains 6, error handling 3 (nesting depth added 23). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"d451eb78113709c61cbc2022f9be17c13030d12e7274197f98217567640b5035"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._parse_provider_response_delta (cognitive 143): Gemini._parse_provider_response_delta has cognitive complexity 143 (threshold 15). Drivers by points: if/else 102, boolean chains 17, ternaries 15, loops 9 (nesting depth added 90). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1302}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba5d38c6d803a2d3117f34b89e3dec8df6a05a184bfc20a23cf7e8180f100671"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._format_messages (cognitive 142): Gemini._format_messages has cognitive complexity 142 (threshold 15). Drivers by points: if/else 90, loops 21, error handling 12, boolean chains 11, ternaries 8 (nesting depth added 93). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c08c1b29da517810fe20962cf8b002f0839cdb431e8200918c6bb9fe2590e85"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.aget_system_message (cognitive 139): _messages.aget_system_message has cognitive complexity 139 (threshold 15). Drivers by points: if/else 94, loops 17, boolean chains 13, ternaries 12, error handling 3 (nesting depth added 50). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca674cf3d829ae848be81901c38ead493a773a1a17b1cdab07a6f27ba1554cf8"}},{"ruleId":"D2","level":"warning","message":{"text":"claude.format_messages (cognitive 136): claude.format_messages has cognitive complexity 136 (threshold 15). Drivers by points: if/else 88, loops 26, boolean chains 12, ternaries 10 (nesting depth added 85). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfb94c2f6d8d2d37b9a9481a32ecff14112dbcb8fe53d90823473f35e99e3a7"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._execute (cognitive 136): Workflow._execute has cognitive complexity 136 (threshold 15). Drivers by points: if/else 71, boolean chains 23, error handling 18, ternaries 15, loops 9 (nesting depth added 70). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":2052}}}],"partialFingerprints":{"codehealthFindingId/v1":"69fd1ae35f937e5dba5330bc89919d96308cd883c0d432b6c749b3db63cc29dc"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun_stream (cognitive 135): _run._arun_stream has cognitive complexity 135 (threshold 15). Drivers by points: if/else 85, loops 29, error handling 18, boolean chains 3 (nesting depth added 78). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":3579}}}],"partialFingerprints":{"codehealthFindingId/v1":"621c614653e62b3bda9619b0fee7187e722028ecaf350d2cd8e86af23312893e"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.acontinue_run (cognitive 134): Workflow.acontinue_run has cognitive complexity 134 (threshold 15). Drivers by points: if/else 98, boolean chains 28, loops 6, ternaries 2 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7533}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda95bed33d30daed700937f0ef1828b67c6c004361232c96f9c8ca46c513be1"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.acontinue_run (cognitive 134): Workflow.acontinue_run has cognitive complexity 134 (threshold 15). Drivers by points: if/else 98, boolean chains 28, loops 6, ternaries 2 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7548}}}],"partialFingerprints":{"codehealthFindingId/v1":"86bea5781c73e32589a873243dea5fdf3244e0537c6c3f7c86c3b0d28bfdbb2b"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.acontinue_run (cognitive 134): Workflow.acontinue_run has cognitive complexity 134 (threshold 15). Drivers by points: if/else 98, boolean chains 28, loops 6, ternaries 2 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":7562}}}],"partialFingerprints":{"codehealthFindingId/v1":"46f1cf2d9bc0aa58f226c489820c3b59af4b74a15cc8c7913ff1ec1afb043122"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_system_message (cognitive 133): _messages.get_system_message has cognitive complexity 133 (threshold 15). Drivers by points: if/else 88, loops 17, boolean chains 13, ternaries 12, error handling 3 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"60825ab51a267a63a9b651507869b44fd71d002710bf0152c4c36f60e9b87f7a"}},{"ruleId":"D2","level":"warning","message":{"text":"_storage.to_dict (cognitive 133): _storage.to_dict has cognitive complexity 133 (threshold 15). Drivers by points: if/else 120, boolean chains 5, error handling 3, ternaries 3, loops 2 (nesting depth added 17). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"91545b3cdceb52559ab5832c1e1393aa0ab330a737fe36172b6c7573603eedcc"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.continue_run (cognitive 125): Workflow.continue_run has cognitive complexity 125 (threshold 15). Drivers by points: if/else 92, boolean chains 25, loops 6, ternaries 2 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5546}}}],"partialFingerprints":{"codehealthFindingId/v1":"faad9de589afd33dfe38158390d467c0f66f81c5c6dcfe2d44444831c991a3b7"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.continue_run (cognitive 125): Workflow.continue_run has cognitive complexity 125 (threshold 15). Drivers by points: if/else 92, boolean chains 25, loops 6, ternaries 2 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5558}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9fe8c7e0d3d3322998947a018b31ebf3adf440b4fdcb4c649038833e32887b6"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.continue_run (cognitive 125): Workflow.continue_run has cognitive complexity 125 (threshold 15). Drivers by points: if/else 92, boolean chains 25, loops 6, ternaries 2 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5569}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e4aa29e938465a34aa13336837d426342d2f61561e5410e5caa4d9fa43300e"}},{"ruleId":"D2","level":"warning","message":{"text":"trace_to_database.run_trace_demo (cognitive 123): trace_to_database.run_trace_demo has cognitive complexity 123 (threshold 15). Drivers by points: if/else 92, ternaries 11, boolean chains 10, loops 9, error handling 1 (nesting depth added 80). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/observability/trace_to_database.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fd9fd099b8e38ce6d88772b5d2c977ac14bc8b2d5b6a2934f59d4bdb2366811"}},{"ruleId":"D2","level":"warning","message":{"text":"Claude._parse_provider_response (cognitive 123): Claude._parse_provider_response has cognitive complexity 123 (threshold 15). Drivers by points: if/else 79, error handling 18, loops 17, boolean chains 9 (nesting depth added 80). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da522338040a17b64316eb4a4d0b7b5c228eddbf20bd9a401bfe26697176a8a"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsResources.create_resources (cognitive 123): AwsResources.create_resources has cognitive complexity 123 (threshold 15). Drivers by points: if/else 83, loops 33, boolean chains 5, error handling 2 (nesting depth added 76). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"1742795932714d870095fb539b9fd293d1c3f7ab692666bf0dc41cb70281b896"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerResources.create_resources (cognitive 122): DockerResources.create_resources has cognitive complexity 122 (threshold 15). Drivers by points: if/else 82, loops 33, boolean chains 5, error handling 2 (nesting depth added 76). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"59ead5b6326c7027589f2fbe53f397683bd21adc134b5f3f89e8b18c3cb1f2b3"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.continue_run_dispatch (cognitive 119): _run.continue_run_dispatch has cognitive complexity 119 (threshold 15). Drivers by points: if/else 67, boolean chains 35, ternaries 9, error handling 5, loops 3 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6356}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b63ce36538fe9fde7f48ce9ff5a08c538c7260987e17dcf6028b1f2ff1dd61"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun_tasks_stream (cognitive 115): _run._arun_tasks_stream has cognitive complexity 115 (threshold 15). Drivers by points: if/else 80, loops 20, error handling 12, boolean chains 3 (nesting depth added 54). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2415}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4160201495c0563c5b833e1b9ad87a5751fa79f919443582df11884967f42d5"}},{"ruleId":"D2","level":"warning","message":{"text":"Claude._parse_provider_response_delta (cognitive 112): Claude._parse_provider_response_delta has cognitive complexity 112 (threshold 15). Drivers by points: if/else 73, loops 15, error handling 13, boolean chains 11 (nesting depth added 67). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"fed79c6b5dfed0e723ec7e4cb6b30580f345c85cb8ca21c49f2f95ff74a38e72"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.aresponse_stream (cognitive 109): Model.aresponse_stream has cognitive complexity 109 (threshold 15). Drivers by points: if/else 58, ternaries 20, boolean chains 14, loops 13, error handling 4 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1641}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1dd8f594108863488cfc7de9d94cb52d89db09c53ae1d32facca9997406f2f9"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run_stream (cognitive 109): _run._run_stream has cognitive complexity 109 (threshold 15). Drivers by points: if/else 73, error handling 20, loops 14, boolean chains 2 (nesting depth added 64). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1396}}}],"partialFingerprints":{"codehealthFindingId/v1":"d98a7ffd0f06c396a812fc049c0995a2cfb6f393a58345d72f0d8ab420c70e9a"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.response_stream (cognitive 108): Model.response_stream has cognitive complexity 108 (threshold 15). Drivers by points: if/else 58, ternaries 20, boolean chains 13, loops 13, error handling 4 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b95f38e0a7481f08275e53246498cbf7175ea150da93da708571e07db1cccc5"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_sessions (cognitive 105): PostgresDb.upsert_sessions has cognitive complexity 105 (threshold 15). Drivers by points: if/else 83, loops 12, ternaries 9, error handling 1 (nesting depth added 60). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1186}}}],"partialFingerprints":{"codehealthFindingId/v1":"09644fd4de265e47695e09c7bbae24cb9913845e24f33e7d1b47893d65a14366"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsBedrock._format_messages (cognitive 105): AwsBedrock._format_messages has cognitive complexity 105 (threshold 15). Drivers by points: if/else 80, loops 17, error handling 5, boolean chains 3 (nesting depth added 73). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6d65b3570284a75a3b3c8fef62fc35c7768ad3d65797cfeafb815feb1491975"}},{"ruleId":"D2","level":"warning","message":{"text":"SecurityGroup.add_inbound_rules (cognitive 105): SecurityGroup.add_inbound_rules has cognitive complexity 105 (threshold 15). Drivers by points: if/else 78, error handling 18, boolean chains 7, loops 2 (nesting depth added 66). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/security_group.py"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"15dc92c527f90f5c681eba7b761e386156b221146df31a74c6524387abba20d0"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.print_response_stream (cognitive 103): agent.print_response_stream has cognitive complexity 103 (threshold 15). Drivers by points: if/else 72, error handling 18, boolean chains 12, loops 1 (nesting depth added 59). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d55b213cc8bdbaa9b7344d67a3aa99a6f9ebd309eb7a527676933aeaf89a94a"}},{"ruleId":"D2","level":"warning","message":{"text":"gemini.convert_schema (cognitive 99): gemini.convert_schema has cognitive complexity 99 (threshold 15). Drivers by points: if/else 76, boolean chains 8, ternaries 8, loops 7 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/gemini.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"7af1c0a1c644fc6f8a27c827cdf36ea61f4b35c98eec502446e93c4046f83053"}},{"ruleId":"D2","level":"warning","message":{"text":"Loop.execute_stream (cognitive 99): Loop.execute_stream has cognitive complexity 99 (threshold 15). Drivers by points: if/else 51, boolean chains 24, loops 15, ternaries 9 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5cace971b4b39ee8752f1647a7e5984728559c273768bd5fd11bdeec9aa3f27"}},{"ruleId":"D2","level":"warning","message":{"text":"Loop.aexecute_stream (cognitive 99): Loop.aexecute_stream has cognitive complexity 99 (threshold 15). Drivers by points: if/else 51, boolean chains 24, loops 15, ternaries 9 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":977}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd087a55a957c0396c203867536b6eee73f3d3ff33327612301fa8fde5bb5c3d"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._continue_run_stream (cognitive 95): _run._continue_run_stream has cognitive complexity 95 (threshold 15). Drivers by points: if/else 64, error handling 17, loops 13, boolean chains 1 (nesting depth added 58). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7266}}}],"partialFingerprints":{"codehealthFindingId/v1":"3651598a74b08ecb0df4814d320be568932fa07c595b4fa847c8c2bb78c1120f"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun (cognitive 94): _run._arun has cognitive complexity 94 (threshold 15). Drivers by points: if/else 56, error handling 20, boolean chains 7, loops 7, ternaries 4 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1475}}}],"partialFingerprints":{"codehealthFindingId/v1":"d88151b370b4437819441182550afb67ff8ce38b8967725ae4602d399a3f5d86"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseRunOutputEvent.to_dict (cognitive 94): BaseRunOutputEvent.to_dict has cognitive complexity 94 (threshold 15). Drivers by points: if/else 56, boolean chains 24, loops 10, ternaries 4 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/base.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"07743847c5f2d32d528dee95211193d745348bb6b3fdf8e4c52105987afe5de2"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamSession.get_messages (cognitive 94): TeamSession.get_messages has cognitive complexity 94 (threshold 15). Drivers by points: if/else 65, loops 18, boolean chains 11 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/team.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd208d67dfc07816439b033273ba3f675a492bd15d990f9c37d1fa57d61e55d1"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.aprint_response_stream (cognitive 94): agent.aprint_response_stream has cognitive complexity 94 (threshold 15). Drivers by points: if/else 66, error handling 15, boolean chains 12, loops 1 (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd83fbb7c65b0cf689c55a9329e283b6b61ae15408574091e72ef552e88d9208"}},{"ruleId":"D2","level":"warning","message":{"text":"prompts.get_json_output_prompt (cognitive 94): prompts.get_json_output_prompt has cognitive complexity 94 (threshold 15). Drivers by points: if/else 74, loops 18, boolean chains 2 (nesting depth added 72). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/prompts.py"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"4383c94a91cc760379c0a3a2be94a317e8ec5136924a4ef90b884cc138bfdfca"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.continue_run_dispatch (cognitive 93): _run.continue_run_dispatch has cognitive complexity 93 (threshold 15). Drivers by points: if/else 55, boolean chains 19, loops 8, ternaries 7, error handling 4 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3251}}}],"partialFingerprints":{"codehealthFindingId/v1":"faeeb72c34cb6f00fb903d4bb9b1cbc932a60d6aa5678a50f137a75443a38598"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run_tasks_stream (cognitive 93): _run._run_tasks_stream has cognitive complexity 93 (threshold 15). Drivers by points: if/else 65, error handling 13, loops 13, boolean chains 2 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e9cd81b825027518c5b11665bb1335b0a5d5f885d70e0a51c99d9dffe26391"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.run_function_call (cognitive 92): Model.run_function_call has cognitive complexity 92 (threshold 15). Drivers by points: if/else 71, boolean chains 9, error handling 7, ternaries 3, loops 2 (nesting depth added 50). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2133}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e017cde8803012b129a6d7297c5664161f03f9121693de6225359be2be6c18"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition.execute_stream (cognitive 92): Condition.execute_stream has cognitive complexity 92 (threshold 15). Drivers by points: if/else 50, boolean chains 30, ternaries 5, error handling 4, loops 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8614fdba3519efa544755caf58bf46159bfc5b2d7b81e645332dbfa1ebaef3f"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition.aexecute_stream (cognitive 92): Condition.aexecute_stream has cognitive complexity 92 (threshold 15). Drivers by points: if/else 50, boolean chains 30, ternaries 5, error handling 4, loops 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cecc4046583f450f9c0be2665a083cd49ced9863b9a26a82577dc88960f6bde"}},{"ruleId":"D2","level":"warning","message":{"text":"ReasoningManager.stream_native_reasoning (cognitive 91): ReasoningManager.stream_native_reasoning has cognitive complexity 91 (threshold 15). Drivers by points: if/else 75, loops 16 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f57b67cd85d9898562b9d7fd91bc3d9c70f28f8fc9086ba07c0c0163019fdfe"}},{"ruleId":"D2","level":"warning","message":{"text":"ReasoningManager.astream_native_reasoning (cognitive 91): ReasoningManager.astream_native_reasoning has cognitive complexity 91 (threshold 15). Drivers by points: if/else 75, loops 16 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":570}}}],"partialFingerprints":{"codehealthFindingId/v1":"d58930362588d5c1b0c5b6b4ff0951a3c2ea92ed30cdb50d325ba79dc017b001"}},{"ruleId":"D2","level":"warning","message":{"text":"SecurityGroup.add_outbound_rules (cognitive 91): SecurityGroup.add_outbound_rules has cognitive complexity 91 (threshold 15). Drivers by points: if/else 65, error handling 18, boolean chains 6, loops 2 (nesting depth added 56). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/security_group.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8de328c1ee4c6ba793e0fca0efcfbc849d0985b2b850ac917677b3209de718"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsResources.delete_resources (cognitive 91): AwsResources.delete_resources has cognitive complexity 91 (threshold 15). Drivers by points: if/else 61, loops 23, boolean chains 5, error handling 2 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdd62a6a2b49dd7cd3390b6b4b0c9bd5370c98ce93d0040001b6bab729342ae9"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerResources.delete_resources (cognitive 88): DockerResources.delete_resources has cognitive complexity 88 (threshold 15). Drivers by points: if/else 58, loops 23, boolean chains 5, error handling 2 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9456e0938f37356a651c4352346f4d674ed5efea3bb595c73bffa6a7142267e"}},{"ruleId":"D2","level":"warning","message":{"text":"connect._connect (cognitive 88): connect._connect has cognitive complexity 88 (threshold 15). Drivers by points: if/else 45, boolean chains 18, ternaries 17, error handling 6, loops 2 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2607f1a961accf4cecbfc311cae88c1cf569735f3dd892463fb186abfdd0b24"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.parse_tools (cognitive 87): _tools.parse_tools has cognitive complexity 87 (threshold 15). Drivers by points: if/else 60, ternaries 11, boolean chains 9, loops 4, error handling 3 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"076e25edbbbb25b5939791343b3595013d775f72863dc227975f23731cd9044b"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._continue_run_stream (cognitive 86): _run._continue_run_stream has cognitive complexity 86 (threshold 15). Drivers by points: if/else 56, error handling 17, loops 9, boolean chains 4 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3809}}}],"partialFingerprints":{"codehealthFindingId/v1":"af944247c8f4e634b65636b96a174e8e6f0a01c216ed339dcfef77e3344c6202"}},{"ruleId":"D2","level":"warning","message":{"text":"Message.from_dict (cognitive 86): Message.from_dict has cognitive complexity 86 (threshold 15). Drivers by points: if/else 64, boolean chains 14, loops 8 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c3907bb8f9a78a42ada95efedc02c79ab4d0f39b7d6c0a522804750a438828"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleToolkit._resolve_creds (cognitive 86): GoogleToolkit._resolve_creds has cognitive complexity 86 (threshold 15). Drivers by points: if/else 58, boolean chains 16, error handling 12 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/base.py"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c630316474eb12e683d1a6751f82729e5efd833375c56f2625159901064f103"}},{"ruleId":"D2","level":"warning","message":{"text":"message.reformat_tool_call_ids (cognitive 84): message.reformat_tool_call_ids has cognitive complexity 84 (threshold 15). Drivers by points: if/else 55, boolean chains 10, ternaries 10, loops 9 (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"935a1281920b9dd5a354cf66d91636a437e0a6535f64aff31ddf69243e794a43"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsResources.update_resources (cognitive 84): AwsResources.update_resources has cognitive complexity 84 (threshold 15). Drivers by points: if/else 57, loops 20, boolean chains 5, error handling 2 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf429185eeaa1d937d3878ddd85a18332d5e033c4f11cc42e3efdf66ff90eb1"}},{"ruleId":"D2","level":"warning","message":{"text":"ClaudeAgent._arun_adapter_stream (cognitive 83): ClaudeAgent._arun_adapter_stream has cognitive complexity 83 (threshold 15). Drivers by points: if/else 53, ternaries 13, boolean chains 9, loops 8 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/claude/agent.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9fc4816ef3d2551402ef375de98bc429e5dfea2384f19aa610e1dc93eb29858"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.aget_system_message (cognitive 83): _messages.aget_system_message has cognitive complexity 83 (threshold 15). Drivers by points: if/else 58, ternaries 13, boolean chains 6, error handling 3, loops 3 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"513333b71216dfe5bd46dddfe84bd992a218fb5dbd165986a86a55f9aa247e17"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerResources.update_resources (cognitive 83): DockerResources.update_resources has cognitive complexity 83 (threshold 15). Drivers by points: if/else 56, loops 20, boolean chains 5, error handling 2 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"d457cb3a7d97af790f23a07ecf9c6afa0acd2cffde29052805d881e3fd61ae70"}},{"ruleId":"D2","level":"warning","message":{"text":"ReliabilityEval._evaluate (cognitive 82): ReliabilityEval._evaluate has cognitive complexity 82 (threshold 15). Drivers by points: if/else 53, loops 13, boolean chains 9, ternaries 7 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/reliability.py"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fb561babe1747c76e590eeedcd9e7429033ef182b1817bb6f1544fb830d031d"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._build_input (cognitive 82): GeminiInteractions._build_input has cognitive complexity 82 (threshold 15). Drivers by points: if/else 51, loops 21, error handling 6, boolean chains 4 (nesting depth added 56). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"b26916393da244ac36ca7b2e55266d5fba3dd73a6da5fecbfe497134caf5ce98"}},{"ruleId":"D2","level":"warning","message":{"text":"Message.log (cognitive 82): Message.log has cognitive complexity 82 (threshold 15). Drivers by points: if/else 50, boolean chains 14, ternaries 11, error handling 5, loops 2 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cc2ac1aa73a34be6c0e88184d6adba6514acec0e3d102b1578d4f00be42ca0b"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses._format_messages (cognitive 82): OpenAIResponses._format_messages has cognitive complexity 82 (threshold 15). Drivers by points: if/else 57, boolean chains 12, loops 10, ternaries 3 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"64af69541e897d49be4176732603ae2438d13d7612199670062f73e790467e7b"}},{"ruleId":"D2","level":"warning","message":{"text":"router.handle_workflow_subscription (cognitive 82): router.handle_workflow_subscription has cognitive complexity 82 (threshold 15). Drivers by points: if/else 37, ternaries 25, loops 10, error handling 6, boolean chains 4 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f27ca1dacfaefcef03af8242b519f23082049732e3af9ebdb25d27e7d9e4f3"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_system_message (cognitive 82): _messages.get_system_message has cognitive complexity 82 (threshold 15). Drivers by points: if/else 57, ternaries 13, boolean chains 6, error handling 3, loops 3 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"62c79a67e2fc9d5a15670b60e9f4badeffac50d5df3c91ec286c90f96c82b089"}},{"ruleId":"D2","level":"warning","message":{"text":"connect._connect_one (cognitive 82): connect._connect_one has cognitive complexity 82 (threshold 15). Drivers by points: if/else 62, boolean chains 17, ternaries 3 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"25390d0ed477b46af189aec8b2fdaa140a9f25885c33240f5862d70d760aaea6"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat._parse_provider_response_delta (cognitive 80): OpenAIChat._parse_provider_response_delta has cognitive complexity 80 (threshold 15). Drivers by points: if/else 59, boolean chains 8, ternaries 5, error handling 4, loops 4 (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"f417398d807e40e1f05bdcf15b0642aa5568c17e41f53214e67dd5e1e789a88b"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_user_message (cognitive 79): _messages.get_user_message has cognitive complexity 79 (threshold 15). Drivers by points: ternaries 40, if/else 27, error handling 7, boolean chains 5 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e704ebbaab4172c33775de0745c406af3f88b063441df4cc48daf4329050121"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.aget_user_message (cognitive 79): _messages.aget_user_message has cognitive complexity 79 (threshold 15). Drivers by points: ternaries 40, if/else 27, error handling 7, boolean chains 5 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1033}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c4795ee0f4acbe9849d963e6275545b5dd6422e3ccbcdbb6877665240ac407"}},{"ruleId":"D2","level":"warning","message":{"text":"_storage.from_dict (cognitive 79): _storage.from_dict has cognitive complexity 79 (threshold 15). Drivers by points: if/else 43, ternaries 24, boolean chains 10, loops 2 (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd11a1742e33fac5d73df638e36a920ba220c2177ebac26f3cc274d47a30f9ba"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run (cognitive 78): _run._run has cognitive complexity 78 (threshold 15). Drivers by points: if/else 47, error handling 20, boolean chains 5, ternaries 4, loops 2 (nesting depth added 41). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef17e442941b21d794ee52d2620e5aca799c22a818134653687febfa9f090d41"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb._get_collection (cognitive 77): AsyncMongoDb._get_collection has cognitive complexity 77 (threshold 15). Drivers by points: if/else 66, boolean chains 11 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e6cd61f5bfafe5e3474a8a4009c380a09a3520f505492006b819e9293bc502"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.upsert_sessions (cognitive 77): MySQLDb.upsert_sessions has cognitive complexity 77 (threshold 15). Drivers by points: if/else 51, loops 16, ternaries 9, error handling 1 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"905737d42c1fa5f662fcb958e7179332a45146172159a6287cd04fc10e0d07cc"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.upsert_sessions (cognitive 77): AsyncSqliteDb.upsert_sessions has cognitive complexity 77 (threshold 15). Drivers by points: if/else 51, loops 16, ternaries 9, error handling 1 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e16b133f9c543e25f88aaa383b09a50a3d1d481a862b1a521891457efdc025c"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.upsert_sessions (cognitive 77): SqliteDb.upsert_sessions has cognitive complexity 77 (threshold 15). Drivers by points: if/else 51, loops 16, ternaries 9, error handling 1 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"6287e686831a9d3d6d43d30bcd0680371f72b8c0ba8e4ca61cfcd773e892af9b"}},{"ruleId":"D2","level":"warning","message":{"text":"router._resume_stream_generator (cognitive 77): router._resume_stream_generator has cognitive complexity 77 (threshold 15). Drivers by points: if/else 40, loops 16, ternaries 11, boolean chains 5, error handling 5 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"610d04dbabd8e098172cc5bb5f33db2e1b0c7f8d7098b520392e6fe357d005aa"}},{"ruleId":"D2","level":"warning","message":{"text":"router._resume_stream_generator (cognitive 77): router._resume_stream_generator has cognitive complexity 77 (threshold 15). Drivers by points: if/else 40, loops 16, ternaries 11, boolean chains 5, error handling 5 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"618a5ee4abb47c46c79f13c146888cc5dce53ade8396cc7c45a843d77e602532"}},{"ruleId":"D2","level":"warning","message":{"text":"_response._convert_response_to_structured_format (cognitive 77): _response._convert_response_to_structured_format has cognitive complexity 77 (threshold 15). Drivers by points: if/else 67, error handling 8, boolean chains 1, ternaries 1 (nesting depth added 50). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1688}}}],"partialFingerprints":{"codehealthFindingId/v1":"28d7b839affeade3afc7e7ae8e89316bc91c9267bd24dee25c6ecb949dab4133"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentSession.get_messages (cognitive 76): AgentSession.get_messages has cognitive complexity 76 (threshold 15). Drivers by points: if/else 56, loops 12, boolean chains 8 (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/agent.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"2534b1074b7106b846e43fad12a85d1bfffb7fb24034bc29084bed16843359c5"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._route_requirements_to_members_stream (cognitive 75): _run._route_requirements_to_members_stream has cognitive complexity 75 (threshold 15). Drivers by points: if/else 45, loops 14, boolean chains 12, ternaries 4 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5495}}}],"partialFingerprints":{"codehealthFindingId/v1":"333b193f3113bfbf49ae4cd14b9cbdc209a0e5ee86de2b7834da13583eb832b3"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._aroute_requirements_to_members_stream (cognitive 75): _run._aroute_requirements_to_members_stream has cognitive complexity 75 (threshold 15). Drivers by points: if/else 45, loops 14, boolean chains 12, ternaries 4 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5739}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff42d424418fe2d6c40c3fa6347a3af0463a38ba96759efd6a75e9c099a2720"}},{"ruleId":"D2","level":"warning","message":{"text":"FakeAgentOS.handler (cognitive 75): FakeAgentOS.handler has cognitive complexity 75 (threshold 15). Drivers by points: if/else 54, ternaries 11, boolean chains 8, loops 2 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/tests/conftest.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"59aa7cca1d20dc24d011cbe85d79a90e9f3a322f854df6389bd7bd1e5d8c222c"}},{"ruleId":"D2","level":"warning","message":{"text":"router._resume_stream_generator (cognitive 74): router._resume_stream_generator has cognitive complexity 74 (threshold 15). Drivers by points: if/else 38, loops 16, ternaries 11, error handling 5, boolean chains 4 (nesting depth added 43). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"da038bdfaa60d0f323b0e10d99eb80b86c5d218268e19b02f29382db81d2d794"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._get_request_kwargs (cognitive 73): GeminiInteractions._get_request_kwargs has cognitive complexity 73 (threshold 15). Drivers by points: if/else 61, ternaries 6, boolean chains 3, loops 3 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3a27da57cb5d14206d10ae2b7e27e4c180105a2b9b371a7965c47393d6e9efa"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._get_user_message (cognitive 73): _messages._get_user_message has cognitive complexity 73 (threshold 15). Drivers by points: if/else 30, ternaries 30, error handling 7, boolean chains 6 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1120}}}],"partialFingerprints":{"codehealthFindingId/v1":"e092325d57438726abd72cde8ac13bab88e6996ca32d25d494e2d1f8c0c0058a"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._aget_user_message (cognitive 73): _messages._aget_user_message has cognitive complexity 73 (threshold 15). Drivers by points: if/else 30, ternaries 30, error handling 7, boolean chains 6 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1278}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c9a6e530000d10ae42fd39202897ea5cf7f913b87847e54f66bc4b1b23e1b7b"}},{"ruleId":"D2","level":"warning","message":{"text":"Function.process_entrypoint (cognitive 73): Function.process_entrypoint has cognitive complexity 73 (threshold 15). Drivers by points: if/else 50, boolean chains 16, loops 4, error handling 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fc299742f2a9b738621c21ab70362869faf93357da5116b67db43ae87723391"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.build_panels (cognitive 73): agent.build_panels has cognitive complexity 73 (threshold 15). Drivers by points: if/else 47, boolean chains 10, error handling 9, loops 7 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":787}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3f3d49007894c7107b8167481c0f1d643210531d2cac040104eadeebafe2040"}},{"ruleId":"D2","level":"warning","message":{"text":"DbInstance._create (cognitive 73): DbInstance._create has cognitive complexity 73 (threshold 15). Drivers by points: if/else 68, boolean chains 2, loops 2, error handling 1 (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46f08f16e01833b7e61358f70c55de96e15252d2bdbff4934f17996d4e47b62"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.upsert_sessions (cognitive 72): AsyncMySQLDb.upsert_sessions has cognitive complexity 72 (threshold 15). Drivers by points: if/else 46, loops 16, ternaries 9, error handling 1 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":900}}}],"partialFingerprints":{"codehealthFindingId/v1":"244a972130093616497103ddbb485c3d5b8c2001d9287636e3b9fda14d4685ee"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses._parse_provider_response (cognitive 72): OpenAIResponses._parse_provider_response has cognitive complexity 72 (threshold 15). Drivers by points: if/else 54, loops 13, boolean chains 5 (nesting depth added 46). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1162}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f05add0be13c7e49e81c7b047c55392744ba1752065ca785e48e1b6a66d4e01"}},{"ruleId":"D2","level":"warning","message":{"text":"streamlit._load_session (cognitive 72): streamlit._load_session has cognitive complexity 72 (threshold 15). Drivers by points: if/else 51, loops 8, ternaries 6, boolean chains 5, error handling 2 (nesting depth added 49). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/streamlit.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"c560eaed0a4164bc73ce50c14257a1cc527847b2ea98e622543e1b9c987a910c"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun (cognitive 71): _run._arun has cognitive complexity 71 (threshold 15). Drivers by points: if/else 41, error handling 18, loops 7, boolean chains 3, ternaries 2 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2953}}}],"partialFingerprints":{"codehealthFindingId/v1":"c12e78d6fd7c132fadb01506b79a717091fa564a5698118c7a1231f561f10968"}},{"ruleId":"D2","level":"warning","message":{"text":"DbInstance._update (cognitive 71): DbInstance._update has cognitive complexity 71 (threshold 15). Drivers by points: if/else 63, boolean chains 4, loops 3, error handling 1 (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b23bc7860791d92478253eaf079239165ebb54f02566515b858afe5469c6f7d"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_run_messages (cognitive 70): _messages.get_run_messages has cognitive complexity 70 (threshold 15). Drivers by points: if/else 36, error handling 12, boolean chains 9, loops 7, ternaries 6 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1203}}}],"partialFingerprints":{"codehealthFindingId/v1":"7509cb4caf10ae43f3d65192f5618add5951e641f2921348d6aefc760d31e27f"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.aget_run_messages (cognitive 70): _messages.aget_run_messages has cognitive complexity 70 (threshold 15). Drivers by points: if/else 36, error handling 12, boolean chains 9, loops 7, ternaries 6 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1409}}}],"partialFingerprints":{"codehealthFindingId/v1":"92679c979d79ae7f6fa55828b117bc0c471bb1935254f694a86d60869747aa19"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS.get_app (cognitive 70): AgentOS.get_app has cognitive complexity 70 (threshold 15). Drivers by points: if/else 45, boolean chains 10, error handling 7, ternaries 5, loops 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa225e173cf032bd9905e4b42a31ae8b07e887f2def98560fcaed70eb3c8bc5"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowSession.get_messages_from_team_runs (cognitive 70): WorkflowSession.get_messages_from_team_runs has cognitive complexity 70 (threshold 15). Drivers by points: if/else 52, loops 12, boolean chains 6 (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"069420cd565372f5aae6947d632afdf7496240c4a1df7069e399e1d8cece2005"}},{"ruleId":"D2","level":"warning","message":{"text":"streamlit.session_selector_widget (cognitive 70): streamlit.session_selector_widget has cognitive complexity 70 (threshold 15). Drivers by points: if/else 51, boolean chains 9, error handling 6, loops 2, ternaries 2 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/streamlit.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c98e1e5fa4e73fb4eb0d4690435dceba6c55713d5937b93628f003812c40b1b"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.upsert_sessions (cognitive 69): SingleStoreDb.upsert_sessions has cognitive complexity 69 (threshold 15). Drivers by points: if/else 43, loops 16, ternaries 9, error handling 1 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"b61562cc5223026faba1d7c0d6f6c8b3ec6099d38bc9c187ccdf4eb8775f261e"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._get_json_output_prompt (cognitive 69): _messages._get_json_output_prompt has cognitive complexity 69 (threshold 15). Drivers by points: if/else 51, loops 17, boolean chains 1 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1556}}}],"partialFingerprints":{"codehealthFindingId/v1":"4195e15a588373e257a045b2cfbba8c4dee7bd527fd0e3cc052205ec89286434"}},{"ruleId":"D2","level":"warning","message":{"text":"message.get_text_from_message (cognitive 68): message.get_text_from_message has cognitive complexity 68 (threshold 15). Drivers by points: if/else 53, loops 9, boolean chains 6 (nesting depth added 41). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"df046a5f27a2ae518c365f6ea9e3655d7c8230f1b1b1f64191d4bf699eb452af"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerImage.build_image (cognitive 68): DockerImage.build_image has cognitive complexity 68 (threshold 15). Drivers by points: if/else 46, loops 11, boolean chains 7, error handling 4 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resource/image.py"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdd2c128ba6ae019e4092c25fc2cdc0aea96defcc71ba4d0f3bdf0bf5578cb98"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowSession.get_messages_from_agent_runs (cognitive 67): WorkflowSession.get_messages_from_agent_runs has cognitive complexity 67 (threshold 15). Drivers by points: if/else 49, loops 12, boolean chains 6 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf6cfd87e4ebd7b0d559967d4980c0795e7f0d518567f98eacf11d624a789c8"}},{"ruleId":"D2","level":"warning","message":{"text":"DbCluster._create (cognitive 67): DbCluster._create has cognitive complexity 67 (threshold 15). Drivers by points: if/else 62, boolean chains 2, loops 2, error handling 1 (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb69d96cd8703c96590713892c837cc18880dd94d25aeb0c20e9dbe7a98b2be9"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb._get_collection (cognitive 66): MongoDb._get_collection has cognitive complexity 66 (threshold 15). Drivers by points: if/else 66 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"f11b658920dca99b990bcac94a32716b6802e3c2199c1b880a0f68dca40d3746"}},{"ruleId":"D2","level":"warning","message":{"text":"disconnect._disconnect (cognitive 66): disconnect._disconnect has cognitive complexity 66 (threshold 15). Drivers by points: if/else 32, error handling 12, ternaries 9, boolean chains 7, loops 6 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/disconnect.py"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"106617ed3c5493fe04c6e1d2b40de22c4e5e374b210a58cf903d9901461c1db1"}},{"ruleId":"D2","level":"warning","message":{"text":"RunOutput.to_dict (cognitive 65): RunOutput.to_dict has cognitive complexity 65 (threshold 15). Drivers by points: if/else 47, loops 10, ternaries 6, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"34048486035f920fc102b61c34f201e4749e3d5d24a522b898eb051e73807634"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteLLM._format_messages (cognitive 64): LiteLLM._format_messages has cognitive complexity 64 (threshold 15). Drivers by points: if/else 42, boolean chains 11, ternaries 7, loops 4 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"f69efe4d408effcc687a2559a6fd55b679c863da8665ab336dc7b32fe740e08b"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_request_kwargs (cognitive 64): utils.get_request_kwargs has cognitive complexity 64 (threshold 15). Drivers by points: if/else 37, error handling 16, loops 6, boolean chains 5 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"51605d27072c841d18d168844c4494fe21f126916e554e45958b644f09e42060"}},{"ruleId":"D2","level":"warning","message":{"text":"connect._report (cognitive 64): connect._report has cognitive complexity 64 (threshold 15). Drivers by points: if/else 33, ternaries 16, loops 9, boolean chains 6 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff30ad4080a70b8424d9830a77feec447129a90164d317d7d5cdc5c1879ec8d9"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.upsert_sessions (cognitive 63): ValkeyDb.upsert_sessions has cognitive complexity 63 (threshold 15). Drivers by points: if/else 28, ternaries 20, boolean chains 7, loops 7, error handling 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"40652a11f25a7230eef68832d32ec64b4fbd1d2d4187560f0c64e8efc7792799"}},{"ruleId":"D2","level":"warning","message":{"text":"AuthMiddleware.dispatch (cognitive 63): AuthMiddleware.dispatch has cognitive complexity 63 (threshold 15). Drivers by points: if/else 46, boolean chains 7, error handling 4, loops 4, ternaries 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"2557400865ba42d1d82e6b76e6f644cd6c93e15c8d2282a67ac937d506f86ab4"}},{"ruleId":"D2","level":"warning","message":{"text":"json_schema.get_json_schema_for_arg (cognitive 63): json_schema.get_json_schema_for_arg has cognitive complexity 63 (threshold 15). Drivers by points: if/else 37, ternaries 12, boolean chains 5, loops 5, error handling 4 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/json_schema.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"80dd4f7d296e4cf826ee46e76a300227d18343d6390a92c55ff57b04f425f547"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowRunOutput.to_dict (cognitive 62): WorkflowRunOutput.to_dict has cognitive complexity 62 (threshold 15). Drivers by points: ternaries 30, if/else 28, loops 3, boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"5501b95ba12c333ccb1cf12cb27e12775c12ca4a23d967787557df99b33f56ad"}},{"ruleId":"D2","level":"warning","message":{"text":"WebsiteReader.crawl (cognitive 61): WebsiteReader.crawl has cognitive complexity 61 (threshold 15). Drivers by points: if/else 41, boolean chains 8, error handling 6, loops 3, ternaries 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40745a34f0b1d5a07fa89dcb00184856f7b8b98887d612a5eaa0ed850a03bee"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamResponse.from_team (cognitive 60): TeamResponse.from_team has cognitive complexity 60 (threshold 15). Drivers by points: if/else 23, ternaries 22, boolean chains 12, error handling 2, loops 1 (nesting depth added 8). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/schema.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"a596fcb820960e096181eb14b2ef4d2771a0657cd6a78097bd176092e1f149cd"}},{"ruleId":"D2","level":"warning","message":{"text":"RunInput.to_dict (cognitive 60): RunInput.to_dict has cognitive complexity 60 (threshold 15). Drivers by points: if/else 33, ternaries 24, loops 3 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e139b216a9e3b4951ec37c788204141c579ebd47194714120aaa2bd3c785813"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamRunInput.to_dict (cognitive 60): TeamRunInput.to_dict has cognitive complexity 60 (threshold 15). Drivers by points: if/else 33, ternaries 24, loops 3 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1745bec5dd82c0bcce61bf99053bbdaccab4ef411e0c4c81f5e1c041db71ceb"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._arun_tasks (cognitive 60): _run._arun_tasks has cognitive complexity 60 (threshold 15). Drivers by points: if/else 39, error handling 11, loops 6, boolean chains 2, ternaries 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":2059}}}],"partialFingerprints":{"codehealthFindingId/v1":"de9937f8c6eb419d5483b1d19a8163fb397af46cbbb6c0e5fa4d37eaa9ec806f"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._deep_copy_single_step (cognitive 60): Workflow._deep_copy_single_step has cognitive complexity 60 (threshold 15). Drivers by points: if/else 30, ternaries 25, error handling 3, loops 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10594}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da7e26728beb934a1c00a700d8dd97f8596c32d18f7ddacb8eff7e15d2bb22b"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aload_from_url (cognitive 59): Knowledge._aload_from_url has cognitive complexity 59 (threshold 15). Drivers by points: if/else 25, ternaries 11, boolean chains 10, error handling 10, loops 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1511}}}],"partialFingerprints":{"codehealthFindingId/v1":"e88613a278b2f4fa6438918ca5fc13499f47e8717bb6f8a6d01fff24f86ee185"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._load_from_url (cognitive 59): Knowledge._load_from_url has cognitive complexity 59 (threshold 15). Drivers by points: if/else 25, ternaries 11, boolean chains 10, error handling 10, loops 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1663}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9c15b30d0c1c96f0c6e5a204d8293bad6cf0ceaa94b7190ab75f4d3eda06c30"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._route_requirements_to_members (cognitive 59): _run._route_requirements_to_members has cognitive complexity 59 (threshold 15). Drivers by points: if/else 36, loops 12, boolean chains 7, ternaries 4 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5386}}}],"partialFingerprints":{"codehealthFindingId/v1":"165863a55879f07e251f9444c6e93a3ea7bda8e8212c8257cdcde46ac2ac886f"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._populate_stream_data (cognitive 58): Model._populate_stream_data has cognitive complexity 58 (threshold 15). Drivers by points: if/else 51, loops 4, boolean chains 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee7cb0e4d8f13644501368befb819489b0ca36e80afbfb61f3606a1a29e9008"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._auto_discover_databases (cognitive 58): AgentOS._auto_discover_databases has cognitive complexity 58 (threshold 15). Drivers by points: if/else 40, boolean chains 7, ternaries 6, loops 5 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1563}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b12ebb62369e6f6de668ec1db46d48168a4c1b65c3935814c04c22534def89"}},{"ruleId":"D2","level":"warning","message":{"text":"Workspace.list_files (cognitive 58): Workspace.list_files has cognitive complexity 58 (threshold 15). Drivers by points: if/else 30, error handling 13, loops 10, ternaries 4, boolean chains 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workspace.py"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"054ad7c870ee6fb6c10bb1ff9cf30719074eb6115ec9cf095665ff623664ae3d"}},{"ruleId":"D2","level":"warning","message":{"text":"DbCluster._update (cognitive 58): DbCluster._update has cognitive complexity 58 (threshold 15). Drivers by points: if/else 52, loops 3, boolean chains 2, error handling 1 (nesting depth added 7). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"052abe7fd3270744d554c051f8905722e9830fcae728cf0b8de991f09aef268d"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses._parse_provider_response_delta (cognitive 57): OpenAIResponses._parse_provider_response_delta has cognitive complexity 57 (threshold 15). Drivers by points: if/else 48, boolean chains 6, loops 3 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1258}}}],"partialFingerprints":{"codehealthFindingId/v1":"378fc4561ee8201bdc9efb0f8dbeb2a6fe500812a93c388f97b6ad8ee7a6c5c3"}},{"ruleId":"D2","level":"warning","message":{"text":"Model.run_function_calls (cognitive 56): Model.run_function_calls has cognitive complexity 56 (threshold 15). Drivers by points: if/else 37, loops 16, boolean chains 3 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2313}}}],"partialFingerprints":{"codehealthFindingId/v1":"2caeaa67f3b78d073a4ee2ec888a55f7987bf3cc6836775194cb5cd0cb99c10f"}},{"ruleId":"D2","level":"warning","message":{"text":"PgVector._async_embed_documents (cognitive 56): PgVector._async_embed_documents has cognitive complexity 56 (threshold 15). Drivers by points: if/else 35, loops 8, error handling 5, boolean chains 4, ternaries 4 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"71356c742582aa907a82fd64a165578c4350b8ad0aa2570b05ada973c316c712"}},{"ruleId":"D2","level":"warning","message":{"text":"Router.execute_stream (cognitive 56): Router.execute_stream has cognitive complexity 56 (threshold 15). Drivers by points: if/else 29, boolean chains 18, error handling 4, loops 3, ternaries 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83c08895cb25694a25e859c2928260b860ba4c62643e7f52f2fb2bb0d06c6a2"}},{"ruleId":"D2","level":"warning","message":{"text":"Router.aexecute_stream (cognitive 56): Router.aexecute_stream has cognitive complexity 56 (threshold 15). Drivers by points: if/else 29, boolean chains 18, error handling 4, loops 3, ternaries 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":1140}}}],"partialFingerprints":{"codehealthFindingId/v1":"5efc05e6c2345b928434964062d915bbcc1ba4a5116f6ff2406c40dbe1fbf858"}},{"ruleId":"D2","level":"warning","message":{"text":"infra_cli.up (cognitive 56): infra_cli.up has cognitive complexity 56 (threshold 15). Drivers by points: if/else 41, boolean chains 9, ternaries 4, loops 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"34138d184cfe207d52a9b3ec9f292b6760864b8680ba31b87e553c503f57f04e"}},{"ruleId":"D2","level":"warning","message":{"text":"infra_cli.down (cognitive 56): infra_cli.down has cognitive complexity 56 (threshold 15). Drivers by points: if/else 41, boolean chains 9, ternaries 4, loops 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab02e5e70c34634d83a7513ff708ecc875e9cb80bd3ebd82c862af3a2d909608"}},{"ruleId":"D2","level":"warning","message":{"text":"A2AClient._parse_stream_event (cognitive 55): A2AClient._parse_stream_event has cognitive complexity 55 (threshold 15). Drivers by points: if/else 28, loops 18, boolean chains 5, ternaries 4 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"8483379c54a57062b24430d5d2965c40b890af417f47f6725e942ba0ffd36d8d"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run (cognitive 55): _run._run has cognitive complexity 55 (threshold 15). Drivers by points: if/else 29, error handling 20, boolean chains 2, loops 2, ternaries 2 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"268cf8d7e9c823b038b0379bfbb9e01e41a200041cf8a024cdbbc3bf2b404a6d"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb._create_table (cognitive 54): PostgresDb._create_table has cognitive complexity 54 (threshold 15). Drivers by points: if/else 42, loops 7, error handling 3, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e975615e6677112ce35d7b04bc45b24f0d0e9822e5f275a64307d4f170795d4"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore.print (cognitive 54): EntityMemoryStore.print has cognitive complexity 54 (threshold 15). Drivers by points: if/else 33, loops 12, ternaries 7, boolean chains 2 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3580}}}],"partialFingerprints":{"codehealthFindingId/v1":"42cad3e0ed37c65fc6ae3236e92f959d629db8d7abd35c052001b4cca999d064"}},{"ruleId":"D2","level":"warning","message":{"text":"metrics.merge_background_metrics (cognitive 54): metrics.merge_background_metrics has cognitive complexity 54 (threshold 15). Drivers by points: if/else 35, loops 16, boolean chains 3 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cd271ccf101ca74f3bee72d1b623094691dadec91754a8b9ac9367d9ad3d73a"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentResponse.from_agent (cognitive 54): AgentResponse.from_agent has cognitive complexity 54 (threshold 15). Drivers by points: if/else 22, ternaries 20, boolean chains 9, error handling 3 (nesting depth added 8). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/schema.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb3b0b8b50a269ea365aada74a5bd2ad8c3dcf0f2231eb303277e2f29b96227d"}},{"ruleId":"D2","level":"warning","message":{"text":"PubmedTools.parse_details (cognitive 54): PubmedTools.parse_details has cognitive complexity 54 (threshold 15). Drivers by points: if/else 24, ternaries 18, loops 10, boolean chains 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/pubmed.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a7f62f280c9437325a806af35c32fd9d9ae3b8a8d22cffe78798cfc7f7fefa2"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsApp.build_resources (cognitive 54): AwsApp.build_resources has cognitive complexity 54 (threshold 15). Drivers by points: if/else 44, boolean chains 6, ternaries 4 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/app/base.py"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a649ee09e2cfd43d1ab71e3fdd75e60cd47e5d94b2537cd7ee27793e2ffb7d"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_sessions (cognitive 53): DynamoDb.get_sessions has cognitive complexity 53 (threshold 15). Drivers by points: if/else 40, boolean chains 5, loops 5, ternaries 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7b398310a0bf31aff098a11fd73e00bcf461bd2919b915237bdc2d3b3c4562"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb._create_table (cognitive 53): SqliteDb._create_table has cognitive complexity 53 (threshold 15). Drivers by points: if/else 41, loops 7, error handling 3, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"375630c405c9591ad55a0efe396953abb2e7d90d16b67eb5a836c061e221880a"}},{"ruleId":"D2","level":"warning","message":{"text":"Loop.execute (cognitive 53): Loop.execute has cognitive complexity 53 (threshold 15). Drivers by points: if/else 33, loops 12, ternaries 6, boolean chains 2 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6371b628a8ec87cb28f56c9c055c3665586526b73aea6f642b3789db6546484"}},{"ruleId":"D2","level":"warning","message":{"text":"Loop.aexecute (cognitive 53): Loop.aexecute has cognitive complexity 53 (threshold 15). Drivers by points: if/else 33, loops 12, ternaries 6, boolean chains 2 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbd606d782def872adabb907cd61ee840fe78ff4735b3cdcdb92ad631f33eb4c"}},{"ruleId":"D2","level":"warning","message":{"text":"Parallel.execute_stream (cognitive 53): Parallel.execute_stream has cognitive complexity 53 (threshold 15). Drivers by points: if/else 24, boolean chains 14, error handling 8, loops 7 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"820793930d18325530c91ac9295464fd632a18ebfa8c74173b9d569bfd1b75b0"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._arun_workflow_agent (cognitive 53): Workflow._arun_workflow_agent has cognitive complexity 53 (threshold 15). Drivers by points: if/else 39, loops 6, ternaries 6, boolean chains 2 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5359}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01b033114de0310d6b1a35ee332bab55824b06d0f94c464ac22c83607ca6d1a"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteLLM._parse_provider_response_delta (cognitive 52): LiteLLM._parse_provider_response_delta has cognitive complexity 52 (threshold 15). Drivers by points: if/else 35, boolean chains 8, ternaries 5, loops 4 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ee8d2b6cf41b66aa78435bbcd0fc648a2a78b634a2fa4647eab64ba352b93bb"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.collect_mcp_tools_from_workflow_step (cognitive 52): utils.collect_mcp_tools_from_workflow_step has cognitive complexity 52 (threshold 15). Drivers by points: if/else 34, loops 13, boolean chains 5 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1476}}}],"partialFingerprints":{"codehealthFindingId/v1":"2398eba5db4e3aaf360379d1824985088b7ac00f332c435cddfdbb160a25bc11"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamRunOutput.to_dict (cognitive 52): TeamRunOutput.to_dict has cognitive complexity 52 (threshold 15). Drivers by points: if/else 32, ternaries 16, boolean chains 2, loops 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa899987a2db08b562dc00068d501f77a5a01bfcc81828906f17df958d9168e"}},{"ruleId":"D2","level":"warning","message":{"text":"suite._run_case_body (cognitive 51): suite._run_case_body has cognitive complexity 51 (threshold 15). Drivers by points: if/else 27, error handling 10, boolean chains 9, ternaries 4, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf98c4014bbbc479197ebab2f23366be63714c6fe4ccdcab2b4065d325e8b059"}},{"ruleId":"D2","level":"warning","message":{"text":"input.extract_media (cognitive 51): input.extract_media has cognitive complexity 51 (threshold 15). Drivers by points: if/else 31, boolean chains 12, ternaries 5, loops 3 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/input.py"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"859bf9b6aa1d07b3da47f107b27611bbe2f5351ffae5a7f2a499163a582c0b86"}},{"ruleId":"D2","level":"warning","message":{"text":"Steps.execute_stream (cognitive 51): Steps.execute_stream has cognitive complexity 51 (threshold 15). Drivers by points: if/else 28, boolean chains 13, ternaries 5, loops 3, error handling 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"da853c782fe1ddd38cd0bdab013b8d2150f2a886c0b170d3960f22f5de64ea6b"}},{"ruleId":"D2","level":"warning","message":{"text":"Steps.aexecute_stream (cognitive 51): Steps.aexecute_stream has cognitive complexity 51 (threshold 15). Drivers by points: if/else 28, boolean chains 13, ternaries 5, loops 3, error handling 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"64ddfea9c28ea5297f237ce0f08cd3d9b3410b6c1f332df88fb003574d045085"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraConfig.get_resources (cognitive 51): InfraConfig.get_resources has cognitive complexity 51 (threshold 15). Drivers by points: if/else 36, loops 12, error handling 3 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/config.py"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"b553260ef6269c4ad76b2f32c24191a19d07ac9934309cb6ecb08ce9fd78f79b"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aload_from_path (cognitive 50): Knowledge._aload_from_path has cognitive complexity 50 (threshold 15). Drivers by points: if/else 36, boolean chains 4, error handling 4, ternaries 4, loops 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1341}}}],"partialFingerprints":{"codehealthFindingId/v1":"6298713fe173373f1b8a5df736852845a8f1aa10a43907bd5ecae292259a1711"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._load_from_path (cognitive 50): Knowledge._load_from_path has cognitive complexity 50 (threshold 15). Drivers by points: if/else 36, boolean chains 4, error handling 4, ternaries 4, loops 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"14e7d4e8eea22001b3777bde9bd8776f0f68703db2e79e8a836d9be44cae8bfd"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aload_from_content (cognitive 50): Knowledge._aload_from_content has cognitive complexity 50 (threshold 15). Drivers by points: if/else 42, boolean chains 5, ternaries 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1818}}}],"partialFingerprints":{"codehealthFindingId/v1":"0584c150862c6965357d45e50a16da7b9b64bfb8ef8fbcc4c9b27d0a2e919e7d"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._load_from_content (cognitive 50): Knowledge._load_from_content has cognitive complexity 50 (threshold 15). Drivers by points: if/else 42, boolean chains 5, ternaries 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1924}}}],"partialFingerprints":{"codehealthFindingId/v1":"570cd0e175f60f6e8c8d1761ba9e5d1d56f3ad7c030e9ea5cde74f7a81fd8895"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aprocess_lightrag_content (cognitive 50): Knowledge._aprocess_lightrag_content has cognitive complexity 50 (threshold 15). Drivers by points: if/else 35, boolean chains 9, error handling 4, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2630}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9992fdc4b4a16a5939652d658626f41037e4200b9aba1b4c6b632eadfac9a38"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._process_lightrag_content (cognitive 50): Knowledge._process_lightrag_content has cognitive complexity 50 (threshold 15). Drivers by points: if/else 35, boolean chains 9, error handling 4, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2787}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fb2d917eedca8033d092a0b0dacb7bc5c74d75e095a11ecb5f1fd70a1309a30"}},{"ruleId":"D2","level":"warning","message":{"text":"RunMetrics.__add__ (cognitive 50): RunMetrics.__add__ has cognitive complexity 50 (threshold 15). Drivers by points: if/else 30, loops 14, boolean chains 6 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a637aac9cae32cec6244744378e8af8e8db464cdc977cb34e6084c5d6083b1"}},{"ruleId":"D2","level":"warning","message":{"text":"_response._ahandle_model_response_stream (cognitive 50): _response._ahandle_model_response_stream has cognitive complexity 50 (threshold 15). Drivers by points: if/else 42, boolean chains 3, loops 3, ternaries 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1166}}}],"partialFingerprints":{"codehealthFindingId/v1":"bad82a580918ba8f8d08ac7f35e9c9b56a24abbc1441617a129be24d3c60a4f4"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._arun_workflow_agent_stream (cognitive 50): Workflow._arun_workflow_agent_stream has cognitive complexity 50 (threshold 15). Drivers by points: if/else 34, ternaries 13, boolean chains 2, loops 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":5166}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c55e771dba9f334014fed24c43b586c39cf2c30e3324d11532e55a25f02f6ec"}},{"ruleId":"D2","level":"warning","message":{"text":"WebsiteReader.async_crawl (cognitive 49): WebsiteReader.async_crawl has cognitive complexity 49 (threshold 15). Drivers by points: if/else 32, boolean chains 7, error handling 6, loops 3, ternaries 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f08bbccbee4891e320564cb4c3ab2ba3d26e2d764b8b98657966d343906e68b"}},{"ruleId":"D2","level":"warning","message":{"text":"RemoteDb.from_config (cognitive 49): RemoteDb.from_config has cognitive complexity 49 (threshold 15). Drivers by points: if/else 21, boolean chains 14, ternaries 14 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/remote/base.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"86fe943b4a122e87e1cd3df4db6479786201852c24a92994495553580c3b4e16"}},{"ruleId":"D2","level":"warning","message":{"text":"ScheduleExecutor.execute (cognitive 49): ScheduleExecutor.execute has cognitive complexity 49 (threshold 15). Drivers by points: if/else 28, error handling 13, boolean chains 6, loops 1, ternaries 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/scheduler/executor.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"057a5b7f8c7335a0e25eceb87316c5f9b1d8e8573d44209c950167649464a6b1"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._handle_event (cognitive 49): Workflow._handle_event has cognitive complexity 49 (threshold 15). Drivers by points: if/else 33, error handling 6, boolean chains 4, loops 3, ternaries 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1696}}}],"partialFingerprints":{"codehealthFindingId/v1":"9721c89bd971fbe3c055fc8db9a47484fb7065ff93de141e61896a7ac05a08c8"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraApp.add_app_properties_to_resources (cognitive 49): InfraApp.add_app_properties_to_resources has cognitive complexity 49 (threshold 15). Drivers by points: if/else 34, boolean chains 14, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/base/app.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfc32c67ced497a0cd84baf8761a718f17be4721db3d20d14069858ca1d7e901"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.upsert_sessions (cognitive 48): AsyncMongoDb.upsert_sessions has cognitive complexity 48 (threshold 15). Drivers by points: if/else 41, loops 3, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c83944eef7caac882173609360f7ef578d46c1d68e76c252924f98c33a31bc9"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.upsert_sessions (cognitive 48): MongoDb.upsert_sessions has cognitive complexity 48 (threshold 15). Drivers by points: if/else 41, loops 3, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ee2a393ca7b0abf9c7fe0f6a894132f13627a1f0312d79920ff1c1e5338510"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemory.get_context_text (cognitive 48): EntityMemory.get_context_text has cognitive complexity 48 (threshold 15). Drivers by points: if/else 25, ternaries 15, loops 6, boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5714873e0921b07aba1e361f5a2d4ffc1a22c28e3a0aa2e6a25a1dcf6cb2e8b"}},{"ruleId":"D2","level":"warning","message":{"text":"_response._handle_model_response_stream (cognitive 48): _response._handle_model_response_stream has cognitive complexity 48 (threshold 15). Drivers by points: if/else 42, boolean chains 3, ternaries 2, loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2deb7d1ef8ddbcf4a7fdcb03719b47cc990f65c14d31283fc43d11567d26fb4"}},{"ruleId":"D2","level":"warning","message":{"text":"GmailTools.__init__ (cognitive 48): GmailTools.__init__ has cognitive complexity 48 (threshold 15). Drivers by points: if/else 46, boolean chains 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef721e6638be971683a3f15d90169f14b0209ae73e9b1180d604f425f5990f87"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.build_panels_stream (cognitive 48): agent.build_panels_stream has cognitive complexity 48 (threshold 15). Drivers by points: if/else 36, loops 7, boolean chains 5 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"2967b00ef2f1d6d4b7518c988e1a912e482082a19a8857285c777335af973db6"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb._hybrid_search (cognitive 48): ChromaDb._hybrid_search has cognitive complexity 48 (threshold 15). Drivers by points: ternaries 21, if/else 14, boolean chains 6, error handling 5, loops 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"8108bde77b70b4a0263112f3d20f3f15a9cb70e64762c4663a178d09763e4320"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb._build_search_results (cognitive 48): ChromaDb._build_search_results has cognitive complexity 48 (threshold 15). Drivers by points: if/else 15, ternaries 14, error handling 9, boolean chains 7, loops 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"402865c118c975684b80cb5c402f4178a577163d700985e06474ca076ae6497c"}},{"ruleId":"D2","level":"warning","message":{"text":"Qdrant.async_insert (cognitive 48): Qdrant.async_insert has cognitive complexity 48 (threshold 15). Drivers by points: if/else 24, loops 11, error handling 7, ternaries 5, boolean chains 1 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/qdrant/qdrant.py"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed29b2e4e3444c276508dce18d3abe0f111487a938a9a48ce4541999f6aede18"}},{"ruleId":"D2","level":"warning","message":{"text":"EcsService._create (cognitive 48): EcsService._create has cognitive complexity 48 (threshold 15). Drivers by points: if/else 38, loops 6, boolean chains 3, error handling 1 (nesting depth added 13). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/service.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb9f574df2fffd8bebd6663f8bd64f03dea4d56d6d748becd67d79202d8073ed"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.ahandle_model_response_stream (cognitive 47): _response.ahandle_model_response_stream has cognitive complexity 47 (threshold 15). Drivers by points: if/else 38, boolean chains 4, loops 3, ternaries 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1208}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf8d05cc33647b5348d3ed7dbc60144723fccfc9a44c3ad6af4bf878188b1277"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.run_tool (cognitive 47): _tools.run_tool has cognitive complexity 47 (threshold 15). Drivers by points: if/else 45, boolean chains 1, loops 1 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":641}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbcd6703467770bd4e99cbd5b230a3968aeb73ac65924254c6a63d7a65512bc6"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.arun_tool (cognitive 47): _tools.arun_tool has cognitive complexity 47 (threshold 15). Drivers by points: if/else 45, boolean chains 1, loops 1 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2e7ba44e5eff95d30e151abe491f80a093b7e00e4aa7f3ea932961cb3db91ed"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseExternalAgent.print_response (cognitive 47): BaseExternalAgent.print_response has cognitive complexity 47 (threshold 15). Drivers by points: if/else 37, boolean chains 7, loops 2, ternaries 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b66f4db5f3f65a2eab41553c59af990465f1360c352f52a966c643ac6f089a"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseExternalAgent.aprint_response (cognitive 47): BaseExternalAgent.aprint_response has cognitive complexity 47 (threshold 15). Drivers by points: if/else 37, boolean chains 7, loops 2, ternaries 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"f804065e72b0cbef6ee318ff6d757b7832f63bb7c68f94a362a8bc638c0a1517"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini.get_request_params (cognitive 47): Gemini.get_request_params has cognitive complexity 47 (threshold 15). Drivers by points: if/else 40, boolean chains 7 (nesting depth added 9). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"93463fd9c6ac0359ef58f815fe8c6641bb99dcc32359c4219452b0fe782de22e"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._format_file_for_message (cognitive 47): Gemini._format_file_for_message has cognitive complexity 47 (threshold 15). Drivers by points: if/else 31, boolean chains 10, error handling 4, ternaries 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1043}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2460b0012b7932a72aa205cfa52b45f0d7d3fa2e9f4b8c7e336169078606281"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb._build_get_results (cognitive 47): ChromaDb._build_get_results has cognitive complexity 47 (threshold 15). Drivers by points: ternaries 17, if/else 13, error handling 8, boolean chains 6, loops 3 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8a23821588f0b89313fd0fdc4fff23632c085f680a03929c5ee33cc4b65f802"}},{"ruleId":"D2","level":"warning","message":{"text":"01_step_confirmation_and_tool_confirmation.resolve_executor_pause (cognitive 46): 01_step_confirmation_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/01_step_confirmation_and_tool_confirmation.py"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c0842856c867056852bf4324bb04167fe42097e80cdaac0f60e76274240f3f"}},{"ruleId":"D2","level":"warning","message":{"text":"02_step_user_input_and_tool_confirmation.resolve_executor_pause (cognitive 46): 02_step_user_input_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/02_step_user_input_and_tool_confirmation.py"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e621cc0feac42a6ca55debdbb2aaafbb01f4b55b7f612ab029a630c7632b384"}},{"ruleId":"D2","level":"warning","message":{"text":"03_condition_and_tool_confirmation.resolve_executor_pause (cognitive 46): 03_condition_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"26e03348982bc73c0347e1e4042b17e4a634b6540bfaeb932995881e8b88cf59"}},{"ruleId":"D2","level":"warning","message":{"text":"04_router_selection_and_tool_confirmation.resolve_executor_pause (cognitive 46): 04_router_selection_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/04_router_selection_and_tool_confirmation.py"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b0c0563c45ba2b7d90a0af2942eb2f9174883f552d3674d87250898a107309e"}},{"ruleId":"D2","level":"warning","message":{"text":"05_output_review_and_tool_confirmation.resolve_executor_pause (cognitive 46): 05_output_review_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"428bbb4fa766abd30e86464a24f2413f79efa87fa1779cbbcdf032fc392a2f52"}},{"ruleId":"D2","level":"warning","message":{"text":"06_loop_confirmation_and_tool_confirmation.resolve_executor_pause (cognitive 46): 06_loop_confirmation_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/06_loop_confirmation_and_tool_confirmation.py"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"789e9fb7319347016513c875d870b13c2fe55d60d4597e8f105c6f059861c040"}},{"ruleId":"D2","level":"warning","message":{"text":"07_router_confirmation_and_tool_confirmation.resolve_executor_pause (cognitive 46): 07_router_confirmation_and_tool_confirmation.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/07_router_confirmation_and_tool_confirmation.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c385bcd6f793b248b19311d23eab1e1397250aa14316b8e2722b199c26ebb86"}},{"ruleId":"D2","level":"warning","message":{"text":"09_multi_step_mixed_hitl.resolve_executor_pause (cognitive 46): 09_multi_step_mixed_hitl.resolve_executor_pause has cognitive complexity 46 (threshold 15). Drivers by points: ternaries 19, if/else 16, loops 7, boolean chains 4 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49ffd1217af9f1c5488778b81222b75ae3051a7efcf6a15290d770fa6eb582e"}},{"ruleId":"D2","level":"warning","message":{"text":"03_step_user_input_streaming.run_workflow_streaming (cognitive 46): 03_step_user_input_streaming.run_workflow_streaming has cognitive complexity 46 (threshold 15). Drivers by points: if/else 25, ternaries 12, boolean chains 5, loops 4 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"1774b72292ff81b52d0d743e5207c9421e4da664f41472947af97977cccefdc2"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.aget_tools (cognitive 46): _tools.aget_tools has cognitive complexity 46 (threshold 15). Drivers by points: if/else 29, boolean chains 6, error handling 5, ternaries 4, loops 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a277b52fc4510ca492a2a4a9d71975840c49f0211719010bc58032ea164390"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkdownChunking._split_large_section (cognitive 46): MarkdownChunking._split_large_section has cognitive complexity 46 (threshold 15). Drivers by points: if/else 22, ternaries 16, boolean chains 4, loops 4 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/markdown.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"057e487a5239da43130af43590cfd7f084c70b15a1b157a740e7bf90a6a3723c"}},{"ruleId":"D2","level":"warning","message":{"text":"Ollama._format_message (cognitive 46): Ollama._format_message has cognitive complexity 46 (threshold 15). Drivers by points: if/else 32, boolean chains 5, loops 5, ternaries 4 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ollama/chat.py"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1fdb0570c37fef075b721e6a935063cfd6e09b6ce9b7efead55a75fc4c541fc"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses._format_tool_params (cognitive 46): OpenAIResponses._format_tool_params has cognitive complexity 46 (threshold 15). Drivers by points: if/else 26, loops 17, boolean chains 2, ternaries 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"3028724d57e243b22cc1c4684a2981e8897232cb424293c1fa5d73f655b22047"}},{"ruleId":"D2","level":"warning","message":{"text":"_response._update_run_response (cognitive 46): _response._update_run_response has cognitive complexity 46 (threshold 15). Drivers by points: if/else 32, boolean chains 6, loops 5, ternaries 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":922}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce688521763c04693888160a76cc73dd64cf4eb92b1efc998ae030b45a1e5e8"}},{"ruleId":"D2","level":"warning","message":{"text":"UpstashVectorDb.async_upsert (cognitive 46): UpstashVectorDb.async_upsert has cognitive complexity 46 (threshold 15). Drivers by points: if/else 29, ternaries 7, error handling 5, loops 3, boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/upstashdb/upstashdb.py"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5cd592d316b98cbdae9a54b01a3be3b3f9edfd60a860831d360b0b5c30b0f74"}},{"ruleId":"D2","level":"warning","message":{"text":"02_error_retry_skip_streaming.main (cognitive 45): 02_error_retry_skip_streaming.main has cognitive complexity 45 (threshold 15). Drivers by points: ternaries 20, if/else 15, loops 7, boolean chains 3 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6efa91797a675f85af00bdb34f034a7fbd3ee64b4507065b962049e80bf32f9"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.handle_model_response_stream (cognitive 45): _response.handle_model_response_stream has cognitive complexity 45 (threshold 15). Drivers by points: if/else 38, boolean chains 4, ternaries 2, loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d370c05f5ffcbea387e27b018d6c20cfd4e5488501c8693e85c9d21adf3ce28"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_trace_stats (cognitive 45): GcsJsonDb.get_trace_stats has cognitive complexity 45 (threshold 15). Drivers by points: if/else 33, boolean chains 9, loops 2, error handling 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1625}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1f7c755353db8fe36a4c8bfb44b99bacb3cdcab4733e4e04eed8b023dd4a54"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionMetrics.__add__ (cognitive 45): SessionMetrics.__add__ has cognitive complexity 45 (threshold 15). Drivers by points: if/else 27, loops 14, boolean chains 4 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"dada1591e55543370bed880bdd6bdeac82fdfdba1a1858a4db77acc4365aba23"}},{"ruleId":"D2","level":"warning","message":{"text":"disruption_catchup.test_full_catchup (cognitive 44): disruption_catchup.test_full_catchup has cognitive complexity 44 (threshold 15). Drivers by points: if/else 39, error handling 2, loops 2, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b10b034e0bfcb832c7ff140840588a3d4730da0614f14b1d730642ad1b3619f"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_sessions (cognitive 44): GcsJsonDb.get_sessions has cognitive complexity 44 (threshold 15). Drivers by points: if/else 29, boolean chains 10, ternaries 3, error handling 1, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e83a888cf1cdf3c6452896b61da1ccdd6e1c7880604e4b2eb24557c5888499"}},{"ruleId":"D2","level":"warning","message":{"text":"InMemoryDb.get_sessions (cognitive 44): InMemoryDb.get_sessions has cognitive complexity 44 (threshold 15). Drivers by points: if/else 29, boolean chains 10, ternaries 3, error handling 1, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"3532cde13f9cdabf096feafcef383e28dbf518d6d7d5807896a9bb84d3832c80"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_sessions (cognitive 44): JsonDb.get_sessions has cognitive complexity 44 (threshold 15). Drivers by points: if/else 29, boolean chains 10, ternaries 3, error handling 1, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ff5ce66f0e2708582957836c9e778b28e057d7609fe7b4bec1746233ef8398"}},{"ruleId":"D2","level":"warning","message":{"text":"v1_to_v2.safe_get_runs_from_memory (cognitive 44): v1_to_v2.safe_get_runs_from_memory has cognitive complexity 44 (threshold 15). Drivers by points: if/else 34, loops 5, boolean chains 3, error handling 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"527715f921f5e5d48758a1c0a8906643f91243ef7b60e9fa7d4bd560c537b669"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_config (cognitive 44): PostgresDb.upsert_config has cognitive complexity 44 (threshold 15). Drivers by points: if/else 34, loops 4, boolean chains 3, ternaries 2, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4081}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a9c0b8c76164bf22fd24ceef0feba9caf90021d2365730cbd9e0fa8438fde7c"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.upsert_config (cognitive 44): SqliteDb.upsert_config has cognitive complexity 44 (threshold 15). Drivers by points: if/else 34, loops 4, boolean chains 3, ternaries 2, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3967}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fb0c3d245299fa483b2fe60b111256600e4fd806504c7d0eda34966ac46c1d9"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._eval_filter_expr (cognitive 44): utils._eval_filter_expr has cognitive complexity 44 (threshold 15). Drivers by points: if/else 31, ternaries 6, boolean chains 5, error handling 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/utils.py"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"f57abb83550349955bc581882c5acdf2424d71065b1fe2e5468d0c3baa1bc8e3"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.upsert_memories (cognitive 44): ValkeyDb.upsert_memories has cognitive complexity 44 (threshold 15). Drivers by points: if/else 20, ternaries 11, loops 9, boolean chains 3, error handling 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"38547fa2f72f3ba962bf5bb19d1c66009ee593240729cde34977141b85eab0f9"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat._parse_provider_response (cognitive 44): OpenAIChat._parse_provider_response has cognitive complexity 44 (threshold 15). Drivers by points: if/else 30, boolean chains 8, error handling 4, loops 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2bf25913ddfe65b4b9cddd5b113d7785cd8b73b44efd73d86a94f1359d47776"}},{"ruleId":"D2","level":"warning","message":{"text":"_utils._deep_copy_field (cognitive 44): _utils._deep_copy_field has cognitive complexity 44 (threshold 15). Drivers by points: error handling 20, if/else 17, loops 4, boolean chains 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_utils.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e9778c4a4e9994992381a29790277b8bf60280b3763d08443eec2c4c98941ea"}},{"ruleId":"D2","level":"warning","message":{"text":"MCPTools._connect (cognitive 44): MCPTools._connect has cognitive complexity 44 (threshold 15). Drivers by points: if/else 23, error handling 15, ternaries 4, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"d34f94909ca76bf32cab1bf5ec9f43ca5315a7c219232623fc9a938bae0649d7"}},{"ruleId":"D2","level":"warning","message":{"text":"pprint.pprint_run_response (cognitive 44): pprint.pprint_run_response has cognitive complexity 44 (threshold 15). Drivers by points: if/else 22, error handling 11, ternaries 6, boolean chains 3, loops 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/pprint.py"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7b714ebe2d651fb5c1701ed4c571cbc3806be49d704227b4a53ffe4bb0617ec"}},{"ruleId":"D2","level":"warning","message":{"text":"pprint.apprint_run_response (cognitive 44): pprint.apprint_run_response has cognitive complexity 44 (threshold 15). Drivers by points: if/else 22, error handling 11, ternaries 6, boolean chains 3, loops 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/pprint.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"79ba96ec30c9968ed883010cb2b6b760af6f0234fed2172eae9d26201d8828d1"}},{"ruleId":"D2","level":"warning","message":{"text":"runner._isolate_attempt (cognitive 43): runner._isolate_attempt has cognitive complexity 43 (threshold 15). Drivers by points: if/else 24, ternaries 8, boolean chains 7, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"6622ef030180d51f62532cb4ec013881e7e021b59a50fc2e6833f6b24a6318ff"}},{"ruleId":"D2","level":"warning","message":{"text":"DocumentChunking.chunk (cognitive 43): DocumentChunking.chunk has cognitive complexity 43 (threshold 15). Drivers by points: if/else 37, loops 6 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/document.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"54e8aeca9758cbe4ad7a588eb7cd4ac8e326515b0ea4ce11d5ebe05783273028"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._format_entity_hit (cognitive 43): EntityMemoryStore._format_entity_hit has cognitive complexity 43 (threshold 15). Drivers by points: ternaries 19, if/else 14, loops 6, boolean chains 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1988}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea1437b7b0baf53933fc3493a49ee9e1aaa37cf4ccf9320b4d2e68359671c682"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteLLM.parse_tool_calls (cognitive 43): LiteLLM.parse_tool_calls has cognitive complexity 43 (threshold 15). Drivers by points: if/else 35, error handling 4, boolean chains 2, loops 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"f344ccd5de69830c5e5289143cfae598a82ac9e2f4f583ee5f43223469cbcc5c"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses.get_request_params (cognitive 43): OpenAIResponses.get_request_params has cognitive complexity 43 (threshold 15). Drivers by points: if/else 35, boolean chains 5, loops 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e00471756e2abfaeb0de0a94d1c407aed7cfdbbc8f198065b845a0bc9527dc"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.collect_mcp_tools_from_team (cognitive 43): utils.collect_mcp_tools_from_team has cognitive complexity 43 (threshold 15). Drivers by points: if/else 29, loops 9, boolean chains 5 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1405}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bfa881e1b19f763c125026e55214bff4eb08ffac9ee1bedc6af3509b3317b5"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._run_tasks (cognitive 43): _run._run_tasks has cognitive complexity 43 (threshold 15). Drivers by points: if/else 24, error handling 13, boolean chains 2, loops 2, ternaries 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e471eee5e5c317ec9b02f31bcb8f6e3d872bc20e3ee5b78da390821d2e21b9a"}},{"ruleId":"D2","level":"warning","message":{"text":"YouTools._format_results (cognitive 43): YouTools._format_results has cognitive complexity 43 (threshold 15). Drivers by points: if/else 33, boolean chains 7, loops 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/youcom.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"a42ee19c116e133aaab996fe59b6676a3b1f897ef766b89e7e29f1eedbaedd93"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.async_upsert (cognitive 43): LanceDb.async_upsert has cognitive complexity 43 (threshold 15). Drivers by points: if/else 23, loops 11, ternaries 5, error handling 3, boolean chains 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"590c71b4b497d2135dca93c3046de0822975f979caedbdee6313dae455dda4bf"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._run_workflow_agent (cognitive 43): Workflow._run_workflow_agent has cognitive complexity 43 (threshold 15). Drivers by points: if/else 29, loops 6, ternaries 6, boolean chains 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":4951}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8060c126d9fc65bb3f55181f51e53931c69a275b8f6cc3e49761961b2bc4ea6"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._continue_run (cognitive 42): _run._continue_run has cognitive complexity 42 (threshold 15). Drivers by points: if/else 20, error handling 17, boolean chains 2, ternaries 2, loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3588}}}],"partialFingerprints":{"codehealthFindingId/v1":"d95a6f00be3392857664e39974f19d24dc11982d23c57fd09cba96a5a038d1d0"}},{"ruleId":"D2","level":"warning","message":{"text":"runner.arun_rollouts (cognitive 42): runner.arun_rollouts has cognitive complexity 42 (threshold 15). Drivers by points: if/else 27, error handling 5, ternaries 4, boolean chains 3, loops 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c8808921550cf62b45023ee4993e387fd22aec8b52086d4e203e4c99904631a"}},{"ruleId":"D2","level":"warning","message":{"text":"helpers.upload_and_send_media_async (cognitive 42): helpers.upload_and_send_media_async has cognitive complexity 42 (threshold 15). Drivers by points: if/else 27, boolean chains 9, ternaries 5, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/whatsapp/helpers.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"d96741523bcb774e3c51d088b95c1f6b498ae7f13b931f4aa59522e0e945bca5"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb._create_search_index (cognitive 42): MongoDb._create_search_index has cognitive complexity 42 (threshold 15). Drivers by points: if/else 20, error handling 12, boolean chains 5, loops 5 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2efd514a733e168b3bb7199a8cb65f54b60ffcbc90ba0cbd19b1ea570099d2"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.from_dict (cognitive 42): Step.from_dict has cognitive complexity 42 (threshold 15). Drivers by points: if/else 24, boolean chains 10, error handling 8 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"63619bafbef6f9505c037430884bce12cae0c32a5f8013fb8504827aaff43af6"}},{"ruleId":"D2","level":"warning","message":{"text":"CacheCluster._create (cognitive 42): CacheCluster._create has cognitive complexity 42 (threshold 15). Drivers by points: if/else 37, boolean chains 2, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"49e947e37224b3de97a1bfc521d04376aedf217d6000c5486907384236eb4ee1"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks.aexecute_pre_hooks (cognitive 41): _hooks.aexecute_pre_hooks has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d85e0606436a287f60ebde9e3efab678fb29b72f71bd259fff0b5c95823ba87"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks.aexecute_post_hooks (cognitive 41): _hooks.aexecute_post_hooks has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":363}}}],"partialFingerprints":{"codehealthFindingId/v1":"a45b39fe8d3a5ceaee9874f8790f56b583897e70620c67339f7bd5f630eecb24"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.update_run_response (cognitive 41): _response.update_run_response has cognitive complexity 41 (threshold 15). Drivers by points: if/else 28, loops 5, boolean chains 4, ternaries 4 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8099e7940f185602ba1bc5dc04021068c95144857e319424e3883b971897e38"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_traces (cognitive 41): GcsJsonDb.get_traces has cognitive complexity 41 (threshold 15). Drivers by points: if/else 30, boolean chains 8, loops 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1532}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c0cd2831ec0d9a06933a0aa39bd832e383413ca40eaac58e0fe49824654bb36"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_traces (cognitive 41): JsonDb.get_traces has cognitive complexity 41 (threshold 15). Drivers by points: if/else 30, boolean chains 8, loops 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1513}}}],"partialFingerprints":{"codehealthFindingId/v1":"d063754ee442ae7624115da8ba42783337db1b9d9e4d9dd665d76957f7c453b9"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_traces (cognitive 41): ValkeyDb.get_traces has cognitive complexity 41 (threshold 15). Drivers by points: if/else 27, boolean chains 10, error handling 2, loops 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2214}}}],"partialFingerprints":{"codehealthFindingId/v1":"62d7531a021e60c210897fe5c194c7ff0ac8da373dba47845dbff799f23e49ac"}},{"ruleId":"D2","level":"warning","message":{"text":"JWTValidator.validate_token (cognitive 41): JWTValidator.validate_token has cognitive complexity 41 (threshold 15). Drivers by points: if/else 25, error handling 10, ternaries 3, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"311095da2649430184c743b198534a0b09e8be5fbe6815d76099b05639ec0207"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks._aexecute_pre_hooks (cognitive 41): _hooks._aexecute_pre_hooks has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e4317751c8dce549f9d6479fdc5b57f8cbf60330703b02aaaad5d79f3431c5a"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks._aexecute_post_hooks (cognitive 41): _hooks._aexecute_post_hooks has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"176ab649fc0324fbe365d127cf343b9c7a61696c639db4f718c27e1deee90947"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._continue_run (cognitive 41): _run._continue_run has cognitive complexity 41 (threshold 15). Drivers by points: if/else 20, error handling 17, ternaries 2, boolean chains 1, loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7070}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa79f04b6fe2ceb403b78a5825e9ebb4bc7dfaf821c2fa4b5b64c5f01482f11"}},{"ruleId":"D2","level":"warning","message":{"text":"MCPTools.__init__ (cognitive 41): MCPTools.__init__ has cognitive complexity 41 (threshold 15). Drivers by points: if/else 29, boolean chains 10, ternaries 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"c25236ffad79078e6a59d3f0c716436e7ead7c5502a5d5cf328a5152c63f0153"}},{"ruleId":"D2","level":"warning","message":{"text":"tokens._count_message_tokens (cognitive 41): tokens._count_message_tokens has cognitive complexity 41 (threshold 15). Drivers by points: if/else 23, ternaries 12, loops 5, boolean chains 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/tokens.py"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ef8237bc57309b8f38c9111535ff883849899f3183a500b9068b2df7344dfc8"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.deep_copy (cognitive 41): Workflow.deep_copy has cognitive complexity 41 (threshold 15). Drivers by points: error handling 23, if/else 14, boolean chains 3, loops 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10485}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c0e065bfd672c867ffd12ffabc3d187d7efc70d124052df519503db5ceb30b"}},{"ruleId":"D2","level":"warning","message":{"text":"EcsService._update (cognitive 41): EcsService._update has cognitive complexity 41 (threshold 15). Drivers by points: if/else 32, loops 6, boolean chains 2, error handling 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/service.py"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"64a27e656e3fe7bc9d8776665d677e692a7a20cb5d570d6263fa61cfe8aa3e6e"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.get_traces (cognitive 40): RedisDb.get_traces has cognitive complexity 40 (threshold 15). Drivers by points: if/else 28, boolean chains 9, loops 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1880}}}],"partialFingerprints":{"codehealthFindingId/v1":"12ed48995c719add7d79332dc6b13012d6a26ff43f57b0a66e66ba856f08393e"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb._create_table (cognitive 40): SingleStoreDb._create_table has cognitive complexity 40 (threshold 15). Drivers by points: if/else 26, loops 7, boolean chains 3, error handling 3, ternaries 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e75dd8cad2349e07e10715cba3943e6a3046a8885523b9f2e138bb70a0d4b79"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._add_router (cognitive 40): AgentOS._add_router has cognitive complexity 40 (threshold 15). Drivers by points: if/else 22, loops 16, boolean chains 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"561585181c0f4c9b08af7ff1480787884c2fce3667bb530648adc9a380044213"}},{"ruleId":"D2","level":"warning","message":{"text":"RunRequirement.provide_user_feedback (cognitive 40): RunRequirement.provide_user_feedback has cognitive complexity 40 (threshold 15). Drivers by points: if/else 22, loops 16, boolean chains 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/requirement.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6cf7f57fae90b9deae0291ef134d21e959f1e68d026b88ab21f99c08234e3b3"}},{"ruleId":"D2","level":"warning","message":{"text":"SlackTools.__init__ (cognitive 40): SlackTools.__init__ has cognitive complexity 40 (threshold 15). Drivers by points: if/else 21, boolean chains 16, ternaries 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d3c7e5351a6edfbffdd4c069ae2b56ee623127b9f1aadfaed8957261ef6d2e"}},{"ruleId":"D2","level":"warning","message":{"text":"openai.audio_to_message (cognitive 40): openai.audio_to_message has cognitive complexity 40 (threshold 15). Drivers by points: if/else 28, error handling 9, boolean chains 2, loops 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/openai.py"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"585ac3fa7c4253c74de1145714687a540b6b3b385d20596e44011aa84c4079ed"}},{"ruleId":"D2","level":"warning","message":{"text":"Cassandra.async_insert (cognitive 40): Cassandra.async_insert has cognitive complexity 40 (threshold 15). Drivers by points: error handling 13, loops 10, if/else 9, boolean chains 4, ternaries 4 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/cassandra/cassandra.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccd0918b48b968a8d9e9cc098e983757b2b79db713f29e047574f2746eda6f1f"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch.async_insert (cognitive 40): CouchbaseSearch.async_insert has cognitive complexity 40 (threshold 15). Drivers by points: if/else 19, loops 9, error handling 7, ternaries 4, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60a097a9cf03e6312a9d55523cf0defe49000d0b5240e4cd12d9ac6f0eb85d4"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch._async_upsert (cognitive 40): CouchbaseSearch._async_upsert has cognitive complexity 40 (threshold 15). Drivers by points: if/else 19, loops 9, error handling 7, ternaries 4, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffea3c63eaaa28becde191c0dd645407711547299634ef0ea5d87cbbbd3e4e99"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.aget_relevant_docs_from_knowledge (cognitive 39): _messages.aget_relevant_docs_from_knowledge has cognitive complexity 39 (threshold 15). Drivers by points: if/else 29, boolean chains 6, error handling 3, ternaries 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1889}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93c10ba5cc7dd889566997e0c6dd8137b54fed3550a9fe1597bc11062acd029"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.upsert_session (cognitive 39): AsyncMySQLDb.upsert_session has cognitive complexity 39 (threshold 15). Drivers by points: if/else 29, boolean chains 9, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e165ba6336172d327fa2b4104c1f67f2bcd712d566602c4d7f05dd3b99aae61"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._apply_remember (cognitive 39): EntityMemoryStore._apply_remember has cognitive complexity 39 (threshold 15). Drivers by points: if/else 21, boolean chains 13, loops 3, ternaries 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1551}}}],"partialFingerprints":{"codehealthFindingId/v1":"c29de8b06560b446e823ddff69096ea602b6ad9fa26a7d1b5f96063a14b90c34"}},{"ruleId":"D2","level":"warning","message":{"text":"approval._apply_approval_to_tools (cognitive 39): approval._apply_approval_to_tools has cognitive complexity 39 (threshold 15). Drivers by points: if/else 31, loops 5, boolean chains 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/approval.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff202b09c0b35c39864e3efc32979d26dc3481a5184dfc1ac85072dba168f275"}},{"ruleId":"D2","level":"warning","message":{"text":"_default_tools.aget_relevant_docs_from_knowledge (cognitive 39): _default_tools.aget_relevant_docs_from_knowledge has cognitive complexity 39 (threshold 15). Drivers by points: if/else 29, boolean chains 6, error handling 3, ternaries 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_default_tools.py"},"region":{"startLine":1725}}}],"partialFingerprints":{"codehealthFindingId/v1":"6be7c73a062db95fd1e1515eca7c67188ae1ecb635d55a83dab9673b36cbe24f"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition.execute (cognitive 39): Condition.execute has cognitive complexity 39 (threshold 15). Drivers by points: if/else 30, error handling 4, boolean chains 2, ternaries 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"f057b0ff9381967f292a3b19332be2367aad8fcab0c8275ad96c6a3893ef1569"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition.aexecute (cognitive 39): Condition.aexecute has cognitive complexity 39 (threshold 15). Drivers by points: if/else 30, error handling 4, boolean chains 2, ternaries 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6ece1641467e80d377c65dc856e617f13cb97b96c10cd6c37162c40d8c409fa"}},{"ruleId":"D2","level":"warning","message":{"text":"EcsContainer.get_container_definition (cognitive 39): EcsContainer.get_container_definition has cognitive complexity 39 (threshold 15). Drivers by points: if/else 39. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/container.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b4967d9d54fbf85167bf144830ed3199a881cb44523c7df4666aced76050f6f"}},{"ruleId":"D2","level":"warning","message":{"text":"AntigravityAgent._translate_sse_event (cognitive 38): AntigravityAgent._translate_sse_event has cognitive complexity 38 (threshold 15). Drivers by points: boolean chains 18, if/else 10, ternaries 10 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/antigravity/agent.py"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3e005dc61d12edf528b7e2bef8f54873c789628d70716d039428879e80b9f76"}},{"ruleId":"D2","level":"warning","message":{"text":"AccuracyEval.run_with_output (cognitive 38): AccuracyEval.run_with_output has cognitive complexity 38 (threshold 15). Drivers by points: ternaries 20, if/else 16, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"3957da9ac0f2b70d3a4740c501e35b6bbba7b5f3f47f0ed5f6dd3d49af1482a7"}},{"ruleId":"D2","level":"warning","message":{"text":"filters.from_dict (cognitive 38): filters.from_dict has cognitive complexity 38 (threshold 15). Drivers by points: if/else 28, boolean chains 10 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/filters.py"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f772bf799111886eb94755aedac6e6e62b6743fed937c2e82a1db006dc2084"}},{"ruleId":"D2","level":"warning","message":{"text":"FileTools.search_content (cognitive 38): FileTools.search_content has cognitive complexity 38 (threshold 15). Drivers by points: if/else 24, error handling 10, loops 3, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file.py"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb766f4fee9e3f998d5629a9e19988b6dc41798549ca112a9c5ed3c7a27c27e1"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleSlidesTools.__init__ (cognitive 38): GoogleSlidesTools.__init__ has cognitive complexity 38 (threshold 15). Drivers by points: if/else 20, boolean chains 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb960a848f29604017539428164eb49fb256e666c1ff1c8eea7488a2e73c0c89"}},{"ruleId":"D2","level":"warning","message":{"text":"SuperserveTools.__init__ (cognitive 38): SuperserveTools.__init__ has cognitive complexity 38 (threshold 15). Drivers by points: boolean chains 20, if/else 17, ternaries 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/superserve.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f5ceccb9d93a7a089b93fa450ad07ec7142a85da4736918e67cf7ed4703f68c"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.get_last_run_output_util (cognitive 38): agent.get_last_run_output_util has cognitive complexity 38 (threshold 15). Drivers by points: if/else 31, loops 5, boolean chains 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd98b5cb8ca9d497ed63c693792e65cd365f97ed32dc7b4fe7e5ae3a90ac11c8"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb.async_insert (cognitive 38): ChromaDb.async_insert has cognitive complexity 38 (threshold 15). Drivers by points: if/else 21, error handling 7, ternaries 4, boolean chains 3, loops 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"704d866c0a3b368589b31fae4f02f28603d413d417ae104bd1f8f50e3976536a"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_trace_stats (cognitive 37): JsonDb.get_trace_stats has cognitive complexity 37 (threshold 15). Drivers by points: if/else 27, boolean chains 7, loops 2, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1606}}}],"partialFingerprints":{"codehealthFindingId/v1":"13b9bdf580ce2fa02e998f43bbc43301d6bc5e7ca36ba93cbd89820c6056cf02"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.upsert_session (cognitive 37): MySQLDb.upsert_session has cognitive complexity 37 (threshold 15). Drivers by points: if/else 30, boolean chains 6, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ca35ffa462b01d9348f4cddf064c5e0c11a3cfddaa20fbbae2e3c171889ab4f"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._validate_filters (cognitive 37): Knowledge._validate_filters has cognitive complexity 37 (threshold 15). Drivers by points: if/else 22, ternaries 7, boolean chains 4, loops 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a517d9c1a7d4c006f5643f2487ea21ec86926b59e0fdd4f56dec93619150b12"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionMetrics.accumulate_from_run (cognitive 37): SessionMetrics.accumulate_from_run has cognitive complexity 37 (threshold 15). Drivers by points: if/else 23, loops 11, boolean chains 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"6259e1642061c23c836810755375b4ca628f6416ded0b89df24d5ffb0d500f53"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._initialize_agents (cognitive 37): AgentOS._initialize_agents has cognitive complexity 37 (threshold 15). Drivers by points: if/else 27, boolean chains 5, loops 5 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":714}}}],"partialFingerprints":{"codehealthFindingId/v1":"7457f44d2b37ac116dea9e5091db2933a02eec687dbf566393e30bdf56950827"}},{"ruleId":"D2","level":"warning","message":{"text":"router.handle_workflow_via_websocket (cognitive 37): router.handle_workflow_via_websocket has cognitive complexity 37 (threshold 15). Drivers by points: if/else 23, error handling 6, boolean chains 4, ternaries 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fccffc4e34f5cc9e1d65361671bc433079b269dc1aaf8d359fd2b4918b8fb9a"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.__init__ (cognitive 37): LanceDb.__init__ has cognitive complexity 37 (threshold 15). Drivers by points: if/else 25, boolean chains 8, error handling 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe8999d8c7c0c237995fce27ab9237bd6aaef7470856689ccba5a78cf2486e2d"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._run_workflow_agent_stream (cognitive 37): Workflow._run_workflow_agent_stream has cognitive complexity 37 (threshold 15). Drivers by points: if/else 24, ternaries 10, boolean chains 2, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":4785}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd725cfd9c9310f25c24e00f14717877eafeb8ba8822e95065729562ddcd7e3d"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.convert_response_to_structured_format (cognitive 36): _response.convert_response_to_structured_format has cognitive complexity 36 (threshold 15). Drivers by points: if/else 30, error handling 4, boolean chains 1, ternaries 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":923}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1f972f3bcb71214e7d4d3fb0b30cc17811b5ade1ba677155c526347339101b7"}},{"ruleId":"D2","level":"warning","message":{"text":"MigrationManager.up (cognitive 36): MigrationManager.up has cognitive complexity 36 (threshold 15). Drivers by points: if/else 31, loops 3, boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/manager.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"b88f1eede6c6c53ffc404730461a4ccdbeedcd7bc8b39aeb63b5ffaa25e48baa"}},{"ruleId":"D2","level":"warning","message":{"text":"CohereEmbedder.async_get_embeddings_batch_and_usage (cognitive 36): CohereEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 36 (threshold 15). Drivers by points: error handling 13, if/else 12, loops 10, boolean chains 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c7c215a5267114fbdaf426c9607b3a04600d7cc5d29c13541a1ea558f1d211e"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiEmbedder.async_get_embeddings_batch_and_usage (cognitive 36): GeminiEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 36 (threshold 15). Drivers by points: if/else 22, loops 7, error handling 6, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/google.py"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ce9fce40ed6bb23de2629f80ab22224ec75eb783954e0366c9cb0c0597dce3c"}},{"ruleId":"D2","level":"warning","message":{"text":"metrics.accumulate_eval_metrics (cognitive 36): metrics.accumulate_eval_metrics has cognitive complexity 36 (threshold 15). Drivers by points: if/else 19, loops 9, ternaries 5, boolean chains 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c4025b7dc736421f23e9a722c6dbd22cf18659ac3fbbb5a467c88697deb91ab"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.map_run_output_to_a2a_task (cognitive 36): utils.map_run_output_to_a2a_task has cognitive complexity 36 (threshold 15). Drivers by points: if/else 18, loops 8, boolean chains 6, ternaries 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab7e686fde8538d1fb3afc49c0aadb69576344988cf0749c8fb5d313013e6b8"}},{"ruleId":"D2","level":"warning","message":{"text":"approval._build_approval_dict (cognitive 36): approval._build_approval_dict has cognitive complexity 36 (threshold 15). Drivers by points: if/else 19, boolean chains 7, loops 6, ternaries 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/approval.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d13da03afe70b3190377736a24dfd391d73a92123db1af9fd6a5e10102e93cd"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionSummaryManager.get_system_message (cognitive 36): SessionSummaryManager.get_system_message has cognitive complexity 36 (threshold 15). Drivers by points: if/else 29, boolean chains 6, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/summary.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4ad7372a3b1daab3a9720143bd6081433b822689697cb0ac9a7edfdaae4ad00"}},{"ruleId":"D2","level":"warning","message":{"text":"agentos._normalize_eval_run (cognitive 36): agentos._normalize_eval_run has cognitive complexity 36 (threshold 15). Drivers by points: if/else 20, boolean chains 10, ternaries 4, error handling 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/agentos.py"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfacb18157c967fc34c7fe3c96b11616d439178b4d6c14f92a0ff123c431f7bd"}},{"ruleId":"D2","level":"warning","message":{"text":"Function.from_callable (cognitive 36): Function.from_callable has cognitive complexity 36 (threshold 15). Drivers by points: if/else 22, boolean chains 10, loops 3, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa442e1dbbbaa31d7f45b4c2708565f6b45dc57bec956f9daed17193d66e91fb"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionCall.aexecute (cognitive 36): FunctionCall.aexecute has cognitive complexity 36 (threshold 15). Drivers by points: if/else 22, boolean chains 8, error handling 3, ternaries 3 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1274}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8857c67e2c36145b07b32f999ee50a600054e0fb89047590bc3e2c4d3ef48a2"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiMCPTools.__init__ (cognitive 36): MultiMCPTools.__init__ has cognitive complexity 36 (threshold 15). Drivers by points: if/else 20, loops 8, boolean chains 3, ternaries 3, error handling 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5192d4b20157bf93456f8f2cdc635a07a691ae817c0345aeb895071e4173fd"}},{"ruleId":"D2","level":"warning","message":{"text":"NanoBananaTools.create_image (cognitive 36): NanoBananaTools.create_image has cognitive complexity 36 (threshold 15). Drivers by points: if/else 16, boolean chains 7, error handling 5, ternaries 5, loops 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/nano_banana.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a02f90598032609f0cbf0caea2b77ca72128cb648fe55b8e588d0215cf1294"}},{"ruleId":"D2","level":"warning","message":{"text":"ShopifyTools.get_sales_trends (cognitive 36): ShopifyTools.get_sales_trends has cognitive complexity 36 (threshold 15). Drivers by points: ternaries 20, if/else 16 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/shopify.py"},"region":{"startLine":1176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bf4eb9b6d89a4f70ea42cf79fc1d96f32f4537713b409625633e5ed8103d060"}},{"ruleId":"D2","level":"warning","message":{"text":"Workspace.search_content (cognitive 36): Workspace.search_content has cognitive complexity 36 (threshold 15). Drivers by points: if/else 22, error handling 10, loops 3, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workspace.py"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"a84922392475d9670b69e7c986d12099012248494051a6076f1284ad7b5d0fb6"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.aget_last_run_output_util (cognitive 36): agent.aget_last_run_output_util has cognitive complexity 36 (threshold 15). Drivers by points: if/else 29, loops 5, boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cff911d959eb6bfc2fefe1d346bd3cbef6fcaedbabeaa945d3466a7f6cb1dd4"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb._async_upsert (cognitive 36): ChromaDb._async_upsert has cognitive complexity 36 (threshold 15). Drivers by points: if/else 21, error handling 5, ternaries 4, boolean chains 3, loops 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa9eaab354bd145b76e1516c6f708ea97b2a0e478da8fa16155505be0464bbc"}},{"ruleId":"D2","level":"warning","message":{"text":"03_step_user_input_streaming.handle_hitl_pause (cognitive 35): 03_step_user_input_streaming.handle_hitl_pause has cognitive complexity 35 (threshold 15). Drivers by points: if/else 15, ternaries 12, loops 5, error handling 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"430f747b16c0ca0484b5ac9dbe1a2faf23e256d22bc1988089c024ca29a11123"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks.execute_pre_hooks (cognitive 35): _hooks.execute_pre_hooks has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee67bc633c4e369618ae60145ce5c4a30e7e7d4a3bc3e699a5309f143014bf8"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks.execute_post_hooks (cognitive 35): _hooks.execute_post_hooks has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14, error handling 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"702aaf56aebebfdae45e92cffd76d2906c0d52f261fffdc54a5a6be52e37cacd"}},{"ruleId":"D2","level":"warning","message":{"text":"_storage.from_dict (cognitive 35): _storage.from_dict has cognitive complexity 35 (threshold 15). Drivers by points: if/else 22, boolean chains 7, ternaries 6 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"c983474676264aa970aaca5276c47241c15282d82d5397c4f0ebe45428c1dcb3"}},{"ruleId":"D2","level":"warning","message":{"text":"_utils.deep_copy_field (cognitive 35): _utils.deep_copy_field has cognitive complexity 35 (threshold 15). Drivers by points: error handling 20, if/else 11, boolean chains 2, loops 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_utils.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a0687bca06410b203fb8bf205de55d35c6ea178ccb5e589c0b12a9540729210"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.filter_expr_to_clickhouse (cognitive 35): utils.filter_expr_to_clickhouse has cognitive complexity 35 (threshold 15). Drivers by points: if/else 29, boolean chains 5, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/utils.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa9850ecccf90bc28c19b10f0e1e2cdc538d8124e3beae65c4136330daf5876c"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_trace_stats (cognitive 35): ValkeyDb.get_trace_stats has cognitive complexity 35 (threshold 15). Drivers by points: if/else 24, boolean chains 7, error handling 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2315}}}],"partialFingerprints":{"codehealthFindingId/v1":"504a64f75f29f62295a850e725dd4d628fda1cb3949e5c47d22d9e87a4cd86c5"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore.build_context (cognitive 35): EntityMemoryStore.build_context has cognitive complexity 35 (threshold 15). Drivers by points: if/else 17, boolean chains 7, error handling 4, loops 4, ternaries 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"f59118f782902e4b307bf90196876137dbaa5a1760c4ed2cb2af5022482795a0"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._format_audio_for_message (cognitive 35): Gemini._format_audio_for_message has cognitive complexity 35 (threshold 15). Drivers by points: if/else 23, boolean chains 5, loops 3, error handling 2, ternaries 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef0401f3e8542a8953c2f5588cdde828f0c9f7763bf66d47ac541c0bd0aef91"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolCallScorer.score (cognitive 35): ToolCallScorer.score has cognitive complexity 35 (threshold 15). Drivers by points: if/else 18, boolean chains 7, loops 6, ternaries 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/scorer/tools.py"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ff09f04b71f37aef40d3568f5fda12982273cd2e573535ef04e7d0a695236b"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowSession.get_messages (cognitive 35): WorkflowSession.get_messages has cognitive complexity 35 (threshold 15). Drivers by points: if/else 20, loops 12, boolean chains 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cccd8dfcc256a1070efd01861b16f26deea4fa83e799e363620b7f468527a53"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._get_run_messages (cognitive 35): _messages._get_run_messages has cognitive complexity 35 (threshold 15). Drivers by points: if/else 20, ternaries 6, loops 5, error handling 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8eb0f5f6372369a7eb6a073395f9a958c9bad015f354ece5850944eef0c22c"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._aget_run_messages (cognitive 35): _messages._aget_run_messages has cognitive complexity 35 (threshold 15). Drivers by points: if/else 20, ternaries 6, loops 5, error handling 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea37c73ed4477a3b8622abdb384e48a9a62097513c2fdd9ec18672e004411c6"}},{"ruleId":"D2","level":"warning","message":{"text":"MCPTools.get_session_for_run (cognitive 35): MCPTools.get_session_for_run has cognitive complexity 35 (threshold 15). Drivers by points: if/else 21, error handling 6, boolean chains 4, ternaries 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"32964e084da6f7374f6df7477ace11ed00fe4430785608d6b4b9a40b915b3265"}},{"ruleId":"D2","level":"warning","message":{"text":"callables._aclose_cached_resources (cognitive 35): callables._aclose_cached_resources has cognitive complexity 35 (threshold 15). Drivers by points: if/else 24, loops 6, ternaries 3, boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/callables.py"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8aaa2fdd662b6aa501b3774fcf8e0e8ee33943318dec1dc05a57fb0321eb0c6"}},{"ruleId":"D2","level":"warning","message":{"text":"mistral.format_messages (cognitive 35): mistral.format_messages has cognitive complexity 35 (threshold 15). Drivers by points: if/else 26, loops 5, boolean chains 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/mistral.py"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"96d3e04c1d38298acc1ed668c671a62b9bae35ff0ea20dde2f149583263d99b0"}},{"ruleId":"D2","level":"warning","message":{"text":"infra_cli.patch (cognitive 35): infra_cli.patch has cognitive complexity 35 (threshold 15). Drivers by points: if/else 26, boolean chains 5, ternaries 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/cli/infra_cli.py"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26d5f9694cf6a5c22d484101f043108ac2a0244a5c47aa290d6bc7368a5c110"}},{"ruleId":"D2","level":"warning","message":{"text":"operator.create_infra_from_template (cognitive 35): operator.create_infra_from_template has cognitive complexity 35 (threshold 15). Drivers by points: if/else 24, error handling 5, loops 3, ternaries 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/operator.py"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c01edaef18582fbf7783fbe03547d7a45113bd39e6ad2d5fe7f8d3cce7114d0"}},{"ruleId":"D2","level":"warning","message":{"text":"events_replay.test_replay (cognitive 34): events_replay.test_replay has cognitive complexity 34 (threshold 15). Drivers by points: if/else 28, boolean chains 2, error handling 2, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c1ae16b15cd108c1383a10d03acbe070e0507418fc836e1ceaf4de0405eb99c"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_relevant_docs_from_knowledge (cognitive 34): _messages.get_relevant_docs_from_knowledge has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, boolean chains 5, error handling 3, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1790}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ab9d1668e8d8fc6058007d4b422c30915552e06007a7ec990f79258482352bb"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.aparse_response_with_parser_model_stream (cognitive 34): _response.aparse_response_with_parser_model_stream has cognitive complexity 34 (threshold 15). Drivers by points: if/else 22, loops 10, ternaries 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f4f82b62b467cc974045b3e78cb9db81cd3dd6639dc8c50ee73682401fdf88"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_trace_stats (cognitive 34): DynamoDb.get_trace_stats has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, loops 3, boolean chains 2, ternaries 2, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2541}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0e8b35b7c82bb411f5705d8d1aaee486975ce03618f54883f21dc48a31ef896"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_eval_runs (cognitive 34): GcsJsonDb.get_eval_runs has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, boolean chains 8, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1115}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29e49f08bfb5d3b186c1c4e63f32fcd1e5193a3bba7ca2cce213f0d88eacee5"}},{"ruleId":"D2","level":"warning","message":{"text":"InMemoryDb.get_eval_runs (cognitive 34): InMemoryDb.get_eval_runs has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, boolean chains 8, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"c34c3a3d45facd63c5de42cca68c2932832586bc254f1522787e277dbc739f5a"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_eval_runs (cognitive 34): JsonDb.get_eval_runs has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, boolean chains 8, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1157}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9c58d5c2a9dff77436d21c7acf9c7ab398c2c9fb22cea600b6c512eb18de3c"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.upsert_session (cognitive 34): SingleStoreDb.upsert_session has cognitive complexity 34 (threshold 15). Drivers by points: if/else 30, boolean chains 3, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd856692f1a1732a173aae9d1849b3943704bd96014f6678edc278e6016e9a1"}},{"ruleId":"D2","level":"warning","message":{"text":"AccuracyEval.run (cognitive 34): AccuracyEval.run has cognitive complexity 34 (threshold 15). Drivers by points: if/else 15, ternaries 13, boolean chains 5, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"3439e05925f922484b90ab8573acfce1adced1762bbede7e4bbf6bde042da921"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowRunOutput.from_dict (cognitive 34): WorkflowRunOutput.from_dict has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, loops 5, boolean chains 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":936}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6a13ca01af6b561c28ac907b5d4f662f1110a154ad7be28c67e0ed6162822b1"}},{"ruleId":"D2","level":"warning","message":{"text":"_default_tools.get_relevant_docs_from_knowledge (cognitive 34): _default_tools.get_relevant_docs_from_knowledge has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, boolean chains 5, error handling 3, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_default_tools.py"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8316e35016e0d5b2b64987cc557b5ef0af29a714e43dd6fbac2de6041b37f2d"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.aparse_response_with_parser_model_stream (cognitive 34): _response.aparse_response_with_parser_model_stream has cognitive complexity 34 (threshold 15). Drivers by points: if/else 22, loops 10, ternaries 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdad046ac128f2886fa0a3bfa5b13ad333b4823fa55565cddc77a68b67956c89"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._handle_team_run_cancellation (cognitive 34): _run._handle_team_run_cancellation has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, boolean chains 4, loops 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4334}}}],"partialFingerprints":{"codehealthFindingId/v1":"77dd5082b38f891e47711bcfd7ce8b6684ee5851c5dcb1125ab326affa6234e3"}},{"ruleId":"D2","level":"warning","message":{"text":"_storage._hydrate_from_graph (cognitive 34): _storage._hydrate_from_graph has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, loops 5, boolean chains 2, ternaries 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a53f2562d333646b5688d6189ecf806063de6e9687c3d7b7a8d5382a60bc3e"}},{"ruleId":"D2","level":"warning","message":{"text":"GithubTools.get_repository_with_stats (cognitive 34): GithubTools.get_repository_with_stats has cognitive complexity 34 (threshold 15). Drivers by points: if/else 12, error handling 8, loops 6, ternaries 6, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/github.py"},"region":{"startLine":993}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca8e2b3814c5463ac1718df64e627a52b02abb904d09eba81a1bc06188667ac"}},{"ruleId":"D2","level":"warning","message":{"text":"GmailTools._extract_body (cognitive 34): GmailTools._extract_body has cognitive complexity 34 (threshold 15). Drivers by points: if/else 30, boolean chains 3, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"52bc7e59b47df9eb1cb429e19e2adfdc6b503fb124128732a2722b635e2823c4"}},{"ruleId":"D2","level":"warning","message":{"text":"TelegramTools.__init__ (cognitive 34): TelegramTools.__init__ has cognitive complexity 34 (threshold 15). Drivers by points: boolean chains 16, if/else 16, ternaries 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/telegram.py"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"c476d2677a7fec0d8533024c6b0e995a5518a3f4459e5cbad85d18d2b69f1958"}},{"ruleId":"D2","level":"warning","message":{"text":"workflow.print_response (cognitive 34): workflow.print_response has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, ternaries 9, boolean chains 3, loops 2, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"0579904874624c854c0c08446f93b8c6a34dee67003c05ba54fc6f417581e6b4"}},{"ruleId":"D2","level":"warning","message":{"text":"workflow.aprint_response (cognitive 34): workflow.aprint_response has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, ternaries 9, boolean chains 3, loops 2, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d5fdd1013de424cac4f7da5db4119e8a6c4ce331e5565d8a406db5ace27320e"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_thinking_with_streaming_storage (cognitive 34): test_thinking.test_thinking_with_streaming_storage has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, loops 11, boolean chains 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/anthropic/test_thinking.py"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57aebad90526d3c7ea4011458a846a021e88bb1239b2cd5491130d0edb4c054"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_interleaved_thinking_streaming_with_storage (cognitive 34): test_thinking.test_interleaved_thinking_streaming_with_storage has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, loops 11, boolean chains 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/anthropic/test_thinking.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ff1ecad4538a2459811d375d744e7b65e660f6e44a1bb0dd87835aed195ed9e"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_thinking_with_streaming_storage (cognitive 34): test_thinking.test_thinking_with_streaming_storage has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, loops 11, boolean chains 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/vertexai/claude/test_thinking.py"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c8235f1c0fb7c6c14757c7bbdd1491fe3810d4a87b8a82ebaa15d3e5c716087"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_interleaved_thinking_streaming_with_storage (cognitive 34): test_thinking.test_interleaved_thinking_streaming_with_storage has cognitive complexity 34 (threshold 15). Drivers by points: if/else 19, loops 11, boolean chains 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/vertexai/claude/test_thinking.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"8679394ca01271868ae4e17a0820876b4e1b51009572a6fdeafe96f246ea3c95"}},{"ruleId":"D2","level":"warning","message":{"text":"A2AClient._build_message_request (cognitive 33): A2AClient._build_message_request has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20, loops 8, boolean chains 4, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"68747d6b32b9994c89b6212db52ffa0035c2a5b5379a8eb70a59d7fafa6367d5"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb._create_table (cognitive 33): AsyncPostgresDb._create_table has cognitive complexity 33 (threshold 15). Drivers by points: if/else 23, loops 6, error handling 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"b40f6c75942da4f4acc79915c79f7fa6f6730ed9854c6d9988709006bdefd7ec"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_trace_stats (cognitive 33): AsyncPostgresDb.get_trace_stats has cognitive complexity 33 (threshold 15). Drivers by points: if/else 17, ternaries 8, error handling 5, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2690}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b9289ba108bfa3129f4de46d8679e3d5b9c15c5c24e0d143239973752b06ce0"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_trace_stats (cognitive 33): PostgresDb.get_trace_stats has cognitive complexity 33 (threshold 15). Drivers by points: if/else 17, ternaries 8, error handling 5, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3163}}}],"partialFingerprints":{"codehealthFindingId/v1":"05e136977f34abdfa386a736ec60d300077b83120851126b640cb3255a348e5c"}},{"ruleId":"D2","level":"warning","message":{"text":"AccuracyEval.arun (cognitive 33): AccuracyEval.arun has cognitive complexity 33 (threshold 15). Drivers by points: if/else 14, ternaries 13, boolean chains 5, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e5408e378ec01372445060cbb469d61f08ad8bf2a5d23f80e7c4d2add71cbad"}},{"ruleId":"D2","level":"warning","message":{"text":"LearningMachine._deserialize_store_config (cognitive 33): LearningMachine._deserialize_store_config has cognitive complexity 33 (threshold 15). Drivers by points: if/else 17, error handling 10, loops 4, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":1098}}}],"partialFingerprints":{"codehealthFindingId/v1":"967c9909cd2b7c8efa90b7675e1bc651340c6023cade6d4bf2a69b190a74b1fb"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._populate_assistant_message (cognitive 33): Model._populate_assistant_message has cognitive complexity 33 (threshold 15). Drivers by points: if/else 28, boolean chains 3, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"026b9281a4c709b5d519847e9560b812fcada40c0d7aa903048ddfb507a87293"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_knowledge_instance (cognitive 33): utils.get_knowledge_instance has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20, boolean chains 8, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"96b995d229fd89a831078c24387714c6a753ed5561be79ebd961237ac6648bef"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks._execute_pre_hooks (cognitive 33): _hooks._execute_pre_hooks has cognitive complexity 33 (threshold 15). Drivers by points: error handling 12, if/else 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"f89058143bf44c6d1c572eb2aab2be53c68260a24a07cc1622f8447b1044a8b4"}},{"ruleId":"D2","level":"warning","message":{"text":"_hooks._execute_post_hooks (cognitive 33): _hooks._execute_post_hooks has cognitive complexity 33 (threshold 15). Drivers by points: error handling 12, if/else 12, loops 5, boolean chains 2, ternaries 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_hooks.py"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"de89fdfbd6b7bbef9347f1736347a6de53df93ddff128455431327620af890ff"}},{"ruleId":"D2","level":"warning","message":{"text":"apify.props_to_json_schema (cognitive 33): apify.props_to_json_schema has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20, loops 5, ternaries 5, boolean chains 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/apify.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bdd37ad2c969d08d4d9c78f3b87438409f6ee30db83b9e8a5909cfcfe86f9fb"}},{"ruleId":"D2","level":"warning","message":{"text":"OxylabsTools.search_google (cognitive 33): OxylabsTools.search_google has cognitive complexity 33 (threshold 15). Drivers by points: if/else 13, loops 8, boolean chains 7, ternaries 4, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f71faa6d48075f129bb9490acd14c4487be1a7e8755ad5cd911d0a3eb45108f"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.await_for_thread_tasks_stream (cognitive 33): agent.await_for_thread_tasks_stream has cognitive complexity 33 (threshold 15). Drivers by points: if/else 23, error handling 10 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec259a74b02f77f1ea25feea69c552908b746a22a0a4c0ee3e23c47d5d517c0"}},{"ruleId":"D2","level":"warning","message":{"text":"claude._format_file_for_message (cognitive 33): claude._format_file_for_message has cognitive complexity 33 (threshold 15). Drivers by points: if/else 20, ternaries 7, boolean chains 6 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba1feac7c5b77879e6b9e37bcb5ac4a453360bf5427dc8ff8177b5e0878cedaa"}},{"ruleId":"D2","level":"warning","message":{"text":"response.create_paused_run_output_panel (cognitive 33): response.create_paused_run_output_panel has cognitive complexity 33 (threshold 15). Drivers by points: loops 12, if/else 11, ternaries 9, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/response.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"598a8cc31658381516306098d4e5aa81f53bfcf0042e82f2222c390576023b70"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.async_insert (cognitive 33): LanceDb.async_insert has cognitive complexity 33 (threshold 15). Drivers by points: if/else 18, loops 8, ternaries 4, error handling 2, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"35417645f70787cdb6e2ba55022e69d25dabb6357d903bcac6f84d1ad06787a9"}},{"ruleId":"D2","level":"warning","message":{"text":"Parallel.aexecute_stream (cognitive 33): Parallel.aexecute_stream has cognitive complexity 33 (threshold 15). Drivers by points: if/else 15, boolean chains 13, loops 3, error handling 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"30577d3554b9aaf62c4047e633287163fb4c22486839dba23c9265438747286a"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraConfig.get_resources_from_file (cognitive 33): InfraConfig.get_resources_from_file has cognitive complexity 33 (threshold 15). Drivers by points: if/else 23, loops 8, boolean chains 1, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/config.py"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"3685665c59c056aa90c0f8eca2257e090d988033e76d78e0ac3fbcca50e8b5c4"}},{"ruleId":"D2","level":"warning","message":{"text":"studio_hitl_agent_os.resolve_paused_tools (cognitive 32): studio_hitl_agent_os.resolve_paused_tools has cognitive complexity 32 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 6, ternaries 4 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/22_studio/studio_hitl_agent_os.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"941c56d56f6bde5056cff3272643a79e79e0400134a17191580ed7c20b187140"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb._ensure_client (cognitive 32): AsyncMongoDb._ensure_client has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, boolean chains 6, ternaries 3, loops 2, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ded39bf517128851ec10c1e255797f252d71d06461f10f90107cb79cfcbf788"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.upsert_memories (cognitive 32): AsyncMongoDb.upsert_memories has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, loops 3, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1442}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1bcc0cd18babdc2f0750f8ad549acbcc4950fcf86dd4858d470b7cd5f1851c9"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.upsert_memories (cognitive 32): MongoDb.upsert_memories has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, loops 3, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1226}}}],"partialFingerprints":{"codehealthFindingId/v1":"490085dacd7fdcc280237f323dbc9addf4b4fa13a042daf9d6c716e977a30e20"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb._create_table (cognitive 32): AsyncSqliteDb._create_table has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, loops 6, error handling 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e0fc22046274f1ee8b8b3a90b3108af0ae3ff6413ffe3511509d5cc9ee78f5"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 32): utils.calculate_date_metrics has cognitive complexity 32 (threshold 15). Drivers by points: if/else 14, loops 11, ternaries 4, boolean chains 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/utils.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d6d7ed1ad314eaff68b0e6586daed81a9b79ec685528931e94505271aa87ea2"}},{"ruleId":"D2","level":"warning","message":{"text":"SurrealDb.upsert_trace (cognitive 32): SurrealDb.upsert_trace has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, boolean chains 6, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1469}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e247b36246271ddb43e19a8233a904eba9b6178e97bc187c63469e1a759afa"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.deserialize_session_json_fields (cognitive 32): utils.deserialize_session_json_fields has cognitive complexity 32 (threshold 15). Drivers by points: error handling 16, boolean chains 8, if/else 8 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/utils.py"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"126ccf61364d7284e43c234d8ed8c3dd34b21efb6e4518c72e4eb232fd09b506"}},{"ruleId":"D2","level":"warning","message":{"text":"_validate.validate_sft_jsonl (cognitive 32): _validate.validate_sft_jsonl has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, boolean chains 5, loops 3, error handling 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/exporters/_validate.py"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9c5ec933d9a87bba6a4bf79dd58ae44c09e223f8f23af883e6f205c4f5cd789"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._forget_edge (cognitive 32): EntityMemoryStore._forget_edge has cognitive complexity 32 (threshold 15). Drivers by points: if/else 18, ternaries 7, boolean chains 6, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2352}}}],"partialFingerprints":{"codehealthFindingId/v1":"5291ffd6472ccb370ecc1293ed210ce310bf32edcdfc2a0219354afcdb4feab7"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini._format_video_for_message (cognitive 32): Gemini._format_video_for_message has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, boolean chains 5, loops 3, error handling 2, ternaries 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0704547967262b4c9b9e8e368fdfcda9fced0e3ac7f5417a96332b50da5445"}},{"ruleId":"D2","level":"warning","message":{"text":"MoonShot._format_message (cognitive 32): MoonShot._format_message has cognitive complexity 32 (threshold 15). Drivers by points: if/else 18, ternaries 6, boolean chains 4, loops 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/moonshot/moonshot.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"65eb11a75cdb4c43788116e87b2346ba7ef3f398876cc0406a49255e6ca78bf1"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseWorkflowRunOutputEvent.to_dict (cognitive 32): BaseWorkflowRunOutputEvent.to_dict has cognitive complexity 32 (threshold 15). Drivers by points: ternaries 12, if/else 11, boolean chains 9 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5417b425755d8bdd1292cd48e627e54b7379c51dc5d268feca51a66528ab61"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._build_trailing_sections (cognitive 32): _messages._build_trailing_sections has cognitive complexity 32 (threshold 15). Drivers by points: if/else 19, boolean chains 9, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"8870483ffb5b61e4b348169a56fd9e9053664bcef7f39d19733aa0bec66b6452"}},{"ruleId":"D2","level":"warning","message":{"text":"OxylabsTools.search_amazon_products (cognitive 32): OxylabsTools.search_amazon_products has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15, loops 9, boolean chains 7, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"77408f04eab95b99d8b1f01067c183ba645898153a37e9a07c8ad32c4ab26a16"}},{"ruleId":"D2","level":"warning","message":{"text":"XTools.search_posts (cognitive 32): XTools.search_posts has cognitive complexity 32 (threshold 15). Drivers by points: ternaries 19, if/else 6, loops 4, error handling 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/x.py"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e23a892672f65f067b9dd8dfccc0bd74260da74036bcdb29faa4c56872b17b3"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.async_insert (cognitive 32): MongoDb.async_insert has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12, error handling 11, ternaries 4, loops 3, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"6db8f20f30df49349a92c18fc5be9afee5473d3b0e0e92b14667bdcbe5b18138"}},{"ruleId":"D2","level":"warning","message":{"text":"Step.__init__ (cognitive 32): Step.__init__ has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, boolean chains 7 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"8565c3b29d94cf86e9fd71ad5c86a58f6601bf820397e1bf37e8b1e034367ce3"}},{"ruleId":"D2","level":"warning","message":{"text":"Step._convert_image_artifacts_to_images (cognitive 32): Step._convert_image_artifacts_to_images has cognitive complexity 32 (threshold 15). Drivers by points: if/else 24, error handling 7, loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2879}}}],"partialFingerprints":{"codehealthFindingId/v1":"196fd4f432fce8a42b91e357f3956b98209416437f8d3af725e11da1e3d24c27"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseExternalAgent._arun_stream (cognitive 31): BaseExternalAgent._arun_stream has cognitive complexity 31 (threshold 15). Drivers by points: if/else 12, boolean chains 9, ternaries 6, error handling 3, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eadced07abd63cc95ea86ccc03b16a96274541fbc5ac371ec9859d240c25cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.get_trace_stats (cognitive 31): FirestoreDb.get_trace_stats has cognitive complexity 31 (threshold 15). Drivers by points: if/else 26, boolean chains 2, loops 2, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":2127}}}],"partialFingerprints":{"codehealthFindingId/v1":"f757c56ed912e669d602a4a246edfaf13ed69b79f81cac416c75ef595e96c93c"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 31): utils.calculate_date_metrics has cognitive complexity 31 (threshold 15). Drivers by points: if/else 18, loops 11, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/utils.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"beffc8ee2944c317ca669aeea692e581710766446f167e00f9bd30d0a9947a9d"}},{"ruleId":"D2","level":"warning","message":{"text":"v1_to_v2.get_table_content_in_batches (cognitive 31): v1_to_v2.get_table_content_in_batches has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, loops 4, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"25e4ae85b0df41f201626dd412705902fd79f29501cbd9ca0d1eebeb7f4ab884"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.get_sessions (cognitive 31): RedisDb.get_sessions has cognitive complexity 31 (threshold 15). Drivers by points: if/else 27, boolean chains 3, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"464e49c5e428af545534dd6134546911b486d4ffd8344c878bf942c96913c903"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_sessions (cognitive 31): ValkeyDb.get_sessions has cognitive complexity 31 (threshold 15). Drivers by points: if/else 27, boolean chains 3, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8a5912c45e519896352a54db5ae9d444b61a23408248a13d4ad52a82284e958"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._populate_registry (cognitive 31): AgentOS._populate_registry has cognitive complexity 31 (threshold 15). Drivers by points: if/else 27, loops 4 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"c99d5b282a2d09f20d10a4b267ceda2e3441365b172824190f5416b927865a56"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_session_name (cognitive 31): utils.get_session_name has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17, boolean chains 4, ternaries 4, error handling 3, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcfbd7d0b581814755b806f46239bcea7dc3388a082069ca4552aed596666b3e"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseRunOutputEvent.from_dict (cognitive 31): BaseRunOutputEvent.from_dict has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, ternaries 4, loops 2 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/base.py"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"140dbb1af17426125a731e139f74ec36cb26427a7d355d2015c45785d38ac486"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentSession.get_tool_calls (cognitive 31): AgentSession.get_tool_calls has cognitive complexity 31 (threshold 15). Drivers by points: if/else 16, loops 12, boolean chains 3 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/agent.py"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5f55b331b6546d8ead0f79a0fbb9d87cb3f9f2f68ec7bae5202fcfc94443821"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._continue_run_dispatch_stream_with_member_events (cognitive 31): _run._continue_run_dispatch_stream_with_member_events has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13, boolean chains 8, error handling 6, ternaries 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6882}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f2186f4b173be7d166729573cde25850e12d6d2e94e562ecd95c6e37943fe2"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.find_available_slots (cognitive 31): GoogleCalendarTools.find_available_slots has cognitive complexity 31 (threshold 15). Drivers by points: if/else 18, boolean chains 4, error handling 4, loops 4, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ad2d0604c0b9d330cfed575b46fc642295c2d3532180ae96ec46d2c056c5e07"}},{"ruleId":"D2","level":"warning","message":{"text":"OxylabsTools.scrape_website (cognitive 31): OxylabsTools.scrape_website has cognitive complexity 31 (threshold 15). Drivers by points: if/else 13, ternaries 11, error handling 5, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"fae970a477cf6614fc833ce6a42a3e954c0be37b7087dd410c19789be838cf20"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelTools.parallel_extract (cognitive 31): ParallelTools.parallel_extract has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, boolean chains 3, error handling 2, loops 2, ternaries 1 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/parallel.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c73c96285dd04513d4b429cafb603cf494759149be00f3da98d977c8944306a"}},{"ruleId":"D2","level":"warning","message":{"text":"gemini.has_self_reference (cognitive 31): gemini.has_self_reference has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, loops 9 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/gemini.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"cac54a16acda103ac539d95cd5c92a4290b7fd789807b4f13d942d968122e0e4"}},{"ruleId":"D2","level":"warning","message":{"text":"claude._format_image_for_message (cognitive 31): claude._format_image_for_message has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, error handling 4, boolean chains 2, ternaries 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"985d7e68ff3cb82af987ca3096a7e9ef981c1605bc8ddd687ef5a966eff25d4f"}},{"ruleId":"D2","level":"warning","message":{"text":"Steps.execute (cognitive 31): Steps.execute has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, boolean chains 4, error handling 2, ternaries 2, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c4e76cea064fe96825a77cb222f2b220bb26eacd0b97f1741079321d6cf479c"}},{"ruleId":"D2","level":"warning","message":{"text":"Steps.aexecute (cognitive 31): Steps.aexecute has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, boolean chains 4, error handling 2, ternaries 2, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"518a6fde91006f2c455b8e8341d055dafd33c484ed4d8be15cd14f0b1fec81f7"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._enrich_event_with_workflow_context (cognitive 31): Workflow._enrich_event_with_workflow_context has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, boolean chains 7, ternaries 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1800}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd228794fb1dcfafedd5d81a7d1a9dfab36b7df379938746e3009ca39a1d6873"}},{"ruleId":"D2","level":"warning","message":{"text":"file_search_rag_pipeline.query_with_citations (cognitive 30): file_search_rag_pipeline.query_with_citations has cognitive complexity 30 (threshold 15). Drivers by points: if/else 21, loops 7, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/90_models/google/gemini/file_search_rag_pipeline.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"7783e79e05a333766a5c7fecd6dc7c3be35c0f42f9da80c569fae9ce71a736ab"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.parse_response_with_parser_model_stream (cognitive 30): _response.parse_response_with_parser_model_stream has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 6, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"89882da3e31799a92eaa9231be6e68533b5df3a68934f0c1095d71b158e61e73"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.build_messages_with_history (cognitive 30): utils.build_messages_with_history has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16, error handling 7, loops 7 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/langgraph/utils.py"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef4ef3c3c5af25b0ad7e8eb527105073fa52b7b1ca041f7c5564f50b8a9aeec"}},{"ruleId":"D2","level":"warning","message":{"text":"v1_to_v2.convert_v1_media_to_v2 (cognitive 30): v1_to_v2.convert_v1_media_to_v2 has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17, boolean chains 7, error handling 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5ee42b0e57e8a1f73075e97032f1dc8ce87f6245af3f49aa8652ca42e49ef7f"}},{"ruleId":"D2","level":"warning","message":{"text":"v1_to_v2.convert_v1_fields_to_v2 (cognitive 30): v1_to_v2.convert_v1_fields_to_v2 has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, boolean chains 4, ternaries 4, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba29988d5a6e53d3dc46fd619b50e5d4e57dc3004b11cccc5cf6f69eea3d303c"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 30): utils.calculate_date_metrics has cognitive complexity 30 (threshold 15). Drivers by points: if/else 18, loops 11, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/utils.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1e0967de681b6608927891da691d1313190723fc6d5812fd4ef507c06c4161"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.get_eval_runs (cognitive 30): RedisDb.get_eval_runs has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, boolean chains 8, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1436}}}],"partialFingerprints":{"codehealthFindingId/v1":"d507de68263f419911abe6b25cd4f86df4477b7ecb49d638535c255fa7671a13"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.get_trace_stats (cognitive 30): RedisDb.get_trace_stats has cognitive complexity 30 (threshold 15). Drivers by points: if/else 21, boolean chains 6, loops 2, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1973}}}],"partialFingerprints":{"codehealthFindingId/v1":"248c0a2bf6d8759485885de9ddd2db66fa5157f7a1a8fd2c8a569001ebe52424"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_trace_stats (cognitive 30): AsyncSqliteDb.get_trace_stats has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17, error handling 5, ternaries 5, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2873}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f2851f24e6dcf4c65fffe905c023861ab6b6212f27861972c76afbb0cc8d05"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_trace_stats (cognitive 30): SqliteDb.get_trace_stats has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17, error handling 5, ternaries 5, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2783}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d628f551fd9c88efdaefd76de0bba43c18d0cda621f361e6a984bfbcdbe3495"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_eval_runs (cognitive 30): ValkeyDb.get_eval_runs has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, boolean chains 8, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1866}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c27e6dc03783c7132e8373d35be72baadbcdde727626f73a650535d0afb6b9"}},{"ruleId":"D2","level":"warning","message":{"text":"GitHubLoader._aload_from_github (cognitive 30): GitHubLoader._aload_from_github has cognitive complexity 30 (threshold 15). Drivers by points: if/else 21, error handling 4, loops 4, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a017dc9fbf9dde8332960a3ae0853b14aeb65236ea7f7ebcc2e8862f0a5224"}},{"ruleId":"D2","level":"warning","message":{"text":"GitHubLoader._load_from_github (cognitive 30): GitHubLoader._load_from_github has cognitive complexity 30 (threshold 15). Drivers by points: if/else 21, error handling 4, loops 4, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e6df48d2aba49b3125d7c14e077b58c67b651cbe749681c37b56a8d43f8af1"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionLogStore._filter_decisions (cognitive 30): DecisionLogStore._filter_decisions has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, error handling 3, boolean chains 2, ternaries 2, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":824}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7b058fff25adfad8ba252a366dd3bc4d9d9949c6fafd901148bb879cd4f0126"}},{"ruleId":"D2","level":"warning","message":{"text":"UserProfileStore._get_system_message (cognitive 30): UserProfileStore._get_system_message has cognitive complexity 30 (threshold 15). Drivers by points: if/else 18, loops 9, boolean chains 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_profile.py"},"region":{"startLine":1030}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb8ca3812634190964f534f6353b96f8a77d35967c78c1e62f550056ebe7f7b"}},{"ruleId":"D2","level":"warning","message":{"text":"Cohere.get_request_params (cognitive 30): Cohere.get_request_params has cognitive complexity 30 (threshold 15). Drivers by points: if/else 23, loops 4, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cohere/chat.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0e8241006fda385da4736f5d70eefb11ab5f9aa76d420aeefa2b9322c9a88f8"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.parse_response_with_parser_model_stream (cognitive 30): _response.parse_response_with_parser_model_stream has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 6, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a1c5751dc9965ce0da63309953c944b46f842f0046c2074d1b016543dcdfe77"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenCVTools.capture_video (cognitive 30): OpenCVTools.capture_video has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, boolean chains 3, error handling 3, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/opencv.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"a22e3f45d5e94e042e0b0be95b9089615122356db628781d06d956014e313ccd"}},{"ruleId":"D2","level":"warning","message":{"text":"PineconeDb._prepare_vectors (cognitive 30): PineconeDb._prepare_vectors has cognitive complexity 30 (threshold 15). Drivers by points: if/else 17, error handling 5, ternaries 4, loops 3, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pineconedb/pineconedb.py"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db11fe8e594ecccf206fabb2027545eb15ad91bfa6f0156895f48b31ee49718"}},{"ruleId":"D2","level":"warning","message":{"text":"Weaviate.async_insert (cognitive 30): Weaviate.async_insert has cognitive complexity 30 (threshold 15). Drivers by points: if/else 12, error handling 7, ternaries 6, loops 3, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/weaviate/weaviate.py"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"386b42db7d78f1619a7674a6616a47d54e1e9a118f84583c99b486c2e253d2b4"}},{"ruleId":"D2","level":"warning","message":{"text":"Router.execute (cognitive 30): Router.execute has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, error handling 4, boolean chains 3, ternaries 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a1a16bc803e00d10b53c045a61312c1f4424f6c3b4ee8ce3150ca0d766060c"}},{"ruleId":"D2","level":"warning","message":{"text":"Router.aexecute (cognitive 30): Router.aexecute has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, error handling 4, boolean chains 3, ternaries 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":999}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7f7146b71f38f66425ca8ab4b1fb07366d1ee2d7b5f60585a7f4737fb139257"}},{"ruleId":"D2","level":"warning","message":{"text":"StepInput.get_step_content (cognitive 30): StepInput.get_step_content has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16, loops 7, boolean chains 5, ternaries 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/types.py"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"272393fe632a672b8e34fb39c224000f2cf5f83a1fe23cd4634b2aff1e92b687"}},{"ruleId":"D2","level":"warning","message":{"text":"workflow._find_inner_step_by_executor (cognitive 30): workflow._find_inner_step_by_executor has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, boolean chains 8, loops 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d77cb4a725fc1e112a524bce3a856d6bb9196795e0fc38559adac71019606a1"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_thinking_with_storage (cognitive 30): test_thinking.test_thinking_with_storage has cognitive complexity 30 (threshold 15). Drivers by points: if/else 18, loops 10, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/ollama/test_thinking.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4c3287e6b41c799e266fe668316aa9683655d940eb85fc561a784d7027ad085"}},{"ruleId":"D2","level":"warning","message":{"text":"ClaudeAgent._arun_adapter (cognitive 29): ClaudeAgent._arun_adapter has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19, boolean chains 6, loops 4 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/claude/agent.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"5115d63b7a4da8173ade8fdbf4b71f5a2f12ecd9a5198896b8893ae795b2c34b"}},{"ruleId":"D2","level":"warning","message":{"text":"filter_converter.filter_expr_to_sqlalchemy (cognitive 29): filter_converter.filter_expr_to_sqlalchemy has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, boolean chains 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/filter_converter.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"914df415b27eee95b9ac343615cbc703056eee445bd8f8a4bccd98d7767ea7e3"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.upsert_trace (cognitive 29): FirestoreDb.upsert_trace has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, boolean chains 7, error handling 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1891}}}],"partialFingerprints":{"codehealthFindingId/v1":"bea102dd633210df82671a4665ae35c77d44e9f6fb0b387991cb7d8db248cb1d"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.upsert_trace (cognitive 29): GcsJsonDb.upsert_trace has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, boolean chains 6, error handling 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1389}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de9c9331fd7a57b7cc7507a3d43a6228f03413439727775d82ef9247a50d56d"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.upsert_trace (cognitive 29): JsonDb.upsert_trace has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, boolean chains 6, error handling 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"f923f73d9f6c3f92c2e2b6900203bc1ecad3cbbda3f492b6d32e1adb2f98f7c8"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_all_keys_for_table (cognitive 29): utils.get_all_keys_for_table has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13, loops 10, ternaries 6 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/utils.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"6352155752fafe97c1a038dc2367da0e0ea7e08119578a45340862ac5acd1a82"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsBedrock.get_async_client (cognitive 29): AwsBedrock.get_async_client has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, boolean chains 8 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4e3887582020073b4acbd1eb3802fb6a0179ac02faecffcacc2d7b2cc60a23"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_agent_by_id (cognitive 29): utils.get_agent_by_id has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":840}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c10525c3e211637cdc00a188a7e4f56c955895afd95bfd999d23a31a539131b"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_agent_by_id_async (cognitive 29): utils.get_agent_by_id_async has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"535d3077a60a781399b182d032b4eb32c44626aeb4aa26662954562002faab95"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_team_by_id (cognitive 29): utils.get_team_by_id has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"688dd9060dafb1c1dd09647663369ead5b6a1b53969c45e3ada5ce3e61cec4a7"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_team_by_id_async (cognitive 29): utils.get_team_by_id_async has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"73b81f655046b5ffe3216ecea3e88ab4a76981f6860fb91d3add1eaae90df9ce"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_workflow_by_id (cognitive 29): utils.get_workflow_by_id has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1046}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ad4de20aab7097a6d34b18d7fc1fc359bb0fd493310487b5b0d19f3c93bf7ed"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_workflow_by_id_async (cognitive 29): utils.get_workflow_by_id_async has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, error handling 2, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1107}}}],"partialFingerprints":{"codehealthFindingId/v1":"4061515c4b73729705850bfa07b3ae13be2f45843b66a08a49f6026b5f1ccafb"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._get_continue_run_messages (cognitive 29): _run._get_continue_run_messages has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15, loops 6, ternaries 6, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4920}}}],"partialFingerprints":{"codehealthFindingId/v1":"7804a8acaf32bf78da97c54833d912ca4a089a2efb535f367e8ed441c0b1d069"}},{"ruleId":"D2","level":"warning","message":{"text":"FileGenerationTools.generate_csv_file (cognitive 29): FileGenerationTools.generate_csv_file has cognitive complexity 29 (threshold 15). Drivers by points: if/else 20, loops 7, boolean chains 1, error handling 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file_generation.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffec07303475eeb7671bc0395bc820b3f2c6ec86b58aebf4155159e629bdb7fa"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleSheetsTools.__init__ (cognitive 29): GoogleSheetsTools.__init__ has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17, boolean chains 8, ternaries 4 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/sheets.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eddecbf66472a5049aa9b24e11f2b1f21db317c264c89300ffaf4630ad8e193"}},{"ruleId":"D2","level":"warning","message":{"text":"SalesforceTools.__init__ (cognitive 29): SalesforceTools.__init__ has cognitive complexity 29 (threshold 15). Drivers by points: boolean chains 17, if/else 11, ternaries 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/salesforce.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ad75418111c6dbe220a1ffddcdf43edffdf98190937cd82c5441fa5778d2558"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb._search_index_exists (cognitive 29): MongoDb._search_index_exists has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16, loops 6, error handling 4, boolean chains 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"764ec89a9f6226b37508aba00165737add6d433e5cbe9590022f966841e04eba"}},{"ruleId":"D2","level":"warning","message":{"text":"Step._execute_nested_workflow_stream_inner (cognitive 29): Step._execute_nested_workflow_stream_inner has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13, boolean chains 8, ternaries 7, loops 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2496}}}],"partialFingerprints":{"codehealthFindingId/v1":"39273876b559c940acef738c64f7e5234ce40c013995765c1777b97c4d229bde"}},{"ruleId":"D2","level":"warning","message":{"text":"Step._aexecute_nested_workflow_stream_inner (cognitive 29): Step._aexecute_nested_workflow_stream_inner has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13, boolean chains 8, ternaries 7, loops 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2766}}}],"partialFingerprints":{"codehealthFindingId/v1":"d33a82c14c68ad2f48397f6632b681484862b098bb54df7e2f1a4b87aa551b55"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_thinking_with_storage (cognitive 29): test_thinking.test_thinking_with_storage has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17, loops 10, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/anthropic/test_thinking.py"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"094eff772dc111c6b0f9d180050b2274d0718b8390cbe232bceb1253710682f0"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_interleaved_thinking_with_storage (cognitive 29): test_thinking.test_interleaved_thinking_with_storage has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17, loops 10, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/anthropic/test_thinking.py"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"afaad035948024abe928c0324c8ea98ba05c5886df907398c9abb0f3f734e2b2"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_thinking_with_storage (cognitive 29): test_thinking.test_thinking_with_storage has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17, loops 10, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/vertexai/claude/test_thinking.py"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"a525ffb73b33eee257dcc9f8f92710c225fa0ec47ce083d0bcca467602a5cee6"}},{"ruleId":"D2","level":"warning","message":{"text":"test_thinking.test_interleaved_thinking_with_storage (cognitive 29): test_thinking.test_interleaved_thinking_with_storage has cognitive complexity 29 (threshold 15). Drivers by points: if/else 17, loops 10, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/models/vertexai/claude/test_thinking.py"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d97ddd281e25ea7cdcfeb9ad1a1c61bcd95f1789a51ff8838a602f976e99a2c"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_continue_run_messages (cognitive 28): _messages.get_continue_run_messages has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15, loops 6, ternaries 6, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"360e893f54b786e5e7e302423421e007b2885eb60ca1abdf0283c81c37eee283"}},{"ruleId":"D2","level":"warning","message":{"text":"DSPyAgent._arun_adapter_stream (cognitive 28): DSPyAgent._arun_adapter_stream has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12, boolean chains 6, ternaries 5, loops 4, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/dspy/agent.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4270ba8119a6c91607069117e2c5aee15394af0a1bafb7f1a4773fe83dc9680"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_traces (cognitive 28): DynamoDb.get_traces has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17, loops 5, boolean chains 3, ternaries 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2374}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f9746e9a08e53b99cc5a57852bdad1774301aafccf7374a080cd399c4294084"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.upsert_session (cognitive 28): AsyncMongoDb.upsert_session has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, error handling 7, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"7554d093049741fbd98fc6a6e8f0e39380162025476f832464b8e7086df2d4b5"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.upsert_session (cognitive 28): MongoDb.upsert_session has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, error handling 7, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"2544f9f6df2e2e06dc0faaee25cafbb167feb88bc65d1e720363f0a8dbf03a9a"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_span_stats (cognitive 28): AsyncPostgresDb.get_span_stats has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15, ternaries 8, boolean chains 3, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3010}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dea64eb4fbefb68923c02d97b7ffe90d15fadf98bd854243715c02460aa4075"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_span_stats (cognitive 28): PostgresDb.get_span_stats has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15, ternaries 8, boolean chains 3, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3481}}}],"partialFingerprints":{"codehealthFindingId/v1":"9430bdb997aaeb05e3cc30e7afb6adffa7b301126521f01047386f9128158fd0"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.upsert_component (cognitive 28): SqliteDb.upsert_component has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, ternaries 7, boolean chains 2, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3554}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8cdadcbf152c8fe7bc3e201160f79377f27c699b930c47a8f979d0c028938a3"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionContextStore.print (cognitive 28): SessionContextStore.print has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, loops 6, boolean chains 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":1189}}}],"partialFingerprints":{"codehealthFindingId/v1":"7babc43910ac0a593823532bc84c6fc0738df861ed4a420829903962e5a5f0ea"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat._format_message (cognitive 28): OpenAIChat._format_message has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, boolean chains 5, loops 2, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff1639a558a26f05d251c26aa582b0639fb4fc27c932965a4dd8528b057a631"}},{"ruleId":"D2","level":"warning","message":{"text":"RedmineTools.__init__ (cognitive 28): RedmineTools.__init__ has cognitive complexity 28 (threshold 15). Drivers by points: boolean chains 15, if/else 13. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e129790ed7968c42e2bd81f65f53c489d3fba60a2ce540507076bf377bb713e3"}},{"ruleId":"D2","level":"warning","message":{"text":"RedshiftTools._get_connection_kwargs (cognitive 28): RedshiftTools._get_connection_kwargs has cognitive complexity 28 (threshold 15). Drivers by points: if/else 28 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redshift.py"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"4413d495f3ddbf48fde96f931226e429c52ab5ec3dc1a690b50ae1f6d76e0179"}},{"ruleId":"D2","level":"warning","message":{"text":"ShopifyTools.get_product_sales_breakdown (cognitive 28): ShopifyTools.get_product_sales_breakdown has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, loops 5, boolean chains 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/shopify.py"},"region":{"startLine":776}}}],"partialFingerprints":{"codehealthFindingId/v1":"861b170f6d3368b079e64f30c315dc1f12ba4e0c2e591f641e533dca566627f8"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualizationTools._normalize_data_for_charts (cognitive 28): VisualizationTools._normalize_data_for_charts has cognitive complexity 28 (threshold 15). Drivers by points: if/else 13, ternaries 11, loops 3, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/visualization.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"161aa9fda204cfebcbf644ce1e464c99cefc6054776aa6a1410371f3614556b5"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.wait_for_thread_tasks_stream (cognitive 28): agent.wait_for_thread_tasks_stream has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, error handling 10 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"b618b620feac2cac65a2a63f40daddc2d5387138f89c834c6bc51a65c3a9a7b7"}},{"ruleId":"D2","level":"warning","message":{"text":"functions.get_function_call (cognitive 28): functions.get_function_call has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, error handling 6, boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/functions.py"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e043ca2e91a62f4ba04a78fc98f68f596f06d8185d9bf94b63e40e3d1fbd7dc"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.search (cognitive 28): LanceDb.search has cognitive complexity 28 (threshold 15). Drivers by points: if/else 19, loops 6, boolean chains 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3e346377f61ba6367d56078d3a45e827386475a81626afcecb0d63e99abc3d"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.update_agents_and_teams_session_info (cognitive 28): Workflow.update_agents_and_teams_session_info has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, loops 7, ternaries 2, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10235}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7c60cf76b503985de188fda44879b8368ffb447b5a83dcbb96b04c8adfa8a9"}},{"ruleId":"D2","level":"warning","message":{"text":"disconnect._report (cognitive 28): disconnect._report has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12, boolean chains 6, loops 5, ternaries 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/disconnect.py"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a5dff332b26df61fd1fcff4f86a72f9558ab27c2854ddee5227994d99aafd2d"}},{"ruleId":"D2","level":"warning","message":{"text":"__main__._run_case_async (cognitive 27): __main__._run_case_async has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, error handling 5, boolean chains 2, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/01_demo/evals/__main__.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc9e9043578dcbbbdd32f25c170748d00438194df80d73ef34174b2489c75758"}},{"ruleId":"D2","level":"warning","message":{"text":"notion_ops.markdown_to_blocks (cognitive 27): notion_ops.markdown_to_blocks has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18, loops 7, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/notion_ops.py"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffc3023d314493f924fba1b6e5300bf05fbaa14eb4cec4ea9de236cf4bd23f5a"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb._get_metrics_calculation_starting_date (cognitive 27): DynamoDb._get_metrics_calculation_starting_date has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, loops 4, boolean chains 2, error handling 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1266}}}],"partialFingerprints":{"codehealthFindingId/v1":"73dab2d6549fbbf2df21f9e97c8a0e25f939425af1ef303c54573258e7633323"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.upsert_trace (cognitive 27): DynamoDb.upsert_trace has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, boolean chains 6, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2195}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfdd27a64298f39b452db8f677dd7f7f024045756b1a927a6f4dacfd8ba5431d"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_spans (cognitive 27): DynamoDb.get_spans has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11, boolean chains 7, loops 7, error handling 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2819}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac538c5cf638080e875c29c3b8fc3fc7ba58d45236eead01d8503985e5d59130"}},{"ruleId":"D2","level":"warning","message":{"text":"MigrationManager.down (cognitive 27): MigrationManager.down has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, loops 3, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/manager.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"5347865a705850ef89fe6a3216f8d3acc360fae45c34dc5a3f2335e4800826e9"}},{"ruleId":"D2","level":"warning","message":{"text":"AccuracyEval.arun_with_output (cognitive 27): AccuracyEval.arun_with_output has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 15, if/else 10, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0802532644a3f039c1ebc2a2efb2caccba11370332835323cff7b0259a38fdd"}},{"ruleId":"D2","level":"warning","message":{"text":"suite.arun_cases (cognitive 27): suite.arun_cases has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11, error handling 9, ternaries 4, loops 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"faadc0ad53a07321d857eaeca8d9fa5fb6a456b6d63fd575d1c08b2e39dfd5d9"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkdownChunking.chunk (cognitive 27): MarkdownChunking.chunk has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, loops 6, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/markdown.py"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"377ea358f9a4d48f43675a66a40ab2c8aa1a4f3fe69596f891bad7ceb5df0436"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aupdate_content (cognitive 27): Knowledge._aupdate_content has cognitive complexity 27 (threshold 15). Drivers by points: if/else 26, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2575}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9ad777d3ebc0a115ed63376a177f45e7541846a7f38f6b6f3f829fb23fcd2ad"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._extract_step_result (cognitive 27): GeminiInteractions._extract_step_result has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 2, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fddc53ee09a40926968d5fee78c76caf02fb8ef2f123872a8a715530a242d0"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.map_a2a_request_to_run_input (cognitive 27): utils.map_a2a_request_to_run_input has cognitive complexity 27 (threshold 15). Drivers by points: if/else 17, ternaries 5, error handling 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"9754f346e4defd0a5f9d5259ea3c51490cea90f91e99c5bef6bc5190d9abb12c"}},{"ruleId":"D2","level":"warning","message":{"text":"knowledge.process_content (cognitive 27): knowledge.process_content has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11, error handling 7, boolean chains 3, loops 3, ternaries 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":1477}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ffaa6a34bcadadc629ddd8a416ca9914f14504cf83fd33ea4136d8cfa35dd02"}},{"ruleId":"D2","level":"warning","message":{"text":"openai.get_openai_reasoning_stream (cognitive 27): openai.get_openai_reasoning_stream has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, boolean chains 3, loops 2, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/openai.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa11105e10d901b60137b05d024cb7a2fee93795488fa69d294fe352304f0a43"}},{"ruleId":"D2","level":"warning","message":{"text":"openai.aget_openai_reasoning_stream (cognitive 27): openai.aget_openai_reasoning_stream has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, boolean chains 3, loops 2, error handling 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/openai.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"3785783cacbab0ceb7d4a334f2a49019e22695560d85a4145082a997ff1949a2"}},{"ruleId":"D2","level":"warning","message":{"text":"CartesiaTools.list_voices (cognitive 27): CartesiaTools.list_voices has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 13, error handling 7, if/else 5, loops 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/cartesia.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d432d2071a31b099aaaedf76559d62c59df8e009b0d8509f09f1f0828fdeec"}},{"ruleId":"D2","level":"warning","message":{"text":"CodingTools._check_command (cognitive 27): CodingTools._check_command has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, error handling 7, boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"1218ad1bd0264fa6282ba1ca403a286d54f4d35ca01a8e56605f64d4ce6f7da9"}},{"ruleId":"D2","level":"warning","message":{"text":"FileGenerationTools.__init__ (cognitive 27): FileGenerationTools.__init__ has cognitive complexity 27 (threshold 15). Drivers by points: boolean chains 14, if/else 11, ternaries 2 (nesting depth added 1). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file_generation.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e2ebed4bc356540b835993324ed98743f06433ac127aedc74817eaa3255fde8"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.fetch_all_events (cognitive 27): GoogleCalendarTools.fetch_all_events has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, error handling 7, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"28da5731f525e168582a64e4919669dfdfc302280d8ab615c154f1b9a5186d99"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleDriveTools.__init__ (cognitive 27): GoogleDriveTools.__init__ has cognitive complexity 27 (threshold 15). Drivers by points: if/else 24, boolean chains 3 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/drive.py"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab260e5ea74f0040ec0e1f41a02397dd8188ee3fd51a5921b723f95eee4ee49b"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiMCPTools.get_session_for_run (cognitive 27): MultiMCPTools.get_session_for_run has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18, error handling 6, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"f12e3b0d09720b0c4b0a7b24f8e4c4549ac21ed13678196661c61c1d12d4a89c"}},{"ruleId":"D2","level":"warning","message":{"text":"Toolkit._register_decorated_tool (cognitive 27): Toolkit._register_decorated_tool has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14, boolean chains 8, ternaries 3, error handling 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/toolkit.py"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"77567f450fcb9a16600b67ca6e188ea0c4bf3fa416ea1df71fbe27786d0f9b9d"}},{"ruleId":"D2","level":"warning","message":{"text":"message.filter_tool_calls (cognitive 27): message.filter_tool_calls has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, boolean chains 2, loops 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"884505a0333b6d28e38edba32e60a1b85dd73a4ac87efacedbe93680e60bd09f"}},{"ruleId":"D2","level":"warning","message":{"text":"llama.format_message (cognitive 27): llama.format_message has cognitive complexity 27 (threshold 15). Drivers by points: if/else 12, ternaries 7, boolean chains 6, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/llama.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f5f27ef96c9a779bdccd3b4072c679d451902f91c24c042551aeecc1706f388"}},{"ruleId":"D2","level":"warning","message":{"text":"string._parse_individual_json (cognitive 27): string._parse_individual_json has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, loops 4, error handling 3, ternaries 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/string.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"03b50d3058b819b4b058341e6ef09008ab2f0e551f33d31caef475ac6ae664ee"}},{"ruleId":"D2","level":"warning","message":{"text":"EmrCluster._create (cognitive 27): EmrCluster._create has cognitive complexity 27 (threshold 15). Drivers by points: if/else 26, error handling 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/emr/cluster.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fac7ea405e2553f759f9f8dd874634c670e57489c828a6600e000773242fa25"}},{"ruleId":"D2","level":"warning","message":{"text":"02_tool_error_persistence.scenario_b_model_call_fails (cognitive 26): 02_tool_error_persistence.scenario_b_model_call_fails has cognitive complexity 26 (threshold 15). Drivers by points: boolean chains 9, if/else 8, loops 4, ternaries 4, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"796b934d8d5181a6aca30d812752aa5b8006752f6c07bdfca637f293138a663e"}},{"ruleId":"D2","level":"warning","message":{"text":"_default_tools._extract_session_preview (cognitive 26): _default_tools._extract_session_preview has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 6, loops 3, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7809dc82855d1a8afb9489eee1a7e08fbf9c27c29e8a038e70b3bbc25225ab1"}},{"ruleId":"D2","level":"warning","message":{"text":"_managers.make_memories (cognitive 26): _managers.make_memories has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14, boolean chains 5, error handling 4, loops 2, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"889ab7e76131e1003208cd2817bb335e550ac7c9fe00693130c2b710726909a2"}},{"ruleId":"D2","level":"warning","message":{"text":"_managers.amake_memories (cognitive 26): _managers.amake_memories has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14, boolean chains 5, error handling 4, loops 2, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"727ddf2c2eecc64b1472b35c96e01cad11e013c7ef34d30ea463daa2a4a7ce57"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.ahandle_tool_call_updates (cognitive 26): _tools.ahandle_tool_call_updates has cognitive complexity 26 (threshold 15). Drivers by points: boolean chains 8, loops 8, if/else 7, ternaries 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"e72d34a89fde67816b72eb1df1d60193654e39714eb5eb18c3505526d7c3b777"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.ahandle_tool_call_updates_stream (cognitive 26): _tools.ahandle_tool_call_updates_stream has cognitive complexity 26 (threshold 15). Drivers by points: boolean chains 8, loops 8, if/else 7, ternaries 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"275f86467e7b620dd0f866b2bc50760cd10d12bcd232ea80253257e20637078b"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb._get_collection (cognitive 26): FirestoreDb._get_collection has cognitive complexity 26 (threshold 15). Drivers by points: if/else 26 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"4793cbfbc639b5f711e08307e7620b5e40e302d840fd994bc5267adf8dc9af5a"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_session (cognitive 26): PostgresDb.upsert_session has cognitive complexity 26 (threshold 15). Drivers by points: if/else 22, boolean chains 3, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9935cc32ee0a40ec253814aaf10a5d287fddfc07670f340b4332e0b9517680c"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 26): utils.calculate_date_metrics has cognitive complexity 26 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/utils.py"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bef888da1938eaf13e5c650bacb8a8339be8c1094041c828561574dcb7421c9"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.upsert_trace (cognitive 26): RedisDb.upsert_trace has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, boolean chains 6, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1723}}}],"partialFingerprints":{"codehealthFindingId/v1":"52eed055bab47d14c481302c9ea2c9eebd330bb1f75efa8051738f7eb9b1425b"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_span_stats (cognitive 26): AsyncSqliteDb.get_span_stats has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, ternaries 6, boolean chains 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3179}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c510f94ea5a92ecc01e0ad9b2887c580d95483ac239875a7a9ae8384af56eb7"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_span_stats (cognitive 26): SqliteDb.get_span_stats has cognitive complexity 26 (threshold 15). Drivers by points: if/else 15, ternaries 6, boolean chains 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3084}}}],"partialFingerprints":{"codehealthFindingId/v1":"234df82f1d0fec94868aabb36f93843f524ea5b32b6adf5aeb222ea626fb01f7"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 26): utils.calculate_date_metrics has cognitive complexity 26 (threshold 15). Drivers by points: loops 12, if/else 7, boolean chains 4, ternaries 3 (nesting depth added 13). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/utils.py"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"50f86b29ee472338bbc73e84f2ba6a5912b36692735111a9c6c285dc76d99304"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.upsert_trace (cognitive 26): ValkeyDb.upsert_trace has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, boolean chains 6, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2013}}}],"partialFingerprints":{"codehealthFindingId/v1":"d51e237946628b5db8eab72a433b20a61cdf1bfcc1b9d828f33c89dc937a86df"}},{"ruleId":"D2","level":"warning","message":{"text":"CohereEmbedder._async_batch_with_retry (cognitive 26): CohereEmbedder._async_batch_with_retry has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, ternaries 7, error handling 2, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbdb67830ec5332acfff8f10cf54f8d42bd82aae549d21524eadb2ba02051efe"}},{"ruleId":"D2","level":"warning","message":{"text":"DoclingReader.read (cognitive 26): DoclingReader.read has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 6, error handling 2, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/docling_reader.py"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aa1349a8480dcbd850cbc46876d2160b22642020c00956a5f57c644d48e07fa"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldLabeledCSVReader.async_read (cognitive 26): FieldLabeledCSVReader.async_read has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10, loops 7, boolean chains 4, ternaries 3, error handling 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a35e6df8dc74d9f58ed9512d05622e69dea25a561e8226ab3cb554dd2a625b6"}},{"ruleId":"D2","level":"warning","message":{"text":"DeepSeek._format_message (cognitive 26): DeepSeek._format_message has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, boolean chains 4, loops 2, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/deepseek/deepseek.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df0e81ad849da74b826a0af44fe27b6d11888891f95cf56f9060774b820d3f2"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._append_result_delta (cognitive 26): GeminiInteractions._append_result_delta has cognitive complexity 26 (threshold 15). Drivers by points: if/else 23, loops 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"2241fcf32b69b180b9a0c0d1506d0d0d1b86f005ca67e6866e7e97ed4ecd4500"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.get_request_params (cognitive 26): OpenAIChat.get_request_params has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, loops 8, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd9be7359a212adb21c6c6241550fb690cde95a683f0254a0bf8f02deb22cbbe"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceNode.from_span (cognitive 26): TraceNode.from_span has cognitive complexity 26 (threshold 15). Drivers by points: if/else 24, boolean chains 1, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/traces/schemas.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c6c16ef27e19bddbc71abaf8b2dd55d50597db1cf19ee4cd00f96be5b3ee0e7"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceDetail.from_trace_and_spans (cognitive 26): TraceDetail.from_trace_and_spans has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/traces/schemas.py"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"a60d4709f521c4bd0618edd73a1dcf7fa585f7cea827d65ff83dd335db33ee33"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._prepare_member_hitl_continuation (cognitive 26): _run._prepare_member_hitl_continuation has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, loops 5, boolean chains 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5890}}}],"partialFingerprints":{"codehealthFindingId/v1":"95de274db803af3642713f24f501b22f3c2822f70e62bd33632ca540d1783374"}},{"ruleId":"D2","level":"warning","message":{"text":"SlackTools._build_instructions (cognitive 26): SlackTools._build_instructions has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21, boolean chains 5 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc60b557b0c343393d43d7a42cc8e9ffd654d85440f4ab4d3e409afc90d54891"}},{"ruleId":"D2","level":"warning","message":{"text":"hooks.normalize_pre_hooks (cognitive 26): hooks.normalize_pre_hooks has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, ternaries 5, loops 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/hooks.py"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"46a5026c96fdb4de1f1d7609958abc16d86c4d7149cbd377f9b99b2ae4a98955"}},{"ruleId":"D2","level":"warning","message":{"text":"hooks.normalize_post_hooks (cognitive 26): hooks.normalize_post_hooks has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, ternaries 5, loops 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/hooks.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b3c899ff7f352b4f2faab88551a4110d46c90f9dc32b3bfcb1c872a9bea331"}},{"ruleId":"D2","level":"warning","message":{"text":"string.parse_response_dict_str (cognitive 26): string.parse_response_dict_str has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14, error handling 9, loops 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/string.py"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"b32117f8deeb24e13a2a8f89d26d68e9e8880ba8d518a8d51da23a7d90f4ea34"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.update_metadata (cognitive 26): LanceDb.update_metadata has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, ternaries 4, loops 2, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":942}}}],"partialFingerprints":{"codehealthFindingId/v1":"f47e051c45d3466a5c16f3b11bbb0a00cad0a2f0cb868d95a25a7a5f6112369b"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.search (cognitive 26): MongoDb.search has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, loops 5, error handling 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"6035be9197bb476cfd505be7c591e8741d6f891b1fabd0c1a09c9b09919717a1"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._route_executor_requirements_stream (cognitive 26): Workflow._route_executor_requirements_stream has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 6, loops 3, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6533}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dd50b8d2b7950d8dc0825581bdbe2f75764b2c9eb8919f8836b2356de20f3da"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._aroute_executor_requirements_stream (cognitive 26): Workflow._aroute_executor_requirements_stream has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 6, loops 3, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":6621}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbac7dc37481386be9fe5423f9aa516eb36b2552bc34f70b6fefca6d6e9bdffc"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.arun (cognitive 26): Workflow.arun has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 9, ternaries 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":9639}}}],"partialFingerprints":{"codehealthFindingId/v1":"517da880b42c2766a47ebfffc34b1441e588106521eb6d7d72ec635c04c60fd8"}},{"ruleId":"D2","level":"warning","message":{"text":"EcsTaskDefinition._create (cognitive 26): EcsTaskDefinition._create has cognitive complexity 26 (threshold 15). Drivers by points: if/else 19, error handling 5, boolean chains 2 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/task_definition.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e181393e683714c3fc38d70106cd4da069f7920f2e60f38e13dc7b2df46878"}},{"ruleId":"D2","level":"warning","message":{"text":"discovery._read_env_value (cognitive 26): discovery._read_env_value has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, boolean chains 5, loops 4, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/discovery.py"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d19d05924c9cb4c6035d0b0f8e9efc5dcfa0d45379b1bc411d94f871dbcf420"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOSAPI._iter_service_account_pages (cognitive 26): AgentOSAPI._iter_service_account_pages has cognitive complexity 26 (threshold 15). Drivers by points: if/else 11, ternaries 6, error handling 4, loops 3, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/http.py"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"99998d5c70a0c8de3062f85dff6bb4b684a7dba2dc447e16cca787538e7463d0"}},{"ruleId":"D2","level":"warning","message":{"text":"cancel_run.long_running_task (cognitive 25): cancel_run.long_running_task has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 12, if/else 9, boolean chains 2, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/14_run_control/cancel_run.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"e20ba3fb3c3aa9ecd52347dbf0448e81a2bcdadb0627180375a9c2fa921e53dc"}},{"ruleId":"D2","level":"warning","message":{"text":"save_hitl_condition_loop_router.run_workflow (cognitive 25): save_hitl_condition_loop_router.run_workflow has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 9 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/93_components/workflows/save_hitl_condition_loop_router.py"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe276f7c699454cc2f3dad97c673df2758a0aa65b0b27fe546c0bf339233545"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._handle_run_cancellation (cognitive 25): _run._handle_run_cancellation has cognitive complexity 25 (threshold 15). Drivers by points: if/else 22, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":5653}}}],"partialFingerprints":{"codehealthFindingId/v1":"f93ab74a02bdef734ad227ac3f50764582f911e0ca34a5b9e40ae49432a3031e"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.get_sessions (cognitive 25): FirestoreDb.get_sessions has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, ternaries 4, boolean chains 3, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"442a35d11cfca6d66337dfaff068a226f1c92ad8d15fdcd4c12738dd9ee65b0a"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_user_memories (cognitive 25): GcsJsonDb.get_user_memories has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa48a700abd719761fc8ee767d8f29f92a5049e552a70c1f533413dfcaebbca"}},{"ruleId":"D2","level":"warning","message":{"text":"InMemoryDb.get_user_memories (cognitive 25): InMemoryDb.get_user_memories has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4f21148130225e5cc58586bbec38728208d73c4e0fffd502cbcbabecca8c425"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_user_memories (cognitive 25): JsonDb.get_user_memories has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"123caf13e6efd0dcdbd4fb1c97a40c7ef02021e66605918a57b99fd7216409a1"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.upsert_knowledge_content (cognitive 25): AsyncPostgresDb.upsert_knowledge_content has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1969}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e60ba65cd96ee6c77198f8e5d2a0289bb17e1b71015b97d2f88daa6482d5dce"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_eval_runs (cognitive 25): AsyncPostgresDb.get_eval_runs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, ternaries 6, boolean chains 2, error handling 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2189}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8feecfeef28e2b94dd328b082d545c8fad5a560b32d20931173849ad7b0b10d"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_knowledge_content (cognitive 25): PostgresDb.upsert_knowledge_content has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2205}}}],"partialFingerprints":{"codehealthFindingId/v1":"266495a1ce7755601c1eefd33818ff9ef2ac5daaf4d7e36caab1fcc4da742a25"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.delete_sessions (cognitive 25): ValkeyDb.delete_sessions has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 4, boolean chains 3, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"d615e2c5753a41b6e3a95bc13680fdc5b4c988c666b07e7d9e9ce0d6aea12fa4"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.delete_user_memories (cognitive 25): ValkeyDb.delete_user_memories has cognitive complexity 25 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 4, boolean chains 3, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f00947d170ed0877e2a5dd1d8a42e31f5698185d5c53c24dc402f3ff420284d"}},{"ruleId":"D2","level":"warning","message":{"text":"PerformanceEval.run (cognitive 25): PerformanceEval.run has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 6, boolean chains 4, ternaries 2 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"45915806832e582805bfb715bffc5150902cbae7d9dcb742ab959232748a2c51"}},{"ruleId":"D2","level":"warning","message":{"text":"PerformanceEval.arun (cognitive 25): PerformanceEval.arun has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 6, boolean chains 4, ternaries 2 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"32121eb8ebf2fbba32b0021339b71138489d8320838350626f023cd57655dacc"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSystemKnowledge._grep (cognitive 25): FileSystemKnowledge._grep has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 7, error handling 4, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/filesystem.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d19faf3f640a118156d11c07d5306a0257bf1d938b03aadd17165b324fbf65a"}},{"ruleId":"D2","level":"warning","message":{"text":"S3Loader._aload_from_s3 (cognitive 25): S3Loader._aload_from_s3 has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, ternaries 7, boolean chains 3, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"966ecdc74e9f5aee2c7cae78de0a8fef370ef4f539b987febed6c14c6b1c8429"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions._call_step_info (cognitive 25): GeminiInteractions._call_step_info has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 12, if/else 11, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"dda1dd187909ba8de2b89e5e13ba15cca7fbfa94e37087d8fcac2970a1f03514"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.parse_tool_calls (cognitive 25): OpenAIChat.parse_tool_calls has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, ternaries 4, boolean chains 3, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"68789a61064e93b226551b1d39b674d63642067c3ba93cc564f7e3d1e35bbe53"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamRunOutput.from_dict (cognitive 25): TeamRunOutput.from_dict has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, ternaries 5, loops 3, boolean chains 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fefef5c855ae18db46f1c89e959c1646f31e7e11002570a858776e4168195dd"}},{"ruleId":"D2","level":"warning","message":{"text":"ScheduleExecutor._poll_run (cognitive 25): ScheduleExecutor._poll_run has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12, ternaries 6, error handling 4, boolean chains 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/scheduler/executor.py"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0131a40d2ba1332fb64563cdfcb12e507bb1658bd2ae5dd7b8b80f907e78b67"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamSession.get_tool_calls (cognitive 25): TeamSession.get_tool_calls has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 9, boolean chains 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/team.py"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2bc0401faa59eb6ffec749e083b3fc775798fea8308fd55bf329f67995ac9c1"}},{"ruleId":"D2","level":"warning","message":{"text":"_init.__init__ (cognitive 25): _init.__init__ has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, boolean chains 4, ternaries 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_init.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ae8d539c50b911f38f025ec8590c3f20c1bc464d45ea772fb03201d28b71df5"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages.get_members_system_message_content (cognitive 25): _messages.get_members_system_message_content has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3925b2b9b12fe176d5209c4163904efbd2a456ff2e40b1e79460bde9052104d"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._backfill_approval_to_requirements (cognitive 25): _run._backfill_approval_to_requirements has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 7, boolean chains 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5312}}}],"partialFingerprints":{"codehealthFindingId/v1":"aae6acfd3f0abff0a7c9a148b8ea4784d171e8b8fdb23248aeff780d7796d09d"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleSlidesTools.add_slide (cognitive 25): GoogleSlidesTools.add_slide has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, boolean chains 5, error handling 3, loops 2, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"11f1c070e186a6b19293a7cfe869883021eb136492fbc5193620207bc32aa57d"}},{"ruleId":"D2","level":"warning","message":{"text":"callables._close_cached_resources_sync (cognitive 25): callables._close_cached_resources_sync has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, loops 6, ternaries 3, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/callables.py"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8a9f8f9d89c7b48b2e8447988a30440da09ae512e3380df3236e6740c517fdb"}},{"ruleId":"D2","level":"warning","message":{"text":"openai_responses.sanitize_response_schema (cognitive 25): openai_responses.sanitize_response_schema has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 8, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/openai_responses.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"755a052672f5dd5d634b824006a84e53ac006fb2b7a96225f04b826e4355d7b7"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch.insert (cognitive 25): CouchbaseSearch.insert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, error handling 4, ternaries 3, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"2353c0177d24cc88966eef3ae164dfe3384d0e96ab9f2b7f296baddfc952fbb6"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch.upsert (cognitive 25): CouchbaseSearch.upsert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, error handling 4, ternaries 3, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":394}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3ac38cc4248d51007300e00c1d8ea20f5c11be6c0143bea5260de83e58a764"}},{"ruleId":"D2","level":"warning","message":{"text":"PgVector.vector_search (cognitive 25): PgVector.vector_search has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, ternaries 7, error handling 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c164e81f16bf0be41c5c3056926f896a5e66f6a7dac9a4fc023b9acf2c2ee12"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStore.async_insert (cognitive 25): SingleStore.async_insert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9, ternaries 6, error handling 5, loops 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/singlestore/singlestore.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ade754a6f269ce50705fc1d77f6377ce0d52ce919aaf5b54e50b4550079b61"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStore.async_upsert (cognitive 25): SingleStore.async_upsert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 9, ternaries 6, error handling 5, loops 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/singlestore/singlestore.py"},"region":{"startLine":583}}}],"partialFingerprints":{"codehealthFindingId/v1":"22a40360444f39a493ed9ded0cc0dcdec27b519a19cacba328e1bd8382d533ef"}},{"ruleId":"D2","level":"warning","message":{"text":"UpstashVectorDb.upsert (cognitive 25): UpstashVectorDb.upsert has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, ternaries 3, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/upstashdb/upstashdb.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"240569aae6315dedeb83a477bb8df16f525ffd59b7b16e393948a2c95f9eead1"}},{"ruleId":"D2","level":"warning","message":{"text":"Step._store_executor_response (cognitive 25): Step._store_executor_response has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, boolean chains 4, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":2101}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce987f88f4264b08a515f40f66c9e9117c63ac82c66f8dc037b5e20479b87150"}},{"ruleId":"D2","level":"warning","message":{"text":"test_workflow_cancellation.test_cancel_workflow_with_agents_during_streaming (cognitive 25): test_workflow_cancellation.test_cancel_workflow_with_agents_during_streaming has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10, boolean chains 8, loops 4, error handling 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_workflow_cancellation.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"62e1651879102991c2624203f1d00df49be05c0753fc474d464c3010deb79ccf"}},{"ruleId":"D2","level":"warning","message":{"text":"test_workflow_cancellation.test_cancel_workflow_with_agents_during_async_streaming (cognitive 25): test_workflow_cancellation.test_cancel_workflow_with_agents_during_async_streaming has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10, boolean chains 8, loops 4, error handling 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_workflow_cancellation.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f0fa3e235101eed2765b48a44f86831a28dfafc633bbfc81bd272ea5767c64"}},{"ruleId":"D2","level":"warning","message":{"text":"test_workflow_cancellation.test_cancel_workflow_before_step_2_starts (cognitive 25): test_workflow_cancellation.test_cancel_workflow_before_step_2_starts has cognitive complexity 25 (threshold 15). Drivers by points: if/else 12, loops 6, error handling 4, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_workflow_cancellation.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf396f2b9c7b0a9daf311f3a0e6649bac964d5bd88e91447a70c864600dc0ca5"}},{"ruleId":"D2","level":"warning","message":{"text":"test_provider_resolution._discover_model_subclasses (cognitive 25): test_provider_resolution._discover_model_subclasses has cognitive complexity 25 (threshold 15). Drivers by points: if/else 13, loops 6, ternaries 4, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/unit/models/test_provider_resolution.py"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"fedb46cb857eb389af5c72c3189202232c338b1a9497eefac7b3b2dcf9a97628"}},{"ruleId":"D2","level":"warning","message":{"text":"TargetGroup._create (cognitive 25): TargetGroup._create has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, loops 2, boolean chains 1, error handling 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elb/target_group.py"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b30be369b0342e956417a184f7c5095938bc8121bcede8a32acb278d21022c"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerApp.get_container_env (cognitive 25): DockerApp.get_container_env has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/app/base.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"bebc752898e51056dea5edb4fbcf8ea39ce5732459e98b66fec279863664a7a5"}},{"ruleId":"D2","level":"warning","message":{"text":"CodexAdapter._replace_section (cognitive 25): CodexAdapter._replace_section has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, boolean chains 3, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/clients/codex.py"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"a183bee25c3e72311d76ea2d04541be43687df89a49bd8ccf090b78bd8f79c74"}},{"ruleId":"D2","level":"warning","message":{"text":"02_tool_error_persistence.scenario_b_model_call_fails (cognitive 24): 02_tool_error_persistence.scenario_b_model_call_fails has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8, boolean chains 7, loops 4, ternaries 4, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/23_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e2ec1b9be93d6a5582e0e538bd32462539ed74416eb753128512e1a848083c"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseDb.__init__ (cognitive 24): BaseDb.__init__ has cognitive complexity 24 (threshold 15). Drivers by points: boolean chains 24. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc2d341bcb32992b065e05242ad3e80cfeb183a840f31dffc1cea80f87a8c8a"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_user_memories (cognitive 24): DynamoDb.get_user_memories has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, ternaries 6, loops 2, boolean chains 1, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"22388441d637737766bb24a893016c73f05738d821dec2329f1959b41e58d832"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_user_memory_stats (cognitive 24): DynamoDb.get_user_memory_stats has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, boolean chains 3, loops 2, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ef039785b3fb2994832ce81728586d4420f5a7d47611c235dd6e76b0ec927e"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.get_sessions (cognitive 24): AsyncMongoDb.get_sessions has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, ternaries 6, error handling 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"53bcab4c4fcf649a44eff2aa788625e61b6e9af82d10cb150572c16d70c5513e"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.get_sessions (cognitive 24): MongoDb.get_sessions has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, ternaries 6, error handling 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"c64578f619ed2b1b799414f86917ad7720d6b2ab24eeb524ced20dc189e2899e"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb._create_table (cognitive 24): AsyncMySQLDb._create_table has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 4, error handling 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca892a39a0843306d61783749fafb9f8075f8ffe4cb1b394dff90c361c93837"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb._create_table (cognitive 24): MySQLDb._create_table has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 4, error handling 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29e84c17059cbe1efcf72363f80460e0ff005cd0b190c3b725c375d1bb8593a"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.delete_eval_runs (cognitive 24): ValkeyDb.delete_eval_runs has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 4, boolean chains 2, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1777}}}],"partialFingerprints":{"codehealthFindingId/v1":"065181d4a18632070005f241ed5490b7789cd2c38df6927e41a131d7a9e9b6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"runner._mcp_tool_names (cognitive 24): runner._mcp_tool_names has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 2, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ac1362e874aa18ec3f73c120affc6a406ebff3f925af100215263b1dd2b597"}},{"ruleId":"D2","level":"warning","message":{"text":"suite.acli (cognitive 24): suite.acli has cognitive complexity 24 (threshold 15). Drivers by points: ternaries 13, if/else 9, boolean chains 1, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"d31e97c7dda8df75cf37eb098dfc854a0787b8be908a20b27d7117c7d58f4911"}},{"ruleId":"D2","level":"warning","message":{"text":"S3Loader._load_from_s3 (cognitive 24): S3Loader._load_from_s3 has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, ternaries 7, boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"125d9b4d355f8e81770e6ae8b51352e59d2c3d1d28e1e01a2e8f8fa0edf011c3"}},{"ruleId":"D2","level":"warning","message":{"text":"Groq.parse_tool_calls (cognitive 24): Groq.parse_tool_calls has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, ternaries 4, boolean chains 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f381c9c04d8d3ade48f2170b2fd408a015b4d2ce08acfb4c9750e28fbe3e63"}},{"ruleId":"D2","level":"warning","message":{"text":"HuggingFace.parse_tool_calls (cognitive 24): HuggingFace.parse_tool_calls has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, ternaries 4, boolean chains 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"490a737a067d1758f0298c9d6ab4ed53ad8833b28286c648872bcdbb4d016189"}},{"ruleId":"D2","level":"warning","message":{"text":"LiteLLM._get_metrics (cognitive 24): LiteLLM._get_metrics has cognitive complexity 24 (threshold 15). Drivers by points: boolean chains 14, if/else 10 (nesting depth added 4). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/litellm/chat.py"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"bac84649b631441d46114a2d5e3e82643a981a3125c0acbc78785caf14fa8d76"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses.invoke (cognitive 24): OpenAIResponses.invoke has cognitive complexity 24 (threshold 15). Drivers by points: error handling 9, ternaries 8, if/else 6, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"7df269e8f2f07c06e536912368e59eb8e40f8dc3f466e72b1a4bf52ce1aed534"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses.ainvoke (cognitive 24): OpenAIResponses.ainvoke has cognitive complexity 24 (threshold 15). Drivers by points: error handling 9, ternaries 8, if/else 6, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"9edd996df26c399f148de84fb99639c4c9f25cae1187e66584113b078e80cf8c"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS.__init__ (cognitive 24): AgentOS.__init__ has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, boolean chains 5, ternaries 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"694156833d3bec12356c02511e3aaeff10bfa31a9c071a87afc46c9ae39a331b"}},{"ruleId":"D2","level":"warning","message":{"text":"handlers.on_run_completed (cognitive 24): handlers.on_run_completed has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 5, boolean chains 2, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/handlers.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"d26beee5c6a2c8030e626fcfca692018e14a85288ac863de8f2a788ee20b0c9d"}},{"ruleId":"D2","level":"warning","message":{"text":"input.extract_user_input (cognitive 24): input.extract_user_input has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, loops 5, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/input.py"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"e631c11300d3b45d8996aa7bf14d210b0133a72b5e16da3a9bf0ec97a4e400d4"}},{"ruleId":"D2","level":"warning","message":{"text":"router.handle_workflow_continue_via_websocket (cognitive 24): router.handle_workflow_continue_via_websocket has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, error handling 6, ternaries 4, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"65d8452859a25114dbd0ffa630086dd7a9c88e8a45dfaab4098cdc4eee70af9b"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.resolve_ws_jwt_config (cognitive 24): utils.resolve_ws_jwt_config has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, boolean chains 6, error handling 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"68465bebc1ec7a50f883568a5f688fcfb2097c9027b00fbc3fd9ded094131115"}},{"ruleId":"D2","level":"warning","message":{"text":"Registry.add_tool (cognitive 24): Registry.add_tool has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 4, error handling 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/registry/registry.py"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a6b8af0b51017c118c0f7ff1aa35a27cce1f29510474a0a704cc3fb545b6421"}},{"ruleId":"D2","level":"warning","message":{"text":"RunOutput.from_dict (cognitive 24): RunOutput.from_dict has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, ternaries 5, loops 3, boolean chains 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"7599d1cb3dbcb6901debc09228dddeeb7f1ce332ee14681f57013963796643f8"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.__init__ (cognitive 24): GoogleCalendarTools.__init__ has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, boolean chains 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"76ca0ea4ba3962839bb84001c6d5689d0c3a5a176bad082b0ae4b0b43bc9d921"}},{"ruleId":"D2","level":"warning","message":{"text":"Toolkit._check_tools_filters (cognitive 24): Toolkit._check_tools_filters has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/toolkit.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d7e0b7b718dc0b12c07203a5ccef0becc4c463557d5cbf30503ad46977e8c2"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.store_media_util (cognitive 24): agent.store_media_util has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 8 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"0974ab24049767f9472cc0336625789cdf20b199012dd627b8105b76c647fa2f"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.validate_media_object_id (cognitive 24): agent.validate_media_object_id has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 8 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec55664207c79a000d51810fbca65dcf5aa38a0239b04bec3ea72c726b62b349"}},{"ruleId":"D2","level":"warning","message":{"text":"cohere.format_messages (cognitive 24): cohere.format_messages has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/cohere.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"3db0da855bb86350032ff410911d50ba897ffdf8c871212ca0064d04afdacda9"}},{"ruleId":"D2","level":"warning","message":{"text":"string.parse_response_model_str (cognitive 24): string.parse_response_model_str has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, error handling 10 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/string.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"88e6e71357e8b7c7be33a3a73abdd8679e3cfd74709a0b4dc2f1ad2a8dff0e23"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.async_upsert (cognitive 24): MongoDb.async_upsert has cognitive complexity 24 (threshold 15). Drivers by points: if/else 9, error handling 7, ternaries 4, loops 3, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c820777c715aacc779b60e6f0503afd31ee644f8ed76466d43ec2b607fead5"}},{"ruleId":"D2","level":"warning","message":{"text":"StepRequirement._validate_user_input (cognitive 24): StepRequirement._validate_user_input has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, boolean chains 7, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/types.py"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"7db18f181d754ef6860cc833f63109ad61c46790ab436134b4f4d53c0abd4cbe"}},{"ruleId":"D2","level":"warning","message":{"text":"ContinueExecutionState.__init__ (cognitive 24): ContinueExecutionState.__init__ has cognitive complexity 24 (threshold 15). Drivers by points: boolean chains 18, if/else 4, loops 2 (nesting depth added 2). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/utils/hitl.py"},"region":{"startLine":359}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ea546d0ee016b3a1fac28a3fac006179021b784d3dbffa0d94c08b772a21696"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._propagate_debug_to_step (cognitive 24): Workflow._propagate_debug_to_step has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14, loops 8, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1904}}}],"partialFingerprints":{"codehealthFindingId/v1":"87c13637448a861767f85aff886c83fdd3c1f33eb32d94f31a2ba58a919f6f0c"}},{"ruleId":"D2","level":"warning","message":{"text":"test_agui_app.test_event_ordering_invariants (cognitive 24): test_agui_app.test_event_ordering_invariants has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, loops 8 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/unit/app/test_agui_app.py"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"21217b06bb893db451d6621df7c9c7d5faa01c8515a25f64ee7e76d2f6ad59ba"}},{"ruleId":"D2","level":"warning","message":{"text":"EcsContainer.build_container_environment (cognitive 24): EcsContainer.build_container_environment has cognitive complexity 24 (threshold 15). Drivers by points: error handling 11, if/else 9, loops 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/container.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"528ced2fe39b7183e8d647de316e1d19fcebe86639ea4ffb9f3b910e95650082"}},{"ruleId":"D2","level":"warning","message":{"text":"confirmation_required_mcp_toolkit.main (cognitive 23): confirmation_required_mcp_toolkit.main has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 7 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/10_human_in_the_loop/confirmation_required_mcp_toolkit.py"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"73dd95c36b7f8c0bcc0b6182227323991f9272568ca61ab27886eea6d8e050d4"}},{"ruleId":"D2","level":"warning","message":{"text":"02_tool_error_persistence.scenario_a_tool_error (cognitive 23): 02_tool_error_persistence.scenario_a_tool_error has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 8, ternaries 8, loops 5, error handling 1, if/else 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4d1457f5af0078baa5a1659904306a4ab1225c2c8f415912155e394a74cb24"}},{"ruleId":"D2","level":"warning","message":{"text":"tasks_stream.main (cognitive 23): tasks_stream.main has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, loops 5, ternaries 5, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/02_modes/tasks_stream.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"73b3a8f6076804091046f0ce90ab0c8ee8f00e69977ad7a9a2eb70a37898ed2e"}},{"ruleId":"D2","level":"warning","message":{"text":"websocket_server.websocket_endpoint (cognitive 23): websocket_server.websocket_endpoint has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, error handling 5, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/background_execution/websocket_server.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e82077d5d74807159903daab95df9dd3043dc6b9dc608da58454aafc57c71b"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._truncate_run_to_checkpoint (cognitive 23): _run._truncate_run_to_checkpoint has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2966}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dea5a9950aa37aa0ba5052ad917d13080bc5f92e0e6330dc9338da6629be218"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.get_session (cognitive 23): _session.get_session has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 9 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"5079d69de3b2b95078b6c6ed01fe99a2f21c066740d3ae92b2571af969666508"}},{"ruleId":"D2","level":"warning","message":{"text":"LangGraphAgent._arun_adapter_stream (cognitive 23): LangGraphAgent._arun_adapter_stream has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, ternaries 6, boolean chains 4, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/langgraph/agent.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"22860cea90ba7184efdad96962395224df4a602d981b94c62dbffd2aa7f29474"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.get_eval_runs (cognitive 23): DynamoDb.get_eval_runs has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, loops 5, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1907}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bd36a62a978f7ddb064eabf6c5072533ff2717f1c79a9339394048c89c40c11"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/utils.py"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"afaca20c262ef677da2c1082c29f3138c834a4cc7be4a0c7ac29d457a19ebddf"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/utils.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ae62583243f824b870e174ce64a52d85e6439a17f305e63561b405ed2d19234"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/utils.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa29d95517975c2457a4ecd3c58239b8d0cb8ff1523d1ffc4b02d4c665f8d95"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/utils.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"87cc1c0dd11addf0c5dbf277f7135cc735c6113ec4c45f350fca81e6431a69fe"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/utils.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"261c2800baedb3396a71ccc99db2088d0f95f9a56a95400f6a60ae83f5d62835"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.upsert_session (cognitive 23): AsyncPostgresDb.upsert_session has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":835}}}],"partialFingerprints":{"codehealthFindingId/v1":"be10591eddc57c4ebd43554d4e9ee7716a4af63f18bf6222f446bbeb95f7a793"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/utils.py"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"f48971e3a1420d769eb27b28a584c7a68bb2fae08a8a040cb3a55fd6387daefe"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.calculate_date_metrics (cognitive 23): utils.calculate_date_metrics has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, loops 11, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/utils.py"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d51fda8b07e1ee594d61a9ff976e8757a0b2cc301d26406293c6f06ffb877f"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_eval_runs (cognitive 23): AsyncSqliteDb.get_eval_runs has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2150}}}],"partialFingerprints":{"codehealthFindingId/v1":"852777c514c7223f883e73667c0a160c5210ac9dd4d0b001e0b7418342bc66b5"}},{"ruleId":"D2","level":"warning","message":{"text":"MistralEmbedder.async_get_embeddings_batch_and_usage (cognitive 23): MistralEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, error handling 6, loops 4, ternaries 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/mistral.py"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b5762fcae13c9dc780538eeec5a4062a87eb648aa8531fff2ebe00592c3cb9c"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSystemKnowledge._list_files (cognitive 23): FileSystemKnowledge._list_files has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, boolean chains 3, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/filesystem.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"a02f0d16ddb6d9f875114aaac53b688ccf1d66ad719f2942d8f244bc1c19fd66"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._update_content (cognitive 23): Knowledge._update_content has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2523}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c3f47a70ba25aae6c65d5a9909801a11d706635dbe7caa6cbfa27973c68881"}},{"ruleId":"D2","level":"warning","message":{"text":"AzureBlobLoader._aload_from_azure_blob (cognitive 23): AzureBlobLoader._aload_from_azure_blob has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, error handling 7, ternaries 2, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"15420a8a6a0aaa99dedceb3c6dfdb846e4e47e5667041e601c4443261f4a82c2"}},{"ruleId":"D2","level":"warning","message":{"text":"AzureBlobLoader._load_from_azure_blob (cognitive 23): AzureBlobLoader._load_from_azure_blob has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, error handling 7, ternaries 2, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"22d8c07ad5f774e706c741eabce21e9fb1692d3b43022b19186570b7f5688849"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionContextStore._get_system_message (cognitive 23): SessionContextStore._get_system_message has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef95eeaf057960b3985b81cb2935e772a27763d06b2d7a3e60065c114e04a36"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryManager._search_user_memories_agentic (cognitive 23): MemoryManager._search_user_memories_agentic has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, loops 6, error handling 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"053e1ec91ec0a7c163d2d6fbf2aed87d034d517d09d8ff7d9070312002ad6969"}},{"ruleId":"D2","level":"warning","message":{"text":"metrics.accumulate_model_metrics (cognitive 23): metrics.accumulate_model_metrics has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 12, if/else 8, loops 2, ternaries 1 (nesting depth added 3). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"e48eaf3b9bd6203f7695bf2b1d5a117b28057bfa97ddde39e4bf60f042410fc0"}},{"ruleId":"D2","level":"warning","message":{"text":"Claude._ensure_additional_properties_false (cognitive 23): Claude._ensure_additional_properties_false has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 7 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"c90debf4679d2f0b12319d3a60e3ac6554d59d4feff32a1bbaf7326c40951771"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._process_model_response (cognitive 23): Model._process_model_response has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea0e66ec7790a5d34cf8d41ad28de5ea3688a51bd5f01cab36e4a4802363ac2"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._aprocess_model_response (cognitive 23): Model._aprocess_model_response has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dc46c93cb69f315c2d64ae61b44f20b137c81eb7fc2725e43e71c47a4739cb6"}},{"ruleId":"D2","level":"warning","message":{"text":"minimax._strip_inline_think_tags (cognitive 23): minimax._strip_inline_think_tags has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, loops 1, ternaries 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/minimax/minimax.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"483ac94c72706930f8c9921dec9c065d14b1a610f408b41dd0078e670ca92187"}},{"ruleId":"D2","level":"warning","message":{"text":"AuthMiddleware.__init__ (cognitive 23): AuthMiddleware.__init__ has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, boolean chains 8, ternaries 4 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fef976eed821e7b478809934aaa769423f1e4a1a5e46881a761d540013793ca"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_run_input (cognitive 23): utils.get_run_input has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8fc8ad5e41aaa226b012f89f034117e66415cce257cf202ee5172bd92580645"}},{"ruleId":"D2","level":"warning","message":{"text":"ReasoningManager.run_default_reasoning (cognitive 23): ReasoningManager.run_default_reasoning has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3, error handling 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c061772e97431b9fde9d2268e70af99f121e12f1c6ba4849f1aed536d74d644"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._ahandle_team_tool_call_updates (cognitive 23): _run._ahandle_team_tool_call_updates has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 8, loops 8, if/else 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5134}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7cd790801dcce9540377af1e70af5abeaf1d9a1eece29f77fd00a4a89245191"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._ahandle_team_tool_call_updates_stream (cognitive 23): _run._ahandle_team_tool_call_updates_stream has cognitive complexity 23 (threshold 15). Drivers by points: boolean chains 8, loops 8, if/else 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5191}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa31512da1e6f67caf1cc7b14a0a5970ea5e7f9a8bf759cd19f73e6af92441a"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._truncate_team_run_to_checkpoint (cognitive 23): _run._truncate_team_run_to_checkpoint has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":6011}}}],"partialFingerprints":{"codehealthFindingId/v1":"85560af9567b25914b6ef541877d0fc07ab7b3126620bc77f034b9e3a668c47f"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.asave_session (cognitive 23): _session.asave_session has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, loops 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_session.py"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c77cdfdff9566b6f30cc9ce3dcd2f7d0503f48c9c0735c1d76b9386d45a9860"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools._check_and_refresh_mcp_tools (cognitive 23): _tools._check_and_refresh_mcp_tools has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, error handling 5, boolean chains 2, loops 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_tools.py"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc42cd9a14b08487981b860ba987dc53174a2fca5917f6a1e96cd96c244e85af"}},{"ruleId":"D2","level":"warning","message":{"text":"CodingTools.ls (cognitive 23): CodingTools.ls has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12, error handling 5, boolean chains 3, ternaries 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f6ca125ac1de96d660981d4980b4b2669200f5601fdd52176fc3aa9c4f9cfe8"}},{"ruleId":"D2","level":"warning","message":{"text":"DaytonaTools._get_or_create_sandbox (cognitive 23): DaytonaTools._get_or_create_sandbox has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, error handling 6, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/daytona.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4c40a04e1faa63cc0d3a2a904c7d53a4f239d14ed0ca82c92311e63344db33"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionCall.execute (cognitive 23): FunctionCall.execute has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, boolean chains 4, error handling 3, ternaries 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dba4446758fa4697830eeaf66c182fc771cc42fa9668d4ce2278896ea1dcc25"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.update_event (cognitive 23): GoogleCalendarTools.update_event has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, error handling 5, boolean chains 1, ternaries 1 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"db26ddb174cb46e48cf3f26960bdf8fd43bee62d8c4a7dc1a7e5a596d1529a5e"}},{"ruleId":"D2","level":"warning","message":{"text":"MCPTools.get_temporary_session_for_run (cognitive 23): MCPTools.get_temporary_session_for_run has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, ternaries 4, error handling 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b87be30733c35d4e248d5cf0f12411ac0df6c0ffcdf56fa6eb6effc9dd98152"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiMCPTools._connect (cognitive 23): MultiMCPTools._connect has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, boolean chains 4, error handling 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5770afe0b8d1fe2435b66f4766f2e5da21d868619c5078873f006eb4288741"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelsLabTools.generate_media (cognitive 23): ModelsLabTools.generate_media has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, boolean chains 4, ternaries 3, error handling 2, loops 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/models_labs.py"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"809e6317eb14e774569551d122d4e7b68203823300f8092db0b55e66d9957a7d"}},{"ruleId":"D2","level":"warning","message":{"text":"OxylabsTools.get_amazon_product (cognitive 23): OxylabsTools.get_amazon_product has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9, ternaries 7, boolean chains 6, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/oxylabs.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"36bd3cd3cd4f4652e55eb46ab67a08cd8acb8d82b68a5b86ee6c06da1a664911"}},{"ruleId":"D2","level":"warning","message":{"text":"ParallelTools.parallel_search (cognitive 23): ParallelTools.parallel_search has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, ternaries 3, boolean chains 2, error handling 2, loops 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/parallel.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd38624c143f572bc3eb31f8a227f51fba88aaeca9e8cc84cd0a235a84fa7679"}},{"ruleId":"D2","level":"warning","message":{"text":"RedmineTools.search_issues (cognitive 23): RedmineTools.search_issues has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, ternaries 8, error handling 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"42384fcd441f14bfd53843a660c5ef64a643a298f67c1537456ac3a2fafdb637"}},{"ruleId":"D2","level":"warning","message":{"text":"SlackTools._resolve_channel (cognitive 23): SlackTools._resolve_channel has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa487ff8abaf6edfd65559d22be2f2e89db3b8eed2f11c19ba1743e817c303e0"}},{"ruleId":"D2","level":"warning","message":{"text":"Milvus.async_insert (cognitive 23): Milvus.async_insert has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, error handling 5, ternaries 4, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/milvus/milvus.py"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"567678770795b1e1203fa1cdf919e6f6d2441ea327dd53d1a2f56d5b4aaef887"}},{"ruleId":"D2","level":"warning","message":{"text":"Milvus.async_upsert (cognitive 23): Milvus.async_upsert has cognitive complexity 23 (threshold 15). Drivers by points: if/else 11, error handling 5, ternaries 4, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/milvus/milvus.py"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb620f83d23bfcc0b7fd331ab7cb2b0c9f5926e44628cc7be86e02baf5bad9e0"}},{"ruleId":"D2","level":"warning","message":{"text":"Step._enrich_event_with_context (cognitive 23): Step._enrich_event_with_context has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24f934dfd8cc638fbfb7db2f9c502715085e6648f0859817e7bb400a7b93399"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow._propagate_hooks_to_step (cognitive 23): Workflow._propagate_hooks_to_step has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, loops 5, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":10275}}}],"partialFingerprints":{"codehealthFindingId/v1":"7268ca6a2509d8d2e242fabf0a60dfa92ffd32d8268681a3fa8ca2b8ef80c010"}},{"ruleId":"D2","level":"warning","message":{"text":"cancel_run.long_running_task (cognitive 22): cancel_run.long_running_task has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9, ternaries 9, boolean chains 2, error handling 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/cancel_run.py"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"faba93d1577075c69e4698e671875a1b92d5038420ebc512eafff304ed5ebce5"}},{"ruleId":"D2","level":"warning","message":{"text":"11_streaming_events.streaming_with_events (cognitive 22): 11_streaming_events.streaming_with_events has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/02_modes/tasks/11_streaming_events.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9653eec1bb7b0418754085f45b69ef43a5d833f01b526014ebb665ab33860a4"}},{"ruleId":"D2","level":"warning","message":{"text":"cancel_run.long_running_task (cognitive 22): cancel_run.long_running_task has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 12, if/else 6, boolean chains 2, error handling 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/run_control/cancel_run.py"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bf724cf66c680edb99677cd9cadd6ccc9b3b418044283543790ae0ff91789df"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.arun_dispatch (cognitive 22): _run.arun_dispatch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, boolean chains 4, ternaries 3 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2743}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2b68187ba6123fbaea4fe7a6992b49edb247cc65bc0672e5e63ef67d6a1521"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.aget_session (cognitive 22): _session.aget_session has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, boolean chains 9 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee52fe29af998cc5321e64c98477f13ac941683e7c00ddbfbc8cfee5052ffc88"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.validate_google_credentials (cognitive 22): utils.validate_google_credentials has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, error handling 5, boolean chains 3, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/google/utils.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a137b2c1a748d85fe7f79a7d6c14b050c2259d8a854a6ab9735e0a52dbd822"}},{"ruleId":"D2","level":"warning","message":{"text":"notion_ops.blocks_to_markdown (cognitive 22): notion_ops.blocks_to_markdown has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10, ternaries 6, boolean chains 4, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/notion_ops.py"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c33e149586b9ff8fe3144b83ecd464b244d41faf3e5d55372686edba3ada1b1"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.get_eval_runs (cognitive 22): FirestoreDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 2, error handling 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1741}}}],"partialFingerprints":{"codehealthFindingId/v1":"d160bd056c649cdcdb2bc00d501398112768623f5c647af6506de3037e1c3ae0"}},{"ruleId":"D2","level":"warning","message":{"text":"v1_to_v2.migrate_table_in_batches (cognitive 22): v1_to_v2.migrate_table_in_batches has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72826ad73b3583050335097ac9b834439b16fd83a6b60f60360fe5db36e22f1"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.get_eval_runs (cognitive 22): AsyncMongoDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2158}}}],"partialFingerprints":{"codehealthFindingId/v1":"e678a9d3cb09a50813c7839b23234a6367faeb0854f3c68bb6d64623da588ce5"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.get_eval_runs (cognitive 22): MongoDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1937}}}],"partialFingerprints":{"codehealthFindingId/v1":"323393606b98566e304ac2bec0c02018a8136dd460aca44debd94d0bb3e572ac"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.get_eval_runs (cognitive 22): AsyncMySQLDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2265}}}],"partialFingerprints":{"codehealthFindingId/v1":"8217bf261b3ff24b4f6a58814e92e69cd66eed39d6107e6e1596289be3e3538b"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.get_sessions (cognitive 22): MySQLDb.get_sessions has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd673b081c8a175cd752fdd5238f28146ccc67c08de708c439add755ec80c56d"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.get_eval_runs (cognitive 22): MySQLDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2068}}}],"partialFingerprints":{"codehealthFindingId/v1":"4df5540eb1f9876ddc5ae65c624c2328132df5dcb1a091ecf8d2b24ecd2a3c49"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_sessions (cognitive 22): AsyncPostgresDb.get_sessions has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"d21d3ba873829c5931a4b04a7548d8c494c25bfc9680e7eaf48c48a770fe5533"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_eval_runs (cognitive 22): PostgresDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2425}}}],"partialFingerprints":{"codehealthFindingId/v1":"717c4011e0932ec5d59cc825319bab0e6c6dbeb45a212a0cb2c2b492ad04793f"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.get_sessions (cognitive 22): SingleStoreDb.get_sessions has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 6, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca39371f14a37cbd2255c0f1af84778aa5f605334e01fd305efdfa3d982aa64c"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.get_eval_runs (cognitive 22): SingleStoreDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":2074}}}],"partialFingerprints":{"codehealthFindingId/v1":"c39febc75a59bcce1cc695d7cf64f9c6464abac0c54abd26a00f5bbe81b5e3c6"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_eval_runs (cognitive 22): SqliteDb.get_eval_runs has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2341}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd98b596c8abe35dd4780afb36b7bcaf38e274c73dd278526d9cc32a50646bc8"}},{"ruleId":"D2","level":"warning","message":{"text":"metrics.calculate_date_metrics (cognitive 22): metrics.calculate_date_metrics has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, loops 11 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/metrics.py"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"d40dbd592e9e2928eeda42fd78282c50c7afb0497a6f8157b4eb2463cd21d65f"}},{"ruleId":"D2","level":"warning","message":{"text":"SurrealDb.get_traces (cognitive 22): SurrealDb.get_traces has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, ternaries 8, boolean chains 1, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1637}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6819b5fc76a78cec47b31925a87f93e5ec0b5eeff7af4e8e4ee01b44479b454"}},{"ruleId":"D2","level":"warning","message":{"text":"runner._mcp_tool_instances (cognitive 22): runner._mcp_tool_instances has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, loops 5, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"f060074ac13d7b852a9fd761f94cb68df0b7dff5e0045c869780342ebce1604d"}},{"ruleId":"D2","level":"warning","message":{"text":"Cerebras._parse_provider_response_delta (cognitive 22): Cerebras._parse_provider_response_delta has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 12, if/else 10 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"63fa30bdaf3bde6d2cf516aa06bd4d916da133c50528bd032778377910814ef3"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini.count_tokens (cognitive 22): Gemini.count_tokens has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, ternaries 5, boolean chains 2, error handling 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac7c8b798dbc052f12ac2248afecfa36c11879fde3f66dc302ffa74a0dba61b0"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini.acount_tokens (cognitive 22): Gemini.acount_tokens has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, ternaries 5, boolean chains 2, error handling 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0aecbe0ce7e0b0aee1ffcf6adb9d37d9f6c2958ae58483f3868bee006187a98"}},{"ruleId":"D2","level":"warning","message":{"text":"Llama.parse_tool_calls (cognitive 22): Llama.parse_tool_calls has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/meta/llama.py"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c943cf7d615167c9c476d1824a0b76a6a7ba8c1a5b387b23306f17c029a193"}},{"ruleId":"D2","level":"warning","message":{"text":"SlackEventHandler.handle_streaming (cognitive 22): SlackEventHandler.handle_streaming has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 3, boolean chains 1, error handling 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/event_handler.py"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"d058ba786133f8e54b718db17e8cd4966752be82b7fca2a77798e2f8b8bc9995"}},{"ruleId":"D2","level":"warning","message":{"text":"helpers.extract_message_payload (cognitive 22): helpers.extract_message_payload has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, boolean chains 5 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/telegram/helpers.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"d38f523208ac47f03305c8d4fad784979d1ea71c230b8aaed7ca404966ad64e0"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.run_performance_eval (cognitive 22): utils.run_performance_eval has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 12, boolean chains 5, if/else 5 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb7639bd2a464c5ced171ed68064bbd034cc84ff22daf682d82aa0b9043598d"}},{"ruleId":"D2","level":"warning","message":{"text":"router.workflow_response_streamer (cognitive 22): router.workflow_response_streamer has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8, ternaries 7, boolean chains 3, error handling 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"22691633fdcad79c4df21c0ce933735c78bb278d60f7de50ec6fa4904ef29223"}},{"ruleId":"D2","level":"warning","message":{"text":"ReasoningManager.arun_default_reasoning (cognitive 22): ReasoningManager.arun_default_reasoning has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3, error handling 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":902}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aab989fa145811c2ce6f203c8130015bcad1309ebbaa8a3db691b4595994333"}},{"ruleId":"D2","level":"warning","message":{"text":"RunRequirement.from_dict (cognitive 22): RunRequirement.from_dict has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12, loops 4, ternaries 4, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/requirement.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"75875348078235927d6ca213c4fbf3087f1a549461f9f23e92c3b067fb551a6a"}},{"ruleId":"D2","level":"warning","message":{"text":"TeamSession.get_team_history (cognitive 22): TeamSession.get_team_history has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, ternaries 3, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/team.py"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8c28ba6c93bf1e56c5107625c754115a98291aeb2b30ce6a278f1a8fa0d5de3"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionCall._build_entrypoint_args (cognitive 22): FunctionCall._build_entrypoint_args has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, boolean chains 2, error handling 1, loops 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"2534ea0b2b1df6ecbf5a220ba375b94b9bebe60fa0f8b68a5f8677b0d6faa1c6"}},{"ruleId":"D2","level":"warning","message":{"text":"ValyuTools._parse_results (cognitive 22): ValyuTools._parse_results has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, boolean chains 6, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/valyu.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"11359ee922e4b64e5245ff500c3d438bd3e6e2c05fcbd6c7896a349649246992"}},{"ruleId":"D2","level":"warning","message":{"text":"WhatsAppTools.__init__ (cognitive 22): WhatsAppTools.__init__ has cognitive complexity 22 (threshold 15). Drivers by points: boolean chains 12, if/else 10. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/whatsapp.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"07d2dc613a28f27a220d783bfcda26c76432a134ddb49eaabc5201fdb941627e"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowTools.__init__ (cognitive 22): WorkflowTools.__init__ has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workflow.py"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d68cdcd9390b265f828d57cde29214f27a816083d44faa41e495f6fe80414af"}},{"ruleId":"D2","level":"warning","message":{"text":"json_schema.get_json_schema (cognitive 22): json_schema.get_json_schema has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, boolean chains 2, error handling 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/json_schema.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c7729109bcda8a032a02a5bb8c277c66ef69e598039289b205b0318eb00d481"}},{"ruleId":"D2","level":"warning","message":{"text":"Clickhouse.async_insert (cognitive 22): Clickhouse.async_insert has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9, error handling 5, ternaries 4, loops 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/clickhouse/clickhousedb.py"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad264f05ce05435f523fa7ddaac02e5944397450eaf9152db4a498a0b2f5fc2"}},{"ruleId":"D2","level":"warning","message":{"text":"PgVector.hybrid_search (cognitive 22): PgVector.hybrid_search has cognitive complexity 22 (threshold 15). Drivers by points: if/else 14, ternaries 5, error handling 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed7a0f02864c1868e27cd3d2c5ebb8226be9eb54e6959b2cb2cda39cde3de94d"}},{"ruleId":"D2","level":"warning","message":{"text":"test_scorer.test_no_lowercase_status_literals (cognitive 22): test_scorer.test_no_lowercase_status_literals has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11, loops 9, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/unit/scorer/test_scorer.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccabb21ef089bbc47a61ab06036e33588f5c940e6ff02051c510947399f50194"}},{"ruleId":"D2","level":"warning","message":{"text":"CacheCluster._update (cognitive 22): CacheCluster._update has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, error handling 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"67d46ead1a3088715d2dbbe49de894611df70b9c6ee2e93fdeb46ac3f93c7c8f"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_container_env (cognitive 22): PostgresDb.get_container_env has cognitive complexity 22 (threshold 15). Drivers by points: if/else 20, boolean chains 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/app/postgres/postgres.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a10e770bb99f440fd2ffcd836f284a15bd761cd37721c348963f12d54aa467"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp_client._parse_jsonrpc_body (cognitive 22): mcp_client._parse_jsonrpc_body has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, error handling 6, loops 2, ternaries 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/mcp_client.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"652aad5cb70afda91fa866929ea42933ff17b8a88ff3e900765884af9e2913f4"}},{"ruleId":"D2","level":"warning","message":{"text":"02_tool_error_persistence.scenario_a_tool_error (cognitive 21): 02_tool_error_persistence.scenario_a_tool_error has cognitive complexity 21 (threshold 15). Drivers by points: ternaries 8, boolean chains 6, loops 5, error handling 1, if/else 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/23_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b59d1e483b7b52640fa4dd6352077afb88bf3e73ec4518596cba9677ba73a4"}},{"ruleId":"D2","level":"warning","message":{"text":"03_step_confirmation_streaming.main (cognitive 21): 03_step_confirmation_streaming.main has cognitive complexity 21 (threshold 15). Drivers by points: ternaries 11, loops 4, boolean chains 3, if/else 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"d79b54fadd0cf097d91db2b48dd1527d63a774e642ce8e2b45d1716e54fd544e"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.get_response_format (cognitive 21): _response.get_response_format has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 3, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2de58f6835d2606992fa422fa15aeb586a6f0c4f558478ac7bfe98d6315e6e0"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.upsert_memories (cognitive 21): MySQLDb.upsert_memories has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 2, ternaries 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1478}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a72006426c9d1066e46eb7cddedf5950a86bb83900311cadf32e4732ed0175"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_user_memories (cognitive 21): AsyncPostgresDb.get_user_memories has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 2, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1164}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdece4e50a7949598998ae76ed7d7af3287f0c8b0f387f5e9d3ee1d35a9d8715"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb._get_table (cognitive 21): PostgresDb._get_table has cognitive complexity 21 (threshold 15). Drivers by points: if/else 21 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"314631bea244c852bda6d2c10aace085bd698901c80d1655095ebbadc941bf65"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.create_component_with_config (cognitive 21): PostgresDb.create_component_with_config has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3874}}}],"partialFingerprints":{"codehealthFindingId/v1":"a03ea751bdf896bb39d5f775d27578b7f0ea1608e335fb0ce6c2adb49293c9a6"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.get_trace (cognitive 21): RedisDb.get_trace has cognitive complexity 21 (threshold 15). Drivers by points: if/else 20, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1825}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bde6864194f9ca8fd8be717133646fa5e5b2752df94faaf1e2d2db1bec6f879"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_sessions (cognitive 21): AsyncSqliteDb.get_sessions has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c40b448954f9dfb5bf680c9ad77924d4e7656d2d548e01c7b3e68146973f14"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.upsert_session (cognitive 21): AsyncSqliteDb.upsert_session has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, ternaries 6, boolean chains 5, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"180e5bfc4c147660852eb4f7cc7a8142eaa4c68d9f0226bb3dcd726d5c0ca9e0"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.upsert_memories (cognitive 21): AsyncSqliteDb.upsert_memories has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 2, ternaries 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1540}}}],"partialFingerprints":{"codehealthFindingId/v1":"eedb358a2f9ac737808ce142a9bddbbfa4312cd22ddac4324d342ba73bf2912e"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_sessions (cognitive 21): SqliteDb.get_sessions has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"881cecb8cea3dc01f9f72473bf72e2465edd85631ac34654efbe0d3496825139"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.upsert_session (cognitive 21): SqliteDb.upsert_session has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, ternaries 6, boolean chains 5, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"74bd2077e88c95cf66cfb9a7e6c8a07d3504b776645cc387c7ddf2a2eb1019f2"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.upsert_memories (cognitive 21): SqliteDb.upsert_memories has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 2, ternaries 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"88164402f03af09d8c016c37921f5e558dafea0a8b272f9b5329403719587e8f"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.create_component_with_config (cognitive 21): SqliteDb.create_component_with_config has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 5). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":3760}}}],"partialFingerprints":{"codehealthFindingId/v1":"2daa7f44b95e00fb2cb8fd0cc4995820226deb78bf6c285043cb91f3bb2d612f"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSystemTools.list_files (cognitive 21): FileSystemTools.list_files has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 2, error handling 2, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/toolkit.py"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb8cd4f05ab90ab828780f96da06fb6622309a1fa3150798aaf4e7b3d4ba1af2"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelMetrics.accumulate (cognitive 21): ModelMetrics.accumulate has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 11, if/else 8, loops 2 (nesting depth added 4). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ac1207d15f58f7c64788e0b25f704326d7316ca9b3902dcd269f53831c023c"}},{"ruleId":"D2","level":"warning","message":{"text":"MessageMetrics.__add__ (cognitive 21): MessageMetrics.__add__ has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"036ee805824d92b6517804a52395a804413ad77ccdf08d3364c206dc8db0b25a"}},{"ruleId":"D2","level":"warning","message":{"text":"SessionMetrics.from_dict (cognitive 21): SessionMetrics.from_dict has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, ternaries 8, loops 3, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c1193be2c449247cf84b6038f94716b1c7be15b87af06a7d12e4ce55d0439f"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._handle_function_call_media (cognitive 21): Model._handle_function_call_media has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10, ternaries 8, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":3030}}}],"partialFingerprints":{"codehealthFindingId/v1":"3da682533504f892b0b370904dbfc7d283ca2687c4ba0d1d104513dbd5a30bdf"}},{"ruleId":"D2","level":"warning","message":{"text":"HITLHandler._resolve_required_approvals (cognitive 21): HITLHandler._resolve_required_approvals has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, ternaries 4, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/hitl.py"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f6cdb472dd3b6b9d6961b1bb2c45de0e096ed6af370309d1da456863474ef0"}},{"ruleId":"D2","level":"warning","message":{"text":"interactions.confirmation_row_summary (cognitive 21): interactions.confirmation_row_summary has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 4, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/interactions.py"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f4c0fdab9cd032bbd0b7df076f07eb19bd30524352ce8a31a9a2dba7c1cdfd"}},{"ruleId":"D2","level":"warning","message":{"text":"MCPIdentityBridgeMiddleware.__call__ (cognitive 21): MCPIdentityBridgeMiddleware.__call__ has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp_auth.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e6516ebaeca0a4af8c4c93b0de054697284d588a676d5d789a0bbb43dbfd2f"}},{"ruleId":"D2","level":"warning","message":{"text":"scopes.get_accessible_resource_ids (cognitive 21): scopes.get_accessible_resource_ids has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, boolean chains 3, loops 2, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/scopes.py"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca48bba0013240825422b3d8f1badc390e93a0fba3724da79b0ed34aebe404e"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalSkills.load (cognitive 21): LocalSkills.load has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/skills/loaders/local.py"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"671d54451fd080541b63d0372483aace2d6861f10ea89a05fc689e6ca3c172f4"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.acontinue_run_dispatch (cognitive 21): _run.acontinue_run_dispatch has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, boolean chains 5, ternaries 3 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":7705}}}],"partialFingerprints":{"codehealthFindingId/v1":"0813fd21e5b02e0c89094e1df47ef5edbc8eac14d373765175e4b8eed5daf503"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.save_session (cognitive 21): _session.save_session has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_session.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e5264970c0e12472374d152532138f5ab36043621bafa2472393045c0a07e1"}},{"ruleId":"D2","level":"warning","message":{"text":"DoclingTools.__init__ (cognitive 21): DoclingTools.__init__ has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 11, if/else 10. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/docling.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1cd00fb49d83d9ce3bb419441fa9c0cd52a2a568580b32c2e5eedd76eddf947"}},{"ruleId":"D2","level":"warning","message":{"text":"JiraTools.__init__ (cognitive 21): JiraTools.__init__ has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 11, if/else 10. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/jira.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18c8205e330e57baf12f10828ff11efc8d10686e9cb50081a7fff009ad6dbcc"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresTools.summarize_table (cognitive 21): PostgresTools.summarize_table has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 5, boolean chains 1, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/postgres.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"69220d678b0dbf6c936b878e6089d4c328cc0c0891a11c746d7ce037b11797b1"}},{"ruleId":"D2","level":"warning","message":{"text":"RedshiftTools.summarize_table (cognitive 21): RedshiftTools.summarize_table has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 5, boolean chains 1, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redshift.py"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffb481818a54d56c6e04fbe5f69e4b4a113cf747a3d2ff669e8f37fd016579f4"}},{"ruleId":"D2","level":"warning","message":{"text":"TwilioTools.__init__ (cognitive 21): TwilioTools.__init__ has cognitive complexity 21 (threshold 15). Drivers by points: boolean chains 14, if/else 7. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/twilio.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b32fe19ef3b98c29bca4aebb1a7ba1d77c9a1d4764c81002c1ea81b2d414248"}},{"ruleId":"D2","level":"warning","message":{"text":"message.normalize_tool_messages (cognitive 21): message.normalize_tool_messages has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 4, ternaries 3, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"a28ae809812d0353e01f210de6ad149d2f159d08067f3c97b258c4e601d41bb0"}},{"ruleId":"D2","level":"warning","message":{"text":"tokens.count_file_tokens (cognitive 21): tokens.count_file_tokens has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10, ternaries 6, error handling 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/tokens.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"361146a6fb035f6588f852ae14c71c36e6f11cc74427c850d61b61aa99adf862"}},{"ruleId":"D2","level":"warning","message":{"text":"ChromaDb.update_metadata (cognitive 21): ChromaDb.update_metadata has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, ternaries 4, boolean chains 3, error handling 2, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"667f2d87609510839eb5d1fb5967a3b9c3833eaa378af0a1a2abb5648c5ca63f"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.drop (cognitive 21): MongoDb.drop has cognitive complexity 21 (threshold 15). Drivers by points: error handling 10, if/else 10, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44baf41fd4673e208091eb1d0150af1cbdd3563a583a1b5a2677f0c1241b20a"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDB._parse_hash (cognitive 21): ValkeyDB._parse_hash has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb28bd39535edbc69bb595e8e85c021edb4526550f5b004d92948423fe973c13"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.to_dict (cognitive 21): Workflow.to_dict has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, boolean chains 3 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"491961d5c67c7a4be28dee0dccd0baa28c9397fc2505a3394a9b746f51aae3a7"}},{"ruleId":"D2","level":"warning","message":{"text":"test_multi_round_user_input.test_multi_round_user_control_flow_tools (cognitive 21): test_multi_round_user_input.test_multi_round_user_control_flow_tools has cognitive complexity 21 (threshold 15). Drivers by points: loops 8, if/else 7, boolean chains 3, ternaries 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/agent/human_in_the_loop/test_multi_round_user_input.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c6bf1cd1a5596e661072d6c4bd59b1e78da05c5dea200065c7b2e12c032976"}},{"ruleId":"D2","level":"warning","message":{"text":"test_multi_round_user_input.test_requirements_accumulate_across_rounds (cognitive 21): test_multi_round_user_input.test_requirements_accumulate_across_rounds has cognitive complexity 21 (threshold 15). Drivers by points: loops 10, if/else 9, boolean chains 2 (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/agent/human_in_the_loop/test_multi_round_user_input.py"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddaefb8d0a56cd66a5e55ea0a82025bdee76ce6c6c7cfeee3e89287b453a6f51"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsApp.get_container_env (cognitive 21): AwsApp.get_container_env has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/app/base.py"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"97b1475161e6dcdd808cc9cf670dd16706fe11386f5787346d7ea992125e9035"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsApp.security_group_definition (cognitive 21): AwsApp.security_group_definition has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/app/base.py"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f3ab3a405955dc953c1facfa7e8a68d6da02bcda1a46b1051d54c00aeac7418"}},{"ruleId":"D2","level":"warning","message":{"text":"LoadBalancer._create (cognitive 21): LoadBalancer._create has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 4, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elb/load_balancer.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c210a31383955111f7d86bd065fdc225b839a9347e7f2d3f559a3bfc8a7ce366"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowWebSocketClient.run_interactive (cognitive 20): WorkflowWebSocketClient.run_interactive has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, error handling 4, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/background_execution/websocket_client.py"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc36f776f9f354f5151c0549bdf0d2850c1b172bfec8af0e3ea45d90919537c5"}},{"ruleId":"D2","level":"warning","message":{"text":"01_error_retry_skip.main (cognitive 20): 01_error_retry_skip.main has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8, loops 6, ternaries 6 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/01_error_retry_skip.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"02f3eb27b8a4054837357a54b6204f9f86853633d6b5f73b2ea901efb0ea51ba"}},{"ruleId":"D2","level":"warning","message":{"text":"basic.krippendorff_alpha (cognitive 20): basic.krippendorff_alpha has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 6, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e94534f5dc5546aeb5072250aceb42c46383b6fbd417e7361a3760ab50b39fd"}},{"ruleId":"D2","level":"warning","message":{"text":"jury_votes.krippendorff_alpha (cognitive 20): jury_votes.krippendorff_alpha has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 6, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/jury_votes.py"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e2599a30fe1e3a3aad20d1f539eb3f3e6830d86e8185f8a63b256ab2b73a844"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.acontinue_run_dispatch (cognitive 20): _run.acontinue_run_dispatch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, boolean chains 5, ternaries 3 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4119}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec8b890a45da0cd0488536df57a3367e94264b3f4f3bf070234c6ff43dc8a444"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.get_tools (cognitive 20): _tools.get_tools has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, boolean chains 4, ternaries 4 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"9de0dc1f5e5322950d334109dbf70db27b6c76da318523b9443f79043aadaec7"}},{"ruleId":"D2","level":"warning","message":{"text":"Agent.__init__ (cognitive 20): Agent.__init__ has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 4 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/agent.py"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe339fa6b18f3d9098e0dc8c9eba5e52b22cba7e6d8e2f491060d0918e33e61b"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.get_traces (cognitive 20): AsyncMongoDb.get_traces has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 3, error handling 1, loops 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2543}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4763f46f98c2b29605e23c30dc9d159df6e807fb511978770a4a395cf43cdf7"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.get_traces (cognitive 20): MongoDb.get_traces has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 3, error handling 1, loops 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2381}}}],"partialFingerprints":{"codehealthFindingId/v1":"d91f9243535a59e869d08fed6c8aeae12f8b7c669f748dcb3176f77752286d18"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_sessions (cognitive 20): PostgresDb.get_sessions has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"656225600370d2db7ecb1abaa5d139c158d89e52cc9fa8d268720314d6335862"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_component (cognitive 20): PostgresDb.upsert_component has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, boolean chains 1, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3652}}}],"partialFingerprints":{"codehealthFindingId/v1":"48451c307a95c9f5b82a020271955af248d1495cc84aee10bfb8ac05195ed2eb"}},{"ruleId":"D2","level":"warning","message":{"text":"RedisDb.upsert_session (cognitive 20): RedisDb.upsert_session has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"b00ca2d3410024c2a3925bf12e2e86c04fa06639905cc616248b831507aad360"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.upsert_session (cognitive 20): ValkeyDb.upsert_session has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"f62ad2cdb4b8b0bd2c8f8494e88ba405fdd9c2b3b29719580e812a37646b9897"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_metrics (cognitive 20): ValkeyDb.get_metrics has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1530}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e88b8ce7e1f53aea931843786236c72f6ffbbc6e39dfb78a6819917b2fbd104"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.get_learnings_user_stats (cognitive 20): ValkeyDb.get_learnings_user_stats has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, boolean chains 4, ternaries 2, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2926}}}],"partialFingerprints":{"codehealthFindingId/v1":"941968e7229ca92a5ea7502fa27e0d3cbdfd2891f483ff5b2c028c723fa7e54d"}},{"ruleId":"D2","level":"warning","message":{"text":"_engine._attempt_body (cognitive 20): _engine._attempt_body has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/_engine.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49d7e710795dc3cbb5faf31580c3f775f09c1c1d98f7692fb19f3045578d136"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentAsJudgeEval.run (cognitive 20): AgentAsJudgeEval.run has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, boolean chains 7, ternaries 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e6a9cf5d4f41d66909a0a54d378dcefbd66d1c42c378219491fdafaf88582c"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._build_content_hash (cognitive 20): Knowledge._build_content_hash has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9, ternaries 8, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2210}}}],"partialFingerprints":{"codehealthFindingId/v1":"737f9e783ba9f1abccaf8d892128b3bf9cce068e0473655b395a37a5a158a0ca"}},{"ruleId":"D2","level":"warning","message":{"text":"CSVReader.async_read (cognitive 20): CSVReader.async_read has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7, boolean chains 4, ternaries 4, error handling 3, loops 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/csv_reader.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"48b9be9e9f7f41414726f43e2854083f4abb2331fb52ec8cf4a790ab88247adb"}},{"ruleId":"D2","level":"warning","message":{"text":"pdf_reader._clean_page_numbers (cognitive 20): pdf_reader._clean_page_numbers has cognitive complexity 20 (threshold 15). Drivers by points: ternaries 11, boolean chains 4, if/else 3, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/pdf_reader.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc72470ed72c78fc23a514763ace887f5acf798d2d23d35f8e04b5b9a1ef223e"}},{"ruleId":"D2","level":"warning","message":{"text":"PPTXReader.read (cognitive 20): PPTXReader.read has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, loops 5, boolean chains 3, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/pptx_reader.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"31960eaeab6ef3c3e8f4cbf7bc124605a35505c9ef6ec8f0ce956787342bcb45"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore.asearch (cognitive 20): EntityMemoryStore.asearch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8, ternaries 6, boolean chains 4, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3188}}}],"partialFingerprints":{"codehealthFindingId/v1":"27338089190f5110bc439957e216d1b4483e747bfb5493e92fe4105da01e856c"}},{"ruleId":"D2","level":"warning","message":{"text":"File._normalise_content (cognitive 20): File._normalise_content has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, error handling 7, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/media.py"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eedb6645725ba6601a68894a7aa3efe48f9a251951f27032cfadfc3f921b176"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsBedrock._format_tools_for_request (cognitive 20): AwsBedrock._format_tools_for_request has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 4, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac430d86ca61290b10ed6d05ccad6f5da7d5144a26120aaae432d13b9a6df439"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsBedrock._parse_provider_response (cognitive 20): AwsBedrock._parse_provider_response has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, boolean chains 4, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e9d0fda1538451530835d2c77a2b3149afe5e28da045be13d0a7e8a3584219"}},{"ruleId":"D2","level":"warning","message":{"text":"base._handle_agent_exception (cognitive 20): base._handle_agent_exception has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8, error handling 4, loops 4, ternaries 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"6349e0c0f67c024dc7692b43cee1f8564934cfbbea3353fe66ee4c37650de148"}},{"ruleId":"D2","level":"warning","message":{"text":"Gemini.get_client (cognitive 20): Gemini.get_client has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"6001f6618aa66016390ab12f5a21d387b9490a5f476e67a423812c3aed3f83ac"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.media_to_content_item (cognitive 20): utils.media_to_content_item has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, boolean chains 5, error handling 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/utils.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f53fdf12ad0428ca8d2409f58169477122921ea017a5052513ab2097887296"}},{"ruleId":"D2","level":"warning","message":{"text":"WatsonX.parse_tool_calls (cognitive 20): WatsonX.parse_tool_calls has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ibm/watsonx.py"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"909f2f6a27ddc6b922723c5e87dc69bb7375f7c0c3f2864a347fcc88283f7128"}},{"ruleId":"D2","level":"warning","message":{"text":"HITLHandler.handle_check_status (cognitive 20): HITLHandler.handle_check_status has cognitive complexity 20 (threshold 15). Drivers by points: boolean chains 9, if/else 9, loops 2 (nesting depth added 2). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/hitl.py"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e58e435c6cea9095cdad6447b9a4b5762fc4ba96365a45623f5cb2188257357"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp._consume_workflow_stream (cognitive 20): mcp._consume_workflow_stream has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, boolean chains 5, error handling 2, ternaries 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp.py"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"96fb7c3de59151e53c878efa5b992e876e23a5f7b07149f373ab4fc488a2622b"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.run_reliability_eval (cognitive 20): utils.run_reliability_eval has cognitive complexity 20 (threshold 15). Drivers by points: ternaries 10, if/else 6, boolean chains 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"a80ee6d337989f69250003f7eb71c3e9c4e84e0a2e35a4d9513e4e18530a35f7"}},{"ruleId":"D2","level":"warning","message":{"text":"RunRequirement.provide_user_input (cognitive 20): RunRequirement.provide_user_input has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/requirement.py"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6345f223f8b64acecc58bff4a80c82a4ad31707b79f98ff786af3dfe08530c9"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.run_dispatch (cognitive 20): _run.run_dispatch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, boolean chains 4, ternaries 4, error handling 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1855}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f7c1772d6dcbdf42e6c189df6ed47909da86535329a5c000f6729c1e5fdd48a"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.arun_dispatch (cognitive 20): _run.arun_dispatch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, ternaries 3 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4094}}}],"partialFingerprints":{"codehealthFindingId/v1":"017ac961aa586c127b46dc465d5771cafd2ea80e1e591918a0ec4b7a6beadc99"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.aget_session (cognitive 20): _session.aget_session has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 6 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_session.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"d97f9d3d3bf10812107933b862348c6a8ba14201105e029c3208802b843fb1a8"}},{"ruleId":"D2","level":"warning","message":{"text":"CodingTools.grep (cognitive 20): CodingTools.grep has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, error handling 3, boolean chains 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0724bb6b8c0ce3fb5026e2faa5539bf71e3655419d4d8d6da814c35a6bf0f6"}},{"ruleId":"D2","level":"warning","message":{"text":"CodingTools.find (cognitive 20): CodingTools.find has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, error handling 3, ternaries 2, boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"c120721d13dc1f996b6a7d9376e9c93a2d5d581bab6af0312fc0cacb153751c8"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryTools.__init__ (cognitive 20): MemoryTools.__init__ has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 6 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/memory.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c46b78b012b5bb8459950dc805133bc662a3c5078319991ed3aacd5cc917ff"}},{"ruleId":"D2","level":"warning","message":{"text":"RedmineTools.update_issue (cognitive 20): RedmineTools.update_issue has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, error handling 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/redmine.py"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"08f554e07e1929afe9a8488f0ae8e1ea331188988231bf1e321285b8a07de345"}},{"ruleId":"D2","level":"warning","message":{"text":"TrafilaturaTools.crawl_website (cognitive 20): TrafilaturaTools.crawl_website has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9, error handling 4, ternaries 4, loops 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/trafilatura.py"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fecf2524ef1fff6e6ebd7e66685ef1e7365672c81470dac0ada1fec871c2f23"}},{"ruleId":"D2","level":"warning","message":{"text":"YouTools.you_search (cognitive 20): YouTools.you_search has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, error handling 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/youcom.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8ffc829e5f76cd0d217fee4a51523033bcb0b1306114cf356236867f6f0d460"}},{"ruleId":"D2","level":"warning","message":{"text":"PgVector._async_upsert (cognitive 20): PgVector._async_upsert has cognitive complexity 20 (threshold 15). Drivers by points: if/else 8, error handling 6, boolean chains 3, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d7901347e2c198d2e1904df2980fe5e37673b284732c4d42f9fbb89ca86bc5"}},{"ruleId":"D2","level":"warning","message":{"text":"Qdrant.insert (cognitive 20): Qdrant.insert has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/qdrant/qdrant.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad2dde37ec15a4e4f2b26ba8cd8e3c224244cf39958be59e4fabeafb2dc402ce"}},{"ruleId":"D2","level":"warning","message":{"text":"Parallel._aggregate_results (cognitive 20): Parallel._aggregate_results has cognitive complexity 20 (threshold 15). Drivers by points: boolean chains 8, if/else 7, ternaries 3, loops 2 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a7383423a28601e39119f243a8b53666687cb10b4aeb5c8c8740850c4736894"}},{"ruleId":"D2","level":"warning","message":{"text":"GlueCrawler.get_glue_crawler_targets (cognitive 20): GlueCrawler.get_glue_crawler_targets has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, loops 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/glue/crawler.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d783fabe275a07420f979f178f02aa69fac5f33753591c7fc06887b36013d17"}},{"ruleId":"D2","level":"warning","message":{"text":"reader.read_secrets (cognitive 20): reader.read_secrets has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/secret/reader.py"},"region":{"startLine":7}}}],"partialFingerprints":{"codehealthFindingId/v1":"5045234df0a634c5bd6b52b38e0f0e43c80ed85dc8638b9026bb60b4b6890450"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraSettings._validate_and_set_keys (cognitive 20): InfraSettings._validate_and_set_keys has cognitive complexity 20 (threshold 15). Drivers by points: if/else 20 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/infra/settings.py"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"732a4fab492032ceb87b131df9d06a47deb6173778808a8d25dc3abf48ddc12e"}},{"ruleId":"D2","level":"warning","message":{"text":"connect._mint (cognitive 20): connect._mint has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, boolean chains 1, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"6514bd21556621227860935c2cd12472ee3c30a7e72d072ea53b7472292aa0bb"}},{"ruleId":"D2","level":"warning","message":{"text":"check_style.check_style (cognitive 19): check_style.check_style has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/16_skills/sample_skills/code-review/scripts/check_style.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2235dc8e7c7c48282bfdeb45eb0ad77c8cb763e068eb763604c5ff00596d45c"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowWebSocketClient.listen_for_events (cognitive 19): WorkflowWebSocketClient.listen_for_events has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, error handling 4, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/background_execution/websocket_client.py"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"42edd7fd5b736ee1d9cd694a6745d6791b5c5549bb4ca787a9b83620a4b3aa1c"}},{"ruleId":"D2","level":"warning","message":{"text":"step_history.analyze_food_preferences (cognitive 19): step_history.analyze_food_preferences has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, boolean chains 6, ternaries 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/history/step_history.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"a076e35881c961facaf1026b2e9e832f05a5ae0035b50140a6ccdb888c31fe21"}},{"ruleId":"D2","level":"warning","message":{"text":"03_step_confirmation_streaming.process_event_stream (cognitive 19): 03_step_confirmation_streaming.process_event_stream has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, ternaries 4, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"32ef42a6b08d686b66ce4dfa4f3fc32ff9e522e7bc06192b19634a01418ffd53"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectNotesStore.print (cognitive 19): ProjectNotesStore.print has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/08_learning/08_custom_stores/02_custom_store_with_db.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"469505a9dde655e06d1397a42ce14a7d5e3bc5884521397f28f0c7dfd41d6689"}},{"ruleId":"D2","level":"warning","message":{"text":"cookbook_runner.main (cognitive 19): cookbook_runner.main has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 6, boolean chains 1, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/scripts/cookbook_runner.py"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"86566cc5f58f68ec131bc36e314f055ddd8100842d8951e62215c565408b57dd"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.update_reasoning_content_from_tool_call (cognitive 19): _response.update_reasoning_content_from_tool_call has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"8694dcecd5bbbca6330ecba3ad2c172595635e13a96cc0143155aee4c2ff12be"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.determine_tools_for_model (cognitive 19): _tools.determine_tools_for_model has cognitive complexity 19 (threshold 15). Drivers by points: ternaries 8, if/else 7, boolean chains 2, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"770223069f487043b0207daf3cbd133dd66095b4b4d568d9e02191056ed692e7"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.handle_tool_call_updates (cognitive 19): _tools.handle_tool_call_updates has cognitive complexity 19 (threshold 15). Drivers by points: boolean chains 8, if/else 7, ternaries 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":856}}}],"partialFingerprints":{"codehealthFindingId/v1":"616f052b82f8d0d6edcc5168fa6657103af656d17817f348f7e8fadd51d4ae41"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.handle_tool_call_updates_stream (cognitive 19): _tools.handle_tool_call_updates_stream has cognitive complexity 19 (threshold 15). Drivers by points: boolean chains 8, if/else 7, ternaries 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f54a308f855d7283ebcb488145e266283b7d2da721bc65d749c6c7920a780e"}},{"ruleId":"D2","level":"warning","message":{"text":"AntigravityAgent._arun_adapter_stream (cognitive 19): AntigravityAgent._arun_adapter_stream has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7, boolean chains 5, loops 3, error handling 2, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/antigravity/agent.py"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"760e648c23752e02f16c39d35872bd68ebecf88272428ec2c545a648f29ced1b"}},{"ruleId":"D2","level":"warning","message":{"text":"A2AClient._parse_task_result (cognitive 19): A2AClient._parse_task_result has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 5, ternaries 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"45cdd0afc4ac10e53de4ffadc8b3111a0ad58be8974fd679d407532f9a28b749"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.delete_user_memories (cognitive 19): FirestoreDb.delete_user_memories has cognitive complexity 19 (threshold 15). Drivers by points: loops 10, if/else 8, error handling 1 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":747}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2334c4065cabf81564aa5c3e67b3f18a645a6fe4f8cdae8529c5d2c64c59dae"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.get_sessions (cognitive 19): AsyncMySQLDb.get_sessions has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, ternaries 4, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"445a0888850f87345ba19ef96719a170a38d34243e254a528c42025604834313"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.upsert_knowledge_content (cognitive 19): MySQLDb.upsert_knowledge_content has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 1, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1877}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aab963a51d78c341b1750be68dc85ef651fbe8f3fba9a3bc2e540debfb10c9c"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.get_traces (cognitive 19): AsyncPostgresDb.get_traces has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 2, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2586}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b7653118e59764f4a37b0f048774bbc25cd56fb296f1b8fdd45775d0b05e7e6"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_traces (cognitive 19): PostgresDb.get_traces has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 2, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3061}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c4575d6f28584805138eba0e674fd48cf3c11727f2ca37a565a16a967233c98"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_user_memories (cognitive 19): AsyncSqliteDb.get_user_memories has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, ternaries 4, loops 2, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d52d3740079fbca2adc5ea4ccfd55f7aa174d3065c6c3361494f017c4a1a654"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_traces (cognitive 19): AsyncSqliteDb.get_traces has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 2, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2770}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c4ffa72eb6500cdc3d89a90184a2346495c431dba7d000b5cf108c927bb3e29"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_traces (cognitive 19): SqliteDb.get_traces has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 2, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":2675}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc53827853cfa096843939c969e73c8b2b41caf6b2baa98917b6a9ede8831986"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentAsJudgeEval.arun (cognitive 19): AgentAsJudgeEval.arun has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, boolean chains 7, ternaries 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":575}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a0fc72d89a449c31a42d4122909cebd2952b91e28488b79a66d72a0aea046ce"}},{"ruleId":"D2","level":"warning","message":{"text":"DbFileSystem.__init__ (cognitive 19): DbFileSystem.__init__ has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, ternaries 4, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/db.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"6350e5e7b691cb93d978c8bf48ffa11770d13719d1c1005a112382ae7b458434"}},{"ruleId":"D2","level":"warning","message":{"text":"DbFileSystem.append (cognitive 19): DbFileSystem.append has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, ternaries 7, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/db.py"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b5b35e5d876b80fda1116e7a5a3b60e57c21f44ca604cb79d336c72b60cf50"}},{"ruleId":"D2","level":"warning","message":{"text":"AwsBedrockEmbedder._extract_embeddings (cognitive 19): AwsBedrockEmbedder._extract_embeddings has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 3, ternaries 3, error handling 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/aws_bedrock.py"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f0e5d2f6f543246c359f990562f7794996ff3d95bf0d417579b4abc948482f2"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIEmbedder.async_get_embeddings_batch_and_usage (cognitive 19): OpenAIEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 19 (threshold 15). Drivers by points: error handling 6, if/else 6, loops 4, ternaries 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/openai.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"53c76ccf1ccc3fecc555347f9dd1f17f7aa60c66865f5ec5c51b3b782d52a492"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._build_remote_content_identity (cognitive 19): Knowledge._build_remote_content_identity has cognitive complexity 19 (threshold 15). Drivers by points: boolean chains 11, ternaries 6, if/else 2 (nesting depth added 3). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2157}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ab15ea200b50896136e849f5accd8b0272a46cef8fbd7cbda96f03fac568db"}},{"ruleId":"D2","level":"warning","message":{"text":"CSVReader.read (cognitive 19): CSVReader.read has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5, boolean chains 4, ternaries 4, error handling 3, loops 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/csv_reader.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"a49aca6b10e85625d8d697917fdb14f963cf35205757d4d2a4de4eaf9f0f358c"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldLabeledCSVReader.read (cognitive 19): FieldLabeledCSVReader.read has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7, boolean chains 4, loops 3, ternaries 3, error handling 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f54adcd832e4a0a5ffe66247e3f576f0361204bfe743cfe201556d884014eaf"}},{"ruleId":"D2","level":"warning","message":{"text":"S3Config._process_list_response (cognitive 19): S3Config._process_list_response has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 3, ternaries 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/remote_content/s3.py"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"769ba0974664e9715cb4dba2c7ecc28acb94f7296338670aadb3c62bf42bd8b2"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionLogStore.build_context (cognitive 19): DecisionLogStore.build_context has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, loops 1, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02eea9a842eb6bc04a7edd3646cc246f7d82dc07ca91a0bf97eaa2419f448fe"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._apply_forget (cognitive 19): EntityMemoryStore._apply_forget has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 2, ternaries 2 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2139}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d06a863df74c1133493f8082d3402788730115c4cb8f071e73d8cc785b36fa8"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._aname_candidates (cognitive 19): EntityMemoryStore._aname_candidates has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8, ternaries 6, loops 3, boolean chains 1, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2634}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f5fc4402360c51ecc645c23abcecae3652685719ea24ff3746e5de8aed2a839"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore.alist_entities (cognitive 19): EntityMemoryStore.alist_entities has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7, ternaries 6, boolean chains 4, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2980}}}],"partialFingerprints":{"codehealthFindingId/v1":"e39849663d3fcb18e36d17c6bc7f8cb4ffde1376ae85bca821354e32bc1c47ba"}},{"ruleId":"D2","level":"warning","message":{"text":"LearnedKnowledgeStore.print (cognitive 19): LearnedKnowledgeStore.print has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 1, loops 1, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"562902dd54b379c5c4da242fc5c16a1cd94b40c60da3c2e36c8f979787c38781"}},{"ruleId":"D2","level":"warning","message":{"text":"Claude.get_request_params (cognitive 19): Claude.get_request_params has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"c132a345f88cea02e69e211db1a7e55a45dd92f8b89527c0c9837a0eaf7fbad8"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._ainvoke_stream_with_retry (cognitive 19): Model._ainvoke_stream_with_retry has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 6, error handling 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"07fabaccb932e5e4352710f7910e24477554a25b1b27c446ecf7911492d11f85"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses.invoke_stream (cognitive 19): OpenAIResponses.invoke_stream has cognitive complexity 19 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":970}}}],"partialFingerprints":{"codehealthFindingId/v1":"18e967b4578c1db58b242bb7f0c13514035562f8b026d1d3fc2cfc4717712ecc"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses.ainvoke_stream (cognitive 19): OpenAIResponses.ainvoke_stream has cognitive complexity 19 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb43535d4b51973df31b1a6fa78a74a2aa8a09666517e98f7ee6312bf4086d8"}},{"ruleId":"D2","level":"warning","message":{"text":"formatting._merge_blockquote_lines (cognitive 19): formatting._merge_blockquote_lines has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, ternaries 6, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/telegram/formatting.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bc5859d631ae3df0567340508ccf5caaccca54c2643e53e45d9928df124de69"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp.get_mcp_server (cognitive 19): mcp.get_mcp_server has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 2, ternaries 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp.py"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"be26891cc3486e6732b4988a8036abbc9fb7e96d2573f62370fa163075f9c1fd"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.get_response_format (cognitive 19): _response.get_response_format has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 1, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb44c044cf45ab7e95ef2cb0a624c7bcc39971b32491bbaf5e72fc93c41bc99"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.update_reasoning_content_from_tool_call (cognitive 19): _response.update_reasoning_content_from_tool_call has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"7530039f4672bf718b17da40b70784426486c204ca76d451ec3e295c55165871"}},{"ruleId":"D2","level":"warning","message":{"text":"TaskList.get_summary_string (cognitive 19): TaskList.get_summary_string has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8, loops 5, ternaries 5, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/task.py"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"5064d34e0d4600d9b6f18b523468d2e93f9e933fcdf004a7da965e5ac0077457"}},{"ruleId":"D2","level":"warning","message":{"text":"AntigravityTools._load_agent_directory (cognitive 19): AntigravityTools._load_agent_directory has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, error handling 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/antigravity.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"93df88a0e99392f6fc1de67b34d562911413b681650495c3a2034d395528e898"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenCVTools.capture_image (cognitive 19): OpenCVTools.capture_image has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, loops 2, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/opencv.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0813695b1f7a56c9638ee528f1d95b91eb0603be0252d95981b1d2e6975eb49b"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualizationTools.create_scatter_plot (cognitive 19): VisualizationTools.create_scatter_plot has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 4, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/visualization.py"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"17078eda92ce96b42e9a078a379db66b8859a6e631ce56b66dad59db10e753aa"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.scrub_tool_results_from_run_output (cognitive 19): agent.scrub_tool_results_from_run_output has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 5, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f70d70b49b6709b7c3d94bd98710e243a682112c0ebd4d1099a8d522679cca"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.validate_input (cognitive 19): agent.validate_input has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, error handling 7 (nesting depth added 6). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":1138}}}],"partialFingerprints":{"codehealthFindingId/v1":"85aa9352b9c8082a1a401bc77da93626fc9d8e8361f0eabde65ae5657f8f1d86"}},{"ruleId":"D2","level":"warning","message":{"text":"message.safe_truncation_index (cognitive 19): message.safe_truncation_index has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 4, boolean chains 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f00a128ef35e47bf66d59130e6e6738d9ee797d1243b3f58e5089f1222b3e1"}},{"ruleId":"D2","level":"warning","message":{"text":"response.get_paused_content (cognitive 19): response.get_paused_content has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 8, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/response.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a433e8ca30e35e4550166a87b1a472d955f11b5d9ff30273c3fd5a754c416f62"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition._aevaluate_condition (cognitive 19): Condition._aevaluate_condition has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 2, error handling 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bea21cb430705ce9d6647e16bd08d4f922c384494a11d2b98651cc20c15b165"}},{"ruleId":"D2","level":"warning","message":{"text":"CacheCluster.get_cache_endpoint (cognitive 19): CacheCluster.get_cache_endpoint has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 3, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"98fdd492f602f00fc9b4b5b6233ff89ec0f1581f62a58ce98e2ff2c6bb8c82a3"}},{"ruleId":"D2","level":"warning","message":{"text":"CacheCluster.get_cache_port (cognitive 19): CacheCluster.get_cache_port has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 3, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d71036c1b3876b741988c3be24d65241823014967d49ad34c430f0161a9a260"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraResource.get_input_file_path (cognitive 19): InfraResource.get_input_file_path has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/base/resource.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b19a6e4d0ed9e52116be0317c071b11725ab6ec4118cce8a1bc9cf9c385d2e"}},{"ruleId":"D2","level":"warning","message":{"text":"InfraResource.get_output_file_path (cognitive 19): InfraResource.get_output_file_path has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/base/resource.py"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"995ba632be06318f024fdba4d0d3c180462d3e033e243f26fffdac377418f51b"}},{"ruleId":"D2","level":"warning","message":{"text":"DockerImage.buildx (cognitive 19): DockerImage.buildx has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 2, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resource/image.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf376c2f4df25b2047dad016f8085727773b33ae515fb30940a1478ce08d663"}},{"ruleId":"D2","level":"warning","message":{"text":"followup_suggestions_streaming.main (cognitive 18): followup_suggestions_streaming.main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 5 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/02_input_output/followup_suggestions_streaming.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b18583f8d0ef7890cc2c75e399e6e6aa27a57ffb9a6d331183ef7a4d9dace3"}},{"ruleId":"D2","level":"warning","message":{"text":"background_execution_structured.example_multiple_background_runs (cognitive 18): background_execution_structured.example_multiple_background_runs has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 5, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/background_execution_structured.py"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d9e208fc8c106852e2a85095fc45d712b893eae9b9ddfd6d8b67d778f2ffd77"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowWebSocketTester._phase2_reconnect (cognitive 18): WorkflowWebSocketTester._phase2_reconnect has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, error handling 2, ternaries 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/websocket_reconnect.py"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f8cf9a71988505c20d01f91736429368dddbb2504f8c4b00db42dc84ec1063f"}},{"ruleId":"D2","level":"warning","message":{"text":"user_input.provide_values (cognitive 18): user_input.provide_values has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/user_input.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e346ff0576f0897e907d2a1caba52aaa10b9b7e1d3be54d41f13680ea2f931"}},{"ruleId":"D2","level":"warning","message":{"text":"studio_hitl_agent.resolve_feedback (cognitive 18): studio_hitl_agent.resolve_feedback has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/22_studio/studio_hitl_agent.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"150e785aff44f17acaa1e83ea83a2c701c9aa54bf06474e79cb30c5f39032d8a"}},{"ruleId":"D2","level":"warning","message":{"text":"jury_calibrated.main (cognitive 18): jury_calibrated.main has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 7, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_05_text_pairwise_preference/jury_calibrated.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"78035f0113c31b410852bb3da5c24104ff227765600cbc090201872c0b6996ea"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.resolve_run_dependencies (cognitive 18): _run.resolve_run_dependencies has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, error handling 3, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d4410eb23056fba6a02d1babb238e789cacef448c1c00758e3ac66954959ca"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools.raise_if_async_tools (cognitive 18): _tools.raise_if_async_tools has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c5ba9cbccc2bb2c2219ed3d69b3c483b1f90560cc394bdd57a3d10491350bb"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseExternalAgent._get_history_from_session (cognitive 18): BaseExternalAgent._get_history_from_session has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6, boolean chains 5, ternaries 4, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0635a6e6f460b1e870b448f32eab2667fd7a8a86396c02b396bb460444e6863"}},{"ruleId":"D2","level":"warning","message":{"text":"GitBackend.setup (cognitive 18): GitBackend.setup has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/backend.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba6ea3b83722a79a365fed3c5bee83276892021c8cabe6e3707bc4931784acba"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.delete_sessions (cognitive 18): DynamoDb.delete_sessions has cognitive complexity 18 (threshold 15). Drivers by points: loops 7, if/else 6, error handling 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef9383b97c1b683c388c7ebd9c872586767a23dd6b4a355fc7fc5e9331920447"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.create_spans (cognitive 18): DynamoDb.create_spans has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, error handling 3, loops 3, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2727}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ad62ceea2568ded6fb267a86fe7e6f7f2a05819454e8e5898cede98a9f5834"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._create_composite_indexes (cognitive 18): utils._create_composite_indexes has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7, ternaries 5, error handling 3, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/utils.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"d77822f164b0e8ed164a92c04c64110d98b33c9003754092ffb238e68637c462"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.get_user_memories (cognitive 18): AsyncMySQLDb.get_user_memories has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, ternaries 4, loops 2, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1246}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6ac001133792a3e9afc138bcb285cec937a13955bef05da168f47fa73af9707"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.upsert_knowledge_content (cognitive 18): AsyncMySQLDb.upsert_knowledge_content has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2082}}}],"partialFingerprints":{"codehealthFindingId/v1":"e39f8e7f7d064b750184ee4fbea8c2f0439b447a095d3262bd820c2ae3e15068"}},{"ruleId":"D2","level":"warning","message":{"text":"MySQLDb.get_user_memories (cognitive 18): MySQLDb.get_user_memories has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 4, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1240}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c0cceb07d8cad1703d7f096a38cc0332a75ca008f182e30f71e1737eea5ca61"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.get_user_memories (cognitive 18): PostgresDb.get_user_memories has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 4, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1566}}}],"partialFingerprints":{"codehealthFindingId/v1":"4322c0613d5fc3739ac0ccea197329a7c825811ab28799eded7eb6af8d45ef77"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.get_user_memories (cognitive 18): SingleStoreDb.get_user_memories has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, ternaries 4, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1293}}}],"partialFingerprints":{"codehealthFindingId/v1":"b12e40102805552987ab7acab7798af00d711bdd6b7b6df5ac5b26a18722b03e"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.get_user_memories (cognitive 18): SqliteDb.get_user_memories has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 4, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1503}}}],"partialFingerprints":{"codehealthFindingId/v1":"855e2a4d2b5f9087fd4ea99878c3d8aa88975ef5bd84302681f526c7faa12058"}},{"ruleId":"D2","level":"warning","message":{"text":"SurrealDb.get_sessions (cognitive 18): SurrealDb.get_sessions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"023d0a9b12cfbf63e4dd4be323b721922559de39976583face63ec8998ca8460"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb._get_span_stats_for_trace (cognitive 18): ValkeyDb._get_span_stats_for_trace has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, ternaries 6, loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2115}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac15982676aebd3d489e530303d31db62595101b04b6debf3634818cf1eb7817"}},{"ruleId":"D2","level":"warning","message":{"text":"LiveGrid._refresh (cognitive 18): LiveGrid._refresh has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, loops 3, ternaries 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/_render.py"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff1a18796ac02fbb1975dfee1025dcf5c1f4d9681d071863953a858b62a02d0c"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkdownChunking._split_by_headings (cognitive 18): MarkdownChunking._split_by_headings has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 4, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/markdown.py"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"5db0f55b9347e3fc896332c0cbfda294fa7924cd9ddb177fb8081b4f8b520b66"}},{"ruleId":"D2","level":"warning","message":{"text":"AzureOpenAIEmbedder.async_get_embeddings_batch_and_usage (cognitive 18): AzureOpenAIEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 18 (threshold 15). Drivers by points: error handling 6, if/else 6, loops 4, ternaries 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/azure_openai.py"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f65c2f405e3d61d7db77bd22104739ca765f05e3b7dc3904bde42caf76746e8"}},{"ruleId":"D2","level":"warning","message":{"text":"VLLMEmbedder.async_get_embeddings_batch_and_usage (cognitive 18): VLLMEmbedder.async_get_embeddings_batch_and_usage has cognitive complexity 18 (threshold 15). Drivers by points: loops 7, if/else 6, ternaries 3, error handling 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/vllm.py"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"011df1ea4c1fba7cee39410dfc2253c4346e082b915cbe4d945eefa234fdc31b"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge.ainsert_many (cognitive 18): Knowledge.ainsert_many has cognitive complexity 18 (threshold 15). Drivers by points: loops 8, if/else 6, ternaries 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"d221d560348da34cf7fbfabc91a1e92fca7d2f28b3b10c8ea5e06e144e9699d0"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge.insert_many (cognitive 18): Knowledge.insert_many has cognitive complexity 18 (threshold 15). Drivers by points: loops 8, if/else 6, ternaries 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8ee009273d4ab2da37183b3057bd74c2610f106ba3c1df945d8da9fa3430e48"}},{"ruleId":"D2","level":"warning","message":{"text":"SharePointLoader._aload_from_sharepoint (cognitive 18): SharePointLoader._aload_from_sharepoint has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, error handling 2, boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d427862eedaac549e06c6d58580296c57fed43fe68131fe1d67f522b8ef162"}},{"ruleId":"D2","level":"warning","message":{"text":"SharePointLoader._load_from_sharepoint (cognitive 18): SharePointLoader._load_from_sharepoint has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, error handling 2, boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"35082c2f2f9d7d46e6cd50f4b4b013de8f13192c8fd9022e586403452ab2ad58"}},{"ruleId":"D2","level":"warning","message":{"text":"LearningMachine._serialize_store_input (cognitive 18): LearningMachine._serialize_store_input has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, boolean chains 3, error handling 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ac1524fb5404a70ce512eb321756d7245f2fc62d0ecdeb8a7f2242fc8ac79d7"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._related_names (cognitive 18): EntityMemoryStore._related_names has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"471881edcf40b008948b85b36a9c16932682d8fb314b12a23bbba3037b2f6991"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._arelated_names (cognitive 18): EntityMemoryStore._arelated_names has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"86d598910326c0dce67e71b8cb610494f004844868ad273bb7fe764ce78f5dc1"}},{"ruleId":"D2","level":"warning","message":{"text":"Model._populate_assistant_message_from_stream_data (cognitive 18): Model._populate_assistant_message_from_stream_data has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"6200ce01f563be75e161e8900175549c7ded10451e8ede607bcecb438cbb1b1b"}},{"ruleId":"D2","level":"warning","message":{"text":"Cerebras._ensure_additional_properties_false (cognitive 18): Cerebras._ensure_additional_properties_false has cognitive complexity 18 (threshold 15). Drivers by points: loops 8, if/else 7, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"12451053a79136d3ffe6e2e1493ca597e32a93333bd7ed40b45a2b425e49dd9c"}},{"ruleId":"D2","level":"warning","message":{"text":"Cerebras.get_request_params (cognitive 18): Cerebras.get_request_params has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"89910bd14eed8a316a00c8f522a3bdc3e0123ebe554cc26aaf3585d3e216b5b1"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.invoke_stream (cognitive 18): OpenAIChat.invoke_stream has cognitive complexity 18 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"f52ed7ac215f44dc72437ff8d0329980e1b0bf17e1f1aea10678a145c0e3b914"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.ainvoke_stream (cognitive 18): OpenAIChat.ainvoke_stream has cognitive complexity 18 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3233e9aaf720f75ffc3bb549d8a6f30f82fda9f37a54408fe3a4429ac2bed73"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIResponses._format_file_for_input (cognitive 18): OpenAIResponses._format_file_for_input has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 6, ternaries 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe2f4befc542c3702202b76c78d9da1c92b34d7eba51190609b33d381dfc835"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._add_auth_middleware (cognitive 18): AgentOS._add_auth_middleware has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 6, loops 1, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1352}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4c2185ddaca7972d179a1ff0f4cafc9855811e150b17e62cb7bd2933af934c6"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._get_knowledge_config (cognitive 18): AgentOS._get_knowledge_config has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 2, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1872}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1026cd961ebdfe614daa0efe4feee6bca8a88b44f93ce7185c5aeee37a6b607"}},{"ruleId":"D2","level":"warning","message":{"text":"components._resolve_member_links (cognitive 18): components._resolve_member_links has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca020dc3825c1008b9e80a30b066dbcf77048542efb8586da38e90ecf61436e1"}},{"ruleId":"D2","level":"warning","message":{"text":"scopes.has_required_scopes (cognitive 18): scopes.has_required_scopes has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/scopes.py"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"69d501305aa3b02a5f864a6c1bb4139e324e4e80a917673e9c58881ef08342c9"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.collect_components_from_os (cognitive 18): utils.collect_components_from_os has cognitive complexity 18 (threshold 15). Drivers by points: error handling 6, if/else 6, boolean chains 3, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1695}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fe26f498804276e369c4bb93ad1b8ce4f2b478509ca2b8b21fff1de9ae20eb9"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._get_python_type_from_json_schema (cognitive 18): utils._get_python_type_from_json_schema has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 2, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1736}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5995739fe8235dbf7719c31b109afcffbf905795e927c33f926910468bd88b8"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkflowSession.get_workflow_history (cognitive 18): WorkflowSession.get_workflow_history has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/session/workflow.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ddca7b820c4dab064a212b0d86a04d7b9e99dcdc0a76fed38ddd604809b5373"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._get_tool_names (cognitive 18): _messages._get_tool_names has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8, loops 4, boolean chains 3, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"a10b9d29081d096dd173298b4cbe39c8b1d9985187734adf9ff8fecde86042d5"}},{"ruleId":"D2","level":"warning","message":{"text":"CalComTools.__init__ (cognitive 18): CalComTools.__init__ has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 7, ternaries 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/calcom.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"80071983c92242b8982148cf1d1de9727121034e9391fe6264163822750d05b0"}},{"ruleId":"D2","level":"warning","message":{"text":"CodingTools.__init__ (cognitive 18): CodingTools.__init__ has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 7, ternaries 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/coding.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"46617f55f60dfdebc20ac165089703db414a34794f7e0206a0572752910dde11"}},{"ruleId":"D2","level":"warning","message":{"text":"FalTools.generate_media (cognitive 18): FalTools.generate_media has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, loops 4, boolean chains 2, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/fal.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8741841a388875dbbbc28f80961157dcf031be120f2aa65f0b0a6b196ac4b9e"}},{"ruleId":"D2","level":"warning","message":{"text":"FileTools.__init__ (cognitive 18): FileTools.__init__ has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 9, if/else 8, ternaries 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/file.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce0c8c5afb21814ff4f506ae408ed9b2c82e71749d667401f16c56d7f40c7bb"}},{"ruleId":"D2","level":"warning","message":{"text":"GmailTools.update_draft (cognitive 18): GmailTools.update_draft has cognitive complexity 18 (threshold 15). Drivers by points: error handling 5, if/else 5, ternaries 4, boolean chains 2, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":1681}}}],"partialFingerprints":{"codehealthFindingId/v1":"dea3243bcfe0e386cac9938fe445f7dce2d91f47f41c9bcf12dd835188571247"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleSlidesTools.add_table (cognitive 18): GoogleSlidesTools.add_table has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 5, boolean chains 3, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":664}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6caca80be95c580e463f429fb061b14fec96d8e2a698079f53404df9314ea55"}},{"ruleId":"D2","level":"warning","message":{"text":"Mem0Tools.__init__ (cognitive 18): Mem0Tools.__init__ has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 7, error handling 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mem0.py"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"684c5abcbe72f8e174177444c70a1527f628dc8f8e0892ff93a0a3b4f38825af"}},{"ruleId":"D2","level":"warning","message":{"text":"SmallestTools.get_voices (cognitive 18): SmallestTools.get_voices has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 6, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/smallest.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6f56739c51b8112904150da6dc6ed8ae3d2282d3d77f41e9caca6fdf2292abe"}},{"ruleId":"D2","level":"warning","message":{"text":"YFinanceTools.__init__ (cognitive 18): YFinanceTools.__init__ has cognitive complexity 18 (threshold 15). Drivers by points: boolean chains 9, if/else 9. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/yfinance.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f737f0a07a48ef2045c0117c49eb15ae1c70e1b985cc28bd518d0c0d9abe270"}},{"ruleId":"D2","level":"warning","message":{"text":"media.reconstruct_file_from_dict (cognitive 18): media.reconstruct_file_from_dict has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 1, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/media.py"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"9234e0516669c9c4fdd2478a05ee218a76bdff545d6bd9cd1a02631dd40e8441"}},{"ruleId":"D2","level":"warning","message":{"text":"claude.build_system_blocks (cognitive 18): claude.build_system_blocks has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, ternaries 6, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"960675e7b6195b126a5f5188843d82feef35c9a29fec668d65ebadcdc0fe97ef"}},{"ruleId":"D2","level":"warning","message":{"text":"claude.format_tools_for_model (cognitive 18): claude.format_tools_for_model has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/models/claude.py"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"2766522e4baf22d0ede135733ccf9cec1fbea5c009652dac0d02e390764ef4ea"}},{"ruleId":"D2","level":"warning","message":{"text":"streamlit.display_response (cognitive 18): streamlit.display_response has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 4, error handling 4, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/streamlit.py"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"10d267963b9274ebaa81264aa5c6daf63e449d95328f997a2cad662a49e59c61"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDB._parse_search_results (cognitive 18): ValkeyDB._parse_search_results has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 6, boolean chains 1, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e493702197337c28a2bcd16ed4d6ebadcf6047d03ed20e49dcc5115568b26a9"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp_client._verify_mcp (cognitive 18): mcp_client._verify_mcp has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 2, error handling 1, ternaries 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/mcp_client.py"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee0bf592050779332632b61caa939ac2a0f9bf47d1e333b9dde52ca7b1b91ad"}},{"ruleId":"D2","level":"warning","message":{"text":"team_events.run_team_with_events (cognitive 17): team_events.run_team_with_events has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/08_streaming/team_events.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"9590596a3cc7bf2d58eb2371c4a60f674b80f742a1995a5edf356c0cda4e934a"}},{"ruleId":"D2","level":"warning","message":{"text":"post_hook_output.add_collaboration_summary (cognitive 17): post_hook_output.add_collaboration_summary has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 9, if/else 4, boolean chains 2, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/13_hooks/post_hook_output.py"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7ebd09f98322100af4c5f04666dc1eddd877a6cae2e5b9e593bb9d59cef0406"}},{"ruleId":"D2","level":"warning","message":{"text":"background_execution_metrics.main (cognitive 17): background_execution_metrics.main has cognitive complexity 17 (threshold 15). Drivers by points: loops 8, if/else 6, boolean chains 3 (nesting depth added 5). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/14_run_control/background_execution_metrics.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5a881aaf73cd218f47c167957d974f42a53882386f4b13b9fff5875587da1b"}},{"ruleId":"D2","level":"warning","message":{"text":"history_in_function.analyze_content_strategy (cognitive 17): history_in_function.analyze_content_strategy has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 5, boolean chains 2, loops 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/history/history_in_function.py"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b734cfd107876e04613a9207aaf89dafb8a9b0a28d66c21e701a6b061295f9d"}},{"ruleId":"D2","level":"warning","message":{"text":"02_condition_on_error.run_pause_example (cognitive 17): 02_condition_on_error.run_pause_example has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 6, ternaries 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/condition/02_condition_on_error.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cef525ac3468eb63167d2a99674158124d2bad16dc3761f844708bf317196ae"}},{"ruleId":"D2","level":"warning","message":{"text":"05_output_review_and_tool_confirmation.resolve_output_review (cognitive 17): 05_output_review_and_tool_confirmation.resolve_output_review has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 4, boolean chains 3, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"177c62a42bbe0d2099229c3e232ba221b47a515bd9074cb3b929b64fc8c05011"}},{"ruleId":"D2","level":"warning","message":{"text":"studio_hitl_agent.run_console_demo (cognitive 17): studio_hitl_agent.run_console_demo has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 2, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/22_studio/studio_hitl_agent.py"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e653be6645a3f58c6c3b80a43bbc70ff890846271e95a5e3b641831ec4fd69"}},{"ruleId":"D2","level":"warning","message":{"text":"jury_hardened.main (cognitive 17): jury_hardened.main has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 4, loops 3, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_05_text_pairwise_preference/jury_hardened.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"8868ee5cb73bdeab1103167af539f13b8cb5c5a91bdcadd368845b4e90724508"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._learning_message_text (cognitive 17): _messages._learning_message_text has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"1141fea7d5cdeed08622b139737fdef974255a7f345844d6d4aa5cfbb2bd5dcd"}},{"ruleId":"D2","level":"warning","message":{"text":"_run.run_dispatch (cognitive 17): _run.run_dispatch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 4, ternaries 3 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1295}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9afca5bd52c649b8efe173b17e3c0282416b1e03c55639bb9b9383ab1e88484"}},{"ruleId":"D2","level":"warning","message":{"text":"AntigravityAgent._extract_final_text (cognitive 17): AntigravityAgent._extract_final_text has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, boolean chains 5, loops 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/antigravity/agent.py"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e6849e85c5e61dfb69a2db03e581bfa4d1810bd511a5078a3473befbcdea140"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOSClient.upload_knowledge_content (cognitive 17): AgentOSClient.upload_knowledge_content has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 4 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":2373}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cb189a845097b41715abb33051b6dd838441400b63ba9915c23028ccfda617"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamoDb.__init__ (cognitive 17): DynamoDb.__init__ has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 6, ternaries 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"75b91ef0bc94eaa667d1a041d361e2403b31d50c065e833d329fbd6d932ca33f"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.calculate_metrics (cognitive 17): GcsJsonDb.calculate_metrics has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fb710b1e2417ca8f065378f3244e188d653816a6fb649d0bd7f19513eea801"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.calculate_metrics (cognitive 17): JsonDb.calculate_metrics has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"c891609c688eabf202427b703b93684db09b4ed0ade8ebf30b5ff0b7ca19dd4c"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.get_trace_stats (cognitive 17): AsyncMongoDb.get_trace_stats has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 3, error handling 1, loops 1, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2642}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f4dfe41850db4210b38d68bec09c0734f18987cf0d697889dfd908b07a95ac"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.get_trace_stats (cognitive 17): MongoDb.get_trace_stats has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 3, error handling 1, loops 1, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2480}}}],"partialFingerprints":{"codehealthFindingId/v1":"c343af6e34f8321b3b339e67ea65e69a11a77b61532bb9dbf4dc8fbb9371f744"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb._get_table (cognitive 17): AsyncPostgresDb._get_table has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"323bdadc38b23cb86c931daa4b701f27cdd8de57def320b589476e72617cc721"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.upsert_memories (cognitive 17): SingleStoreDb.upsert_memories has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 3, ternaries 2, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1517}}}],"partialFingerprints":{"codehealthFindingId/v1":"88283088e765e851c5e4d42b6d95b9ac893f2cdd4efd4a7ed56783e0dd671bcf"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStoreDb.get_trace_stats (cognitive 17): SingleStoreDb.get_trace_stats has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 1, loops 1, ternaries 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":2708}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe2572808ff0e12e0a88bd8c1f6e0bed4a201250e046cb96ad08b3eb4212efb"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.get_all_cultural_knowledge (cognitive 17): AsyncSqliteDb.get_all_cultural_knowledge has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 6, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2426}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5a9d9d54c7484760e2898e3f195abe1bfd7e45ef970099ebf5e5592ef476ab"}},{"ruleId":"D2","level":"warning","message":{"text":"SurrealDb.get_metrics (cognitive 17): SurrealDb.get_metrics has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f56aeee420419767e74af1a80972bfb7c9a81c0fae9c4eb205a21097e4ce4ce"}},{"ruleId":"D2","level":"warning","message":{"text":"Task.from_jsonl (cognitive 17): Task.from_jsonl has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/environment.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9f83ca1adb202f3c2df64654dbd69a51d43a31b1112f81df14126248ba429f"}},{"ruleId":"D2","level":"warning","message":{"text":"EnvironmentRunResult.diff (cognitive 17): EnvironmentRunResult.diff has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 8, if/else 6, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"56d9fd79ddd1ac8afa5bab3b319a01cf970b3258935cd4eea1e2a380a5f8e299"}},{"ruleId":"D2","level":"warning","message":{"text":"FirecrawlReader.crawl (cognitive 17): FirecrawlReader.crawl has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/firecrawl_reader.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf3158fcbb2e6762053d2508c764eec2cb4e23f5767c9c1a72b4aaa31701badb"}},{"ruleId":"D2","level":"warning","message":{"text":"TavilyReader._extract (cognitive 17): TavilyReader._extract has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 8, if/else 7, error handling 1, ternaries 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/tavily_reader.py"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"407f578248ad218c3566597410453e5aa7e33fe41ee91d0c214bd646b4643f52"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore.aremember_about (cognitive 17): EntityMemoryStore.aremember_about has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, boolean chains 7, error handling 2 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1161}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e87e08e3856c2334516371b7e87aeae732a99c45770f0d09f6ccbb9b9d0b53"}},{"ruleId":"D2","level":"warning","message":{"text":"EntityMemoryStore._apply_supersessions (cognitive 17): EntityMemoryStore._apply_supersessions has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb89f64869e18eec754fa4e40091634fd5d5388ef36a0b040632f4954b39e5cb"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryManager.aoptimize_memories (cognitive 17): MemoryManager.aoptimize_memories has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":873}}}],"partialFingerprints":{"codehealthFindingId/v1":"772488f65f40b9b8ee657f73be4a02e7d4f1488f40913008f738a731dc46af49"}},{"ruleId":"D2","level":"warning","message":{"text":"Claude._get_client_params (cognitive 17): Claude._get_client_params has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 7 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/claude.py"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d1342da53494c4b69f4f4339434dcde888bde2ba95a17c90f14861671f15ac"}},{"ruleId":"D2","level":"warning","message":{"text":"Cerebras.parse_tool_calls (cognitive 17): Cerebras.parse_tool_calls has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fa76d411a5a4e609242ee1e6e4c37d770080503f51537e1d41a42340c9358c0"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions.invoke_stream (cognitive 17): GeminiInteractions.invoke_stream has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 6, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":1291}}}],"partialFingerprints":{"codehealthFindingId/v1":"66d6254008a82f1e1f597182820b50bd04083039b9858948a99857e77f4484b0"}},{"ruleId":"D2","level":"warning","message":{"text":"GeminiInteractions.ainvoke_stream (cognitive 17): GeminiInteractions.ainvoke_stream has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 6, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":1393}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5f13db127faf76c83a5a915c65cdc27e40672808f5fb680f187f011ac4b3805"}},{"ruleId":"D2","level":"warning","message":{"text":"HuggingFace.get_request_params (cognitive 17): HuggingFace.get_request_params has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff040c1ab36e55ca515b96e2dbd31a8137dc159a8d97fadb0523c27a55990d79"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.invoke (cognitive 17): OpenAIChat.invoke has cognitive complexity 17 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"44b1043e9a3f5eb3ad1bb71f9898ba738f3e8025b021f34c08a8bb050a6e7287"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenAIChat.ainvoke (cognitive 17): OpenAIChat.ainvoke has cognitive complexity 17 (threshold 15). Drivers by points: error handling 9, ternaries 6, if/else 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03b03859e02500cda28a4e93c80f3f840a3d5b2d3ee170211c7cc5469bd22cd"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._raise_if_duplicate_ids (cognitive 17): AgentOS._raise_if_duplicate_ids has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"63544c7cb78d106eeed561a913f16f35a37104d954e79de240dccb9e0909d756"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._setup_tracing (cognitive 17): AgentOS._setup_tracing has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":958}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b0589ac8fbebf92512f55a839fb61827d68f7f2f0de28c8e70fae5ceecea6ba"}},{"ruleId":"D2","level":"warning","message":{"text":"handlers._extract_team_response_chunk_content (cognitive 17): handlers._extract_team_response_chunk_content has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 2, ternaries 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/handlers.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee219d0c55f1ddfc3df1d31af2b2125e8724ea4c7e0d0e9d230ca471b13eee0"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.run_agent_as_judge_eval (cognitive 17): utils.run_agent_as_judge_eval has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, ternaries 6, boolean chains 4 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dc7e36ebdd69dff5324b2738e6265ea550bcd4d129f0ca458f8cce85a43283d"}},{"ruleId":"D2","level":"warning","message":{"text":"router.workflow_continue_response_streamer (cognitive 17): router.workflow_continue_response_streamer has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 7, if/else 4, error handling 3, boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eb42d0c416bbe0b7d32dabeb6a63615ad7de2d3230b2c35cef2f71fd4e5519d"}},{"ruleId":"D2","level":"warning","message":{"text":"utils._collect_components_from_step (cognitive 17): utils._collect_components_from_step has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1647}}}],"partialFingerprints":{"codehealthFindingId/v1":"9356f577fcc6cb73656ecacce4b694c7c412b4f2cd13a7992d30705c4b7bb0e3"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.resolve_agent (cognitive 17): utils.resolve_agent has cognitive complexity 17 (threshold 15). Drivers by points: error handling 10, if/else 5, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1967}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb43e0b3f211bd31e7ba41009d20bb7ff9a1d00a3b30008b3ca70eb64a802ba"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.resolve_team (cognitive 17): utils.resolve_team has cognitive complexity 17 (threshold 15). Drivers by points: error handling 10, if/else 5, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":2016}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b0fe500eb6791982b04fa3ce1501c9fd3eb13fe10e89a6d17f2c6cfc61dc9a5"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.resolve_workflow (cognitive 17): utils.resolve_workflow has cognitive complexity 17 (threshold 15). Drivers by points: error handling 10, if/else 5, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":2059}}}],"partialFingerprints":{"codehealthFindingId/v1":"96fe93e3d148e095803e4cc7bf6b768c5bea6bbd1df987ccb44c0f9a6da36043"}},{"ruleId":"D2","level":"warning","message":{"text":"groq.get_groq_reasoning_stream (cognitive 17): groq.get_groq_reasoning_stream has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/groq.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"addc60162d79ab27e09c81afa57d66df26a0359bd251ff67be6f73a42376d6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"groq.aget_groq_reasoning_stream (cognitive 17): groq.aget_groq_reasoning_stream has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/groq.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"495088417b2d2460a184ee7579fc749737e39a6b3b506bff6457234e925d945a"}},{"ruleId":"D2","level":"warning","message":{"text":"ReasoningManager.areason (cognitive 17): ReasoningManager.areason has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 8, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"5859a9e12ea3062c66bddf60309c34c35b910db7cebc9acbe78febd3bb0befd3"}},{"ruleId":"D2","level":"warning","message":{"text":"_messages._build_identity_sections (cognitive 17): _messages._build_identity_sections has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"8896b2f234171f6877213242ab808638e95f6c0f717e4cf97b2988439e23448e"}},{"ruleId":"D2","level":"warning","message":{"text":"_session.get_session (cognitive 17): _session.get_session has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 6 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_session.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d71b65ea2ad1bdc6a0e80eed3726b0cb94a9f59905a434ef4dc9eb8f8293db"}},{"ruleId":"D2","level":"warning","message":{"text":"AntigravityTools._extract_final_text (cognitive 17): AntigravityTools._extract_final_text has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, boolean chains 5, loops 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/antigravity.py"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eb922bba08d4f8f2ade7b56ee2a3f41f746e74fa9d0fde3f72af3fb47d0d1e0"}},{"ruleId":"D2","level":"warning","message":{"text":"CsvTools.__init__ (cognitive 17): CsvTools.__init__ has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 4, error handling 2, loops 2 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/csv_toolkit.py"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"13acceaba1922dbf7b16c48d394cdcac5a8f62bc0cf6c90edf61174e2bf12cb7"}},{"ruleId":"D2","level":"warning","message":{"text":"decorator._is_async_function (cognitive 17): decorator._is_async_function has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 5, error handling 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/decorator.py"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"592c78ab2653f6ee3aafb49aa2a3af694cc8fb3998e05923573a39883c8d89dd"}},{"ruleId":"D2","level":"warning","message":{"text":"DoclingTools._resolve_allowed_input_formats (cognitive 17): DoclingTools._resolve_allowed_input_formats has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 3, ternaries 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/docling.py"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e4c90615817d6d9209d8aca7fa86e7d700b7a85a7750431c4a65132893af5af"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.list_events (cognitive 17): GoogleCalendarTools.list_events has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0258c3619c5c7f83e218a09c12d67b55b2174dd1d891e3ff3e0d63da446df5e"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleDriveTools.read_file (cognitive 17): GoogleDriveTools.read_file has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, error handling 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/drive.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"4044d1a1d02542159fae0a6cacc8318faa58d8280ca3d491f42bd441ac0d6f4d"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleSlidesTools.get_presentation_metadata (cognitive 17): GoogleSlidesTools.get_presentation_metadata has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, error handling 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"be0836e95701f66f5419cfb3b54bb72358fbf1a54afaae9c58a5cce3b940977a"}},{"ruleId":"D2","level":"warning","message":{"text":"PlivoTools.__init__ (cognitive 17): PlivoTools.__init__ has cognitive complexity 17 (threshold 15). Drivers by points: boolean chains 9, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/plivo.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae722d258429d1aab35653fb04e61f70b7191834813e825755b50003b6ce9f16"}},{"ruleId":"D2","level":"warning","message":{"text":"gemini.has_additional_properties (cognitive 17): gemini.has_additional_properties has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/gemini.py"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8f28739576e745fd94baf7c6df54f88faa5244431159d8d2d75d3621d0ba66"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp.prepare_command (cognitive 17): mcp.prepare_command has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 5. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/mcp.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"50ed99f10d86150901306d7792230f9a3cd8c91b6f5c87a2c956f9cf63511716"}},{"ruleId":"D2","level":"warning","message":{"text":"message.get_conversation_text (cognitive 17): message.get_conversation_text has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, ternaries 6, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/message.py"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"961327ad4df7d63602e10f894cd98fdb7d9bc42b97d6544d883cd106a63398b5"}},{"ruleId":"D2","level":"warning","message":{"text":"string._extract_json_objects (cognitive 17): string._extract_json_objects has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/string.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"174cff3c9aff5a809749a9d87dca1adacc828e320bdc9d8eb8f863b0ad09e4ca"}},{"ruleId":"D2","level":"warning","message":{"text":"Milvus.insert (cognitive 17): Milvus.insert has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 4, ternaries 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/milvus/milvus.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"61eb0d3aa9501af4c6f57e6f2cf298bdd4c231b3a4a174c477c05963cd2dd39a"}},{"ruleId":"D2","level":"warning","message":{"text":"Qdrant._format_filters (cognitive 17): Qdrant._format_filters has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 6, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/qdrant/qdrant.py"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"23455439e4e01be3a3010c023af0d06881739036ec15785705099856e92e5944"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleStore.search (cognitive 17): SingleStore.search has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, ternaries 4, error handling 3, boolean chains 1, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/singlestore/singlestore.py"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"d49ceb00fe24f326a4418139f1e055af8f71f09266440d65b7c8e9760364d71a"}},{"ruleId":"D2","level":"warning","message":{"text":"Router._aroute_steps (cognitive 17): Router._aroute_steps has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 2, error handling 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":611}}}],"partialFingerprints":{"codehealthFindingId/v1":"248996e5ba03704ecf62049a057a25f3e0028183447a209f28f56c2374d3a92f"}},{"ruleId":"D2","level":"warning","message":{"text":"StepRequirement.to_dict (cognitive 17): StepRequirement.to_dict has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, ternaries 8, boolean chains 1 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/types.py"},"region":{"startLine":1105}}}],"partialFingerprints":{"codehealthFindingId/v1":"5820dbf25ca07a6654edbc99286e4690a1ee0c1d7cdaf35b3e043feaf2a96433"}},{"ruleId":"D2","level":"warning","message":{"text":"conftest.cleanup_valkey (cognitive 17): conftest.cleanup_valkey has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 3, ternaries 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/db/valkey/conftest.py"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e453e7a8a9495376416a6e14b1fffe0a778ba4edabb9034dee9a9b411d80a95"}},{"ruleId":"D2","level":"warning","message":{"text":"test_agentic_filtering.test_agentic_filtering_openai (cognitive 17): test_agentic_filtering.test_agentic_filtering_openai has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/knowledge/filters/test_agentic_filtering.py"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"37332ab06be71fcc928991a49f5c0da92b542dcf03c2ece00c437b6d697d8686"}},{"ruleId":"D2","level":"warning","message":{"text":"test_agentic_filtering.test_agentic_filtering_openai_with_output_schema (cognitive 17): test_agentic_filtering.test_agentic_filtering_openai_with_output_schema has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/knowledge/filters/test_agentic_filtering.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c56cfb246b04cb9c3674ee46190fb655876425d6670ca99d45843b2498c000b"}},{"ruleId":"D2","level":"warning","message":{"text":"test_a2a.test_a2a_streaming_with_reasoning (cognitive 17): test_a2a.test_a2a_streaming_with_reasoning has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/os/interfaces/test_a2a.py"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"1417a7d987b461e67d2359b35298687d6b7223ab15c0173818ecfa6e53774c7e"}},{"ruleId":"D2","level":"warning","message":{"text":"EbsVolume._create (cognitive 17): EbsVolume._create has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/volume.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"55cbd642b3745b3aa9b117e93fcf997f89044694aa7c11d840abf817e813fda4"}},{"ruleId":"D2","level":"warning","message":{"text":"EbsVolume._read (cognitive 17): EbsVolume._read has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, loops 4, boolean chains 2, error handling 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/volume.py"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"81b08204a10d9918bd662ac5dbe189699c6b46373ccf26e8149ebd5f03a82239"}},{"ruleId":"D2","level":"warning","message":{"text":"GlueCrawler._create (cognitive 17): GlueCrawler._create has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, error handling 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/glue/crawler.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec167ec731055fe5ceaf10841b61fb6a3e450184769b32b6a4d55201ca97251d"}},{"ruleId":"D2","level":"warning","message":{"text":"SecretsManager.read_secrets_from_files (cognitive 17): SecretsManager.read_secrets_from_files has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/secret/manager.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"69ebd096b12b87e0ef1a6fbb1f8573615c20f86a8e43ade3ea426c2f8bcb291e"}},{"ruleId":"D2","level":"warning","message":{"text":"status.status (cognitive 17): status.status has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 8, if/else 6, loops 2, error handling 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/status.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"517b8b6ed79d6265aebcf3a08919c60c840af523ff0d553572bbc00f2f6aa276"}},{"ruleId":"D2","level":"warning","message":{"text":"09_multi_step_mixed_hitl.resolve_output_review (cognitive 16): 09_multi_step_mixed_hitl.resolve_output_review has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, ternaries 4, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad6f89fefc705cdcad9e649b6a9935c8ca277984e2e29ec758faeb82e2385b53"}},{"ruleId":"D2","level":"warning","message":{"text":"sse_reconnect.iter_sse (cognitive 16): sse_reconnect.iter_sse has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/04_run_lifecycle/sse_reconnect.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8a94f4ea1b3b847636ddddf46e91cc5644fe535aea62ac068b9e20fa8a437d"}},{"ruleId":"D2","level":"warning","message":{"text":"capture_reasoning_content_knowledge_tools.run_example (cognitive 16): capture_reasoning_content_knowledge_tools.run_example has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"2affb2e672a278d5db26af29266715032b549633c68b47149ea4e832c41eb6fb"}},{"ruleId":"D2","level":"warning","message":{"text":"save_hitl_condition_loop_router.save_and_verify (cognitive 16): save_hitl_condition_loop_router.save_and_verify has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 2, loops 2, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/93_components/workflows/save_hitl_condition_loop_router.py"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d114f5a725a077697e5b9bcf257c8e4c3b439a0545be44f6721ef9dd683ef5"}},{"ruleId":"D2","level":"warning","message":{"text":"_cli.cli_app (cognitive 16): _cli.cli_app has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_cli.py"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"217f4b2f661eccdff0e74e294038eda3ad7e4ecf2ee2b305c83a41f03e4d151e"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.handle_reasoning_event (cognitive 16): _response.handle_reasoning_event has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"aac4cf1a6d7bbaea2ed9a92d54edb233b663e913818b8b905f787ce8284452a1"}},{"ruleId":"D2","level":"warning","message":{"text":"_run_options.resolve_run_options (cognitive 16): _run_options.resolve_run_options has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, ternaries 5, boolean chains 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run_options.py"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb24a9cf9de5124226f0bcc83b2000eee7f5a92ecd3be621d9486e4d57b406a"}},{"ruleId":"D2","level":"warning","message":{"text":"_tools._raise_if_async_tools_in_list (cognitive 16): _tools._raise_if_async_tools_in_list has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"11794e47427a8596f6e65fd7d677541516aa7c5e4b42e8e4bcfe994cd7b252c4"}},{"ruleId":"D2","level":"warning","message":{"text":"A2AClient.stream_message (cognitive 16): A2AClient.stream_message has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"afafc4a853457fdb3cb6df38a9d70b0325c0d18cb5bbf8422fa85f32361b94da"}},{"ruleId":"D2","level":"warning","message":{"text":"notion_ops._rich_text_to_md (cognitive 16): notion_ops._rich_text_to_md has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, ternaries 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/notion_ops.py"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"753b727330b458e47ef6b79ab39fa5968c6f239e8387e0e8181b731f15c79dde"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncBaseDb.__init__ (cognitive 16): AsyncBaseDb.__init__ has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 16. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":1489}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0684706570dcb493dcda19399c7278618bbba9a8f791efc1a59c35f400b266d"}},{"ruleId":"D2","level":"warning","message":{"text":"ClickhouseDb.get_trace_stats (cognitive 16): ClickhouseDb.get_trace_stats has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, error handling 5, boolean chains 2, loops 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/clickhouse.py"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"29bcd8993df473ee37296ec9d54ed2b04f6b1231cc4603d3823a07105712fc68"}},{"ruleId":"D2","level":"warning","message":{"text":"FirestoreDb.create_spans (cognitive 16): FirestoreDb.create_spans has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, error handling 3, loops 3, boolean chains 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":2294}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfbb5570fca80c57fa48e7addc78bb496c89a8a459057b19e77f9cd6820a6bf1"}},{"ruleId":"D2","level":"warning","message":{"text":"GcsJsonDb.get_user_memory_stats (cognitive 16): GcsJsonDb.get_user_memory_stats has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"1edbf2a3c20e187ea86105af454a482f6cf23ad56c3d829740e06f0c9afdea6a"}},{"ruleId":"D2","level":"warning","message":{"text":"InMemoryDb.get_user_memory_stats (cognitive 16): InMemoryDb.get_user_memory_stats has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5e7957f7c653da3693e779b73c6be3305f2d544a82e52846a3eadd26c7e2093"}},{"ruleId":"D2","level":"warning","message":{"text":"InMemoryDb.calculate_metrics (cognitive 16): InMemoryDb.calculate_metrics has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b45f89818b16a1cbe157511bd89eb98a89a181c7cc71fb227f1f963c23fa940"}},{"ruleId":"D2","level":"warning","message":{"text":"JsonDb.get_user_memory_stats (cognitive 16): JsonDb.get_user_memory_stats has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a20f8c32dca7b1677bd65b94d78d3d40e7f62900e0f80efa04863a66af55de"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMongoDb.list_learnings (cognitive 16): AsyncMongoDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 1, error handling 1, loops 1, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":3348}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff225eb4c82c1b1c78bd6f61a3e15a21999e6beeea55f52f6065045730f1ce9c"}},{"ruleId":"D2","level":"warning","message":{"text":"async_mongo._detect_client_type (cognitive 16): async_mongo._detect_client_type has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, error handling 4, boolean chains 3 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd40949cd4620a24a8b7b560ae408363b0e4aecf913c6f9b7257ea2083dd78bb"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb.list_learnings (cognitive 16): MongoDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 1, error handling 1, loops 1, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":3115}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0c1e15fb0380b153bbcd542d14cc42ac19b986e954703bf0faa0158e8ef82fc"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncMySQLDb.upsert_memories (cognitive 16): AsyncMySQLDb.upsert_memories has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 2, ternaries 2, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1705}}}],"partialFingerprints":{"codehealthFindingId/v1":"a783c223eaccaad8f5b4875d73615fac17cc100e887272375d84ce1ff0407a97"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncPostgresDb.list_learnings (cognitive 16): AsyncPostgresDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3491}}}],"partialFingerprints":{"codehealthFindingId/v1":"11046be325f77e0a0dda4e5b2ce0cfa2de6c60f831c1807f5c976ef6825dbd64"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.upsert_memories (cognitive 16): PostgresDb.upsert_memories has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 2, ternaries 2, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1811}}}],"partialFingerprints":{"codehealthFindingId/v1":"efe1c07f2d19c78fdc1568f73a41bb325c55005e0f2ccf62fe40799f7d92558b"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresDb.list_learnings (cognitive 16): PostgresDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5014}}}],"partialFingerprints":{"codehealthFindingId/v1":"4526beb1cf0b83b9eef6de577f09a7b335f279ea18810c379df2c5961c2c0eba"}},{"ruleId":"D2","level":"warning","message":{"text":"AsyncSqliteDb.list_learnings (cognitive 16): AsyncSqliteDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3601}}}],"partialFingerprints":{"codehealthFindingId/v1":"b10f8e125902ab124c65fbcfec279783262e5c52d9c8032d27ca2df3898fa229"}},{"ruleId":"D2","level":"warning","message":{"text":"SqliteDb.list_learnings (cognitive 16): SqliteDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":4858}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5459538b64d213ecdb9bd46ea9d73e43ca9735198bcc04658443e35b8cc6cf2"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDb.list_learnings (cognitive 16): ValkeyDb.list_learnings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 3, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":2857}}}],"partialFingerprints":{"codehealthFindingId/v1":"d022d354919763e1736b3f47e79d1d99c3c8b8926205b26bdc21983c3f901b59"}},{"ruleId":"D2","level":"warning","message":{"text":"_render._attempt_lines (cognitive 16): _render._attempt_lines has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, ternaries 5, boolean chains 2, loops 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/_render.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"2991e5fb551b7d926665203af33174ac736027973cede3e0207b36d786e593f3"}},{"ruleId":"D2","level":"warning","message":{"text":"sft.to_sft_jsonl (cognitive 16): sft.to_sft_jsonl has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 3, ternaries 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/exporters/sft.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"f21a1660203e61f90d976489afefbbcd594c8f6b732fdf5674724ca762f240d0"}},{"ruleId":"D2","level":"warning","message":{"text":"runner._read_only_learning_machine (cognitive 16): runner._read_only_learning_machine has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 5, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":556}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3eeeae43d81d24ec7a71d60f10faf56777ccffc30f26ed0e6f79b5cd34c720"}},{"ruleId":"D2","level":"warning","message":{"text":"_paths.normalize_path (cognitive 16): _paths.normalize_path has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/_paths.py"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a5cd81fdead0f5ab97471b0f897f62e29dfe723cac9249eb00f33b110c0017f"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSystemTools.__init__ (cognitive 16): FileSystemTools.__init__ has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, ternaries 4, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/toolkit.py"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd727b4e6a130d296c8f541e52c79044c0ae4f33e3664d94a6c55f871c0d49d"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkdownChunking._partition_markdown_content (cognitive 16): MarkdownChunking._partition_markdown_content has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, ternaries 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/markdown.py"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f09892f54fcea4230d988ba4044b1ec9d53010d9d0fe3a66749cec9aac66940"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge.get_readers (cognitive 16): Knowledge.get_readers has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, loops 8 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"519922913433fe348304bc53bd367b46c5142d370212eae8bc7a54c5589e73a6"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._aload_from_topics (cognitive 16): Knowledge._aload_from_topics has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 2, boolean chains 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2031}}}],"partialFingerprints":{"codehealthFindingId/v1":"7005f16c6a5e4faa518809b70fedd10851b04c5d28c3d8a6e7f7bc64ba1d6ad5"}},{"ruleId":"D2","level":"warning","message":{"text":"Knowledge._load_from_topics (cognitive 16): Knowledge._load_from_topics has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 2, boolean chains 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2091}}}],"partialFingerprints":{"codehealthFindingId/v1":"59afb4ca55d83d4fce370a16586b46017c147317c7997631fe9de95cd06d0669"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionLogStore.asearch (cognitive 16): DecisionLogStore.asearch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 3, boolean chains 2, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":723}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d262bd89812a324b40079c07e83aeb7bee34490200f407234b51f718c1afec"}},{"ruleId":"D2","level":"warning","message":{"text":"HuggingFace._format_message (cognitive 16): HuggingFace._format_message has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 6, ternaries 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"07670ab36936a016691e3db1e772ca348069ab1f1c56bd4f15697a865f59bac5"}},{"ruleId":"D2","level":"warning","message":{"text":"Llama._parse_provider_response (cognitive 16): Llama._parse_provider_response has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 2, error handling 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/meta/llama.py"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"6330bd60257b7e5b5da04d0732e5bd24b2e56e885a5fa6e644ce108e2433d1ad"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenRouter._parse_provider_response (cognitive 16): OpenRouter._parse_provider_response has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openrouter/openrouter.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f7a00530ac25a39b793a5ce840f0db57992913f2489d0c8c912e225ec0d3a1"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._reprovision_routers (cognitive 16): AgentOS._reprovision_routers has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 4, loops 3 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cc07e0aeb28aa56435e282cc7f6e6342b560e1b6982ce5cf5388f14e40d5a46"}},{"ruleId":"D2","level":"warning","message":{"text":"AgentOS._populate_registry_knowledge (cognitive 16): AgentOS._populate_registry_knowledge has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":844}}}],"partialFingerprints":{"codehealthFindingId/v1":"efbf48d897d1711ffa954df1752dc565f7238e8bb9ed7fa6c8504ccfbda90521"}},{"ruleId":"D2","level":"warning","message":{"text":"SlackEventHandler.handle_non_streaming (cognitive 16): SlackEventHandler.handle_non_streaming has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/event_handler.py"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a21e8bd409dfe0e8b89ceeda4630726240669e84405ee893e509785e736f6d"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamState.collect_media (cognitive 16): StreamState.collect_media has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 4, loops 4 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/state.py"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"762a8b9ca4450c1c11109f3a97bc07f01da6f1b4f83d82dac78395e2d39e1adb"}},{"ruleId":"D2","level":"warning","message":{"text":"helpers.send_response_media (cognitive 16): helpers.send_response_media has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 5, loops 5, error handling 2, if/else 2, ternaries 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/telegram/helpers.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"358588cd844155881d316ebd66531a5d571faf37f6beed6b985363c84af46c7a"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamState.collect_media (cognitive 16): StreamState.collect_media has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 4, loops 4 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/telegram/state.py"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c34a79425de08213cacbe5a472db9d05238fdf3d1fa5cedc61202fe47c7710d"}},{"ruleId":"D2","level":"warning","message":{"text":"mcp_results._media_blocks (cognitive 16): mcp_results._media_blocks has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 4, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp_results.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd65155be99826b25ce69fbd90185bc4480539d50d3cde4050db6a6349745264"}},{"ruleId":"D2","level":"warning","message":{"text":"components._resolve_db_in_config (cognitive 16): components._resolve_db_in_config has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"c034f27774a6f8fd5856e15ad0b3e7c6819fb625fe9f41525b6b07941cbf14df"}},{"ruleId":"D2","level":"warning","message":{"text":"utils.get_db (cognitive 16): utils.get_db has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"7decc6582691d82c9a678618532f6297c23089dac7a5273c4d8ec9ff371723ad"}},{"ruleId":"D2","level":"warning","message":{"text":"deepseek.get_deepseek_reasoning_stream (cognitive 16): deepseek.get_deepseek_reasoning_stream has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 2, boolean chains 1, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/deepseek.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"903240eb67625ff18833ac766848d4f56b573c191a0cb5203606046770338cc7"}},{"ruleId":"D2","level":"warning","message":{"text":"deepseek.aget_deepseek_reasoning_stream (cognitive 16): deepseek.aget_deepseek_reasoning_stream has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 2, boolean chains 1, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/deepseek.py"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"060d685ee5202f3f2a6cc597f30413edc6037585d8cf9e784c044b93da7244c5"}},{"ruleId":"D2","level":"warning","message":{"text":"_cli._get_member_name (cognitive 16): _cli._get_member_name has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_cli.py"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"a10fd7863e5cbf3f716e737e196279c8999ed37992d2ea530b6e2e5ae05ec2fb"}},{"ruleId":"D2","level":"warning","message":{"text":"_cli.cli_app (cognitive 16): _cli.cli_app has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_cli.py"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb5f7806f8fe3f99cd02d573b6e2d3b809fbe8a08dceef0d6e9ffcb408289e47"}},{"ruleId":"D2","level":"warning","message":{"text":"_response.handle_reasoning_event (cognitive 16): _response.handle_reasoning_event has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8d8a503b6dd0720ca9417376d4231a92a6c855388a7f2c2830fe428b1397ec1"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._sync_team_run_response_with_model_response (cognitive 16): _run._sync_team_run_response_with_model_response has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4668}}}],"partialFingerprints":{"codehealthFindingId/v1":"77bf073840c9eb82279f29c9a9b36e290628a923e1156d28ecc66d438dbdce6c"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._aresolve_run_dependencies (cognitive 16): _run._aresolve_run_dependencies has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 2, ternaries 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4880}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0cedbd08be2738f56aeceb040d744f1fc78894c9f5626e0ea01e7154d6f819f"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._handle_team_tool_call_updates (cognitive 16): _run._handle_team_tool_call_updates has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 8, if/else 7, loops 1 (nesting depth added 3). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":4997}}}],"partialFingerprints":{"codehealthFindingId/v1":"120dd94afab67ca8d4748d595ca4f0837d7b97d26f56b12299f3cde0f80a6cf9"}},{"ruleId":"D2","level":"warning","message":{"text":"_run._handle_team_tool_call_updates_stream (cognitive 16): _run._handle_team_tool_call_updates_stream has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 8, if/else 7, loops 1 (nesting depth added 3). To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":5058}}}],"partialFingerprints":{"codehealthFindingId/v1":"99c3a2ddde0d889aebdb22d64274c6e05ee9c1deb28eda6f757132585eb73d41"}},{"ruleId":"D2","level":"warning","message":{"text":"_run_options.resolve_run_options (cognitive 16): _run_options.resolve_run_options has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, ternaries 5, boolean chains 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run_options.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"a762b0f988e25e24008da75883cd9b03f3af4a660bb3c24afa5b3765a75993c0"}},{"ruleId":"D2","level":"warning","message":{"text":"GoogleCalendarTools.search_events (cognitive 16): GoogleCalendarTools.search_events has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 5, boolean chains 1 (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c5e18fdb50534fffa3edfe0240cfefe87b9dc645758e8fcb7264022c018a49"}},{"ruleId":"D2","level":"warning","message":{"text":"GmailTools._create_message (cognitive 16): GmailTools._create_message has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":1137}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e32b90997141d51fa5232862f6f9db59acbe5fe51edeb9d63e1153871ec93d2"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiMCPTools.build_tools (cognitive 16): MultiMCPTools.build_tools has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, loops 5, error handling 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/multi_mcp.py"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac1497b9fa44b879909ebb41b9bed0f0029e80ea925032f67de5ad1addf6f215"}},{"ruleId":"D2","level":"warning","message":{"text":"RedditTools.__init__ (cognitive 16): RedditTools.__init__ has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 5, ternaries 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/reddit.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d1b97935d006a7f37073f48437ff552d894ede091afd18e125b5dfd6de41094"}},{"ruleId":"D2","level":"warning","message":{"text":"ScavioTools.__init__ (cognitive 16): ScavioTools.__init__ has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 8, if/else 8. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/scavio.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd7efd16e9b7ad4fb55598186e540023538669da3ca702d7034b701e9f492c7"}},{"ruleId":"D2","level":"warning","message":{"text":"ShopifyTools.get_products_bought_together (cognitive 16): ShopifyTools.get_products_bought_together has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/shopify.py"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e64c5f4f3be50d47fc3d5110248c40a424de70accc5f9011d457ced7e92f4d7"}},{"ruleId":"D2","level":"warning","message":{"text":"ValyuTools._valyu_search (cognitive 16): ValyuTools._valyu_search has cognitive complexity 16 (threshold 15). Drivers by points: boolean chains 10, if/else 5, error handling 1. To reduce it, name the conditions: bind each compound test to a well-named local or a small predicate function, so the body reads as a sequence of named decisions rather than a chain of operators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/valyu.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6b3f74ba568a3bcacf6e6806cfafe86393f9f7218df822ef2f4ba59f95beaca"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.collect_joint_images (cognitive 16): agent.collect_joint_images has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 2, error handling 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c40495106810152e518e5fa7ca361ef01195720efa6621f326e50adab94939d"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.collect_joint_videos (cognitive 16): agent.collect_joint_videos has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 2, error handling 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bc62a3290906a186203993749f81a6ec677e46b61259c3a22b022eb971756c2"}},{"ruleId":"D2","level":"warning","message":{"text":"agent.collect_joint_audios (cognitive 16): agent.collect_joint_audios has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 2, error handling 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"add43ff733638a4e3007990585c2ded64f32056366bd51c82ec385d04f56ad46"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch._create_collection_and_scope (cognitive 16): CouchbaseSearch._create_collection_and_scope has cognitive complexity 16 (threshold 15). Drivers by points: error handling 14, if/else 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c15730abce84f4d090f368501705038e41dbaea5f7dc6b87979072703ab4d8"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch._async_create_collection_and_scope (cognitive 16): CouchbaseSearch._async_create_collection_and_scope has cognitive complexity 16 (threshold 15). Drivers by points: error handling 14, if/else 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2dd0c7343010c9da9f2f91545e7b89d4a6c5c66b1500f8bb8b0894613c24ae8"}},{"ruleId":"D2","level":"warning","message":{"text":"CouchbaseSearch.__async_get_doc_from_kv (cognitive 16): CouchbaseSearch.__async_get_doc_from_kv has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, error handling 3, loops 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":1145}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e1cc3dbbde533a61c2a692903368d4856099b72cab36a24f513c7966980e109"}},{"ruleId":"D2","level":"warning","message":{"text":"LanceDb.insert (cognitive 16): LanceDb.insert has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, ternaries 3, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"b006056ac8a8d486d6b30dca2ce3f73729b4eb9e20a3d7bdb62352b866d5187c"}},{"ruleId":"D2","level":"warning","message":{"text":"MongoDb._get_client (cognitive 16): MongoDb._get_client has cognitive complexity 16 (threshold 15). Drivers by points: error handling 12, if/else 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5240d406d0151a95e17cf19ce13441c852ff5dae72ae06d040b67ee08ec1db7"}},{"ruleId":"D2","level":"warning","message":{"text":"PgVector.async_insert (cognitive 16): PgVector.async_insert has cognitive complexity 16 (threshold 15). Drivers by points: error handling 6, if/else 5, loops 3, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dcc2eb445d1b6a44e64b10035b9681683ce4a17214f0506eb4b7afe45d8dfd6"}},{"ruleId":"D2","level":"warning","message":{"text":"ValkeyDB._filter_exprs_to_dict (cognitive 16): ValkeyDB._filter_exprs_to_dict has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"58790657129b1e5669a43f51818caec988b29c108ce932589ddbbc7201ec0f81"}},{"ruleId":"D2","level":"warning","message":{"text":"Condition._evaluate_condition (cognitive 16): Condition._evaluate_condition has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, error handling 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a742908c3e37b8aab6fd526310d41be96f10d64404bf87dd14a053d9bd7be40"}},{"ruleId":"D2","level":"warning","message":{"text":"Parallel.execute (cognitive 16): Parallel.execute has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, error handling 4, loops 3, boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae01cebbc887a1c6c191f63b586bea722bca8863db8f54a9d6996d0a19718065"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.aget_run (cognitive 16): Workflow.aget_run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 3, boolean chains 2, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":4652}}}],"partialFingerprints":{"codehealthFindingId/v1":"39c8f51816ba6528124103f05503a8f094953a428a99a328f486021f01d0b0f2"}},{"ruleId":"D2","level":"warning","message":{"text":"Workflow.run (cognitive 16): Workflow.run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 5, ternaries 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":9427}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b46bf64b6413133f782912750364f0768b8d2264d88092fb9f2a6f6c95fed7b"}},{"ruleId":"D2","level":"warning","message":{"text":"test_agentic_filtering.test_agentic_filtering_gemini (cognitive 16): test_agentic_filtering.test_agentic_filtering_gemini has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/knowledge/filters/test_agentic_filtering.py"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6d27b74612ee8ba26e475dd5917d5586a84e824e2e34f835249ca57edbdbcff"}},{"ruleId":"D2","level":"warning","message":{"text":"test_agentic_filtering.test_agentic_filtering_claude (cognitive 16): test_agentic_filtering.test_agentic_filtering_claude has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/knowledge/filters/test_agentic_filtering.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f2066823cb81509e1367b198c676b2471a98e55e54e8c0f8f515922df1ea421"}},{"ruleId":"D2","level":"warning","message":{"text":"test_nested_workflow.test_parent_step_id_three_level_nesting (cognitive 16): test_nested_workflow.test_parent_step_id_three_level_nesting has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, ternaries 4, loops 3, boolean chains 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/tests/integration/workflows/test_nested_workflow.py"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"29b37ac93500213e793ea24a41b973307ae91e7619dd4700aa224d20f584c435"}},{"ruleId":"D2","level":"warning","message":{"text":"CursorAdapter.list_entries (cognitive 16): CursorAdapter.list_entries has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/clients/cursor.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1ae8fa1ca85ec99dcfbd3ab89dd3af13b75e11588b031a3fda2402e6c8f215"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/workflow.py: FileTooLong \u2014 7674 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42de1dd98e360ac521e655cd8e53bc967267a6a3ce732123d1128341da304ace"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_run.py: FileTooLong \u2014 6313 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98c932b82e2e41be60d200c5820b78d8000d8a63b92b8016fed64181471f571d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/_run.py: FileTooLong \u2014 4169 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"018366b256a3f62893e6b99714fc3c845ab767a06f830c6d1b0ed84c326f89e0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: postgres/postgres.py: FileTooLong \u2014 3788 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7b4a823bd8de7239f5456247cb8f21dec569c26c07bf58e9284b7e0f1831c4d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sqlite/sqlite.py: FileTooLong \u2014 3657 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"703c3bd4a150cd3f7d9e757c66375f5cf0b7559fe62babb0c872182a078f2050"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sqlite/async_sqlite.py: FileTooLong \u2014 2933 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3ee4aba668e5ac154a6a1e7c7a7b9b5654ca71606236678bee520d15bf789e7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: postgres/async_postgres.py: FileTooLong \u2014 2859 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72c2f7170de00c3db6af763371360cca277219e51ee6452df27c6f7338e43adb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/entity_memory.py: FileTooLong \u2014 2549 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0106bb4fd3e65b7f9a9885bb5c148cf33d6a5a4134ec00bd90d3332a1e862d4e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: knowledge/knowledge.py: FileTooLong \u2014 2512 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b575a5aa716cba019b8d3b9a76f6bd1394e3f2410a05d9f64c481c4f8a8b8c84"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mongo/async_mongo.py: FileTooLong \u2014 2165 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5703ac1273849cb9f050f3573ab460eda4f244bd19bc915ded1ded5044dc4abe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/step.py: FileTooLong \u2014 2138 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/step.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c276e564fd89fbfadf7684efbc42abbf7f44c448d773d071522696d3417019c5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PostgresDb: TooManyMethods \u2014 128 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a028ceacb1222adaf7af792cfcadb1150741baa6605447e12a6fbdc1d15aa65"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SqliteDb: TooManyMethods \u2014 128 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"c997faa359b4b6dc8c9072febc56a532709dc0948e46fb911112f9c8e6eaf8ac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: models/base.py: FileTooLong \u2014 2100 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8807942b9b2efe54123a996c899368fe62a4017cfd56bf0438446e37226fe86"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mongo/mongo.py: FileTooLong \u2014 2055 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4fc6bee27dbd8a8041ef30a582db74838391340965e4a40d4f59dccbcd7f3d1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BaseDb: TooManyMethods \u2014 116 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba10cefcbddcb0f001b7d4e689d76b9887dee75234794afd1cf261dfd1d92338"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dynamo/dynamo.py: FileTooLong \u2014 1842 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f14e70f65cbded624701b9d57bd992d6d58e8058871ffcf3e23f9581683979"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mysql/mysql.py: FileTooLong \u2014 1832 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72c18b65e8d252cd9f44e628bb55f7f1a5a13e7fab1c4e4a620c44ad1d8179eb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: singlestore/singlestore.py: FileTooLong \u2014 1808 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b61377456849f102ecd0b47ad48ad4e196a98f07a337f5fac9c0f2ecedec0e7f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: valkey/valkey.py: FileTooLong \u2014 1795 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdafb1c7df82df8a26a61495cbe361ace74be2c404da045b979f9ba32ff14b1f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mysql/async_mysql.py: FileTooLong \u2014 1793 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b8a5fcee2aec3d672e1e4cd8cd17cbf0b455c316e9676def9029c863f4b7d6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncSqliteDb: TooManyMethods \u2014 107 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"beebf06f6c94eabc9b271f54765142d2825f49b05846ba4b712a6265e0df46ef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncPostgresDb: TooManyMethods \u2014 106 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"56efa38cc8e508691bf0dcc9357ccf74fa642c22cd7781b4320240713155daee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: firestore/firestore.py: FileTooLong \u2014 1489 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ccf45747b1f64a7382fede4fae900cad95bc22d03cb419c5e9474f54da976d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/os.py: FileTooLong \u2014 1481 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd7b83bb873ff3daf1e0e8b62c81febf11ff8f40a565ed9d257b30b4e0b65601"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/team.py: FileTooLong \u2014 1438 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/team.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed01ab3320d2a946dcce2ae64d648c490a1f72d8712ce6a46398bd6866559c23"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/_response.py: FileTooLong \u2014 1435 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce7406d574586b18402730e27ef168e105e3c9918578f19c14d5dd77472da6fa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StudioTools: TooManyMethods \u2014 85 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/studio.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"7774e464a46e6e4175e655dd1ac5e6f5a2e74de73812ea584d3b643ae7f80bf0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: print_response/team.py: FileTooLong \u2014 1416 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/team.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05dcf912a8f01170afe0c99c02130fa2671c8ebe744342eacf2e25e49bf80f0d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_response.py: FileTooLong \u2014 1409 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_response.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"614d64636f1881000a6a89e8a1d748cbadf912efa747848f644d39e9a9b01473"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncBaseDb: TooManyMethods \u2014 84 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":1486}}}],"partialFingerprints":{"codehealthFindingId/v1":"3404741e527fee8b68571b37bba9b57eda5748d4d891baafc3e061f8c7360df3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/agent.py: FileTooLong \u2014 1368 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/agent.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fbe68c4abe57234f7644dfa3ffe6f37a07336836d37a6f94d13ea65219cc53f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agents/router.py: FileTooLong \u2014 1368 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"667719ffad4987cd991b3c1445c9981c672fe85cc2bdd209379670ebe442a9df"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: google/gemini.py: FileTooLong \u2014 1352 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c96925f8ace50d018336d10dd6f3afa791d966b4b7b6a55c70a0a02aa3337eea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: teams/router.py: FileTooLong \u2014 1340 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1886d981f9e898558e7d8a4a18aeadba5fd7205db33adf5669cca18cd8667491"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/_messages.py: FileTooLong \u2014 1335 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f7c1483367a28fabcd362611d9e19928ebd1e71ed14607a2282faaab4ef792"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: os/utils.py: FileTooLong \u2014 1334 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/utils.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"20c1eb957ac68edaf8740fca9bb8b2e6905ba44cac0c80aaa18319dc6f7703ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: os/app.py: FileTooLong \u2014 1304 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9132dcec831c715d244f65cce5734a88f7788437779dff616444be86a51d8c5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflows/router.py: FileTooLong \u2014 1304 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/workflows/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b8e6a450d4b18c42c17b97c3cea199124b7fb80302979a89b1bcfd44054475"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AgentOSClient: TooManyMethods \u2014 77 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e1d47e345ed79b6e56ffb46ea084a5a09558094633425c751ad82ebb90f60b8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncMongoDb: TooManyMethods \u2014 77 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ec37e02d2864bab1ec411f71cc4b8ab88b60e04e8b22a84b654b097f4a14e1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: redis/redis.py: FileTooLong \u2014 1280 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe3f88577f6228864e77bb0e295865d74b9aef49cf988396e59dbcdd3949ec3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_default_tools.py: FileTooLong \u2014 1264 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_default_tools.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa55e25219872abf7acab7e388247e6faea053a959116ecc66154c754b61612e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MongoDb: TooManyMethods \u2014 75 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f3bf21cd35ff0e871ec95a42d160cc751cee9c357df6cb4e6c5f19c5139bde"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: db/base.py: FileTooLong \u2014 1227 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca7e7ee1805ad892b95df93eb1abe4995c09a6b56cbb6beb24c2034a49384475"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/studio.py: FileTooLong \u2014 1220 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/studio.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa87ff163eb3442de31661b70bd4b1e880d0fb99218d194452fd5d167126987"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: google/gmail.py: FileTooLong \u2014 1202 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a8c4611aa6a978d2e8588e0faa7126483d08777acb5e0845ae323fdd65469a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: knowledge/knowledge.py: FileTooLong \u2014 1193 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f6ff9b7af1d3d3b462d8324bb051e833a6ead89f9d5a484402ad9726638608"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: gcs_json/gcs_json_db.py: FileTooLong \u2014 1181 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aef28f0501aa2aa8cb54699d6c3947980af91940cb84f6d81d9967a70d376ba7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: json/json_db.py: FileTooLong \u2014 1175 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"005bb2cd1fdae3672b7a549ef7b8a72b2d8ce04cad96cce33a433a50c3e4fcbe"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: print_response/workflow.py: FileTooLong \u2014 1175 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/workflow.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b35f39fc8d159c809631d1ae1a9d228a89880e803e8d3ba3d6d3df5cfe8d69d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_messages.py: FileTooLong \u2014 1173 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_messages.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9deb27b4f8632bdb6979b7d5238ae646b2df536983f4136792949a84f75506"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ValkeyDb: TooManyMethods \u2014 67 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"284c8e5358578e8732debc2b916530fe3df7c748225ca29f4bc2616b0ff637da"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/github.py: FileTooLong \u2014 1086 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/github.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff9252ed7e6fe63c8a407f542918f18360406931717f457332f02fac2bc7edcc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: memory/manager.py: FileTooLong \u2014 1065 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df58d5cfa55cb9edf0afe4a84b52607793a3aa6be3a429566c7b89c983ac979"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClickhouseDb: TooManyMethods \u2014 61 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/clickhouse.py"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fa7e7490f36709b5b5115bdcaa78c74c5d39bfde4d8402762175460c4cd69f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DynamoDb: TooManyMethods \u2014 60 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bd8b38353d7a25be9d20a0ab6d1fc50bfe4637767f245f58cebef26e5a00c25"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/condition.py: FileTooLong \u2014 992 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/condition.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78478185c23b2123bd66905c285b24241ca95a0cd5296966f51a0564b78e675d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AsyncMySQLDb: TooManyMethods \u2014 59 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e057f424013cf41eb124e03514609e8d02f76afcaa5692e02d5993d57915fa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MySQLDb: TooManyMethods \u2014 59 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"72eab0e1664203bc362a775b21cb234265f1e3b3f8e7cdab7b13ab8790b180d8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SurrealDb: TooManyMethods \u2014 59 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"97356150ac9dba97479b91e996396d2bb8078410c5c975565fbb2383c165aa52"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: google/gemini_interactions.py: FileTooLong \u2014 983 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bcb3420598a44341306a6cdfc0839d2234f61f7ae1abfd4dae334a174a59802"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/router.py: FileTooLong \u2014 975 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ec9577c34ce4bca633b6a2409f747022ed40aeb139d861722c1273a0e00002"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: couchbase/couchbase.py: FileTooLong \u2014 973 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d93cc63766adb4f04a6cc2b8b142eef13ea637f5599c9538c98e197d6350241"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mongodb/mongodb.py: FileTooLong \u2014 970 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"549d0179b8f9f026c24da9feffb0dfe60e9202e8fdea51b1494270da8cdf999f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SingleStoreDb: TooManyMethods \u2014 58 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad533def2c62771277ca6533cbedba569dcf284ddaf7cf7c78650131862a1158"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: openai/responses.py: FileTooLong \u2014 966 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b04d5ab8d2d784f894c54cb4367cb721c15777f4283d9b8c9cfcc824b014f51"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pgvector/pgvector.py: FileTooLong \u2014 961 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df42c459dff45908425a6d537366071456a181d598b33fe44d059293fe2cbef9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chroma/chromadb.py: FileTooLong \u2014 942 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d95f096fda71df511821455cc531dbbc00a85020ed4d0c57a0af62b122e05d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RedisDb: TooManyMethods \u2014 56 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"5314ebd98f264c97381142d50c5d2ad94aebca44ec50370931aef1127513aa0f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/function.py: FileTooLong \u2014 926 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"253e9654db068673dcb127d960cdb77dfb70596d28ccb13efdf1a2f184b8224f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/learned_knowledge.py: FileTooLong \u2014 925 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4142f27ca51790eaf794e4e576f2f700a3cc13b68b4562ca66438f843df97e1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GcsJsonDb: TooManyMethods \u2014 55 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"89d5a270fe9fbe6a389aa92488f7ffdc303ec56ed01cf400902bfc167e990a4f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: utils/events.py: FileTooLong \u2014 915 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/events.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9a0fa8f43f3453ce0eb0cb3d833d8bc6070aa78bb0d6c89c2d7db0b465f7aa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JsonDb: TooManyMethods \u2014 54 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce9e5323a1b2cb64243a458660f4b2e7630ae0e61cab8be8bd4b7a545a6c56cf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/loop.py: FileTooLong \u2014 894 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/loop.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a465d04cdc209066eb6e0441b4e6afe87afebf5b14468c8cfb6e01415ffb4a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FirestoreDb: TooManyMethods \u2014 53 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5590006a6c309abf019881667de8524a6714bfa4decc740e1e27794a05fdab6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: session/session.py: FileTooLong \u2014 880 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/session/session.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2629ee6c6b78274240429cba2222efcee62c9bab66d334125351fd940dfd29be"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_task_tools.py: FileTooLong \u2014 876 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_task_tools.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86d259e2dede631aabd8bdc76f1ade18b26b29a71569f66b6da004c0d1562d0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: reasoning/manager.py: FileTooLong \u2014 857 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/manager.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8edd85bcb73325d854ba5ce393610fa46a56b7a076c81d762ae44b11820ea7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: in_memory/in_memory_db.py: FileTooLong \u2014 856 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c6048281f4f3178d5c7a8e035f96057dbaa8f33e6e5c7912b52e93407812631"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InMemoryDb: TooManyMethods \u2014 51 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c38699e9a5285dac53ea548c98dd004ef1601df9b3696a0b7cd71ca423e6b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PgVector: TooManyMethods \u2014 50 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pgvector/pgvector.py"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3e1d92e2091697ea2fb844cf978886dfa0b490f40d262169f7aee0349c030f0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: anthropic/claude.py: FileTooLong \u2014 827 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"299230bbf706a5e3fd477a8941fa30baf31206c5cf43f0321cc671f637e713c6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/user_memory.py: FileTooLong \u2014 819 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8cc0f6aaaef53ec60213a6a6efff17e26490dcfe9d3d15819376e3fead2058d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: os/mcp.py: FileTooLong \u2014 814 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c17098beecbea62be8355dce307e3121b9bb6be53d218e6726e6bbfb1d8dbf0c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/types.py: FileTooLong \u2014 800 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/types.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"48377b0d89095df749c81817618354fd027f66a62a39a0cd18c78bab2904992c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: environments/runner.py: FileTooLong \u2014 796 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/environments/runner.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9df348408f311e8199a8bd6394379e284ea74c423179120c6cd6c35c56b8509c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: utils/agent.py: FileTooLong \u2014 793 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/agent.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4dc2026800064c9c2b3b7d30ef222ad98e9a5b4e16ec9235d92627687df840"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_storage.py: FileTooLong \u2014 789 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a93c28ac9c84e618fe37f08d911bc88eaee85c7be17df2071340119eabcb1c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: a2a/router.py: FileTooLong \u2014 784 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29babf0fafdfcd5accdbc4068518a845add5339ecaed4c349aab95b15fb61150"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: run/team.py: FileTooLong \u2014 775 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/team.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03609add7331d3ad1ad3697993b91220c16bf5c09b2b953220944a32e5c8ac14"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: os/schema.py: FileTooLong \u2014 774 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/schema.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77040f67a4204effc99565e942d46c5d815251c3207739dd226d925f78b27287"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/_tools.py: FileTooLong \u2014 769 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4bd3b5b28679ce5b3fdf71f95d9d8b2aa46ef875f536105dfa95be92b99e6bb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AgentOSBuiltinAuth: TooManyMethods \u2014 46 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp_auth_builtin.py"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f02ff178f9920145bb4fe5d058fbc1914773d4a40f51557314c79556f6e3cde"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CouchbaseSearch: TooManyMethods \u2014 46 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/couchbase/couchbase.py"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fe56583987e4528af59ea949d73cc7abb07dbf395c0ce09e46d379cd0cb8c7c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: learn/machine.py: FileTooLong \u2014 752 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a551a790e6e3ab382403e8c1d5c2a8f684a42d81c2c007e11e93fd301693ed"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: milvus/milvus.py: FileTooLong \u2014 751 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/milvus/milvus.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7cd0292bb50f13a69814bba33b44e45a91237a24a2218feaa4b5f39b68d7138"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GmailTools: TooManyMethods \u2014 45 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/gmail.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d5a5fc38123c83aa4d00d5133be3438cbc8b5033354a551adb47d5def438d75"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MongoDb: TooManyMethods \u2014 45 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/mongodb/mongodb.py"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"d296d07ce90dd664f2e483b3df595ab20018e16191124e98a609f52b4a268ddd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: print_response/agent.py: FileTooLong \u2014 741 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/utils/print_response/agent.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f744343ddb7942c69a6f28b0732439b6306c0d148c4cb1aad30e2a953983cddf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: commands/connect.py: FileTooLong \u2014 736 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agnoctl/agnoctl/commands/connect.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2821c2360221784a7289af1f08abd39f396925bb673fce099a402ffa3f1035cc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ValkeyDB: TooManyMethods \u2014 44 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"37df2e60b3669aa4510311571ad0f93f6a6bcacec99cb5d95e41a73aa587f226"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: openai/chat.py: FileTooLong \u2014 720 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5676803ea09afaa017cefa022aef0e45a4cac29e0c8ff72fc1c30cd51e74cd2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: qdrant/qdrant.py: FileTooLong \u2014 720 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/qdrant/qdrant.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f6f3dc2b5cd3ab58bba42f29136533a01b9e21ba685245d0978a3cb221dfeb0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/decision_log.py: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e255cfdce8e7dad52343c2a7d9e6013cdd0fc8557502d9f96df3a22048fc5098"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/parallel.py: FileTooLong \u2014 709 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/parallel.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8449622989bd3dc94b14e8514a88562ad10d44e620a6c670763985494213424b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: run/workflow.py: FileTooLong \u2014 707 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/workflow.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3007be45ac16c7a78a8e7ce15590efe7d49886110cf6d5157136d85de6088780"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: google/calendar.py: FileTooLong \u2014 704 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/calendar.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f03d24a2633d32203abc843f76de66d8d3f7cdf840664d135b715ec358f2845"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: a2a/utils.py: FileTooLong \u2014 701 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df93f29a895d03a14fc28139bfe8e5afc22b6fdd3da17db6dcde6e950b80f41c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SuperserveTools: TooManyMethods \u2014 42 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/superserve.py"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3130724e9ca57b313766b96aadaa45bb1738c046c33f6e9b1bb48f4db8e3790a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: surrealdb/surrealdb.py: FileTooLong \u2014 697 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6165c7c2e9713cb5e8555912191b4fabced03dccb7b708f5e576932750a3367"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: run/agent.py: FileTooLong \u2014 694 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/run/agent.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbd7d77c3b13402c47512323a551e15697785972021a7c036c9f82f2228ecad0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: lancedb/lance_db.py: FileTooLong \u2014 690 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62bf62d2bee01b09f06a35a812dee30f653d7038c052c86e1e5e8944413ae96b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agent/_storage.py: FileTooLong \u2014 689 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"500441a66756f5b0bbf1a640c03dc4040454a7309ce45f922e7fd46d68be7669"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: google/slides.py: FileTooLong \u2014 688 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/slides.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eee3f1b029c2cf9af3e51490519f4f74c2af433841b6a4d2579bb0980de4e22"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AgentOS: TooManyMethods \u2014 41 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f971cb39952868f71fca210a220e707757f77e3190821b4ca072cafcff4dafa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GithubTools: TooManyMethods \u2014 41 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/github.py"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa7b611f6a3cc0d669572179225e98ae2936f62d8585430b70e865de33a00f86"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LanceDb: TooManyMethods \u2014 41 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lancedb/lance_db.py"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"f98b04cf07e2f47a2d722dac0b99d6693976a0a1dfc28adea7132313eee29513"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: culture/manager.py: FileTooLong \u2014 674 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/culture/manager.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"485f7bba61780caf3606ff573fb29863517fe78ed9d927939a3128e8c9242b29"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: os/mcp_auth_builtin.py: FileTooLong \u2014 668 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/mcp_auth_builtin.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d4cb336d78d8d9c37b6a7b167c28e04f6e7909c06acd19c663081d226556d5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Milvus: TooManyMethods \u2014 40 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/milvus/milvus.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f42070dbbf9152bc3feef4f93c77f5bf948987bf7f8c958183fb690a9c0137"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Weaviate: TooManyMethods \u2014 40 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/weaviate/weaviate.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"dee83b3278cb8a324a7c3c683f933b7571ab0fe0156425dd55e9fd19dee3f819"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/session_context.py: FileTooLong \u2014 653 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"292da8882395f1c37ce39c3c4a0d8cced9065f5546ba7bde9f7136585a62644d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/slack.py: FileTooLong \u2014 651 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/slack.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf01b9308583250ebae9c21482e725c544345c68b1cd929eba9928c8e818110"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: valkey/valkeydb.py: FileTooLong \u2014 649 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/valkey/valkeydb.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df3fdb97966b276c5e93aea16085615867ffe1dc0579e52298042dd4ea59d18"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ChromaDb: TooManyMethods \u2014 38 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/chroma/chromadb.py"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"707ac89dcb3ad830c045bde83e3c8d436bd94c589801aa61010a56a998395ad9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Qdrant: TooManyMethods \u2014 38 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/qdrant/qdrant.py"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc72bcc3fd4387b6ec376611980b55a6ac079fe8a8b6fc3132fa0f4a7c39f30b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: workflow/steps.py: FileTooLong \u2014 633 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/steps.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"faa8d3a2ae227e4b589692648c1cd761a7c7009149a977f110a2d4d2695aa035"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: memory/memory.py: FileTooLong \u2014 619 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/memory/memory.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbb13ef3f3b2cd341e460ebc08f2f2e9c9c1da9204e0d2f72cd5cd6ad2d8b3db"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: eval/agent_as_judge.py: FileTooLong \u2014 618 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"525abf3fdd8e770a05db7fff8bf62c7c4c81e36ab1a04b9e0dedeabfc2d1bb02"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: middleware/jwt.py: FileTooLong \u2014 617 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/jwt.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"30050808f87a39c2520e6a9ff9ef02fc05df49ff41c41c4f8ce7316fbb5c0dd5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: weaviate/weaviate.py: FileTooLong \u2014 616 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/weaviate/weaviate.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9707076c8aee029c4cfdbc90e6475e935c45df5db9bf1f8a25b202c28d4db4c0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: team/_init.py: FileTooLong \u2014 611 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_init.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce3bc347a2ec669916660d7d9da13ff7602464a1674a326bb21fbaae21bb887d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: traces/traces.py: FileTooLong \u2014 603 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/traces/traces.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be69988c82150182952a1320232a607452aa954f3e3b46b91c084c5f7750eaa2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: eval/suite.py: FileTooLong \u2014 597 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"61811d48dd1ae79ffab16e7e4a5bdf9a65a6163d69df6c1f6ad02b914ded6b01"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stores/user_profile.py: FileTooLong \u2014 593 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_profile.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfe5ea5831ee4c323a0f07e0f618f154669fe1edbc880f28c43208849478b1de"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agno/metrics.py: FileTooLong \u2014 592 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b3b9c69269858dab6d3b8324a8a4951bb45880199c4d52c51e46102a3028a76"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LightRag: TooManyMethods \u2014 35 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/lightrag/lightrag.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"82253eee28bb64bd346d409495644a300240c8d57a7d76882150a2b05bc51c8f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/agentos.py: FileTooLong \u2014 582 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/agentos.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a276a2c7540c6327eed1bbdfa088b198d21a929b25f58bd76b6ae46382a171f6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tools/workspace.py: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/workspace.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8142185432b3789771ed38b624e77a05246696edb23f24a738b2b2b23f3ea143"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: clickhouse/clickhousedb.py: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/clickhouse/clickhousedb.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"188e4576ea4241546a21577ebc2be160c8ea4fdd49439a38175be14898bc3aa0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: clickhouse/clickhouse.py: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/clickhouse.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcb68a1b39841c2e851b7d7164557c399f937e40bad78822cd0f8d57f2ef0810"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: learn/schemas.py: FileTooLong \u2014 575 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9406e35c12c9decb009fb9b592db2566ec82b43cbe74df17bf8f225b433f9be"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScavioTools: TooManyMethods \u2014 34 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/scavio.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"32573daacbbf1627753d6e2d0c14608c25c2d11f573ac6cc4f60a96b840e3149"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Clickhouse: TooManyMethods \u2014 34 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/clickhouse/clickhousedb.py"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"450337912f9978d371cc6fb75f47135b91d668352b17614ed2d3a9acfe4f6b43"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: agents/base.py: FileTooLong \u2014 552 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98a9e3ed3748e0ce684598f9e985bc4a4e46d4317e98a97f5bfe8d8e1f95711c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rds/db_instance.py: FileTooLong \u2014 551 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefc823e979f7ce66e4cd75d69c783383f96f3d791fc95b2d5dff3b06a48f0d7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RedisDB: TooManyMethods \u2014 33 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/redis/redisdb.py"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad2816617217f6c9f4a6011413af68eac77f9c158b9761b589f1ca2692cd8ed3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fs/toolkit.py: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/fs/toolkit.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f14aa6c8dd731924712547309b5f0a48d323be8891c5dc534fac2c1706f9564"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mcp/mcp.py: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/mcp/mcp.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef891cd4d98c161c9e648c9557a685b0652ab5a384aba537176c780125a56817"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: wiki/backend.py: FileTooLong \u2014 542 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/backend.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f63825dede24f6ba94ff1e8b2591fc0ad8ddbd758cac9b1c087ff10eb470ff"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: app/base.py: FileTooLong \u2014 540 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/app/base.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df39a4c94372c14555674b32ac85195a592baa28d8467a370c799934b69a7c3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PineconeDb: TooManyMethods \u2014 32 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/pineconedb/pineconedb.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d981cbb2e5d9e748f336c3bc060dd8e3621dce856d64655a6257af4a38f4381"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: aws/bedrock.py: FileTooLong \u2014 531 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b304d3eedfb7667558151daf9f09874cf4b278e04bc1ecabef8a9a7aa120dd74"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SingleStore: TooManyMethods \u2014 31 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/singlestore/singlestore.py"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"39948de59a6b8620f5a6fd506d69cdec8b8b38f21e82e74983c17752dcb6c8d8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UpstashVectorDb: TooManyMethods \u2014 31 methods."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/vectordb/upstashdb/upstashdb.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"cae4324f0841fb20ac6858e1518bbc7a668df0e9cdd41cacd59ccd423a29f1a7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rds/db_cluster.py: FileTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e99d7ec8c4dd715122e15a1a060977441b88f6aa661f9aa27d068bf3a4a18de0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (52 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:577-628 | libs/agno/agno/db/valkey/valkey.py:698-749"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"609589d2f08835174c2be16c47e2008bffb644117d7775b9b8f18140cd64e4f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1011-1061 | libs/agno/agno/db/mongo/mongo.py:799-849"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee472878c58ec16433e436b346d05acf88d6f8040478119271ea0a234be3a7ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (51 lines \u00D7 2): libs/agno/agno/learn/stores/session_context.py:908-958 | libs/agno/agno/learn/stores/session_context.py:1049-1099"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":908}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d449d3643b5784aa220b595bca26e59d8b98e24a9edb9f35b4cb06bb2bf9de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (42 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:78-119 | libs/agno/agno/db/sqlite/sqlite.py:95-144"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"0333ebcca0705aa8fc40a4fae0108d39da41381b5c265a62146c3cae2b7f8125"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (40 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:541-585 | libs/agno/agno/os/routers/teams/router.py:528-567"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"027746250bafd97e3be4634c7525834e0451ae4d783907aac281d4e968c5fa5f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:2841-2879 | libs/agno/agno/db/postgres/postgres.py:3314-3352 | libs/agno/agno/db/sqlite/async_sqlite.py:3028-3064 | libs/agno/agno/db/sqlite/sqlite.py:2939-2975"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2841}}}],"partialFingerprints":{"codehealthFindingId/v1":"223c3e91a83aa735cae6d434388553afe5d6efd9ac8e96d0bae37d5d6ef3babb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): cookbook/02_agents/14_advanced/cancel_run.py:47-83 | cookbook/03_teams/14_run_control/cancel_run.py:53-88"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/cancel_run.py"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb732e160067319624692ba6dcf5b90bbf01cad82187544b38144bea9a6905a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:913-948 | libs/agno/agno/db/mongo/mongo.py:701-736"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"5512a9bc4b3cd32f3e43fde446fdf17751698b6baf08f21851dfd428ba4d6397"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:61-98 | libs/agno/agno/db/singlestore/singlestore.py:63-97"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb59dd1aa8cec6bf69c57aaf6bdee843722e4cfef9fc934482890827051d76d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:819-853 | libs/agno/agno/db/valkey/valkey.py:1090-1124"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d741bd049ee75a8c69781c974eead00c01050bd0a61a0585e480defc76c4018"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_class.py:75-108 | cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_function.py:74-107"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_class.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa5e195d54358d316fe801b30a6f4acd69218ac1801fd8d5c58067eb38cafed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_class.py:129-162 | cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_function.py:181-214"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_class.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ac60be3e567e32789d5653b175e9d1223d99271d023476a88140d30ecb7caca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): libs/agno/agno/agent/_messages.py:387-420 | libs/agno/agno/agent/_messages.py:749-782"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec5101c961e3d889cc131d2fd08141e82f57dc4401c3b453de217d8bcf1e13c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:280-313 | libs/agno/agno/db/json/json_db.py:262-295"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"53e5b3735b032aa58261ff775cf1ec581f92a83372b0b7886f02bfae4906076d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:162-202 | libs/agno/agno/db/mongo/mongo.py:67-100"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"218b38cfdca21ac43c196ceb88433d9e8b183a684e6ac07387398e699b6caa4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (34 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:885-918 | libs/agno/agno/db/valkey/valkey.py:1156-1189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":885}}}],"partialFingerprints":{"codehealthFindingId/v1":"6318b70c501e281514bf80ef892a9ef2bf9f5333f50bf52ae46d6d32ba6c826b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 10): libs/agno/agno/db/dynamo/utils.py:300-336 | libs/agno/agno/db/firestore/utils.py:181-213 | libs/agno/agno/db/in_memory/utils.py:54-94 | libs/agno/agno/db/json/utils.py:54-94 | libs/agno/agno/db/mongo/utils.py:78-110 | libs/agno/agno/db/mysql/utils.py:233-273 | libs/agno/agno/db/postgres/utils.py:270-310 | libs/agno/agno/db/redis/utils.py:180-220 | libs/agno/agno/db/singlestore/utils.py:208-248 | libs/agno/agno/db/sqlite/utils.py:244-284"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/utils.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"136fbca478a93305dd4de830a2b4ba1d5c018c4cc63822c4e76b29a124799cb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:231-262 | libs/agno/agno/db/json/json_db.py:213-244"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"e03368ba563415894efaa0dee6fb993c1234098afee7e0f01f343c9383069fd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1546-1577 | libs/agno/agno/db/json/json_db.py:1527-1558"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1546}}}],"partialFingerprints":{"codehealthFindingId/v1":"791b9b40447bc334af5d61c1bc3ee2d90847a145e65f433d2072234260101d69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2095-2126 | libs/agno/agno/db/mysql/mysql.py:1896-1927"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2095}}}],"partialFingerprints":{"codehealthFindingId/v1":"e642a1da8a3643947e326a4ad7105cf7121b67c009fbf3b98b26ad24a862dda9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1982-2013 | libs/agno/agno/db/postgres/postgres.py:2219-2250"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1982}}}],"partialFingerprints":{"codehealthFindingId/v1":"90c97875b6e75486ee6aa91ea21e0f49e2f0e9aa2de98bc623d78208f8f27a4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:1912-1943 | libs/agno/agno/db/sqlite/sqlite.py:2171-2202"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1912}}}],"partialFingerprints":{"codehealthFindingId/v1":"01443bf4ea79f8b5ccdb4685b05930e89225d06109847f87e96532264d638aff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 16): libs/agno/agno/db/mysql/mysql.py:554-588 | libs/agno/agno/db/mysql/mysql.py:1253-1285 | libs/agno/agno/db/mysql/mysql.py:2082-2116 | libs/agno/agno/db/mysql/mysql.py:2294-2324 | libs/agno/agno/db/postgres/postgres.py:866-900 | libs/agno/agno/db/postgres/postgres.py:1579-1611 | libs/agno/agno/db/postgres/postgres.py:2439-2473 | libs/agno/agno/db/postgres/postgres.py:2655-2685 | libs/agno/agno/db/singlestore/singlestore.py:620-655 | libs/agno/agno/db/singlestore/singlestore.py:1306-1338 | libs/agno/agno/db/singlestore/singlestore.py:2088-2122 | libs/agno/agno/db/singlestore/singlestore.py:2303-2333 | libs/agno/agno/db/sqlite/sqlite.py:853-887 | libs/agno/agno/db/sqlite/sqlite.py:1516-1549 | libs/agno/agno/db/sqlite/sqlite.py:2355-2389 | libs/agno/agno/db/sqlite/sqlite.py:3385-3415"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"7888ed6bd443d84b7064485086fffef4d7cbced18cee65f81ed0631e7c9cd3f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 7): libs/agno/agno/db/postgres/async_postgres.py:679-712 | libs/agno/agno/db/postgres/async_postgres.py:1177-1208 | libs/agno/agno/db/postgres/async_postgres.py:2203-2236 | libs/agno/agno/db/sqlite/async_sqlite.py:661-694 | libs/agno/agno/db/sqlite/async_sqlite.py:1324-1357 | libs/agno/agno/db/sqlite/async_sqlite.py:2164-2198 | libs/agno/agno/db/sqlite/async_sqlite.py:2437-2467"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c113d7d7a636e13480d33cf040bb2a4889ec9028bd1c9762858d00dab4a8112"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 3): libs/agno/agno/db/firestore/firestore.py:375-407 | libs/agno/agno/db/firestore/firestore.py:882-912 | libs/agno/agno/db/firestore/firestore.py:1755-1788"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"9944ceacbcf7da34bf7e1510b4363339fd280a50c423ad5e1760b67e5d9b5155"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 3): libs/agno/agno/db/mongo/async_mongo.py:676-708 | libs/agno/agno/db/mongo/async_mongo.py:1256-1286 | libs/agno/agno/db/mongo/async_mongo.py:2172-2203"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3b62a0dbc841a1723334634be675e1d16455f71fb7afe0daf9031968b7d4568"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 3): libs/agno/agno/db/mongo/mongo.py:464-498 | libs/agno/agno/db/mongo/mongo.py:1041-1071 | libs/agno/agno/db/mongo/mongo.py:1951-1984"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d679a572bf150637173e0afbc29bac49e4f1edaab112001dfa6d1c81cb47b61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:560-592 | libs/agno/agno/db/mysql/async_mysql.py:1259-1289"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"cedb855e57a3a5a297a63d432d65c54f2987253f0e6bedcfc75d86d77957c705"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1507-1537 | libs/agno/agno/db/sqlite/async_sqlite.py:1401-1431"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4052eb41848036aa4861df518a4451dfd5ee74de5fcf71367515ce6d1331bfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3887-3917 | libs/agno/agno/db/sqlite/sqlite.py:3773-3803"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3887}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1ebcd134dffc8a590f4e519a932535642c0fed285434aa3c847538c0d165ad0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1341-1370 | libs/agno/agno/db/postgres/postgres.py:1670-1700 | libs/agno/agno/db/singlestore/singlestore.py:1380-1410 | libs/agno/agno/db/sqlite/sqlite.py:1593-1623"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1341}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad07cdd8f7af4dd11944c426cca3ee000ab627648d6ce192cae3f9b6406e1e67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 3): libs/agno/agno/db/migrations/versions/v2_3_0.py:147-176 | libs/agno/agno/db/migrations/versions/v2_3_0.py:497-526 | libs/agno/agno/db/migrations/versions/v2_3_0.py:714-743"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab7e1ec08ef6d6d57a04af55a324619c768a530dbff7bada47e273f781004031"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:1505-1535 | libs/agno/agno/db/sqlite/async_sqlite.py:1570-1599 | libs/agno/agno/db/sqlite/sqlite.py:1760-1789"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1505}}}],"partialFingerprints":{"codehealthFindingId/v1":"84be22ee74cbb80a2eb9438760b07c7c9f54d128bf176fcfdbf1d42fd2da33c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:909-938 | libs/agno/agno/learn/stores/learned_knowledge.py:979-1008"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":909}}}],"partialFingerprints":{"codehealthFindingId/v1":"e33620b3bce22b51074f9ce04caccbb32ae7dcdb3559a9797b4643c241e62036"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:323-352 | libs/agno/agno/os/interfaces/a2a/router.py:626-655"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4e87228757602714c0ce164a14d678b30f65e52a9a59b96d615f87a7c8ed331"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (30 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:1582-1611 | libs/agno/agno/os/routers/teams/router.py:864-893"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1582}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbee3dcd85cf1e32f4e77fc470519db10ff22cff56df559eb427f350ea76dd13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 4): libs/agno/agno/db/mysql/async_mysql.py:989-1017 | libs/agno/agno/db/mysql/async_mysql.py:1042-1070 | libs/agno/agno/db/mysql/mysql.py:978-1006 | libs/agno/agno/db/mysql/mysql.py:1030-1058"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16dccf8fea79517c367044747d7f3bbcbd103b1f45748754f53305a92c5b702"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 3): libs/agno/agno/db/firestore/utils.py:130-158 | libs/agno/agno/db/redis/utils.py:84-113 | libs/agno/agno/db/valkey/utils.py:126-155"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/utils.py"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f25a7e0b589b47a9fa65b8c9d5d53e3e964ed446cef884a74655b8247045ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2682-2710 | libs/agno/agno/db/singlestore/singlestore.py:2632-2660"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2682}}}],"partialFingerprints":{"codehealthFindingId/v1":"731a37afd1d4a916b085228804a71ab2b98bccec7b00b2bacad6ee816f59b6ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3122-3152 | libs/agno/agno/db/sqlite/async_sqlite.py:3293-3321"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3122}}}],"partialFingerprints":{"codehealthFindingId/v1":"8436ebba4bf89f1a261e61d941c8059e14edd01285bffee3d87312c5f253452e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:350-378 | libs/agno/agno/db/valkey/valkey.py:467-495"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b8785457c859aeefb76c5d3dc103f3b8ab543e2b3dec4e2d9c30fd3b1c8ea4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:951-979 | libs/agno/agno/db/valkey/valkey.py:1228-1256"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":951}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b21739f8437e3fe41e087f67aefdb6e3b39ee68a8576161e01b1c1b0c3ae46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1985-2013 | libs/agno/agno/db/singlestore/singlestore.py:2720-2748"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1985}}}],"partialFingerprints":{"codehealthFindingId/v1":"b81c67ffe726655ddd182c815474592d85ab290ce26d2097fe167403807bc73d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 4): libs/agno/agno/db/sqlite/async_sqlite.py:1039-1066 | libs/agno/agno/db/sqlite/async_sqlite.py:1094-1121 | libs/agno/agno/db/sqlite/sqlite.py:1231-1258 | libs/agno/agno/db/sqlite/sqlite.py:1286-1313"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a6b1cf2967102945bd2dff6962e379b50b7bdae8f55d118e983f1335e61be8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 3): libs/agno/agno/db/gcs_json/utils.py:16-43 | libs/agno/agno/db/in_memory/utils.py:16-43 | libs/agno/agno/db/json/utils.py:16-43"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/utils.py"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"28430990ef29f2a68bfd9c50490ee31b0da59f912198b9ed4c57509b1235a12e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_additional_data.py:66-93 | cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_additional_data.py:131-158"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/01_basic_workflows/02_step_with_function/step_with_additional_data.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9fc14c9ffbcb40313172cb8f40ab43e8b539d35c1a07441bb625240d777f156"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py:82-109 | cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py:193-220"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"df7c05f226d5be077c38eef5d51f2358f2eddd13113964e20388d8bf829fd03f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1637-1667 | libs/agno/agno/db/json/json_db.py:1618-1645"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1637}}}],"partialFingerprints":{"codehealthFindingId/v1":"48eb210bad3418824835d51d668e78840a1513ed21ec07926a986dc3dc28ea49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:651-679 | libs/agno/agno/db/singlestore/singlestore.py:718-745"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"6062594ceeb3547c5b57b9aa24136a15be06541b60186f581f4365abb5533281"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1890-1917 | libs/agno/agno/db/postgres/postgres.py:2215-2242"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1890}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f61c885f4138d79dd7fec4ff8034b0ed80eac4c634b717a2d7447b42a6df64a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4880-4907 | libs/agno/agno/db/sqlite/sqlite.py:4727-4754"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4880}}}],"partialFingerprints":{"codehealthFindingId/v1":"30a26095df9ff87cafddd498cf4d12732ed80e84140f1219aa539520cc0d29d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:1045-1072 | libs/agno/agno/db/singlestore/singlestore.py:1096-1123"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"55070eb5c4a04c0b1642dbac95c28cdf255a337cfa346a23dc6a9ee76f14d40e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/memory/strategies/summarize.py:49-76 | libs/agno/agno/memory/strategies/summarize.py:126-153"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/strategies/summarize.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c218c692b9b7b7040912f563b8d3e41f358075da6ac726b764f01dad959202"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:1741-1778 | libs/agno/agno/models/google/gemini.py:1806-1833"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1741}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a3d2e377437e866e4121e4bd7cbdefeb2da8cf041e72431fceb999b8c769a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 6): libs/agno/agno/client/os.py:547-579 | libs/agno/agno/client/os.py:614-641 | libs/agno/agno/client/os.py:828-855 | libs/agno/agno/client/os.py:890-917 | libs/agno/agno/client/os.py:1137-1163 | libs/agno/agno/client/os.py:1198-1225"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f75ba1d8ec0dea143496be957c00327ce11fe02d83c1a5bb7cd1f40817a756e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1582-1608 | libs/agno/agno/db/postgres/postgres.py:1901-1927 | libs/agno/agno/db/singlestore/singlestore.py:1625-1651 | libs/agno/agno/db/sqlite/sqlite.py:1861-1887"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1582}}}],"partialFingerprints":{"codehealthFindingId/v1":"c379af3afe87ad939bdae9bf86b28745ba5a0bf3e12eec01b01f314428ad2427"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2621-2648 | libs/agno/agno/db/postgres/postgres.py:3014-3041 | libs/agno/agno/db/singlestore/singlestore.py:2571-2598 | libs/agno/agno/db/sqlite/sqlite.py:2629-2655"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2621}}}],"partialFingerprints":{"codehealthFindingId/v1":"93dd1703f29f349e9ac37f0f722e207f06caf7bfd7447fa2aea1678ff9435ee2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:498-524 | libs/agno/agno/db/postgres/postgres.py:809-835 | libs/agno/agno/db/singlestore/singlestore.py:564-590"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d897225283ae5d65397c936631d18a525c0c91f7422052a2d2193974a17d03c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/agent/_hooks.py:57-86 | libs/agno/agno/agent/_hooks.py:275-301"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"304050028c68b62afd2b38a84f86a28b7efc1dac46288cfb03d80528f5074270"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/client/os.py:103-129 | libs/agno/agno/client/os.py:163-189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d373481cb4a8b77d6e2879bd9d497223b6c9d4ba05ca4890698e9ec2da3465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:664-690 | libs/agno/agno/db/json/json_db.py:663-689"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":664}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a3f03028444dbd279cecc64edea00008b8751ad46c4eeea8b22cc51d8a3d64b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:984-1010 | libs/agno/agno/db/json/json_db.py:1005-1034"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":984}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f6ccef18daed30b3dc9e07d2e608eafa6fb978e076049c7ce65660fe53d707a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1477-1503 | libs/agno/agno/db/mongo/mongo.py:1260-1286"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1477}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8641fef83d48f6d31e2f21b06c0172e3eec6cc6644a149bef34961882656ee3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2694-2720 | libs/agno/agno/db/mongo/mongo.py:2532-2558"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2694}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a64a80dc14513d4aa74892d5637a5cd13452e294e5f7734421e1c69db30f858"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2729-2755 | libs/agno/agno/db/mongo/mongo.py:2567-2593"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2729}}}],"partialFingerprints":{"codehealthFindingId/v1":"16de66d0f02200c047e8fa05112b50c587b3415c07a7874e90cdff5932a30b94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2824-2850 | libs/agno/agno/db/mysql/mysql.py:2841-2867"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2824}}}],"partialFingerprints":{"codehealthFindingId/v1":"8afb3c29bdf9bec499069888716a33a9f023cc6dfd643d93733fcfbc55c9198a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3357-3383 | libs/agno/agno/db/sqlite/async_sqlite.py:3531-3558"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3357}}}],"partialFingerprints":{"codehealthFindingId/v1":"36a24858248988358c38186298c879b94de495f55f87e42a8fae037c3ea2a53f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:2056-2082 | libs/agno/agno/db/sqlite/sqlite.py:2013-2039"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2056}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cb7eb287651f272639780097a568719fedfa80dce9b39453a3bdce42ab29fe4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4399-4425 | libs/agno/agno/db/sqlite/sqlite.py:4281-4307"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4399}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7634e88b33ce87890995aaeec0f52c903c307675f62c04cced4efe6e1da76ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:397-423 | libs/agno/agno/db/valkey/valkey.py:514-545"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"455cc9fc7ae53b1e7d79a6094c0becccf95ace7512f3c773f7a3837fcc64b8bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:471-497 | libs/agno/agno/db/valkey/valkey.py:592-618"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"214e021552fab37d817c8d518716f1c2e87896c249d3dddc9be4f935b848aef3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 6): libs/agno/agno/db/dynamo/dynamo.py:1113-1140 | libs/agno/agno/db/firestore/firestore.py:1060-1086 | libs/agno/agno/db/gcs_json/gcs_json_db.py:750-776 | libs/agno/agno/db/in_memory/in_memory_db.py:633-658 | libs/agno/agno/db/json/json_db.py:749-775 | libs/agno/agno/db/redis/redis.py:985-1012"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1113}}}],"partialFingerprints":{"codehealthFindingId/v1":"00ae0c4f87f464a7e081e1b10dcd681773068b697cad58bd5d38f54606e896ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 4): libs/agno/agno/db/mysql/utils.py:25-51 | libs/agno/agno/db/postgres/utils.py:28-54 | libs/agno/agno/db/singlestore/utils.py:25-51 | libs/agno/agno/db/sqlite/utils.py:28-53"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/utils.py"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"d275e651712f9c0522c9db6f1d68d328f4c10c4c7a24d187cbd8869c4e413926"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:2599-2624 | libs/agno/agno/db/postgres/async_postgres.py:2538-2563 | libs/agno/agno/db/sqlite/async_sqlite.py:2722-2747"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2599}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0ebf9763218ee30086c7da8aa91b7871956998f9b44db5721d2d347369958b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:1826-1851 | libs/agno/agno/db/singlestore/singlestore.py:1860-1885 | libs/agno/agno/db/sqlite/sqlite.py:2122-2147"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1826}}}],"partialFingerprints":{"codehealthFindingId/v1":"86a0968c21ab5ac883fe6cc19b2cf19245deb826b07414fa15c5c3a29b5a7e06"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 3): libs/agno/agno/db/redis/redis.py:1450-1475 | libs/agno/agno/db/redis/redis.py:1627-1657 | libs/agno/agno/db/valkey/valkey.py:1880-1905"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1450}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16ac8ad2e01ea240a02890506495fd9833d9bb06bbc4710d2edfc9b017143c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): cookbook/07_knowledge/09_archive/custom_retriever/retriever.py:34-59 | cookbook/07_knowledge/09_archive/custom_retriever/team_retriever.py:34-59"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/09_archive/custom_retriever/retriever.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a339c6b600274e1eda5e054bbd1f9a432d9f1e430c2f81f2e07ce94ad802416c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/agent/_run.py:549-574 | libs/agno/agno/agent/_run.py:3658-3683"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"68cf20b124b7fd97cead8a8a11ac0e18bd46ad5addf7b2b2c4c3d2670ac67baf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/agent/_run.py:4662-4687 | libs/agno/agno/agent/_run.py:5153-5178"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4662}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce61719f4f1a2a6d9c96a2369f1e142ba690cf2263e7c38e499e02c9211e6506"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/client/os.py:964-989 | libs/agno/agno/client/os.py:1018-1043"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":964}}}],"partialFingerprints":{"codehealthFindingId/v1":"eadb2f6a3bd29c3db63acba15dd5f7fddc867d8f8eeae9c4f50751eb058866bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2482-2507 | libs/agno/agno/db/mysql/mysql.py:2504-2529"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2482}}}],"partialFingerprints":{"codehealthFindingId/v1":"63040955b1ed68dde2d2b55c0fcf17e3cdef9440b4c92b52da20a767eed51f42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:884-909 | libs/agno/agno/db/sqlite/sqlite.py:1135-1160"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"be319475d9f429be9de9fc6e4bbf030aaa92fd7513c94cc3406aebc9583aa7bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1921-1946 | libs/agno/agno/db/sqlite/async_sqlite.py:1932-1957"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1921}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a71f407339ed2c2649002a0b5b476014bbfb4ae0aa7152ec6a9282243a9c2f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2412-2437 | libs/agno/agno/db/postgres/postgres.py:2888-2913"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2412}}}],"partialFingerprints":{"codehealthFindingId/v1":"74d7823950f5de22ff8aec7d527a0b2f36f089f302836120bfa7f475a0a9abf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4271-4296 | libs/agno/agno/db/sqlite/sqlite.py:4153-4178"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4271}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e5a7d52ebd813533a8adf644368c02d77df087205861a11b750b33c7b5a9b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4689-4714 | libs/agno/agno/db/sqlite/sqlite.py:4536-4561"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4689}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c68949d249bbf9e4447e974d16ba855d0e06db78363d35659556677cf00bac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:778-803 | libs/agno/agno/db/valkey/valkey.py:1049-1074"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"03bfc9a985fbb584e97ecd1ac44559476def1a2caee0752997a56ebbd1ad2a56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1994-2019 | libs/agno/agno/db/sqlite/sqlite.py:2184-2209"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1994}}}],"partialFingerprints":{"codehealthFindingId/v1":"975bedc3e47d372357f8a1754644d4ab70eeb04b53f313e587df1081b8a76a1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:2602-2627 | libs/agno/agno/db/sqlite/sqlite.py:2509-2534"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2602}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ced9a7cc07fbf16cf7ef2fb614090acecf72b5247d579c230f4619735d557d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/knowledge/reader/website_reader.py:154-185 | libs/agno/agno/knowledge/reader/website_reader.py:289-314"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba5852e3387272961fd699311e88812e301d8f9a6f9d59411680f90c5a2ff2f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): libs/agno/agno/learn/stores/session_context.py:539-564 | libs/agno/agno/learn/stores/session_context.py:609-634"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a79b22dd32b82d88949c8d8442755ddcebdb03e624c976265b3ceeadd3c353b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 6): libs/agno/agno/db/dynamo/dynamo.py:661-688 | libs/agno/agno/db/firestore/firestore.py:667-694 | libs/agno/agno/db/gcs_json/gcs_json_db.py:450-477 | libs/agno/agno/db/in_memory/in_memory_db.py:344-368 | libs/agno/agno/db/json/json_db.py:435-462 | libs/agno/agno/db/redis/redis.py:649-676"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e061c6d7fe3a2ab2037cb7ff74e9ac83f4ce5928c71b931a9915b16c74b6c87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 3): libs/agno/agno/agent/_run.py:3422-3452 | libs/agno/agno/agent/_run.py:4612-4636 | libs/agno/agno/agent/_run.py:5103-5127"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3422}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee19866599184df26f1ab5771278b44e504a0b385b2fc2298a19b1065e71768"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:1048-1072 | libs/agno/agno/db/mysql/mysql.py:1036-1060 | libs/agno/agno/db/singlestore/singlestore.py:1102-1126"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1048}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b88085566f80aab84dc9925ac6a2bf5f4c84de5de2294c38ac14c20f29e6794"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py:96-120 | cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py:96-120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bd6621caa51a673b6d18222a17b88338bfbe4fe1f4b8a32d04474e0b43a02b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): cookbook/91_tools/mcp/mcp_toolbox_demo/agent.py:61-85 | cookbook/91_tools/mcp/mcp_toolbox_for_db.py:59-83"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/mcp/mcp_toolbox_demo/agent.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d286f519dfca657ad81aa7049edff01dd1699bdfe5eb5611fefb786ac157a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/agent/_hooks.py:168-192 | libs/agno/agno/agent/_hooks.py:376-401"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"e30a2270b60e3aea49affe8727a44566fee307e9317b54d0a162163df1cf966a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/agent/_run.py:1689-1714 | libs/agno/agno/agent/_run.py:4753-4777"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1689}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d86d65acaaec927d46197403c415e53fa9888dfaa51e9313b5dcb104e4e4c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/client/os.py:1259-1283 | libs/agno/agno/client/os.py:1309-1333"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2dfc5b6d73d898506383b3c2b9c0d01fceff81612e3f8af4fc73a9f5ff54552"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:2630-2654 | libs/agno/agno/db/firestore/firestore.py:2191-2215"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2630}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf66ec91e40cbd9b500990d898c35d66a097c416a6948a33d163d9b9b7fdef98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_0.py:427-451 | libs/agno/agno/db/migrations/versions/v2_5_0.py:750-774"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb5d20cfdf2f868742379d7ecbcbd521a56796ad125546c99ab9d160b2257be9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1730-1754 | libs/agno/agno/db/sqlite/async_sqlite.py:1575-1601"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"c290fa106e2a6b5ce0c39cc4bcd1564c433e6e7ca1a911ee2c924b9e0c4f3f28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:711-735 | libs/agno/agno/db/singlestore/singlestore.py:779-803"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":711}}}],"partialFingerprints":{"codehealthFindingId/v1":"72f9d185fbc75bfdd9d3c015ed2563495d5d9c21397a1a662de9b88329e2399c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/mysql/utils.py:134-158 | libs/agno/agno/db/mysql/utils.py:184-208"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/utils.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"37bd1ec91a0e960be4ab9f8d9a8ef4548862ef6d10d8b34ee01a3c1b94156069"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3167-3191 | libs/agno/agno/db/sqlite/async_sqlite.py:3337-3362"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3167}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b1e65f1bc6a249e0c332bf1ff9c4d2466091ead1fb547d4e5e202c41b4d9976"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1515-1539 | libs/agno/agno/db/valkey/valkey.py:1945-1969"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1515}}}],"partialFingerprints":{"codehealthFindingId/v1":"58184b122a58b3bf9aaca44e58d7fabf5ec5861cb74b34a6cef4cf2446b2f4e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 4): libs/agno/agno/db/migrations/versions/v2_5_0.py:365-388 | libs/agno/agno/db/migrations/versions/v2_5_0.py:497-520 | libs/agno/agno/db/migrations/versions/v2_5_0.py:686-709 | libs/agno/agno/db/migrations/versions/v2_5_0.py:816-839"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffb159fa5c4f95b2240005a801ced9419e67ccc96a7a8cf0bd66d42224e5921"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1202-1225 | libs/agno/agno/db/postgres/postgres.py:1526-1550 | libs/agno/agno/db/singlestore/singlestore.py:1255-1278 | libs/agno/agno/db/sqlite/sqlite.py:1465-1488"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1202}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef0e8ad93b221e306ec410661ade7a6ebb87f1ebb78c596043b08222586cebb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2360-2383 | libs/agno/agno/db/singlestore/singlestore.py:2369-2392 | libs/agno/agno/db/sqlite/sqlite.py:3451-3476"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2360}}}],"partialFingerprints":{"codehealthFindingId/v1":"0347253e6b820d12fb46b6ce9c00132ba0c07818284dc8d267701f8b2a3f2199"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): libs/agno/agno/db/postgres/postgres.py:1230-1253 | libs/agno/agno/db/postgres/postgres.py:1289-1312 | libs/agno/agno/db/postgres/postgres.py:1348-1371"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1230}}}],"partialFingerprints":{"codehealthFindingId/v1":"66c47806c7dffe15bb32ad4b59275760aa4106a2767edee3771877626a17694b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 3): libs/agno/agno/learn/stores/session_context.py:280-303 | libs/agno/agno/learn/stores/user_memory.py:438-461 | libs/agno/agno/learn/stores/user_profile.py:606-629"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec00e97b9c754e6eb2aa31486f1f51407799a84af3689e3be07f99f7efb09bd8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): cookbook/02_agents/12_multimodal/media_input_for_tool.py:29-65 | cookbook/03_teams/19_multimodal/media_input_for_tool.py:25-48"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/12_multimodal/media_input_for_tool.py"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"7659a0aba999d2f5baed98484c30f62e23e184db832f23ae0257603529e18bb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/agent/_run.py:493-516 | libs/agno/agno/agent/_run.py:906-929"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"00882f37cb26cc080cdbe4a13b64b192a66d496bde5a1e4ff8bdb9ea35d9ede4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/agent/_run.py:1633-1656 | libs/agno/agno/agent/_run.py:2316-2339"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1633}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30a1209c3c8d94f6229e7742be2b7f1a2198b4b2324b50a43d657dc8772468f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/context/web/exa.py:70-93 | libs/agno/agno/context/web/parallel.py:79-102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/web/exa.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"58533da4bd90af43f7dd5ec4df9a3789771ce8be675adf669e94662281fd4166"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_0.py:295-318 | libs/agno/agno/db/migrations/versions/v2_5_0.py:619-642"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca869362d0aa813ec8764ecaa4e89552ac62b49c5186d8b5cfc89fd23f1d6f5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1411-1434 | libs/agno/agno/db/singlestore/singlestore.py:1449-1472"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1411}}}],"partialFingerprints":{"codehealthFindingId/v1":"235727d357b040153c2cf7c395af05f8cf406c6030eac0a2747deb61938a975b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1659-1682 | libs/agno/agno/db/singlestore/singlestore.py:1702-1725"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1659}}}],"partialFingerprints":{"codehealthFindingId/v1":"504a5bf3ff752754d010fdcfe3eeef28b95b3f66c2d8207bd6f43a3f8dfd5deb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2211-2237 | libs/agno/agno/knowledge/knowledge.py:2284-2307"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2211}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fc3ab60bab5c52623b36f163c537ae472a8e1626c22f804d5f33148f699a57c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/knowledge/reranker/infinity.py:64-87 | libs/agno/agno/knowledge/reranker/infinity.py:136-159"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reranker/infinity.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cfa2e236a4c8587a85f327cfd8ab96266eb610f040c5a137a594a0d94c2915d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:581-606 | libs/agno/agno/learn/stores/learned_knowledge.py:1298-1321"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a1484a0bf4ee46478430636ebd07c3253ebba5836c84694225b30170dc3d76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:626-651 | libs/agno/agno/learn/stores/learned_knowledge.py:1339-1362"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eb7823e084762b95a918b9f0718bbd89fc0c6b728fd0a0598f96cb8bac882e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): libs/agno/agno/models/deepseek/deepseek.py:142-166 | libs/agno/agno/models/openai/chat.py:314-337"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/deepseek/deepseek.py"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a5165156e0c53da2027f178bcdd315d94d8b266d3a7e74885c295f80df15c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:2931-2953 | libs/agno/agno/db/postgres/async_postgres.py:2973-2995 | libs/agno/agno/db/sqlite/async_sqlite.py:3142-3164"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2931}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb0eca93d6171ed9a7fddcda3ff36f0fabfbe2787da62e86cb57d4e1d2a03d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2947-2969 | libs/agno/agno/db/postgres/postgres.py:3445-3467 | libs/agno/agno/db/singlestore/singlestore.py:2909-2931"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2947}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7fc5dae68e7a063fdb5f47b4d2c69348f4ba187fb3c518b654ebfdc489f71cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): cookbook/02_agents/18_checkpointing/01_crash_recovery.py:110-132 | cookbook/03_teams/23_checkpointing/01_crash_recovery.py:108-130"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/01_crash_recovery.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"d856f2db5877512fb94ec8c44eb75b358b03c9c1c2faf34b0fb8b2b369d29837"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/agent/_messages.py:170-192 | libs/agno/agno/agent/_messages.py:528-551"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"950aacf9c7c714743fc0b618dcd44eece4f1acb16ccf36a0f5c09a99b2d85b27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/agent/_run.py:1843-1865 | libs/agno/agno/agent/_run.py:4895-4917"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1843}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcab3da0cc04d85bdcf1cdf0c0ee8ae63d97d8b508324735e58e9af2d66ec339"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:1094-1116 | libs/agno/agno/db/firestore/firestore.py:1129-1151"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1094}}}],"partialFingerprints":{"codehealthFindingId/v1":"733a5b6fd7c760f037310a457bfdf1f49c6c92fd6666c329d721ce70b391bd91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:893-915 | libs/agno/agno/db/json/json_db.py:894-916"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3e601397dfbc2d2acbbbefbd6aec2ba5833146bb59c501d4e30c3cb50b1715"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1482-1508 | libs/agno/agno/db/json/json_db.py:1467-1489"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1482}}}],"partialFingerprints":{"codehealthFindingId/v1":"548d71079c9ecc56e3d17234935384b537e1a70b6abe349390bc61454aa0e875"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1799-1821 | libs/agno/agno/db/json/json_db.py:1775-1797"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1799}}}],"partialFingerprints":{"codehealthFindingId/v1":"5934e23a4767b388368c17754467c599a0c333e39988cbd66040ccdd1bce0ca5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1124-1146 | libs/agno/agno/db/sqlite/async_sqlite.py:1273-1295"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1124}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bb0f66b4a3cb31eb61d60d1dc58aeb6ef5d2d27b7dabbf8f8f2771eabebcbf1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:1977-2000 | libs/agno/agno/db/sqlite/sqlite.py:1935-1957"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1977}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e52f9e8d4252ad90e006001d3004fd318e96f6404f15f2ba3ee36de3f222eb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3661-3685 | libs/agno/agno/db/sqlite/sqlite.py:3563-3585"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3661}}}],"partialFingerprints":{"codehealthFindingId/v1":"6678ecc666742b55f90c8cde52fb666df0d6d09e57abd7eb5c114c72c1145af8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3825-3847 | libs/agno/agno/db/sqlite/sqlite.py:3711-3733"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3825}}}],"partialFingerprints":{"codehealthFindingId/v1":"207cd8a10ea833801a1bcb7e6f454e0ed83ac4f193c9b259b6d67d95358fc195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4476-4498 | libs/agno/agno/db/sqlite/sqlite.py:4355-4377"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4476}}}],"partialFingerprints":{"codehealthFindingId/v1":"77c427e8f36f44a2c3b1c11a511bf9faacabd0050ea604fe66565d294f9f0e01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/postgres/utils.py:204-226 | libs/agno/agno/db/postgres/utils.py:237-259"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/utils.py"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"f232efdcfed5e439d9e40ae38cc5d25ca4dcf22160481c0bce4e2bbdaa959985"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1042-1064 | libs/agno/agno/db/valkey/valkey.py:1389-1411"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1042}}}],"partialFingerprints":{"codehealthFindingId/v1":"01cadd3936372a4a447600b702407dfcccf8b4c0b0b0a75ef8fc990ff0371bfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:2147-2169 | libs/agno/agno/db/valkey/valkey.py:2509-2531"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":2147}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0745fe633917d31f788bfb35067f5a5092fad803b1730b2e3aec4aebe00d8a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/db/sqlite/utils.py:178-200 | libs/agno/agno/db/sqlite/utils.py:211-233"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/utils.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec39724519992b7f240cefa64ca2bf7bfc87bbf0efbc21c517121558080b6fd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:654-676 | libs/agno/agno/eval/accuracy.py:777-799"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"0112d7e08479a8d1a372b78f700b0f205761153f4ac0e462cbe22b0905469029"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/guardrails/openai.py:73-95 | libs/agno/agno/guardrails/openai.py:119-141"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/guardrails/openai.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0663abe90f362b4a27a822af7389720fb7e8651b580eff7f6e7d52cab2d8755"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/models/base.py:2278-2300 | libs/agno/agno/models/base.py:2959-2981"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2278}}}],"partialFingerprints":{"codehealthFindingId/v1":"dff47839ee163a92b270d0135930e06909c0b5d5c12be9f1fbd2b8cc6adeb6e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:434-456 | libs/agno/agno/os/routers/teams/router.py:304-326"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ae751695067f3bf026369b9e0510dfcbca8d37d7d75dcadc5c66c3cc83bc73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2033-2054 | libs/agno/agno/db/postgres/postgres.py:2390-2411 | libs/agno/agno/db/singlestore/singlestore.py:2039-2060 | libs/agno/agno/db/sqlite/sqlite.py:2306-2327"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2033}}}],"partialFingerprints":{"codehealthFindingId/v1":"65488566896c5d97539bf2a6d955441d904c97d788631f4539e37c4aff4c6943"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): cookbook/03_teams/14_run_control/background_execution.py:45-66 | cookbook/03_teams/14_run_control/background_execution.py:112-133"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/14_run_control/background_execution.py"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"199c72c410397cd1192172b0a3b0aa5b68361fcb19e5b9eff10992a5448a307b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): cookbook/10_reasoning/teams/finance_team_chain_of_thought.py:25-46 | cookbook/10_reasoning/teams/reasoning_finance_team.py:26-47"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/teams/finance_team_chain_of_thought.py"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"e37b6151915420d015aa3a614249dd9298454006110a4caa32ccc11d4da62e39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/agent/_run.py:2398-2419 | libs/agno/agno/agent/_run.py:5281-5302"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2398}}}],"partialFingerprints":{"codehealthFindingId/v1":"786f411d45853346a6d45be66e86831855bc4e2d88d53041bc0c9272e21c6ce3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/agent/_run.py:2652-2673 | libs/agno/agno/agent/_run.py:5506-5528"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2652}}}],"partialFingerprints":{"codehealthFindingId/v1":"c99baf8dc69b980029614123fae5df80120d49bc1df6504b5b44906b35f6ec7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/agent/_run.py:2694-2715 | libs/agno/agno/agent/_run.py:5555-5576"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2694}}}],"partialFingerprints":{"codehealthFindingId/v1":"eed40840f80dd3ebddd7296b0c65d12a784df73607a89c822a0d57a627983610"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:166-187 | libs/agno/agno/db/json/json_db.py:148-169"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"362bca3e20671241760593c12811f132f04b47a2856894d2a53104d28ceff7fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/db/json/json_db.py:1660-1681 | libs/agno/agno/db/redis/redis.py:2033-2054"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"c65e653c1e06504e2ef013caac3ccd693ddd9a47a575feca4e71c03b05c8f29f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/knowledge/loaders/github.py:343-364 | libs/agno/agno/knowledge/loaders/github.py:499-520"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"854fd73df9ce30ffa15092ed797ae88f8e50fccd224a28cb0b146208fa5b3548"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/models/base.py:2379-2400 | libs/agno/agno/models/base.py:2585-2606"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2379}}}],"partialFingerprints":{"codehealthFindingId/v1":"823b296e08cfbd5878495dcdb4a5532f427bd8f52e657d4ed403304309b20a2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): libs/agno/agno/models/cerebras/cerebras.py:76-97 | libs/agno/agno/models/meta/llama.py:73-94"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"53fe312bfb23eeb3d31b96c7606faf4f8acebc4c7e3c890465019ba44d406c99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 8): libs/agno/agno/models/dashscope/dashscope.py:43-66 | libs/agno/agno/models/deepseek/deepseek.py:113-137 | libs/agno/agno/models/groq/groq.py:73-93 | libs/agno/agno/models/minimax/minimax.py:38-61 | libs/agno/agno/models/moonshot/moonshot.py:105-129 | libs/agno/agno/models/n1n/n1n.py:31-55 | libs/agno/agno/models/openai/chat.py:106-129 | libs/agno/agno/models/openai/responses.py:129-152"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/dashscope/dashscope.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"169baefa2fdf9ffac9194327cb94fa5920644825acdee52dc5cf85c230a0c7ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1101-1121 | libs/agno/agno/db/postgres/postgres.py:1403-1424 | libs/agno/agno/db/singlestore/singlestore.py:1159-1179 | libs/agno/agno/db/sqlite/sqlite.py:1361-1381"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"82349b0f538de288b03702dd76f085a770aed3ec1975ebd2e1281f129d61ad3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/agent/_messages.py:1308-1328 | libs/agno/agno/agent/_messages.py:1514-1534"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1308}}}],"partialFingerprints":{"codehealthFindingId/v1":"37a0efcfdd500849c0d37748159484dd657c0453f30aededf0432cb12d8a9302"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/client/os.py:674-695 | libs/agno/agno/client/os.py:717-737"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"f496f954cb9a3268beedd40c2ea02321d8a32e2629d90da510aa1c92e5b96a67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1770-1790 | libs/agno/agno/db/json/json_db.py:1746-1766"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1770}}}],"partialFingerprints":{"codehealthFindingId/v1":"d81ce2fe0fa4b470899c49d71c35c6a0613da7086b109f8881132f3ed9b49b52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:770-790 | libs/agno/agno/db/json/json_db.py:897-917"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":770}}}],"partialFingerprints":{"codehealthFindingId/v1":"664a37fcb0bd97c2cb4a72eb84fdb4af77d1e2c649e85f3a608d43b741c2872e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/migrations/manager.py:43-63 | libs/agno/agno/db/migrations/manager.py:136-156"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/manager.py"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f947d502eea4644ce97f685d8f7533ede991200da8b07b83efe243af8f41804"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_3_0.py:317-337 | libs/agno/agno/db/migrations/versions/v2_3_0.py:830-850"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8fb71aa587a5549966027dfada8c1692ce443e5cbe7668963215224c5f1a82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_3_0.py:528-548 | libs/agno/agno/db/migrations/versions/v2_3_0.py:745-765"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":528}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d24df9c81d4f5ecb3084252213c55f10ce1ad2f48fa380a43a16e0c2c31dedc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_6.py:358-378 | libs/agno/agno/db/migrations/versions/v2_5_6.py:679-699"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_6.py"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ae1cee9911d4e8887c3266a8c42f8d4a20f9bbfbbe69be13e1ded916bc8ead6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1730-1750 | libs/agno/agno/db/singlestore/singlestore.py:1769-1789"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bfc232f0dadf2d429757aeb6e233b9d6a78456a3a1c01409a510baafba579df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/mysql/utils.py:463-484 | libs/agno/agno/db/postgres/utils.py:162-182"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/utils.py"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"08c681185236582690132d0ebf9d34b314608224b236e2f74d4f2e3fc70eec1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:551-571 | libs/agno/agno/db/sqlite/async_sqlite.py:535-555"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb54f742169d915eb2b710d3c9e9ef1e190a222d1a6be7aa51320d69c48b2374"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4342-4362 | libs/agno/agno/db/sqlite/sqlite.py:4224-4244"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4342}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf0190fab5602b43655c16eb52d1189e05bee2034042ff050a91dce804d1f631"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:686-709 | libs/agno/agno/db/valkey/valkey.py:930-950"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"894535d3cd69acd65dce578b20ce11359d481ab4f34ed62c37ce3c81b18f0952"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1181-1201 | libs/agno/agno/db/valkey/valkey.py:1536-1559"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1181}}}],"partialFingerprints":{"codehealthFindingId/v1":"f34372c8e10015c815eeab874065446378adb8b1cdec6f31a1441c3bd6f4e3d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1331-1351 | libs/agno/agno/db/valkey/valkey.py:1726-1746"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"169d21506f4304242aabd5b4ea4faebd671f07043b1b9f4aadd9106b5e950cb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:396-416 | libs/agno/agno/eval/accuracy.py:542-562"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"e794b033065d10dc81f26c1b48a54788e336ca11871ba074bb6f03a93b3e726b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/knowledge/loaders/gcs.py:92-115 | libs/agno/agno/knowledge/loaders/gcs.py:186-206"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/gcs.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"6775c47afd6654320dad8f0a113c87d9605eff832004525d792a1cd4977930df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/knowledge/remote_content/s3.py:68-88 | libs/agno/agno/knowledge/remote_content/s3.py:243-263"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/remote_content/s3.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"78fafe08fd5336221ec7c1b0c667fa81041c12484632349a626be56ac14b655b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1327-1347 | libs/agno/agno/learn/stores/entity_memory.py:1372-1392"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1327}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f313436ca3d8b9a921704c5b1168ed44ec01e7cb2261089adace1d395b3e104"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:769-789 | libs/agno/agno/learn/stores/user_profile.py:857-877"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":769}}}],"partialFingerprints":{"codehealthFindingId/v1":"104d905a4da3ed383a28c7e61e2c4bf4436ad0517703fc3cf37014176fc0456c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/models/base.py:804-824 | libs/agno/agno/models/base.py:1025-1045"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c72fef3c089b86999d77185265a783f21c6ad06fd670e5c15c0bd09326ac890"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/models/base.py:1050-1070 | libs/agno/agno/models/base.py:1835-1855"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1050}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb6caca1880e666b1d89280491a835563cb8183bca1b3dbaa72b356888f0b45c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/models/base.py:1375-1395 | libs/agno/agno/models/base.py:1654-1674"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"d15e480aa0bb120c2faa7574de82ab959d82cc4f1b9b51191823b67a588e8b8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/models/base.py:1580-1600 | libs/agno/agno/models/base.py:1859-1879"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1580}}}],"partialFingerprints":{"codehealthFindingId/v1":"c10ceb7c9e0c2f25909eb4b04b6bf7254b3531c857574834bd738f7d66537ce4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/os/app.py:572-592 | libs/agno/agno/os/app.py:1108-1128"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d1b52e9e4bf44a09f4dbf3c6f0584b9891dbad151c055d51ded3b08c78990ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:804-824 | libs/agno/agno/os/routers/teams/router.py:783-803"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"b122f8f36927bf473ddc0435bd084188201f9547b001815e1015b7ed02e7f039"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 7): libs/agno/agno/db/mongo/mongo.py:2075-2094 | libs/agno/agno/db/mysql/async_mysql.py:2398-2417 | libs/agno/agno/db/mysql/mysql.py:2420-2439 | libs/agno/agno/db/postgres/async_postgres.py:2328-2347 | libs/agno/agno/db/postgres/postgres.py:2804-2823 | libs/agno/agno/db/sqlite/async_sqlite.py:2291-2310 | libs/agno/agno/db/sqlite/sqlite.py:3235-3254"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2075}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf4c10cda81c562151f6743c1645dbd91b5ce6a9c5a73c6506dab7d4f4b5143"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1622-1641 | libs/agno/agno/db/postgres/postgres.py:1942-1961 | libs/agno/agno/db/singlestore/singlestore.py:1665-1684 | libs/agno/agno/db/sqlite/sqlite.py:1901-1920"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1622}}}],"partialFingerprints":{"codehealthFindingId/v1":"649724320ca5a709ef106a6ee6e38108fc54a87e4922b3e7d60fe1db72d971d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 3): libs/agno/agno/db/migrations/versions/v2_5_6.py:215-234 | libs/agno/agno/db/migrations/versions/v2_5_6.py:311-330 | libs/agno/agno/db/migrations/versions/v2_5_6.py:410-429"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_6.py"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"29c60f30fa7c0cdd6850fab4892f23ec1b7a2a537304b0a6590145cc803ab80f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2166-2185 | libs/agno/agno/db/singlestore/singlestore.py:2172-2191 | libs/agno/agno/db/sqlite/sqlite.py:2438-2460"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2166}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2c4f7548bbfd0fd5d806aa5b9b21ae19ec3ecb4cb80b14cdd08a6d84337ba4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2537-2556 | libs/agno/agno/db/singlestore/singlestore.py:2488-2507 | libs/agno/agno/db/sqlite/sqlite.py:2542-2561"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2537}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4d15ab8efbabba6df446f49ad2e539476ba428fdf0b84770e0e39ee4210104"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 3): libs/agno/agno/eval/agent_as_judge.py:535-554 | libs/agno/agno/eval/agent_as_judge.py:638-658 | libs/agno/agno/eval/agent_as_judge.py:712-731"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b7902b6362048caf81445299155fd7e43e1111cfa609c42e1de43a21f6857a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): cookbook/02_agents/08_guardrails/pii_detection.py:28-47 | cookbook/02_agents/08_guardrails/prompt_injection.py:26-45"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/08_guardrails/pii_detection.py"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"630652cd6226721e0690e10085cd46ad8d0edfa17c4e94aa227e2e91fea963f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py:47-66 | cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py:50-69"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"45a41a39dd63a2516eb1c16e9c43f84d55165969c9d2942e1b5ecb1f6e5db0df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_response.py:258-277 | libs/agno/agno/agent/_response.py:305-324"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"8be8d729f20d2ea3a8526112cdaa63f23ef3c07d7206c1c2161d2ddd61e7c7ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_response.py:389-408 | libs/agno/agno/agent/_response.py:437-456"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"668ad0abe8292da19f7c92068d64089edf95b015d0797843f9d2ee356cd086a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_response.py:635-654 | libs/agno/agno/agent/_response.py:716-735"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3fd3b63be2b7afcb0cf1af0507fa62de281254d84ce9d5194888da76b259e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_response.py:1127-1146 | libs/agno/agno/agent/_response.py:1289-1308"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1127}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e30bc7e2fe810157687e26c218adb65b411ddeccf4ea92a5ae85cb7124d42c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_response.py:1185-1204 | libs/agno/agno/agent/_response.py:1347-1366"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8d31809567130fb81b7d474b1f75536ca1c2bf7cc385c2e3e52e157a263e363"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_run.py:1171-1190 | libs/agno/agno/agent/_run.py:1225-1244"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1171}}}],"partialFingerprints":{"codehealthFindingId/v1":"34991275e51c374afc10fa1b27e8b02cb7b86745b9c3867eefb57396b624c820"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_run.py:2583-2602 | libs/agno/agno/agent/_run.py:5433-5452"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2583}}}],"partialFingerprints":{"codehealthFindingId/v1":"03a9f474bae584bea3a7c03e4c7431b62039d630ebc881407318cd8c60d28990"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/agent/_run.py:4549-4568 | libs/agno/agno/agent/_run.py:5035-5054"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4549}}}],"partialFingerprints":{"codehealthFindingId/v1":"bddb1c12ab96737841f2871d58f65b8cee129dec201e1931f1b09a054fc8a76d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:1220-1243 | libs/agno/agno/db/sqlite/sqlite.py:1966-1985"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffcfbe8801b47c897519844ff6f524a473930bbb77dbbeeffbafbf99d5487668"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1390-1409 | libs/agno/agno/db/json/json_db.py:1375-1394"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1390}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa4485b594623408895a6d83f9dd2f3cc872cc0863a43f3c5ff321ebddd25c90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_3_0.py:797-817 | libs/agno/agno/db/migrations/versions/v2_3_0.py:952-971"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"90a65f0465cc017e3a33864fb1df2c9708d7b48eca21e940aea04ea1d6a6b4ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_0.py:19-39 | libs/agno/agno/db/migrations/versions/v2_5_6.py:19-38"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"82da5c02dca17ccd328a7b1e35d547acf8451e90b959fb0a53bdd64a62e126a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_0.py:77-96 | libs/agno/agno/db/migrations/versions/v2_5_6.py:75-94"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"b708e18e432af1b88f463a91e0d78162aed77357e434b2bdca644a04fdc2a3bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1766-1785 | libs/agno/agno/db/mongo/mongo.py:1549-1568"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1766}}}],"partialFingerprints":{"codehealthFindingId/v1":"af186c3db3ecb8c3dc8fff4d1597decf0fe7cca28ca7724488f59200b5249756"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2982-3001 | libs/agno/agno/db/mongo/mongo.py:2821-2840"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2982}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d87ed6012a19ebea5d512406dbf040fa06333ed7f80c67fb1edd394613a4518"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1840-1859 | libs/agno/agno/db/postgres/async_postgres.py:1704-1723"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1840}}}],"partialFingerprints":{"codehealthFindingId/v1":"4acc6cea222b2623994d08bd70022282695f2f559186f3d4675bec82e757582c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2515-2534 | libs/agno/agno/db/sqlite/async_sqlite.py:2635-2654"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2515}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7aa04f1db4fa1d92113bba4336fd65d78e964fd4f6d4566e86c02e8a5370ebd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:128-147 | libs/agno/agno/knowledge/knowledge.py:196-215"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa465e903c3914a1baebce621e232e13ed1c60e656cfbec7195c6533b774cfbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:833-852 | libs/agno/agno/learn/stores/user_profile.py:918-937"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fd0345141b01ebc9e9b0abdc779137dac8bd261b00ca4f119b62019a2d324b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/memory/manager.py:1470-1489 | libs/agno/agno/memory/manager.py:1515-1534"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1470}}}],"partialFingerprints":{"codehealthFindingId/v1":"6de88b81a4f1f7bb79dcecd8d3e2ee05698381df6904c0258dd26c6fdd929c72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/models/base.py:662-689 | libs/agno/agno/models/base.py:893-912"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"767c00b67505b7a3e5e0b4255b8ba4781aa468744a9272cfdc4488f8d8b50eb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:1216-1235 | libs/agno/agno/models/google/gemini.py:1366-1386"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1216}}}],"partialFingerprints":{"codehealthFindingId/v1":"4570d3d611a148d9a805c2771d93a1070c67611d992b5337b929822112047b1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:1393-1412 | libs/agno/agno/os/routers/agents/router.py:1670-1689"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1393}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8abd8639e4ad4274473b0517d103117875d7de0a4fb2379fddeb5c0cc89b1e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 12): libs/agno/agno/db/migrations/versions/v2_5_0.py:247-266 | libs/agno/agno/db/migrations/versions/v2_5_0.py:363-382 | libs/agno/agno/db/migrations/versions/v2_5_0.py:495-514 | libs/agno/agno/db/migrations/versions/v2_5_0.py:562-580 | libs/agno/agno/db/migrations/versions/v2_5_0.py:685-703 | libs/agno/agno/db/migrations/versions/v2_5_0.py:815-833 | libs/agno/agno/db/migrations/versions/v2_5_6.py:215-234 | libs/agno/agno/db/migrations/versions/v2_5_6.py:311-330 | libs/agno/agno/db/migrations/versions/v2_5_6.py:410-429 | libs/agno/agno/db/migrations/versions/v2_5_6.py:549-567 | libs/agno/agno/db/migrations/versions/v2_5_6.py:636-654 | libs/agno/agno/db/migrations/versions/v2_5_6.py:724-742"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"8abb8800387b8be270a9d62110fcbfcae4b96b02a6c2d92d8628443746eaf076"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:430-451 | libs/agno/agno/db/postgres/postgres.py:738-759 | libs/agno/agno/db/singlestore/singlestore.py:495-516 | libs/agno/agno/db/sqlite/sqlite.py:730-748"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8f5541ce471897de36ed3de7034609a3d533e57937a498ffdfbb2f2420a303d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1387-1405 | libs/agno/agno/db/postgres/postgres.py:1715-1733 | libs/agno/agno/db/singlestore/singlestore.py:1425-1443 | libs/agno/agno/db/sqlite/sqlite.py:1638-1656"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1387}}}],"partialFingerprints":{"codehealthFindingId/v1":"a25dfc1b929683b869a69ea5e4a18718bb7bf767029bb514134236333abfb46a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/02_agents/14_advanced/cancel_run.py:149-171 | cookbook/04_workflows/06_advanced_concepts/run_control/cancel_run.py:161-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/cancel_run.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"bea1cff3593c4ecaa19ed707bb17d32519dd3c6f0b8a8821f4a61c7db7e68683"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/02_agents/18_checkpointing/03_checkpoint_endpoints.py:91-111 | cookbook/03_teams/23_checkpointing/03_checkpoint_endpoints.py:96-114"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/03_checkpoint_endpoints.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ab36c596563870421ead5cd9cc996c9761c41e859c4fec261c65e57d19f0dfb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/previous_step_outputs/access_previous_outputs.py:66-84 | cookbook/04_workflows/06_advanced_concepts/previous_step_outputs/access_previous_outputs.py:106-124"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/previous_step_outputs/access_previous_outputs.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"6233c5419b875921b605a172c6a86dce1e90f4f210aee9e9968f1f9a82ac9dfb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py:143-161 | cookbook/04_workflows/08_human_in_the_loop/loop/02_loop_confirmation_streaming.py:132-150"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2dc3c1eb18e10bdf7886542b0230a5caa2a0307848d43e230d9ec3f4bc719f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/05_agent_os/04_run_lifecycle/background_run.py:88-106 | cookbook/05_agent_os/04_run_lifecycle/cancel_run.py:85-106"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/04_run_lifecycle/background_run.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"af45492ed3e7859c1662206b4a24960ea95ac1b8cc643024a9553870e8c16b8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): cookbook/12_context/15a_wiki_notion.py:103-128 | cookbook/12_context/16_wiki_with_web.py:71-89"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/12_context/15a_wiki_notion.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"57d04e351682d49d88471e06f5c7c027d7af0e4b3d130afec30dcf3158472caa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_messages.py:452-470 | libs/agno/agno/agent/_messages.py:819-837"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"6874c18f3ed4af350f8142c5fefa39b616aae92cf7403453d3ad30b50171fe0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_messages.py:881-899 | libs/agno/agno/agent/_messages.py:1046-1064"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2116f430428ad23eefeb11d8a1f30b865328061222e8a18a54a9522936af42b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:1020-1038 | libs/agno/agno/agent/_run.py:3898-3916"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"69734e743a8129951783aacc53561020779e21071974f3ed0cf96dabdd97e7cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:1129-1147 | libs/agno/agno/agent/_run.py:2534-2552"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb95b67cdca58f9034e5e590f1fdb0fd744c5870b6ffd66ea91d00a11385655"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:1376-1394 | libs/agno/agno/agent/_run.py:2829-2847"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1376}}}],"partialFingerprints":{"codehealthFindingId/v1":"a810f8adec7c1c0e640fe44a8998af9abb31430daf0de52d378adade19e6e5e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:1746-1764 | libs/agno/agno/agent/_run.py:4802-4820"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1746}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd17347e29db513488ca8982636b5a6250d46c8adc044308da9837ce7c1682ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:1782-1800 | libs/agno/agno/agent/_run.py:4828-4847"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1782}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6ba190a1d8a1650a1e431351f4da14489f5a6a9ba8a71f97052d50bf40ecf14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:2472-2490 | libs/agno/agno/agent/_run.py:5340-5358"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2472}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b40e703b3df49443f879c7687853dc865b100398edfc0b4d03a7fbc3658901"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:2617-2636 | libs/agno/agno/agent/_run.py:5470-5488"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2617}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea481c18b5de6eb7c612a0e80f60c1235a59fc7374adb3465b6cb2b36e218b2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_run.py:3979-3997 | libs/agno/agno/agent/_run.py:5388-5406"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3979}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f75904f0016d410d5c5c7c0b71499c4657dd9fcf89cc26065c0f95dac615b66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/agent/_storage.py:328-346 | libs/agno/agno/agent/_storage.py:393-411"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"8017381185dfc30e7a8bf9d802497f77049b64e3d8186a92045e1ed27c50912b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:3430-3453 | libs/agno/agno/db/mongo/mongo.py:3195-3213"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":3430}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ff14a59e429b9f997c6fa599290e1b22352cd66826128507e901346edd7e40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1612-1630 | libs/agno/agno/db/postgres/async_postgres.py:1553-1571"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1612}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dece848dc3e75c4cca2f4825d1e4e7b6628370abf8162c868caa5b62f710efa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1791-1809 | libs/agno/agno/db/sqlite/sqlite.py:2086-2104"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1791}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a3e432cf6e1e7677b9956b1de15eef84a39cc4b35159fdf06ef24388e989625"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1957-1975 | libs/agno/agno/db/singlestore/singlestore.py:1959-1977"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1957}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7d3e881eae9bd7d553368e0b7682ef3ba2800834b6188f433179f6d4bc0866e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4095-4113 | libs/agno/agno/db/sqlite/async_sqlite.py:4212-4230"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4095}}}],"partialFingerprints":{"codehealthFindingId/v1":"918823149cec17c72fbf74253f4eb03204797f5e8808ae47b6633697ff3bd55b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4950-4970 | libs/agno/agno/db/sqlite/sqlite.py:4797-4815"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4950}}}],"partialFingerprints":{"codehealthFindingId/v1":"7741c94e745639362daaa0ed931efd8b2ae011bf73879ac7e301d9779f23429c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1736-1754 | libs/agno/agno/db/valkey/valkey.py:2026-2044"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1736}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae3d78f03d4e74896670810dc46b0c6be259ea8f72acfc635c29f2f24bc9d3ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/db/valkey/valkey.py:398-417 | libs/agno/agno/db/valkey/valkey.py:1778-1796"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dafce531564b45363f1fe7ead9f059fe6630cea06c967b144243f0dacb2a81a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/eval/performance.py:503-521 | libs/agno/agno/eval/performance.py:647-666"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":503}}}],"partialFingerprints":{"codehealthFindingId/v1":"053e02145a8b730deddff5c4839a0cfd749f96c1646a21121b2b24c6e70b9293"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/models/base.py:1422-1440 | libs/agno/agno/models/base.py:1701-1719"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1422}}}],"partialFingerprints":{"codehealthFindingId/v1":"5250c911529e805dd173ee3b476ef99e5e910cd709dd13ecc34dceef77c63855"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): libs/agno/agno/os/router.py:512-530 | libs/agno/agno/os/router.py:603-622"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/router.py"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"f07aad36199374ad9dc4d5b11cb398019c8b4816a7470706806d1d7de342415b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 12): libs/agno/agno/db/dynamo/utils.py:669-687 | libs/agno/agno/db/firestore/utils.py:339-356 | libs/agno/agno/db/gcs_json/utils.py:188-205 | libs/agno/agno/db/in_memory/utils.py:190-207 | libs/agno/agno/db/json/utils.py:190-207 | libs/agno/agno/db/mongo/utils.py:223-241 | libs/agno/agno/db/mysql/utils.py:369-386 | libs/agno/agno/db/postgres/utils.py:405-422 | libs/agno/agno/db/redis/utils.py:310-327 | libs/agno/agno/db/singlestore/utils.py:342-359 | libs/agno/agno/db/sqlite/utils.py:385-403 | libs/agno/agno/db/surrealdb/utils.py:99-116"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/utils.py"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"c32a50d0430cf2c5dbe0592b948a9e3c6ab2ae24bd1541d731bcc16d45f9c89b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 8): libs/agno/agno/db/postgres/async_postgres.py:2654-2671 | libs/agno/agno/db/postgres/async_postgres.py:2805-2822 | libs/agno/agno/db/postgres/postgres.py:3130-3147 | libs/agno/agno/db/postgres/postgres.py:3279-3296 | libs/agno/agno/db/sqlite/async_sqlite.py:2839-2856 | libs/agno/agno/db/sqlite/async_sqlite.py:2992-3009 | libs/agno/agno/db/sqlite/sqlite.py:2750-2767 | libs/agno/agno/db/sqlite/sqlite.py:2902-2919"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2654}}}],"partialFingerprints":{"codehealthFindingId/v1":"e62757f41827203861dedbb44caf686d321482fe1817daeee411f0bb689c3176"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 7): libs/agno/agno/db/dynamo/dynamo.py:2220-2237 | libs/agno/agno/db/firestore/firestore.py:1915-1932 | libs/agno/agno/db/gcs_json/gcs_json_db.py:1411-1428 | libs/agno/agno/db/json/json_db.py:1396-1413 | libs/agno/agno/db/redis/redis.py:1741-1758 | libs/agno/agno/db/surrealdb/surrealdb.py:1486-1503 | libs/agno/agno/db/valkey/valkey.py:2031-2048"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2220}}}],"partialFingerprints":{"codehealthFindingId/v1":"abcebf857aed2eee9155ff29c0bda89c2163c3224300025bcf6097c05f33a527"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 6): libs/agno/agno/db/mysql/async_mysql.py:2453-2470 | libs/agno/agno/db/mysql/mysql.py:2475-2492 | libs/agno/agno/db/postgres/async_postgres.py:2383-2400 | libs/agno/agno/db/postgres/postgres.py:2859-2876 | libs/agno/agno/db/singlestore/singlestore.py:2426-2443 | libs/agno/agno/db/sqlite/async_sqlite.py:2573-2590"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2453}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7e151828c324e08c9f5d9c302cbbe5dae5cc0a773e8d1ece6cb52029d2dda8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): libs/agno/agno/agent/_run.py:416-433 | libs/agno/agno/agent/_run.py:828-845 | libs/agno/agno/agent/_run.py:1552-1569 | libs/agno/agno/agent/_run.py:2234-2251"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"d98f64bec9f08d1babf7e3b2e98773cad0454376bfbe36b0ccdafbad7543dff7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): libs/agno/agno/db/firestore/firestore.py:1418-1435 | libs/agno/agno/db/mongo/mongo.py:1622-1640 | libs/agno/agno/db/mysql/mysql.py:1687-1705 | libs/agno/agno/db/postgres/postgres.py:2009-2028"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1418}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ee847acf11012ddaf52092887bf46314379eecd2902ebab20f0190964ad56b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:465-482 | libs/agno/agno/db/postgres/postgres.py:775-792 | libs/agno/agno/db/singlestore/singlestore.py:530-547 | libs/agno/agno/db/sqlite/sqlite.py:762-779"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a891a839fef53082e4362099c354e01fdd48ca987d1b2881e3bea0e7562ee4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:117-134 | libs/agno/agno/db/postgres/postgres.py:176-193 | libs/agno/agno/db/sqlite/async_sqlite.py:114-131 | libs/agno/agno/db/sqlite/sqlite.py:147-164"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bae9069f91c45dcaf1498a7d249f3da9f6be89065f532e4481fae886db682fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): libs/agno/agno/models/aws/bedrock.py:507-524 | libs/agno/agno/models/aws/bedrock.py:553-570 | libs/agno/agno/models/aws/bedrock.py:603-620 | libs/agno/agno/models/aws/bedrock.py:652-669"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"997bc31e89462a2993006e328691d40ddf49e1d72c68c048eb8b97a6cf6fcfdc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/gcs_json/gcs_json_db.py:635-652 | libs/agno/agno/db/gcs_json/gcs_json_db.py:1305-1322 | libs/agno/agno/db/json/json_db.py:634-651"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"f815521ab0e7961a971d184c6e52bd33336b40e2296b4a87bd647708d05ebaca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/migrations/versions/v2_5_0.py:580-597 | libs/agno/agno/db/migrations/versions/v2_5_0.py:710-728 | libs/agno/agno/db/migrations/versions/v2_5_0.py:840-858"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_0.py"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"0147a5e790856f69fbc558bb6074393cb02d5d24a8c571f533c6ee2e7ebafa9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/mongo/async_mongo.py:1841-1858 | libs/agno/agno/db/mysql/async_mysql.py:1903-1921 | libs/agno/agno/db/postgres/async_postgres.py:1772-1790"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fbd1dc917c8708836b62f5a14d8a35a426e1d7eef8c9bf7129075dcfc6551f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:2898-2915 | libs/agno/agno/db/postgres/async_postgres.py:2940-2957 | libs/agno/agno/db/sqlite/async_sqlite.py:3109-3126"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2898}}}],"partialFingerprints":{"codehealthFindingId/v1":"9602c9fba3c66f33c8f1b3a0b63d835ee2fac3d57d394dae80fa24a6c6999fc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:325-342 | libs/agno/agno/db/postgres/postgres.py:555-572 | libs/agno/agno/db/singlestore/singlestore.py:381-398"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"952544aec61d9baee34161a6ccf32e83a37b6d5fa755d41493af7b38ee9a79fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2915-2932 | libs/agno/agno/db/postgres/postgres.py:3413-3430 | libs/agno/agno/db/singlestore/singlestore.py:2877-2894"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2915}}}],"partialFingerprints":{"codehealthFindingId/v1":"1803af4502a226a58aaaadbb4dccb3dd8a31359dd9292e3ec96787631922dfe0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): libs/agno/agno/learn/stores/session_context.py:622-643 | libs/agno/agno/learn/stores/user_memory.py:838-855 | libs/agno/agno/learn/stores/user_profile.py:923-940"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5c649dd10f17ab7fb54f6e359f88391ca3e955ac9465ba50347a7e5f1ac99df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): cookbook/02_agents/14_advanced/background_execution.py:99-118 | cookbook/03_teams/14_run_control/background_execution.py:128-145"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/background_execution.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9f6cb619f7fc88203e084c90b4e690eb1bc87fc90d6d92cf37719c91942636e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): cookbook/03_teams/15_distributed_rag/01_distributed_rag_pgvector.py:145-162 | cookbook/03_teams/15_distributed_rag/01_distributed_rag_pgvector.py:166-189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/15_distributed_rag/01_distributed_rag_pgvector.py"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea249dd8aee2e7dd2835f1d9af26296345e9e105f3b2b6acac6a5f2fbc8e25a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_response.py:1059-1076 | libs/agno/agno/agent/_response.py:1219-1236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"e59f5df71780ac4c587b879dea912b9e0b6c6609b92b65f23114cb797cedd323"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_run.py:1329-1346 | libs/agno/agno/agent/_run.py:2775-2792"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1329}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbca182bdf17f0fd0d89babee21ca1d16ccfdf317ef0a5ee360abccc446f4f21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_run.py:1357-1374 | libs/agno/agno/agent/_run.py:2803-2822"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1357}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ce79725272b4fa6f9eeff235adda52ddb8450d76a74a958276ea501002c9f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_run.py:2094-2111 | libs/agno/agno/agent/_run.py:4419-4436"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2094}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab2bdcd43d528af7bd03f74537cfe29ad869da4fb118c7ffd4b8ec2a036035b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_tools.py:178-195 | libs/agno/agno/agent/_tools.py:311-328"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"777fcc0040ccad8e6dee5030fd6a92453c76d34f7b1feb35fb263ec28f38e3fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/agent/_tools.py:691-708 | libs/agno/agno/agent/_tools.py:805-822"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"79774d8f0e8db0e58b95ca33de5ba638569229f17225164343365bdcc7fc5d47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:243-260 | libs/agno/agno/db/firestore/firestore.py:318-341"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b998e00da1df34b38d837623118f1edf92f96cda8a8a638f65f6a7b4a5e8451"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:201-218 | libs/agno/agno/db/json/json_db.py:183-200"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c1a29cb1126b989c9d1e28e1f111f766a730839bdabe50e36bdc5154d930de9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1088-1105 | libs/agno/agno/db/mongo/mongo.py:876-893"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"349f23bf63b4cb0f44ca1d4054e65d9b868c546149e5a347e47dbfaab0f02fa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1351-1371 | libs/agno/agno/db/mongo/async_mongo.py:3442-3459"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1351}}}],"partialFingerprints":{"codehealthFindingId/v1":"9863c2756cd3c149741a4b0f887a750369c53aee3a1c4975c5893316bd6135b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:334-351 | libs/agno/agno/db/postgres/async_postgres.py:388-405"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8273d6b9ee952cf472a538dea487d831cfc29a8ff7b840d90b313f69fce2a45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1090-1107 | libs/agno/agno/db/mysql/mysql.py:1077-1094"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"32c680580c7112f5b3e4f7d146de2e1accba99b6fc7dcd0c5d63d371ee2ad70f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/mysql/utils.py:99-118 | libs/agno/agno/db/postgres/utils.py:130-147"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/utils.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e843b5d6e4d4a80130358e41ada6d35a260cfeb85d869b0ab6db42b793a7016"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:588-605 | libs/agno/agno/db/sqlite/async_sqlite.py:570-587"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"f07e766e7ff578acba34f1c74a08d578b78419fa861a939b0567781690608529"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:371-389 | libs/agno/agno/db/sqlite/sqlite.py:367-384"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f82a076e056a3ebb97f5561cd55a9b724f610dcbecb34d0313c38d023d7b21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4037-4054 | libs/agno/agno/db/sqlite/sqlite.py:3923-3940"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4037}}}],"partialFingerprints":{"codehealthFindingId/v1":"47332cd9750532390d4b3ea7becf4d3b841eb540b80399d3c2393eef7ff58930"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4316-4333 | libs/agno/agno/db/sqlite/sqlite.py:4198-4215"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4316}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bba4523d53ca7380397021b8aef1420f4f38919dc0f673b14634a220bc011a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4515-4532 | libs/agno/agno/db/sqlite/sqlite.py:4394-4411"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4515}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7048f7f7e1d9e573eb6f8a770064a43113c847a8365e3456c8b754e115b1b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4786-4803 | libs/agno/agno/db/sqlite/sqlite.py:4633-4650"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4786}}}],"partialFingerprints":{"codehealthFindingId/v1":"3882fda25ed0eb6e81438418005290c82cf764d2a490935ac9152430a2c5530c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5484-5501 | libs/agno/agno/db/sqlite/sqlite.py:5336-5353"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5484}}}],"partialFingerprints":{"codehealthFindingId/v1":"52291b531e9c8837cce3a8593ca2f0a7607a1ba8bd1e87b593cbf5207cd6f762"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:89-106 | libs/agno/agno/db/valkey/valkey.py:118-135"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f9045052deed52b85658e8ef7e131f4ef1342316bf4624f0785caaa560c7828"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:284-301 | libs/agno/agno/db/valkey/valkey.py:367-384"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b0dd3981ab89b23a9866646491dd809561bc152012ea8f043838bba5b7fd646"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:750-767 | libs/agno/agno/db/valkey/valkey.py:1021-1038"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55394f934c8180a7bc8e8510ea1c4cbbfbdd5dba75008dd6b138293cb5fa428"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1362-1379 | libs/agno/agno/db/valkey/valkey.py:1757-1774"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1362}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f90669c9ba85049ce51c5179688a618a02fb1cd675f4eacdd8fd749b50e40a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1144-1161 | libs/agno/agno/db/sqlite/sqlite.py:1336-1353"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7e3864a6623348bffcf2518dadd654a3bf1c962c4b8c5e3db75f02fcc2726d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/eval/agent_as_judge.py:316-333 | libs/agno/agno/eval/agent_as_judge.py:373-390"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"588f4b618b0df8c8405c1367bd880b1b34df88f8e5e61103e433e24c65c3cdc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2638-2655 | libs/agno/agno/knowledge/knowledge.py:2796-2813"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2638}}}],"partialFingerprints":{"codehealthFindingId/v1":"08737b379fd6c7233e447eb929c5a567e3520d3846a748c89dc25fac94acd015"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:3229-3246 | libs/agno/agno/knowledge/knowledge.py:3288-3305"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":3229}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d25333b82c03b4a6252122d46b7988095ae81286ca8a1f894bba83903f0fac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:217-234 | libs/agno/agno/knowledge/loaders/sharepoint.py:333-350"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"9050117865b9a88bc23d6d61a384e6934e791cb2e4fe8cbb32e7810f5649a4c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:214-231 | libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:247-265"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"5183307e3638a8442f2b747c174ef86d032db30ef36a1ca3323f9247e2dd5e98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/knowledge/remote_knowledge.py:63-80 | libs/agno/agno/knowledge/remote_knowledge.py:104-121"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/remote_knowledge.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"858fa3f909c050bd8bcd0e9b5c030ec64205c7e2fb4e7cd052e3aa5a4d827938"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/models/base.py:1523-1540 | libs/agno/agno/models/base.py:1802-1819"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1523}}}],"partialFingerprints":{"codehealthFindingId/v1":"588071b6960f2c4e86e77bc791faec44c98da57f765a708177d599786c76a675"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:557-574 | libs/agno/agno/models/google/gemini.py:672-689"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"1771975277d81f0d08363a3905d31dd45fd43a1ed61fd6c7084388ebbc248586"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:172-189 | libs/agno/agno/os/interfaces/a2a/router.py:479-496"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"af9ab25c4500dd13d93af0278e8cbe51e5a3be34680d710c237ef210677bde39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:789-806 | libs/agno/agno/os/interfaces/a2a/router.py:984-1001"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":789}}}],"partialFingerprints":{"codehealthFindingId/v1":"414f06033d9d7e096ec18e16559f77f4d56feccbf9edf4d2f6486682ca5411df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:171-188 | libs/agno/agno/os/routers/teams/router.py:179-196"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0abfba6734aa3d0f97c145e9bc00aa98b5ffc88853ddcb7a694ff69a6a5215f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 10): libs/agno/agno/agent/_run.py:4256-4272 | libs/agno/agno/agent/_run.py:4280-4296 | libs/agno/agno/agent/_run.py:4303-4319 | libs/agno/agno/agent/_run.py:4386-4402 | libs/agno/agno/agent/agent.py:1198-1214 | libs/agno/agno/agent/agent.py:1254-1270 | libs/agno/agno/agent/agent.py:1424-1440 | libs/agno/agno/agent/agent.py:1532-1548 | libs/agno/agno/agent/agent.py:1622-1638 | libs/agno/agno/agent/agent.py:1711-1727"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4256}}}],"partialFingerprints":{"codehealthFindingId/v1":"e772083d13c2c9ca85f18e2352f2c46d560b48377a05e3ac47ab7b501d689c05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): libs/agno/agno/db/mysql/async_mysql.py:1774-1790 | libs/agno/agno/db/mysql/mysql.py:1556-1572 | libs/agno/agno/db/sqlite/async_sqlite.py:1623-1640 | libs/agno/agno/db/sqlite/sqlite.py:1813-1830"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1774}}}],"partialFingerprints":{"codehealthFindingId/v1":"972a5fc7962228af7090e2cfb5a9720bda2811f6c4baa183d5a9c2ab8bba4014"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1134-1150 | libs/agno/agno/db/postgres/postgres.py:1439-1456 | libs/agno/agno/db/singlestore/singlestore.py:1193-1209 | libs/agno/agno/db/sqlite/sqlite.py:1395-1411"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"28e3660aa3f91366d98ac57551a786f3fac5e7a83a3aaf27f99f11955b3a49f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:2474-2490 | libs/agno/agno/db/postgres/postgres.py:2950-2966 | libs/agno/agno/db/sqlite/async_sqlite.py:2661-2679 | libs/agno/agno/db/sqlite/sqlite.py:2568-2586"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2474}}}],"partialFingerprints":{"codehealthFindingId/v1":"6737f44f9411bf0be5880a2d9df81065f5307764867ba102766438b5c9b1f856"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): libs/agno/agno/db/mongo/mongo.py:879-896 | libs/agno/agno/db/mysql/mysql.py:1079-1095 | libs/agno/agno/db/sqlite/sqlite.py:1338-1354"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6ff066d78bae1e2157da0271f434ef84f97fcec9a281bd63719c62f021180a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): libs/agno/agno/db/redis/redis.py:1134-1150 | libs/agno/agno/db/singlestore/singlestore.py:1727-1743 | libs/agno/agno/db/valkey/valkey.py:1485-1501"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"7187728f90b38209983aec839c5b1f454933a63d766dcfcf78add65acc7fab9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): cookbook/02_agents/11_approvals/approval_async.py:26-42 | cookbook/02_agents/11_approvals/approval_basic.py:25-41"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/11_approvals/approval_async.py"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad338b2ee7dfe83b5da418f77e5ae6cf57ade0d5faa053ef3e1ff284d941d96f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): cookbook/02_agents/14_advanced/background_execution_metrics.py:63-79 | cookbook/03_teams/14_run_control/background_execution_metrics.py:72-88"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/background_execution_metrics.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"224d1b11b3ccd6761ddb063e0edc775885ae54f9f5bd198846ebee3cb19ad824"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/history/history_in_function.py:211-228 | cookbook/04_workflows/06_advanced_concepts/history/intent_routing_with_history.py:157-173"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/history/history_in_function.py"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"96494c26f55e4f914407cd00b00a4964eeac99a04af02488bd82e4889b3c7ec2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_cli.py:93-110 | libs/agno/agno/agent/_cli.py:194-210"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_cli.py"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a3b1dd6283c27aca2008ebd672b3528a55e9128f924c9d6fdb01a23c3403314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_hooks.py:318-334 | libs/agno/agno/agent/_hooks.py:422-438"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a9e6bcd4ee03af55b3e175c1cdccadd391033f5e3176b8e6a1926806efc7653"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_messages.py:1825-1842 | libs/agno/agno/agent/_messages.py:1912-1928"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_messages.py"},"region":{"startLine":1825}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18b5e339c3da5a434a597c7bb429ad665072b92edbf40773dce189527322288"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_response.py:471-487 | libs/agno/agno/agent/_response.py:539-555"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"96c0809011629a3890077133bb4bff3c02d7b4d3bd610f3d7a9f361b6ee7ec30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_response.py:511-528 | libs/agno/agno/agent/_response.py:581-597"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"38cce09b82e9758641bd0c2c28a3b233c4d11869e2516186b2aa7960bcc600e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_response.py:1897-1913 | libs/agno/agno/agent/_response.py:1945-1961"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1897}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2d37730b32b5f257f72cb72281c6fc4497ad54f43f27993e34053ccdb758b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_run.py:1101-1117 | libs/agno/agno/agent/_run.py:2506-2522"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa747953d17abf9fdbb7ca25e4f50988db628f03b2f872e78f33feb03063594"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_run.py:2369-2385 | libs/agno/agno/agent/_run.py:5253-5269"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2369}}}],"partialFingerprints":{"codehealthFindingId/v1":"9406ba21ac136d5e13635a456567de019429576cb0f4a3ace0c807341fff5785"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/_run.py:2508-2524 | libs/agno/agno/agent/_run.py:5362-5378"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2508}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4bd2a5cf6809a449c738b3e63a6786df3e880c7e96b2e23896b58f636b7a8b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/agent/remote.py:313-329 | libs/agno/agno/agent/remote.py:335-351"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/remote.py"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d354f07e5d8505cbe658fba12a916316a204a4b605bb53a57773caa75c2d7ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/context/calendar/provider.py:96-112 | libs/agno/agno/context/gmail/provider.py:103-120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/calendar/provider.py"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a3a5fecb5c846562b3383c3c54f1474094fef653c70bb6fb91930ecedea3c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:548-564 | libs/agno/agno/db/json/json_db.py:543-560"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5d1796145a956b605687ac36d3cd8dca82475b7b1ea6aa169abceb6940ecd6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:833-849 | libs/agno/agno/db/json/json_db.py:832-848"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"c31abb7e9a4c334cf7b5a5b72184711174fdec34ebabe90bb3dc773e3e5c18c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1025-1041 | libs/agno/agno/db/json/json_db.py:1059-1076"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf71556973acfa67dd099589b591cb7a20a2134aef5196c60ce9648a96c72189"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:1136-1152 | libs/agno/agno/db/json/json_db.py:1304-1320"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c588f363dce78cb9d63ec9fb839dc4abf41e7826c6a35dce55f2f9a1154a83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:810-826 | libs/agno/agno/db/mongo/mongo.py:599-615"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":810}}}],"partialFingerprints":{"codehealthFindingId/v1":"2027cb1ef02b373959739b58a857ecd0084a3dfdf3f598cb15d5b173e47b1354"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:94-110 | libs/agno/agno/db/singlestore/singlestore.py:92-108"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff52e8d162d90536aef275c72d7f1911c11f4102c2a317ea370adc87af23892"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1160-1177 | libs/agno/agno/db/singlestore/singlestore.py:1220-1236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1160}}}],"partialFingerprints":{"codehealthFindingId/v1":"d46d9439d312467a36e164b3d6cf0d3476073876e22931f4fca4848e965adb00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1035-1051 | libs/agno/agno/db/sqlite/async_sqlite.py:1203-1219"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5deff7555d45b59f8890222fcf27b31c4b3bcd7125643f2dc625836a08a9857"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3261-3277 | libs/agno/agno/db/sqlite/async_sqlite.py:3434-3450"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3261}}}],"partialFingerprints":{"codehealthFindingId/v1":"88d210f1a948f51edcdc63b41fe59cd697b32ffefa5f0bb142aa93be1ef088e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3568-3585 | libs/agno/agno/db/sqlite/sqlite.py:3174-3190"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3568}}}],"partialFingerprints":{"codehealthFindingId/v1":"8193ac3980e3a03d7b01a4df88dcf58537823a29ed1e9f2badb43b737b6a39a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4149-4165 | libs/agno/agno/db/sqlite/sqlite.py:4035-4051"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4149}}}],"partialFingerprints":{"codehealthFindingId/v1":"06479035ee252c1d0686ad88bf265861e0b6e972759ddf00e43e0bba0ee97f92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1076-1092 | libs/agno/agno/db/valkey/valkey.py:1423-1439"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"1187fc29cfc9ec92349175d81175c6ceb3a877abbcb3809311ba70b6294c5de1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/db/sqlite/sqlite.py:1837-1853 | libs/agno/agno/db/sqlite/sqlite.py:3291-3307"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1837}}}],"partialFingerprints":{"codehealthFindingId/v1":"73840658b7ae74b4296988f42ea3966539b1b32c2d4175a1ed2ed3235977ab3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/eval/performance.py:413-429 | libs/agno/agno/eval/performance.py:457-473"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0cf93808db20d4be55499f2a1b5938a3210718534ce0dd163e9d5cf9e9656e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/eval/reliability.py:269-285 | libs/agno/agno/eval/reliability.py:351-367"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/reliability.py"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d27517abed59e24d9f05191723d4b4f24c1624acf70bb66261995f66dcb04c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/knowledge/loaders/github.py:442-458 | libs/agno/agno/knowledge/loaders/sharepoint.py:294-310"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a1231e63a2e560f2de815ac64fa3e455bb3c6ae6db10189c58d5b905072fb36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/knowledge/loaders/github.py:598-614 | libs/agno/agno/knowledge/loaders/sharepoint.py:410-426"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"840c6beb6673b3644343e471a62fd5a45b258b47b46662570d6bf9a0150d42a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:50-69 | libs/agno/agno/knowledge/remote_content/sharepoint.py:59-75"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"f774323ecef438b543e49a89a188a9eaa190a24405a7809a993655fee3728b53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/knowledge/reader/wikipedia_reader.py:47-63 | libs/agno/agno/knowledge/reader/wikipedia_reader.py:79-95"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/wikipedia_reader.py"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"b207f823a83435a32c1b382733d2a5e71b76a87198ab0e68ecd6c0588762ce7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/knowledge/reranker/infinity.py:94-110 | libs/agno/agno/knowledge/reranker/infinity.py:166-182"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reranker/infinity.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e4b1d3b3a607e5f1e0070b7072baab235cf2f80c4b4eb6aa0ccefea636f569"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1135-1151 | libs/agno/agno/learn/stores/entity_memory.py:1264-1280"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1135}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6372285faf03d4732127d87be0c79208cfc1c200c840b47d3f8bc3990371e44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/learn/stores/user_profile.py:388-410 | libs/agno/agno/learn/stores/user_profile.py:476-492"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_profile.py"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"da0c7eef21917a2ab5892dd48579797d2ad23f0316df923571b9624b80084ba9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:410-426 | libs/agno/agno/models/vertexai/claude.py:63-79"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b778c08691f91ad912a73302a59c0692128bb3f3ab07acf5f4e1d204f2aff4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:430-448 | libs/agno/agno/models/vertexai/claude.py:83-99"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":430}}}],"partialFingerprints":{"codehealthFindingId/v1":"aee3ec96b97b0e6f88c439390e580f5a1d366555faadb0ac196343a6f99a14bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/base.py:721-737 | libs/agno/agno/models/base.py:943-959"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":721}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41ab63a6e4030bf32b51783a15900a78ee545caf809620645f892f9fcc49351"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/base.py:1126-1142 | libs/agno/agno/models/base.py:1196-1212"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1126}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1701ed3eb4c62732df740595f92bb6fc391aeaddaa21bf9eca7b9f91152ced2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/base.py:1344-1360 | libs/agno/agno/models/base.py:1623-1639"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1344}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5030eaaf90037325d36c26199ca0a601aa64db53733745430a6b98d9139e71f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/base.py:2423-2440 | libs/agno/agno/models/base.py:2634-2650"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2423}}}],"partialFingerprints":{"codehealthFindingId/v1":"85813f876eaa065ad6c5564c8a36b97932e2360961d7d0365517bebf40d21d9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/cerebras/cerebras.py:291-307 | libs/agno/agno/models/cerebras/cerebras.py:361-378"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf8e0f43386bfcc8b6535751dbb2c268518d45bb6d0dedd84926fba9f1012a35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/models/openai/chat.py:808-824 | libs/agno/agno/models/perplexity/perplexity.py:103-125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a60ec03685d02b76f22a76609ed4d2a7820f3a9b72689ce15c06df0a502cd2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:814-830 | libs/agno/agno/os/interfaces/a2a/router.py:1009-1025"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59760ca889767e131a612b6e4c8f59e4264b772c849fa5b1c29e3ed0b80f200"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:600-616 | libs/agno/agno/os/routers/teams/router.py:583-599"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"19b1c2ae6b92960c1864d9207f297b0c114545084d7636db62b8dc8938eef019"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:1096-1112 | libs/agno/agno/os/routers/agents/router.py:1116-1132"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1096}}}],"partialFingerprints":{"codehealthFindingId/v1":"4139e1c0542d3946bda23a25f58494f09a5d570d20183ff984e062fd0a7643e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 7): libs/agno/agno/agent/_cli.py:111-126 | libs/agno/agno/agent/_cli.py:211-226 | libs/agno/agno/db/postgres/async_postgres.py:115-130 | libs/agno/agno/db/postgres/postgres.py:166-181 | libs/agno/agno/db/sqlite/async_sqlite.py:112-127 | libs/agno/agno/db/sqlite/sqlite.py:137-152 | libs/agno/agno/os/interfaces/slack/router.py:100-115"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_cli.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdcee8645ab5b92eda87448320c44f3db2c664f96096cd7537158a62377aa89c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 6): libs/agno/agno/db/mysql/mysql.py:2250-2269 | libs/agno/agno/db/postgres/postgres.py:2125-2140 | libs/agno/agno/db/postgres/postgres.py:2611-2630 | libs/agno/agno/db/singlestore/singlestore.py:1829-1844 | libs/agno/agno/db/singlestore/singlestore.py:2259-2278 | libs/agno/agno/db/sqlite/sqlite.py:3341-3360"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2250}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16ea8218cb241a7c00d07ff35720f24f46e2ce4d1fb0c994a919bad0afd1e9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): cookbook/12_context/18_gmail.py:66-81 | cookbook/12_context/18_gmail.py:101-116 | cookbook/12_context/19_calendar.py:66-81 | cookbook/12_context/19_calendar.py:102-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/12_context/18_gmail.py"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"8816b26e6c52594948d7f48115ee90263e07c825ecbd6e4bf317a012b8676d42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): libs/agno/agno/db/gcs_json/gcs_json_db.py:1436-1451 | libs/agno/agno/db/json/json_db.py:1421-1436 | libs/agno/agno/db/redis/redis.py:1768-1783 | libs/agno/agno/db/valkey/valkey.py:2058-2073"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1436}}}],"partialFingerprints":{"codehealthFindingId/v1":"c77b7be9c06f5dee87eb1f972b69dbb2ed2eaa6ee4d8a0b03a6cb4967fea9dfa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2220-2235 | libs/agno/agno/db/postgres/postgres.py:2581-2596 | libs/agno/agno/db/singlestore/singlestore.py:2229-2244 | libs/agno/agno/db/sqlite/sqlite.py:3311-3326"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2220}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe064b7e9c8bdddf07f5036285486c9d599f88f5a9c7df1bf755acc6710ba13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): libs/agno/agno/models/groq/groq.py:466-481 | libs/agno/agno/models/huggingface/huggingface.py:393-408 | libs/agno/agno/models/ibm/watsonx.py:331-346 | libs/agno/agno/models/openai/chat.py:768-783"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc487f415c58403fe768740535b0005568293510b9a58f1cbf6a62ae8f9a5085"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): libs/agno/agno/models/ibm/watsonx.py:172-187 | libs/agno/agno/models/ibm/watsonx.py:209-224 | libs/agno/agno/models/ibm/watsonx.py:246-261 | libs/agno/agno/models/ibm/watsonx.py:282-298"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ibm/watsonx.py"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"3184c9080cb76f49b16f7d4b6180065276d52818bfc3689458d8dfba61cdcfba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): libs/agno/agno/agent/_run.py:3476-3491 | libs/agno/agno/agent/_run.py:4655-4671 | libs/agno/agno/agent/_run.py:5146-5162"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3476}}}],"partialFingerprints":{"codehealthFindingId/v1":"d213bb9ae0c21a4bd4a380681a319d0ac29639f3eb369778417088b409b997de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): libs/agno/agno/knowledge/loaders/azure_blob.py:388-403 | libs/agno/agno/knowledge/loaders/github.py:593-608 | libs/agno/agno/knowledge/loaders/sharepoint.py:405-420"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"af9a4602eede8d79a36ccccd9e4e224d1f310e193c95d172186e1a933db9bbd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): libs/agno/agno/learn/stores/learned_knowledge.py:1368-1383 | libs/agno/agno/learn/stores/user_memory.py:944-959 | libs/agno/agno/learn/stores/user_profile.py:1008-1023"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"277b772f7f8fcd458a2805007dc2d12dfd29625c67162d36b14ad0a723f6a7fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): libs/agno/agno/learn/stores/session_context.py:308-323 | libs/agno/agno/learn/stores/user_memory.py:466-481 | libs/agno/agno/learn/stores/user_profile.py:634-649"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4418030ef2e2464d754539541d3c287af61f87e7805cb1d049bec5928635f57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): cookbook/02_agents/14_advanced/background_execution.py:61-76 | cookbook/03_teams/14_run_control/background_execution.py:75-90"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/background_execution.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"e11d80a09826047446f51836359e35f37ea63f5891ab6853e750d107f6d0b36f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py:157-172 | cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py:271-287"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"a428cf8ff709407936493e30d83b87f9509adb438fe64d885064e864282b47dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): cookbook/91_tools/tool_decorator/async_tool_decorator.py:23-38 | cookbook/91_tools/tool_hooks/pre_and_post_hooks.py:76-91"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/tool_decorator/async_tool_decorator.py"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e39c44391c95dca07b379d306f06d3dcb984d329718cde01ad8f2b35b420bec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/agent/_hooks.py:342-357 | libs/agno/agno/agent/_hooks.py:442-458"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_hooks.py"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d2a6629ca761748062b07d4b63dbc021724706bad80fd861695f7d55c285a3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/agent/_run.py:1825-1840 | libs/agno/agno/agent/_run.py:4875-4890"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1825}}}],"partialFingerprints":{"codehealthFindingId/v1":"564dfc8d147b7b170166e3a098f1df02c7dd4db1649467b240380129f746d492"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/agent/_run.py:3315-3330 | libs/agno/agno/agent/_run.py:4186-4202"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3315}}}],"partialFingerprints":{"codehealthFindingId/v1":"adacf02e826064cce1865dae39f21f0b7e55d04d82bb3677f9df5d2b77b631c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/agent/_run.py:4639-4654 | libs/agno/agno/agent/_run.py:5130-5145"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4639}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df53a06a5a5c8941cbf1d1d5e768043f039da31e6eec34c0fad1579019e2481"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/agent/_session.py:621-636 | libs/agno/agno/agent/_session.py:675-690"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe54f1b8fadaad3b4c8aeb49e0f5c2a154821dd048618f118767569b0031a54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:724-739 | libs/agno/agno/db/json/json_db.py:723-738"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"3139af3adbf14575db9db5b45fdba7821a1f4074bc61bee2345a1d8cbea23eeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:926-941 | libs/agno/agno/db/json/json_db.py:927-942"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da810cf3728bae3be68c6353b5cddb5b73f1c5991cfb628f72f3ef8bc589b17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1152-1167 | libs/agno/agno/db/json/json_db.py:1194-1209"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1152}}}],"partialFingerprints":{"codehealthFindingId/v1":"a76666cbfc56ee27bfdc40f6f9dae5ca553479708e943780e8490b19a1a406f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1752-1767 | libs/agno/agno/db/json/json_db.py:1728-1743"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1752}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e9d9b6043e6e53db6d47b66c36d995e7c6cb0fe388a74acdb8a58cff083e3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:220-235 | libs/agno/agno/db/in_memory/in_memory_db.py:519-534"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f1fa8f8123c19b6d873a76b8d44da425943fabd123fc7b38e77e263b786a26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_6.py:256-272 | libs/agno/agno/db/migrations/versions/v2_5_6.py:589-604"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_6.py"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4f1929c5dc6103ee0ed66c9408119ef8ca36f362bbc9826145d54ddd0d2e678"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1293-1308 | libs/agno/agno/db/mongo/async_mongo.py:1672-1687"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1293}}}],"partialFingerprints":{"codehealthFindingId/v1":"b272e7b030cb416419797800eeaafaa4dd876e59efc8f346edc4f8be1146c0db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1516-1531 | libs/agno/agno/db/mongo/mongo.py:1299-1314"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1516}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f20b1cc4cadab361b0c5e986e0936bd09671acff8dddc9ef07811fe73f767c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mongo/mongo.py:1077-1092 | libs/agno/agno/db/mongo/mongo.py:1455-1470"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1077}}}],"partialFingerprints":{"codehealthFindingId/v1":"149f4fc0e6006763983fd803be44a5a8f844243d8a43e2326e8d2a95bd0efc1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1400-1415 | libs/agno/agno/db/mysql/async_mysql.py:1546-1562"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1400}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee869598426f862ea3c025307c577a732ce5c3072262c2b73ce80e26bcf9fab0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1687-1702 | libs/agno/agno/db/postgres/async_postgres.py:1640-1655"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1687}}}],"partialFingerprints":{"codehealthFindingId/v1":"3421fa505a85eb91941ca6a345ea96227f5bded8fbd6a2bc1984db02d2467e2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2893-2908 | libs/agno/agno/db/singlestore/singlestore.py:2855-2870"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2893}}}],"partialFingerprints":{"codehealthFindingId/v1":"c62a02b0a85c804131a1b786db3bea7ce6a4ebdaf25499093e746253acc9e3f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1006-1021 | libs/agno/agno/db/sqlite/async_sqlite.py:1169-1188"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1006}}}],"partialFingerprints":{"codehealthFindingId/v1":"73c88d4618d03a8185bb1a8a6920d2f3dba35a72640cdf9e56d6582621a4d107"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1433-1449 | libs/agno/agno/db/postgres/postgres.py:2734-2749"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1433}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ebe7cf7e8a75b94ab4067cbee725f706d83e9b4369fb7721d8ac08006acf09f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3285-3300 | libs/agno/agno/db/sqlite/async_sqlite.py:3458-3473"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3285}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0442de9a810c22ae9892718e52f61d56e20d3b471b823ac19c0092e9699c80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3585-3600 | libs/agno/agno/db/sqlite/async_sqlite.py:3695-3710"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3585}}}],"partialFingerprints":{"codehealthFindingId/v1":"11786b8329cc5932511058d8abb93ae814f7a726ae017896dacd5b3647accdf7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4223-4238 | libs/agno/agno/db/sqlite/async_sqlite.py:4340-4357"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4223}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbbaf73bbf53e08a80074aa0c625bb8c6a8c9b5a028c9db2a81f9af475e41ab1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3698-3713 | libs/agno/agno/db/sqlite/sqlite.py:3596-3611"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3698}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c2b72f90cde5697412d04f0c025e00bd0115af5710829f9bcd206b2b6d9f58a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4210-4225 | libs/agno/agno/db/sqlite/sqlite.py:4092-4107"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4210}}}],"partialFingerprints":{"codehealthFindingId/v1":"55dd2ab8de81e25387c3f590fc34695eb6c0ef622d18926c33c44cdb446aa3a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4809-4824 | libs/agno/agno/db/sqlite/sqlite.py:4656-4671"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4809}}}],"partialFingerprints":{"codehealthFindingId/v1":"72dce35953deb8cae700e1edc99cf8ee72438c4cec2e766f9bc8aa765d86287a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5706-5722 | libs/agno/agno/db/sqlite/sqlite.py:5558-5573"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5706}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7846617e45a8adb0e7329dbd91ba270ebe3cf3330e33af105965dbea906e297"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:361-376 | libs/agno/agno/eval/accuracy.py:507-522"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"734ab35ecd9c2856d73867d2c4134c220c360e1c6a20a132950572e5a2e96c8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/eval/performance.py:578-593 | libs/agno/agno/eval/performance.py:723-738"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fd97d9936702ac11f3b24329f3ad604299f4ec4f7ca62e29985180b69d001bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/knowledge/embedder/jina.py:81-96 | libs/agno/agno/knowledge/embedder/jina.py:122-137"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/jina.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4709cca7e5f3e7ed95a56773967ead6db7229e92205fd05699cdcda6806c1511"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2820-2835 | libs/agno/agno/knowledge/knowledge.py:2867-2883"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2820}}}],"partialFingerprints":{"codehealthFindingId/v1":"19bffcf39128409ce2a5c7f321561414cff0b9d7c37ed034d215cc02dccc2edb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/knowledge/loaders/azure_blob.py:237-252 | libs/agno/agno/knowledge/loaders/azure_blob.py:382-397"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"99da7b110fd941fd8e800d6e5a472ad1254c028e4ba5dfcc5d82c7493e1ce1da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/knowledge/reader/website_reader.py:226-241 | libs/agno/agno/knowledge/reader/website_reader.py:341-356"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24e67aad4995de2e89f87bc918dfa71a9738d8f9747aba65c48445046d064fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/learn/stores/decision_log.py:584-599 | libs/agno/agno/learn/stores/decision_log.py:628-643"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12217d001bc72b7e00834e26c7488c5664bfa963163e5475372cde31838dd0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/memory/manager.py:1385-1400 | libs/agno/agno/memory/manager.py:1522-1537"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1385}}}],"partialFingerprints":{"codehealthFindingId/v1":"22ddc70647ab7e2ed180f412f35a5de7592efcd29cb499be41658816ec79a76e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/base.py:1482-1497 | libs/agno/agno/models/base.py:1761-1776"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1482}}}],"partialFingerprints":{"codehealthFindingId/v1":"256b4a717e028559f87ebc0108e5732137c4fa6236cb9a7e29362c83c3002268"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/base.py:2358-2374 | libs/agno/agno/models/base.py:2559-2574"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2358}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c3007109888b158e2d2e6676863f3c5c6479e456ff0ccefd6b55cb219464e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:955-970 | libs/agno/agno/models/google/gemini.py:1008-1023"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":955}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eb416f45378f61b87eccfb2f6d3f782049e77b2e989a1e3ce858b65079d3055"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/groq/groq.py:496-511 | libs/agno/agno/models/perplexity/perplexity.py:119-134"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ae0d553c5c42a469375b370190aefe2f66b127990ed6e7e9ec56759027bacf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/openai/chat.py:1008-1030 | libs/agno/agno/models/perplexity/perplexity.py:186-201"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fc26acc3bfb3a8609cecd5a1351b5371a381a095fc3b4bbb90fba1b4348db7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/models/openai/responses.py:801-816 | libs/agno/agno/models/openai/responses.py:906-921"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"154fb53856c029bbf28396d7622f59fd41d291dcd6ed059358c52f1319c417c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:103-118 | libs/agno/agno/os/routers/teams/router.py:105-120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"8130eaa97f1a3d07820dd146f08549d6110d57d74bd407be8bcbdaadb106719f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 4): cookbook/02_agents/10_human_in_the_loop/confirmation_advanced.py:25-45 | cookbook/02_agents/10_human_in_the_loop/confirmation_required.py:25-45 | cookbook/91_tools/python_function_as_tool.py:19-40 | cookbook/91_tools/tool_calls_accesing_agent.py:19-33"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/10_human_in_the_loop/confirmation_advanced.py"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"558fc29e0a82638a66e2c5409883e1b5ce37527296ac91a4aab8dd98de7ccaf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 4): libs/agno/agno/db/gcs_json/gcs_json_db.py:72-87 | libs/agno/agno/db/redis/redis.py:88-103 | libs/agno/agno/db/surrealdb/surrealdb.py:94-108 | libs/agno/agno/db/valkey/valkey.py:117-132"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"50509da5fcd17d080ca1895c6db0d6d6cec707998eb6ec79558f20fc7042c490"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): cookbook/05_agent_os/05_human_in_the_loop/audit_record.py:71-85 | cookbook/05_agent_os/05_human_in_the_loop/basic.py:67-81 | cookbook/05_agent_os/05_human_in_the_loop/with_approval_record.py:86-100"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/audit_record.py"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"528723a58e07fe60ca3bdd0d0d9e2bc7dfbbb8de5ada5d05e4880838a3793a15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): cookbook/10_reasoning/agents/capture_reasoning_content_default_COT.py:64-78 | cookbook/10_reasoning/agents/capture_reasoning_content_default_COT.py:87-101 | cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py:97-114"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/agents/capture_reasoning_content_default_COT.py"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"00bb90d8443cd0f0cc4d74346fe80e713a4a56e3bd853f609a410cc22dfbe60e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): cookbook/91_tools/other/human_in_the_loop.py:54-74 | cookbook/91_tools/tool_decorator/tool_decorator.py:22-36 | cookbook/91_tools/tool_hooks/pre_and_post_hooks.py:35-49"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/other/human_in_the_loop.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"4444f4e8dccff5c46fb346ff110ff8e1b0aed5bab4bdb2be64af3418fbf86af0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/db/firestore/firestore.py:994-1008 | libs/agno/agno/db/in_memory/in_memory_db.py:582-596 | libs/agno/agno/db/json/json_db.py:695-709"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":994}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cb9220b8552256cc145cc011f851d1cf4dd3065d404b4f2a974b9589f90fef7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/db/mongo/mongo.py:1300-1315 | libs/agno/agno/db/mysql/mysql.py:1561-1575 | libs/agno/agno/db/sqlite/sqlite.py:1818-1833"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c9b195333f7da2ca6b35d5f82e89f2dc16fcb680e6602f3253adc898a04b851"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:1926-1941 | libs/agno/agno/db/postgres/async_postgres.py:1795-1810 | libs/agno/agno/db/sqlite/async_sqlite.py:1800-1814"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1926}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b753a942673e187ff8e86c3366e0a8c03a48f6a6185ccbb5fe98d4fb428fe8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2202-2216 | libs/agno/agno/db/postgres/postgres.py:2563-2577 | libs/agno/agno/db/singlestore/singlestore.py:2211-2225"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2202}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd30423e3dc0529d168304875c33e86bff3a0b4d4fc2cb57ca30dbcfeb370648"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/knowledge/embedder/openai.py:103-117 | libs/agno/agno/knowledge/embedder/openai.py:124-138 | libs/agno/agno/knowledge/embedder/openai.py:165-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/openai.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e15c904e76a0f8add97b00b99dc70513b454bcbfe9929c90317a4c3cbd38b0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/learn/schemas.py:119-136 | libs/agno/agno/learn/schemas.py:217-234 | libs/agno/agno/learn/schemas.py:384-398"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d1ee2fe14156fc6812440d0a8af41a5aaa6f163db43f970b31b850d67bcfb41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): libs/agno/agno/os/middleware/user_scope.py:436-450 | libs/agno/agno/os/middleware/user_scope.py:479-493 | libs/agno/agno/os/middleware/user_scope.py:522-536"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/middleware/user_scope.py"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf0af346d40a05fe88cb2dac14ab06f2993a3adb6c39a87a7827f0583ce11239"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/02_agents/11_approvals/approval_async.py:75-89 | cookbook/02_agents/11_approvals/audit_approval_async.py:63-77"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/11_approvals/approval_async.py"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fc88a777932accd450c781b6f02d41239a7da51b30ddf3762e9bcc3914ffb23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/02_agents/20_time_travel/01_continue_from.py:51-65 | cookbook/02_agents/20_time_travel/02_fork_run.py:56-70"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/20_time_travel/01_continue_from.py"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bcf32fe36f31a8c7cc06262b325e744226aed4e02b07ea336bcb555644d9b81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/02_agents/20_time_travel/01_continue_from.py:91-105 | cookbook/02_agents/20_time_travel/02_fork_run.py:82-97"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/20_time_travel/01_continue_from.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"70166901d839a025891e262f15a0f856614c1e41a8bd6cb0f3f4ba4aeda97be0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/03_teams/14_run_control/cancel_run.py:24-38 | cookbook/04_workflows/06_advanced_concepts/run_control/cancel_run.py:25-39"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/14_run_control/cancel_run.py"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"6199e2fe8e5a139cd1bc08d18e26ad9185db4c12a136b1371edbd33ac174fe5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/03_teams/25_time_travel/01_continue_from.py:38-52 | cookbook/03_teams/25_time_travel/02_fork_run.py:35-49"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/25_time_travel/01_continue_from.py"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"91ffd7333edf73ea999ef0a60bee72e832b747e478c841f04c3a4ecbefdf2862"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:151-165 | cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py:231-245"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dfaf208f722e935add85ab23bf37f0838d1b2b8e6cfb0623245288629d5ce9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/05_agent_os/01_getting_started/run_over_http.py:63-78 | cookbook/05_agent_os/09_serving_workflows/run_over_api.py:52-66"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/01_getting_started/run_over_http.py"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc83e7c1201d0fba7b218585b6e6f9af4bf097cc8f765190290af8fe06865a5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/05_agent_os/05_human_in_the_loop/basic.py:69-83 | cookbook/05_agent_os/05_human_in_the_loop/external_execution.py:98-115"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/basic.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d8236e25992c3b98aa4342d82660503e60ecd0bb159e8bbff194045ae5a15a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/05_agent_os/05_human_in_the_loop/user_input.py:138-152 | cookbook/05_agent_os/05_human_in_the_loop/workflow_hitl.py:170-184"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/user_input.py"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"6667adad5d313af3e0a72c05b00a2bf36780b4c8f2740054e353dc6c74577f43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py:70-84 | cookbook/10_reasoning/tools/capture_reasoning_content_reasoning_tools.py:41-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3785e9d0b551cf433ff0bbd11231da463f17fc98070e26a77934dc02194eb26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): cookbook/12_context/02_web_exa_mcp.py:36-50 | cookbook/12_context/11_web_parallel_mcp.py:38-52"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/12_context/02_web_exa_mcp.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"533a67fff5ef0e48d17d3cce442d33478f6bde3acf68606e3e61f66735732d37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/agent/_run.py:1522-1537 | libs/agno/agno/agent/_run.py:2196-2210"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1522}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae75ab3f6e77d8d6bc1a1f685591c728f05db1e433c9b1e4de7730836c6d55f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/agent/_tools.py:62-76 | libs/agno/agno/agent/_tools.py:88-102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"409a9fa2273ae3049e745e9dc8d3620f8f4602e90599facc6b4f3374a278a3a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/client/os.py:135-149 | libs/agno/agno/client/os.py:195-209"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef69524b01aa810a6c2a6f57976978f5575a9688c1a6aba003075ec82854798"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/compression/manager.py:110-124 | libs/agno/agno/compression/manager.py:215-229"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/compression/manager.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5abac8bbef5524658f3d93a95613cae3294231aa857e5d9b8ecfd24a8cd5ecf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:418-432 | libs/agno/agno/db/json/json_db.py:403-417"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"305416e32fbb9680f4b1805dae06e17e39f75169b530873d3eb3b83a796fe6b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1611-1625 | libs/agno/agno/db/mongo/mongo.py:1394-1408"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1611}}}],"partialFingerprints":{"codehealthFindingId/v1":"da6db2ae448b80e7c08e8afce0e700bb9df1bad19fd82657e9ce3ed6210a2bd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1740-1754 | libs/agno/agno/db/mongo/mongo.py:1523-1537"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1740}}}],"partialFingerprints":{"codehealthFindingId/v1":"21c524314b496857eb161d270524fd3488779b4167f0576514c566b65bf5ee00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2220-2234 | libs/agno/agno/db/mongo/mongo.py:2000-2014"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2220}}}],"partialFingerprints":{"codehealthFindingId/v1":"de2eb01397e359e00b101ae711227830ed069c848aa5a5b635d64e6684124a14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:526-540 | libs/agno/agno/db/postgres/async_postgres.py:644-659"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2cb74611d98327456835e06d7b2ecb9235ac0d83672c48264ac5e862e4944b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:694-708 | libs/agno/agno/db/postgres/async_postgres.py:817-831"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"760414212049408b61ff3b42d99f473bf2ae38d247200bfc80a15ecbfb5c7186"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:882-896 | libs/agno/agno/db/postgres/async_postgres.py:986-1000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":882}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df9d315ebcf5e23c8bfbffe543a252fb5056f9c5e7bb451f112efe4f5c8144a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1189-1203 | libs/agno/agno/db/mysql/mysql.py:1182-1196"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1189}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ed2bccf2ac579d1533883d67ca50e71f989c35a54f5b4d85b171b542c992264"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1228-1242 | libs/agno/agno/db/postgres/async_postgres.py:1146-1160"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1228}}}],"partialFingerprints":{"codehealthFindingId/v1":"af1de4bc1aad809c3377ddb6a9009688293d88b8bea54008a89742f83b04dfa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2686-2700 | libs/agno/agno/db/sqlite/async_sqlite.py:2807-2821"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2686}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd38e241f4ff4cc7adbf2c1966b6126a4514eae45c51354fbcdfe72b7802e211"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1078-1092 | libs/agno/agno/db/postgres/postgres.py:1484-1498"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"20517abab88f355938c2164b585f9d76a13ce014264f453ef2bfa4dded180706"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1266-1280 | libs/agno/agno/db/sqlite/async_sqlite.py:2347-2361"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1266}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1dd38443246877405f14afbcf433d75ce7f882911ec68a32d7ae9d90c7bc0da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:1833-1849 | libs/agno/agno/db/singlestore/singlestore.py:1537-1551"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1833}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9eec077f36184e39d49771c4a80b9deb8f1661353b1faf712e8dcd1df10823"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:2032-2047 | libs/agno/agno/db/sqlite/sqlite.py:1990-2004"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2032}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fbd060886e073525bd61ebdfdb159e75eefb34f7809b5c6fa198f5d6d9886ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5105-5119 | libs/agno/agno/db/sqlite/sqlite.py:4949-4963"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5105}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a4110b42bd7ba56b492eb6acdceac75fc10b93d230686a9342957750219c36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1946-1960 | libs/agno/agno/db/valkey/valkey.py:2287-2302"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1946}}}],"partialFingerprints":{"codehealthFindingId/v1":"b76a7382c57e62e414ad47fd0a1ef1fb24cf4d16adca0f5321e9f7082a37bf6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/db/surrealdb/surrealdb.py:418-433 | libs/agno/agno/db/surrealdb/surrealdb.py:896-910"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"371386b7670238e8c79fc4c5b3c1261cf3a9edf086b38314ba908eae65334dc6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/eval/performance.py:273-288 | libs/agno/agno/eval/performance.py:329-343"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e422196f62fdcbd74d80e3ac708d65b4fb6b926e13a3d7aa01753535d8b77a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/chunking/document.py:118-132 | libs/agno/agno/knowledge/chunking/markdown.py:314-328"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/document.py"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e3d2cc23c6ca51fb1e1332d2254a4baed93d62d4ee4ac4c5f498d786ef5a226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:520-535 | libs/agno/agno/knowledge/knowledge.py:561-575"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"993e941ff144ece034d99074d17cfd2ef1c3054227b99288707c674e1b7d51a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1623-1637 | libs/agno/agno/knowledge/knowledge.py:1778-1792"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1623}}}],"partialFingerprints":{"codehealthFindingId/v1":"9230b3ca898e416472db7830f807975be757af54d3eb4230c9774d0fe34bc6be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2660-2674 | libs/agno/agno/knowledge/knowledge.py:2705-2719"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2660}}}],"partialFingerprints":{"codehealthFindingId/v1":"3becc15b901b237c943a35197308e41fb780743529859f49fe0c3d877e569726"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:3150-3164 | libs/agno/agno/knowledge/knowledge.py:3274-3288"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":3150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7d1d5bc6d51fca216f29dd33058a71c017eafc562492c35491bef660e952d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:3187-3201 | libs/agno/agno/knowledge/knowledge.py:3333-3347"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":3187}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c53db15dd1d2b12eb7aa9100013e984afbd5888d5ec903c8a79cdbde0906f32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/loaders/gcs.py:235-249 | libs/agno/agno/knowledge/loaders/s3.py:228-242"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/gcs.py"},"region":{"startLine":235}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf24508a3d9e5317e131551e98bbd1c4cfffc5c0c492c934e0a1d0fc142de54e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/knowledge/reader/pdf_reader.py:422-436 | libs/agno/agno/knowledge/reader/pdf_reader.py:469-483"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/pdf_reader.py"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"5abf66277787c65971662ccefde812d5a41c4c9f2316c311570193eaae118dfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/decision_log.py:407-421 | libs/agno/agno/learn/stores/decision_log.py:455-469"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"97922838b3bb9fa3c69f5dca8d57a9838b3282a3139413677d14ccdbcf2c5637"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/decision_log.py:509-523 | libs/agno/agno/learn/stores/decision_log.py:540-554"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"2658c00e006ba94d81cff7fee7d13b0b1683c2bd39fa67b48f77846cfaf821cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/decision_log.py:886-900 | libs/agno/agno/learn/stores/decision_log.py:918-932"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d28bff4b0a918da338d60266cf109c7d8d112c7b3028bb38e623a280aee4f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1103-1117 | libs/agno/agno/learn/stores/entity_memory.py:1227-1241"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"c19fabd3f9bf67aec43fad127b322cd9e47e5be3ca214251aa98dee28ecaa720"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:2886-2900 | libs/agno/agno/learn/stores/entity_memory.py:2926-2940"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2886}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c89235783cb05f04e67ae948a1a75f015c6cdc6703ad09bf224adaba17de30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3456-3470 | libs/agno/agno/learn/stores/entity_memory.py:3506-3520"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3456}}}],"partialFingerprints":{"codehealthFindingId/v1":"74960383783c09c8a329914da5c97726ed4b0dbebe9395eae0abb1dd74d9c109"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/memory/manager.py:1354-1368 | libs/agno/agno/memory/manager.py:1478-1492"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1354}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df8aef7c717ed33cfdccfddec7464c4ea06b9fcb39c9966e452c3a14c81759d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/models/aws/bedrock.py:450-464 | libs/agno/agno/models/aws/bedrock.py:480-494"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"64301ddce644911adb56ec6b638ff3f3ae94b89785f80a915ee032be637bff6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/models/aws/claude.py:206-220 | libs/agno/agno/models/vertexai/claude.py:129-143"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/claude.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"6419192920b45aebb543e264b9d24aa5247214254a8e5329b64a33b5643231d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/models/base.py:938-953 | libs/agno/agno/models/base.py:1750-1764"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccbade367f877088949fbfcdc453ed0c444021bb33c2ebf68764859c338361f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/models/base.py:1447-1461 | libs/agno/agno/models/base.py:1726-1740"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc4066ff82f20541fabdd0830502287afd1da1962c41212037f4e550f031d378"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/models/moonshot/moonshot.py:84-98 | libs/agno/agno/models/xiaomi/mimo.py:68-82"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/moonshot/moonshot.py"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf59301706345f20ba65caf6b31b51039c827250bb6e9b984dd12d703d9c9977"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:106-120 | libs/agno/agno/os/interfaces/a2a/router.py:415-429"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"373c64438e3091404d66e6df1d3ea2bbd2c915e5603445d1f697e2199905bf90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/evals/utils.py:162-176 | libs/agno/agno/os/routers/evals/utils.py:222-236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c8cffbf5bad090277a49d50877dc02db4fa4791b86e11ead906ab5e01920cc8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:200-214 | libs/agno/agno/os/routers/knowledge/knowledge.py:362-376"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ca9819ff56cad0426cd3ab2f4e448ebf40c327a509c5d3d017fff72dcb3942d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/learnings/router.py:111-125 | libs/agno/agno/os/routers/learnings/router.py:127-141"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/learnings/router.py"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4813016672268d7b4c2b11181850bde0e9e21fa4029f53c0d80ce1b89546f6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/memory/memory.py:142-156 | libs/agno/agno/os/routers/memory/memory.py:327-355"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/memory/memory.py"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"397a831c9785a1cabaf9fb1c6c92ef7403b0c9807b48e8b5b96641d46ea620cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/registry/registry.py:182-196 | libs/agno/agno/os/routers/registry/registry.py:244-259"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/registry/registry.py"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ad6ea3235afd096e639ec2902595af1562a41d2bac0f122c63e52e829e7c07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): libs/agno/agno/os/routers/teams/router.py:189-203 | libs/agno/agno/os/routers/teams/router.py:492-506"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb108930e1b4875c038b0ca3a45c16fb39840882b88d8adf7351f49feb479ca4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 8): libs/agno/agno/db/migrations/v1_to_v2.py:402-416 | libs/agno/agno/db/mongo/mongo.py:2095-2108 | libs/agno/agno/db/mysql/async_mysql.py:2418-2431 | libs/agno/agno/db/mysql/mysql.py:2440-2453 | libs/agno/agno/db/postgres/async_postgres.py:2348-2361 | libs/agno/agno/db/postgres/postgres.py:2824-2837 | libs/agno/agno/db/sqlite/async_sqlite.py:2311-2324 | libs/agno/agno/db/sqlite/sqlite.py:3255-3268"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/v1_to_v2.py"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"571b44c8e54f4b076317829ecd5719abe5c874c94d9c28d4a36c8f527e1b581c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): cookbook/07_knowledge/09_archive/vector_dbs/clickhouse.py:110-123 | cookbook/07_knowledge/09_archive/vector_dbs/milvus_db.py:85-98 | cookbook/07_knowledge/09_archive/vector_dbs/mongo_db.py:114-127 | cookbook/07_knowledge/09_archive/vector_dbs/qdrant_db.py:95-108"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/09_archive/vector_dbs/clickhouse.py"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"164306b46b9a07ba6136d516790386b49d017b63028cff0863366b2fe8302b6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): libs/agno/agno/knowledge/reader/pdf_reader.py:398-411 | libs/agno/agno/knowledge/reader/pdf_reader.py:422-436 | libs/agno/agno/knowledge/reader/pdf_reader.py:448-461 | libs/agno/agno/knowledge/reader/pdf_reader.py:469-483"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/pdf_reader.py"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0c3ebcc4a78be4f1f39760209de262419e00134ca8a25347884099f1de3e77b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): libs/agno/agno/models/azure/openai_chat.py:152-166 | libs/agno/agno/models/cerebras/cerebras.py:152-165 | libs/agno/agno/models/groq/groq.py:121-134 | libs/agno/agno/models/meta/llama.py:120-133"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/azure/openai_chat.py"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d74aa95a504eec99894cdad37f505dd79e3686cd0cd90dc9c2841386f8107f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): libs/agno/agno/models/base.py:259-272 | libs/agno/agno/models/base.py:307-321 | libs/agno/agno/models/base.py:358-372 | libs/agno/agno/models/base.py:411-425"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3f9953b7dc121918eb17916492e405444ef267069d05f97c5b2df1b60b7d9e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): libs/agno/agno/models/openai/chat.py:435-448 | libs/agno/agno/models/openai/chat.py:525-538 | libs/agno/agno/models/openai/chat.py:612-625 | libs/agno/agno/models/openai/chat.py:701-714"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/chat.py"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb19a741b8d75dcc0cf10322017034d9007ff404bb946f524590b707001cbf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): cookbook/02_agents/14_advanced/cancel_run.py:104-117 | cookbook/03_teams/14_run_control/cancel_run.py:104-117 | cookbook/04_workflows/06_advanced_concepts/run_control/cancel_run.py:103-116"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/14_advanced/cancel_run.py"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"9006e6450c4e28df1f5a4d14f2da7e5ae5f5d5927b6b43b63889df6515558f38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): libs/agno/agno/agent/_response.py:1688-1701 | libs/agno/agno/agent/_tools.py:718-731 | libs/agno/agno/agent/_tools.py:832-845"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1688}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8bb92286747c8023a1a72b049e5474426f695d2a05bf2e2cee28104499a4c9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): libs/agno/agno/culture/manager.py:184-197 | libs/agno/agno/culture/manager.py:224-237 | libs/agno/agno/memory/manager.py:441-454"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/culture/manager.py"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1189e9c444fe96131ff25b74eb21fc11f03d27dff0deb6b4b736bfda100dc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): libs/agno/agno/db/dynamo/dynamo.py:466-479 | libs/agno/agno/db/dynamo/dynamo.py:1663-1676 | libs/agno/agno/db/dynamo/dynamo.py:1971-1984"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"38448ed8b65c7dae0a865bfe514ecaadea5c6c03a657ef5b59f2155f5e5cf05c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): libs/agno/agno/learn/schemas.py:480-493 | libs/agno/agno/learn/schemas.py:622-635 | libs/agno/agno/learn/schemas.py:1112-1125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"7939cda3cb49b7fa195bc4d7f02b01fcccef7ed61ac060da9829e341f70726d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): cookbook/02_agents/11_approvals/approval_async.py:94-107 | cookbook/02_agents/11_approvals/audit_approval_async.py:80-93"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/11_approvals/approval_async.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"87beec4c00f7ec4c79a35cb73ba977606e12cf60c2c949fdff421f3bfb6a050a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/error/01_error_retry_skip.py:92-105 | cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:95-108"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/01_error_retry_skip.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecea867098cb38743507fb85ca1effbe22dcce3ce17d7476cf0a0a1413a09e38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): cookbook/10_reasoning/models/groq/fast_reasoning.py:24-39 | cookbook/10_reasoning/models/groq/fast_reasoning.py:46-59"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/models/groq/fast_reasoning.py"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"1916dbcc22e5bf95fd7d06c4911c7c28640ca56f65ca6af0763a9f960e642726"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): cookbook/10_reasoning/models/ollama/local_reasoning.py:22-35 | cookbook/10_reasoning/models/ollama/local_reasoning.py:39-52"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/models/ollama/local_reasoning.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"38795f241572159e2c3db22f2c06e90caa90acbc81c997b6ac26078daff5a8ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py:114-127 | cookbook/10_reasoning/tools/capture_reasoning_content_reasoning_tools.py:71-84"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4e54eec003cf80777162283abe553f5019a3c3470346c5c207ba5d4069aed4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_cli.py:269-282 | libs/agno/agno/agent/_cli.py:315-328"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_cli.py"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"5962ad036b5eb197b237e9a9bde393f7ba37ee528be1922c0d5f80c9a3674263"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_managers.py:57-70 | libs/agno/agno/agent/_managers.py:112-125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"04a113e1174f9217273bf5f78346d90a0303022a2b6bbb5ee449a06a035aa154"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_response.py:1835-1848 | libs/agno/agno/agent/_response.py:1866-1879"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1835}}}],"partialFingerprints":{"codehealthFindingId/v1":"37055469810dfa2d40fa2ca1044ec380f273e750a4976b0115823036043deed8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_response.py:1875-1888 | libs/agno/agno/agent/_response.py:1963-1976"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1875}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6d673eb593b6968ed5238b4ab5b00aede6c298616cf289c3f5691f4d901c14e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:246-259 | libs/agno/agno/agent/_run.py:311-324"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"16dc306f0694ad873af7dab51f5204a4c6fb0ceea964226f004859a9b0d2d23e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:659-672 | libs/agno/agno/agent/_run.py:1810-1823"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0f9763ddf273dcdd9e66a98f5028be7deb1c7a1c9d60ce6a70e8c2a157b2a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:1239-1252 | libs/agno/agno/agent/_run.py:2668-2682"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1239}}}],"partialFingerprints":{"codehealthFindingId/v1":"619c5abf9233710b413864d3098bbfd1548e05b17a192ee2a80a3b9ea7408b97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:2053-2066 | libs/agno/agno/agent/_run.py:4373-4386"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2053}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f094b0eb79d70d3eb05f5f0cb08fc4e8647f4d7ba790dccc3628174fcb64583"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:2131-2144 | libs/agno/agno/agent/_run.py:4458-4471"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7326d63253a23630b73ab4accdaaa4588e26fe053fbc16d64200b4ef56b5dab5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agent/_run.py:2898-2911 | libs/agno/agno/agent/_run.py:2931-2944"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":2898}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb5d17ff518d316e945f48e1a7aec504245571578d20069b01f97a421e1a2eb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agents/base.py:149-162 | libs/agno/agno/agents/base.py:270-283"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"69a7c1a8a468818748640e104912e89286b22ee408aef5a94fc0d079dcdba18e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agents/base.py:178-192 | libs/agno/agno/agents/base.py:299-312"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ee83df5068395063b91700f5aaf1d9b54f72d1a4e02a5ad6b198d9c94482f5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/agents/base.py:223-236 | libs/agno/agno/agents/base.py:341-354"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3422071512b6f70e71f6b28f41dd9b7a719744a2d8715d3c460bef17324e8ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:2137-2150 | libs/agno/agno/db/json/json_db.py:1314-1328"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2137}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d55f0f847ae08d757df847468edcc1fcb5970c0b96bca82f2927d8fcd40d21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:2525-2539 | libs/agno/agno/db/firestore/firestore.py:2112-2125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2525}}}],"partialFingerprints":{"codehealthFindingId/v1":"750338189a12b928faf377abd2130717ab6c6196c67c5ccb7a901f2060596d23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:2846-2859 | libs/agno/agno/db/dynamo/dynamo.py:2865-2878"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2846}}}],"partialFingerprints":{"codehealthFindingId/v1":"044695fc597aa8f99fae7f49f7336d333a0def72662d5024f07b37168a26c8a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/filter_converter.py:115-129 | libs/agno/agno/db/valkey/utils.py:263-276"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/filter_converter.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93f3d7f8c4dbccd6346944574d9780a5acdaf94911658ad7df632e88547a2fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:444-459 | libs/agno/agno/db/firestore/firestore.py:926-939"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"478e815052ffb9b880c60a18c8af395779dde59a39f658888d442671aa6f3792"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:773-786 | libs/agno/agno/db/firestore/firestore.py:1684-1697"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec8617d782e0c42c2fadc1ebcaa5e8b8befffa1174c1f6b54a5f907f20908966"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1461-1474 | libs/agno/agno/db/json/json_db.py:1446-1459"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1461}}}],"partialFingerprints":{"codehealthFindingId/v1":"94f9eb11661aa36496325400e2ef3f9dfbcab4fcf53f3cbe3e0022f4cb195878"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1710-1723 | libs/agno/agno/db/json/json_db.py:1686-1699"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1710}}}],"partialFingerprints":{"codehealthFindingId/v1":"4efe77dda92b745ae880c29a9e3d83ac7b7f404eb66ead2c7f03912129920460"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1426-1439 | libs/agno/agno/db/mongo/mongo.py:1210-1223"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a4566dc8bf9448cf7caa419cfff6a750665f192e85844c84accd236ab21ef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1659-1672 | libs/agno/agno/db/mongo/mongo.py:1442-1455"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1659}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a9163d7507c781b83e74b7fe5fc3e446ffd22c6af2bc427766f4fb78fc2251"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2335-2348 | libs/agno/agno/db/mongo/mongo.py:2173-2186"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2335}}}],"partialFingerprints":{"codehealthFindingId/v1":"754ec95e0d9dc4a0925c35b1f4b1fe9df35e3db60e67cfca461df518db02a1e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2584-2597 | libs/agno/agno/db/mongo/mongo.py:2422-2435"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2584}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c8a1b57c9e92982a187ac43e84cf35500d968818744222beacba2c1466b3408"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2626-2639 | libs/agno/agno/db/mongo/mongo.py:2464-2477"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2626}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c60c8ac9904dfcaf40200ec9e60c7587c399eae10a0888a73b5da2c58b4e5a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mongo/mongo.py:2360-2373 | libs/agno/agno/db/mongo/mongo.py:2458-2471"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2360}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e4893b5028ef791576206caa9daa6978b6412bcb22fdec5df1cc66e6cbba1b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:185-198 | libs/agno/agno/db/mysql/mysql.py:180-193"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4cf0c8e4a0cbbdd3470edafcfbfe3a0fb10ce2b5e7440731cff006f5c8e7ae9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:249-262 | libs/agno/agno/db/postgres/async_postgres.py:321-335"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"888a60784c1e694bc89e332d2f954879d4fe2af6b0d6af348043bb1095d57c93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:382-395 | libs/agno/agno/db/postgres/async_postgres.py:486-499"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8daf8ba87072ed67dd8fbfe8cda624fe807b535f0114fe9f45ce87144915eeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:775-788 | libs/agno/agno/db/postgres/async_postgres.py:903-916"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"330545ab4dfd3b4f51c7e77343456fd06c19acb2a13b7879bc88eda24c46008c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:828-841 | libs/agno/agno/db/postgres/async_postgres.py:944-957"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ed5982405ea0dd4742f1bcdca4a260d1885456dbae145c9d4fe7aa86aaaa1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1472-1485 | libs/agno/agno/db/postgres/async_postgres.py:1398-1411"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1472}}}],"partialFingerprints":{"codehealthFindingId/v1":"f11d128183acaa5ed3501c79ea4c4e4068592a90a5fd54138960c49396a4772f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2249-2262 | libs/agno/agno/db/postgres/async_postgres.py:2173-2186"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2249}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9055213aed4be45e9ce8dfb4a48edd77674960216ff786937a03249fd2b8659"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:240-253 | libs/agno/agno/db/sqlite/async_sqlite.py:238-251"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"a256c1f6ffcbd21d06d8c3a7dd267f364efa9be71905d4063cab9ded99032bae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:801-814 | libs/agno/agno/db/postgres/postgres.py:988-1001"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e012db0c6ec87eebe10d1de93e65db319f3ba5cf9ce87179d8fdb06269cca4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3931-3944 | libs/agno/agno/db/sqlite/async_sqlite.py:4048-4061"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3931}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb45265c9d763b9aae8ddd01d80407e73ee35ac4f20062571b8eaab5970cc31c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5324-5337 | libs/agno/agno/db/sqlite/sqlite.py:5176-5189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5324}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d540b8a0baca93d58949209e3e607c74f5ed370c32d8b5c3076ce1a0853c531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:921-934 | libs/agno/agno/db/valkey/valkey.py:1192-1205"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"08c8147b850666682f361d56480fbd2ce7ea1a0623093d0be1ef2e301019f4c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1159-1173 | libs/agno/agno/db/valkey/valkey.py:1514-1527"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1159}}}],"partialFingerprints":{"codehealthFindingId/v1":"c47c32558dc043f9cac4183a843611f5895c21abc66330734d76997fc8524fcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1290-1303 | libs/agno/agno/db/valkey/valkey.py:1685-1698"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1290}}}],"partialFingerprints":{"codehealthFindingId/v1":"eae8cf946a15192f1af5dda9d5c4404b063bfa5e65ed22e70f34a43f2351a022"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1487-1500 | libs/agno/agno/db/valkey/valkey.py:1917-1930"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1487}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3170ed0668c3be884148d3d59e036354dad5bacd20e213bc5866855d326955"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1801-1814 | libs/agno/agno/db/valkey/valkey.py:2091-2104"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1801}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e5b0d3fb67f07305473893472129a13b408ae180d0016d60814b15c34a7bad8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1247-1260 | libs/agno/agno/db/sqlite/sqlite.py:1439-1452"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae66d0d55bb24c397072de8def868d0579670b16dc1b37eacd69174abaf06fb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1507-1520 | libs/agno/agno/db/sqlite/sqlite.py:1697-1710"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"c98b7efe02005c7106b682ad6457b4a950014d03b45350339782d71a88e4b4a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:2555-2568 | libs/agno/agno/db/sqlite/sqlite.py:3503-3516"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2555}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b99903d3a85dcdcd8698abc4e2c5c2e6f5305999b407443c54e616191504e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:3426-3439 | libs/agno/agno/db/sqlite/sqlite.py:4624-4637"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3426}}}],"partialFingerprints":{"codehealthFindingId/v1":"360c3329aa5a6a7d044d73aac477dcc1307bab27e1672bd07c92db4106c7fcef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/db/surrealdb/surrealdb.py:1684-1697 | libs/agno/agno/db/surrealdb/surrealdb.py:1775-1788"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1684}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ccd2b7cd120250b94eed238714da56ccd3aac6ef5bd02d0a5af5fbff29a0125"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/eval/performance.py:108-121 | libs/agno/agno/eval/performance.py:153-166"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a57e33a41651b831c4d26cec4b7d31f0eda5c574b3f881d030a94114949089a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/eval/performance.py:527-540 | libs/agno/agno/eval/performance.py:672-685"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"2180fae87446e8d787610d54a1c108a17e77cb9e1c20c5a4e23fb7cbcfc19bf1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/guardrails/pii.py:62-75 | libs/agno/agno/guardrails/pii.py:86-99"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/guardrails/pii.py"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"628d7332bf03bd8cc82a13eaba42ae9625e381c9e6c6bea3ff7e1797e620b41d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:300-313 | libs/agno/agno/knowledge/knowledge.py:449-462"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaaf6c40316dc35bbffd252234c34b55fafd5f31200ffa3be4cccdc8ba439aec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1526-1539 | libs/agno/agno/knowledge/knowledge.py:1680-1693"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1526}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cd3f8406180193f1fc1dc55c4a41942e5f4968fd00cd8b75e95b7a9fb94ba8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1571-1584 | libs/agno/agno/knowledge/knowledge.py:1725-1739"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1571}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5791a4be45f7e3074f1892a1fa16b5990c00790591203ead1ae7226ca47c5a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1885-1898 | libs/agno/agno/knowledge/knowledge.py:1992-2005"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"30c0148c5d3067700844fb56e2b83d5a3096afe9f72b7aa932551feee0a4b365"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2037-2050 | libs/agno/agno/knowledge/knowledge.py:2098-2111"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2037}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e010d391f0950b0af30f888443d0ae5e3e86555b8bd6c722eef2c26677e0f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/loaders/azure_blob.py:272-285 | libs/agno/agno/knowledge/loaders/github.py:469-482"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"9359809dc02aa29160da804b0b74a840b44b3ffe5ceb4b69686e4392c7cf0127"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/loaders/azure_blob.py:416-429 | libs/agno/agno/knowledge/loaders/github.py:625-638"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/azure_blob.py"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"54ad25fa561820220e7bc3d821c4e47d5780cfd0f2958ff45fd3f0aea5ef5be8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:273-286 | libs/agno/agno/knowledge/loaders/sharepoint.py:389-402"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd661fe7bfb68be049782d8af10feaff415d0ff631a09dcdaf235dffa462136"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/learn/stores/decision_log.py:950-963 | libs/agno/agno/learn/stores/decision_log.py:987-1000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b91a97def606f39b87112c02d0d7cc84e10f6ad5431d0d42e6df2047248e3cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:1136-1149 | libs/agno/agno/learn/stores/learned_knowledge.py:1188-1201"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"1298e153c1abad9bdbb9b913ee252027c0c07562417fc134e10a876db58ebc5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/learn/stores/user_profile.py:872-885 | libs/agno/agno/learn/stores/user_profile.py:932-945"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_profile.py"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a7a6de65f1b2a968f3c74d1e0d8498c3cc64c72a50d08166c92ea520efdd773"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/azure/ai_foundry.py:220-233 | libs/agno/agno/models/azure/ai_foundry.py:258-271"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/azure/ai_foundry.py"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"284da25ad5f73596fc0f8fb0f4fd54e596b2204d0331bdee47e615fcc150a3a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/azure/openai_chat.py:133-148 | libs/agno/agno/models/meta/llama.py:103-116"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/azure/openai_chat.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"47890e603d4991113937ad4ce0a0ee4b4cf049fa659df6c1637f3b51bac17e19"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/base.py:2222-2235 | libs/agno/agno/models/base.py:2894-2907"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2222}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83747a0210197c5d8690026657bfc8c9455aab30dda48dd4872eba9adb9d8a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/base.py:2323-2337 | libs/agno/agno/models/base.py:2523-2536"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2323}}}],"partialFingerprints":{"codehealthFindingId/v1":"c77d71a8ca5ab22eaa3f1055f4fee8fdeaa8bc7a7b536bdfc0ad13dbef952efa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/cerebras/cerebras.py:135-148 | libs/agno/agno/models/groq/groq.py:104-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"72a9a3e171046556d3c0e6061cade5b38c2d6704fe58db21535eae8806720540"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/cohere/chat.py:216-229 | libs/agno/agno/models/cohere/chat.py:282-295"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cohere/chat.py"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f6699033d65e7db978b689cce6039af075ddbf53b6282058967efeea9ddf56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:437-450 | libs/agno/agno/models/google/gemini.py:492-505"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"a229531067d8fa25cee3a7d501a529bdb32f99ed5f7009122457fd8d3d4c8ea8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:461-474 | libs/agno/agno/os/interfaces/a2a/router.py:656-669"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"34fa0352a7ffe9e90e0a3da562f41ad665764149bd91e019efd65a4e6a7720c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:764-777 | libs/agno/agno/os/interfaces/a2a/router.py:847-860"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb24d302fa65ca42382e106786d2c5e54a3a9a8e0793bfa55f25f419b393ed83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:927-940 | libs/agno/agno/os/interfaces/a2a/router.py:1040-1053"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":927}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0b4026e6fdd5c8243a76f96f8773687a1c496194c3acd7d6050be62f49eea3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:720-733 | libs/agno/agno/os/routers/agents/router.py:768-781"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cdac00ed7ec7324f0eda6355b4c0a75b8bbbef59d57cc334807bf1e93314e01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:840-855 | libs/agno/agno/os/routers/teams/router.py:819-832"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":840}}}],"partialFingerprints":{"codehealthFindingId/v1":"42447e1b7cf1311818596f5f36d524d996b57f947c19ad04535bd997cc9cfa07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/components/components.py:229-242 | libs/agno/agno/os/routers/components/components.py:542-555"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ecda7e7a8ba694b3a08025c28e4fd70b1b8d09140d1e93ae7be98216f8e975"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/components/components.py:470-483 | libs/agno/agno/os/routers/components/components.py:493-506"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"662eedcbca9063e451432aa680801f16efecb21e3d79d48ab47b988e7f455284"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/teams/router.py:116-129 | libs/agno/agno/os/routers/teams/router.py:428-441"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab4563acbcb60712b79ecc08667d9611d90431c97e5ac20cf2dcffc049fdaf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): libs/agno/agno/os/routers/teams/router.py:705-718 | libs/agno/agno/os/routers/teams/router.py:750-763"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/teams/router.py"},"region":{"startLine":705}}}],"partialFingerprints":{"codehealthFindingId/v1":"c292e179e4998c3f6754458a63dddd227acc9c05d66ee72b8952fb13f3d7a2b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 8): cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/01_step_confirmation_and_tool_confirmation.py:114-126 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/02_step_user_input_and_tool_confirmation.py:124-136 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py:144-156 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/04_router_selection_and_tool_confirmation.py:150-162 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py:108-120 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/06_loop_confirmation_and_tool_confirmation.py:127-139 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/07_router_confirmation_and_tool_confirmation.py:143-155 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py:229-241"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/01_step_confirmation_and_tool_confirmation.py"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2c2a1687ed4678d9320507fd68850169d26f19a8137aeac8d8021d8882bca3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): libs/agno/agno/db/mysql/async_mysql.py:2053-2065 | libs/agno/agno/db/mysql/mysql.py:1846-1858 | libs/agno/agno/db/singlestore/singlestore.py:1880-1892 | libs/agno/agno/db/sqlite/async_sqlite.py:1952-1964 | libs/agno/agno/db/sqlite/sqlite.py:2142-2154"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2053}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5d008ee3b7ac791a294984844d957ea505ec305bfd1f36b34698952886d6618"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:618-630 | libs/agno/agno/db/postgres/postgres.py:927-939 | libs/agno/agno/db/singlestore/singlestore.py:685-697 | libs/agno/agno/db/sqlite/sqlite.py:912-924"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f19e0cb0087d43975ff3e102dc27f7146bc0497c4848f189ee8d5c9fad5ae3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1704-1716 | libs/agno/agno/db/postgres/postgres.py:2027-2040 | libs/agno/agno/db/singlestore/singlestore.py:1741-1753 | libs/agno/agno/db/sqlite/sqlite.py:1985-1997"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1704}}}],"partialFingerprints":{"codehealthFindingId/v1":"288cef0bb333d69af9a56ee67c9ebff18484a6a2ae7576c7998738c63a4ca4c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1987-1999 | libs/agno/agno/db/postgres/postgres.py:2340-2352 | libs/agno/agno/db/singlestore/singlestore.py:1991-2003 | libs/agno/agno/db/sqlite/sqlite.py:2258-2270"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1987}}}],"partialFingerprints":{"codehealthFindingId/v1":"5672df138f3b29a7d7dadf5dfe465ac9b29f3f1e6e97c2aa110392a574410c59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2009-2021 | libs/agno/agno/db/postgres/postgres.py:2364-2376 | libs/agno/agno/db/singlestore/singlestore.py:2014-2026 | libs/agno/agno/db/sqlite/sqlite.py:2281-2293"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2009}}}],"partialFingerprints":{"codehealthFindingId/v1":"ede2fe078b42f1548c35d069eec7b14580459e5c79a4aa5bcde6d69372df70db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2342-2354 | libs/agno/agno/db/singlestore/singlestore.py:2351-2363 | libs/agno/agno/db/sqlite/async_sqlite.py:2485-2497 | libs/agno/agno/db/sqlite/sqlite.py:3433-3445"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2342}}}],"partialFingerprints":{"codehealthFindingId/v1":"2564af58bef3af457e0ca18cac8669f4824728902442185d7e6ea3e50196ca8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): libs/agno/agno/learn/stores/learned_knowledge.py:1185-1197 | libs/agno/agno/learn/stores/session_context.py:633-645 | libs/agno/agno/learn/stores/user_memory.py:845-857 | libs/agno/agno/learn/stores/user_profile.py:930-942"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":1185}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb5e322ec1c7adf326408d76e3e3a5741f1df1a2c6cc77f09c9bcc3f2ba23f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): cookbook/05_agent_os/21_factories/01_basic.py:98-111 | cookbook/05_agent_os/21_factories/05_team_factory.py:106-121 | cookbook/05_agent_os/21_factories/06_workflow_factory.py:112-124"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/21_factories/01_basic.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"c63727c3c4b2b3c9124eaeee5c2812751c5110e47e98a8f7c4b66d98b987af7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): libs/agno/agno/db/mongo/async_mongo.py:2872-2884 | libs/agno/agno/db/mongo/async_mongo.py:2888-2900 | libs/agno/agno/db/mongo/async_mongo.py:3048-3060"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2872}}}],"partialFingerprints":{"codehealthFindingId/v1":"e092701bfb5efed533d135a86dc9d71bc0e7c9c5164a78af472e2278e7108c00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): libs/agno/agno/db/postgres/async_postgres.py:901-913 | libs/agno/agno/db/postgres/async_postgres.py:942-954 | libs/agno/agno/db/postgres/async_postgres.py:983-995"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"925f24b559863c21777b14e1b2ca820fa6eb4c74799bf7c2790c3e7c824311bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): libs/agno/agno/models/anthropic/claude.py:735-747 | libs/agno/agno/models/anthropic/claude.py:846-858 | libs/agno/agno/models/anthropic/claude.py:897-917"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"22a2475acc6b0d323886f7bc4e799acb439360812d0f3209ddefce5954808aa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): libs/agno/agno/models/aws/claude.py:233-258 | libs/agno/agno/models/azure/claude.py:163-175 | libs/agno/agno/models/vertexai/claude.py:156-181"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/claude.py"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4851a6089651890198b667d9da28e9ee8501a16d2a25f75727e7e9ea7f0c24b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): libs/agno/agno/os/interfaces/a2a/router.py:148-160 | libs/agno/agno/os/interfaces/a2a/router.py:457-469 | libs/agno/agno/os/interfaces/a2a/router.py:760-772"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"850b5c4a05edc587fd4986cc9832342e76e2a88055e72c69be6d6cf4dd3b7228"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/02_agents/09_hooks/post_hook_output.py:72-84 | cookbook/03_teams/13_hooks/post_hook_output.py:106-118"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/09_hooks/post_hook_output.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"22dddf574e347637fd1bfedd15f66e951782c3d2e375d1c486fdfb8f729e8d4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:134-146 | cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:166-178"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"68083cc9f2a039e2190d29b5042433454c6e99e9d2f72bc9bdd09ab8575ddd8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/05_agent_os/05_human_in_the_loop/audit_record.py:90-103 | cookbook/05_agent_os/05_human_in_the_loop/with_approval_record.py:113-125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/audit_record.py"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc4cabd77bc594b46045152d4d220ccb622ea454812b2e4e939bd68e9c15db9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/08_learning/08_custom_stores/02_custom_store_with_db.py:101-113 | cookbook/08_learning/08_custom_stores/02_custom_store_with_db.py:130-142"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/08_learning/08_custom_stores/02_custom_store_with_db.py"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"30ca7765701fd54dd8dcd355dc58703d43479a88fbd6e20ed531251a8a421b56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/10_reasoning/models/anthropic/basic_reasoning.py:34-46 | cookbook/10_reasoning/models/gemini/basic_reasoning.py:31-43"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/models/anthropic/basic_reasoning.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d18d853fe0fe6332120cf4d00bf28e185d25465c517bf8bdac5f222163df85c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): cookbook/12_context/14_wiki_filesystem.py:70-82 | cookbook/12_context/15_wiki_git.py:90-102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/12_context/14_wiki_filesystem.py"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca6100b3066e4f46ad563a3e305a0a212c19dfa62a7f3e1c2a5995f9f1c629de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/agent/_default_tools.py:484-496 | libs/agno/agno/agent/_default_tools.py:539-551"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fc58546ff28c15296d4a1b015f145d27a19aeaf7f02a5e85ebe1cd2fe845eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/agent/_response.py:795-807 | libs/agno/agno/agent/_response.py:834-846"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":795}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fdaf161df7a01ef64c5432eb2696cb1c11f83cb8b11d16991b250f85e064d40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/agent/_run.py:1039-1051 | libs/agno/agno/agent/_run.py:1090-1102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d829c9ebf7f087bcb521d6393f318696cf755f7d4e25244ed87028c6f443cbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/agent/_run.py:4036-4048 | libs/agno/agno/agent/_run.py:5455-5467"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4036}}}],"partialFingerprints":{"codehealthFindingId/v1":"09c1210791b8d5596ce720c41eebf9c3490352fcbf3127be95cbac0f7ef03d62"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/culture/manager.py:332-344 | libs/agno/agno/memory/manager.py:950-962"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/culture/manager.py"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a1765bb75dfbe1b28b822364b2792df33ceb64ffb0f34c90945ae1f79da9f75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/culture/manager.py:502-514 | libs/agno/agno/culture/manager.py:558-570"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/culture/manager.py"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"e399cc2a356be8863f997ba6262fb8e9b095687b3ebfaea775be0fd3ef115874"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:530-542 | libs/agno/agno/db/json/json_db.py:645-657"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0fd81d89e30933a541da2c63b9b39eb73d53b4ce8916b75b079c4b340d4b773"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:897-909 | libs/agno/agno/db/json/json_db.py:1030-1042"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":897}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0654439e68f671a19b7f288ff0c99fac73a6bf61e36422dc78fc8d1d3bb48ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/in_memory/in_memory_db.py:1047-1059 | libs/agno/agno/db/json/json_db.py:1208-1220"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"980d4699236e007a97222a48e3b9eb4681951112779520fa1253b02df87fd476"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_5_6.py:602-614 | libs/agno/agno/db/migrations/versions/v2_5_6.py:690-702"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_5_6.py"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e3429854994199fadc90740785d5e449b1163d8c5b24a2e282c263aad861249"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2276-2288 | libs/agno/agno/db/mongo/mongo.py:2056-2068"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2276}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed560b83d0c995b1276302d5c044a2e74fa399cf0aa2b20de44849c69b40fdb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2528-2540 | libs/agno/agno/db/mongo/mongo.py:2366-2378"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2528}}}],"partialFingerprints":{"codehealthFindingId/v1":"56e4a6184e8edcca2c307cc6806f12ff2ce935c2a6937abc0812b4b26ba0422c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2844-2856 | libs/agno/agno/db/mongo/mongo.py:2682-2694"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2844}}}],"partialFingerprints":{"codehealthFindingId/v1":"9369f260aad50b16a65950d4d83d58e5a9c12f8d8db650b397d8b9044b4b5030"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:3308-3320 | libs/agno/agno/db/mongo/mongo.py:3079-3091"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":3308}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb3243d8769d1e702435b1a71f0ce583dcc3d2763ecb6cfa173a057abbb3dd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:458-470 | libs/agno/agno/db/postgres/async_postgres.py:572-584"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3ca3cb20d6fca0b7c4ae03063d61b659c50ca78dce956bf6c83257efb1a75c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1300-1312 | libs/agno/agno/db/postgres/async_postgres.py:1217-1229"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e6f8787c91a94472d037c077347fd928e1a600a0a5d8f60bdc16160dc95a845"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1669-1681 | libs/agno/agno/db/mysql/mysql.py:1445-1457"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"50182432cbeadb768ac54e44184c4dcf086da4024f669a11c04e1fb47ea2f37c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2329-2341 | libs/agno/agno/db/postgres/async_postgres.py:2255-2267"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2329}}}],"partialFingerprints":{"codehealthFindingId/v1":"f55fdbf17734b9b70a085e253094cf676fe80e4fa3f508e915e8ed621b6c811b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2397-2409 | libs/agno/agno/db/singlestore/singlestore.py:2406-2418"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2397}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5e1344db1030ecac47c266d15f92b129805a3ee1275ffb2be68be03d33a7912"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2875-2887 | libs/agno/agno/db/singlestore/singlestore.py:2837-2849"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2875}}}],"partialFingerprints":{"codehealthFindingId/v1":"341784e2270804ddcc4b38029ee2ed4ca1b40e75941792a1676d66a3e9c54e7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1869-1881 | libs/agno/agno/db/sqlite/async_sqlite.py:1874-1889"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1869}}}],"partialFingerprints":{"codehealthFindingId/v1":"fba5861fa008d0cbd74375301dfd6950885187662c073cddbd106253e7c46b88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2105-2117 | libs/agno/agno/db/sqlite/async_sqlite.py:2067-2079"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2105}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc621ceb4624f67c58cfe7fdf134a32d3e4819317bec88255000e535a5328f27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2128-2140 | libs/agno/agno/db/sqlite/async_sqlite.py:2090-2102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2128}}}],"partialFingerprints":{"codehealthFindingId/v1":"482a218b57367723e82a230c5f5815b94f8c28bc85c979e6f647d4b2aea25f38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3836-3848 | libs/agno/agno/db/postgres/postgres.py:5235-5247"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3836}}}],"partialFingerprints":{"codehealthFindingId/v1":"1206335fd51c9a09845d0dcb87f8ecf32eb374c04b7d72be119bad0ab7b0ddbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4131-4143 | libs/agno/agno/db/sqlite/async_sqlite.py:4248-4260"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2cdee2bdbffe2b152975ef54de849b6fccbee90ee38d42b24109645b28bac90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4278-4290 | libs/agno/agno/db/sqlite/async_sqlite.py:4397-4409"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4278}}}],"partialFingerprints":{"codehealthFindingId/v1":"436adb46aad74e659079612b18f6d713a7b2fc4eec62bc63b97324fe1893217d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3209-3221 | libs/agno/agno/db/sqlite/sqlite.py:2833-2845"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3209}}}],"partialFingerprints":{"codehealthFindingId/v1":"ade2041aaf4b9b96502f2d3c9a07b0a9cbb990a7a44938134e69a7769caba383"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:2057-2069 | libs/agno/agno/db/valkey/valkey.py:2408-2420"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":2057}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93637a8da245d87f2729725f0e2775197c2622e31e8c364e13cb512856bdad4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:1738-1750 | libs/agno/agno/db/surrealdb/surrealdb.py:1178-1191"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1738}}}],"partialFingerprints":{"codehealthFindingId/v1":"016f6962f7fe8bd1053db9ce7c0af5e9009580c603463e226b2d751ab0de8c4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:732-744 | libs/agno/agno/db/sqlite/sqlite.py:923-935"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":732}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c51bb85621494073f18da262cebe7c8bbf84bd3e20d7112821b25b41f892d84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:3962-3974 | libs/agno/agno/db/sqlite/sqlite.py:5095-5107"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3962}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce10e795513edde430f029f7a1e8aaae7796dd8b4f7e167d0be9e05847da5ba2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:297-309 | libs/agno/agno/eval/accuracy.py:330-342"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bdeae5537a1fbbe0da5e7e5d8638f91304d2265e21ea015eba22637b3b58ef9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/eval/agent_as_judge.py:654-666 | libs/agno/agno/eval/agent_as_judge.py:800-812"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"414916059567a3fe8b9b6d3a02a19f515076f2a763722bcaf79872f6db885a6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/eval/reliability.py:324-336 | libs/agno/agno/eval/reliability.py:406-418"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/reliability.py"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f47a73e4d3d4aaeab5754d9ef09fd1ac2e2a0b54229f427d61aa916d3c64ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/embedder/aws_bedrock.py:462-474 | libs/agno/agno/knowledge/embedder/aws_bedrock.py:484-496"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/aws_bedrock.py"},"region":{"startLine":462}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8027d881206fb46c18f327897f152ef920e46cc0e85675f2be137dacb997aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/embedder/azure_openai.py:175-187 | libs/agno/agno/knowledge/embedder/openai.py:160-173"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/azure_openai.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"8971722ab39702534e0361db18d683a46cef1b07bd90c65d1a30bbd7ba8e3358"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/embedder/mistral.py:86-98 | libs/agno/agno/knowledge/embedder/mistral.py:113-125"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/mistral.py"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"82b7b1e346e4d99f1f1dacceb4c905b529457a00066c0b63e38a8d7a557d4458"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/embedder/mistral.py:150-162 | libs/agno/agno/knowledge/embedder/voyageai.py:132-144"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/mistral.py"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f0f7527d6adc5ca793bc516f71a52a77f929af41f047e002097b0faf9ed8bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1408-1420 | libs/agno/agno/knowledge/knowledge.py:1493-1505"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bf1192a5b8ca437e10e026b50548738498997f1e4616f6775eb5a8aa6a78ade"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1590-1602 | libs/agno/agno/knowledge/knowledge.py:1744-1757"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1590}}}],"partialFingerprints":{"codehealthFindingId/v1":"98dbf2ae89e901a04cbb850da49756643b765a7b1de05128d370030b090a5c00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1835-1847 | libs/agno/agno/knowledge/knowledge.py:1942-1954"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1835}}}],"partialFingerprints":{"codehealthFindingId/v1":"599771c11baf43ce5de1bc376535d61930842e7665bbadd77c8d6b4eabe59656"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/loaders/s3.py:107-119 | libs/agno/agno/knowledge/loaders/s3.py:207-219"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd8eb6a3e79d98764598ce81b8daf1d93746b8d49639f57d5b56dd36be78d0a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:115-128 | libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:193-205"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"90cb44338447b3e359032e54e2894b711eb01bb290e1d541cf287a63be4b55c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/reader/markdown_reader.py:112-124 | libs/agno/agno/knowledge/reader/text_reader.py:90-102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/markdown_reader.py"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d05ef16abd6d7d8935fbf8cb814894959c7c759970abe90de15cb5a0ec05635"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/knowledge/reader/website_reader.py:266-278 | libs/agno/agno/knowledge/reader/website_reader.py:377-389"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/website_reader.py"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"7507d33a16d09222a7933e4fe225e4407153be47919b03097afe22b6cd4260ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/schemas.py:988-1000 | libs/agno/agno/learn/schemas.py:1017-1030"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":988}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b14aacfda5a0e5e0e2cae67426d4e595add2feb315bced7a8f8387c697850cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:950-962 | libs/agno/agno/learn/stores/learned_knowledge.py:1029-1041"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e1c63d9286765b0b3be18d04af9fc6c75fc7390a72a3c9eea4207f1ce604e18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/stores/session_context.py:361-373 | libs/agno/agno/learn/stores/session_context.py:403-415"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f313dd38efaa538458e00756ad56bc694e48355c0d7a2c1fd48dce1664fe6e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/stores/session_context.py:1018-1030 | libs/agno/agno/learn/stores/session_context.py:1159-1171"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":1018}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f27bfd04cf0deca5dffec66d5d0bb7ad500b5bebb2284c0d43b8e4a08c823c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1242-1254 | libs/agno/agno/learn/stores/user_memory.py:1393-1406"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1242}}}],"partialFingerprints":{"codehealthFindingId/v1":"8115829cdfadea53c15b42f42db4cc302d2de264d62f2325649296e78ab6bb9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1283-1295 | libs/agno/agno/learn/stores/user_memory.py:1436-1449"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1283}}}],"partialFingerprints":{"codehealthFindingId/v1":"957d2bbff02c84eae205201e2fd64d15c174ca9ef8c9225f635f5f5b7f55dd4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/metrics.py:515-527 | libs/agno/agno/metrics.py:798-810"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a9df4f0e3155ce5bfaa15f77d4b9d12587ca2b262c5e495c42bcd0cda15e4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:483-495 | libs/agno/agno/models/anthropic/claude.py:511-523"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce45de22328e20f89fdb14ac75ea05006f73fc54d4031c299d8aebda466bfdb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:982-994 | libs/agno/agno/models/anthropic/claude.py:1209-1221"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":982}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aaa52817393d721f89cc1e1a2545967197ca306806d213c66c4877670af394b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/azure/ai_foundry.py:299-311 | libs/agno/agno/models/azure/ai_foundry.py:337-349"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/azure/ai_foundry.py"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d753424211ce0ce6f4f84d82e0ba6db78fb83a351ee29366370d257d28589c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/base.py:2201-2213 | libs/agno/agno/models/base.py:2748-2760"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2201}}}],"partialFingerprints":{"codehealthFindingId/v1":"62866c7c8ce898a96973c54c86e0a5516256b30fbbfc747d63eea60d1af5ef89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/base.py:2241-2255 | libs/agno/agno/models/base.py:2924-2936"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2241}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ea0ddddac4aa387677359cbb5f1a6cda223994755383d5c52619faa70f0cdb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:620-632 | libs/agno/agno/models/google/gemini.py:738-750"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eca245f0d31b787a21e55cbf45de423fb94b59a76ffb00f129a6e99e4f9097e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/huggingface/huggingface.py:435-447 | libs/agno/agno/models/ibm/watsonx.py:364-377"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b72707551a3e2da4532a7fc15d3ac9c840a182496d77038dfda3f94a1194b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/meta/llama.py:281-293 | libs/agno/agno/models/meta/llama.py:314-326"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/meta/llama.py"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"93e10bd3acfe011c521dc20dbc821d08c0421df11d519c9f958f176ec08fa3af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/mistral/mistral.py:206-219 | libs/agno/agno/models/mistral/mistral.py:289-301"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/mistral/mistral.py"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"d382524e2f87b39214ad46bcdf218e8801e97a7ea418d9a77c97f9f2448c8a2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/ollama/chat.py:380-397 | libs/agno/agno/models/ollama/chat.py:421-433"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ollama/chat.py"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bd9839bb7616054dec292b1946ce89588c7d12f3c575088dc68ad7219c79e39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/models/openai/responses.py:1004-1016 | libs/agno/agno/models/openai/responses.py:1090-1102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"32be2d5496fd39977445c2c5b58d95113acdd71953b9aea71bdac7314ccc54f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/app.py:894-906 | libs/agno/agno/os/app.py:911-923"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"1957cc36954880adb0ffbaf7bb535e521899cbd911807af207ed1ec1cb363531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/interfaces/agui/handlers.py:234-246 | libs/agno/agno/os/interfaces/agui/handlers.py:261-273"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/agui/handlers.py"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb6dcb752849c3412b5d4d1edf67557ca7f39a275b93ba905946c4fde008fe00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/interfaces/slack/router.py:125-140 | libs/agno/agno/os/interfaces/slack/router.py:177-189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/router.py"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"c632ec25c7a0094e3558e4456506eb96099c9398ba2f03678936dfa5c81ead89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:654-666 | libs/agno/agno/os/routers/teams/router.py:646-658"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4e919a47bc06f5d99ca38cb241b0fc09944d610b45ecf193d94ad1bdba178cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/routers/components/components.py:360-372 | libs/agno/agno/os/routers/components/components.py:518-530"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9ed6acde4c3a3286e70340c462178307a8dfb58c35e884480917cae8762a14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/routers/evals/evals.py:424-436 | libs/agno/agno/os/routers/evals/evals.py:450-463"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/evals.py"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb55c2cad6d02bf71f164ff5d30db03bb701f4e50452bfd2ed75dca0175b5e57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): libs/agno/agno/os/routers/registry/registry.py:295-307 | libs/agno/agno/os/routers/registry/registry.py:425-437"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/registry/registry.py"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"1969945602a7967371e5545f1455f6053f9045b4049a06d978c77d2929fc6524"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 9): cookbook/07_knowledge/09_archive/vector_dbs/clickhouse.py:95-106 | cookbook/07_knowledge/09_archive/vector_dbs/couchbase_db.py:221-234 | cookbook/07_knowledge/09_archive/vector_dbs/lance_db.py:60-73 | cookbook/07_knowledge/09_archive/vector_dbs/milvus_db.py:70-81 | cookbook/07_knowledge/09_archive/vector_dbs/pgvector_db.py:66-77 | cookbook/07_knowledge/09_archive/vector_dbs/pinecone_db.py:75-86 | cookbook/07_knowledge/09_archive/vector_dbs/qdrant_db.py:78-91 | cookbook/07_knowledge/09_archive/vector_dbs/singlestore_db.py:86-97 | cookbook/07_knowledge/09_archive/vector_dbs/upstash_db.py:69-80"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/09_archive/vector_dbs/clickhouse.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"9475ccf17e1f68cf13f38cf100a6ff29ac70108ce0dcff9bb5f2bdc3962798fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 7): libs/agno/agno/db/mysql/async_mysql.py:1816-1827 | libs/agno/agno/db/mysql/mysql.py:1600-1611 | libs/agno/agno/db/postgres/async_postgres.py:1680-1691 | libs/agno/agno/db/postgres/postgres.py:1919-1930 | libs/agno/agno/db/singlestore/singlestore.py:1643-1654 | libs/agno/agno/db/sqlite/async_sqlite.py:1689-1700 | libs/agno/agno/db/sqlite/sqlite.py:1879-1890"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1816}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab4409e8cb04f00eda723b8743f82871ab3d69fe9ed85cecf4aab3aa36338cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 7): libs/agno/agno/db/mysql/async_mysql.py:2795-2806 | libs/agno/agno/db/mysql/mysql.py:2814-2825 | libs/agno/agno/db/postgres/async_postgres.py:2788-2799 | libs/agno/agno/db/postgres/postgres.py:3262-3273 | libs/agno/agno/db/singlestore/singlestore.py:2770-2781 | libs/agno/agno/db/sqlite/async_sqlite.py:2975-2986 | libs/agno/agno/db/sqlite/sqlite.py:2885-2896"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2795}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7a9f1aa220003a19e8340ad4ca6bf729acba8d679a522242156d268d5aefd0d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 5): libs/agno/agno/db/firestore/firestore.py:1950-1961 | libs/agno/agno/db/gcs_json/gcs_json_db.py:1444-1455 | libs/agno/agno/db/json/json_db.py:1429-1440 | libs/agno/agno/db/redis/redis.py:1776-1787 | libs/agno/agno/db/valkey/valkey.py:2066-2077"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1950}}}],"partialFingerprints":{"codehealthFindingId/v1":"f129d055739e4512ebc3db5874bbb88017ef96d07115b296ce71384769e98f17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:1297-1309 | libs/agno/agno/db/postgres/postgres.py:1620-1632 | libs/agno/agno/db/singlestore/singlestore.py:1348-1360 | libs/agno/agno/db/sqlite/sqlite.py:1558-1569"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1297}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b6313cd0d249112b25de3de7c3bb7b57faf39c3cdc1ed0a91c663048996e12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2135-2147 | libs/agno/agno/db/postgres/postgres.py:2492-2504 | libs/agno/agno/db/singlestore/singlestore.py:2141-2153 | libs/agno/agno/db/sqlite/sqlite.py:2408-2419"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2135}}}],"partialFingerprints":{"codehealthFindingId/v1":"693a1b78faf42b9515840799a93d6ab9024063c3aaa52c67f39aaf4e3c4359ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): libs/agno/agno/db/mysql/mysql.py:2328-2339 | libs/agno/agno/db/postgres/postgres.py:2689-2700 | libs/agno/agno/db/singlestore/singlestore.py:2337-2348 | libs/agno/agno/db/sqlite/sqlite.py:3419-3430"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2328}}}],"partialFingerprints":{"codehealthFindingId/v1":"306f57a00deba108a157f8e90eb1a08b37d9643b90f482fe5331accca70cdfe2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): libs/agno/agno/knowledge/embedder/openai.py:67-78 | libs/agno/agno/knowledge/embedder/openai.py:103-114 | libs/agno/agno/knowledge/embedder/openai.py:124-135 | libs/agno/agno/knowledge/embedder/openai.py:165-176"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/openai.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"198a55fc8b91f86255d80af457fc104c0dadd3213dfec36dfb72cccdf942a56e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/client/os.py:735-746 | libs/agno/agno/client/os.py:1048-1059 | libs/agno/agno/client/os.py:1335-1346"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":735}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44b8457c575f032ae28adb41c6f25e7cfebcd75022e581bac95943d52f0ecdb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/db/mongo/mongo.py:2710-2722 | libs/agno/agno/db/mongo/mongo.py:2726-2738 | libs/agno/agno/db/mongo/mongo.py:2887-2898"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2710}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e639d1fb3a928cc767e51f6a3fc087bb49ff7d5677451c433bb739a87371324"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:1127-1138 | libs/agno/agno/db/postgres/async_postgres.py:1021-1032 | libs/agno/agno/db/sqlite/async_sqlite.py:1188-1199"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1127}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc0fdae2dcedfa121843164c227cda09f9855b1abcaec4928c4deaf1a9c6898"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:766-777 | libs/agno/agno/db/mysql/mysql.py:814-825 | libs/agno/agno/db/mysql/mysql.py:862-873"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb834c783c2452bb486067fbbc11a80cda98848382964d60d51d72f7b5a8207c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/db/sqlite/sqlite.py:1210-1221 | libs/agno/agno/db/sqlite/sqlite.py:1265-1276 | libs/agno/agno/db/sqlite/sqlite.py:1320-1331"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1210}}}],"partialFingerprints":{"codehealthFindingId/v1":"96549b33b2320033058357b6c2bb7608c94bc587e5fc36edbca03cb8b19943a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/db/surrealdb/surrealdb.py:1565-1576 | libs/agno/agno/db/surrealdb/surrealdb.py:1867-1878 | libs/agno/agno/db/surrealdb/surrealdb.py:1900-1911"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1565}}}],"partialFingerprints":{"codehealthFindingId/v1":"a578ed60c7e5591c34bba5cd098279a03dd57ed47e88a36c5254dfca3011fb66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/knowledge/embedder/google.py:126-137 | libs/agno/agno/knowledge/embedder/google.py:158-169 | libs/agno/agno/knowledge/embedder/google.py:211-222"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/google.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"047479722dbf15aceffb15b97a7912c8080bc01eacaf09f200b7ad5bf3b76d5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/models/message.py:166-177 | libs/agno/agno/models/message.py:190-201 | libs/agno/agno/models/message.py:211-222"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"75b83e73be927171adb317725cb27ccb70273dbfaf1bc48843bfcc154289c774"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): libs/agno/agno/os/interfaces/a2a/utils.py:661-672 | libs/agno/agno/os/interfaces/a2a/utils.py:698-709 | libs/agno/agno/os/interfaces/a2a/utils.py:735-746"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"5681e254e574b2f94499d133d1c0c1ee996a631992be87bdda658df044dfd5cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/02_agents/15_dependencies/dependencies_in_tools.py:25-49 | cookbook/03_teams/17_dependencies/dependencies_in_tools.py:47-58"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/15_dependencies/dependencies_in_tools.py"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdd696ccdefffede3f682285e8a5fc6b1e29c7467ee35f0d55719121ee22f54a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/02_agents/15_dependencies/dependencies_in_tools.py:54-67 | cookbook/03_teams/17_dependencies/dependencies_in_tools.py:72-83"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/15_dependencies/dependencies_in_tools.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d7b07cedad679ecf6ee63f66951e1105649eda6f698baea27e8cad3805c51d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py:144-155 | cookbook/03_teams/23_checkpointing/02_tool_error_persistence.py:127-138"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"e78305836cfa578161197aa88c4fd39d38da023a57b8306f919049d57318a454"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/03_teams/05_knowledge/04_team_with_custom_retriever.py:60-71 | cookbook/07_knowledge/09_archive/custom_retriever/retriever_with_dependencies.py:77-89"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/05_knowledge/04_team_with_custom_retriever.py"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0478adc475e5a9c15383b375fd93646c9042dd48c5474eba230e56a30b521d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/structured_io/structured_io_function.py:95-107 | cookbook/04_workflows/06_advanced_concepts/structured_io/structured_io_function.py:160-171"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/structured_io/structured_io_function.py"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"2867cbb32093d9e3b320859af2f15a187045622b7cfada6b9cf3f7771ed5c0df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/05_agent_os/05_human_in_the_loop/basic.py:88-101 | cookbook/05_agent_os/05_human_in_the_loop/with_approval_record.py:115-126"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/basic.py"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e5caee2f745f76d9274d38832f2b3ece65fadd9b2db9340617e495e00e0bdc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/05_agent_os/05_human_in_the_loop/external_execution.py:119-131 | cookbook/05_agent_os/05_human_in_the_loop/with_approval_record.py:116-127"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/05_human_in_the_loop/external_execution.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b8efe3a1974ab54876b4ecba0c0d6a4f989d6558330e5439a00f21c894d3f0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/05_agent_os/08_os_config/config_basics.py:102-113 | cookbook/05_agent_os/08_os_config/yaml_config.py:62-73"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/08_os_config/config_basics.py"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24807dc3adc3a49e46f4456e1922b4f6b8d3eb80167f902644d6a254e983665"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/91_tools/mcp/sse_transport/client.py:22-33 | cookbook/91_tools/mcp/streamable_http_transport/client.py:23-34"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/mcp/sse_transport/client.py"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"d56b932e9c1f52b24175118af43f0e02d1efff421c16d0352ed2fa1c380de2c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cookbook/data_labeling/_26_scale_out/basic.py:97-108 | cookbook/data_labeling/_26_scale_out/with_cost_tracking.py:107-118"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_26_scale_out/basic.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dd8d770f2e1a0d7d6435c5d085d9ca0878aa09ffff2cbee091b99a4f78ab629"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/agent/_default_tools.py:581-592 | libs/agno/agno/agent/_default_tools.py:640-651"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa7659b019240e56f2e68782b1bb7c68293d84364a40d24750597325c25cea23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/agent/_response.py:1078-1089 | libs/agno/agno/agent/_response.py:1238-1249"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_response.py"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"be2547e1f2fd54d8ca8d589594551aa6f5a4ee3a2342f062f4750f239bfee19f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/agent/_run.py:3745-3756 | libs/agno/agno/agent/_run.py:4867-4878"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3745}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8852599d1b3b276ae45d34690f0fd93c2cff5cc737638d1ab95184f8e6716ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/agent/_session.py:92-103 | libs/agno/agno/agent/_session.py:164-176"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea3d2da1dd7133ce9bca91cf10fe54d19a654f3abd990d466d6ef7612ed5d37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/agent/_tools.py:971-982 | libs/agno/agno/agent/_tools.py:1024-1035"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":971}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4bc9a3fe1ddbc47d756a5643a5381153a74c88bf92b7cf660c49970cd027fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/client/a2a/client.py:380-391 | libs/agno/agno/client/a2a/client.py:489-500"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"7801bab1c6d8785c153dd6aeb9157d07eb28f6f380db5b70323b5f912fa56f0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/compression/manager.py:92-103 | libs/agno/agno/compression/manager.py:196-207"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/compression/manager.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba29160be46f2f28b81e4942369f3e58828432eff9f207fca78eff707229a173"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:947-959 | libs/agno/agno/db/dynamo/dynamo.py:1018-1029"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":947}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76dc868babeb3de7a7e872344745c610a07b9a804112e6a757ae0eac731d272"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:1928-1941 | libs/agno/agno/db/dynamo/dynamo.py:2101-2112"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":1928}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb554bfc7312af9841069dbc9d200cb5ff8290d049bbbb0577932602367a2ed2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/filter_converter.py:99-113 | libs/agno/agno/db/valkey/utils.py:247-258"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/filter_converter.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1b226462467a95081397e232ebcb50c35edc5d7e2337c547308a5ddac5ee75d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:931-942 | libs/agno/agno/db/firestore/firestore.py:1824-1836"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":931}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed102771d76eacf3c6ddc76850502b247fefa382a49480c728085783f15e9c9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:871-882 | libs/agno/agno/db/json/json_db.py:872-883"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":871}}}],"partialFingerprints":{"codehealthFindingId/v1":"03cbdb6aecdb4ff379b01ad9ab5308eb6b34969b718e3f00be9d607cc508237d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/migrations/versions/v2_3_0.py:351-363 | libs/agno/agno/db/migrations/versions/v2_3_0.py:667-678"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cbff68e27bd58344182acd215753e718a04aada28691da635c4657f50a3c820"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1885-1896 | libs/agno/agno/db/mongo/mongo.py:1666-1677"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1885}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa00d0c7d5b460958d8e35ca127b62fddca261351c45743d41e5bc86229849fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:3114-3126 | libs/agno/agno/db/mongo/mongo.py:2938-2949"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":3114}}}],"partialFingerprints":{"codehealthFindingId/v1":"55cb637a968f205bf8462a36cea25700ace0b50cd068a452b33f7ee992613c53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:3374-3385 | libs/agno/agno/db/mongo/mongo.py:3141-3152"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":3374}}}],"partialFingerprints":{"codehealthFindingId/v1":"72c8d358ea73b8cbf9af764a0f160d7167d280273b96f5e139339b60168892e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1968-1979 | libs/agno/agno/db/postgres/async_postgres.py:1850-1861"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1968}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c449580318f9379cfe7c04ee2c6fb3bce32e560c4f8d85b0bce838a6a3bf17c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2377-2388 | libs/agno/agno/db/postgres/async_postgres.py:2309-2320"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2377}}}],"partialFingerprints":{"codehealthFindingId/v1":"856620e20c3552d0ab5fe6959bd72aa1a440532d5236e35d9d6af5189a998a2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:230-241 | libs/agno/agno/db/postgres/postgres.py:446-457"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2d7b1b07b1ae201c415685a70b2334804fef3a6386f5f7a6ca71f25f72576d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:410-421 | libs/agno/agno/db/singlestore/singlestore.py:476-487"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":410}}}],"partialFingerprints":{"codehealthFindingId/v1":"4406ddf569c4c686e9da1d52e3b90f720edf25cd02f5dfdaf12960a8405b9ecd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:957-968 | libs/agno/agno/db/singlestore/singlestore.py:1025-1036"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":957}}}],"partialFingerprints":{"codehealthFindingId/v1":"6efdbeb464cc3e9624d8573533fd8cc60a5dd1d8d76fc5fec8e4fc28ae539991"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1009-1020 | libs/agno/agno/db/singlestore/singlestore.py:1076-1087"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1009}}}],"partialFingerprints":{"codehealthFindingId/v1":"d62c674371fdd1aef899d6bca6f3236b0b778963f019508fba0512883c2f9a3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:1061-1072 | libs/agno/agno/db/singlestore/singlestore.py:1127-1138"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a9865b12cbd6c3633d5ee9ff911f220b682e364f98910bb0ddd46451e2533f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2795-2806 | libs/agno/agno/db/singlestore/singlestore.py:2751-2762"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2795}}}],"partialFingerprints":{"codehealthFindingId/v1":"25c4900d9039e6bb7045506bb628d7d07929a1a8dccf6698eae718ae9441ab08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:257-268 | libs/agno/agno/db/sqlite/async_sqlite.py:255-266"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"73adb96436fdebc48a51816ed21869ae82d797594f181f456ba10ce5d179b02f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:535-546 | libs/agno/agno/db/postgres/postgres.py:722-733"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"19bdb74d4addfee2748ce7fbe643ce4f78857813e0bc0b9656cf711080263838"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1452-1464 | libs/agno/agno/db/postgres/postgres.py:2752-2763"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1452}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba8aaae840856fc7ba6020de04196ae3562cfc853308911cdb0fc445d3ca16f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2075-2086 | libs/agno/agno/db/postgres/postgres.py:2310-2321"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2075}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bd9688192b288e8b277369d649db280befc70df23acfbc428102470c9dd2bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2452-2463 | libs/agno/agno/db/postgres/postgres.py:2928-2939"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2452}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d1cc6ce6f4c5648b259432db785bfee1fffe81147e9295d9716d1db41bfe10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3398-3409 | libs/agno/agno/db/sqlite/async_sqlite.py:3575-3586"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3398}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c6dd966751ccb03a87d5c7224664ad6cb4283d7edabafa44a1522c6e3682ccf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3753-3764 | libs/agno/agno/db/sqlite/async_sqlite.py:3863-3874"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3753}}}],"partialFingerprints":{"codehealthFindingId/v1":"99436d80c25354a0aecbb2b9422b0ef564789803adb37259442e86933be7a3e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:455-467 | libs/agno/agno/db/singlestore/singlestore.py:316-327"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"378d5d7b8ae21a8ad00e60dc041effb49eb80bd473075240ff3f694b4d22edb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3542-3553 | libs/agno/agno/db/sqlite/sqlite.py:3148-3159"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3542}}}],"partialFingerprints":{"codehealthFindingId/v1":"411738039f1d5b96607e2227c0143b95225a26363cb14600acbe90e07cb10e12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4726-4737 | libs/agno/agno/db/sqlite/sqlite.py:4573-4584"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4726}}}],"partialFingerprints":{"codehealthFindingId/v1":"d56ad2f36b347737c82a6cf66f62f28f903101765e30b3e5d8e19c9a348c57a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5079-5090 | libs/agno/agno/db/sqlite/sqlite.py:4923-4934"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5079}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e784ae6bc7b3956416ed9f614f8f1ba4ef26fbcc1bf3dd355594c1cfc0ee055"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5156-5167 | libs/agno/agno/db/sqlite/sqlite.py:5000-5011"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5156}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a87155ece6c6ebee8f4d55c5a63f0d54f831e8818b1b2b0be8635608cff54df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5616-5627 | libs/agno/agno/db/sqlite/sqlite.py:5468-5479"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5616}}}],"partialFingerprints":{"codehealthFindingId/v1":"455e80d3892c67ecde977f8c7fdff5c411f7107334cf8deb61c70661f34dd08b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5752-5763 | libs/agno/agno/db/sqlite/sqlite.py:5603-5614"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5752}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcb8243ff67f5c3394b32b857a2faa2c6e6f81900663143f755ef1fe9598ee59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:518-529 | libs/agno/agno/db/sqlite/sqlite.py:713-724"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"20bec9848757aca5400e98d9da62a8bdaadf9816977caeb0ea89141e38972569"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:3940-3951 | libs/agno/agno/db/sqlite/sqlite.py:5072-5084"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3940}}}],"partialFingerprints":{"codehealthFindingId/v1":"95548ea183c1cb7ae89659b724e00adaec829e70e807f8913e598325817501cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:739-750 | libs/agno/agno/eval/accuracy.py:852-863"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f74ac84c02245c33e25fa79158f1e323e86ffbce65aa84a1b0a19b8fa1a256c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/eval/agent_as_judge.py:865-876 | libs/agno/agno/eval/agent_as_judge.py:908-919"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"015d83e0ba5b7866c89b35160149f608d98289e73281be9f9b0a30a64e41e242"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/eval/performance.py:608-619 | libs/agno/agno/eval/performance.py:753-764"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/performance.py"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7bba41a41ba46b5d5b0cba7a8882fae058c59fc35b0a7cda34b338ab7163df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1383-1394 | libs/agno/agno/knowledge/knowledge.py:1468-1479"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1383}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc7b32f4f9e90bcdccae6fc2635b2a05e53ae28130a0a37352263bfa4b117f69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1858-1869 | libs/agno/agno/knowledge/knowledge.py:1965-1976"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1858}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd434929e5bba5f99987618da758106f6d92a1a76a5d83eca15576ce6c93e42d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2687-2698 | libs/agno/agno/knowledge/knowledge.py:2847-2858"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2687}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e080573a16e1ab061e0aa6abe609200229ed2e2a551e77ddcc5d1713ade3bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2722-2733 | libs/agno/agno/knowledge/knowledge.py:2885-2896"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2722}}}],"partialFingerprints":{"codehealthFindingId/v1":"11654faa3e3b6e4c71c608b70d01af4331fbe692142a4fb556ecb0c942cc75f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/loaders/s3.py:146-157 | libs/agno/agno/knowledge/loaders/s3.py:246-257"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/s3.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b50753c5da27303de4c77b6d1b7bb62f655cb847c96daf31d1bcd37eaaa44d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/knowledge/remote_content/s3.py:49-60 | libs/agno/agno/knowledge/remote_content/s3.py:225-236"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/remote_content/s3.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad6b420ce8c064bfb8b628b20ebf536a3b56920d74bb5e2adf85612b08263aa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:465-476 | libs/agno/agno/learn/stores/entity_memory.py:515-526"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":465}}}],"partialFingerprints":{"codehealthFindingId/v1":"38044dbf2bcaab1c025b434216676d3897fbd0016c53626bef041fb8eed5858d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1496-1507 | libs/agno/agno/learn/stores/entity_memory.py:1529-1540"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0dfa3f2b9214beceb772d3ba344963616dcb3d67198fede3f8c28ff4183153f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1751-1762 | libs/agno/agno/learn/stores/entity_memory.py:1818-1829"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1751}}}],"partialFingerprints":{"codehealthFindingId/v1":"19abbb98afd5c669a63bab7946fee37de84538de9bcd4f6f4625e5f1194a1e0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/session_context.py:1108-1119 | libs/agno/agno/learn/stores/session_context.py:1157-1168"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":1108}}}],"partialFingerprints":{"codehealthFindingId/v1":"f34126bf74fd258636c2e59d9df1c7fdc7e4410dd5d3d4299607e4f1a437059e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:517-528 | libs/agno/agno/learn/stores/user_memory.py:556-567"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":517}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d22e449f877a878bc26bf733757f4b1d75e44dafb5ba5a4b98931ea7485dccd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1271-1282 | libs/agno/agno/learn/stores/user_memory.py:1423-1434"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1271}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce90edcc3d9bd08c08ed02988550a0858e5bd67be2a6ba2a6b9afb764a4497ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/learn/stores/user_profile.py:685-696 | libs/agno/agno/learn/stores/user_profile.py:724-735"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_profile.py"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"114fd243229565b4b384d97b90a03017ac34c38c044af519aa4bef388d7b1d39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/memory/manager.py:404-415 | libs/agno/agno/memory/manager.py:497-510"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"29e4c4481c3df7be93b280e4e7404f5f2ad2e85d5b114a5561e0c9a894dfd7f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/memory/manager.py:457-468 | libs/agno/agno/memory/manager.py:536-548"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"515fb059902476c09f7126b57c6f4c024d875303da641111aa2001d41ed5bf44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/memory/manager.py:1101-1112 | libs/agno/agno/memory/manager.py:1185-1196"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"0004770a86c6b3246d97653c28b58e1f5c0b3445ea3d1108bdef7fd8c1d41269"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/metrics.py:304-315 | libs/agno/agno/metrics.py:471-482"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe78d63abf328c1b482d8477863b337d92638ccd24d20cea89ca2fbf3fee98f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/base.py:918-929 | libs/agno/agno/models/base.py:1686-1697"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":918}}}],"partialFingerprints":{"codehealthFindingId/v1":"2136c1e08a181169d70bec7912a2c4c17d90c09cf62b9ebb55d1d798c5a086f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/cohere/chat.py:251-262 | libs/agno/agno/models/cohere/chat.py:317-328"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cohere/chat.py"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"42b73b2b29f06fc30fa6f358e82625f94fbd70acbc6020f478bfad3277f22e70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:195-206 | libs/agno/agno/models/google/gemini_interactions.py:270-281"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e49ae0d52b9153bc94810f3a5b5a8c92e4786f3768554352c5a7e7fb1a040167"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/groq/groq.py:298-309 | libs/agno/agno/models/groq/groq.py:340-351"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7fe55e0f50949bbc4f32256b415b785273159c2fb2fa5cccfb028302a744911"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/groq/groq.py:328-339 | libs/agno/agno/models/groq/groq.py:412-424"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d156e5178b91d09615f754e52437ad240b237349dc0fe06f5a8acf818623376"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/meta/llama.py:221-232 | libs/agno/agno/models/meta/llama.py:250-261"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/meta/llama.py"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd692f3a3f6689327ddaf7e7db088f9727e3b51ce07f097f35ba7cb3a78d22d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/models/mistral/mistral.py:243-254 | libs/agno/agno/models/mistral/mistral.py:324-335"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/mistral/mistral.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"3856e5da0dc435b79fb2a41b71fcb4bf8b46e7ac0ed0aa1d29298b5ead73799f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/utils.py:482-493 | libs/agno/agno/os/interfaces/a2a/utils.py:497-508"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ec1cd2001c5bed34f7e020880a55b7b1116b3361209b15d571c9a66f1e5b81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/utils.py:534-545 | libs/agno/agno/os/interfaces/a2a/utils.py:553-564"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"829a3e34f4106847acba676b734d8ca37b7fcf35604b7875b7da627f2529cc95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/utils.py:606-617 | libs/agno/agno/os/interfaces/a2a/utils.py:623-634"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":606}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7a8c4c9499c77db2af72c1957355fc79826c50a90c36ce2b3555c4cfc0daa94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/os/routers/learnings/router.py:136-147 | libs/agno/agno/os/routers/learnings/router.py:328-339"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/learnings/router.py"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d04b631f1d7131a7c923ea20824d2877c594fc6acbc5836e0be65664e231a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): libs/agno/agno/os/routers/learnings/router.py:225-236 | libs/agno/agno/os/routers/learnings/router.py:249-260"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/learnings/router.py"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fa094cc4e7a6133a038467290769322daf34612244740739d28d57d22018b3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 6): cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py:123-133 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/04_router_selection_and_tool_confirmation.py:129-139 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py:87-97 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/06_loop_confirmation_and_tool_confirmation.py:105-115 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/07_router_confirmation_and_tool_confirmation.py:123-133 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py:209-219"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc26e5c8dac6b7ee78185aa27f114ff4234863dd98e44e3eb4ad19ed2fcdb9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 6): cookbook/91_tools/file_generation_tools.py:35-45 | cookbook/91_tools/file_generation_tools.py:50-60 | cookbook/91_tools/file_generation_tools.py:65-75 | cookbook/91_tools/file_generation_tools.py:80-90 | cookbook/91_tools/file_generation_tools.py:95-105 | cookbook/91_tools/file_generation_tools.py:110-120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/file_generation_tools.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fea1d5806c87e1c6e8e5259cebdad423d065d83bac283ce81271ed73cfaec73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): libs/agno/agno/os/routers/agents/router.py:1025-1035 | libs/agno/agno/os/routers/agents/router.py:1423-1433 | libs/agno/agno/os/routers/agents/router.py:1491-1501 | libs/agno/agno/os/routers/agents/router.py:1552-1562 | libs/agno/agno/os/routers/agents/router.py:1702-1712"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"53c549ebd684d26c12fccb4e5acb7e5de5dd1ff2abd9c06d73c65390ca4dccdd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): libs/agno/agno/models/anthropic/claude.py:538-551 | libs/agno/agno/models/aws/claude.py:184-200 | libs/agno/agno/models/azure/claude.py:123-133 | libs/agno/agno/models/vertexai/claude.py:107-123"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9b0211ac91790cadde64dbb1a69738a3224ce4e64b92218283044c30f690aae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py:115-125 | cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:133-143 | cookbook/04_workflows/08_human_in_the_loop/error/02_error_retry_skip_streaming.py:165-175"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/confirmation/03_step_confirmation_streaming.py"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a96da267716b69a3e6b5233585d838e698c7173d09332f8ef7d037ef2e3e4d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py:103-113 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/06_loop_confirmation_and_tool_confirmation.py:87-97 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/07_router_confirmation_and_tool_confirmation.py:107-117"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f6c7ca1c9bc95a51207d9492363e1d85d7d3cf92e9ad3d2a32ca44e2c5213cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): cookbook/91_tools/mcp/pipedream_google_calendar.py:29-39 | cookbook/91_tools/mcp/pipedream_linkedin.py:29-39 | cookbook/91_tools/mcp/pipedream_slack.py:30-40"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/mcp/pipedream_google_calendar.py"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"113f93afbf13786907d2ed19dea4222ac40c5b3ffb7e10e4f5aff96ef7b3eabf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/agent/_run.py:3773-3783 | libs/agno/agno/agent/_run.py:4081-4091 | libs/agno/agno/agent/_run.py:4920-4930"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":3773}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7782c75cee1ab751ed25dbff285d8ec22522649c24cc23e373ced42cce001cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/db/json/json_db.py:554-564 | libs/agno/agno/db/redis/redis.py:761-772 | libs/agno/agno/db/valkey/valkey.py:1032-1043"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/json/json_db.py"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ce709999c5de7df8f15190cf58e881a9da50efe330a1a4b11e34114a0ab2b46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:1520-1532 | libs/agno/agno/db/mysql/mysql.py:2386-2396 | libs/agno/agno/db/singlestore/singlestore.py:2395-2405"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1520}}}],"partialFingerprints":{"codehealthFindingId/v1":"9369e3e94a997175092c8a565a07e1cfbc3f78289b845dcf703836b061d0cb3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/db/postgres/postgres.py:1089-1099 | libs/agno/agno/db/postgres/postgres.py:1128-1138 | libs/agno/agno/db/postgres/postgres.py:1167-1177"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1089}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3ca91d5c9d5851031851eb00b9ffdb02b61b7642528d7691c4604884de285fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/db/postgres/postgres.py:2092-2102 | libs/agno/agno/db/singlestore/singlestore.py:1794-1804 | libs/agno/agno/db/sqlite/sqlite.py:2049-2059"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2092}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c1670a20e32f6bf10a1c6d6f1aa9e240648bd535984931c821929adbbcf1a69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/db/singlestore/singlestore.py:829-839 | libs/agno/agno/db/singlestore/singlestore.py:880-890 | libs/agno/agno/db/singlestore/singlestore.py:931-941"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7dadf08cc1ed7dd96bfd100a12aa2aac5ad3e064cc5a75a97b53b786a586a4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/knowledge/embedder/cohere.py:317-327 | libs/agno/agno/knowledge/embedder/mistral.py:191-201 | libs/agno/agno/knowledge/embedder/openai.py:189-199"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdeac7fd9030a50ae902dda298253be5c72f0e70b2029e8c41c8617311f7cb74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): libs/agno/agno/media.py:69-79 | libs/agno/agno/media.py:185-195 | libs/agno/agno/media.py:317-327"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/media.py"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"311752c65ca1de99394633e3ea9270f9cc6253ef1ff5d5fe7a6e1d3580c93455"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/03_teams/24_regenerate/01_regenerate.py:56-67 | cookbook/03_teams/25_time_travel/01_continue_from.py:33-43"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/24_regenerate/01_regenerate.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"1519c7f6745bee429eee22af7c51039c425e19279fc3835513731cb0ac6fb270"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/03_teams/25_time_travel/02_fork_run.py:30-40 | cookbook/03_teams/26_fork_session/01_fork_session.py:39-49"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/03_teams/25_time_travel/02_fork_run.py"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f22095975f82d1e92af8b6d87477f380d166a234da4dbc9d49f60de45b0ddcb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py:129-139 | cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py:126-136"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56cff329d97382a3aa52a1088b1eafdad34405dfd843bbdb2286e2e98c8033e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py:188-198 | cookbook/04_workflows/06_advanced_concepts/long_running/events_replay.py:173-183"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/06_advanced_concepts/long_running/disruption_catchup.py"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"198838b33453265f94850dae2462fc7c76f8a775a22515adde5a8e2cc4732d0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py:133-143 | cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py:192-202"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f87645702736d3dba7a29c0fe1a17591e51a55aa883d9b8d8498d98310830f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py:189-201 | cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py:245-255"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/user_input/03_step_user_input_streaming.py"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"250be08364786a62a66252f31b834fa5df1066d1b590534767b9b81de46d3e97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/05_agent_os/04_run_lifecycle/background_run.py:59-69 | cookbook/05_agent_os/04_run_lifecycle/cancel_run.py:59-69"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/04_run_lifecycle/background_run.py"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9266835285f436478861b2e1d95603746407023013d5ac08ea2803792990483"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:222-232 | cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:248-258"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee5085cc95f6d2ae496951a2cf8d825190809bcc97d5edcb2c2458a04baf955a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_default_tools.py:171-181 | libs/agno/agno/agent/_default_tools.py:203-213"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8bddeaa230aba04ed252e6541451ff23b7c3ff53c4903109d48aae9fec2beac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_default_tools.py:238-248 | libs/agno/agno/agent/_default_tools.py:266-276"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"96865260add1211ce823254f2790977002c00c40f1a371e2e68af3a7ef2ff516"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_managers.py:35-45 | libs/agno/agno/agent/_managers.py:90-100"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8bb1b628742671c0436d9bcd0f958d1d31652316b80fa3b2fec170cdeeb6fc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_managers.py:413-423 | libs/agno/agno/agent/_managers.py:448-458"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_managers.py"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bd13a945731e34d74871bfa631c30225a5a672da091890d27a2cbdd69b6dc8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_run.py:702-712 | libs/agno/agno/agent/_run.py:1864-1874"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf3780c5948047a95e6d0a5e51bab9bb244b6594017dc1af8de1f234e3cd411"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_run.py:4921-4931 | libs/agno/agno/agent/_run.py:5534-5544"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":4921}}}],"partialFingerprints":{"codehealthFindingId/v1":"45aa00ccf5e760d15318d37e5585c954e2589555f750acb79f47236a6b121f5e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_run.py:5769-5792 | libs/agno/agno/agent/_run.py:5808-5818"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":5769}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b030354e4354e79eaaee4f77a3375bf17d888f669a868ded69d733efa0cb648"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_storage.py:297-307 | libs/agno/agno/agent/_storage.py:360-370"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"38775012d0de008a7df6b3783fb4dec2fd64f6160fea6faf27b6220e8a2f5bd2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/agent/_tools.py:868-878 | libs/agno/agno/agent/_tools.py:921-931"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c4157f92ad84f80dbbc852d5b568b8b25e51ee0a7e14c29797ebe008828cf1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/client/a2a/utils.py:67-77 | libs/agno/agno/client/a2a/utils.py:210-220"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/utils.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"91f57aa0ab8be526316001cd60797ad7b5791c47cb37f9bdc33bc92b1568ccde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:790-800 | libs/agno/agno/db/dynamo/dynamo.py:2119-2129"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"17baca0f9ab8214399746b9420de5ea1580f39facca4bd389c4ec0c20ca7fd96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/filter_converter.py:135-145 | libs/agno/agno/db/valkey/utils.py:283-293"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/filter_converter.py"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"b84e15aa7278865733f1efdccaf20142ac657c60e9ebc24e734b4ff4e05b8bbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:418-428 | libs/agno/agno/db/firestore/firestore.py:916-926"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2a9528ad12c830f25c33371517acf93b7b21b306e6eb5657ac2d36cb85eaeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/firestore/utils.py:230-240 | libs/agno/agno/db/mongo/utils.py:125-135"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/utils.py"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bde438ca9f16fde8e15d80a5e5d710e5c3970d2a98025379455de8eaeb7acb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:372-382 | libs/agno/agno/db/json/json_db.py:354-364"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"b710e8f9c78124b2744656d4151b99102b37462ee113dbb7bdef1a241e97a3f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1047-1057 | libs/agno/agno/db/json/json_db.py:1083-1093"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe09788a809b3e0c38cc402ba00837525838c7a5d6ed75248d5b2aa624337ead"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1231-1241 | libs/agno/agno/db/mongo/mongo.py:1016-1026"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"495d492b3851b7c18a1e46821d90fcb7cd11025d8dcd49618b42e09ba525fe8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1795-1805 | libs/agno/agno/db/mongo/mongo.py:1578-1588"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1795}}}],"partialFingerprints":{"codehealthFindingId/v1":"67dcf5c1d82d1a343e7cec4ce1dbcba40b56eb7d4cb88834062b0140dcc3afda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2930-2940 | libs/agno/agno/db/mongo/async_mongo.py:3021-3031"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2930}}}],"partialFingerprints":{"codehealthFindingId/v1":"79db5e3449f03bd5ce3af707c5bd4ea04d3cdaab30617bfa9ebd40bfdb083c81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:233-244 | libs/agno/agno/db/postgres/async_postgres.py:308-318"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a110b9316df6acbf782abd35d15ea7eb9ad8a6ce54b8e0bfdf447942eb7dd87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:1155-1165 | libs/agno/agno/db/postgres/async_postgres.py:1051-1062"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1155}}}],"partialFingerprints":{"codehealthFindingId/v1":"56122654684ef35d767d1af8d5d2fac17202be3f313b29b6afc3b5e30da266e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2014-2024 | libs/agno/agno/db/postgres/async_postgres.py:1900-1910"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2014}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9246e9eb15894b01a44a403e728b4e2764e15218f3b5753afef92ba3860d62b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:201-211 | libs/agno/agno/db/postgres/postgres.py:421-432"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"3931c6db966e9d8f2d0444378e1c7ea8a76f158aaa79c942830db1d744adbc88"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:381-391 | libs/agno/agno/db/postgres/postgres.py:686-696"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fc9de67eff75936b57cb45d024ab30e6d2910512884ee9635a39ee62f64a475"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2736-2746 | libs/agno/agno/db/singlestore/singlestore.py:2686-2696"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2736}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7ec38f83f36cf625ba63de46884962df4af743a7321b07f93b670a4faefc2f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2738-2748 | libs/agno/agno/db/sqlite/async_sqlite.py:2926-2936"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2738}}}],"partialFingerprints":{"codehealthFindingId/v1":"e506fbf38145fc904aeb8e0abd4b7f08f888dc40893db406ff9cc73bc23c9f5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2923-2933 | libs/agno/agno/db/postgres/postgres.py:3396-3406"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2923}}}],"partialFingerprints":{"codehealthFindingId/v1":"54fa22f05f370328bb7c805bdb16f9d3a769f1fc0f6b133c8e3ff1eab3437008"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3508-3518 | libs/agno/agno/db/sqlite/async_sqlite.py:3618-3628"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3508}}}],"partialFingerprints":{"codehealthFindingId/v1":"abe0b40571fd3e1328fa4f4858e4a7ad7e51aa64e12585214b288a7377ac7503"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4180-4190 | libs/agno/agno/db/sqlite/async_sqlite.py:4297-4307"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4180}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba4c00d47e3c5e4a79ec2e1f10c77216c56d140a74abbad1cb6b70c606110fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:1655-1665 | libs/agno/agno/db/singlestore/singlestore.py:1609-1619"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":1655}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b3e566dd1b1e0b1761a3313e7f15c038b1813a034141cd5243ef7ceb9c47057"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:2189-2199 | libs/agno/agno/db/sqlite/sqlite.py:2154-2164"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":2189}}}],"partialFingerprints":{"codehealthFindingId/v1":"261b6bc98650a8b130a1b898d7465f408eccb431d3a53b01d32f40b6b039c224"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3631-3642 | libs/agno/agno/db/sqlite/sqlite.py:3534-3544"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3631}}}],"partialFingerprints":{"codehealthFindingId/v1":"0909fc00e9026d3d0de5afba24facbd883a7363779de160d8bc91d2b21839dd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3741-3751 | libs/agno/agno/db/sqlite/sqlite.py:3641-3651"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3741}}}],"partialFingerprints":{"codehealthFindingId/v1":"128a064819430bca50f57bf7ba9658321fd61e46db60114ea48b9f5b4937cfa9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4922-4932 | libs/agno/agno/db/sqlite/sqlite.py:4769-4779"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4922}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0326e8b0b32ec506548f7d49bb4314a40622596a09798bcf73b67520b8c29ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5031-5041 | libs/agno/agno/db/sqlite/sqlite.py:4875-4885"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5031}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b04ad37ff387723457ceff9ca27a4e42132c0de7fec551e1e8121af5f7f7d1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5666-5676 | libs/agno/agno/db/sqlite/sqlite.py:5518-5528"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5666}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1bd6aeb9009cbb72c86fd7be884fbaba01832b3da49616d6952d77f0a5436c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:864-874 | libs/agno/agno/db/sqlite/sqlite.py:1056-1066"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":864}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f646fe0d245abba85bce4806e867d6c4684702aaa5cabe728f62924fde55da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:925-935 | libs/agno/agno/db/sqlite/sqlite.py:1117-1127"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6bb5ceb61003e542bae6ed077f816f5a3d6ce82589305643572491655c0cae5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1366-1376 | libs/agno/agno/db/sqlite/async_sqlite.py:2471-2481"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"b298b69894a441eb17ff480391c3cbc2fee04e69440b6b72951121ca03cf1b9b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1601-1611 | libs/agno/agno/db/sqlite/sqlite.py:1791-1801"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1601}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c54fee5be8ece30dc3bc1acc9389fb275cf88f4a0e61fd7ffceebb94325a31"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:3239-3249 | libs/agno/agno/db/sqlite/sqlite.py:3144-3154"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3239}}}],"partialFingerprints":{"codehealthFindingId/v1":"43b3c607a5964dd53e90951ea8bb51bc1f4a0acbef9c402b06bac574f937a207"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/chunking/document.py:81-91 | libs/agno/agno/knowledge/chunking/markdown.py:275-286"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/document.py"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ce8a6e722a8b31ae3a5aa7095062296ca8a7edf8973fafa5e858467eeba933c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/embedder/cohere.py:54-64 | libs/agno/agno/knowledge/embedder/cohere.py:68-79"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3957f478253f1b2829853dd56604a671e0af85528b3825ba5e6736f00601125"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/filesystem.py:98-108 | libs/agno/agno/knowledge/filesystem.py:179-189"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/filesystem.py"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"88c1426782ca0c89c65f855982c26035b2fb5954c35ef9565779304b34b45a36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2067-2077 | libs/agno/agno/knowledge/knowledge.py:2128-2138"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2067}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f5366d1c403c962bc13c38eb00fbf7c41a135daef47d2779ef66db0ae86fbb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:2540-2550 | libs/agno/agno/knowledge/knowledge.py:2587-2597"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":2540}}}],"partialFingerprints":{"codehealthFindingId/v1":"eec7c416b87245a857ea9898320483ef392712dcdffb75f960672fab3fc52df4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:3173-3183 | libs/agno/agno/knowledge/knowledge.py:3319-3329"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":3173}}}],"partialFingerprints":{"codehealthFindingId/v1":"64208e9ca370e2bcf56a2f552d190b0d045a90f858e9209e93cf52250c6c612b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:2465-2475 | libs/agno/agno/learn/stores/entity_memory.py:2493-2503"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2465}}}],"partialFingerprints":{"codehealthFindingId/v1":"140ff08168e4f19ababd00159de0c9b0f99f35ff0d579882becd3a82e3541384"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3311-3321 | libs/agno/agno/learn/stores/entity_memory.py:3343-3353"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3311}}}],"partialFingerprints":{"codehealthFindingId/v1":"20ea1edd4ad902d209f9b176802976567987cdd16076af8833d2b37edc5cf375"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3645-3655 | libs/agno/agno/learn/stores/entity_memory.py:3662-3672"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3645}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9d83c2ec2108fd4c99eedd7c920a3847a52f01962c280326cc51f0081ee8499"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/learn/stores/learned_knowledge.py:779-789 | libs/agno/agno/learn/stores/learned_knowledge.py:822-832"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/learned_knowledge.py"},"region":{"startLine":779}}}],"partialFingerprints":{"codehealthFindingId/v1":"61a23d30c5e83e50355a2a34937c58fdc6ee980424d610c4c658460257354013"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1231-1241 | libs/agno/agno/learn/stores/user_memory.py:1381-1391"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"f77ea563e547983a091b264b76241194c24f9ea1e4fbd1884194749bb2633ea3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/metrics.py:737-749 | libs/agno/agno/metrics.py:814-824"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b9fb0bc9b1c4f74ae74b5cdae5c3698b27b9dde40177f3d346c70917014eb8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/base.py:341-351 | libs/agno/agno/models/base.py:394-404"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"6910e1430874e47ac6ce446c453e9b88eb49135f3045de1f60811e2a527696a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/base.py:2728-2738 | libs/agno/agno/models/base.py:2866-2876"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2728}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7cc76ff7433b4c636f70a8ead10c89b11e2c839b555ff3b51c4552ab876341d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/fallback.py:292-302 | libs/agno/agno/models/fallback.py:321-331"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/fallback.py"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cda047d12742900e1222959c2c2f4a95036d95b7e8e3276495cf3f34ca4de39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/google/gemini_interactions.py:1352-1362 | libs/agno/agno/models/google/gemini_interactions.py:1451-1461"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":1352}}}],"partialFingerprints":{"codehealthFindingId/v1":"69b294796bddfbc55492f6444db23a3e3f3b863433be3b5b1c37d4f04d7eede0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/groq/groq.py:176-186 | libs/agno/agno/models/ibm/watsonx.py:120-130"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b9eda6719bc79f2dfe453d1dd4254a908b1eb0250d087f8dd74be51ed6be26d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/models/xai/xai.py:94-104 | libs/agno/agno/models/xai/xai.py:118-128"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/xai/xai.py"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"be67b009389e9d27cf58eb1da7c2c693638f37e6398eaf45da5412530373e66d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:543-553 | libs/agno/agno/os/interfaces/a2a/router.py:591-601"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":543}}}],"partialFingerprints":{"codehealthFindingId/v1":"b23cdd427c57ec39af70a8debebc2e844fa2707a8ec71703a79753c0042ed712"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/utils.py:380-390 | libs/agno/agno/os/interfaces/a2a/utils.py:399-409"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"87cec5eb46ec0e1ff0710731127b4653ac1840d3700cf0a1c324fabb59a9f8d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:702-712 | libs/agno/agno/os/routers/teams/router.py:687-697"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf409af58577c8bd4a6757b9a28c57ab9295e5f8cf3fee4a1288ac7fd73de864"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/components/components.py:290-301 | libs/agno/agno/os/routers/components/components.py:354-364"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"3838ab07bd2a5aaa45f2411dd27e6558c1f837aa7df9853969ebd61468e81e9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/components/components.py:424-434 | libs/agno/agno/os/routers/components/components.py:460-470"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/components/components.py"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b957118f59604914a0486b67a4aa1ce5a9ce916f096f94fb5ebf9e5199c2a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/evals/utils.py:190-200 | libs/agno/agno/os/routers/evals/utils.py:203-213"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/utils.py"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3db79240b3eb3c45024cf67fbc311a46216ae60a003585114eb04e88ce34d30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/registry/registry.py:281-291 | libs/agno/agno/os/routers/registry/registry.py:408-418"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/registry/registry.py"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b76f24793506c0f4767bb09973caab2cf4785f6a83ebc70bb5adae1769dc731"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/session/session.py:426-436 | libs/agno/agno/os/routers/session/session.py:596-606"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/session/session.py"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dff125c92a823b12106775a3e7b2746c71c1c66728ddfb3ec05eb543d92b3ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): libs/agno/agno/os/routers/session/session.py:852-862 | libs/agno/agno/os/routers/session/session.py:990-1000"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/session/session.py"},"region":{"startLine":852}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a95de8e79015b25f02a457fcace28a9c633f65f2046b09e21701e58d36b415"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): cookbook/91_tools/mcp/pipedream_auth.py:49-58 | cookbook/91_tools/mcp/pipedream_google_calendar.py:31-40 | cookbook/91_tools/mcp/pipedream_linkedin.py:31-40 | cookbook/91_tools/mcp/pipedream_slack.py:32-41"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/91_tools/mcp/pipedream_auth.py"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"5754d36a275ad57c5159f300c756d5e42f71af8cd51cdb4775884907a1690285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): libs/agno/agno/db/in_memory/in_memory_db.py:444-453 | libs/agno/agno/db/json/json_db.py:555-564 | libs/agno/agno/db/redis/redis.py:762-772 | libs/agno/agno/db/valkey/valkey.py:1033-1043"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/in_memory/in_memory_db.py"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"30860047aaaa9140dbe07714bead3e7113b5a27f7dd4395abf92fc50dc9966bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): libs/agno/agno/knowledge/embedder/google.py:74-83 | libs/agno/agno/knowledge/embedder/google.py:125-134 | libs/agno/agno/knowledge/embedder/google.py:157-166 | libs/agno/agno/knowledge/embedder/google.py:210-219"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/google.py"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2a28a4a5f898e231ae3c6b67791f339af1086054021f49213a2d4cb9e806df4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): libs/agno/agno/os/interfaces/a2a/utils.py:413-422 | libs/agno/agno/os/interfaces/a2a/utils.py:447-456 | libs/agno/agno/os/interfaces/a2a/utils.py:459-468 | libs/agno/agno/os/interfaces/a2a/utils.py:470-479"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7c541eae162cf933c282f0c3f1611c673af109b473b722af82e253a1327e919"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): cookbook/10_reasoning/agents/capture_reasoning_content_default_COT.py:18-27 | cookbook/10_reasoning/tools/capture_reasoning_content_knowledge_tools.py:68-77 | cookbook/10_reasoning/tools/capture_reasoning_content_reasoning_tools.py:39-48"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/10_reasoning/agents/capture_reasoning_content_default_COT.py"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"f01b76f8129f13ebc816005b2d5c51750849c6e896f6a387375858612fdc23cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/client/os.py:651-660 | libs/agno/agno/client/os.py:928-937 | libs/agno/agno/client/os.py:1236-1245"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"3420391b101be1ac47f50b3df3d1e09b446869e3f529129e59aacb8a6ed32c07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:1327-1336 | libs/agno/agno/db/postgres/postgres.py:1650-1664 | libs/agno/agno/db/singlestore/singlestore.py:1604-1618"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":1327}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d8fe62a7e75da296c70e6d18b5b4292cdf5f43ce785a0349650030983134bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/db/sqlite/sqlite.py:1037-1046 | libs/agno/agno/db/sqlite/sqlite.py:1076-1085 | libs/agno/agno/db/sqlite/sqlite.py:1114-1123"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":1037}}}],"partialFingerprints":{"codehealthFindingId/v1":"31242f18b6f63048e4e9b84b766fca111c4181c624b7701592c14fe0017896ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/media.py:39-50 | libs/agno/agno/media.py:157-166 | libs/agno/agno/media.py:289-298"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/media.py"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a992b7f08b199f924d7e4b892fa7b48e2da321fd3ab212f548c56e72d7c9787"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/models/base.py:2189-2198 | libs/agno/agno/models/base.py:2735-2744 | libs/agno/agno/models/base.py:2873-2882"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":2189}}}],"partialFingerprints":{"codehealthFindingId/v1":"55cd12acff7eccf8a830241e3a50df54567d33ececc5035c6c44ac072270cb6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/os/interfaces/a2a/utils.py:221-230 | libs/agno/agno/os/interfaces/a2a/utils.py:234-243 | libs/agno/agno/os/interfaces/a2a/utils.py:247-256"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc66174d95de20cd66c632187304c0e244eaad0828e83e7e7c69be2d090f2c7a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): libs/agno/agno/os/interfaces/a2a/utils.py:825-834 | libs/agno/agno/os/interfaces/a2a/utils.py:838-847 | libs/agno/agno/os/interfaces/a2a/utils.py:851-860"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":825}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb43ba1b76a078d2df0adc1f3f7a7751a40ef47e2718c63afadc562799761f87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): cookbook/04_workflows/05_conditional_branching/selector_types.py:97-106 | cookbook/04_workflows/05_conditional_branching/step_choices_parameter.py:47-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/05_conditional_branching/selector_types.py"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef4818f6e9258c707489e1c76ee29e3f74c2eb36756d0c7ba0245cd2dee0c259"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:175-184 | cookbook/data_labeling/_19_inter_annotator_agreement/jury_votes.py:211-220"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"a959c127c4bd8cdf6104436b3a0123cdb3d68c288119b7394fca46870137658f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/agent/_tools.py:574-583 | libs/agno/agno/agent/_tools.py:595-604"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":574}}}],"partialFingerprints":{"codehealthFindingId/v1":"00f7adb0f84fc7cfb5d19c209007cb8a26ae9e5ceb7c47ce67557c9c2de75594"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/agent/remote.py:392-401 | libs/agno/agno/agent/remote.py:435-444"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/remote.py"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"265bc537f58a124ddb64412795dd133fe3cc93d993630af7800af946350625b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/agents/claude/agent.py:149-158 | libs/agno/agno/agents/claude/agent.py:217-227"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/claude/agent.py"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c54a5c7f084633a1ad29abf7587e00b1d317d656dfc19490a3af693924489c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/client/a2a/client.py:515-524 | libs/agno/agno/client/a2a/client.py:542-551"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":515}}}],"partialFingerprints":{"codehealthFindingId/v1":"400b4d76edd612161a044e8d90688baf3eca1ab4e8283ca566c368b52f1c249b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/context/calendar/provider.py:182-191 | libs/agno/agno/context/gmail/provider.py:197-206"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/calendar/provider.py"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"3969308538d884fdcf005a12b43626379a1806ffbca181130fa3e356e9de736d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/context/calendar/provider.py:194-203 | libs/agno/agno/context/gmail/provider.py:209-218"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/calendar/provider.py"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d94bcd70138aa1ebd679ba7d73eade106ca9014545461c435ef0599b1a95248"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/clickhouse/utils.py:229-238 | libs/agno/agno/db/clickhouse/utils.py:240-249"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/utils.py"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8be34cd93f56a677b75960602406cffaf934421e30beba410f7ce9fa39496a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/clickhouse/utils.py:266-275 | libs/agno/agno/db/clickhouse/utils.py:276-285"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/clickhouse/utils.py"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ba6a6cb315ce71a36ba3424640a6eec22d68f1f4fd9775327d5a8253bc7023e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:443-454 | libs/agno/agno/db/dynamo/dynamo.py:2490-2499"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3436f705dcd6f45f5e91d3251ebe635898d746e34145fd572f13ea84e2967df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:2899-2908 | libs/agno/agno/db/firestore/firestore.py:2427-2436"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":2899}}}],"partialFingerprints":{"codehealthFindingId/v1":"724ac2f7b4b02151d0ab0e11374006affa3cb474a4a6d215e84d39213061019d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:1246-1257 | libs/agno/agno/db/firestore/firestore.py:1341-1350"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1246}}}],"partialFingerprints":{"codehealthFindingId/v1":"9034a543bcfa3598067d98fe1d0690e1648a076f10c5ede50218fe27645d0d97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1184-1193 | libs/agno/agno/db/json/json_db.py:1226-1235"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1184}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec7f64d2e9cde03b42d121eb5f1eda264107f024598db457b112dc7f8fe00ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1296-1305 | libs/agno/agno/db/redis/redis.py:1648-1657"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1296}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb34f05dd65447e94e005caf286cd78d36667724c4514761e4626be9f1d3ff33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:530-539 | libs/agno/agno/db/mongo/mongo.py:327-336"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":530}}}],"partialFingerprints":{"codehealthFindingId/v1":"1334e2c2fbfc3bde13977b24b726a2aa24b53ab228f8c83432addb0ccdd67a18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:1683-1692 | libs/agno/agno/db/mongo/mongo.py:1466-1475"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":1683}}}],"partialFingerprints":{"codehealthFindingId/v1":"f58fc03c2b67ee6f981c72ea1dab02b8da356dedd6fa5f2234a1e54d2edb64cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2079-2088 | libs/agno/agno/db/mongo/mongo.py:1860-1869"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2079}}}],"partialFingerprints":{"codehealthFindingId/v1":"f02206a848cbc881d9285b815894c91f28843555cec9fbac7bc124a893abd7fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2097-2106 | libs/agno/agno/db/mongo/mongo.py:1878-1887"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2097}}}],"partialFingerprints":{"codehealthFindingId/v1":"76145fd13bb13a2593ec3fc581be30a1fc240ded9ed1a56f205da46140f07f28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:2217-2226 | libs/agno/agno/db/postgres/async_postgres.py:2139-2148"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2217}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9290abe841f9e2b6e71bb894f5bd7ff2a46441a6fd5092d165a5ac4c2b04833"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:162-171 | libs/agno/agno/db/singlestore/singlestore.py:216-225"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cb1f7312569734862484d1363a371268c3b7e4f1257039598db9a6543ec93bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:827-836 | libs/agno/agno/db/singlestore/singlestore.py:901-910"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad5e65f04fdc18e792ec8a6bcfc034f938a1793126265c22eb87c6d38bc307a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:854-863 | libs/agno/agno/db/postgres/postgres.py:1041-1051"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aca4fbafbe386943622859f1696927673f60e25676035dd985c3f7100873ecf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:924-933 | libs/agno/agno/db/postgres/postgres.py:1110-1119"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":924}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebe3bbbd1e79ef774983341167cd943c773a283acaf1e770f7681aa673cad747"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:965-974 | libs/agno/agno/db/postgres/postgres.py:1149-1158"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"76431f9d2a691473d5edc28ffe3328cc9f9bf2b1e2aafbf74489c66db335d7fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:1841-1850 | libs/agno/agno/db/sqlite/async_sqlite.py:1847-1856"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":1841}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d4b993d4cf6dfd000c2c23b44a041d1fdc4e6a02ce25017880a126bdb93e6ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3310-3319 | libs/agno/agno/db/sqlite/async_sqlite.py:3483-3492"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3310}}}],"partialFingerprints":{"codehealthFindingId/v1":"334045d525f91cfe0e43efc58457e35f868422e3e0ace315eb3b8ce3cbfe9f18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:762-772 | libs/agno/agno/db/singlestore/singlestore.py:518-527"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":762}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d4279b2a1577fe2f04a02c447081764193957b2341d90f9519568d43ef7bdd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4832-4841 | libs/agno/agno/db/sqlite/sqlite.py:4679-4688"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4832}}}],"partialFingerprints":{"codehealthFindingId/v1":"41af3d1c38d11573d16b6cec19e300211cf5b1dde1291d69586a60ca799089ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4991-5000 | libs/agno/agno/db/sqlite/sqlite.py:4835-4844"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4991}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e4e8c10c20583075ede4ad531a40ceaafce7250640cdb3b4462639d32fbf60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5421-5430 | libs/agno/agno/db/sqlite/sqlite.py:5273-5282"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5421}}}],"partialFingerprints":{"codehealthFindingId/v1":"d16fffcba269f02da3dfe109279ab2d77eb32f6a8fd885a1395a49e05f7a1943"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/postgres/utils.py:254-263 | libs/agno/agno/db/sqlite/utils.py:228-237"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/utils.py"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"f61ab5bc96641f5d0c1d2d930dc56ce3e4e28c39bcadb06e1860ccbaec955d4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/redis/redis.py:1853-1862 | libs/agno/agno/db/valkey/valkey.py:2191-2200"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/redis/redis.py"},"region":{"startLine":1853}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97f922cd3644840c95e0bacb4fdbf5c769eb56134a2d536180aafe4830c7a5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:826-835 | libs/agno/agno/db/sqlite/sqlite.py:1018-1027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba06d2a69bd859456529ead55a6dbafc19f6059fd69b836af0f189eb770ac2f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:905-914 | libs/agno/agno/db/sqlite/sqlite.py:1097-1106"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7ddc938b248759efc4117be2fb6b1a87cfb2ee7f7de0651f65a15b994fad80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:1440-1449 | libs/agno/agno/db/sqlite/async_sqlite.py:1961-1971"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":1440}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bc58b3606a9b099da7ade3922c753bed7be28ef1ac0802ba1186c3f901c86a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:3224-3233 | libs/agno/agno/db/sqlite/sqlite.py:3129-3138"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":3224}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee923a29c600d54cec0e0b664f31c7f41b074e2e8f84423d4f0ad452c2f1354"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/sqlite/sqlite.py:4013-4022 | libs/agno/agno/db/sqlite/sqlite.py:4304-4313"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/sqlite.py"},"region":{"startLine":4013}}}],"partialFingerprints":{"codehealthFindingId/v1":"425ed83ad92de018f1d27d36a574cf60af6fe8ca479f3a1348063302391d0315"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/db/surrealdb/surrealdb.py:1839-1848 | libs/agno/agno/db/surrealdb/surrealdb.py:1986-1995"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1839}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3ca944f87b63765187d8150edeb258f64de5a24b8cf477c2046f1b2dd2f177"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/integrations/discord/client.py:119-128 | libs/agno/agno/integrations/discord/client.py:136-146"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/integrations/discord/client.py"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"3791c28cb45cd354b1081164cff5523dd0e03652bd433a1fecdfe302b6176e21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/knowledge/embedder/aws_bedrock.py:400-409 | libs/agno/agno/knowledge/embedder/aws_bedrock.py:445-454"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/aws_bedrock.py"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5fadce61a3a46f3a3229b7c427ba6c12f152d8e02545b37b65ffe342061acda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:263-272 | libs/agno/agno/knowledge/knowledge.py:412-421"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d6abdc8568ad75c194b55cf8d65ab271e509b39dd42ade29226d52d137cacbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1353-1362 | libs/agno/agno/knowledge/knowledge.py:1438-1447"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1353}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b50dcc007c3161bb5c45fd0ab3cf6952048358ab93b79c042b57644a403528f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/knowledge/reader/llms_txt_reader.py:243-252 | libs/agno/agno/knowledge/reader/llms_txt_reader.py:267-276"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/llms_txt_reader.py"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c5d9979eab94729a72eeb7250ead9d2bae61fd6ef9cf184957e126bb8070370"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:2964-2973 | libs/agno/agno/learn/stores/entity_memory.py:3009-3018"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2964}}}],"partialFingerprints":{"codehealthFindingId/v1":"48775c56553ebe3fca935becb35761392728700019c7974ce0e66909aa201bac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3155-3164 | libs/agno/agno/learn/stores/entity_memory.py:3231-3240"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3155}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c85c739e1529abc1b4df3d3f8a710cfbc23cd2d6e884bbba5c3e19050703e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:671-680 | libs/agno/agno/learn/stores/user_memory.py:702-711"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":671}}}],"partialFingerprints":{"codehealthFindingId/v1":"9714601aea3b7826e35ebc8b7efc57cb912c30f8ac387a49484b6121fba974e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1193-1202 | libs/agno/agno/learn/stores/user_memory.py:1343-1352"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1193}}}],"partialFingerprints":{"codehealthFindingId/v1":"135cf06034667e95697a8d237bc4f7d1a186a2fc8e53d79957ce7e4a4ca3abc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/learn/stores/user_memory.py:1205-1214 | libs/agno/agno/learn/stores/user_memory.py:1355-1364"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/user_memory.py"},"region":{"startLine":1205}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3a4a039d2097c6ab01cd6c42aa945c9f557a7d9561d7b43a2185c315353f6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/memory/manager.py:1061-1070 | libs/agno/agno/memory/manager.py:1130-1139"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"3027021a8a7daa5f22181caa39b51416c9acc7d07532463a6ed905fc4d0a2b7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/models/aws/bedrock.py:529-538 | libs/agno/agno/models/aws/bedrock.py:627-637"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"b484a766f9a69fc51cc1e4de146d01ed82d40db7bee64e3209bc9de88a350046"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/models/aws/bedrock.py:581-590 | libs/agno/agno/models/aws/bedrock.py:680-689"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/aws/bedrock.py"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d119ce4cd084df83383046de9e827ee67ea98747bdaf74c824c14241376f53c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/models/cerebras/cerebras.py:270-279 | libs/agno/agno/models/cerebras/cerebras.py:305-314"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/cerebras/cerebras.py"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f21352bdc9c196db7c1caa759ed8f2c26154207cb5ab344f56771f4a35765e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/models/huggingface/huggingface.py:253-262 | libs/agno/agno/models/huggingface/huggingface.py:284-293"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"1295f7d01a2bbaeb38895e089dae7bc374d19869323f2afeba35c55f33b6c38d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/models/openai/responses.py:727-736 | libs/agno/agno/models/openai/responses.py:749-758"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":727}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2f86877ed62b78ff2ce77bea08def90765e8ade5e2b4df26d177eb32b71bab3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:1613-1625 | libs/agno/agno/os/routers/teams/router.py:895-904"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1613}}}],"partialFingerprints":{"codehealthFindingId/v1":"99082284e1d69ca41940ba1f0dc3a59720aad05fc039b685f67818f8fb3785fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/os/routers/approvals/router.py:52-61 | libs/agno/agno/os/routers/schedules/router.py:62-71"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/approvals/router.py"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd47bf726336c59e4768a32d3afdb7f01aeeb34ba999dfe9c54cbd68beeab7ee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/os/routers/memory/memory.py:203-212 | libs/agno/agno/os/routers/memory/memory.py:678-687"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/memory/memory.py"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffb16cf967996249b1413ea13dd2b592885ea6557354d5adbfc58a3725b02231"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/os/routers/schedules/router.py:204-213 | libs/agno/agno/os/routers/schedules/router.py:223-232"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/schedules/router.py"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"83f7356bd648d7163e2cbfa29ba82e2d44966160bc1fbd0fd288d1a648a05540"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): libs/agno/agno/os/routers/session/session.py:938-947 | libs/agno/agno/os/routers/session/session.py:1045-1054"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/session/session.py"},"region":{"startLine":938}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2bfeece283578f01ceef2079efe3d02e9786921931698f1cb5dd25c8fb63c2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 12): libs/agno/agno/db/dynamo/utils.py:387-408 | libs/agno/agno/db/firestore/utils.py:264-272 | libs/agno/agno/db/in_memory/utils.py:136-162 | libs/agno/agno/db/json/utils.py:136-162 | libs/agno/agno/db/mongo/utils.py:159-167 | libs/agno/agno/db/mysql/utils.py:315-339 | libs/agno/agno/db/postgres/utils.py:353-377 | libs/agno/agno/db/redis/utils.py:265-282 | libs/agno/agno/db/singlestore/utils.py:290-314 | libs/agno/agno/db/sqlite/utils.py:333-357 | libs/agno/agno/db/surrealdb/metrics.py:165-191 | libs/agno/agno/db/valkey/utils.py:483-500"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/utils.py"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"936b6dfb76e6adaa52a4adb2f37d0f75737aec7be107c774fcbe9e80be32b55b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): libs/agno/agno/db/postgres/async_postgres.py:3781-3789 | libs/agno/agno/db/postgres/async_postgres.py:3880-3888 | libs/agno/agno/db/postgres/async_postgres.py:4198-4206 | libs/agno/agno/db/sqlite/async_sqlite.py:3891-3899 | libs/agno/agno/db/sqlite/async_sqlite.py:3997-4005 | libs/agno/agno/db/sqlite/async_sqlite.py:4315-4323"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3781}}}],"partialFingerprints":{"codehealthFindingId/v1":"942922e066a643e343794187333fd83ee5ea4c48a7899719628f3b3172be482f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:4148-4156 | libs/agno/agno/db/postgres/postgres.py:5634-5643 | libs/agno/agno/db/sqlite/async_sqlite.py:4265-4273 | libs/agno/agno/db/sqlite/sqlite.py:5486-5494"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4148}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cfceafc8108792566c99b52dd6e3cab608826816566ce9d390b63cb7d8afd54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): cookbook/05_agent_os/21_factories/01_basic.py:82-92 | cookbook/05_agent_os/21_factories/05_team_factory.py:92-100 | cookbook/05_agent_os/21_factories/06_workflow_factory.py:96-106"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/21_factories/01_basic.py"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b0616359f34a462f4dbeedd3f06fa2e0c27ac4b5eeea78a18fb028a4c5dd3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): cookbook/environments/_22_sql_generation/basic.py:24-32 | cookbook/environments/_22_sql_generation/joins.py:23-31 | cookbook/environments/_22_sql_generation/window_functions.py:24-32"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/environments/_22_sql_generation/basic.py"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"29bf4133cbd9db25ab6aab56e9819f8a95371cb2dfdda75ea932b793de747bf9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:488-496 | libs/agno/agno/db/postgres/async_postgres.py:604-612 | libs/agno/agno/db/sqlite/async_sqlite.py:586-594"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d3211a9fd44f8a8a29d1911ea104454abaaaca45f50ea81154d89a63897caa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:2195-2204 | libs/agno/agno/db/postgres/async_postgres.py:2115-2124 | libs/agno/agno/db/sqlite/async_sqlite.py:2077-2085"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":2195}}}],"partialFingerprints":{"codehealthFindingId/v1":"9704d92e9a82428108846e972ae4f5c53e295878d4769161ef6897a5913381a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): libs/agno/agno/db/postgres/postgres.py:701-709 | libs/agno/agno/db/singlestore/singlestore.py:458-466 | libs/agno/agno/db/sqlite/sqlite.py:692-700"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":701}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1b8459690f0b40a4aa614fbe17129396830705321e148bed6f6d639fdc730b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): libs/agno/agno/learn/stores/decision_log.py:1044-1052 | libs/agno/agno/learn/stores/user_memory.py:1474-1482 | libs/agno/agno/learn/stores/user_profile.py:1176-1184"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/decision_log.py"},"region":{"startLine":1044}}}],"partialFingerprints":{"codehealthFindingId/v1":"9864c76d2640d764e4f69cfccde3d9f8134c5b7fa68585ae4e87706cab6956aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): cookbook/02_agents/05_state_and_session/session_state_advanced.py:34-43 | cookbook/03_teams/21_state/nested_shared_state.py:35-43"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/05_state_and_session/session_state_advanced.py"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ade6ea65c231f4024ca9dea2a5ad9f07d115d35dc391b42c0e7a22fad0ed58d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): cookbook/07_knowledge/04_advanced/07_per_user_isolation/valkey_db.py:67-75 | cookbook/07_knowledge/04_advanced/07_per_user_isolation/valkey_db.py:85-94"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/04_advanced/07_per_user_isolation/valkey_db.py"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a62ee7e7c7eff02f90096ffc2c3784cdebaeb757597c7704e31a0351719cdf3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): cookbook/data_labeling/_05_text_pairwise_preference/dpo_jury.py:92-100 | cookbook/data_labeling/_05_text_pairwise_preference/jury_calibrated.py:153-161"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_05_text_pairwise_preference/dpo_jury.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"715ee46db516db1aed7947fcc4cc565d290c174b44bd4b46c9dc4e4061924bef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/agent/_default_tools.py:210-218 | libs/agno/agno/agent/_default_tools.py:272-280"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_default_tools.py"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"414b1507502587822c37ae02603a645f1cfd94f4f6e72bce275fec59e4e63e71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/agents/base.py:395-403 | libs/agno/agno/agents/base.py:412-420"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"83c55c17b1a49ef31c9553bdfbbb3b2972a357d24ef50517f55c232dd07dc96f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/agents/base.py:573-581 | libs/agno/agno/agents/base.py:623-631"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agents/base.py"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aeac8c02a76c1c853e7fb6998f29e696369f525e1e959b46a06b39113df762a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:524-532 | libs/agno/agno/db/sqlite/sqlite.py:965-979"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a5efca0449791a09312fd5885d5b610475f38bf35f9a0abbd9840829d551f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:1377-1385 | libs/agno/agno/db/mongo/mongo.py:1581-1589"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":1377}}}],"partialFingerprints":{"codehealthFindingId/v1":"dde6e6b7dc061d2198fb31c135f162378a8446466fd2c8667fc63c1d8b73da01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/firestore/firestore.py:2089-2097 | libs/agno/agno/db/firestore/firestore.py:2178-2188"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/firestore/firestore.py"},"region":{"startLine":2089}}}],"partialFingerprints":{"codehealthFindingId/v1":"b543245791d4f470f94291a4f4367ab8a53447dffb8c67338081d576deff4f3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1065-1073 | libs/agno/agno/db/json/json_db.py:1104-1112"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1065}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce28a76af238820a6e21d5c33eeef5adc9b981f9b7757ca427c6d0ba39fd94f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/gcs_json/gcs_json_db.py:1081-1089 | libs/agno/agno/db/json/json_db.py:1121-1129"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":1081}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e5575c7cd70e6f838613c4f99f23561a18514364592ec48fd9595cbeaead621"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:676-684 | libs/agno/agno/db/mysql/mysql.py:674-682"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"c30b30bd74bb4ee1535e99ff76020a715a1b7ab8fbe2133895291ac80d68c6fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:812-820 | libs/agno/agno/db/mysql/mysql.py:804-812"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":812}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6be62aa07fa780c9448ca0994ff52dd13765cb1bdcd4c9ba1c482e9f9cfdd4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/mysql/async_mysql.py:865-873 | libs/agno/agno/db/mysql/mysql.py:852-860"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":865}}}],"partialFingerprints":{"codehealthFindingId/v1":"9525cad5d3a816ee2cf34880186373fdc7815948ed0542954fc3d3adfa9c398a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:511-520 | libs/agno/agno/db/sqlite/async_sqlite.py:496-504"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd90a1c44c3c6a11415232f012fe0815227bbfd4b0da2757e610c47ac436e4b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:724-732 | libs/agno/agno/db/postgres/postgres.py:912-920"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c176196e565b909e69ed0c369c89a50d0fe5edcb176c1a11dd9eac44d9d6bb3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:2894-2902 | libs/agno/agno/db/postgres/postgres.py:3367-3375"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":2894}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f2de897046e5abc354c5e7ad66ae601692156a6f79bdd64bb76ce90e15af78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3329-3337 | libs/agno/agno/db/sqlite/async_sqlite.py:3502-3510"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3329}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a03eff21b24605243bdf9191167a254814d4b5a66df1825b10031570288b807"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3530-3538 | libs/agno/agno/db/sqlite/async_sqlite.py:3640-3648"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3530}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ee9d3e4e5b6fe4655de0ac33c6d2c8300abd01bc545d9d744a558e0fae92d05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3807-3815 | libs/agno/agno/db/sqlite/async_sqlite.py:3917-3925"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3807}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf8ca3cd305cab9aa5345bede3ee3117052964667797fba61a64138acdc22a1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3953-3961 | libs/agno/agno/db/sqlite/async_sqlite.py:4070-4078"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3953}}}],"partialFingerprints":{"codehealthFindingId/v1":"60a0c419e1851c850d6d0396ff43a7b3a7517cd8ff86cc7cd81fd36aa9e0cd0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3997-4005 | libs/agno/agno/db/sqlite/async_sqlite.py:4114-4122"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3997}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b103684a836a934824f4295769a4695e6929af186d70947686f937cf964d557"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4056-4064 | libs/agno/agno/db/sqlite/async_sqlite.py:4173-4181"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4056}}}],"partialFingerprints":{"codehealthFindingId/v1":"7055a9a5c4f66d1c11f499e9095f5980a3179e8657a35343380c59f63fba4631"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:4851-4859 | libs/agno/agno/db/sqlite/sqlite.py:4698-4706"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":4851}}}],"partialFingerprints":{"codehealthFindingId/v1":"f15dfbb230c52121b4525db1cab28abba03c1cc91c1765f416d1896d1a8b96ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5346-5354 | libs/agno/agno/db/sqlite/sqlite.py:5198-5206"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5346}}}],"partialFingerprints":{"codehealthFindingId/v1":"51459624a90c500293d016b53bc07a7c92372fb7382cccd2d0f66d3f91f5ed02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5388-5396 | libs/agno/agno/db/sqlite/sqlite.py:5240-5248"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5388}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ea00c3d544083bb82c2f35dd31aad62d8de7efcaee586a9208dc32d6527182"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5446-5454 | libs/agno/agno/db/sqlite/sqlite.py:5298-5306"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5446}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb62ce945e315fbfde976c86055096af3b0f721495c6136d738c6ff840014779"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:305-316 | libs/agno/agno/db/sqlite/sqlite.py:425-433"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"3880a517fb27273a01628f03fa5ead6e0073be5067684c674fd1a137797e8c35"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:1485-1493 | libs/agno/agno/db/singlestore/singlestore.py:1570-1578"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":1485}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1fb9dc8a5a89ed75969bf3271d23f9a4067405edeac120866e3947759c4734b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/db/valkey/valkey.py:440-448 | libs/agno/agno/db/valkey/valkey.py:1002-1010"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dfc4be5d9a856349edd319d0f52776e9721b9d40b3e2177aa58cd1574224d92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/eval/agent_as_judge.py:700-708 | libs/agno/agno/eval/agent_as_judge.py:770-778"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/agent_as_judge.py"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"e55c2a800a0fd172158b63007439d18f474b1400012385050da8d3eb542f14d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/eval/suite.py:747-755 | libs/agno/agno/eval/suite.py:762-770"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/suite.py"},"region":{"startLine":747}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e6cde111dda8dba87eb031c26d34cf3a6a221c238708a25844324980bf24a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/chunking/code.py:78-86 | libs/agno/agno/knowledge/chunking/semantic.py:156-164"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/code.py"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"08af35e82bd8cdacf3966dde3c7628c72cf855cfc0ec2beb0937f3f25d64f894"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/chunking/document.py:36-44 | libs/agno/agno/knowledge/chunking/document.py:62-72"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/chunking/document.py"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f7effb19876b485f95093f37a1ea6432d55f271a6466f2544a5a484fd6e5e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/embedder/cohere.py:175-183 | libs/agno/agno/knowledge/embedder/cohere.py:216-224"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"206c4f06c68481c1de5fde6fd77ebac537c2b2d2dd34eeb7f2d9014e0e17a3b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/embedder/cohere.py:187-195 | libs/agno/agno/knowledge/embedder/cohere.py:240-249"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/cohere.py"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a64535dc18f28f4bd37ec8cbb5ed54a4b6c4135f7fa7ccafc9d03f30240f860"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/embedder/google.py:107-115 | libs/agno/agno/knowledge/embedder/google.py:175-183"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/google.py"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"207e63502c211596ec5da0287d3b414d013b231958766e8a0207425b15423d5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/loaders/github.py:134-142 | libs/agno/agno/knowledge/loaders/github.py:186-194"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"2856bf8b813e94bb11314df3ea17eb1138007234e3afb6b7a134c32325874f53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/reader/csv_reader.py:118-126 | libs/agno/agno/knowledge/reader/csv_reader.py:211-219"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/csv_reader.py"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c146c7a9ec6e97090c61f95b32e34b62a98639500e99202bfb11d6c016b621"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/reader/excel_reader.py:161-169 | libs/agno/agno/knowledge/reader/excel_reader.py:199-207"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/excel_reader.py"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"1613c521f7525545b423a45a210440ee02e90e8e6ed326a460a59592e1193713"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/knowledge/reader/markdown_reader.py:68-76 | libs/agno/agno/knowledge/reader/text_reader.py:40-48"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/markdown_reader.py"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bdf9e3cdae7a135cda0617770d8fa5bef1acf636bc9832841d579616419d494"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:631-639 | libs/agno/agno/learn/stores/entity_memory.py:658-666"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"74a3d9601dd1ac8b68e031a5b30c69aedbcca72dbb795de7d25c1b7abc892c79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:1613-1621 | libs/agno/agno/learn/stores/entity_memory.py:1644-1652"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":1613}}}],"partialFingerprints":{"codehealthFindingId/v1":"926b1f42b288adec55688627803955bc44d5fbc92988749c61aa1708a91ff1b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3493-3501 | libs/agno/agno/learn/stores/entity_memory.py:3505-3513"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3493}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3a4f30465a0da179fe93c4c6dd9ee740550e9c69d4e5c6e54df5db1589d119b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/memory/manager.py:131-139 | libs/agno/agno/memory/manager.py:153-161"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/memory/manager.py"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"789e04706517986067b8ca1ad8f353fd0a936c7574ff74a05834861d7bad99c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/metrics.py:358-366 | libs/agno/agno/metrics.py:572-580"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"3182dd1ea2fc4512a5d3000696e7223847da5c7a6677a1a138aed4fb2d4a43d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/google/gemini.py:1937-1945 | libs/agno/agno/models/google/gemini.py:1961-1969"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini.py"},"region":{"startLine":1937}}}],"partialFingerprints":{"codehealthFindingId/v1":"91d3c7d801d3d06785e6cc35dee3c8b6ea7f769953e73b458160f89cdd726195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/google/gemini_interactions.py:703-711 | libs/agno/agno/models/google/gemini_interactions.py:760-768"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"2256ba538cefb086da8d9f98d2b93e9a120a75af773c8ba5f529873c679c0c63"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/groq/groq.py:385-393 | libs/agno/agno/models/groq/groq.py:428-436"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/groq/groq.py"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd3f4c77743f4ff51c8cf11249ef173c82624912dccd5e6834a64fd24c9dbb64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/huggingface/huggingface.py:324-332 | libs/agno/agno/models/huggingface/huggingface.py:359-367"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/huggingface/huggingface.py"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c4db49d088ed7d9fd92e15f301bcd312142e783f944c86ef98b8f79f651bcd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/openai/responses.py:205-213 | libs/agno/agno/models/openai/responses.py:232-240"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc36ac4143eceebd28d503de7b7a9099033b2ffab863ff93b8fa6a8eac0e2178"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/models/perplexity/perplexity.py:140-148 | libs/agno/agno/models/perplexity/perplexity.py:174-183"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/perplexity/perplexity.py"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14276919b9c4e4a54b63bc01a4431c6f9fe16b184be7a97c247f890ec04b386"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/router.py:869-877 | libs/agno/agno/os/interfaces/a2a/router.py:1085-1093"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/router.py"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8e00c1260cda2c78a4bac05a0bfc3d75a19ff0fa728d29c3012dea5c24679a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:859-867 | libs/agno/agno/os/routers/agents/router.py:1371-1379"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"a29bd174da353d2418543c9ea1df33245d89ce6a944912836e8d04d8c8bfced3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:603-611 | libs/agno/agno/os/routers/knowledge/knowledge.py:644-657"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"347638f86ffd9d5ef560429949a08a44e29bb55a647848d590cf09781be87b27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 8): libs/agno/agno/db/postgres/async_postgres.py:3722-3729 | libs/agno/agno/db/postgres/async_postgres.py:3905-3912 | libs/agno/agno/db/postgres/async_postgres.py:3970-3977 | libs/agno/agno/db/postgres/async_postgres.py:4210-4217 | libs/agno/agno/db/sqlite/async_sqlite.py:3832-3839 | libs/agno/agno/db/sqlite/async_sqlite.py:4022-4029 | libs/agno/agno/db/sqlite/async_sqlite.py:4087-4094 | libs/agno/agno/db/sqlite/async_sqlite.py:4327-4334"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3722}}}],"partialFingerprints":{"codehealthFindingId/v1":"c324cd708f8aaf320dc5c964c2001d36402df67ff504b0faf9683cf0f9c9bafc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 8): libs/agno/agno/db/postgres/postgres.py:5128-5135 | libs/agno/agno/db/postgres/postgres.py:5301-5308 | libs/agno/agno/db/postgres/postgres.py:5363-5370 | libs/agno/agno/db/postgres/postgres.py:5695-5702 | libs/agno/agno/db/sqlite/sqlite.py:4972-4979 | libs/agno/agno/db/sqlite/sqlite.py:5153-5160 | libs/agno/agno/db/sqlite/sqlite.py:5215-5222 | libs/agno/agno/db/sqlite/sqlite.py:5547-5554"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5128}}}],"partialFingerprints":{"codehealthFindingId/v1":"270f3b57e161c802a161129ff73b2f153032fc006c47e264f80abfb3dcbe4c79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 6): libs/agno/agno/db/postgres/postgres.py:5182-5189 | libs/agno/agno/db/postgres/postgres.py:5276-5283 | libs/agno/agno/db/postgres/postgres.py:5682-5689 | libs/agno/agno/db/sqlite/sqlite.py:5026-5033 | libs/agno/agno/db/sqlite/sqlite.py:5128-5135 | libs/agno/agno/db/sqlite/sqlite.py:5534-5541"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5182}}}],"partialFingerprints":{"codehealthFindingId/v1":"97b301ddc2ce75187950ffcdd9aa175b10df4bd0caad8d86e6d7ae1478ddffcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): libs/agno/agno/db/mysql/async_mysql.py:801-808 | libs/agno/agno/db/mysql/mysql.py:793-800 | libs/agno/agno/db/postgres/async_postgres.py:917-924 | libs/agno/agno/db/postgres/postgres.py:1103-1110 | libs/agno/agno/db/singlestore/singlestore.py:864-871"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92eb186a88fa1fd9b621f636cce9b20798c2ad5f4ea47b89ab1f0ffdf26b8b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): libs/agno/agno/db/mysql/async_mysql.py:854-861 | libs/agno/agno/db/mysql/mysql.py:841-848 | libs/agno/agno/db/postgres/async_postgres.py:958-965 | libs/agno/agno/db/postgres/postgres.py:1142-1149 | libs/agno/agno/db/singlestore/singlestore.py:915-922"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dcb8ffb71103e14f389738524327f2b112f99d1bbef4df2f4ab91cbf7147613"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): libs/agno/agno/os/routers/agents/router.py:1375-1383 | libs/agno/agno/os/routers/agents/router.py:1429-1436 | libs/agno/agno/os/routers/agents/router.py:1497-1504 | libs/agno/agno/os/routers/agents/router.py:1558-1565 | libs/agno/agno/os/routers/agents/router.py:1708-1715"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1375}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ad5614ee07df587d2d1f1ae2df208ecf083841317e4c6c20a35b7a25d51e0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): libs/agno/agno/agent/_tools.py:859-866 | libs/agno/agno/agent/_tools.py:911-918 | libs/agno/agno/agent/_tools.py:961-968 | libs/agno/agno/agent/_tools.py:1012-1019"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_tools.py"},"region":{"startLine":859}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6426e642324b35441d56bf432deca05539ef6c91c8dbf802068ec305964306d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:4069-4076 | libs/agno/agno/db/postgres/async_postgres.py:4318-4325 | libs/agno/agno/db/sqlite/async_sqlite.py:4186-4193 | libs/agno/agno/db/sqlite/async_sqlite.py:4439-4446"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4069}}}],"partialFingerprints":{"codehealthFindingId/v1":"207e4179bf2d7e109a0e38b0aa864a23e9780acb9dd7d06f77d950f0758db603"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): libs/agno/agno/db/postgres/postgres.py:5459-5466 | libs/agno/agno/db/postgres/postgres.py:5800-5807 | libs/agno/agno/db/sqlite/sqlite.py:5311-5318 | libs/agno/agno/db/sqlite/sqlite.py:5651-5658"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5459}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b93e511c5e9566165bd819b9008e13bca3b1e51cc2e231ea99afe3358e32e7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): cookbook/07_knowledge/09_archive/vector_dbs/milvus_db_range_search.py:61-68 | cookbook/07_knowledge/09_archive/vector_dbs/milvus_db_range_search.py:74-83 | cookbook/07_knowledge/09_archive/vector_dbs/milvus_db_range_search.py:89-96"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/09_archive/vector_dbs/milvus_db_range_search.py"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"07d29e9024464e97fc709d29333d61d5548008aca8ee3d4081c8556ca0072065"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): libs/agno/agno/db/base.py:126-133 | libs/agno/agno/db/postgres/postgres.py:219-226 | libs/agno/agno/db/sqlite/sqlite.py:207-214"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/base.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"94fcae92a060e53fa191b662ad84753ba312def246a12cdb9bf51019d47288d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): libs/agno/agno/db/gcs_json/gcs_json_db.py:485-492 | libs/agno/agno/db/in_memory/in_memory_db.py:332-339 | libs/agno/agno/db/json/json_db.py:470-477"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/gcs_json/gcs_json_db.py"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb14df0af3d65d29981f6aeb05d7dc10cd0c5212274889fef4a8ed31b6e601d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): libs/agno/agno/db/mysql/mysql.py:2464-2471 | libs/agno/agno/db/postgres/postgres.py:2848-2855 | libs/agno/agno/db/sqlite/sqlite.py:3279-3286"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2464}}}],"partialFingerprints":{"codehealthFindingId/v1":"39037e7aa8ad52ddf738c2dd0a697af04a9d0abb4f4f5c38715c3b843abd7067"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): libs/agno/agno/learn/stores/session_context.py:446-453 | libs/agno/agno/learn/stores/user_memory.py:598-605 | libs/agno/agno/learn/stores/user_profile.py:766-773"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/session_context.py"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"511aaa3eff87d1b991d6a5824f9e36f847c4e405f6d7e2884242aee721c37f25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py:84-91 | cookbook/03_teams/23_checkpointing/02_tool_error_persistence.py:74-81"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/18_checkpointing/02_tool_error_persistence.py"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"6405accb53be28b4c6ee619d6bbdf78990aead8f62b6762202fa7e9940043e2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): cookbook/04_workflows/08_human_in_the_loop/condition/02_condition_on_error.py:73-80 | cookbook/04_workflows/08_human_in_the_loop/condition/02_condition_on_error.py:152-159"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/04_workflows/08_human_in_the_loop/condition/02_condition_on_error.py"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"967a0a2643389647ca6b4ee51a326a10b8d3a46a857dff70d9e41b56bcc43da6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:126-133 | cookbook/data_labeling/_19_inter_annotator_agreement/jury_votes.py:159-166"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"07324028e4589f8016bf6c3a6b772251dae731d35853bdcc56375d18ffa0e654"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:145-152 | cookbook/data_labeling/_19_inter_annotator_agreement/jury_votes.py:180-187"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f755fa66ae3d80a6fdd45e6a74188360906ba35aa456aeffed57746721ff16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): cookbook/data_labeling/_19_inter_annotator_agreement/basic.py:201-208 | cookbook/data_labeling/_19_inter_annotator_agreement/jury_votes.py:237-244"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/data_labeling/_19_inter_annotator_agreement/basic.py"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e522565a40f2673eb3ed97f65c91807e4730c13ac0bf690160e2b87d46a6bd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/agent/_session.py:225-232 | libs/agno/agno/agent/_session.py:247-254"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_session.py"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d657c596c8517a1bf0f4b33cdec52ee79e93bb7297726722f5bed3a1e297c71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/compression/manager.py:160-167 | libs/agno/agno/compression/manager.py:270-277"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/compression/manager.py"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4aff477b1ae8747c5054ed22fd021644bbb1695a2d52065d56cfba9ca2bd4e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/context/wiki/provider.py:159-166 | libs/agno/agno/context/wiki/provider.py:232-239"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/wiki/provider.py"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c0acaa64a548ca5c170dfa34828a70d3554af25e4a8aa9d73968b3d32c71e55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/dynamo/dynamo.py:760-767 | libs/agno/agno/db/dynamo/dynamo.py:1862-1869"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/dynamo.py"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"38facc09eca50779b8f4d87241afeb7cb52e6e4f51490da61fa40cc6fb15f855"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/dynamo/utils.py:463-470 | libs/agno/agno/db/dynamo/utils.py:598-605"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/dynamo/utils.py"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"1548ed0cbe0cce555215225dd1d5cb29496159e9e880d495faf359fc99af15e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/migrations/manager.py:99-106 | libs/agno/agno/db/migrations/manager.py:179-186"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/manager.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"92ef9e045d8be23356bd9eb7237c77c893ac854238f45f1821470c9fdb6db67a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:300-308 | libs/agno/agno/db/mongo/async_mongo.py:323-330"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"eebcd3d2b17366ddf5ace21818da8a95450a99fc892c0d7e3d558c7897c4ffde"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mongo/async_mongo.py:2920-2927 | libs/agno/agno/db/mongo/async_mongo.py:3077-3084"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/async_mongo.py"},"region":{"startLine":2920}}}],"partialFingerprints":{"codehealthFindingId/v1":"0223d85f0ec008b89767eefc2a9d45abb397a8b2a0ace2b86c95ccb5c8a27935"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mongo/mongo.py:2756-2763 | libs/agno/agno/db/mongo/mongo.py:2913-2920"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mongo/mongo.py"},"region":{"startLine":2756}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fcde86a5b7a5fa17f274ec8b3fc10e54ea3b06d7e5fd7e25756b04282cd47c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:688-695 | libs/agno/agno/db/postgres/postgres.py:1000-1007"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":688}}}],"partialFingerprints":{"codehealthFindingId/v1":"be060c6d039b932b19693aaa249de525fb1654906851426a74fb56958667511a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2606-2613 | libs/agno/agno/db/singlestore/singlestore.py:2556-2563"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2606}}}],"partialFingerprints":{"codehealthFindingId/v1":"24e63884ec72e7e004490048f77ae41b7712d936d481dfb6d3253bc9d83d65c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/mysql/mysql.py:2828-2835 | libs/agno/agno/db/singlestore/singlestore.py:2784-2791"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/mysql.py"},"region":{"startLine":2828}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c7fbe64bd565ec3a41625818a1ef9af9cb2ec983a41a9d9ac19bc1e1b3feea1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:867-874 | libs/agno/agno/db/postgres/postgres.py:1055-1062"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"99e2152273155d757bdd05b2481d6c2ff9907ea176e0ad56e7047f598730ceb4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3456-3463 | libs/agno/agno/db/postgres/postgres.py:4981-4988"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3456}}}],"partialFingerprints":{"codehealthFindingId/v1":"41db561e055aa7c8f0ee692968449c2c6e684c8fcf4fc26831fbb9015a87ee2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3479-3486 | libs/agno/agno/db/sqlite/async_sqlite.py:3589-3596"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3479}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ba018de9044ae5ce60f24e1bf22f033e73434cc0e29ad407011d2d700f2df9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3735-3742 | libs/agno/agno/db/sqlite/async_sqlite.py:3845-3852"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3735}}}],"partialFingerprints":{"codehealthFindingId/v1":"966abb1593962aed2ac8e5eef70e79137698b99e52a143b2d346b53394824e0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3793-3800 | libs/agno/agno/db/sqlite/async_sqlite.py:3903-3910"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3793}}}],"partialFingerprints":{"codehealthFindingId/v1":"2442370be5ef2535e60b5d4c827fb2ad4bafde7e746b05f447f3b4f4712a3d44"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:3864-3871 | libs/agno/agno/db/sqlite/async_sqlite.py:3981-3988"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3864}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb7d67de1a88e70cdfec7211193747818ee8f4caa5fec0c737c0213a0fc60cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4246-4253 | libs/agno/agno/db/sqlite/async_sqlite.py:4365-4372"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4246}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ba69be04eac13bf09a3570ecf696e1c422b0c84dc663c747ee2f734f931443"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4301-4308 | libs/agno/agno/db/sqlite/async_sqlite.py:4422-4429"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4301}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae2a663869e22bf50f01403bbd1b2e4077262d0e411183c95dc52b81e2f0ff45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:228-235 | libs/agno/agno/db/sqlite/sqlite.py:216-223"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"990d8872e61f29c54208881a70016697d0949422dfbef328c330f438e6bf0db8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:3793-3800 | libs/agno/agno/db/sqlite/sqlite.py:3676-3683"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":3793}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfa816e6f6024895de5a73072d7ab1d4a6041aeff122a645aa4be4c7685d3c1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5004-5011 | libs/agno/agno/db/sqlite/sqlite.py:4848-4855"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5004}}}],"partialFingerprints":{"codehealthFindingId/v1":"98bb6551234e826dcdf8dde122c4e08cf1db116cc0ac3f3082a9c0dc3aeaf3d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5053-5060 | libs/agno/agno/db/sqlite/sqlite.py:4897-4904"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5053}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7182271b35822d199f3a91632adeedc0c36068706dcce537df27a67d32af7cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5140-5147 | libs/agno/agno/db/sqlite/sqlite.py:4984-4991"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5140}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c0772c871c4b0c15e0c5bf1c0053c75e8b15bb156e5e736757d34e4519f9ff9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5207-5214 | libs/agno/agno/db/sqlite/sqlite.py:5051-5058"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5207}}}],"partialFingerprints":{"codehealthFindingId/v1":"741f3254715f43fa675b596d304961fd1bb5281cbc4cb980d1eb8aab39f1c8f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5261-5268 | libs/agno/agno/db/sqlite/sqlite.py:5113-5120"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5261}}}],"partialFingerprints":{"codehealthFindingId/v1":"d71e107e18c2270779b506a0c7c2fb0a4805d7a95d344b5532fcb1aad61d8ac9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5470-5477 | libs/agno/agno/db/sqlite/sqlite.py:5322-5329"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5470}}}],"partialFingerprints":{"codehealthFindingId/v1":"592d03557c4ffc95e53b8136b537bdda44ada9371ae1e59a7fe60f46870dfaa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5729-5736 | libs/agno/agno/db/sqlite/sqlite.py:5580-5587"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5729}}}],"partialFingerprints":{"codehealthFindingId/v1":"d300f319672e6dbe7f750616717c670fb0b71a66beb8376f0652d54ec7a22731"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5786-5793 | libs/agno/agno/db/sqlite/sqlite.py:5637-5644"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5786}}}],"partialFingerprints":{"codehealthFindingId/v1":"3100a9b7fc646ec04cef607b593f10d4b19002cf75f97961710556945b15158d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/postgres/utils.py:325-332 | libs/agno/agno/db/sqlite/utils.py:305-312"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/utils.py"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"c494b94f1c2a99716afaca6a3412d334ef3e07acccd5da6f3a2cbb5c64b4b35e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/singlestore/singlestore.py:167-174 | libs/agno/agno/db/singlestore/singlestore.py:225-232"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/singlestore/singlestore.py"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"801bb45c2c05983346c54ea51d0141a84837bddc0b8e2d87574ab2d3ebd223b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:706-713 | libs/agno/agno/db/sqlite/sqlite.py:899-906"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"c03ee96179a87caf7b1c7de4374cadee21fcac0b9f2f389996207a4f58a0ac17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/db/surrealdb/surrealdb.py:1620-1627 | libs/agno/agno/db/surrealdb/surrealdb.py:1712-1719"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/surrealdb/surrealdb.py"},"region":{"startLine":1620}}}],"partialFingerprints":{"codehealthFindingId/v1":"5121af7e23103b0d16e3fc46ecb678b4325e8c38f1e5953fa351d9a7012f3e64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/knowledge/embedder/ollama.py:103-110 | libs/agno/agno/knowledge/embedder/ollama.py:140-147"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/ollama.py"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2e290b0833c5996423088981f59a393b46a2b7bf9baff436cff5c4e510aac92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:248-255 | libs/agno/agno/knowledge/loaders/sharepoint.py:364-371"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8c3d4b77efe604231ec03c3b4bfdd3c44ab20f67eed1fae33fdc36ed2bf8e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/knowledge/reader/csv_reader.py:87-94 | libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:100-107"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/csv_reader.py"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8015b4fbc15e22d67dee9bc27bafeaf375354fb0ea17c68f43fa59b24de7bfa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:159-166 | libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:275-284"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"84671f6ca26c59022710a62cf242d65c5b050ad87272ea0f9de785fa51e007c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/learn/schemas.py:860-867 | libs/agno/agno/learn/schemas.py:882-889"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0e0e71531ffed116d26137a159db1c3b4b11bba2c0a3545983acd7f7a9ca94a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:3634-3641 | libs/agno/agno/learn/stores/entity_memory.py:3648-3655"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":3634}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab93bdc95577fc5842117777094d2d66172ac1943a45aec1cc7a7ea83e79770"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:1005-1014 | libs/agno/agno/models/anthropic/claude.py:1189-1196"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7c94d7bd26f71548e818f160624b7acab87d3452db319e939968561877db33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/models/azure/ai_foundry.py:392-399 | libs/agno/agno/models/azure/ai_foundry.py:459-466"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/azure/ai_foundry.py"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8909f1562aba5f71d851bac23991a9a983b30c6c0dda74bc9dd0e3830fda59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/models/ibm/watsonx.py:146-153 | libs/agno/agno/models/ollama/chat.py:206-213"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/ibm/watsonx.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ab2ca43a6d8bdd544480e76268e211041d1e59bde6c4bcf937223d8a7702df3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/models/message.py:179-186 | libs/agno/agno/models/message.py:243-250"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/message.py"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ad11f0f18e1561eef30a4680460b5434b8d900147b0c5243ea066add56b8867"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): libs/agno/agno/os/routers/memory/memory.py:91-99 | libs/agno/agno/os/routers/memory/memory.py:482-489"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/memory/memory.py"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac704a7244ee216819fde62659ea64fead08e34f025f05822b644c7202cc00c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): libs/agno/agno/db/postgres/async_postgres.py:3892-3898 | libs/agno/agno/db/postgres/async_postgres.py:4302-4308 | libs/agno/agno/db/sqlite/async_sqlite.py:4009-4015 | libs/agno/agno/db/sqlite/async_sqlite.py:4423-4429"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":3892}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a05b6d395fab0780b6682e8dc81b47f70792a7e0b343a292edc15f748d13fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): libs/agno/agno/db/utils.py:331-337 | libs/agno/agno/db/utils.py:343-349 | libs/agno/agno/db/utils.py:355-361 | libs/agno/agno/db/utils.py:367-374"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/utils.py"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f50e56984cee860156a0db75268248dec88e1715d352b050aa930a721929b7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): libs/agno/agno/client/os.py:1816-1822 | libs/agno/agno/client/os.py:2022-2028 | libs/agno/agno/client/os.py:2084-2091"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/os.py"},"region":{"startLine":1816}}}],"partialFingerprints":{"codehealthFindingId/v1":"416a512a9d904fd904ca9e0370996241c0023e6082a85dc775093448d96c82be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): libs/agno/agno/db/mysql/async_mysql.py:1994-2000 | libs/agno/agno/db/postgres/async_postgres.py:1878-1884 | libs/agno/agno/db/sqlite/async_sqlite.py:1886-1892"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/mysql/async_mysql.py"},"region":{"startLine":1994}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d71c9674f05997dc94e6319b288fc9cb58a88dcea137b832ff4bbf23161f4f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): cookbook/02_agents/08_guardrails/openai_moderation.py:99-105 | cookbook/03_teams/18_guardrails/openai_moderation.py:96-102"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/02_agents/08_guardrails/openai_moderation.py"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"e25527432fbe7a60f7be3921c4a9acfd4339b2cc14244aa1518e35244e19d073"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): cookbook/05_agent_os/03_python_client/02_run_and_stream.py:60-66 | cookbook/05_agent_os/20_remote/01_remote_agent.py:56-62"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/03_python_client/02_run_and_stream.py"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"d455641e7dfaf8952a7434aa881ae25d24e787265265553794bef14a05a83aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): cookbook/05_agent_os/12_scheduler/02_rest_api.py:146-152 | cookbook/05_agent_os/12_scheduler/04_scheduler_tools_agent.py:172-178"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/12_scheduler/02_rest_api.py"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ba974eceee635100811d1facc0cbdb63d747058121d383080b5f983f85c274"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/db/postgres/async_postgres.py:4081-4087 | libs/agno/agno/db/sqlite/async_sqlite.py:4198-4204"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/async_postgres.py"},"region":{"startLine":4081}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2cb2c30aa5a3c5f795270e647b80ce2d42bdccd93b2782eef8c5f09a08acf6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5194-5200 | libs/agno/agno/db/sqlite/sqlite.py:5038-5044"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5194}}}],"partialFingerprints":{"codehealthFindingId/v1":"333b5a15cbfd9d666cb110933d2b6c8831ec7b4ca7b511ae06b21ec276f31da1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/db/postgres/postgres.py:5289-5295 | libs/agno/agno/db/sqlite/sqlite.py:5141-5147"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/postgres/postgres.py"},"region":{"startLine":5289}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c0fea594e2cf96553dc8bc151c6d2483090c22e60043a8977690e78ccd6edb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/db/valkey/valkey.py:891-897 | libs/agno/agno/db/valkey/valkey.py:1337-1344"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/valkey/valkey.py"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"62961392375b86fadde22d1f0e423fcbba6c0804a6b6aced7be72de5f673fde1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/eval/accuracy.py:709-715 | libs/agno/agno/eval/accuracy.py:828-834"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/eval/accuracy.py"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"6edd7254352ac9a9c6fb606d803b6fc62ff47e0f7d2098c0c5a94042481c0077"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/knowledge/embedder/aws_bedrock.py:346-352 | libs/agno/agno/knowledge/embedder/aws_bedrock.py:499-505"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/aws_bedrock.py"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d9ea8f9cc8cd63f5de281b0fa454c52e6e9ccbfcd7a2d839eeafa50562b579b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/knowledge/embedder/mistral.py:72-78 | libs/agno/agno/knowledge/embedder/mistral.py:128-134"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/mistral.py"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a2a1ccc5ee65cc57c4f8988101e37fbc57a91806c4a476c5c237154cc45c401"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:121-127 | libs/agno/agno/knowledge/loaders/sharepoint.py:141-147"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"2468f637a21b5028d5d258c4ba4c4aa6f99e09add1276649f0b27381e3978de1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/knowledge/reader/csv_reader.py:158-166 | libs/agno/agno/knowledge/reader/field_labeled_csv_reader.py:181-187"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/csv_reader.py"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e7e819537bd575dc32454455b7ad165639d269eede9d645424e64ab1e91add"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/knowledge/reader/firecrawl_reader.py:102-108 | libs/agno/agno/knowledge/reader/tavily_reader.py:139-146"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/firecrawl_reader.py"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"88241f7d963015a1cd1b6f000302a46c748b2399a95c7380fca7ed24f22a87f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/learn/machine.py:632-638 | libs/agno/agno/learn/machine.py:667-673"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/machine.py"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c0a7dfb3613057dcce4e975eccd6f1726fb1bdd24bbbf9fd6c1c7018cc090e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:2228-2234 | libs/agno/agno/learn/stores/entity_memory.py:2247-2253"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":2228}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d805758f15cd488da06e63d39828f4d87bb3c76e78dfb497afb7c85b698bd68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/models/anthropic/claude.py:1078-1084 | libs/agno/agno/models/anthropic/claude.py:1249-1255"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/anthropic/claude.py"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"955fea9d3d9f81bb985ac33782e1a977668ba1bf57350b424d82409716e0605e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/models/google/gemini_interactions.py:933-939 | libs/agno/agno/models/google/gemini_interactions.py:1186-1192"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":933}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d2ad0e75df0d8aedc161b96ff5d0d712f139a1cbe0f769f2404052cbc369a3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/interfaces/a2a/utils.py:547-553 | libs/agno/agno/os/interfaces/a2a/utils.py:566-572"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/a2a/utils.py"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b1ca946df30051fd205ea83f7528b74fffbacf80e57fa44956fa0ddf7c1352"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/interfaces/slack/state.py:109-115 | libs/agno/agno/os/interfaces/telegram/state.py:200-206"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/interfaces/slack/state.py"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"b809c890160df782d8b0f0dfe3ed2f4c92be71977aefe503de51a0844b7ad630"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/router.py:244-250 | libs/agno/agno/os/router.py:255-261"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/router.py"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"a84fc1bb710d926c960b49aaa0b8ffbec8c15b8f8b6525f91ebe6c9dd740c21d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/routers/agents/router.py:1509-1515 | libs/agno/agno/os/routers/agents/router.py:1570-1576"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1509}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce865eff712d2abec6285fce4ad6a675af79dda2888c6696d1a98e130a371497"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:673-687 | libs/agno/agno/os/routers/knowledge/knowledge.py:1194-1200"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65673fb6e33cbb9d89ff8bb2db857e52a335c0a51af60e3f13ca135d31eb261"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): libs/agno/agno/os/routers/learnings/router.py:402-408 | libs/agno/agno/os/routers/learnings/router.py:427-433"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/learnings/router.py"},"region":{"startLine":402}}}],"partialFingerprints":{"codehealthFindingId/v1":"04d042eba7c55ebc82953bf4c0283211c5fb9fff9de2d64370f3981a1a218db7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): cookbook/07_knowledge/09_archive/embedders/vllm_embedder_local.py:54-59 | cookbook/07_knowledge/09_archive/embedders/vllm_embedder_remote.py:51-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/07_knowledge/09_archive/embedders/vllm_embedder_local.py"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"2daf3c35162eb442c43e121702d5824ba707d71f59d05eabeb21698404241dc9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/context/calendar/provider.py:152-157 | libs/agno/agno/context/gmail/provider.py:167-172"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/calendar/provider.py"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"09125f40345d626998a12651a1451d94cdb5401504ddae525c0eefefc302ba43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/context/google/utils.py:56-61 | libs/agno/agno/context/google/utils.py:85-91"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/google/utils.py"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"b546c021048f2b8ad4e516c38e008a4e19c451085fe5a6e5078dcde5f7bc2ae0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/integrations/discord/client.py:188-194 | libs/agno/agno/os/interfaces/whatsapp/helpers.py:350-355"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/integrations/discord/client.py"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e5a83826be8dc56fc6afce4f1b18dac5f02cffc4af9cbb3813c068cc8e3de6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/knowledge/embedder/ollama.py:92-97 | libs/agno/agno/knowledge/embedder/ollama.py:128-133"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/embedder/ollama.py"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"b379a95f2d42c5d0fe3502f984ddad9aefe6f95c0d4882e3db481f826665a320"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/knowledge/knowledge.py:1607-1612 | libs/agno/agno/knowledge/knowledge.py:1762-1767"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/knowledge.py"},"region":{"startLine":1607}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6bbbff2bdd470dc4fa93ceeee5ca1d1125d39cafd94740f43d19b48a76a7c1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/knowledge/loaders/github.py:546-551 | libs/agno/agno/knowledge/loaders/github.py:568-573"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/github.py"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"7507ff5071455bc13630e4ba2406d9dfcb8b6981a542665c074da1a7809a745a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/knowledge/loaders/sharepoint.py:85-90 | libs/agno/agno/knowledge/loaders/sharepoint.py:105-110"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/loaders/sharepoint.py"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2a05a0b91e9b640e2c6ca056b7e47f659ebbd00a52a001b0bbb2ed378037467"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/learn/schemas.py:880-885 | libs/agno/agno/learn/stores/entity_memory.py:2023-2028"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/schemas.py"},"region":{"startLine":880}}}],"partialFingerprints":{"codehealthFindingId/v1":"e783c2c958c697c2eb1f04355419532c975decf58be36862dc880d942be8c93d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/learn/stores/entity_memory.py:618-626 | libs/agno/agno/learn/stores/entity_memory.py:650-655"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/learn/stores/entity_memory.py"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"eadb3dd0829d3cb2b5366a3d902338cef1eddf23c9b798c5a8980adb2c193510"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/models/openai/responses.py:529-534 | libs/agno/agno/models/openai/responses.py:536-541"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/openai/responses.py"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"31603846e8c231ece652f97ff66006185a07c9cb1c96f21e83804278305e3609"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:113-118 | libs/agno/agno/os/routers/knowledge/knowledge.py:265-270"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d887b774644e3eaed5c0021aace7b661aa553b29201b2eb39dbfcba3d785d3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:521-526 | libs/agno/agno/os/routers/memory/memory.py:545-576"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"3361dd36e3c04a42e1d2e7d0785a467bb3a3fb97365e1e58e95473445865a918"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/os/routers/learnings/router.py:76-81 | libs/agno/agno/os/routers/learnings/router.py:293-298"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/learnings/router.py"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"4619d6e1763946d671d4fd04da0d4f7b61a1d2a1476fd691d4e78b587f54a6a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): libs/agno/agno/os/routers/registry/utils.py:35-40 | libs/agno/agno/os/routers/registry/utils.py:60-65"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/registry/utils.py"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"1110d898fb158c24a099719a99b8beb7a437e0dcc2422e1380afd98af9b0a00c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): libs/agno/agno/models/base.py:697-701 | libs/agno/agno/models/base.py:917-921 | libs/agno/agno/models/base.py:1406-1410 | libs/agno/agno/models/base.py:1685-1689"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":697}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3bf31878848d9ea02ce0e8655261334654b49a4bccf223fbe30931a9e559745"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): libs/agno/agno/metrics.py:197-201 | libs/agno/agno/metrics.py:337-341 | libs/agno/agno/metrics.py:610-614"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/metrics.py"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"55af320b005d6af9c3044e4eb8ba5bbdce2e21495ee6699e84afe8d2146c2e57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): libs/agno/agno/os/routers/evals/evals.py:122-126 | libs/agno/agno/os/routers/memory/memory.py:268-272 | libs/agno/agno/os/routers/session/session.py:117-121"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/evals/evals.py"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a5031515c78f84e1f2777f4fb48feb31d7096e32b79009a55a44f964bff1f98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): libs/agno/agno/os/routers/session/session.py:771-775 | libs/agno/agno/os/routers/session/session.py:948-952 | libs/agno/agno/os/routers/session/session.py:1055-1059"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/session/session.py"},"region":{"startLine":771}}}],"partialFingerprints":{"codehealthFindingId/v1":"0810218cc8c3861be8c07b20bee34eb3928533a343e35c8e12fb0272bfd8c9b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): cookbook/05_agent_os/12_scheduler/01_run_in_agentos.py:134-138 | cookbook/05_agent_os/12_scheduler/04_scheduler_tools_agent.py:175-179"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cookbook/05_agent_os/12_scheduler/01_run_in_agentos.py"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e9d29dd6403e27bd8c08f124bbe39491f7dca35175fb6a71216aeaba28fb778"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): libs/agno/agno/context/fs/provider.py:48-52 | libs/agno/agno/context/workspace/provider.py:54-58"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/context/fs/provider.py"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"1264de694cc4ca13e71c5cd3ab33e1bede402193dc579e37790e3ee021bddd54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): libs/agno/agno/db/sqlite/async_sqlite.py:2965-2969 | libs/agno/agno/db/sqlite/sqlite.py:2875-2879"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/sqlite/async_sqlite.py"},"region":{"startLine":2965}}}],"partialFingerprints":{"codehealthFindingId/v1":"c19031922b1c623b26161b3e018c4dccc35e12d8452343794b220b12a8dd27be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): libs/agno/agno/os/routers/knowledge/knowledge.py:259-263 | libs/agno/agno/os/routers/knowledge/knowledge.py:417-421"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/knowledge/knowledge.py"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b80bea1fd6f3f1752de4a9d127b6501e26f9efb08bf9348d34c8d8a5ec434c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): libs/agno/agno/os/routers/memory/memory.py:355-359 | libs/agno/agno/os/routers/memory/memory.py:481-485"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/memory/memory.py"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"f246174c05fc98b7169ee86a031a4a72141e6e062e84b49b46387b152fc7c009"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/workflow/workflow.py: libs/agno/agno/workflow/workflow.py changed 8 times in last 90 days, max complexity 162. 4 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/workflow/workflow.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2e6128aafc6c56be33e0cc3acb0cec196814d9fc043e0cd309aeb334437d9f1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/team/_run.py: libs/agno/agno/team/_run.py changed 10 times in last 90 days, max complexity 122. 4 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_run.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc88bb8b4fc9da56b06e7ab14544929a3aaacc5447bf22c0eccccf2866b5c974"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/agent/_run.py: libs/agno/agno/agent/_run.py changed 7 times in last 90 days, max complexity 101. 2 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_run.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"703f3d169cf392ae0e5ddedd032b5ae4f0773cf24ab593dd678691fad19fc206"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/models/base.py: libs/agno/agno/models/base.py changed 8 times in last 90 days, max complexity 85. 5 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/base.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f275efd1d8e9ac6f338f071c733df59db4781234d887376a60319aa96578edad"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/team/_storage.py: libs/agno/agno/team/_storage.py changed 5 times in last 90 days, max complexity 125. 3 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_storage.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40c75ea68ea9342945533888dc43707ed5255904dbbd77dd5942671f2b7a0f72"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/os/app.py: libs/agno/agno/os/app.py changed 14 times in last 90 days, max complexity 43. 5 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/app.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec6946595578988f52857195c4c3ece5da335e5439f3c72914828a68f128e45"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/tools/function.py: libs/agno/agno/tools/function.py changed 10 times in last 90 days, max complexity 53. 8 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/function.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca15817324a2e600af1d7170429601966fbbfe2462a774cf15add1531f740df3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/models/google/gemini_interactions.py: libs/agno/agno/models/google/gemini_interactions.py changed 6 times in last 90 days, max complexity 78. 3 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/models/google/gemini_interactions.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"70642a43a68fefb6711fda6d8aef4e08ab1f4a2464b44b933a936138c4cb56a5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/team/_tools.py: libs/agno/agno/team/_tools.py changed 6 times in last 90 days, max complexity 77. 5 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/team/_tools.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f13d68f4a2940638d1870f3033e009da0488c1bb98271784e691b709475eb24b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: libs/agno/agno/agent/_storage.py: libs/agno/agno/agent/_storage.py changed 4 times in last 90 days, max complexity 115. 2 of those changes were fix/bug commits \u2014 a defect-dense hotspot worth prioritising."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f32f14700b1f85ecb26b8b6e280899f2432eeb67c2bfa42b09a06e3092f3da"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 22 significant file(s) lose their only recent owner: cookbook/data_labeling/_18_quality_review/basic.py, libs/agno/agno/agent/_run_options.py, libs/agno/agno/team/_run_options.py, cookbook/data_labeling/image_search/workflows/ingest.py, cookbook/01_demo/agents/notion_wiki.py, cookbook/01_demo/evals/cases.py, cookbook/00_quickstart/agent_search_over_knowledge.py, cookbook/01_demo/agents/git_wiki.py (\u002B14 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6074f2bd3a287a02773d5f23ce54c4ca281fac2e468c77e4651a62fa0b4403a6"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 22 significant file(s) lose their only recent owner: libs/agno/agno/utils/print_response/workflow.py, libs/agno/agno/db/migrations/versions/v2_5_6.py, cookbook/04_workflows/06_advanced_concepts/session_state/state_in_router.py, cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/09_multi_step_mixed_hitl.py, cookbook/04_workflows/06_advanced_concepts/session_state/state_in_function.py, libs/agno/agno/tools/openweather.py, cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/05_output_review_and_tool_confirmation.py, cookbook/04_workflows/08_human_in_the_loop/dual_level_hitl/03_condition_and_tool_confirmation.py (\u002B14 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2d07412e1777444f1092bb015668ae1bb8ba27dc3cf84589d44b720bc13bfb3b"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 10 significant file(s) lose their only recent owner: cookbook/93_components/workflows/save_hitl_user_input_steps.py, cookbook/04_workflows/08_human_in_the_loop/router/07_router_output_review.py, libs/agno/agno/utils/models/_genai_compat.py, cookbook/93_components/workflows/save_hitl_confirmation_steps.py, cookbook/04_workflows/08_human_in_the_loop/decision_tree/01_decision_tree.py, cookbook/04_workflows/08_human_in_the_loop/decision_tree/02_multi_component_decision_tree.py, cookbook/04_workflows/08_human_in_the_loop/timeout/02_confirmation_timeout.py, cookbook/02_agents/11_approvals/approval_post_hook.py (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"76707b1b7ddede80b8fddc2507bccd09b82efb4ac0b07c3635489b800eeba895"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 8 significant file(s) lose their only recent owner: libs/agno/agno/context/mcp/provider.py, libs/agno/agno/context/gmail/provider.py, libs/agno/agno/context/calendar/provider.py, cookbook/90_models/groq/deep_knowledge.py, libs/agno/agno/os/interfaces/slack/state.py, cookbook/07_knowledge/04_advanced/06_prefix_search.py, libs/agno/agno/context/web/exa_mcp.py, libs/agno/agno/os/interfaces/slack/types.py. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ddf89858496b75670785784ba7f242a10bbeafd9fe7463da8b81c71aaafc02a4"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 3 significant file(s) lose their only recent owner: libs/agno/agno/knowledge/loaders/gcs.py, libs/agno/agno/knowledge/loaders/base.py, libs/agno/agno/knowledge/remote_knowledge.py. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7591ec1e19e34f2a4faaea153fba0f090a579b63aad68373c547426f9bfbcc16"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 16 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (82 single-owned of 1514 analysed files in total)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fe18f98599e3ee17b1f7385835ee4bb1a311599dd4f0439dc9f9764b8bb6734f"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f5ebf98557d808bd414d5ef2b4ee489204d3d677a9c8732262fe3712d78ef42c"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"507bc40b1b1fa0fb720c880240c9657a7f24c1391e3805c5b94336874d857ddb"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aaa9b9208304a57e0f4a75dc47eb0beadad95125e6465d4dc709f17c9183ebee"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cd2e76b80606b6ca6de90afbce4083d443148cc98bf73b82cc70dc6948bedd26"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5160fdc49521518e0cc19a59ca90d8afabedd05812d205687a329a7343f718ba"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"682d2db5ac43904e3e42cdd09422be18182b8ab219a6406dafada11513f5b29b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ddf7036139abf57bbc8ee27808f190ca8216c2e19ba639a2ea59994360e9f966"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ffa11743d66281c4ca649f291160eb4a1d8a014b99b6af8f378b3819531353f9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03a239cc3138ae34deed1ecf0fe3822e42c717c84a22a82a0bed7f65d52ba297"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ad14be7a0bb8fb6623c1295086e3b33332277aee39b505c39cac817149cc91e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"50c1379a949d84a7efd20e7ab4d4978f2fdb401675f58c0ea396912668e218ea"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"df84536078c7f038b88a15bd1afb84e410d8ce1aa5dd037436ace537eadfd775"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5923f15e1da342dafca99a58b84d4d5d9f7add3e75312ed6c338503f713bd52d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7f76098f5393be68f2c753a4647122554a00f8cbf164a73d746f31b9e47d749"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"488e59cb0373e58c260041be1cb11ef3e574a658b3631523ad5698cc2abbc046"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"44fd4aceef9a2c6b311a23180263f5c4b067d26ede3cf6873a83b60008a6c5a6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6e3729f28e8482889572b54a347a858fc0207060472169f2a94b973365088436"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"571051ad588e6487b91ce9ddcd46b3623d175d7d466687bd67a685910daf2105"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"232526e51ccc0bf9ff8267d90534161f3528ad85581672f0d670037239eac468"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f4049dac2281632136921d8479f4f1e7e02f7ac687ba7b93292fddc3715143c6"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ad608288d534aa80a2fa0231ec5416c52fa9e40369f3ac91e26f0f4230431f73"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90a204dd54a7927f27f5cfb37fef4e6eb1e704395cbd1766cc81a0948d002741"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fb1dcf050caa64f384fe64df8e56e7c7341f42ba0907a21dcbdfdb6eeb374b49"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"944d8afa34a252ef7ecfb5e6140df0328035d090a35700ac9d7ebe8088d40cfb"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8db8b74889d865fa104264d4399c646a05383f48ee993d9109e0b11659097acf"},"taxa":[{"id":"CWE-95","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c1c0209d59e0e7c70ee293617392329d35c619bc0fd145a9052d9308eb5a7be8"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"55f54756997965efed3e04b15a901e52b4a893a046bfd296b138e61a8daa8236"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1cc44d9331edc1a88db328d399ab43cfbb5ec7d03722e15d299bf8c89f610303"},"taxa":[{"id":"CWE-522","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f92267ed4e2c22b026ba57137261d8cadbc0302d21421a1c0a19e8b441e07a07"},"taxa":[{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d746395b4d34159604931d5883692f3d36008730522affb526037eeea6b468fb"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8aba695a950aaeb5c5a673c0391322ae57e00ed039d779831655e8c465f1d83f"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"026c51a6767e8e6efd5773eeb025d2bf382748c4bf57f561d77f607d891096a1"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e74c3f2031cd58953943c4fe6971150f1358fc7fe41973724dddee4b7cb86862"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ba0c3e10fedc3f8cf9f7eabbb6ae132bfa06b7eb3fdc34d92ef03b0b9585d2bf"},"taxa":[{"id":"CWE-611","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0e41c2754eb8654ffaeaf52e5831397d1277e9092f3b7399bf6f58d382a759c7"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d9fa72b64ec2dc5c776da021130ac4fc56bdfacbfb3f82e3d6faf172c72ce5b5"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f2ad8cba9b94be6edadda08f8300e223a2c9dc14675ef5544a6ada0f7dc75bd4"},"taxa":[{"id":"CWE-502","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4874031e64e10e540595ad9d906182c50fbdb8e07b8481a2f6d128c4c44af3bb"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b6e0411b081df3e7007cb295b0bd6fc4f5827f51357eb7b8638e58694086c9b9"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8be039ffa81cc2e984c6ca4da463fb1e7c06fea373eef0a1af67f702caf62a87"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"13e8d11b32a5dbc1b1f06d5cf731d51ec4d7ad50a13e415d77be479a651f7c82"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ad53dbf2c8d2e18ce52c2047fc10ea76f30775ea89778239145615e79ab9b751"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3c6b6097aaf8e857581ca19687d9c0d75dbd95d9f073203082132542bfcba48b"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7227beaa302307b8880834812ae34025ef1540fb3024aac587578d8ebe1c9f48"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ef0a6de265fe5bdfa9b92e08041f4278a3152ec203115bc57979489698ea1a5b"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bc6fc6f91921e0685972ad585bb09c4d072f6dbecb89ccfd8f562fcc999db8c8"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"91c3e458aac3ad03a4e2a2b82d04fa68ebed6fb84d8c14f4b74a570aab2163ac"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"983cee592872f55a2ea4e423403249c61284bdcd1f53760bcd54bc39026d8527"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3364e069895639e7453485e60f3fd61c9fcceaeae43d6ae88b08886b21eb2b1f"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ef464d1dca4c1599244a2fbebcfd88c24bee6f7b12770924cc186176eb9a8272"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"11498fcd139bd4adf32bd2dffbb07c9c8c3ff64552436f770706dc0719ed559b"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"085f001cdb83a010f0b9891ad38ce683fe95bc60477a8b79cdecc272dc309271"},"taxa":[{"id":"CWE-327","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/shopify.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"69f1b748fd463342004067fdb9bb7c2d92ee2027afc07d9cc57496a376db05c5"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_cluster.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00426c2503531e2f5315190d8926bf63bf1b091648875a84dc92a960a0ee29d2"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/db/migrations/versions/v2_3_0.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e241f28e7fb0f26736db863d4093477d071636cf5519e0aa9304c25d09810103"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/rds/db_instance.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7378bff2f436efaf60a8094e73eb9c8adcc542c7674ead3dd2c67227aae641d3"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/docling.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c4ff0d3deb460f0d8b03a460442c594a8d723ba2d78f229115f68182cf180f7"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/docker/resources.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87cc29c22e31efbcc0bbf882a6f40532b3d678fb7d903d7374cf5e4c89c0c9e6"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/docker.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e41b480861eab71dfaa512363c2f850bd52aff9acec25dec6d63751247dde8f"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resources.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2635ced9f840435c94623fa3596fa1d8be60a465346700b5dbeab37aa02e5fd"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ec2/security_group.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a48fb49b59d4c8dbe6861aa2183f129ed46dcb1229d09135ac3156512e69649"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/task_definition.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ba8f4e8578031814c8bd0eea19bf908ca0497af7c9921be2e91f329badf7dc1"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/elasticache/cluster.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00779b89eb1a1642886e2766caacd2dcaf013fbe3d059383cebfa4eaf777f922"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/client/a2a/client.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b7c0ecbfdba4fb6054fe1fc5a22e418e96fdd3a9e5568f3ad92ee603f654e32"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno_infra/agno/aws/resource/ecs/service.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e439547270b0cd16e52a63f65dcdc4a051ef42427750064c600388dccd2d5c3c"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 149 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than listed individually (162 orphaned of 1514 analysed files in total)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: router.py \u2194 router.py: \u0060libs/agno/agno/os/routers/agents/router.py\u0060 and \u0060libs/agno/agno/os/routers/teams/router.py\u0060 change together 72% of the time (18 of the 25 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/os/routers/agents/router.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7aa94f350eee8d4a35d57f40ce86a5494fa5ff2d245c8c8aa1010be2706b5cb"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: _storage.py \u2194 _storage.py: \u0060libs/agno/agno/agent/_storage.py\u0060 and \u0060libs/agno/agno/team/_storage.py\u0060 change together 58% of the time (7 of the 12 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. If they belong together, co-locate them; if not, break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/agent/_storage.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d430ef434db6c4592fedc9610ab50eb3592dfd58050d255f464f0beb1c2a2dd"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: markdown_reader.py \u2194 text_reader.py: \u0060libs/agno/agno/knowledge/reader/markdown_reader.py\u0060 and \u0060libs/agno/agno/knowledge/reader/text_reader.py\u0060 change together 55% of the time (6 of the 11 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/knowledge/reader/markdown_reader.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"590fb158bd3e6ce9fdf1a0bc5c657801b5913e08bf861903d5f4811d13550950"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: groq.py \u2194 ollama.py: \u0060libs/agno/agno/reasoning/groq.py\u0060 and \u0060libs/agno/agno/reasoning/ollama.py\u0060 change together 50% of the time (5 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/groq.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"433142e2134e6a58f2643af48cf6a23f5ce95d0afaf709928a2a6224373147cb"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: deepseek.py \u2194 ollama.py: \u0060libs/agno/agno/reasoning/deepseek.py\u0060 and \u0060libs/agno/agno/reasoning/ollama.py\u0060 change together 50% of the time (5 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/deepseek.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed741db8d8e08f8e2ff63742096c16bf7d46e07f73e6795e91beb13602016b7d"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: ollama.py \u2194 openai.py: \u0060libs/agno/agno/reasoning/ollama.py\u0060 and \u0060libs/agno/agno/reasoning/openai.py\u0060 change together 50% of the time (5 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/reasoning/ollama.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6e4f7806a985102e04693f24c78c08b22d218d736b486d26fce1c040c2aa2d1"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: drive.py \u2194 gmail.py: \u0060libs/agno/agno/tools/google/drive.py\u0060 and \u0060libs/agno/agno/tools/google/gmail.py\u0060 change together 50% of the time (5 of the 10 commits that touched the less-changed of the two, renames followed) with no explicit dependency \u2014 a hidden/logical coupling. They already sit in the same directory, so if they share structure, extract the common part into one unit; otherwise break the coupling."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"libs/agno/agno/tools/google/drive.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fb56a5e0875f3da87bbacca6cfc2a9015c49fb19a95350b8d71d66a873cf5d"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}},{"ruleId":"D36","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20126ed4709526f87d475ff3d3f5a5c0c8e2347aa62f04d622f907f75c430021"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0752d0df7434000fcabf1048e2de30a7a1a8b982b3db9a19898c4dec199856b4"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"cf67ea465f609430b436cdcbc5aacb59f07989a4693503ee645868c52dec592e"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8e29439bc4d22ec04f381d7a8385bb411440187268dde46d68ef4aacaee99f69"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4efbd4b7d51b02570735b7dae5d9a6b2601e849d6bb5f4a872ebd396a117bb09"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a5bf59030b62d3d836e4e12f7b9aab794ee549300de7855f906ec51440881c6"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3809462a257204c96d647837387d2ae9d29646b7fa6bc733acbb1a2559d5884d"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7486989503ab477d67e302b5b6519e638b4ee86d8ad318313840bf0e7734fbfd"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"522389a1ac4f0061a89e8a902acee1fafb1282412d8139db65c66b3b91689c64"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2b600f4ba21765a17665a4572fcd39eab2aac0e3f96bbcefcab4be458be20ea2"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ce40f399b8683d1802cd2b347520062a7b465c664b4420df858afe1461b1dd5f"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de102592d344f43e8f93c9a38299ec26c5c85cd860e1ecdaed223e4168e49e4a"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"071d9a566adac9ca8ad812503208cc04f79249e74b317b67ebcf474bcaade3f1"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d38071f6b08fb383d8fe4384c158520c44e380f48ee7bc2afa3ea91a29906190"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9201641bedacb78a3fe81dd08c5d4db35dc2dc9535ccac57fddf75ef009ac8ff"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"93d82facbe8c1c9eba6748181ca5a7b3360f2a53593f02b81631e2708f3ab911"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"35944206f4cd672fe5a7194d245ba9cff2f5cb1c6f7297158f2c41f9fc8a552c"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03b9aed56870f4e05f749633d80e422f0edc21382a896ee24d729809979356d8"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0727e796af684334341a0a02b6fde7ad5e4acf710197cf81b149cc4fcb577a6a"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"fce891357c8fc9f6b94f6646f80a8eb4b5525c8536ad4a8657bb64a1c4275b9e"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de8b3ccf0e51ae297e0855b4d3ea276232b8fb4de8330efdc6bc4eae2efd7f40"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ab6a3ed43f7c02f95f435157d5499a00a75f01e8fc1527d4c2a73edd4b410ad5"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6f6d746685731253c982d6753a4c73eff18c4e8c4e2726b1b538b9c064069202"}},{"ruleId":"D38","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ed0e9c94c7e4d2c38cfa7433bd617a9fa307fcc6fb55300c59c6eb4f1d012462"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"7b1a1664b7dc4c10d409085e1b180b568ebfe08f83e965e21ce90b98a21563c3"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d0e60c86d7c8c00bfa47d400944f43d5d25a5810956d1c2eb57b8d4d54bad179"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d96c2ee1e543268799384f86e5c57dedcdd248b3be35fd84325b4346276fd1eb"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9b96ab43ab07bd1f3f876c482f60f977df5aeb961ecacf3293879044a4189d14"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a888d1212683476611107e9aeae9958466151eb91d313b50f5aeac5e11342b3b"}},{"ruleId":"D38","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67ade32241a20c1b451589c3589493a86080eace133f46ec4beca060f15ebb9b"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-327","guid":"e51910ff-67b5-3c51-aa3d-92837d9eab90","name":"CWE-327","shortDescription":{"text":"CWE-327"},"helpUri":"https://cwe.mitre.org/data/definitions/327.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-502","guid":"f7d3b296-aac0-5c5a-b706-e07faba26c36","name":"CWE-502","shortDescription":{"text":"CWE-502"},"helpUri":"https://cwe.mitre.org/data/definitions/502.html"},{"id":"CWE-522","guid":"71fb233e-ce6a-ae57-9419-ef8373540b09","name":"CWE-522","shortDescription":{"text":"CWE-522"},"helpUri":"https://cwe.mitre.org/data/definitions/522.html"},{"id":"CWE-611","guid":"1afbae66-ea29-2d59-aaa2-134e3ae2e85a","name":"CWE-611","shortDescription":{"text":"CWE-611"},"helpUri":"https://cwe.mitre.org/data/definitions/611.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"},{"id":"CWE-95","guid":"400bba4e-483c-5c50-a695-114fa9168003","name":"CWE-95","shortDescription":{"text":"CWE-95"},"helpUri":"https://cwe.mitre.org/data/definitions/95.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":86,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}