{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.318729Z","repo":{"ref":{"host":"github.com","owner":"jamezpolley","name":"claude-plugins"},"default_branch":"main","clone_url":"https://github.com/jamezpolley/claude-plugins.git","html_url":"https://github.com/jamezpolley/claude-plugins","description":"Claude Code plugin: end-of-session knowledge sync","stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":388,"primary_language":"Python","license_spdx":null,"created_at":"2026-05-08T10:59:10Z","pushed_at":"2026-06-21T03:32:53Z","security_policy_url":null,"distribution":{"owner_created_at":"2010-03-06T01:08:51Z","owner_type":"User","release_assets":[]}},"commit_sha":"d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70","profile":{"lines_by_language":{"Python":4557},"files_by_category":{"docs":21,"config":11,"source":9,"test":6,"generated":1},"source_lines":2901,"test_lines":1656},"pillars":{"ai_provenance":{"score":59.2,"confidence":0.89,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.5925,"suspected_share":0.0,"estimated_share":0.5925,"ai_artifacts":2.0,"flagged_work_units":1.0,"flagged_releases":null,"style_index":0.517},"summary":"Explicit AI attribution on 59% of first-party code added; an estimated 59% including velocity signals."},"quality":{"score":50.6,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":73.1,"duplication":76.8,"lint":38.8,"testing":46.5,"docs":0.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.57, no CI test run detected; 10% of function code in complex or long functions; 4% duplicated lines. Weakest area: docs."},"security":{"score":59.0,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":85.0,"dependencies":11.3,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 74 known vulnerabilities in 16 dependencies; 1 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":3.0,"checked":3.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":77.0,"attributed_commits":63.0,"attributed_commit_share":0.8181818181818182,"effective_loc":11930.0,"attributed_loc":7068.0,"attributed_loc_share":0.5924559932942163,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 63 attributed commits, 7,068 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70","url":"https://github.com/jamezpolley/claude-plugins/commit/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"867d48e6a96b182250996ee17437d613f9ed1caf","url":"https://github.com/jamezpolley/claude-plugins/commit/867d48e6a96b182250996ee17437d613f9ed1caf","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c15400606a20dc3100e267a4b395d87cfeb82779","url":"https://github.com/jamezpolley/claude-plugins/commit/c15400606a20dc3100e267a4b395d87cfeb82779","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7dead13ed9839dd409c9a38f8680998d9ec06678","url":"https://github.com/jamezpolley/claude-plugins/commit/7dead13ed9839dd409c9a38f8680998d9ec06678","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1c75f7045c772b9c7659d4ce8b39053e50bcbad6","url":"https://github.com/jamezpolley/claude-plugins/commit/1c75f7045c772b9c7659d4ce8b39053e50bcbad6","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"71d3b54fa2a73ac8524882dd1ab964dd9e837e32","url":"https://github.com/jamezpolley/claude-plugins/commit/71d3b54fa2a73ac8524882dd1ab964dd9e837e32","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3531548b122a53afed0475f763fc28b98f03fd83","url":"https://github.com/jamezpolley/claude-plugins/commit/3531548b122a53afed0475f763fc28b98f03fd83","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cbbc1e99e4d54fbb8f8b30dd221f9ca439e250ce","url":"https://github.com/jamezpolley/claude-plugins/commit/cbbc1e99e4d54fbb8f8b30dd221f9ca439e250ce","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"679b9682293664a01af1c000838df06c38df7ac0","url":"https://github.com/jamezpolley/claude-plugins/commit/679b9682293664a01af1c000838df06c38df7ac0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"bdd420145e125de7ce1f9f5ce9d8186e1e4909c7","url":"https://github.com/jamezpolley/claude-plugins/commit/bdd420145e125de7ce1f9f5ce9d8186e1e4909c7","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"eccd0a97ee923236c79052321c9546d349e84dc1","url":"https://github.com/jamezpolley/claude-plugins/commit/eccd0a97ee923236c79052321c9546d349e84dc1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"e1d3288028b11f7d01d874eba89380b2560c73f4","url":"https://github.com/jamezpolley/claude-plugins/commit/e1d3288028b11f7d01d874eba89380b2560c73f4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6ee3863ad70cc07da2403ec35e3c87f7ea38da4c","url":"https://github.com/jamezpolley/claude-plugins/commit/6ee3863ad70cc07da2403ec35e3c87f7ea38da4c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3a49d7ef2084e1d59f00b4f052df400dc06f9258","url":"https://github.com/jamezpolley/claude-plugins/commit/3a49d7ef2084e1d59f00b4f052df400dc06f9258","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"08c1361bec4ab6cb15f74e3fd4bc1a5ab27fd5a4","url":"https://github.com/jamezpolley/claude-plugins/commit/08c1361bec4ab6cb15f74e3fd4bc1a5ab27fd5a4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2eba0e68aeaa54f5a406afb0d3b3bb4272e86fc9","url":"https://github.com/jamezpolley/claude-plugins/commit/2eba0e68aeaa54f5a406afb0d3b3bb4272e86fc9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"02f3b196011db289fef5808c632b9f726fe27d37","url":"https://github.com/jamezpolley/claude-plugins/commit/02f3b196011db289fef5808c632b9f726fe27d37","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"3ca3b5d84f835649c94476f47cd0e57f258ac6f0","url":"https://github.com/jamezpolley/claude-plugins/commit/3ca3b5d84f835649c94476f47cd0e57f258ac6f0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"07a85cd586718cb73bf9786bd2350e122bea4ab0","url":"https://github.com/jamezpolley/claude-plugins/commit/07a85cd586718cb73bf9786bd2350e122bea4ab0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"2a8e7822dfd10d8234b1755505862513efc977ef","url":"https://github.com/jamezpolley/claude-plugins/commit/2a8e7822dfd10d8234b1755505862513efc977ef","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"01e7c4b9c3b1ebd517dd37ace56b522cfe62f2df","url":"https://github.com/jamezpolley/claude-plugins/commit/01e7c4b9c3b1ebd517dd37ace56b522cfe62f2df","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c6b1accfdfa5dd2c1521802808c1b5f3d044e353","url":"https://github.com/jamezpolley/claude-plugins/commit/c6b1accfdfa5dd2c1521802808c1b5f3d044e353","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"53d36d6c41742e241869baee1549dae9b15a988a","url":"https://github.com/jamezpolley/claude-plugins/commit/53d36d6c41742e241869baee1549dae9b15a988a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"8ef6e692216a349c0406edc4c1d61cca7fdcd7cc","url":"https://github.com/jamezpolley/claude-plugins/commit/8ef6e692216a349c0406edc4c1d61cca7fdcd7cc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"21e78efa6090aa80a7c98e9bd6e739210f85e716","url":"https://github.com/jamezpolley/claude-plugins/commit/21e78efa6090aa80a7c98e9bd6e739210f85e716","weight":0.9}],"data":{"attributed_loc_by_commit":{"287e0f18e59143ed0dbff496e11f1ec4706058a6":0,"440400ef1ac9bdbcc75ea01691475902c6fa2f32":0,"c477fae2c1707f112a26927a8ad868d67564c239":0,"219a6b4763ebd4099dfaf2b3f942b5a88295c16c":0,"476e9d901f1c354bd404dd8e59276e3caafda635":0,"c197c715404c5ab205ae0f9163be0aa1ade1e1d4":0,"03eb6c1c82a8f38505442ae3111a02edf8010f86":0,"7cf10cd54beb0db2ba2f42794dc9f37f5476a312":0,"6db99f10aaaa0d11b9c3498dc64b0adb3ad3c268":0,"587f32a7b5242852383a3b297de873703e4ca94a":0,"fdac812a2a1daa268565f7b9afeceff817ef4452":0,"9f431bed0001b90210deeec1faeb06cf38e22baa":0,"2d0d9621db73ad9171dfe100079e0615501c00fc":0,"ba9fbe5cd3ebebd0a578b625d3e8a6f6b2224e1b":0,"f71573078efaf2a443b180ea0c803ab40562c111":0,"adf3247ef20581f9d5489fe572230bcb55324bea":0,"31ae7da2f6379bbd91dd58188cd4298fce3d5cd5":0,"cd9c89e789a9cb861a5c399f068e7e34a503dad7":0,"45c4a3815e710476597f57288ef2458aae0cc2cd":0,"55d2c54fe44f348600ef3f3493bdee4686b40b24":0,"cc3eec750ebb8ade256529dfa76a30e9538d54a5":0,"73aa3a9c9feb72542cbee4c45843d14215bf8d87":0,"72fa473a33296e40650af4f34faf54c92165d31e":0,"e9ade80143a56a7a81ae89e63e2dbb8b32dc30d3":0,"124669014069abf1ab533c5c2a1f60437154bfac":0,"8b86e308c38b7b98bddf618c4da78014a857fddd":0,"d1fd5d28689831547810993b87cf973b03aa3db4":0,"0eb0313f82ed0b95a588fd4db711e3292ecdd733":0,"ecdee7f77a91c1762ba9f2764e041f9d34ae6dc5":0,"ef8c34f133825d393acf18bbed4601b81b5452c5":0,"0b882523f7daf13767953edc2068f1fb716d2510":0,"d4f062f3cb311b4607c63a188bba43b6543d366d":0,"759b406f6ff9c77c23e97ab5957628a34dafcac2":1222,"bb540c6cdd0b89dc66d36de478c11be88ed7d68a":9,"5e17fcb0650f35643462b3b4bd626202e95095bb":89,"8282afd2a982bef0a4f9f8702ff4d2e7ad13fd83":12,"05e11756f234bfa999e5083d8bb2576db32a07ec":18,"4e30494053abc4e02c7f60fdbc83f2de7870653c":100,"21e78efa6090aa80a7c98e9bd6e739210f85e716":0,"8ef6e692216a349c0406edc4c1d61cca7fdcd7cc":98,"53d36d6c41742e241869baee1549dae9b15a988a":2232,"c6b1accfdfa5dd2c1521802808c1b5f3d044e353":123,"01e7c4b9c3b1ebd517dd37ace56b522cfe62f2df":867,"2a8e7822dfd10d8234b1755505862513efc977ef":0,"07a85cd586718cb73bf9786bd2350e122bea4ab0":6,"3ca3b5d84f835649c94476f47cd0e57f258ac6f0":0,"02f3b196011db289fef5808c632b9f726fe27d37":23,"2eba0e68aeaa54f5a406afb0d3b3bb4272e86fc9":0,"08c1361bec4ab6cb15f74e3fd4bc1a5ab27fd5a4":834,"3a49d7ef2084e1d59f00b4f052df400dc06f9258":171,"6ee3863ad70cc07da2403ec35e3c87f7ea38da4c":47,"e1d3288028b11f7d01d874eba89380b2560c73f4":79,"eccd0a97ee923236c79052321c9546d349e84dc1":537,"bdd420145e125de7ce1f9f5ce9d8186e1e4909c7":96,"679b9682293664a01af1c000838df06c38df7ac0":81,"cbbc1e99e4d54fbb8f8b30dd221f9ca439e250ce":57,"3531548b122a53afed0475f763fc28b98f03fd83":13,"71d3b54fa2a73ac8524882dd1ab964dd9e837e32":154,"1c75f7045c772b9c7659d4ce8b39053e50bcbad6":0,"7dead13ed9839dd409c9a38f8680998d9ec06678":200,"c15400606a20dc3100e267a4b395d87cfeb82779":0,"867d48e6a96b182250996ee17437d613f9ed1caf":0,"d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70":0},"tools":{"claude-code":{"name":"Claude Code","commits":63,"loc":7068,"first_seen":1778237850,"last_seen":1782012772}},"monthly":{"2026-05":{"loc":0,"attributed_loc":0},"2026-06":{"loc":11930,"attributed_loc":7068}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":2.0,"workflow_agents":0.0,"tools_configured":2.0,"earliest_adoption":1778244453.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/CLAUDE.md","weight":0.5},{"kind":"ai-artifact","description":"tg-local-client/mcp-src/AGENTS.md (generic-agent configuration)","ref":"tg-local-client/mcp-src/AGENTS.md","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/tg-local-client/mcp-src/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1778244453},{"tool":"generic-agent","path":"tg-local-client/mcp-src/AGENTS.md","added_at":null}],"workflows":[],"tools":["claude-code","generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":8.0,"flagged_units":1.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":7373.0,"flagged_loc":3251.0,"flagged_loc_share":0.44093313440933135,"max_loc_per_hour":783.3734939759036,"median_loc_per_hour":219.69508719453694,"pr_timed_units":0.0,"excluded_import_loc":4557.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"3,251 lines of first-party code in ~4.2h (783 lines/hour, 5 commit session)","ref":"02f3b196011db289fef5808c632b9f726fe27d37","url":"https://github.com/jamezpolley/claude-plugins/commit/02f3b196011db289fef5808c632b9f726fe27d37","weight":0.23501204819277108}],"data":{"flagged_loc_by_commit":{"53d36d6c41742e241869baee1549dae9b15a988a":2232,"c6b1accfdfa5dd2c1521802808c1b5f3d044e353":123,"01e7c4b9c3b1ebd517dd37ace56b522cfe62f2df":867,"07a85cd586718cb73bf9786bd2350e122bea4ab0":6,"02f3b196011db289fef5808c632b9f726fe27d37":23},"excluded_import_commits":["68d964d5748591a25f83970bd8a94320f82992ce"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":2901.0,"index":0.517,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":3.0,"per_kloc:emoji_in_code":1.034,"files:emoji_in_code":2.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":2.0,"findings_high":1.0,"findings_medium":1.0,"findings_low":0.0,"weighted_findings":1.35,"scanned_lines":2901.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query","severity":"high","message":"Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low]","path":"tg-local-client/mcp-src/src/tg_local_client/mcp_server.py","line":581,"fingerprint":"python.sqlalchemy.security.sqlalchemy-execute-raw-query:tg-local-client/mcp-src/src/tg_local_client/mcp_server.py:581"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":"tg-local-client/mcp-src/src/tg_local_client/mcp_server.py","line":864,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:tg-local-client/mcp-src/src/tg_local_client/mcp_server.py:864"}],"evidence":[],"data":{"rulesets":["python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":16.0,"vulnerabilities":74.0,"vulns_critical":6.0,"vulns_high":32.0,"vulns_medium":31.0,"vulns_low":5.0,"vulns_unknown":0.0,"penalty":131.0},"findings":[{"rule_id":"osv/GHSA-82r6-8w77-94w6","severity":"critical","message":"anyio@4.13.0 (PyPI) is affected by PYSEC-2026-4025, GHSA-82r6-8w77-94w6","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"anyio@4.13.0 (PyPI):GHSA-82r6-8w77-94w6"},{"rule_id":"osv/GHSA-7vr2-2fgp-9w7p","severity":"critical","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4355, GHSA-7vr2-2fgp-9w7p","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-7vr2-2fgp-9w7p"},{"rule_id":"osv/GHSA-8m4g-j4wp-wgcg","severity":"critical","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4356, GHSA-8m4g-j4wp-wgcg","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-8m4g-j4wp-wgcg"},{"rule_id":"osv/GHSA-6v38-4h7w-rj9h","severity":"critical","message":"authlib@1.7.2 (PyPI) is affected by GHSA-6v38-4h7w-rj9h","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-6v38-4h7w-rj9h"},{"rule_id":"osv/GHSA-6q48-6c7w-9gw2","severity":"critical","message":"certifi@2026.5.20 (PyPI) is affected by PYSEC-2026-4320, GHSA-6q48-6c7w-9gw2","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"certifi@2026.5.20 (PyPI):GHSA-6q48-6c7w-9gw2"},{"rule_id":"osv/GHSA-ffc3-869f-jxw9","severity":"critical","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4145, GHSA-ffc3-869f-jxw9","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-ffc3-869f-jxw9"},{"rule_id":"osv/GHSA-jg22-mg44-37j8","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2104, GHSA-jg22-mg44-37j8","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-jg22-mg44-37j8"},{"rule_id":"osv/GHSA-hg6j-4rv6-33pg","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2105, GHSA-hg6j-4rv6-33pg","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-hg6j-4rv6-33pg"},{"rule_id":"osv/GHSA-m6qw-4cw2-hm4m","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2106, GHSA-m6qw-4cw2-hm4m","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-m6qw-4cw2-hm4m"},{"rule_id":"osv/GHSA-4fvr-rgm6-gqmc","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2107, GHSA-4fvr-rgm6-gqmc","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-4fvr-rgm6-gqmc"},{"rule_id":"osv/GHSA-xcgm-r5h9-7989","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2108, GHSA-xcgm-r5h9-7989","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-xcgm-r5h9-7989"},{"rule_id":"osv/GHSA-63hw-fmq6-xxg2","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2110, GHSA-63hw-fmq6-xxg2","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-63hw-fmq6-xxg2"},{"rule_id":"osv/GHSA-g3cq-j2xw-wf74","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2111, GHSA-g3cq-j2xw-wf74","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-g3cq-j2xw-wf74"},{"rule_id":"osv/GHSA-2fqr-mr3j-6wp8","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2112, GHSA-2fqr-mr3j-6wp8","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-2fqr-mr3j-6wp8"},{"rule_id":"osv/GHSA-9x8q-7h8h-wcw9","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2113, GHSA-9x8q-7h8h-wcw9","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-9x8q-7h8h-wcw9"},{"rule_id":"osv/GHSA-4m7w-qmgq-4wj5","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-237, GHSA-4m7w-qmgq-4wj5","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-4m7w-qmgq-4wj5"},{"rule_id":"osv/GHSA-cq5v-8q36-5273","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-3545, GHSA-cq5v-8q36-5273","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-cq5v-8q36-5273"},{"rule_id":"osv/GHSA-2g87-pp6c-29x5","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-2g87-pp6c-29x5","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-2g87-pp6c-29x5"},{"rule_id":"osv/GHSA-5wr8-gcqf-gqf3","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-5wr8-gcqf-gqf3","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-5wr8-gcqf-gqf3"},{"rule_id":"osv/GHSA-9xw5-w5jj-pvcg","severity":"high","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-9xw5-w5jj-pvcg","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-9xw5-w5jj-pvcg"},{"rule_id":"osv/GHSA-c73q-w75p-j82v","severity":"high","message":"authlib@1.7.2 (PyPI) is affected by GHSA-c73q-w75p-j82v","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-c73q-w75p-j82v"},{"rule_id":"osv/GHSA-g6cj-pr64-35w5","severity":"high","message":"cryptography@48.0.0 (PyPI) is affected by PYSEC-2026-3552, GHSA-g6cj-pr64-35w5","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"cryptography@48.0.0 (PyPI):GHSA-g6cj-pr64-35w5"},{"rule_id":"osv/GHSA-jwv3-5hgf-82ww","severity":"high","message":"cryptography@48.0.0 (PyPI) is affected by PYSEC-2026-3553, GHSA-jwv3-5hgf-82ww","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"cryptography@48.0.0 (PyPI):GHSA-jwv3-5hgf-82ww"},{"rule_id":"osv/GHSA-537c-gmf6-5ccf","severity":"high","message":"cryptography@48.0.0 (PyPI) is affected by GHSA-537c-gmf6-5ccf","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"cryptography@48.0.0 (PyPI):GHSA-537c-gmf6-5ccf"},{"rule_id":"osv/GHSA-45c3-73f7-pv4m","severity":"high","message":"dnspython@2.8.0 (PyPI) is affected by GHSA-45c3-73f7-pv4m","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"dnspython@2.8.0 (PyPI):GHSA-45c3-73f7-pv4m"},{"rule_id":"osv/GHSA-vvf4-9x63-8xvv","severity":"high","message":"dnspython@2.8.0 (PyPI) is affected by GHSA-vvf4-9x63-8xvv","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"dnspython@2.8.0 (PyPI):GHSA-vvf4-9x63-8xvv"},{"rule_id":"osv/GHSA-jpxq-7h8p-2q76","severity":"high","message":"joserfc@1.6.8 (PyPI) is affected by GHSA-jpxq-7h8p-2q76","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"joserfc@1.6.8 (PyPI):GHSA-jpxq-7h8p-2q76"},{"rule_id":"osv/GHSA-vj7q-gjh5-988w","severity":"high","message":"mcp@1.27.2 (PyPI) is affected by PYSEC-2026-3483, GHSA-vj7q-gjh5-988w","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"mcp@1.27.2 (PyPI):GHSA-vj7q-gjh5-988w"},{"rule_id":"osv/GHSA-84m7-p3x7-pcfv","severity":"high","message":"mcp@1.27.2 (PyPI) is affected by GHSA-84m7-p3x7-pcfv","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"mcp@1.27.2 (PyPI):GHSA-84m7-p3x7-pcfv"},{"rule_id":"osv/GHSA-9j54-fg26-wv3r","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4143, GHSA-9j54-fg26-wv3r","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-9j54-fg26-wv3r"},{"rule_id":"osv/GHSA-9v7f-9g4p-ffgj","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4144, GHSA-9v7f-9g4p-ffgj","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-9v7f-9g4p-ffgj"},{"rule_id":"osv/GHSA-p4g4-x82p-q773","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4149, GHSA-p4g4-x82p-q773","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-p4g4-x82p-q773"},{"rule_id":"osv/GHSA-r6x4-923q-g947","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4150, GHSA-r6x4-923q-g947","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-r6x4-923q-g947"},{"rule_id":"osv/GHSA-w2cx-738m-mc7w","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4151, GHSA-w2cx-738m-mc7w","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-w2cx-738m-mc7w"},{"rule_id":"osv/GHSA-x33g-cr3x-6449","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4183, GHSA-x33g-cr3x-6449","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-x33g-cr3x-6449"},{"rule_id":"osv/GHSA-pxh4-856f-4h89","severity":"high","message":"pyjwt@2.13.0 (PyPI) is affected by GHSA-pxh4-856f-4h89","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-pxh4-856f-4h89"},{"rule_id":"osv/GHSA-5rvq-cxj2-64vf","severity":"high","message":"python-multipart@0.0.29 (PyPI) is affected by PYSEC-2026-3036, GHSA-5rvq-cxj2-64vf","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"python-multipart@0.0.29 (PyPI):GHSA-5rvq-cxj2-64vf"},{"rule_id":"osv/GHSA-82w8-qh3p-5jfq","severity":"high","message":"starlette@1.2.0 (PyPI) is affected by PYSEC-2026-249, GHSA-82w8-qh3p-5jfq","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"starlette@1.2.0 (PyPI):GHSA-82w8-qh3p-5jfq"},{"rule_id":"osv/GHSA-hpj7-wq8m-9hgp","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-2109, GHSA-hpj7-wq8m-9hgp","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-hpj7-wq8m-9hgp"},{"rule_id":"osv/GHSA-mfx4-hv73-q22v","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-3546, GHSA-mfx4-hv73-q22v","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-mfx4-hv73-q22v"},{"rule_id":"osv/GHSA-mq44-7p77-q5h7","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by PYSEC-2026-3547, GHSA-mq44-7p77-q5h7","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-mq44-7p77-q5h7"},{"rule_id":"osv/GHSA-494j-54xm-rwp3","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-494j-54xm-rwp3","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-494j-54xm-rwp3"},{"rule_id":"osv/GHSA-6cjc-53gc-5rqm","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-6cjc-53gc-5rqm","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-6cjc-53gc-5rqm"},{"rule_id":"osv/GHSA-f9xw-jh8m-3mwq","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-f9xw-jh8m-3mwq","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-f9xw-jh8m-3mwq"},{"rule_id":"osv/GHSA-pqxq-w44r-73xw","severity":"medium","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-pqxq-w44r-73xw","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-pqxq-w44r-73xw"},{"rule_id":"osv/GHSA-5p39-cfhj-2xmp","severity":"medium","message":"anyio@4.13.0 (PyPI) is affected by PYSEC-2026-4024, GHSA-5p39-cfhj-2xmp","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"anyio@4.13.0 (PyPI):GHSA-5p39-cfhj-2xmp"},{"rule_id":"osv/GHSA-c5mf-xmp2-59rc","severity":"medium","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4357, GHSA-c5mf-xmp2-59rc","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-c5mf-xmp2-59rc"},{"rule_id":"osv/GHSA-fch4-3c6x-j4gc","severity":"medium","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4358, GHSA-fch4-3c6x-j4gc","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-fch4-3c6x-j4gc"},{"rule_id":"osv/GHSA-q686-2qmg-hqc7","severity":"medium","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4359, GHSA-q686-2qmg-hqc7","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-q686-2qmg-hqc7"},{"rule_id":"osv/GHSA-x4rv-c3wx-4cr8","severity":"medium","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4360, GHSA-x4rv-c3wx-4cr8","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-x4rv-c3wx-4cr8"},{"rule_id":"osv/GHSA-m2h6-j472-rp4c","severity":"medium","message":"cryptography@48.0.0 (PyPI) is affected by PYSEC-2026-3554, GHSA-m2h6-j472-rp4c","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"cryptography@48.0.0 (PyPI):GHSA-m2h6-j472-rp4c"},{"rule_id":"osv/GHSA-7xgj-8392-5q4r","severity":"medium","message":"fastmcp@3.3.1 (PyPI) is affected by GHSA-7xgj-8392-5q4r","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"fastmcp@3.3.1 (PyPI):GHSA-7xgj-8392-5q4r"},{"rule_id":"osv/GHSA-7xgj-8392-5q4r","severity":"medium","message":"fastmcp-slim@3.3.1 (PyPI) is affected by GHSA-7xgj-8392-5q4r","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"fastmcp-slim@3.3.1 (PyPI):GHSA-7xgj-8392-5q4r"},{"rule_id":"osv/GHSA-9pg5-8c7x-5hfx","severity":"medium","message":"joserfc@1.6.8 (PyPI) is affected by GHSA-9pg5-8c7x-5hfx","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"joserfc@1.6.8 (PyPI):GHSA-9pg5-8c7x-5hfx"},{"rule_id":"osv/GHSA-5h93-6whr-6q8j","severity":"medium","message":"mcp@1.27.2 (PyPI) is affected by GHSA-5h93-6whr-6q8j","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"mcp@1.27.2 (PyPI):GHSA-5h93-6whr-6q8j"},{"rule_id":"osv/GHSA-rwrf-2pqf-9j8j","severity":"medium","message":"mcp@1.27.2 (PyPI) is affected by GHSA-rwrf-2pqf-9j8j","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"mcp@1.27.2 (PyPI):GHSA-rwrf-2pqf-9j8j"},{"rule_id":"osv/GHSA-w4fh-qvv9-3v23","severity":"medium","message":"mcp@1.27.2 (PyPI) is affected by GHSA-w4fh-qvv9-3v23","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"mcp@1.27.2 (PyPI):GHSA-w4fh-qvv9-3v23"},{"rule_id":"osv/GHSA-54p9-h82j-f925","severity":"medium","message":"multidict@6.7.1 (PyPI) is affected by PYSEC-2026-4244, GHSA-54p9-h82j-f925","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"multidict@6.7.1 (PyPI):GHSA-54p9-h82j-f925"},{"rule_id":"osv/GHSA-mf5v-w3w3-f6cg","severity":"medium","message":"opentelemetry-api@1.42.1 (PyPI) is affected by GHSA-mf5v-w3w3-f6cg","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"opentelemetry-api@1.42.1 (PyPI):GHSA-mf5v-w3w3-f6cg"},{"rule_id":"osv/GHSA-xcq7-p3pf-p88h","severity":"medium","message":"opentelemetry-api@1.42.1 (PyPI) is affected by GHSA-xcq7-p3pf-p88h","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"opentelemetry-api@1.42.1 (PyPI):GHSA-xcq7-p3pf-p88h"},{"rule_id":"osv/GHSA-4xgf-cpjx-pc3j","severity":"medium","message":"pydantic-settings@2.14.1 (PyPI) is affected by GHSA-4xgf-cpjx-pc3j","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pydantic-settings@2.14.1 (PyPI):GHSA-4xgf-cpjx-pc3j"},{"rule_id":"osv/GHSA-2gx3-rcp4-g85q","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4140, GHSA-2gx3-rcp4-g85q","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-2gx3-rcp4-g85q"},{"rule_id":"osv/GHSA-42vr-xj54-vc7v","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4141, GHSA-42vr-xj54-vc7v","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-42vr-xj54-vc7v"},{"rule_id":"osv/GHSA-8wjv-2p76-3863","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4142, GHSA-8wjv-2p76-3863","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-8wjv-2p76-3863"},{"rule_id":"osv/GHSA-gvp8-978c-rx2q","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4146, GHSA-gvp8-978c-rx2q","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-gvp8-978c-rx2q"},{"rule_id":"osv/GHSA-hxm8-2xgr-2p9m","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4147, GHSA-hxm8-2xgr-2p9m","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-hxm8-2xgr-2p9m"},{"rule_id":"osv/GHSA-jwrc-g2q2-pq5p","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4148, GHSA-jwrc-g2q2-pq5p","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-jwrc-g2q2-pq5p"},{"rule_id":"osv/GHSA-w6j9-cwv2-h6wq","severity":"medium","message":"pyjwt@2.13.0 (PyPI) is affected by PYSEC-2026-4152, GHSA-w6j9-cwv2-h6wq","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"pyjwt@2.13.0 (PyPI):GHSA-w6j9-cwv2-h6wq"},{"rule_id":"osv/GHSA-jp82-jpqv-5vv3","severity":"medium","message":"starlette@1.2.0 (PyPI) is affected by PYSEC-2026-248, GHSA-jp82-jpqv-5vv3","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"starlette@1.2.0 (PyPI):GHSA-jp82-jpqv-5vv3"},{"rule_id":"osv/GHSA-gx76-c99x-2c96","severity":"low","message":"aiohttp@3.13.5 (PyPI) is affected by GHSA-gx76-c99x-2c96","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"aiohttp@3.13.5 (PyPI):GHSA-gx76-c99x-2c96"},{"rule_id":"osv/GHSA-jj7h-c3hg-m23x","severity":"low","message":"authlib@1.7.2 (PyPI) is affected by PYSEC-2026-4354, GHSA-jj7h-c3hg-m23x","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"authlib@1.7.2 (PyPI):GHSA-jj7h-c3hg-m23x"},{"rule_id":"osv/GHSA-6jv3-5f52-599m","severity":"low","message":"python-multipart@0.0.29 (PyPI) is affected by PYSEC-2026-3037, GHSA-6jv3-5f52-599m","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"python-multipart@0.0.29 (PyPI):GHSA-6jv3-5f52-599m"},{"rule_id":"osv/GHSA-v9pg-7xvm-68hf","severity":"low","message":"python-multipart@0.0.29 (PyPI) is affected by PYSEC-2026-3040, GHSA-v9pg-7xvm-68hf","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"python-multipart@0.0.29 (PyPI):GHSA-v9pg-7xvm-68hf"},{"rule_id":"osv/GHSA-vffw-93wf-4j4q","severity":"low","message":"python-multipart@0.0.29 (PyPI) is affected by PYSEC-2026-3041, GHSA-vffw-93wf-4j4q","path":"tg-local-client/mcp-src/uv.lock","line":null,"fingerprint":"python-multipart@0.0.29 (PyPI):GHSA-vffw-93wf-4j4q"}],"evidence":[],"data":{"ecosystems":["PyPI"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":95.0,"function_nloc":1512.0,"mean_ccn":4.18,"p90_ccn":8.0,"complex_functions":2.0,"long_functions":0.0,"many_param_functions":4.0,"risky_nloc_share":0.1045},"findings":[],"evidence":[{"kind":"complex-function","description":"get_tail_command in tg-local-client/mcp-src/src/tg_local_client/mcp_server.py: complexity 34, 95 lines","ref":"tg-local-client/mcp-src/src/tg_local_client/mcp_server.py","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/tg-local-client/mcp-src/src/tg_local_client/mcp_server.py#L710","weight":0.5666666666666667},{"kind":"complex-function","description":"stream in tg-local-client/mcp-src/src/tg_local_client/tail.py: complexity 29, 63 lines","ref":"tg-local-client/mcp-src/src/tg_local_client/tail.py","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/tg-local-client/mcp-src/src/tg_local_client/tail.py#L546","weight":0.48333333333333334}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2311.0,"duplicated_lines":102.0,"duplicated_share":0.0441,"files":9.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: tg-local-client/mcp-src/src/tg_local_client/db.py:106 and tg-local-client/mcp-src/src/tg_local_client/db.py:178","ref":"tg-local-client/mcp-src/src/tg_local_client/db.py","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/tg-local-client/mcp-src/src/tg_local_client/db.py#L106","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: tg-local-client/mcp-src/src/tg_local_client/mcp_server.py:199 and tg-local-client/mcp-src/src/tg_local_client/mcp_server.py:243","ref":"tg-local-client/mcp-src/src/tg_local_client/mcp_server.py","url":"https://github.com/jamezpolley/claude-plugins/blob/d18bcc72b2cc6db8d3e19e5f19a49d3e8af90b70/tg-local-client/mcp-src/src/tg_local_client/mcp_server.py#L199","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":5.0,"weighted_findings":11.0,"scanned_lines":2901.0,"category:best-practice":3.0,"category:maintainability":2.0},"findings":[{"rule_id":"opengrep/python.lang.best-practice.open-never-closed","severity":"high","message":"file object opened without corresponding close","path":"tg-local-client/mcp-src/src/tg_local_client/tail.py","line":243,"fingerprint":"python.lang.best-practice.open-never-closed:tg-local-client/mcp-src/src/tg_local_client/tail.py:243"},{"rule_id":"opengrep/python.lang.best-practice.open-never-closed","severity":"high","message":"file object opened without corresponding close","path":"tg-local-client/mcp-src/src/tg_local_client/tail.py","line":318,"fingerprint":"python.lang.best-practice.open-never-closed:tg-local-client/mcp-src/src/tg_local_client/tail.py:318"},{"rule_id":"opengrep/python.lang.best-practice.arbitrary-sleep","severity":"high","message":"time.sleep() call; did you mean to leave this in?","path":"tg-local-client/mcp-src/src/tg_local_client/tail.py","line":630,"fingerprint":"python.lang.best-practice.arbitrary-sleep:tg-local-client/mcp-src/src/tg_local_client/tail.py:630"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_manual\" a function or an attribute? If it is a function, you may have meant quote.is_manual() because quote.is_manual is always true.","path":"tg-local-client/mcp-src/src/tg_local_client/listener.py","line":105,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:tg-local-client/mcp-src/src/tg_local_client/listener.py:105"},{"rule_id":"opengrep/python.lang.maintainability.is-function-without-parentheses","severity":"medium","message":"Is \"is_bot\" a function or an attribute? If it is a function, you may have meant me.is_bot() because me.is_bot is always true.","path":"tg-local-client/mcp-src/src/tg_local_client/mcp_server.py","line":1106,"fingerprint":"python.lang.maintainability.is-function-without-parentheses:tg-local-client/mcp-src/src/tg_local_client/mcp_server.py:1106"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":1.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.1481,"test_lines":1656.0,"source_lines":2901.0,"test_ratio":0.5708,"ci_files":0.0,"cochange_share":0.037,"cochange_commits":27.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":0.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":2.0,"escapes_per_kloc":0.689},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":0.0,"other_lines":2901.0,"files_blamed":9.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:other_findings":5.0,"quality:other_per_kloc":1.724,"security:ai_findings":0.0,"security:other_findings":2.0,"security:other_per_kloc":0.689},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}