{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:51:59.951377Z","repo":{"ref":{"host":"github.com","owner":"AnoRebel","name":"ollama-proxy"},"default_branch":"main","clone_url":"https://github.com/AnoRebel/ollama-proxy.git","html_url":"https://github.com/AnoRebel/ollama-proxy","description":"Reverse proxy for my ollama instances","stars":2,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":5841,"primary_language":"Go","license_spdx":"MIT","created_at":"2026-01-04T21:18:07Z","pushed_at":"2026-08-15T13:41:14Z","security_policy_url":null,"distribution":{"owner_created_at":"2016-06-17T23:40:36Z","owner_type":"User","release_assets":[{"name":"checksums.txt","size":1242,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/checksums.txt"},{"name":"ollama-proxy_1.0.0_darwin_amd64.tar.gz","size":10899178,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_amd64.tar.gz"},{"name":"ollama-proxy_1.0.0_darwin_amd64.zip","size":10895516,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_amd64.zip"},{"name":"ollama-proxy_1.0.0_darwin_arm64.tar.gz","size":9020459,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_arm64.tar.gz"},{"name":"ollama-proxy_1.0.0_darwin_arm64.zip","size":9020496,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_arm64.zip"},{"name":"ollama-proxy_1.0.0_linux_amd64.tar.gz","size":10717181,"download_count":2,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_linux_amd64.tar.gz"},{"name":"ollama-proxy_1.0.0_linux_amd64.zip","size":10720284,"download_count":2,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_linux_amd64.zip"},{"name":"ollama-proxy_1.0.0_linux_arm64.tar.gz","size":8684654,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_linux_arm64.tar.gz"},{"name":"ollama-proxy_1.0.0_linux_arm64.zip","size":8685504,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_linux_arm64.zip"},{"name":"ollama-proxy_1.0.0_windows_amd64.tar.gz","size":10995675,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_windows_amd64.tar.gz"},{"name":"ollama-proxy_1.0.0_windows_amd64.zip","size":10996187,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_windows_amd64.zip"},{"name":"ollama-proxy_1.0.0_windows_arm64.tar.gz","size":8762702,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_windows_arm64.tar.gz"},{"name":"ollama-proxy_1.0.0_windows_arm64.zip","size":8760867,"download_count":0,"release_tag":"v1.0.0","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_windows_arm64.zip"}]}},"commit_sha":"80bdc7bf909022bdbc47ad2fbe74c66022f42739","profile":{"lines_by_language":{"Go":22586,"TypeScript":2592,"JavaScript":2552},"files_by_category":{"source":57,"test":39,"binary":14,"other":13,"config":12,"docs":5,"vendored":4,"generated":1},"source_lines":14781,"test_lines":12949},"pillars":{"ai_provenance":{"score":35.1,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.3506,"suspected_share":0.3424,"estimated_share":0.3506,"ai_artifacts":0.0,"flagged_work_units":6.0,"flagged_releases":null,"style_index":0.034},"summary":"Explicit AI attribution on 35% of first-party code added; an estimated 35% including velocity signals."},"quality":{"score":81.9,"confidence":0.9,"coverage":1.0,"label":"strong","breakdown":{"complexity":68.6,"duplication":73.4,"lint":93.5,"testing":100.0,"docs":80.0,"type_safety":40.0,"process":null},"summary":"Code quality is strong: test-to-source ratio 0.88, CI runs tests; 13% of function code in complex or long functions; 5% duplicated lines. Weakest area: type safety."},"security":{"score":62.8,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":90.5,"sast":94.8,"dependencies":74.1,"ci_actions":0.8,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 14 known vulnerabilities in 2 dependencies; 2 high-severity SAST findings; 24 high-severity workflow issues. 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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":102.0,"attributed_commits":50.0,"attributed_commit_share":0.49019607843137253,"effective_loc":32981.0,"attributed_loc":11564.0,"attributed_loc_share":0.35062611806797855,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 50 attributed commits, 11,564 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"42a17ce960e8cabb39e22be2f0ad2c885c524148","url":"https://github.com/AnoRebel/ollama-proxy/commit/42a17ce960e8cabb39e22be2f0ad2c885c524148","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"e9e48301e3a8b52c141e02e532fc756c629f412c","url":"https://github.com/AnoRebel/ollama-proxy/commit/e9e48301e3a8b52c141e02e532fc756c629f412c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"d3a55326fdf0f5ae25927b2d3e62457adef348a1","url":"https://github.com/AnoRebel/ollama-proxy/commit/d3a55326fdf0f5ae25927b2d3e62457adef348a1","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"c918ed76b730eef5ed760f476b00e144e273e9cd","url":"https://github.com/AnoRebel/ollama-proxy/commit/c918ed76b730eef5ed760f476b00e144e273e9cd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"1449314567dab17e2029467cc294d70896cf29fd","url":"https://github.com/AnoRebel/ollama-proxy/commit/1449314567dab17e2029467cc294d70896cf29fd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"08cd1170ec42d1e24d0ef946713cf87acb6d6182","url":"https://github.com/AnoRebel/ollama-proxy/commit/08cd1170ec42d1e24d0ef946713cf87acb6d6182","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"540b4662e5610ec30c02cb27c1751560c75deb75","url":"https://github.com/AnoRebel/ollama-proxy/commit/540b4662e5610ec30c02cb27c1751560c75deb75","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"5fa02473b935161802fa5250657d804fbc789cc8","url":"https://github.com/AnoRebel/ollama-proxy/commit/5fa02473b935161802fa5250657d804fbc789cc8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"45abca6ccce6923acc24c3734612d9892ea0a5bd","url":"https://github.com/AnoRebel/ollama-proxy/commit/45abca6ccce6923acc24c3734612d9892ea0a5bd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"daff93bbdc72adfd19b2dd54f9fc73557dd90fcb","url":"https://github.com/AnoRebel/ollama-proxy/commit/daff93bbdc72adfd19b2dd54f9fc73557dd90fcb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"7a049738be3d699367df9570991c00e71769cacc","url":"https://github.com/AnoRebel/ollama-proxy/commit/7a049738be3d699367df9570991c00e71769cacc","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"b99c4e4fdd100c5ee404c48deeba207f1cae9dab","url":"https://github.com/AnoRebel/ollama-proxy/commit/b99c4e4fdd100c5ee404c48deeba207f1cae9dab","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"dda04367a4820dc91728cdd11158f29f3fb7d443","url":"https://github.com/AnoRebel/ollama-proxy/commit/dda04367a4820dc91728cdd11158f29f3fb7d443","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"5bb3d0cd9faf848f03e6de731b3df180e6871bff","url":"https://github.com/AnoRebel/ollama-proxy/commit/5bb3d0cd9faf848f03e6de731b3df180e6871bff","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"6c7907590c8386ba6369ee01eac6451589512a48","url":"https://github.com/AnoRebel/ollama-proxy/commit/6c7907590c8386ba6369ee01eac6451589512a48","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"ffcd5633e378fa27567d43b6c4819b594cc0aea3","url":"https://github.com/AnoRebel/ollama-proxy/commit/ffcd5633e378fa27567d43b6c4819b594cc0aea3","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"698858707cf122dda4830dfec4d40bc1592bb8e4","url":"https://github.com/AnoRebel/ollama-proxy/commit/698858707cf122dda4830dfec4d40bc1592bb8e4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"7e2122e43a5b686657813305c499deb0063dd770","url":"https://github.com/AnoRebel/ollama-proxy/commit/7e2122e43a5b686657813305c499deb0063dd770","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"e9a658895429a18d3d285b6f52a431b7ede7046b","url":"https://github.com/AnoRebel/ollama-proxy/commit/e9a658895429a18d3d285b6f52a431b7ede7046b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"934d46d34009338010d60718981e1018aa902bb9","url":"https://github.com/AnoRebel/ollama-proxy/commit/934d46d34009338010d60718981e1018aa902bb9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"8ea4bd751ef0f01cd66fecf4ac0885cf4bfa45a0","url":"https://github.com/AnoRebel/ollama-proxy/commit/8ea4bd751ef0f01cd66fecf4ac0885cf4bfa45a0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"cb04d1ec977c1e4daf0f2f9ffe0a70132374a06d","url":"https://github.com/AnoRebel/ollama-proxy/commit/cb04d1ec977c1e4daf0f2f9ffe0a70132374a06d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"51c3f7b78d7f095a07f2ef37f4d2797d1cd192fb","url":"https://github.com/AnoRebel/ollama-proxy/commit/51c3f7b78d7f095a07f2ef37f4d2797d1cd192fb","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"760cb2e679be8e39bdcaf4e59388ecf04739dd19","url":"https://github.com/AnoRebel/ollama-proxy/commit/760cb2e679be8e39bdcaf4e59388ecf04739dd19","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: author email noreply@anthropic.com","ref":"33a3e5ef40aca5fed4a1de3b47d062a6db21e3d4","url":"https://github.com/AnoRebel/ollama-proxy/commit/33a3e5ef40aca5fed4a1de3b47d062a6db21e3d4","weight":0.9}],"data":{"attributed_loc_by_commit":{"8518a64b1f16850e1a353c89779ee0b3d4deabe4":4951,"b4fec073cb9b12d95f6707ae249c5dfb34079a56":18,"7925eca139c04990af60adeceb0c1707a237034a":0,"70e51f3591e5346ee5b8163af59bb02556a3b0db":8,"456e5e96f93f5959fc67f33597ad1bcc882e5a41":0,"6608268c409482ae02a954026dbef047c9528bbf":58,"71f32236a6ad7027673715ce018e9df238768358":1,"38df476e7c241e57a8a7c967ee9547090728007b":17,"1f88c7948b16e17635b2e78b9594aaf3be34158f":25,"56eb6245dfaa9587187bcf5f5ef313e4f81da4c3":67,"8fe326c492bdb3049e290446fc1151548c2aa66a":0,"684fd509136019a2fb7288c2b8eec7dd4e913e7a":46,"d331fe2992add6a6868e41f98c9d6d5abf489408":3931,"2e2384e8d2d57f9cf82330e13bb4f9dd96f04b54":172,"945f715e23fbad7922fc50c74a0dd0c454113873":0,"dea49f98fce43adbb4c434aebb7a36256cfba780":41,"f274204823d452fa37f29cf0c383bab9800aa81a":0,"732949b62feeb96c663ad90413fa802219427a8a":564,"11b8307ec801cc1d670341336cf30d9197ba47e9":482,"f461b923a2c348f269c8d0b04cb896daee8cd373":1,"01e13ef6b85b7c7326bbf38ce70e5f779b60331a":6,"c074bd605d4d36b5b321185fc546042ed60f411d":16,"d4c33e6541cb380969b66f3eeeb5bdf9694c06bf":11,"88bcfcdfea28798a0df76889b8a8bbe25268ad46":16,"5089b0a2e1c72c114355952c51a8488d705ad72c":91,"33a3e5ef40aca5fed4a1de3b47d062a6db21e3d4":14,"760cb2e679be8e39bdcaf4e59388ecf04739dd19":13,"51c3f7b78d7f095a07f2ef37f4d2797d1cd192fb":8,"cb04d1ec977c1e4daf0f2f9ffe0a70132374a06d":38,"8ea4bd751ef0f01cd66fecf4ac0885cf4bfa45a0":51,"934d46d34009338010d60718981e1018aa902bb9":168,"e9a658895429a18d3d285b6f52a431b7ede7046b":41,"7e2122e43a5b686657813305c499deb0063dd770":167,"698858707cf122dda4830dfec4d40bc1592bb8e4":0,"ffcd5633e378fa27567d43b6c4819b594cc0aea3":0,"6c7907590c8386ba6369ee01eac6451589512a48":77,"5bb3d0cd9faf848f03e6de731b3df180e6871bff":12,"dda04367a4820dc91728cdd11158f29f3fb7d443":233,"b99c4e4fdd100c5ee404c48deeba207f1cae9dab":0,"7a049738be3d699367df9570991c00e71769cacc":0,"daff93bbdc72adfd19b2dd54f9fc73557dd90fcb":33,"45abca6ccce6923acc24c3734612d9892ea0a5bd":54,"5fa02473b935161802fa5250657d804fbc789cc8":78,"540b4662e5610ec30c02cb27c1751560c75deb75":0,"08cd1170ec42d1e24d0ef946713cf87acb6d6182":0,"1449314567dab17e2029467cc294d70896cf29fd":0,"c918ed76b730eef5ed760f476b00e144e273e9cd":55,"d3a55326fdf0f5ae25927b2d3e62457adef348a1":0,"e9e48301e3a8b52c141e02e532fc756c629f412c":0,"42a17ce960e8cabb39e22be2f0ad2c885c524148":0},"tools":{"claude-code":{"name":"Claude Code","commits":50,"loc":11564,"first_seen":1767565673,"last_seen":1768683334}},"monthly":{"2026-01":{"loc":14522,"attributed_loc":11564},"2026-08":{"loc":18459,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":45.0,"flagged_units":6.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":28030.0,"flagged_loc":15223.0,"flagged_loc_share":0.5430966821262933,"max_loc_per_hour":982.75,"median_loc_per_hour":335.1616166352115,"pr_timed_units":0.0,"excluded_import_loc":4951.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"3,931 lines of first-party code in ~4.0h (983 lines/hour, 1 commit session)","ref":"d331fe2992add6a6868e41f98c9d6d5abf489408","url":"https://github.com/AnoRebel/ollama-proxy/commit/d331fe2992add6a6868e41f98c9d6d5abf489408","weight":0.294825},{"kind":"velocity-burst","description":"2,550 lines of first-party code in ~3.4h (751 lines/hour, 2 commit session)","ref":"f77a0ad0f975733e59bfff93501fbdb470fda693","url":"https://github.com/AnoRebel/ollama-proxy/commit/f77a0ad0f975733e59bfff93501fbdb470fda693","weight":0.2251655629139073},{"kind":"velocity-burst","description":"2,958 lines of first-party code in ~4.0h (740 lines/hour, 1 commit session)","ref":"1819b99eba8ac57e0b087daea3b812dc44b95303","url":"https://github.com/AnoRebel/ollama-proxy/commit/1819b99eba8ac57e0b087daea3b812dc44b95303","weight":0.22185000000000002},{"kind":"velocity-burst","description":"2,178 lines of first-party code in ~3.2h (683 lines/hour, 3 commit session)","ref":"8350fcb5db404489abcbea433c06ebfc5bdac0d1","url":"https://github.com/AnoRebel/ollama-proxy/commit/8350fcb5db404489abcbea433c06ebfc5bdac0d1","weight":0.20480975185023942},{"kind":"velocity-burst","description":"2,515 lines of first-party code in ~4.0h (626 lines/hour, 2 commit session)","ref":"63d1d6386fd81df860e1926214fbc0e367472408","url":"https://github.com/AnoRebel/ollama-proxy/commit/63d1d6386fd81df860e1926214fbc0e367472408","weight":0.18773845728504285},{"kind":"velocity-burst","description":"1,091 lines of first-party code in ~2.0h (559 lines/hour, 3 commit session)","ref":"e8f065ab2bcc1bb9d421ab685a809f6d6e62ae72","url":"https://github.com/AnoRebel/ollama-proxy/commit/e8f065ab2bcc1bb9d421ab685a809f6d6e62ae72","weight":0.16758355852652537}],"data":{"flagged_loc_by_commit":{"d331fe2992add6a6868e41f98c9d6d5abf489408":3931,"1819b99eba8ac57e0b087daea3b812dc44b95303":2958,"a1ee5bde42c98813eb5a2240944163eb4ee3865e":198,"b396cbe11f5fe5d811bac7b23f30f565610ee26f":496,"e8f065ab2bcc1bb9d421ab685a809f6d6e62ae72":397,"1c51686f5b71edd3ac19edae26014ac102dc2fb0":2161,"f77a0ad0f975733e59bfff93501fbdb470fda693":389,"b39559e2a5865b3d95c350d234918a29c6194750":93,"63d1d6386fd81df860e1926214fbc0e367472408":2422,"487e3c6bdcaefff82cf0c321bbb9f8f47147872e":2118,"710d0341888aed71dd7111a107709ebd182156d5":12,"8350fcb5db404489abcbea433c06ebfc5bdac0d1":48},"excluded_import_commits":["8518a64b1f16850e1a353c89779ee0b3d4deabe4"]},"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":14781.0,"index":0.034,"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":1.0,"per_kloc:emoji_in_code":0.068,"files:emoji_in_code":1.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":3.0,"secrets_low_confidence":0.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"internal/auth/middleware_test.go","line":884,"fingerprint":"internal/auth/middleware_test.go:generic-api-key:884"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"internal/storage/sqlite_test.go","line":531,"fingerprint":"internal/storage/sqlite_test.go:generic-api-key:531"},{"rule_id":"gitleaks/curl-auth-header","severity":"low","message":"Possible curl-auth-header secret in the current tree (test/docs/example file)","path":"README.md","line":238,"fingerprint":"README.md:curl-auth-header:238"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":5.0,"findings_high":2.0,"findings_medium":3.0,"findings_low":0.0,"weighted_findings":2.25,"scanned_lines":14781.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/admin/static/js/htmx-alpine-morph.js","line":31,"fingerprint":"javascript.browser.security.insecure-document-method:internal/admin/static/js/htmx-alpine-morph.js:31"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `incoming.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"internal/admin/static/js/htmx-alpine-morph.js","line":31,"fingerprint":"javascript.browser.security.insecure-innerhtml:internal/admin/static/js/htmx-alpine-morph.js:31"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `xhr` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled  [confidence low]","path":"internal/admin/static/js/htmx-safe-nonce.js","line":22,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:internal/admin/static/js/htmx-safe-nonce.js:22"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low]","path":"internal/admin/static/js/htmx-safe-nonce.js","line":22,"fingerprint":"javascript.lang.security.html-in-template-string:internal/admin/static/js/htmx-safe-nonce.js:22"},{"rule_id":"opengrep/go.lang.security.audit.xss.unsafe-template-type","severity":"medium","message":"Semgrep could not determine that the argument to 'template.HTML()' is a constant. 'template.HTML()' and similar does not escape contents. Be absolutely sure there is no user-controlled data in this template. If user data can reach this template, you may have a XSS vulnerability. Instead, do not use  [confidence low]","path":"internal/admin/templates.go","line":60,"fingerprint":"go.lang.security.audit.xss.unsafe-template-type:internal/admin/templates.go:60"}],"evidence":[],"data":{"rulesets":["go","javascript","typescript","dockerfile"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":2.0,"vulnerabilities":14.0,"vulns_critical":1.0,"vulns_high":2.0,"vulns_medium":8.0,"vulns_low":0.0,"vulns_unknown":3.0,"penalty":18.0},"findings":[{"rule_id":"osv/GHSA-cxf3-9h37-7rr8","severity":"critical","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6839, GHSA-cxf3-9h37-7rr8","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-cxf3-9h37-7rr8"},{"rule_id":"osv/GHSA-9969-6676-49h5","severity":"high","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6838, GHSA-9969-6676-49h5","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-9969-6676-49h5"},{"rule_id":"osv/GHSA-375p-5qhx-8wq4","severity":"high","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6873, GHSA-375p-5qhx-8wq4","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-375p-5qhx-8wq4"},{"rule_id":"osv/GHSA-h53f-rm2w-w7rg","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6841, GHSA-h53f-rm2w-w7rg","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-h53f-rm2w-w7rg"},{"rule_id":"osv/GHSA-x9ff-22gv-65f4","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6844, GHSA-x9ff-22gv-65f4","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-x9ff-22gv-65f4"},{"rule_id":"osv/GHSA-99jh-6h7p-pp36","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6875, GHSA-99jh-6h7p-pp36","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-99jh-6h7p-pp36"},{"rule_id":"osv/GHSA-h9g5-28mm-hx3g","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6876, GHSA-h9g5-28mm-hx3g","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-h9g5-28mm-hx3g"},{"rule_id":"osv/GHSA-r7w9-592q-9vg4","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6877, GHSA-r7w9-592q-9vg4","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-r7w9-592q-9vg4"},{"rule_id":"osv/GHSA-2ffq-g2xg-c22p","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6879, GHSA-2ffq-g2xg-c22p","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-2ffq-g2xg-c22p"},{"rule_id":"osv/GHSA-3pmx-cf9f-34xr","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6881, GHSA-3pmx-cf9f-34xr","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-3pmx-cf9f-34xr"},{"rule_id":"osv/GHSA-v753-g4cw-jm48","severity":"medium","message":"github.com/labstack/echo/v5@5.3.1 (Go) is affected by GO-2026-6883, GHSA-v753-g4cw-jm48","path":"go.mod","line":null,"fingerprint":"github.com/labstack/echo/v5@5.3.1 (Go):GHSA-v753-g4cw-jm48"},{"rule_id":"osv/GO-2026-5932","severity":"medium","message":"golang.org/x/crypto@0.55.0 (Go) is affected by GO-2026-5932","path":"go.mod","line":null,"fingerprint":"golang.org/x/crypto@0.55.0 (Go):GO-2026-5932"},{"rule_id":"osv/GO-2026-6354","severity":"medium","message":"golang.org/x/crypto@0.55.0 (Go) is affected by GO-2026-6354","path":"go.mod","line":null,"fingerprint":"golang.org/x/crypto@0.55.0 (Go):GO-2026-6354"},{"rule_id":"osv/GO-2026-6355","severity":"medium","message":"golang.org/x/crypto@0.55.0 (Go) is affected by GO-2026-6355","path":"go.mod","line":null,"fingerprint":"golang.org/x/crypto@0.55.0 (Go):GO-2026-6355"}],"evidence":[],"data":{"ecosystems":["Go"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":2.0,"findings":35.0,"findings_high":24.0,"findings_medium":5.0,"findings_low":6.0,"penalty":293.4},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":28,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:28"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":56,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:56"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":59,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:59"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":65,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:65"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":76,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:76"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":79,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:79"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":93,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:93"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":96,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:96"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/ci.yml","line":99,"fingerprint":"unpinned-uses:.github/workflows/ci.yml:99"},{"rule_id":"zizmor/unpinned-images","severity":"high","message":"unpinned image references [confidence high]","path":".github/workflows/ci.yml","line":16,"fingerprint":"unpinned-images:.github/workflows/ci.yml:16"},{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/release.yml","line":9,"fingerprint":"excessive-permissions:.github/workflows/release.yml:9"},{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/release.yml","line":10,"fingerprint":"excessive-permissions:.github/workflows/release.yml:10"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":19,"fingerprint":"unpinned-uses:.github/workflows/release.yml:19"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":24,"fingerprint":"unpinned-uses:.github/workflows/release.yml:24"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":30,"fingerprint":"unpinned-uses:.github/workflows/release.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":44,"fingerprint":"unpinned-uses:.github/workflows/release.yml:44"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":48,"fingerprint":"unpinned-uses:.github/workflows/release.yml:48"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":59,"fingerprint":"unpinned-uses:.github/workflows/release.yml:59"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":62,"fingerprint":"unpinned-uses:.github/workflows/release.yml:62"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":65,"fingerprint":"unpinned-uses:.github/workflows/release.yml:65"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":75,"fingerprint":"unpinned-uses:.github/workflows/release.yml:75"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/release.yml","line":24,"fingerprint":"cache-poisoning:.github/workflows/release.yml:24"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":1,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:1"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":10,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:10"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":50,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:50"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":70,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:70"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/ci.yml","line":87,"fingerprint":"excessive-permissions:.github/workflows/ci.yml:87"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":24,"fingerprint":"artipacked:.github/workflows/ci.yml:24"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":55,"fingerprint":"artipacked:.github/workflows/ci.yml:55"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":75,"fingerprint":"artipacked:.github/workflows/ci.yml:75"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/ci.yml","line":92,"fingerprint":"artipacked:.github/workflows/ci.yml:92"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":18,"fingerprint":"artipacked:.github/workflows/release.yml:18"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":43,"fingerprint":"artipacked:.github/workflows/release.yml:43"}],"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.4902,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":12.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v1.0.0 ships ollama-proxy_1.0.0_darwin_amd64.tar.gz (0 downloads)","ref":"ollama-proxy_1.0.0_darwin_amd64.tar.gz","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_amd64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.0.0 ships ollama-proxy_1.0.0_darwin_amd64.zip (0 downloads)","ref":"ollama-proxy_1.0.0_darwin_amd64.zip","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_amd64.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v1.0.0 ships ollama-proxy_1.0.0_darwin_arm64.tar.gz (0 downloads)","ref":"ollama-proxy_1.0.0_darwin_arm64.tar.gz","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_arm64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.0.0 ships ollama-proxy_1.0.0_darwin_arm64.zip (0 downloads)","ref":"ollama-proxy_1.0.0_darwin_arm64.zip","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_darwin_arm64.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v1.0.0 ships ollama-proxy_1.0.0_linux_amd64.tar.gz (2 downloads)","ref":"ollama-proxy_1.0.0_linux_amd64.tar.gz","url":"https://github.com/AnoRebel/ollama-proxy/releases/download/v1.0.0/ollama-proxy_1.0.0_linux_amd64.tar.gz","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":696.0,"function_nloc":9881.0,"mean_ccn":3.4,"p90_ccn":8.0,"complex_functions":7.0,"long_functions":7.0,"many_param_functions":1.0,"risky_nloc_share":0.1256},"findings":[],"evidence":[{"kind":"complex-function","description":"loadFromEnv in internal/config/config.go: complexity 85, 203 lines","ref":"internal/config/config.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/config/config.go#L389","weight":1.0},{"kind":"complex-function","description":"CreateChatCompletion in internal/proxy/openai.go: complexity 26, 155 lines","ref":"internal/proxy/openai.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/proxy/openai.go#L33","weight":0.43333333333333335},{"kind":"complex-function","description":"UpdateUser in internal/admin/handlers.go: complexity 24, 83 lines","ref":"internal/admin/handlers.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/handlers.go#L552","weight":0.4},{"kind":"complex-function","description":"CreateMessage in internal/proxy/anthropic.go: complexity 19, 131 lines","ref":"internal/proxy/anthropic.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/proxy/anthropic.go#L31","weight":0.31666666666666665},{"kind":"complex-function","description":"main in cmd/proxy/main.go: complexity 18, 175 lines","ref":"cmd/proxy/main.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/cmd/proxy/main.go#L156","weight":0.3},{"kind":"complex-function","description":"RefreshToken in internal/admin/handlers.go: complexity 16, 70 lines","ref":"internal/admin/handlers.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/handlers.go#L244","weight":0.26666666666666666},{"kind":"complex-function","description":"loadOverview in internal/admin/static/js/modules/overview.js: complexity 16, 63 lines","ref":"internal/admin/static/js/modules/overview.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/overview.js#L57","weight":0.26666666666666666},{"kind":"complex-function","description":"renderTokenStatsChart in internal/admin/static/js/modules/tokens.js: complexity 13, 101 lines","ref":"internal/admin/static/js/modules/tokens.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/tokens.js#L119","weight":0.21666666666666667},{"kind":"complex-function","description":"renderUserStatsChart in internal/admin/static/js/modules/users.js: complexity 13, 101 lines","ref":"internal/admin/static/js/modules/users.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/users.js#L221","weight":0.21666666666666667},{"kind":"complex-function","description":"(anonymous) in internal/admin/static/js/modules/overview.js: complexity 11, 159 lines","ref":"internal/admin/static/js/modules/overview.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/overview.js#L200","weight":0.18333333333333332}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":10379.0,"duplicated_lines":534.0,"duplicated_share":0.0515,"files":57.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: e2e/lib/dashboard.ts:180 and e2e/lib/dashboard.ts:377","ref":"e2e/lib/dashboard.ts","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/e2e/lib/dashboard.ts#L180","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/handlers.go:207 and internal/admin/handlers.go:316","ref":"internal/admin/handlers.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/handlers.go#L207","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/htmx-loading-states.js:104 and internal/admin/static/js/htmx-loading-states.js:129","ref":"internal/admin/static/js/htmx-loading-states.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/htmx-loading-states.js#L104","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/modules/overview.js:249 and internal/admin/static/js/modules/overview.js:262","ref":"internal/admin/static/js/modules/overview.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/overview.js#L249","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/modules/overview.js:308 and internal/admin/static/js/modules/tokens.js:196","ref":"internal/admin/static/js/modules/overview.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/overview.js#L308","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/modules/tokens.js:11 and internal/admin/static/js/modules/tokens.js:244","ref":"internal/admin/static/js/modules/tokens.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/tokens.js#L11","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/modules/tokens.js:97 and internal/admin/static/js/modules/users.js:199","ref":"internal/admin/static/js/modules/tokens.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/tokens.js#L97","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/admin/static/js/modules/users.js:11 and internal/admin/static/js/modules/users.js:104","ref":"internal/admin/static/js/modules/users.js","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/admin/static/js/modules/users.js#L11","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/auth/jwt.go:99 and internal/auth/jwt.go:154","ref":"internal/auth/jwt.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/auth/jwt.go#L99","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: internal/proxy/anthropic.go:127 and internal/proxy/openai.go:157","ref":"internal/proxy/anthropic.go","url":"https://github.com/AnoRebel/ollama-proxy/blob/80bdc7bf909022bdbc47ad2fbe74c66022f42739/internal/proxy/anthropic.go#L127","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":7.0,"weighted_findings":4.0,"scanned_lines":14781.0,"category:correctness":7.0},"findings":[{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/config/runtime.go","line":110,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/config/runtime.go:110"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/logging/logger.go","line":76,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/logging/logger.go:76"},{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"internal/storage/factory.go","line":32,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:internal/storage/factory.go:32"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"e2e/lib/dashboard.ts","line":421,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:e2e/lib/dashboard.ts:421"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/admin/static/js/htmx-safe-nonce.js","line":22,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/admin/static/js/htmx-safe-nonce.js:22"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/admin/static/js/htmx-safe-nonce.js","line":22,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/admin/static/js/htmx-safe-nonce.js:22"},{"rule_id":"opengrep/javascript.lang.correctness.missing-template-string-indicator","severity":"low","message":"This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'?","path":"internal/admin/static/js/htmx-safe-nonce.js","line":22,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:internal/admin/static/js/htmx-safe-nonce.js:22"}],"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":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":1.0,"test_lines":12949.0,"source_lines":14781.0,"test_ratio":0.8761,"ci_files":2.0,"cochange_share":0.5135,"cochange_commits":74.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/ci.yml","ref":".github/workflows/ci.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/release.yml","ref":".github/workflows/release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (golangci-lint)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test"],"lint_commands":["golangci-lint"]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":1.0,"check:changelog":0.0,"readme_lines":850.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"CONTRIBUTING.md","ref":"CONTRIBUTING.md","url":null,"weight":0.0}],"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":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":4256.0,"other_lines":10525.0,"files_blamed":57.0,"blame_failures":0.0,"quality:ai_findings":4.0,"quality:ai_per_kloc":0.94,"quality:other_findings":3.0,"quality:other_per_kloc":0.285,"quality:ratio":3.3,"security:ai_findings":3.0,"security:ai_per_kloc":0.705,"security:other_findings":2.0,"security:other_per_kloc":0.19,"security:ratio":3.71},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}