{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-14T00:09:09.961848Z","repo":{"ref":{"host":"github.com","owner":"jhlee0409","name":"claude-code-history-viewer"},"default_branch":"main","clone_url":"https://github.com/jhlee0409/claude-code-history-viewer.git","html_url":"https://github.com/jhlee0409/claude-code-history-viewer","description":"Desktop app and web server to browse, search and analyze your AI coding assistant history — Claude Code, Codex CLI, GitHub Copilot, Gemini CLI, Cursor, OpenCode and more. 100% offline.","stars":2315,"forks":255,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":19631,"primary_language":"TypeScript","license_spdx":"MIT","created_at":"2025-06-28T10:29:54Z","pushed_at":"2026-11-10T21:13:39Z","security_policy_url":null,"distribution":{"owner_created_at":"2020-02-05T11:15:27Z","owner_type":"User","release_assets":[{"name":"cchv-server-linux-arm64.tar.gz","size":14368075,"download_count":204,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13796845,"download_count":131,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12624556,"download_count":117,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":13049262,"download_count":17,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":120,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.32.2-1.x86_64.rpm","size":12949115,"download_count":14,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer-1.32.2-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.32.2_amd64.AppImage","size":90085880,"download_count":152,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.32.2_amd64.AppImage.sig","size":444,"download_count":7,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.32.2_amd64.deb","size":12949462,"download_count":59,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.32.2_universal.dmg","size":23615062,"download_count":691,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.32.2_x64-portable.zip","size":11177831,"download_count":180,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.32.2_x64-setup.exe","size":8205092,"download_count":757,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.32.2_x64-setup.exe.sig","size":444,"download_count":6,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.32.2_x64_en-US.msi","size":11059200,"download_count":26,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.32.2_x64_en-US.msi.sig","size":444,"download_count":3,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_1.32.2_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23401732,"download_count":551,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":4,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":8392,"release_tag":"v1.32.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14368945,"download_count":5,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13813725,"download_count":10,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12642074,"download_count":6,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":13097087,"download_count":6,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":7,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.32.1-1.x86_64.rpm","size":12961851,"download_count":4,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer-1.32.1-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.32.1_amd64.AppImage","size":90102264,"download_count":11,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.32.1_amd64.AppImage.sig","size":444,"download_count":3,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.32.1_amd64.deb","size":12961008,"download_count":4,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.32.1_universal.dmg","size":23603309,"download_count":46,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.32.1_x64-portable.zip","size":11159225,"download_count":13,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.32.1_x64-setup.exe","size":8198550,"download_count":33,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.32.1_x64-setup.exe.sig","size":444,"download_count":3,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.32.1_x64_en-US.msi","size":11042816,"download_count":5,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.32.1_x64_en-US.msi.sig","size":444,"download_count":2,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_1.32.1_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23391901,"download_count":37,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":3,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":184,"release_tag":"v1.32.1","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.1/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14365099,"download_count":35,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13832980,"download_count":64,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12604836,"download_count":65,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":13049506,"download_count":10,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":57,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.32.0-1.x86_64.rpm","size":12950900,"download_count":24,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer-1.32.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.32.0_amd64.AppImage","size":90085880,"download_count":71,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.32.0_amd64.AppImage.sig","size":444,"download_count":4,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.32.0_amd64.deb","size":12950684,"download_count":25,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.32.0_universal.dmg","size":23638801,"download_count":362,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.32.0_x64-portable.zip","size":11176593,"download_count":112,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.32.0_x64-setup.exe","size":8199775,"download_count":453,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.32.0_x64-setup.exe.sig","size":444,"download_count":8,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.32.0_x64_en-US.msi","size":11055104,"download_count":15,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.32.0_x64_en-US.msi.sig","size":444,"download_count":3,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_1.32.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23397324,"download_count":304,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":4,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":3362,"release_tag":"v1.32.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14343191,"download_count":20,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13780973,"download_count":53,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12623877,"download_count":53,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":13024790,"download_count":11,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":37,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.31.0-1.x86_64.rpm","size":12941485,"download_count":8,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer-1.31.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.31.0_amd64.AppImage","size":90065400,"download_count":52,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.31.0_amd64.AppImage.sig","size":444,"download_count":5,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.31.0_amd64.deb","size":12942026,"download_count":19,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.31.0_universal.dmg","size":23574415,"download_count":311,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.31.0_x64-portable.zip","size":11136933,"download_count":66,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.31.0_x64-setup.exe","size":8165514,"download_count":317,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.31.0_x64-setup.exe.sig","size":444,"download_count":4,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.31.0_x64_en-US.msi","size":11022336,"download_count":13,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.31.0_x64_en-US.msi.sig","size":444,"download_count":3,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_1.31.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23343911,"download_count":227,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":5,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":2089,"release_tag":"v1.31.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.31.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14360752,"download_count":21,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13763847,"download_count":28,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12548441,"download_count":38,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":13023197,"download_count":9,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":21,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.30.0-1.x86_64.rpm","size":12890347,"download_count":7,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer-1.30.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.30.0_amd64.AppImage","size":90020344,"download_count":26,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.30.0_amd64.AppImage.sig","size":444,"download_count":6,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.30.0_amd64.deb","size":12889740,"download_count":23,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.30.0_universal.dmg","size":23543168,"download_count":179,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.30.0_x64-portable.zip","size":11129713,"download_count":39,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.30.0_x64-setup.exe","size":8164670,"download_count":136,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.30.0_x64-setup.exe.sig","size":444,"download_count":8,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.30.0_x64_en-US.msi","size":11010048,"download_count":9,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.30.0_x64_en-US.msi.sig","size":444,"download_count":4,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_1.30.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23339269,"download_count":104,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":5,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":753,"release_tag":"v1.30.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.30.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14214882,"download_count":20,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13681214,"download_count":36,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12458629,"download_count":46,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":12887228,"download_count":6,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":21,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.29.0-1.x86_64.rpm","size":12839084,"download_count":5,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer-1.29.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.29.0_amd64.AppImage","size":89987576,"download_count":28,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.29.0_amd64.AppImage.sig","size":444,"download_count":5,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.29.0_amd64.deb","size":12839672,"download_count":16,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.29.0_universal.dmg","size":23438696,"download_count":231,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.29.0_x64-portable.zip","size":11077299,"download_count":39,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.29.0_x64-setup.exe","size":8123758,"download_count":200,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.29.0_x64-setup.exe.sig","size":444,"download_count":3,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.29.0_x64_en-US.msi","size":10960896,"download_count":9,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.29.0_x64_en-US.msi.sig","size":444,"download_count":2,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_1.29.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23246355,"download_count":158,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":3,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":1304,"release_tag":"v1.29.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.29.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14148831,"download_count":13,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13651049,"download_count":10,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12403843,"download_count":19,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":12853372,"download_count":4,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":10,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.28.0-1.x86_64.rpm","size":12778957,"download_count":2,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer-1.28.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.28.0_amd64.AppImage","size":89942520,"download_count":22,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.28.0_amd64.AppImage.sig","size":444,"download_count":3,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.28.0_amd64.deb","size":12779644,"download_count":5,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.28.0_universal.dmg","size":23363912,"download_count":132,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.28.0_x64-portable.zip","size":11053083,"download_count":18,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.28.0_x64-setup.exe","size":8105598,"download_count":70,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.28.0_x64-setup.exe.sig","size":444,"download_count":2,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.28.0_x64_en-US.msi","size":10936320,"download_count":4,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.28.0_x64_en-US.msi.sig","size":444,"download_count":1,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_1.28.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23142964,"download_count":53,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":2,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":420,"release_tag":"v1.28.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.28.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14099625,"download_count":155,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13559118,"download_count":137,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12366790,"download_count":122,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":12809702,"download_count":18,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":138,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.27.0-1.x86_64.rpm","size":12759443,"download_count":36,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer-1.27.0-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.27.0_amd64.AppImage","size":89307640,"download_count":232,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.27.0_amd64.AppImage.sig","size":444,"download_count":10,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.27.0_amd64.deb","size":12759280,"download_count":67,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.27.0_universal.dmg","size":23258192,"download_count":837,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.27.0_x64-portable.zip","size":10954393,"download_count":197,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.27.0_x64-setup.exe","size":8050261,"download_count":1036,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.27.0_x64-setup.exe.sig","size":444,"download_count":8,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.27.0_x64_en-US.msi","size":10842112,"download_count":45,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.27.0_x64_en-US.msi.sig","size":444,"download_count":3,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_1.27.0_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23048839,"download_count":681,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":3,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":10872,"release_tag":"v1.27.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.27.0/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14110150,"download_count":11,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13555814,"download_count":31,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12325864,"download_count":37,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":12789245,"download_count":10,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":16,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.26.3-1.x86_64.rpm","size":12740626,"download_count":6,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer-1.26.3-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.26.3_amd64.AppImage","size":89266680,"download_count":41,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.26.3_amd64.AppImage.sig","size":444,"download_count":3,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.26.3_amd64.deb","size":12741452,"download_count":14,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.26.3_universal.dmg","size":23216202,"download_count":221,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.26.3_x64-portable.zip","size":10946340,"download_count":37,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.26.3_x64-setup.exe","size":8010615,"download_count":187,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.26.3_x64-setup.exe.sig","size":444,"download_count":3,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.26.3_x64_en-US.msi","size":10829824,"download_count":10,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.26.3_x64_en-US.msi.sig","size":444,"download_count":2,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_1.26.3_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":23009037,"download_count":163,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":3,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":1514,"release_tag":"v1.26.3","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.3/latest.json"},{"name":"cchv-server-linux-arm64.tar.gz","size":14099410,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/cchv-server-linux-arm64.tar.gz"},{"name":"cchv-server-linux-x64.tar.gz","size":13570634,"download_count":7,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/cchv-server-linux-x64.tar.gz"},{"name":"cchv-server-macos-arm64.tar.gz","size":12338221,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/cchv-server-macos-arm64.tar.gz"},{"name":"cchv-server-macos-x64.tar.gz","size":12788033,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/cchv-server-macos-x64.tar.gz"},{"name":"CHECKSUMS.sha256","size":384,"download_count":2,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/CHECKSUMS.sha256"},{"name":"Claude.Code.History.Viewer-1.26.2-1.x86_64.rpm","size":12734047,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer-1.26.2-1.x86_64.rpm"},{"name":"Claude.Code.History.Viewer_1.26.2_amd64.AppImage","size":89283064,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_amd64.AppImage"},{"name":"Claude.Code.History.Viewer_1.26.2_amd64.AppImage.sig","size":444,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_amd64.AppImage.sig"},{"name":"Claude.Code.History.Viewer_1.26.2_amd64.deb","size":12733662,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_amd64.deb"},{"name":"Claude.Code.History.Viewer_1.26.2_universal.dmg","size":23202060,"download_count":9,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_universal.dmg"},{"name":"Claude.Code.History.Viewer_1.26.2_x64-portable.zip","size":10936672,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_x64-portable.zip"},{"name":"Claude.Code.History.Viewer_1.26.2_x64-setup.exe","size":8031150,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_x64-setup.exe"},{"name":"Claude.Code.History.Viewer_1.26.2_x64-setup.exe.sig","size":444,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_x64-setup.exe.sig"},{"name":"Claude.Code.History.Viewer_1.26.2_x64_en-US.msi","size":10825728,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_x64_en-US.msi"},{"name":"Claude.Code.History.Viewer_1.26.2_x64_en-US.msi.sig","size":444,"download_count":2,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_1.26.2_x64_en-US.msi.sig"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz","size":22993803,"download_count":4,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_universal.app.tar.gz"},{"name":"Claude.Code.History.Viewer_universal.app.tar.gz.sig","size":432,"download_count":3,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/Claude.Code.History.Viewer_universal.app.tar.gz.sig"},{"name":"latest.json","size":2725,"download_count":19,"release_tag":"v1.26.2","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.26.2/latest.json"}]}},"commit_sha":"67979b401e936ed503c941a3f3294012f51d730e","profile":{"lines_by_language":{"TypeScript":111533,"Rust":90487,"JavaScript":1873,"Shell":153},"files_by_category":{"source":584,"test":135,"config":115,"docs":71,"binary":52,"other":32,"generated":3},"source_lines":174994,"test_lines":29052},"pillars":{"ai_provenance":{"score":76.4,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.7641,"suspected_share":0.0743,"estimated_share":0.7641,"ai_artifacts":17.0,"flagged_work_units":24.0,"flagged_releases":5.0},"summary":"Explicit AI attribution on 76% of first-party code added; an estimated 76% including velocity signals."},"quality":{"score":70.2,"confidence":0.9,"coverage":1.0,"label":"adequate","breakdown":{"complexity":44.3,"duplication":50.6,"lint":82.6,"testing":83.3,"docs":85.0,"type_safety":100.0,"process":null},"summary":"Code quality is adequate: test-to-source ratio 0.17, CI runs tests; 27% of function code in complex or long functions; 11% duplicated lines. Weakest area: complexity."},"security":{"score":43.7,"confidence":0.85,"coverage":1.0,"label":"poor","breakdown":{"secrets":76.6,"sast":96.0,"dependencies":5.0,"ci_actions":0.0,"posture":0.0,"scorecard":null},"summary":"Security posture is poor: 74 known vulnerabilities in 45 dependencies; 77 high-severity workflow issues. Weakest area: ci actions."}},"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":133.0,"checked":133.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":1199.0,"attributed_commits":843.0,"attributed_commit_share":0.7030859049207673,"effective_loc":269622.0,"attributed_loc":206007.0,"attributed_loc_share":0.7640585708881322,"tools_detected":4.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 762 attributed commits, 193,888 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"OpenAI Codex: 46 attributed commits, 10,943 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"GitHub Copilot coding agent: 36 attributed commits, 1,552 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"Cursor agent: 3 attributed commits, 1,314 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7f48907081d93ad209b30e10ff640ea0b8ed0e24","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/7f48907081d93ad209b30e10ff640ea0b8ed0e24","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"594cb7a1669a7731164e830ace1acec5b454fad0","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/594cb7a1669a7731164e830ace1acec5b454fad0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"cf0ba80e81fa920527e41a270fcfdc29ea3f4b5e","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/cf0ba80e81fa920527e41a270fcfdc29ea3f4b5e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"985332170969d5aec2e3e8ac776437b43431392b","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/985332170969d5aec2e3e8ac776437b43431392b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"7371d4342e2b0396be05bcd9aa22e9bcaa720414","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/7371d4342e2b0396be05bcd9aa22e9bcaa720414","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"508812cb0303dc770150bda36d2eafa09693ec7a","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/508812cb0303dc770150bda36d2eafa09693ec7a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"5a7dd5616aef5e5ef1d7317910784f5b57b6b74b","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/5a7dd5616aef5e5ef1d7317910784f5b57b6b74b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"e3ed8f0e779b0def67a1993c476857e8c4f2a97c","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/e3ed8f0e779b0def67a1993c476857e8c4f2a97c","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"c3ade3d19cd4639609c3e8d0e62e759df69a93de","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/c3ade3d19cd4639609c3e8d0e62e759df69a93de","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"e1789a797972f84e4aa633b652144f255ab76baf","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/e1789a797972f84e4aa633b652144f255ab76baf","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"7e52c341da1fc7a4c0a293d08e74df4cca48969e","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/7e52c341da1fc7a4c0a293d08e74df4cca48969e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"acdfaea9b05f3c4393086494a9e8e00716ad438a","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/acdfaea9b05f3c4393086494a9e8e00716ad438a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"40eb613d68cb4e686afac3f5a1fd7efb1f5a82ff","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/40eb613d68cb4e686afac3f5a1fd7efb1f5a82ff","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"d801b697797fdfb3d2ad790e3d426f940815783b","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/d801b697797fdfb3d2ad790e3d426f940815783b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"c7babb940bcc6ed25b79446c5016b61b5a4b3c43","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/c7babb940bcc6ed25b79446c5016b61b5a4b3c43","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1883040798d5a315fa3d1a6723a2d5348512f25a","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/1883040798d5a315fa3d1a6723a2d5348512f25a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"07fec7d9c871778e284cbb69564faed929baa9ef","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/07fec7d9c871778e284cbb69564faed929baa9ef","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"593e03942779058d41dc0c717ae78ce8fd2ecd69","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/593e03942779058d41dc0c717ae78ce8fd2ecd69","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"150efb18798d76b18bbf50f249f7cb43b952f26e","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/150efb18798d76b18bbf50f249f7cb43b952f26e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"090737b593d81b84b3d2b2a602f85a5c8cb9edc8","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/090737b593d81b84b3d2b2a602f85a5c8cb9edc8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"baac604464286cafa05ba50beed53b5111708a71","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/baac604464286cafa05ba50beed53b5111708a71","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a6e7df6ae86ba1f5f27e77fcd5593bab0e59d3ce","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/a6e7df6ae86ba1f5f27e77fcd5593bab0e59d3ce","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"8c9946f3904c472d75173bf82ad1c6068f0dc30d","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/8c9946f3904c472d75173bf82ad1c6068f0dc30d","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"09b259a3cdf4074e4b92043c68757ac937ef41b8","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/09b259a3cdf4074e4b92043c68757ac937ef41b8","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-authored-by: Claude'","ref":"c1374fda219f72067cff72bd8492ac615c5d97a2","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/c1374fda219f72067cff72bd8492ac615c5d97a2","weight":0.9}],"data":{"attributed_loc_by_commit":{"35ebb9a6dbc2d380201a7285f42450c24e13cb06":40,"79e99bf6842088b753110b7bb24c019e0b3b9c12":21,"f837a1c847654130c1df16c321ce42fdb3e5dcc2":1304,"a7438f0ebda43a5babc6ed35791698e668e5589b":118,"9827eb266deb64296ced5d4506c1458ee19d1f9b":983,"94f225ba6d43972199738c0ba2be73db2e4edd87":1023,"2c0c1f47172e99281c08f1032998a54990c81f89":0,"cf034c0d28a3dcfe3f089cb3de9501644441072b":0,"e41e41ee99fe6ae628035dcdee30164528c9ab0c":0,"0771ab0198ac7365937d92c3b4cf80ee7b1a029a":0,"3c2c75d9180f0a6d8a71dee5f1fab80cec4cb365":6,"2acae1ae507ec51f5927538e000a7fd712d9b0ed":0,"bc63a6d455f543f32e6c550aed2a356b6edac011":10,"d3a1e84c721d6dfd5011b943a11d63a1ff26f513":0,"9a5b517209f1e7dd0e90d3d4e64e6779f0e7fb1b":17,"7f5bd2215486da94dca9463177d478270ce6d60a":0,"c800d51283b804cc6dd2d8b79c2337385b19f7a4":3798,"7ab2f1e66091d944db0c9e0e9fb893723c63ce29":85,"23e8e0bf0fca71a7383f50a288117bc86e944ff5":1533,"d33d61032769bff3bf18da92d6e6c114ab63c125":1058,"8e431e46ab1793c401406fdad44bf2889cf63d04":19,"f14294b97da9c9c8ff1bc938dd4ea0d786717fea":8783,"5dceb59ed5c6342923f8d01db85e797bb343d6af":0,"9d10a10a12e771abf0cd9a3332dd8765fb501d54":10,"fde9c1e43fe1a36edc94187e6e5b3771664c1a09":0,"e676616c3cc8ee1483e602445db16e020ef7e77e":104,"f307b8c843d159e5edcfc6b87360b9d23b877ce5":0,"248e3c359db5f9079d1d538a764f42b54a261062":0,"b198cf82b7178d84b64b1712130a0afb7119da3b":16,"2e7f25dc494268f8789842feb3356873c2c98566":323,"a51c0ecc9e90282f65d96fad41439f23b4cbd409":16943,"32381b47e441ec6cfde5a9e80c9253dc569f40fb":0,"0be0a869d90193a2b1057f896eba69584b06ab46":0,"b15075ae461404a13ebd42c6c348b92d4337a432":107,"72da1a72c552d0eba5493e1dba617af29d48cdee":0,"bcf7be2a6a0e898d279583dcf6248262e9d5ecd8":6,"5c919f1e3fa7dd93a9393935354851e00f000096":0,"dc73fdd10229e81037262241b714a3cba2bb5156":2,"a9008f470491c67613600b0ef9c02545af8f9e12":0,"f9201a3068dce97e40db950f41940689fd1be4fd":0,"6fb4626998a70bec0c6e1bcf5fa5f4d79c011088":0,"e426a52f444b5ebaab7d69986f1a9fc5e781158a":0,"f0410c074b0a26c80e212b013875b718bc5eb44b":26,"5ade1ff718b4b6f538aa2fe7917117650cefd739":7,"f0984594f881425b87cabc39234aad78a0b4ab42":140,"b53eaed8efb929eae095c2c394637312f331058a":3357,"99ca088a239d2c044763f896987984ee70f29534":3417,"a5a3da522afcace54d533e1c1fbd2c5bd063dc34":1581,"bf6ebcc96f20ae45bdf7e470889576018b86400d":17,"ce262453b461abe36b07dcbcd35aab6e9a80b603":0,"22f9e00c6f2367ee72f79e221ac9ec043b397d78":21,"1d829a790567eb47969c9c97120a9c67a962afdf":335,"ca4a3e5c8c3fccb67e92e835b415b92967865988":0,"072e368a010003c3e5f5c902a091cdc5527a2d03":14,"5a1ef4e5572c46d144b2b2a556c292641c52a243":15,"3fac492bcfff0f095a3994c51449d2f6178375e8":0,"5ff0eaeb1afefc5cae6c89e8aa288ded2535c945":1,"7055ec5bb03596845cc47374cd98fe1578bc4262":0,"a7b9efd32dcd34bb14b4b7945c32309106286c86":17,"f261cf77b258901aba934fb63ec1f9e92bf61f43":5,"ebc52da11d3de00a83c865dcfeda9978ea0ab390":6,"f7a8c0ecf4a92920ac6eb7cb02966b697c728c16":0,"7f4097546ac78e9761c153f2297209664f2f18a6":4,"cb35578dfc1cadc1af8d3cd21cf5ec8ea25c2156":11,"8b8eaf0c79f6782180ce879508c8e2f9cb2f9a5a":263,"5759b4110e59c82bf22740c684e36f118abfd032":616,"9253ec8eea7a924d500c652d57b32902758a8945":0,"9098caed9f37d3c30c5e789962a6f3f6749b5890":1,"b8211de52cd5df0794570b18fc8382482a45dcf3":64,"104cad6f52ec620e4570b5aba71bd90d80fb4888":485,"213dc1c7179e751b0616995e174568b2ccfc0bf3":0,"ac2e55870433dc58b035672d87e829dba60aa740":548,"c5e4d226617af15a9f1b39934702f99cef94e845":75,"4425c585563dee9487412faaccb6fda465d247d7":455,"adbe39efe6db3b23b5c0a31515530e0ae67ee844":69,"9230121a9186a0bbc982a49632d1563ee09afb1e":27,"0a5c47e3ed406c47ac6913b7a04e2b17576e5ba2":40,"b67e0d25250957c7e0555132075fd4309e4d44ad":859,"97ae02363e137509fe3bef245bc8abb41d66d545":338,"54955c6209585acb65e13ecbf4461d4d4e016428":37,"2323160b374b77e45e19add5d63ab679a346a006":13,"a50ab07f2599c15ebda3b91220ad658d069d9be9":248,"f344895546a6669c33993643dd0013c84facf591":169,"02d08d64de67df44de77442a31b58170b4237aa7":1,"53b21a2b86b244e7643a9ed5bde42dcb09a66916":82,"7481b3d090af88ff2d927b26de5aceba5581f837":25,"50bcc0980097a359236644d7049bbc9d9076da5a":29,"ca6112f9ac10040e500693e229cbee656f5690fc":65,"ab68295c818d0df74c493d86b594ab0101357fe5":81,"a53b53c4160bb23034b52123e090f026e8da68cf":32,"4b8a430bca85d1c51dc80e23d6bb07a0b031dc1d":89,"ccfaa1b3f1ae84bfb142e201c2842faf2d1e1aa7":115,"fc6c81979f79dd02638a92014145705fa7ad0e8b":95,"a6594f7d4deceb441f9fd09512da87aa8dd5328e":150,"a349708040e8c4daba35dcc73a1238640c8ec05e":78,"c86422ac9333d7b22076a0710b8167d7889519da":24,"6e03077493369b5559ac8c50bb77bb30ee858e80":34,"45c02270f8a9de77467e12df025e29945d6ea76f":43,"410714b6d8090f43feaceae0a27eb99d1d730df6":21,"2a091cc0311fbed64a7bfef6e8a771037826e0e1":6,"720f25b7858706a30be8fd97bb45ab29737b4fd2":4,"e8b990188ebdd39a27afb7a2fd456a19212a94d0":75,"8a1be0761e6a10490051e5ee606b2920e048db18":108,"8cec4f2612437ec1ed55961d7180896f1dc30498":9,"0dfa56e29116aef0ddacfcaf2198257fb4d26e7c":0,"0c95fa6e57c361c0562653c06c06a496f4a92bc4":124,"944d6ffac2cf2d83673bf8cdd9549b261c49a3b5":7,"ecca7983082bd94e572c48802133f0fbadb0b91a":842,"474b6222d1fbd8969f953ddd37cad9d5ee44f7b4":0,"f0aa5f159578ef4347926532adcf4954a0c00933":22,"95d41c641c13576189ced91a7d5161aff9b6f1bd":2,"62ed7ed1c6ad999c6094f2e971cd99fd9b344f23":486,"4a1a5e9d60565e7b87871c970432d3912539dec8":3509,"79a81ec1f0ba930cc048d62ac81534b3b88bf2a2":838,"b0f46b1ca9cc2d038a89e822832bf6ddc69785c4":365,"129663cf53e183591bf26dd66336f96b9e02a51b":30,"bae56724896f1d17bac7fe90340a2a23e168f303":60,"0103fcf2a84a3260397da91257771185297ddcfc":5,"718940bc45976834a319d66790dcc84680e0f25f":51,"d759872e4282c4828fafeadb499b98d931f29745":36,"a0ddfe6ea2821ba629032fc4a5b01ba730420262":75,"da1e89a3c108d95475533c8c5f78b3ec6abb569a":548,"10e4a1e4d599cd43f5cf02e679af73e3bb7ac257":100,"d8f9076e996a0422fe08b62f3e91f6f791019581":1014,"32e4d6c3cee3800707303cbfa2246bd22915c3c5":165,"73034226d07caa0a353981b43827e87c4f9c746d":79,"9e3c23052c685d16f2ec2dedc8efb86d7baa733b":333,"cbb58860cdb0f30ab760dd7e40fe3c1d32fa8aeb":15,"2aff3b52c3c574500d1de470888810122f1203d6":120,"40b1c781354e644362ee5987a8fe9230bca9fe66":16,"dd5eaeb417ee8af84640aa65f2f7178bfe690545":0,"9617f64fb7462a7e9576d9f6152ad33f7a83fe7f":0,"c425d126bb1b9b95db229b5607164892b153c693":685,"283934e73d34a6a194f09a71b43d33d87d00ae17":1,"b70993e87136b6efec69c71a0a044c330137fab7":3,"b4716dce9bef7ae8132268881d5aac0c1aafaea1":228,"125168afb4c5926d4cb44e200b8486c5609ecfa1":120,"ac254892ee298aa893d041869928f97b364385a4":1,"bb0e0f674f7ca732b729638e071342cbae3d83d3":434,"3511415d51e58aed11e995cbb344edc5c7c994cf":13831,"99e7df50f43ac7383f23e66c531d5a5268564e55":1,"42e6bd7a971d2b32c3234a536e7ca9df4aff4d13":137,"56afe731f7a469950933c265e90ae6bc8b97f354":75,"a0c21460b2822d0d374d39653632eef937d9e4d7":290,"06840fbf78fc5a7b817be22d6d26fbf85f08f473":158,"a458f589bc6d04842bce978fcb2dd1723f3dd38f":1,"9345e07065fec2942f8619bd7d4c018778d62e21":43,"5b248555778728c5104310538ac4ebbaba72a9da":1,"538d275aacb89cc46a62c95f44a312ca323b2d57":75,"716d42e7cc1174031875573389aa3557982cec91":20,"21acf8ae820f2cc55d4e242655a266fa7e513f21":48,"f26a7247b36f1ebc33340a345b5c88af397244d1":0,"fcac2e9591bc1ec4d06ad2b86bdc3dddff827c77":1,"3f55b99a71d64a3d0b8a35e3128a864f2904f1ce":2,"226750f268307dd99f839e2beb1d207d040dfb85":19,"bb648931b7e8114866dcbbfe38e7ea14f2d9ba52":5,"8ee2756b99180d469ffdcdbb9bb56e6c94075c80":0,"8fa35495c844fbdad089396e2ad2c98929024b41":4,"9e44523e8e480ae0104b6d985ae8f56b3707d8f9":0,"63ffd1b6139e0216e6c7cee1673e9a6dc702e0c9":164,"149c1559c3e59c6fc8c05068c2f3021e44c5f651":8,"b1b52f52e77582e48378727008ea7d271e4f62d7":3,"abe7583ca9a681e6aeb7cfb8d4e7b0c7343c4f5e":49,"8f7d1596f40f3dd61402c7c8f6b99e6d07ed569e":49,"e94838fa74bb44dfc8fa816414119f60e1a2fd1f":16,"79a90434693665363036371579e987f409d99972":4,"12429f2a862d78225021a5b7a2be254bb8f7eb98":1,"4a05021c407bf8562c0888bfebe7581ba5043e5d":23,"ed06b8dd86060953943e8ae2a08e89a2eae39801":0,"e0ab8bc667c7d5a09026877119f514fa736bfc55":3,"205d0eaf04a940a2a211909c260729f6445b333b":4,"4832fb00e13923a6f072aa7f41a547f206404a9a":2,"9bc4a50dc79f2ae71a5fb6db620fab77768424d5":65,"6aaa0f007810766d5f6df5b1e5d8b2e58ff86f84":0,"6d1faa5debf004037f24fdfda10646fe12e3f80a":427,"774ee177c6d9fd84b355cd22bd78c460a84aa72f":20,"ad120dc5f5f05d8d7de0c4f2b90fb33ca895f14b":95,"133c90565952f2a87d1fae3dad9d5ba6196c281e":61,"0e44d29a94a0de5a9cfa0eff334b9ff39a0a90d1":8,"90dccabb426480a4a96b0633a5ac7a835a2cc835":92,"2c1cb389c27ec788229c37b77160444f6515eb83":6,"4f3b7dde44e69ea7760134a354b3952d01881382":73,"cf654d38dd2247c69dd03887b769772bb8c53cf6":5393,"72bbac9f5ffce324439e4293841d0bd83c1a518a":667,"868544d1e4ee8a345b82c541b309c48b8b27f377":2,"54871118c4e74e10d6dc27428bc0c1df7c80e879":1255,"a790e4c7fa4de31e308352d91bd76597dfce3fe1":629,"a979d72aac29cd4dcbb5bea627c91326eb30218f":907,"62426d35f7ae736973e1b53f00ec474f800ab6a2":99,"c401ce0bf6ba9e3cf63f2709298bd1a0e5e95499":521,"f6b575dd8448c4af1a68bbd69cc9728a0b83f46d":0,"789443cab9e521704199db6c46ef04851bc1a4af":7,"8a958d08bc99affa8bf393e759e11385003b3710":0,"b2da948f1633990de8cdeeb2dad7c8f44d0e40fd":35,"3a505ad16a6bb49dcbfa17b4919ec9e55bcc29a9":0,"bfd50563bfc5cfa3b7e9328c41c9105802d197ca":28,"847eeabbf79e6a25481ad8d57b766da2e8089a3a":0,"f6670c455506b5bab2af341b5bf834847146bf0a":83,"558ebd20000b6fb04e92b6705d1d7a248c696d22":104,"b63b674a985b712e4af1531fe69c059d1550daf9":235,"e89f7c61f1c832fd3a5e624e9254e7fc86698146":3,"85100669da623ce9296ba3032346b26c17638438":5,"b0a54035d4c85137c7f78d6940d069ccb280f8fb":1,"2341fe10e70375554df64c9aa68eb5729e2cb1f9":0,"4b50d4339e9e62229cc2d9f04ac9a3dbd57786e6":0,"4e2afd2928fe68fe7ba0b3bb0ee71d2edbb529c4":0,"b47f423288d3b7b2900e2da28abbeda4f56aa01d":1,"666276dca18d8953ddcb464ef4a521691df5f209":2,"03e554938631249dad68a9457bd38fe34adb1e6a":124,"b5a5b212be9f3cf9a2d5a2cbce28a83d40a3568e":0,"1a18ad625527ec947d3cbbfaf45b5a3158a70085":0,"5c5d6d09479662e76bad1b5698f7488823252bfd":0,"9a090ccc80db1c35a5a3edf1974959b2a6e422ba":0,"a4800953efe850c28dca7fef2d00f89baa7ff05e":0,"408f7638cdecc055a6920f7a170e17344f5bcd87":4,"2b0af2c8b97309439bbe3ca0a4f55c009085b0a5":3,"d1b8e7e5a8801676a21af349df5f9b674f7b2054":13,"d8e7fe49fb239103c9ece76ff7679010e240cd4e":5,"8287b83d6146196087b4853b19b575cc921a9e00":1,"c8bef8cd6abb7527f708aec843b9d140f5d51e81":0,"4e822bf30c87bc920411827fb0053cb1c03aa367":0,"d1b6abcf587aa0394cd7dfe4ee48712fea9df682":12,"0dfad60d9df4b3fc8c7f071011ace5463b9fe91d":39,"452ada17c7baad27c523ebf694908cb482a742d0":0,"b3d05bfc51dd0fa5c3743955ba007cb0478b4aa7":1,"340314d7e0cc6620549dc8df49ba34607fb9acb2":0,"3f05ac02c1fa09adaaf470461eb4b9a9c1019bc5":10,"f2ec6bd33803bc26102faae75c2d3c53c5dbc2ee":0,"bfdde56cded75bb8f7a9d61293f6d9972bb6ca4c":1,"22f69ec4ace314c87e96448b8c95d2e585faf2ef":15,"35eb308093f0c730682a180eb2d54c6d66bf818f":0,"88e1cad979b5ce0ee5b470c68fc145aec1097b0c":0,"da4f9f57e448bc8cffa68003fc3c5ec524ad56ab":144,"2ebf98b315d9e18bb635b4826819a505c8676b6e":0,"965ca6ee079af68ff5966f67be015e764e5b4672":0,"3de32305deb9d04f70cd171f60df32dbc6c01d35":613,"6157c93b0506394fbd5e3cd34ce432bcea11d561":12,"d4a95847f01a2a7b0eafbddd59abeccca760e678":4,"2b6eda413bceb69c99dd0a839dd4aaf388fb003f":135,"7cff7b403471085e15a3878706a27b415fb61e75":6,"6a2e52b87b03f8e36acf5bfb0a0d646005be18ba":4,"a3a352e90d471eebd128c4560475b289fe0eeeae":9,"a5945ee804d750780f64c9eb0b81faaf8744e175":4,"0dcde7389367771859d0afd4f8275333a6e798d2":3,"c9f7af11fe95eb1f6619ab462d6d032a16c70b40":102,"e290c7ffd4cba4ceaff2392eb55351531b812659":0,"4e51c4aaa74d144a3372d189676d670b3ecadd6b":42,"53aa97fc6a7bda140ec79c9c8b36133ca02b964d":481,"e246ebf1f9452d40123b9c9160f628ed8fc1ad72":8,"ccbce51567d126e580899ebc76b8cab47cd566a7":11,"493b0395c212b080e1bbcd493cac509dd19374a5":3,"1898842ec2b02ac053061d9e01da307aa1a5c1a5":22,"12e254da0d55844d7d3aecc67f6cae9409a6f61c":5,"4d418821fc147ecb1bcd4467ebeda42c3caf37dc":59,"48276e497994ea6cfd00b336dfe22fd28127e241":63,"e22dbe195c78078ce8629722e587819da13ebbd5":1,"fee6b79088c40ac1982f65815b433a5937112af6":10,"4e89c8ee84d8da034ccb6a767a4fdecf468b5b83":0,"18c3a008f2ba6952351cda7f2d101dc9b482263e":0,"88a38c1cb59155fd0a088ddafffbe33f7a70adf3":0,"155182d60ae0de3d615f2a1f25ad0608ae1000ff":0,"40ecefa0414ffd9e3c8250cecf933a177693510b":0,"1adc5d672f87dd2dca282770c67c3ec31f4a668e":0,"ed3cb41ef224879b970fd4a6d43c75410c7c9652":1,"6c49295a22a5f9b03c222396f689b7dedb57265b":20,"681188ebdb1bb744186afccb421e3d577e70d4d3":231,"70deb874715be68ec0023c193b58b875466887b4":1846,"1f78f331add832aee984a2c61adbf39ba0edc61c":6,"864d1529e4a66fe74ddbe620134f49e3e3c3876a":99,"289aafef2f4f103afa3fc83729bb8fcf0d26ee9a":77,"2e587e52401a0b6dd5a5d15a97b530a4b98ac1c0":57,"597d3cca38a04ec33b39a2b024979a836715afdb":118,"7eb236363620584246090adde7cc54e1057275c2":25,"0c932a547f4b52e463b63a28990f97f842a44755":5,"3a820769f9bfedd8c1d662aeca99c4d34aa096d8":199,"fdd577a38639d89a06559a63b3206925db30f19c":409,"af5c329cb793d96ad490c31fb3f287f518b1d489":151,"f18998aee8237b7c7902b18fe4b3f238ce287945":35,"8a72bdf7ac588d7eb835c6d922ac6919d97ca67b":94,"13eaf314be92bbe6c2b8d413948632ea3b666342":15,"63cf804d5e5a7b869738a6c0f702538012bddc73":7,"c8f18c6c16f1a71a0dda1ebd596e873bc887774c":2,"8eaac9bcca8b7efa5d573c974ae3370af5ac6368":3,"eea757d583343ba713d223ff72b2436e29e1f37d":9,"43e11e4ce97d8b25a841e135f5d50c5bc6936805":0,"eb4a925dab9c8328967ac9ff1af4f81519cb0cf8":8,"f0d7d11a87ea8b3a211f3d605629b00efcd179fc":171,"46c440bb26614d0dd43bc82c65a3cfcbcaeefb94":39,"131cbe6fc46b1d87d266e04adcf05f9e31397072":0,"5988bb8dbb543e4d19bf0f946beda52d7ba72d16":0,"771aeef8a0524e2dc012988533faea993077613b":291,"7dfe76449c183d30a17a23d556513a8bc56fbf3c":18,"1a0f269409275a0207b2233341a344018fcb4dc5":39,"77c8425d72c317d148d4c99c5c8b404adc07f856":18,"d4c9ed09d3b3673eb807c43eddcb850ae3fd52d0":0,"2a301c7bcf9b7c69366985c320f1b903a4c03f32":1,"7c8d4bc3a6951bdb0482d8bc76d69ab6e0e142ef":103,"7e4a19544d25aa1877e2f0a839843beff197527f":52,"91fe2f2949e78880f2d7800420837a0e74fa3399":81,"10fb8fdea3bfd0152a54eb8255db5c380e0b9848":1,"c68c6e65d32fbd81d30d28300f74d4beb40fd540":305,"7e717d709036251e86fd8224b8644fc2057d2681":28,"69bef2dc2c959b18485461dda334f885278ee9a7":1,"f938d7bbfaf6c8947b5a638a4a86f1369fd2dabb":1,"010e18a536cf7c4dcd1c16da623be02ebf40b0a4":75,"be5970bad8dd3aa984cef0bbfb80d8f371ca4f92":13,"63ccf834be0ef092825b04db15caf2c2002ee85b":169,"1c0e8607a84bae7f35c424ac1dceb573ab368cca":18,"6f3d9931b3d6537447f98941a4795c43819d5b8b":22,"74e1248c344c6cb512c3278652f54b1d0d80580b":62,"f78361143ce6ecf744ea2b9d1a4e9d9655932489":54,"b63222b282c92729d88c807d9e6232710a6ec5e1":275,"7ef113af027d1a9c503ee96a245e461c4e93c320":323,"2f76509abe24ee8b1d8062f25e91d076805934e9":0,"804e16ad0c6029010e206c1d1cb397f5c115dd8c":0,"9e71e74afeb0dc8ab2fc8068cf962482a844e214":0,"a34456a7802c46aa62bd3cf1b0c43c5cc367b85b":1915,"f14a050d5fdde49fe9d29786ee0084a9a3606ad5":117,"70445e4b028cf4c518f7757460084c66581fb395":63,"c4763a05fbf7e5bd0773c180b3a0e3b6fca43597":23,"6b45d450e5f2795253f6b29c41104fb6a71f9c57":147,"75e8a0f2ea6b5dfe14df31f4fdd080357cb0b28e":396,"b151a58bcb9d2704035676f25185f0184567be27":153,"81a09a7e17003cf9b99bc07d1683713a8c4c0c50":289,"3fc1710156103110cb6a03b4b19bf3c3739af020":157,"74a5a22b53934f1b3a651763c6d5e7a106435dee":163,"b5ea366e88fdca29ec8ac051c66a7be1f2e3152f":361,"7ce04ccb42cd7f7921167ee32cf703b764bc4fb1":41,"10151171f75a36819830a8c94c01aa6782a30ecb":7,"6f2c463d5e2b4151524b0ef640e5d047b7c76b8f":86,"e3f61927fba8b8df60e5bd9b85010555e7d4215f":14,"c19c0121b22c744d48f04348ab030a5f7580955c":0,"da716cccfcd5814457a66d5581a2f413033ed638":0,"32b2c3be3a328fa29be0ae6b4cfc106ba66c1229":1646,"5e8abd1c8f48f3420dd59a10c2c50641b541b048":115,"4dae47d94d08e74a82da8eb3c84ece8e456595e6":37,"5464f1284db974d48789f4ed51d651e32c31a3a4":352,"052ba9d03fe34374c43c1ef3c465a960ab285495":20,"b0b151915ceb7cae77f74ceb0958b8efd5b253d9":184,"a05928b58f0e33585145e617f36d3f79f66e1588":1,"1ee719bb504f403af0cc60bdfa784147a4aac1c7":0,"86bc02146b711bf736857db40067510b3326b39e":0,"d7a1b535ace3158c8e308edc79024d79974defd3":41,"7d98ee2a2933476ba0b46d739ea2b39b2252f7ac":0,"650baec05fc4afd7b347daf6a3973c4d68ec9239":0,"f72ad3e6fcc45bde1a726e7ca469b064e72fd219":470,"57606be0027ae5def294dbe7bb2577b8e3183e30":5,"b78907f6504164fa11992c4a8d2b46ecd9a8fe51":81,"088e7b0cfec3f834d897dfc6b88e5638ac3c9019":24,"1c110aec71f54cf0d2fa6e0d5ab11f95f6b6d717":0,"6f23b4e84ed24974bb6c7b8881834bb0eb4f090a":97,"f71f4914f13cb8ca10203e03a09ac5695fb6ed11":1341,"8ba4c0469a426c3337e445b19f852e14257df36a":123,"e4be5424e45f0b384cb6486bbf910e86585a68ed":0,"d8d40591dafc554bfbbf971195cde7d055fb4f70":1,"c10e318ceb1eef217106e95a499215ff84a09846":18,"6f9f36f63da50a915baa7182bd1aac8f710ed836":10,"f5e05c22fe8cbbf4b075accc4338319f888b428a":10,"5d8e1aa14c890120d81ac4e22e60b7458def3eda":14,"eb0976f11638caf611389b8c70ec38a8f51a8076":349,"d0380bdda598324bdebd5595e95a1a1e6996dbb9":149,"2ef3d0f723d64a08ee543aa4d02c7b4ad8799e09":9,"492b9772dd80813b239964b8ed2704288f4cda28":193,"38215c427b458b98284e42f32987e9ee147a49d3":0,"69d69f3f47ac60ac051605fe9fd8ce4e5f51f5e6":27,"67de3fde73a874103f2fb775974e2918eff08c22":777,"addc5fb0e5e049893df16d372276e6e743963089":2570,"d123fc42b5742e00780c1c3f527fbbe6766b3432":1,"d99dc65c187a194bcd500647e4c3853f027dd1e4":51,"79dd0cb1b234557ed47bc1f98542715cebbdec6b":76,"494b44672133458ac9d3519f1c9ad7ba9988e858":86,"8fcca8d2f597bb27b2ffc5e9b9d1446193edb38c":23,"3d065a92ff45471ce2425a8425921993faad6945":1,"ffcef42e910a36c86cc1bdc126d7091defe45f6b":32,"5921255be8ed89decaa62f021a46d77dcddefd60":658,"a1e8eb0b7b76fd6ded76eaa4e65e48752a9906ae":17,"1f54d68810f715bf30c4116865d967de86495703":824,"3229613c3b868826c27d1be79596d7c34c700436":732,"754094dacb3fd574b444458ed930b74da007222f":23,"10c2c3652cbe745a4cb6ddc555ecf72f81237f8b":2,"b953a26fa1a6015087a568354e26de8ac99eb52b":179,"8fa97845a44bf869074a8c70d9b7c9592d3f5ba4":44,"5c9f4affc9d5ee86c6f48aa52c866ccaee9c12ab":6,"f4383cbf0762e9d08c945265910693447eea754e":0,"a18cfe26574fb12a8c48216d82f6be63743d7616":12,"20769b76f87bcc06e46941e4e6f2a0378d28ff49":2823,"f72b49026c0d69827c7188835ccdabab5dd8051f":20,"84a0a6850d0d9340b9ee915e86ecb8f71e156810":74,"c556f82742f2546969286c325c202e0f1e9efca6":1903,"a97a7fca0972c0ceb0b3848fa9fcb960e7c7226a":53,"afeff21ce5128e81b81a6c0ad4f284400d556340":5,"a7ba0ea89b71b4b794bfbc14bf357ada148b0a7a":0,"3f3a69fe0c8879d264d0cb240cf41e3b29343511":0,"a6ca524f51cec21a533bd2c3784c50c7745c5f46":0,"b7fd93482a9a8defbe0e7acc1491616912e6f3bb":0,"b303c1110cb2bf62a27f8ae5567ae7309e041727":0,"1a18d5247beb00238ee0c142b4d99660730ae1c6":0,"68b4e28104506a706af3896bec0746bd28ed6793":0,"5b183b32d3330c206687a319d1970abd14bd43a1":0,"e78e2ee50dcd4dca76f28ccaaddebcd2fdb84914":7,"adb1897dd980da1158e6c7bab346c85a22d86f24":0,"be0a328666dd8eb42f269465b61d2cb743b98fc0":1,"f7ee687a727ce2593e581e2156014385edc85e93":0,"a33fc7c977f9e470707769d00cce84d1bfeb36b3":95,"31b74a2bee730da4ac5a1b7f0a0ecd77ff493297":53,"38ea3a415c81b6ce4cb81b505f9784aa50641a4b":19,"2552d27c5da31ccc57ff421d993ffa2760121e4f":42,"933a204983c5d2b278067fb5a0cb17afeb6a0d7e":2,"7bfbcbcfc6adf40493c6a2b75d0e6c09709e4a3a":1,"946909bab6b67fb3ce61170ed4488bde3a19a985":2,"768a211694a4000a374c70a20ebbe690dcd28d81":155,"c17453e99dfedb441bef04a14705f6372adf44ae":607,"da23f2e2c9f616fa369baec6d8517916e6a973c2":11,"d14c675c0e14603082d9dba1a9a6ca012b47af7e":1,"a8a920736088d909a2bbc54ea8513f59d0475aca":1,"ee3892458e5aaabad746a468dd1964921642289d":6,"7b633873c2a4724ffa29cf22cdf9ad28e77fdcb0":8,"991e683c172c98044be1f0e8712e3dbc507ec0c3":315,"c502d683e289eca67cd36fecef47d6f9f8bcb13c":182,"3cc4d0bca848fd201c68f80cc9f8dd6d31163069":16,"af4b54b793e9366a8873944cf159d65f317521cc":0,"c261792cccb51c58b1f88e972025e2d141956dd7":47,"b3f1af560ee7ddf25569c3f5790d31cfac13cac1":34,"8b016d20a51059d8cddd236cc454cfb3a1dadc7a":1359,"c11b00f0c9de1658783b812177d63a17a8065c03":241,"500d7120be117960f2aa80d7f2a2bb5c06bf7d8a":19,"d84f958c38d1e6114f2694764b0ef7b3b13a2fa3":3,"9a47a36a7d6fa598ca7f9fd2feb29c0a338d3453":43,"d541c438d1fcd6cce4561c6d1d3ad6da135dcb4d":3,"57b908d81f826c2c4d1e7d7447e964dd92977a8b":11,"bc8e095b5c3829c23765c9c86f2acdc6c26b8860":37,"a392f7b7b20d5e9fcbe74434c45d7846ac46f0c0":7,"aa5294b85dc2c14c40c902036aef44098404a2ab":53,"91c955fbb8b5d57f1e843e948c8e865ba437022c":21,"56165cf04801361574c48ac1b6b171224c492065":4,"f16fd8b8bed3f78bd81ff94cc5da90d297a2f67f":567,"ef926166de4e6c1cc3a32b76d240fc731c15a819":25,"96016499d12bdb6202ad1ff5bcf97a951b1088c9":6,"3a97dca58429b343c4bbb18aa6d512eec9346f8c":14,"d86856ffc41b4f0c384e1cb982cfabe1860a16a0":310,"d942693a71a11771dc3cdce8941f311f5c6a0e5c":12,"7d6069db0095211e76ce332ff4b28e9dada792ae":1,"ceaa0d485b6973c1f559703132a2401306d05f66":1,"7e127bf76a535fff30df35fc84bbd1b6987f2a58":15,"a6fa77323035a5f9b5bb8a6e860c308f46e959be":4,"5fa2dcf2ec12da001facc66b18f5b65fa2b8a237":23,"8e9e4a5f57ffa4321150002a9edb1502b057ab10":0,"79254624a3f54b6698441ac2a62b2a9742e69b5e":0,"119f6f4307975dd5f9d10ac9e717b75dfbcf0549":0,"0fa4cd80b6daeeba9aabe934dd78ae475e13e50e":3,"4fc29f2bc679ad1b3f254ee84b97a617efccdb51":595,"ec737b9b44449e9ca6cc08cedb4f9cc9c74a7e0a":19,"8495972d3706a0c4ab8813fd079fd71df8ec23e4":20,"1d25d7dca172430706cd4deaff7a3295e647463a":141,"b500564f459f24b8737f2156be3cf56b7747fd0e":226,"01d76cf8f1a2943a2cb5b4c643c866afe457f787":62,"cea8f462889af88b9bb020d0009eee9783beea3a":67,"4334279e8c7cfa27054e40f7e00a7664ff2471ae":42,"1e3ff61dede25506733a0f04f7a9c61c33c8c22a":22,"4391b430c495ff874cbaff921b359f1465368814":3,"e6e3e791961780c3daeed5295f328882b8c0c8fb":21,"8b1460c307c4a76875c34a8bf33beeb4789837d4":24,"29ee2007b1484a48cfbfb83557ff24ea3b5d54cc":1,"898557223bb91644ba6285533a35699b181a116e":241,"f98a9459236b8d88c2982b8b7dea31f11d25ab74":241,"018b5bf5c69d89eec8038aa1fd1025543f9631f5":100,"4427af800561e2530dcc02609b2546fdf6abc050":100,"a23c417a45ada11b6fb743d962ce057619680a70":7,"e6acaef8e70905ce48f9e0d4c2b4a81a9ee5d074":7,"50c3f3c34cce71c70cd5e00e891cd8df563c523d":0,"6ab94c027a8aa68cce8b5a5ebe969cbd7034f7e7":19,"562495e9d4e28de14ab462c7f6a13b9f86fa49f9":145,"9f6dd36c13ea7393df7e17ee98a47746af0b8ff0":10,"c5f8ef863f261de2442f4ab945037c6491999b7c":19,"fc2bbafb479ce35ea78fa1beb276d8104f9c515a":0,"2895d321581b62fe118a419a667eca236f112991":51,"5683ef3d7474ec212f187bf5112b8797ddfb992a":4,"b191a82f9c93710917d1e399d971a31f47c0ece8":366,"0f83f65a6c3001295547e0567fc02e60790976df":9,"85462a4917a1d1bdd986f5a693dc531466a1bff1":5,"90cd1d283535c9480d01051fa45c8057d0897bb3":17,"2cefd871f4d53c89b6baa4672b10cca3da29b9d6":0,"39e675205b032799c99b1af5b2783cad12ab885b":1354,"115e1be042f9e1ef2ecea4be0169801957cc09c9":43,"29cf7b8e29f182b116464b20369a932397b5f162":64,"c65f8f25ec4ebcd28b5f8e3d5f2f1c946712f1cd":14,"bd2d38f79ca3fc63211069b2a799268d34e81ff1":70,"920d8bd236f8414d47dc2174cd2759785d8680d4":99,"18359065dd86f5e1d7c45e5ca643147c6f773c54":150,"2255444f4b83858985a3aace74ab3ec12196e1ce":2096,"d592a069aa6612d56f8d2b97b69d79ec1cae7ff7":69,"20e9b82999fa2f6646dfd317b7638ba955c35fa5":63,"73dbb48b264d0708fbce991f5798cb3b5398ef10":7,"5a91194fa237767bef5ac899cf664d8c64c056ad":46,"b0a50e5d648dd9d3ddc0e81a3ab48515fe318182":5,"e4c04189834c73e7e4ca8b07abc8e60e738abe44":2,"1641b9ca99961ce1a87d5c451c0b2e3cc1507d3d":15,"597aa6c8547ca793674c96990625f43157889974":11,"c6c99c800fc034acf3bca960fc158adbcf228624":42,"f2b15948ecc978d175ccc01893993e463ec2d8ec":14,"a483e9c7896a42db58b549c7df10183846159ade":7,"a321a01078c5dfb417c9b7156c22b4fc56c75dac":12,"d06ab51cc87b06ab6a88b01ce929a4b0531ec3e4":39,"22de6a1f398fd80727988b208ac114efd32fe5ba":11,"3443babded67416df6343e2d1d58bec80947ce10":99,"896adce75a46621b0f3e0055174b239f857d345f":12,"d576356407d55cdab0d83d28eca69734d8cff1b7":187,"749c890c3fe7b95754d60f2ba1f0cf2717174cd8":34,"9c1219e6e2d6d656d494d52155737e0228d7a650":13,"14738e6644ac6c187b1dad32ec06707cbf5887f1":4,"1295c8b285a6ca6358666026839e22b1f4609980":11,"45f1e716af9d7938224c845ca3c0bbd93a78cd55":54,"c4c703e1d30e8db9a704b76ee13181a32b375327":5,"0802408640766e3afe3d96c14c9c49952c4b2ad1":1,"acffc89978dfa88961ec946dafad58b9a89e7499":58,"197e6ef5c9407eea6d63df5ee1e665d5b31d74ee":26,"0a5290f27e90583c7583c8850bbba6772fb47f4e":28,"c07ab44978827a4e0c4e46dbf664ce97eb383f94":1,"7f74d8b6339b5b6b2903d72a1de04406902caf4e":86,"6a37924bfce7cc53c67da8fa4554c68932bc06ad":6,"865e2a5f7e627d4c0e020d735e4733e2d5a03d84":23,"2e2621494c0a4a04ff74b006a02f6008c554ea9f":1,"d9678b065fd8f3e7c85a44af6248388d81ea20ba":8,"aca55dbb6b7720e0e293740b603358398698f0cd":22,"9032309dab743a6ab85779b365488f08241c59c0":0,"d9f3305f3190a397191ccc96095a1c284449c4a4":193,"06cc2f9d6323611eeb86b409887626df783d1080":21,"534750ca3e56897fce37bd36f851d5bb7fe1cfa1":35,"830a70d17145160b1514c2f2834c6d57efda52cc":138,"e6ddd654f0925bc95bb30f38289969a1a6d48125":4,"19b9c5c3864c04cb716b30b8acb58a9a4f296980":0,"71272abd1af7e87b51974bfc2bb47139f7dce054":37,"6a1f9d90bcaf9b2c23a40a33adcd4347dcf79745":1,"7a784457e5dd47b7924768d6b79ac9945fca4cf2":233,"02f0121fefeeedbde4b7d07118720c1c60a0dc9c":1,"e6e05b2823fc4ec5b6c3512fd9a14575ff31bf21":48,"724653d8f26cd5c1d2cab24deb45941b96234c62":7,"522cc481f1ef75659fa8415f39ba92d17823a20e":17,"95e4ab4f7c02915daf27fb398e03025e1d25d796":10,"116dfc49176fc89c3ee03b4f7cc14767fe052770":15,"7efdea12fe83c3392b795f1a961e391c10a6e30c":16,"bdd7a84f7bf9bd6a5946972fb07a7b8cff231f2f":20,"ec80a6d2bd72a48e39b4641f35936c8043c3eb57":0,"31da78aea4aa86221a06a618a69d282a10f1067e":0,"76259457698dd9809a920e9aa4f472b7884cbbd0":8,"56b30090e09d44f448a9603a355db0f19459af40":13,"0d28aa38469e978f1c25a1b57f59ad1bdbc12cb0":23,"a0d10ed6e569ece8aafbea2a44665992d59e3be0":89,"877cc6bd15feced8a73b8681eb32b38e232e8bcb":4,"7e01e7376c58469c4ff2935ac736ceb5d236aee7":38,"4ebbd0980164b0c96dd4058fc5c9ae87a71789ea":1,"0838fb887aeaf318afd55365521e8208d6d42025":2,"18f7cfb6bd8e35ec946c655622694be364bb9f64":811,"d0d8079fa2f84a730a4dd9a99d6e526ba30dc67c":739,"915fdca2c220cea4a05192c076dde348a79e3e80":137,"e1e6f2fe25e6750f7eca5887195c1e80f3e0e49e":127,"f3d4d3314ad5c47dcee5deb1b11a4cf23ced5316":0,"91321da6e3c83d0e035ade828f0f1a3028b5d916":27,"1d4598bfeace6a2ba139e0d7bee8339635f381ac":211,"23fc89f0a005122e2af94f92f80d69355474ff6c":8,"ba0ebe12847e8a9a0c584818307ba3c33c0c6fa2":0,"4e608849c854398d61e0c45781676e6cacbcf5c4":18,"7aae3d1954b055fa1650336d597418b695c621ef":0,"74cbc9c771cba7937169c431aaa16c38f8e7e2cd":8,"1846e2033db8bb9acd85dab171f83de06841c984":9,"e8daca92621a4031144e9923e1e6ff848d9b7576":0,"da6ab994704ecafc34f502dd64b3d35923c2f188":150,"97b3e6a444b08e123a4b7cbaf3c9a4943c2ff436":4,"23c64cf3a97f5a0c1c0e525811e4b0bd3604c859":70,"8b86eea1e0f64d6058fa91af9376e895f5c40bb5":0,"ad5a01e5d2ad482f8e1e6ba0e80b08b8f32e95b4":40,"9d8bd01e89ccdc4682b6ef6de9c857e4f44f5c6d":51,"427fe0b80982b5c213790826cc3525575611e468":61,"c90bece1f0744f155727dc16c830adfdefbb3af6":213,"c1a4a4ce13a99d616b7da4b1401cb222bc9c015f":416,"d338cd725fac3a5d0fab172d6b6de61dced5e46f":177,"80fd026e658221f85965dd1bcfb886d3f57de593":25,"63cb2f4bb60b03587bc9887bb20ead291ff801ca":20,"4d699636aaf34fcbf453af0ba93bbae1d974343e":333,"0779511ed2a0db945d20b51bb0b8d42ff550e503":882,"4367ec527a073fa302e889ca8e1a425127844584":319,"78bbb149dabcb4af22a3927b91f4beb4a0e15bb8":378,"16ceba418281d6832c1f556c49d267512869be11":785,"03c4ad6d34269a41548dd18537ce0acf8fc8b1dc":6,"ce7f0344b18e54b03eb95bbd48022a5f015b3619":107,"11fdef0869b5f3ad57ac51f0cf63869ce081a947":564,"bc795d4a0f7a77e4c26ee561f027608e9cfcfd77":0,"e90b1961664bf61054562a83c8d1b5bb11718ce1":3892,"6127ca4b32b428bc503b746a192ce201a30294cf":3207,"6a1f1ee274ce2cd15327261300303acb28deaca1":21,"9a57bef514863ed050b4154e26c5023163e0bfeb":7,"7b25b7b16ecc776e88c88bc313f1b90b72e4202a":29,"50f5b3cff1da72e0459b9e66f2a0f14d660fb4e4":42,"e51bf389f9f7989b9078c20c3cf44a91c0e229d8":35,"a50482328bc90eeb7a95fb3dcf67b2a817590619":25,"17f04f058a9515ab9a848df5773da244bf7bac63":95,"5b229c7157fb3bb85d42058c68d702d0cd5bf146":10,"d35d50f03de1b69da4d95762c16921a2635c026e":10,"f56a337e118a092143c4a70e851e391a09f10e9b":83,"d6d42c1f44c1d5bd56a18c7a63f9088726b2a646":48,"184071ca43198893ef28822a7f664e30577c10dd":77,"3e8bc56c633749eeb17b2c934b50974dcbcf6a11":90,"8614f4293c4d450ed13b4060489164600923822a":46,"f5ac6e977a8ab7b10cd02f7743bbdda416d685ce":77,"dd4fe349ad1a7b1dc0f6911a305fa618ccef16f9":157,"de20d38f46db94487768110f506971145995c060":161,"0069f0a81dc4deba5b47f8b6da93119460e3077e":0,"1cc9f8831e9b4116db32e900106e578d04236b8c":112,"b148ae9888ec9f953c794bf3376d196943699935":73,"30591835f7a1ed930a25f7ec0c3c35d24dceabd1":141,"998d171f54da35e9fad679e0d491c7965c90abde":1,"b14f608250f7e2491511a8450377faa7e368ff32":77,"491f7f6c803f0e6b8af3b0932d8d6714873c5249":303,"c8dbe8a5a4fb03b92fc4bace67d814657f818047":360,"4e26321c750c95c5ea0240af5f70cda21bae7074":35,"ae7550fdaa6c9ef5db9b20f4b7b3c69918bc38a7":11,"d8c82f374f6001b7544c3ba05615d05f564c5f43":2,"e16f08fc05551f56bc2204ec245cb853dd0b7289":0,"9d86b46e0312b1533d24875cf35b33ebacf9723b":0,"2babde64d41c15fe2abdfa1562f9007503708520":184,"cb1dc8148b8410a44790ed3528219762d7df164b":1456,"ad9da2debf147c419be43565317f998d4dec68a4":656,"0b84ecf364d587aedb74c4caf1d0ce561e965785":81,"ad5f37495c30c8dc748c4ded24c677254111fd62":2772,"f8f17c5445820eeee33a32e830f2c7019c4dea55":148,"389390d3cc03c58fd58f30e43b0bf02e14be4662":172,"e50692d3568571294da12d38d63a0fb9a792c48a":174,"e5548779e95d2bfcb903b2767f0669997a0769a5":146,"1dcef91e9785fa09a41bf1194885f14871375fbc":111,"281a1b06e8e1a6d0955f17ec7cb6b990ccef2406":0,"85e34d734e064c96b68fce0417230b866d320c62":5,"c65ee5ea282502dcefb39ab6391d8b5867d9bfa0":20,"72f142df10d55eb030e86cccebe9b3374afeb160":204,"2c720731f5e6efcba577b4d75a8d2ec9d56b9e5e":227,"f28efa29cf441c959d4e74db689bcdd68089addd":70,"a5e91ef5019ba582df5357701bb912a1d4fc7f8b":0,"aa3a8a60f601ab46f4a0c5ec13b4a76c366ccbaf":635,"f4c7bee510c530b55944445ae15dce2236761c0c":37,"4b74c6b6c0e66f459e17dddbbabe54e0678cedb8":180,"29f7af215d615479078e70f104cbdc82dea3cd3a":511,"746dc5a2d53f66711cd4be1ac7212609bff26e34":215,"b8ba8e5eb41e71be526a9b4c303b8cf799744135":800,"5c0fc736fca3fe6378835a0acdc97e071cc133ae":369,"ba7795c1f1393ae0567e498a01b0c267950b96e0":616,"f261c79f5fd54aed854500346b1460716978db35":1305,"ac1e666a686d5c43597467f79f23265321057553":515,"3a51992dd6821f3caa06ec53cc6ff26d7b2f4e4a":1,"1cbc45e602f6edb0dbd0d30ab408d1895b71c9f2":759,"f16cd22283dc8367e1004d29cc1aae99cdee8945":0,"e4273fdbda462ee5c88032ffa5fc8acede745552":0,"258f02b6fabf4f0f382a10b34d2010eba7b259ab":29,"271f83174fa39351577aaa0034af1d1c485449f9":0,"50d32412cc08e78ab87b3c3eb14de683df354b57":133,"25c9c03f101b7a6f70c60d48ad10b2ddc6510347":49,"2068855a93548b567a4ef0453038198351a02aaf":175,"7831104822c9280e415672097716a059215cbe06":4096,"62303923e76d512ccdb6074255db999b89cea1bf":1006,"c81e9a823f9e0457d08b1013b740cb1077b11248":265,"aff7b945e912b37dd0d75263687e0ffba074181c":231,"c0750f999d86be138e656d2d30c0ef5b5df133dc":0,"3100618ae70f8cf6be3890514b412b1689d0986e":0,"3fa14d1c31836c7d93b8f2ee24b23dadc0390442":2961,"309a073800079c5e893b1629fc9b37c26e40536b":771,"e5d0371fa6778ac5951e7cc23b4bb190897c91db":2966,"0dd530fc2483be34bf19d9fece3e0381247fa538":0,"57c87ece5042c13646efd1c748ff8b733cfd837b":0,"9fbdd3359095c9e1ad0e9626a8c40d403e83aa3a":140,"80d9eeef4fa068ceb0ed43a1ccbceeed9b4199dd":60,"16062cd505e91a628ae9313a43b41134ecebef0d":175,"872a8a005d48793fc649ca690e3c48aa7a41f318":87,"c2bafa698c53e8e9489fd45a5491fbd4c407cb0d":48,"fa96b51ba14c0a6df16c47b6481abed1555135f6":174,"8aa2c1bb391affbcfcf49ad1f4e1c129d3aee6b1":10,"69869ef759d69c50830d2bdf783ff2b836f1b946":76,"76af742d1e5ac029201c98ee894373ce8fe9ac45":55,"41de73d48ff66a5c4a38c0d3d087dc33ea703dfb":0,"d81787186b7f1dd71a3d26ff875b2fd6b82b0d46":0,"8fa7f0743be0bbb61a4767feb7e4c20aa094bd3a":0,"ce01bea116e55e996a677375f74602f9331e327d":125,"2f77115f129b0dbf4bb934b746057a5e65b5f72c":0,"74e4f6b9860e58654b72c5bb629a1f4a1a367938":10,"089c0bef1c0557e9c56ae075b883775db9156167":7,"7727193b31247e2cb203d8b0a765993ac6fcc015":67,"99b2ec7d7e197aa3469bedeb36d6dac5733196ca":386,"58c053bd6f573633569095b81fd2b70f3bb9a36c":0,"1931bc84ccbdb7c78ce971b3fa3569cf2a1b01e7":0,"a6fedb88ce8aff78396d5b7147e881f8de3338e8":0,"48a3015107faa0f0b4fd7e63238a2efc6b264a3a":123,"b2e1ec649140e98a249815137572a83b386234f9":1258,"3dfe865d60056a42cb1fe0204f99a950ee539d95":962,"51e2b63762e4f18b78e0d6ec982e55c93af14d32":0,"9d9c062dc2566b668ed4f26f28c3d90197ce6c9e":0,"f0745208b6f5fcbe09cd3af15a31c2e0bfa6b813":51,"dd2f63be8df64d5d9166d317a31269524da3e2d9":100,"9af129b3ced29d0992719168ec446114af0af48d":0,"4b59d2a5e5512ef126a77c073244080bbc8a4517":0,"38b9e58310be0dde7142257772a815e10fc9f2ff":165,"74bdee28c7ad7fc1173a607037126c2d45c85988":131,"4c198989ebf6d89ddb006a0b8f346dacd4c57d16":167,"03fea98e925f6b309bc6c91abf4e7746e3451127":15,"034fb54a8b228e40b8ce74526beaf984961dc146":1070,"7f5f942c320f8a67c6e8784b4871604ec4c17d3d":20,"5568ff5c48ebb7abd04d3a259ceb7c4023f2be66":95,"016f0acd4a79fa3cf2fbb83b3baab223e4f19dcb":290,"f94c2b108d5eb536cc2e9f9230810008e6a02270":1658,"d93907c9d81032b4d5eea913e9d82160d4ee61b6":1790,"c9eb73338c2ba183b51c61accc68ec6e21b59f82":9,"be07e30866f1706fd6c42277e4b36687d98ea6f1":53,"4c921fe56eabba331dad329ee5e7d6e955fc4fcf":442,"22657329e829292668f3a7446b75d02e022e93b6":467,"c0727adf6986c4f5f416ddf99970a6288af3cef4":265,"8546a4393dc036ec473c08b645670709268d2a9b":1056,"2144a032f793c0f5ed07620fe8689e7fdddb9ca0":453,"6dee9c8c695be512747bc093127840891413543a":151,"feeb22de19e014e425fb8a3bc7351bb0ce252729":37,"f4b509cd2ee8ea056bd73a71a4a08ca036d14b1e":1088,"be3c21274086ed2bd4fa33bea9ef10bd85a7999b":14,"d5dce298212e348e4904a03dd73237db1cdbba49":212,"9818639572853c5ee77666a13b7c0f12c7a0f3f5":21,"423da1cdb0957180cc4834336893a31dd7537d02":7,"7bb001fb98aed6e056405b2a93f7324b4c19025c":1057,"9fceba3beeefb44b642061ff775fe92979e23518":669,"37641b11beec4f5fc01d427dabd4f11b713875cb":981,"02ef981f41b6d727c236744464139a7f4cdbe21d":17,"86c8f8a8b4481915b25aeacae5bc69b7dccf078c":25,"6130cac2da75ff3199b5ef72af9d178f8ca4945f":0,"bee8331ed0e02b1fa17d2480b628c89bb74367d5":19,"0357e7314295681009ec034b5247a168c66193be":33,"1a70f2821080a96287ffe3c5aa38ab49bffe79ec":151,"59145bbc6092181ed364ac5183c99fee28cf6acd":23,"ff2c63a7470f5b2cc86b8f1481e59003171ed80c":119,"af5f1d9b66a462315a1d7cb3dbced9c95fe843a1":81,"1b35336306701d6355bfbb4a1e2d2a6812d28474":133,"51c55823413ee5c6e876f39ecd8de49d92272913":0,"c5a1e3b0ae51618861be6b35f13d65c14ef01f56":0,"50b49b7cb11bec81ceb5950c39e74a983512df4a":178,"e1c36f4a0406f58138c85e87149f942a33d9d931":0,"d835753e271a19d3f21c940eb7afaa6539f7251e":119,"5d4c178d834a8a8de1d2f053d2de2f37e75f7389":392,"062ddfc7de4aa5bbac5fbb4462e5fd6b9e6325a7":925,"8446ceb7d3538b3e6fb7e18e6e64ceaf2afba559":484,"d760c6dfef492f91154fb98c272f5a8228b428b2":8,"c668db9598556b0c8223ff7d371ec7255cb21c61":8,"62b3732817dcb68815f7b59a751efc0c40cf416b":8,"8fcaaae14b15f1f92ac28b1be9f7c3081dd2f88d":539,"8c2814f85da958eda3b234d716f423823888c80d":70,"b240cda22eecd945592f9c3ad1393a42ac00083a":528,"18aa008244f5711f8961ee1eaed92673a24f210a":351,"c92402a035e13b9e2dc5b6467bae1ab2239d759f":1,"70eb9606739f79615e384ce3036c29f6b51f75cf":39,"bb88d817d02d7dd4bd30b9f80222c7649cf76aa1":32,"b29cf0e66a5aa978db5a7ac05288a2e17b200879":0,"aa77405b279ab102c9bd287c979cb7df82caab80":151,"63c0252090644644998c5910493862c793ed89d5":191,"91537082c51edab02477a32ff45e537208d69cf9":131,"b58ce2699927ceb90b9a6405c25e72b4bae5658a":32,"29c433e737300f0354bba420a856e45301857507":47,"6a716975602fba8d1128493de81c2a546a754dc0":225,"af2fc577666df48e557725b124a483653ff88b67":10,"9b776a8b9eeb7b130023b4c2bd9e012d3e839a34":137,"025e739436630fa41ef1fab21da0f78f029ab111":173,"e8bc2e391984b25cf6761932a3c4c07324239cfd":64,"ced117d27eea54d6c61a1d1f10d88c8d2e5e47e2":177,"be21e7ad75791282700c05f27159aaaff1149952":117,"0aa9384202356b08120157552e51c5b26a68144b":44,"0cce6f53b2a594a8eb619e742149f1aac1772349":39,"9d8db111c99d9569dd8112eaf1f8ae0f6ffaa78e":50,"688f8d29708b7636672d647bbac177d9cf5d722c":97,"225c41aa311a0c383feaecf9d22c187c698a7ff5":58,"b86de76a590f74d9c10f6b0adf864abbba947d3f":39,"f02f2985f043f93c407414b511357cc2b421be09":46,"1bb39a2a22dc5569b08a5b1266fba45832454cc2":176,"47abf27467df7dc88e02d20138e8bc2a4b4cb498":66,"c5fa0de921aa942c8b2a5930d847b488c07f6e55":11,"0f4c00e1b5a93817d664d576cd8f54eb4ef46fee":27,"bfc840499916c6993046633fec9132c50c3fbca4":61,"51f9e752588615d4be6b4b2d6d5e7ed6be03c088":55,"e253436112d2d8f800ba1f63b3370a7fe5b90ae1":184,"37356771e4edfbe0a9ba19750bab6fcdb72fa17c":55,"0d6234769f2f674f06e5ac7e17d4bd712e4b1682":46,"e10c81887b00a5194cd934bd397f7cc8c04989cd":131,"566cf321bc350b8fe9ad470fc2cdf1c3447187ea":174,"02d2a097b00fd977db1f42a2cf08163950d130b0":174,"14f7a78cd20d585f3f8da0a3c97945c2678d6a1d":133,"af2dcd7fd04b4646d556f612f68d3f24f2ec1499":74,"20f76198786d1e128a2bd0fd8303d54b7ec7ec5b":17,"44fc54300875ae9e5ad45fc2a2296183d017e046":12,"93564535b4f97f61bf2edbc1bd9818183645af84":8,"8f32b02374c21494a8c0d98c9b0644836aeb4824":214,"4120383caa2aabcd035a046ae006b689210ac0b7":115,"6c708f5f9e19dded0e725eafdb8a1ddafb0eea48":30,"8a9e025c92c1e599d8338ac7c990c8c6cdc7daed":312,"574be760efe5c5f29b2cb331815d1b5e35057963":29,"a4d7740703da0aade05a8748ec9bbce42988c668":142,"3688ce6b8200dfd9a547e1af49802cdf28743dde":7,"de08e59b2b1a18829c92022e0a381c6b331bbc51":0,"79f444859599adeed119b769dc0db746888f41ce":528,"0820adba7b8a3f2dc24912e72d8c0e75cdefdb5f":100,"5a767673459fd72386447658865e663622c8727b":65,"9d6c17ca37d0937ad50ee7dc4f3f405ec5b852d4":748,"0687b42c55f4fe1ca5048d40dede4a320c010ed2":167,"95635d9aabaa659fb56b72200e5f07d56987b005":0,"08de93f21a7a5f3e8c11827d26fe713c2519ee2c":0,"c099980f55953c1e6bfefc95754e88edacb99bc0":0,"6e936488bcc3c87495c308970b5332241866626d":1042,"e2f74a94eef65d25bf2361af989acde42c6a31c8":267,"6a9be4b0f462903b785a23e9a22e459d730df96d":530,"b67bac1db539d5d6612ac4bac9fc8a93673d964a":0,"f61f3ca40ea13ac7d73667bffb7df15fa0b8723d":591,"581c510521e69c9e133e4a5509472fc886ba8a5b":57,"7c9f7e3380e1a4c38a832f9e29286f9e2e770b08":64,"e43bb35802796fc6489728f742f371d028589654":238,"d864bdebdc80b18e85903cef1e82b419a942d595":36,"10e6e31aa1ada5a1a277be6c06d22a71e4180114":158,"6ec51b092bfd955706af763dde5cfb531eb77616":97,"89e61026c4b8b1cc57b074566f61f2245874fc54":536,"48d009ee082eeee782e5b8f09e0d3a0e861d942d":924,"5fe4d1e52df2d4677098f333b879a793cd028d32":622,"c1374fda219f72067cff72bd8492ac615c5d97a2":54,"09b259a3cdf4074e4b92043c68757ac937ef41b8":118,"8c9946f3904c472d75173bf82ad1c6068f0dc30d":181,"a6e7df6ae86ba1f5f27e77fcd5593bab0e59d3ce":274,"baac604464286cafa05ba50beed53b5111708a71":0,"090737b593d81b84b3d2b2a602f85a5c8cb9edc8":0,"150efb18798d76b18bbf50f249f7cb43b952f26e":12,"593e03942779058d41dc0c717ae78ce8fd2ecd69":18,"07fec7d9c871778e284cbb69564faed929baa9ef":24,"1883040798d5a315fa3d1a6723a2d5348512f25a":1211,"c7babb940bcc6ed25b79446c5016b61b5a4b3c43":120,"d801b697797fdfb3d2ad790e3d426f940815783b":63,"40eb613d68cb4e686afac3f5a1fd7efb1f5a82ff":0,"acdfaea9b05f3c4393086494a9e8e00716ad438a":0,"7e52c341da1fc7a4c0a293d08e74df4cca48969e":446,"e1789a797972f84e4aa633b652144f255ab76baf":55,"c3ade3d19cd4639609c3e8d0e62e759df69a93de":124,"e3ed8f0e779b0def67a1993c476857e8c4f2a97c":0,"5a7dd5616aef5e5ef1d7317910784f5b57b6b74b":104,"508812cb0303dc770150bda36d2eafa09693ec7a":2525,"7371d4342e2b0396be05bcd9aa22e9bcaa720414":42,"985332170969d5aec2e3e8ac776437b43431392b":614,"cf0ba80e81fa920527e41a270fcfdc29ea3f4b5e":42,"594cb7a1669a7731164e830ace1acec5b454fad0":0,"7f48907081d93ad209b30e10ff640ea0b8ed0e24":0},"tools":{"claude-code":{"name":"Claude Code","commits":762,"loc":193888,"first_seen":1761962249,"last_seen":1791650361},"github-copilot":{"name":"GitHub Copilot coding agent","commits":36,"loc":1552,"first_seen":1770180165,"last_seen":1773062695},"openai-codex":{"name":"OpenAI Codex","commits":46,"loc":10943,"first_seen":1771659405,"last_seen":1786810395},"cursor":{"name":"Cursor agent","commits":3,"loc":1314,"first_seen":1785556806,"last_seen":1785556809}},"monthly":{"2025-06":{"loc":15117,"attributed_loc":0},"2025-07":{"loc":11195,"attributed_loc":0},"2025-11":{"loc":829,"attributed_loc":61},"2025-12":{"loc":3512,"attributed_loc":3461},"2026-01":{"loc":72583,"attributed_loc":72583},"2026-02":{"loc":33723,"attributed_loc":27401},"2026-03":{"loc":25451,"attributed_loc":23891},"2026-04":{"loc":7016,"attributed_loc":6310},"2026-05":{"loc":9865,"attributed_loc":9791},"2026-06":{"loc":26534,"attributed_loc":25876},"2026-07":{"loc":16210,"attributed_loc":11423},"2026-08":{"loc":23635,"attributed_loc":12406},"2026-09":{"loc":15043,"attributed_loc":7404},"2026-10":{"loc":8909,"attributed_loc":5400}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":15.0,"workflow_agents":2.0,"tools_configured":1.0,"earliest_adoption":1753117197.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".claude/.afc-timeline.jsonl (claude-code configuration)","ref":".claude/.afc-timeline.jsonl","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/.afc-timeline.jsonl","weight":0.5},{"kind":"ai-artifact","description":".claude/afc.config.md (claude-code configuration)","ref":".claude/afc.config.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/afc.config.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/external-pr-reviewer.md (claude-code configuration)","ref":".claude/agents/external-pr-reviewer.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/external-pr-reviewer.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/i18n-completeness-checker.md (claude-code configuration)","ref":".claude/agents/i18n-completeness-checker.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/i18n-completeness-checker.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/issue-analyzer.md (claude-code configuration)","ref":".claude/agents/issue-analyzer.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/issue-analyzer.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/provider-pr-specialist.md (claude-code configuration)","ref":".claude/agents/provider-pr-specialist.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/provider-pr-specialist.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/release-gate-runner.md (claude-code configuration)","ref":".claude/agents/release-gate-runner.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/release-gate-runner.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/rust-architect.md (claude-code configuration)","ref":".claude/agents/rust-architect.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/rust-architect.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/tauri-axum-parity-checker.md (claude-code configuration)","ref":".claude/agents/tauri-axum-parity-checker.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/tauri-axum-parity-checker.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/typescript-architect.md (claude-code configuration)","ref":".claude/agents/typescript-architect.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/typescript-architect.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/ui-verify.md (claude-code configuration)","ref":".claude/agents/ui-verify.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/agents/ui-verify.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/pr-review-check.md (claude-code configuration)","ref":".claude/commands/pr-review-check.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/commands/pr-review-check.md","weight":0.5},{"kind":"ai-artifact","description":".claude/harness-kit.json (claude-code configuration)","ref":".claude/harness-kit.json","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/harness-kit.json","weight":0.5},{"kind":"ai-artifact","description":".claude/settings.json (claude-code configuration)","ref":".claude/settings.json","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.claude/settings.json","weight":0.5},{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/CLAUDE.md","weight":0.5},{"kind":"ai-workflow","description":".github/workflows/claude-mentions.yml runs anthropics/claude-code-action","ref":".github/workflows/claude-mentions.yml","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.github/workflows/claude-mentions.yml","weight":0.6},{"kind":"ai-workflow","description":".github/workflows/daily-pr-health.yml runs anthropics/claude-code-action","ref":".github/workflows/daily-pr-health.yml","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/.github/workflows/daily-pr-health.yml","weight":0.6}],"data":{"artifacts":[{"tool":"claude-code","path":".claude/.afc-timeline.jsonl","added_at":null},{"tool":"claude-code","path":".claude/afc.config.md","added_at":null},{"tool":"claude-code","path":".claude/agents/external-pr-reviewer.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/i18n-completeness-checker.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/issue-analyzer.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/provider-pr-specialist.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/release-gate-runner.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/rust-architect.md","added_at":1783784719},{"tool":"claude-code","path":".claude/agents/tauri-axum-parity-checker.md","added_at":1781967800},{"tool":"claude-code","path":".claude/agents/typescript-architect.md","added_at":1783784719},{"tool":"claude-code","path":".claude/agents/ui-verify.md","added_at":1783784719},{"tool":"claude-code","path":".claude/commands/pr-review-check.md","added_at":1781967800},{"tool":"claude-code","path":".claude/harness-kit.json","added_at":1783784719},{"tool":"claude-code","path":".claude/settings.json","added_at":1781967800},{"tool":"claude-code","path":"CLAUDE.md","added_at":1753117197}],"workflows":[{"tool":"claude-code","path":".github/workflows/claude-mentions.yml","action":"anthropics/claude-code-action"},{"tool":"claude-code","path":".github/workflows/daily-pr-health.yml","action":"anthropics/claude-code-action"}],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":452.0,"flagged_units":24.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":217165.0,"flagged_loc":65626.0,"flagged_loc_share":0.30219418414569565,"max_loc_per_hour":8192.0,"median_loc_per_hour":121.54771773064915,"pr_timed_units":218.0,"excluded_import_loc":52457.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"4,096 lines of first-party code in ~0.5h (8,192 lines/hour, PR #415)","ref":"7831104822c9280e415672097716a059215cbe06","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/7831104822c9280e415672097716a059215cbe06","weight":0.6},{"kind":"velocity-burst","description":"1,790 lines of first-party code in ~0.5h (3,580 lines/hour, PR #464)","ref":"d93907c9d81032b4d5eea913e9d82160d4ee61b6","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/d93907c9d81032b4d5eea913e9d82160d4ee61b6","weight":0.6},{"kind":"velocity-burst","description":"1,056 lines of first-party code in ~0.5h (2,112 lines/hour, PR #470)","ref":"8546a4393dc036ec473c08b645670709268d2a9b","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/8546a4393dc036ec473c08b645670709268d2a9b","weight":0.6},{"kind":"velocity-burst","description":"1,305 lines of first-party code in ~0.8h (1,732 lines/hour, PR #403)","ref":"f261c79f5fd54aed854500346b1460716978db35","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/f261c79f5fd54aed854500346b1460716978db35","weight":0.519498709915223},{"kind":"velocity-burst","description":"2,772 lines of first-party code in ~2.0h (1,398 lines/hour, PR #384)","ref":"ad5f37495c30c8dc748c4ded24c677254111fd62","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/ad5f37495c30c8dc748c4ded24c677254111fd62","weight":0.4194703656998739},{"kind":"velocity-burst","description":"5,517 lines of first-party code in ~4.6h (1,189 lines/hour, 10 commit session)","ref":"a0ddfe6ea2821ba629032fc4a5b01ba730420262","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/a0ddfe6ea2821ba629032fc4a5b01ba730420262","weight":0.3566598826768826},{"kind":"velocity-burst","description":"3,022 lines of first-party code in ~3.2h (933 lines/hour, 5 commit session)","ref":"f8fe400f56550c01e352d11ad9145e5157639ed7","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/f8fe400f56550c01e352d11ad9145e5157639ed7","weight":0.2799828429269966},{"kind":"velocity-burst","description":"1,006 lines of first-party code in ~1.2h (829 lines/hour, PR #413)","ref":"62303923e76d512ccdb6074255db999b89cea1bf","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/62303923e76d512ccdb6074255db999b89cea1bf","weight":0.2486793316548409},{"kind":"velocity-burst","description":"3,892 lines of first-party code in ~4.8h (811 lines/hour, PR #291)","ref":"e90b1961664bf61054562a83c8d1b5bb11718ce1","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/e90b1961664bf61054562a83c8d1b5bb11718ce1","weight":0.24340494527766515},{"kind":"velocity-burst","description":"3,093 lines of first-party code in ~4.0h (773 lines/hour, 1 commit session)","ref":"b17634777a456a5684cd9ebc693219b2e44fbe54","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/b17634777a456a5684cd9ebc693219b2e44fbe54","weight":0.231975},{"kind":"velocity-burst","description":"3,207 lines of first-party code in ~4.2h (771 lines/hour, PR #295)","ref":"6127ca4b32b428bc503b746a192ce201a30294cf","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/6127ca4b32b428bc503b746a192ce201a30294cf","weight":0.23115056059797118},{"kind":"velocity-burst","description":"3,347 lines of first-party code in ~4.6h (735 lines/hour, 2 commit session)","ref":"addc5fb0e5e049893df16d372276e6e743963089","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/addc5fb0e5e049893df16d372276e6e743963089","weight":0.2206409082585607},{"kind":"velocity-burst","description":"1,584 lines of first-party code in ~2.2h (723 lines/hour, 10 commit session)","ref":"bb88d817d02d7dd4bd30b9f80222c7649cf76aa1","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/bb88d817d02d7dd4bd30b9f80222c7649cf76aa1","weight":0.21698630136986302},{"kind":"velocity-burst","description":"2,835 lines of first-party code in ~4.1h (688 lines/hour, 2 commit session)","ref":"20769b76f87bcc06e46941e4e6f2a0378d28ff49","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/20769b76f87bcc06e46941e4e6f2a0378d28ff49","weight":0.20636247219788365},{"kind":"velocity-burst","description":"2,205 lines of first-party code in ~3.4h (656 lines/hour, 1 commit session)","ref":"ab6bcb4546733b6e708c12cd343358916fb23d6b","url":"https://github.com/jhlee0409/claude-code-history-viewer/commit/ab6bcb4546733b6e708c12cd343358916fb23d6b","weight":0.19689127738735016}],"data":{"flagged_loc_by_commit":{"64e588f44d450b4d1708f38f6a37fee8689d3766":1614,"ee83f5e48fb1fa271f8ee1fe74163d4e32ca5bb2":21,"48d4f240cf8fe13550af83b4bf243a15a998f278":24,"8694b85616b966034819a006d451914db0e7c8bd":9,"b4a68610e5c9d892ac0aa5136e68d8b7a3b84090":481,"91290cd8fbd883eabf3c19d2cf3975a7e7f1e37f":216,"e4904511296081606dfba776018c7198c1db6081":471,"73856830b2152453f6e976ed6901cb40d0c18008":68,"b1c0abbb7b883df1efeeb182840c7057ebed46d7":30,"39c1a947fe97674efd5d5812d75d37301d1843bf":53,"dd3d189d3450927df492f811e7fd3ef02cb1b7b0":834,"508d5218935c4a8df54dde4f849f8c84bd8207ad":47,"acfe633cab68e5d6bada188241ad64a59d2b4749":204,"dff7851e4b68e0f163400bf0041358f495dd705e":2083,"ea3dd96f93596cd275097e87de71e04c5226795d":424,"524001203c7584bc0943287f101148cc6391c2f0":37,"c81494656f8d9baaf8b75b8ec817276cf37d0686":115,"f8fe400f56550c01e352d11ad9145e5157639ed7":363,"b17634777a456a5684cd9ebc693219b2e44fbe54":3093,"104cad6f52ec620e4570b5aba71bd90d80fb4888":485,"ac2e55870433dc58b035672d87e829dba60aa740":548,"c5e4d226617af15a9f1b39934702f99cef94e845":75,"4a1a5e9d60565e7b87871c970432d3912539dec8":3509,"79a81ec1f0ba930cc048d62ac81534b3b88bf2a2":838,"b0f46b1ca9cc2d038a89e822832bf6ddc69785c4":365,"129663cf53e183591bf26dd66336f96b9e02a51b":30,"bae56724896f1d17bac7fe90340a2a23e168f303":60,"0103fcf2a84a3260397da91257771185297ddcfc":5,"718940bc45976834a319d66790dcc84680e0f25f":51,"d759872e4282c4828fafeadb499b98d931f29745":36,"a0ddfe6ea2821ba629032fc4a5b01ba730420262":75,"da1e89a3c108d95475533c8c5f78b3ec6abb569a":548,"45e1769e2ec6b2ab233aa81a6d92c381626db1ca":2401,"6dfbb64c888ca627c5676069f88fbf66ea631990":217,"91389f823d985ac9ef39ad075180cf54d484184b":14,"683f880f296c36069f6523ba1e1456049885b107":32,"5b8069366552b7a5d2287d0f2575dcbea8c11164":1416,"518f8a89ad4caeb0c03ccf73834dbd04cacfcec2":248,"67de3fde73a874103f2fb775974e2918eff08c22":777,"addc5fb0e5e049893df16d372276e6e743963089":2570,"a18cfe26574fb12a8c48216d82f6be63743d7616":12,"20769b76f87bcc06e46941e4e6f2a0378d28ff49":2823,"2255444f4b83858985a3aace74ab3ec12196e1ce":2096,"d592a069aa6612d56f8d2b97b69d79ec1cae7ff7":69,"20e9b82999fa2f6646dfd317b7638ba955c35fa5":63,"73dbb48b264d0708fbce991f5798cb3b5398ef10":7,"5a91194fa237767bef5ac899cf664d8c64c056ad":46,"b0a50e5d648dd9d3ddc0e81a3ab48515fe318182":5,"e4c04189834c73e7e4ca8b07abc8e60e738abe44":2,"1641b9ca99961ce1a87d5c451c0b2e3cc1507d3d":15,"597aa6c8547ca793674c96990625f43157889974":11,"c6c99c800fc034acf3bca960fc158adbcf228624":42,"f2b15948ecc978d175ccc01893993e463ec2d8ec":14,"a483e9c7896a42db58b549c7df10183846159ade":7,"a321a01078c5dfb417c9b7156c22b4fc56c75dac":12,"d06ab51cc87b06ab6a88b01ce929a4b0531ec3e4":39,"22de6a1f398fd80727988b208ac114efd32fe5ba":11,"3443babded67416df6343e2d1d58bec80947ce10":99,"896adce75a46621b0f3e0055174b239f857d345f":12,"d576356407d55cdab0d83d28eca69734d8cff1b7":187,"749c890c3fe7b95754d60f2ba1f0cf2717174cd8":34,"9c1219e6e2d6d656d494d52155737e0228d7a650":13,"14738e6644ac6c187b1dad32ec06707cbf5887f1":4,"ab6bcb4546733b6e708c12cd343358916fb23d6b":2205,"b53eaed8efb929eae095c2c394637312f331058a":3357,"e90b1961664bf61054562a83c8d1b5bb11718ce1":3892,"6127ca4b32b428bc503b746a192ce201a30294cf":3207,"ad5f37495c30c8dc748c4ded24c677254111fd62":2772,"f261c79f5fd54aed854500346b1460716978db35":1305,"7831104822c9280e415672097716a059215cbe06":4096,"62303923e76d512ccdb6074255db999b89cea1bf":1006,"3fa14d1c31836c7d93b8f2ee24b23dadc0390442":2961,"d93907c9d81032b4d5eea913e9d82160d4ee61b6":1790,"8546a4393dc036ec473c08b645670709268d2a9b":1056,"5a978c872d6dbfb79f7ec02f6164f620203583bd":3324,"b67e0d25250957c7e0555132075fd4309e4d44ad":859,"97ae02363e137509fe3bef245bc8abb41d66d545":338,"54955c6209585acb65e13ecbf4461d4d4e016428":37,"2323160b374b77e45e19add5d63ab679a346a006":13,"a50ab07f2599c15ebda3b91220ad658d069d9be9":248,"f344895546a6669c33993643dd0013c84facf591":169,"02d08d64de67df44de77442a31b58170b4237aa7":1,"53b21a2b86b244e7643a9ed5bde42dcb09a66916":82,"7481b3d090af88ff2d927b26de5aceba5581f837":25,"50bcc0980097a359236644d7049bbc9d9076da5a":29,"ca6112f9ac10040e500693e229cbee656f5690fc":65,"ab68295c818d0df74c493d86b594ab0101357fe5":81,"a53b53c4160bb23034b52123e090f026e8da68cf":32,"4b8a430bca85d1c51dc80e23d6bb07a0b031dc1d":89,"ccfaa1b3f1ae84bfb142e201c2842faf2d1e1aa7":115,"fc6c81979f79dd02638a92014145705fa7ad0e8b":95,"a6594f7d4deceb441f9fd09512da87aa8dd5328e":150,"a349708040e8c4daba35dcc73a1238640c8ec05e":78,"c86422ac9333d7b22076a0710b8167d7889519da":24,"6e03077493369b5559ac8c50bb77bb30ee858e80":34,"45c02270f8a9de77467e12df025e29945d6ea76f":43,"410714b6d8090f43feaceae0a27eb99d1d730df6":21,"2a091cc0311fbed64a7bfef6e8a771037826e0e1":6,"720f25b7858706a30be8fd97bb45ab29737b4fd2":4,"e8b990188ebdd39a27afb7a2fd456a19212a94d0":75,"8a1be0761e6a10490051e5ee606b2920e048db18":108,"8cec4f2612437ec1ed55961d7180896f1dc30498":9,"0c95fa6e57c361c0562653c06c06a496f4a92bc4":124,"944d6ffac2cf2d83673bf8cdd9549b261c49a3b5":7,"d760c6dfef492f91154fb98c272f5a8228b428b2":8,"c668db9598556b0c8223ff7d371ec7255cb21c61":8,"62b3732817dcb68815f7b59a751efc0c40cf416b":8,"8fcaaae14b15f1f92ac28b1be9f7c3081dd2f88d":539,"8c2814f85da958eda3b234d716f423823888c80d":70,"b240cda22eecd945592f9c3ad1393a42ac00083a":528,"18aa008244f5711f8961ee1eaed92673a24f210a":351,"c92402a035e13b9e2dc5b6467bae1ab2239d759f":1,"70eb9606739f79615e384ce3036c29f6b51f75cf":39,"bb88d817d02d7dd4bd30b9f80222c7649cf76aa1":32},"excluded_import_commits":["3511415d51e58aed11e995cbb344edc5c7c994cf","45e3caaf94b281a6b6ddd33266661a71c187a9ab","a51c0ecc9e90282f65d96fad41439f23b4cbd409","b5995c43b81e68a5835d1a004ae39c49ccaa87e9","cf654d38dd2247c69dd03887b769772bb8c53cf6","f14294b97da9c9c8ff1bc938dd4ea0d786717fea"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":54.0,"flagged_releases":5.0,"max_loc_per_day":27229.3},"findings":[],"evidence":[{"kind":"release-burst","description":"v1.1.0 → v1.2.0: 8,931 lines in 0.97 days (9,246.3 lines/day)","ref":"v1.1.0...v1.2.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/compare/v1.1.0...v1.2.0","weight":0.4},{"kind":"release-burst","description":"v1.14.1 → v1.15.0: 5,972 lines in 0.29 days (20,612.8 lines/day)","ref":"v1.14.1...v1.15.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/compare/v1.14.1...v1.15.0","weight":0.4},{"kind":"release-burst","description":"v1.15.0 → v1.16.0: 5,955 lines in 0.67 days (8,876.3 lines/day)","ref":"v1.15.0...v1.16.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/compare/v1.15.0...v1.16.0","weight":0.4},{"kind":"release-burst","description":"v1.16.0 → v1.17.0: 6,698 lines in 1.14 days (5,872.6 lines/day)","ref":"v1.16.0...v1.17.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/compare/v1.16.0...v1.17.0","weight":0.4},{"kind":"release-burst","description":"v1.20.0 → v1.21.0: 7,385 lines in 0.27 days (27,229.3 lines/day)","ref":"v1.20.0...v1.21.0","url":"https://github.com/jhlee0409/claude-code-history-viewer/compare/v1.20.0...v1.21.0","weight":0.4}],"data":{"releases":[{"from":"v1.0.0-beta.1","to":"v1.0.0-beta.2","loc":4593,"days":1.89,"loc_per_day":2433.8,"flagged":false},{"from":"v1.0.0-beta.2","to":"v1.0.0-beta.3","loc":3568,"days":1.79,"loc_per_day":1989.6,"flagged":false},{"from":"v1.0.0-beta.3","to":"v1.0.0-beta.4","loc":7348,"days":172.12,"loc_per_day":42.7,"flagged":false},{"from":"v1.0.0-beta.4","to":"v1.0.0","loc":6530,"days":30.77,"loc_per_day":212.2,"flagged":false},{"from":"v1.0.0","to":"v1.1.0","loc":558,"days":1.61,"loc_per_day":346.2,"flagged":false},{"from":"v1.1.0","to":"v1.2.0","loc":8931,"days":0.97,"loc_per_day":9246.3,"flagged":true},{"from":"v1.2.0","to":"v1.2.1","loc":17,"days":0.04,"loc_per_day":408.0,"flagged":false},{"from":"v1.2.1","to":"v1.2.2","loc":11,"days":0.04,"loc_per_day":264.0,"flagged":false},{"from":"v1.2.2","to":"v1.2.3","loc":15,"days":0.04,"loc_per_day":344.7,"flagged":false},{"from":"v1.2.3","to":"v1.2.4","loc":879,"days":0.17,"loc_per_day":5089.2,"flagged":false},{"from":"v1.2.4","to":"v1.2.5","loc":1173,"days":0.11,"loc_per_day":10561.4,"flagged":false},{"from":"v1.2.5","to":"v1.3.0","loc":19875,"days":11.53,"loc_per_day":1723.2,"flagged":false},{"from":"v1.3.0","to":"v1.4.0","loc":11686,"days":15.36,"loc_per_day":761.0,"flagged":false},{"from":"v1.4.0","to":"v1.5.0","loc":367,"days":0.06,"loc_per_day":6569.0,"flagged":false},{"from":"v1.5.0","to":"selfish/pre-auto","loc":618,"days":0.12,"loc_per_day":5105.7,"flagged":false},{"from":"selfish/pre-auto","to":"v1.5.1","loc":965,"days":0.04,"loc_per_day":23160.0,"flagged":false},{"from":"v1.5.1","to":"v1.5.2","loc":729,"days":0.05,"loc_per_day":15452.8,"flagged":false},{"from":"v1.5.2","to":"v1.5.3","loc":3932,"days":2.46,"loc_per_day":1601.2,"flagged":false},{"from":"v1.5.3","to":"v1.6.0","loc":17766,"days":12.2,"loc_per_day":1455.9,"flagged":false},{"from":"v1.6.0","to":"v1.7.0","loc":4487,"days":7.05,"loc_per_day":636.6,"flagged":false},{"from":"v1.7.0","to":"afc/pre-implement","loc":2190,"days":6.8,"loc_per_day":322.1,"flagged":false},{"from":"afc/pre-implement","to":"v1.8.0","loc":397,"days":0.2,"loc_per_day":2017.8,"flagged":false},{"from":"v1.8.0","to":"v1.9.0","loc":5708,"days":5.97,"loc_per_day":956.6,"flagged":false},{"from":"v1.9.0","to":"v1.10.0","loc":2682,"days":12.18,"loc_per_day":220.2,"flagged":false},{"from":"v1.10.0","to":"v1.11.0","loc":958,"days":3.03,"loc_per_day":316.1,"flagged":false},{"from":"v1.11.0","to":"v1.12.0","loc":11253,"days":23.95,"loc_per_day":469.8,"flagged":false},{"from":"v1.12.0","to":"v1.13.0","loc":1988,"days":18.66,"loc_per_day":106.5,"flagged":false},{"from":"v1.13.0","to":"v1.14.0","loc":6000,"days":23.22,"loc_per_day":258.4,"flagged":false},{"from":"v1.14.0","to":"v1.14.1","loc":526,"days":2.88,"loc_per_day":182.9,"flagged":false},{"from":"v1.14.1","to":"v1.15.0","loc":5972,"days":0.29,"loc_per_day":20612.8,"flagged":true},{"from":"v1.15.0","to":"v1.16.0","loc":5955,"days":0.67,"loc_per_day":8876.3,"flagged":true},{"from":"v1.16.0","to":"v1.17.0","loc":6698,"days":1.14,"loc_per_day":5872.6,"flagged":true},{"from":"v1.17.0","to":"v1.17.1","loc":375,"days":0.11,"loc_per_day":3320.7,"flagged":false},{"from":"v1.17.1","to":"v1.18.0","loc":1008,"days":7.87,"loc_per_day":128.1,"flagged":false},{"from":"v1.18.0","to":"v1.19.0","loc":3504,"days":11.3,"loc_per_day":310.2,"flagged":false},{"from":"v1.19.0","to":"v1.20.0","loc":982,"days":0.43,"loc_per_day":2268.4,"flagged":false},{"from":"v1.20.0","to":"v1.21.0","loc":7385,"days":0.27,"loc_per_day":27229.3,"flagged":true},{"from":"v1.21.0","to":"v1.22.0","loc":4072,"days":9.65,"loc_per_day":421.8,"flagged":false},{"from":"v1.22.0","to":"v1.23.0","loc":6054,"days":24.56,"loc_per_day":246.5,"flagged":false},{"from":"v1.23.0","to":"v1.24.0","loc":3331,"days":0.51,"loc_per_day":6496.3,"flagged":false},{"from":"v1.24.0","to":"v1.24.1","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v1.24.1","to":"v1.25.0","loc":534,"days":2.53,"loc_per_day":211.1,"flagged":false},{"from":"v1.25.0","to":"v1.26.0","loc":11389,"days":7.85,"loc_per_day":1451.6,"flagged":false},{"from":"v1.26.0","to":"v1.26.1","loc":1678,"days":2.59,"loc_per_day":649.1,"flagged":false},{"from":"v1.26.1","to":"v1.26.2","loc":507,"days":0.57,"loc_per_day":888.8,"flagged":false},{"from":"v1.26.2","to":"v1.26.3","loc":409,"days":0.07,"loc_per_day":6211.6,"flagged":false},{"from":"v1.26.3","to":"v1.27.0","loc":1031,"days":2.66,"loc_per_day":387.0,"flagged":false},{"from":"v1.27.0","to":"v1.28.0","loc":7798,"days":24.09,"loc_per_day":323.7,"flagged":false},{"from":"v1.28.0","to":"v1.29.0","loc":1952,"days":2.07,"loc_per_day":941.1,"flagged":false},{"from":"v1.29.0","to":"v1.30.0","loc":4262,"days":3.32,"loc_per_day":1283.3,"flagged":false},{"from":"v1.30.0","to":"v1.31.0","loc":1562,"days":3.32,"loc_per_day":470.8,"flagged":false},{"from":"v1.31.0","to":"v1.32.0","loc":3952,"days":6.32,"loc_per_day":624.8,"flagged":false},{"from":"v1.32.0","to":"v1.32.1","loc":2200,"days":9.54,"loc_per_day":230.6,"flagged":false},{"from":"v1.32.1","to":"v1.32.2","loc":1195,"days":0.25,"loc_per_day":4707.4,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":174994.0,"index":0.231,"count:narrated_steps":13.0,"per_kloc:narrated_steps":0.074,"files:narrated_steps":4.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":55.0,"per_kloc:emoji_in_code":0.314,"files:emoji_in_code":13.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: * Step 1: Select a project from the already-loaded project list.","ref":"src/components/ArchiveManager/ArchiveCreateDialog.tsx:5","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/ArchiveManager/ArchiveCreateDialog.tsx#L5","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: * Step 2: Select sessions + fill in archive name/description.","ref":"src/components/ArchiveManager/ArchiveCreateDialog.tsx:6","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/ArchiveManager/ArchiveCreateDialog.tsx#L6","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: /* Step 1: Project selection */","ref":"src/components/ArchiveManager/ArchiveCreateDialog.tsx:217","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/ArchiveManager/ArchiveCreateDialog.tsx#L217","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: /* Step 2: Session selection + form */","ref":"src/components/ArchiveManager/ArchiveCreateDialog.tsx:274","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/ArchiveManager/ArchiveCreateDialog.tsx#L274","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, extract all agent task LAUNCH messages with their timestamps","ref":"src/components/MessageViewer/helpers/agentTaskHelpers.ts:97","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/MessageViewer/helpers/agentTaskHelpers.ts#L97","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, scroll to last index","ref":"src/components/MessageViewer/hooks/useScrollNavigation.ts:106","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/MessageViewer/hooks/useScrollNavigation.ts#L106","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Then, ensure we're truly at the bottom using DOM scroll","ref":"src/components/MessageViewer/hooks/useScrollNavigation.ts:109","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/MessageViewer/hooks/useScrollNavigation.ts#L109","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1: Aggregate sessions by date","ref":"src/components/SessionBoard/useActivityData.ts:168","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/SessionBoard/useActivityData.ts#L168","weight":0.0}],"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":8.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":"README.zh-CN.md","line":355,"fingerprint":"README.zh-CN.md:generic-api-key:355"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"README.zh-TW.md","line":355,"fingerprint":"README.zh-TW.md:generic-api-key:355"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"README.ja.md","line":355,"fingerprint":"README.ja.md:generic-api-key:355"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"README.ko.md","line":355,"fingerprint":"README.ko.md:generic-api-key:355"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"README.md","line":355,"fingerprint":"README.md:generic-api-key:355"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"docs/server-guide.ko.md","line":74,"fingerprint":"docs/server-guide.ko.md:generic-api-key:74"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in the current tree (test/docs/example file)","path":"docs/server-guide.md","line":74,"fingerprint":"docs/server-guide.md:generic-api-key:74"},{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit d63f524d4f); removed from the current tree but still retrievable","path":"src/test/tr1b.fix2.test.tsx","line":57,"fingerprint":"d63f524d4fa7bac4988c0abb28ef01a63abb8503:src/test/tr1b.fix2.test.tsx:generic-api-key:57"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":86.0,"findings_high":0.0,"findings_medium":50.0,"findings_low":36.0,"weighted_findings":20.325,"scanned_lines":174994.0,"parse_errors":4.0},"findings":[{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low]","path":"dev-mock-server.ts","line":294,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:dev-mock-server.ts:294"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/flatten-i18n.mjs","line":127,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/flatten-i18n.mjs:127"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/flatten-i18n.mjs","line":130,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/flatten-i18n.mjs:130"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/flatten-i18n.mjs","line":131,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/flatten-i18n.mjs:131"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/flatten-i18n.mjs","line":132,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/flatten-i18n.mjs:132"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":138,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:138"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":139,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:139"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":141,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:141"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":142,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:142"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":144,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:144"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/flatten-i18n.mjs","line":145,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/flatten-i18n.mjs:145"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":133,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/split-i18n-namespaces.mjs:133"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":134,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/split-i18n-namespaces.mjs:134"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":137,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/split-i18n-namespaces.mjs:137"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":140,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/split-i18n-namespaces.mjs:140"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":141,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/split-i18n-namespaces.mjs:141"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":162,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/split-i18n-namespaces.mjs:162"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `lang` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/split-i18n-namespaces.mjs","line":170,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/split-i18n-namespaces.mjs:170"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `filePath` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":68,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:68"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/validate-i18n.mjs","line":88,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/validate-i18n.mjs:88"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `langDir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":89,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:89"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `langDir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":90,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:90"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/validate-i18n.mjs","line":102,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/validate-i18n.mjs:102"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `langDir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":103,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:103"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `langDir` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":104,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:104"},{"rule_id":"opengrep/javascript.lang.security.insecure-object-assign","severity":"medium","message":"Depending on the context, user control data in `Object.assign` can cause web response to include data that it should not have or can lead to a mass assignment vulnerability. [confidence low]","path":"scripts/validate-i18n.mjs","line":105,"fingerprint":"javascript.lang.security.insecure-object-assign:scripts/validate-i18n.mjs:105"},{"rule_id":"opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal","severity":"medium","message":"Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability,  where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low]","path":"scripts/validate-i18n.mjs","line":137,"fingerprint":"javascript.lang.security.audit.path-traversal.path-join-resolve-traversal:scripts/validate-i18n.mjs:137"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `f` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":139,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:139"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename","severity":"medium","message":"Detected that function argument `f` has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low]","path":"scripts/validate-i18n.mjs","line":141,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/validate-i18n.mjs:141"},{"rule_id":"opengrep/typescript.react.security.audit.react-dangerouslysetinnerhtml","severity":"medium","message":"Detection of dangerouslySetInnerHTML from non-constant definition. This can inadvertently expose users to cross-site scripting (XSS) attacks if this comes from user-provided input. If you have to use dangerouslySetInnerHTML, consider using a sanitization library such as DOMPurify to sanitize your HT [confidence medium]","path":"src/components/EnhancedDiffViewer.tsx","line":155,"fingerprint":"typescript.react.security.audit.react-dangerouslysetinnerhtml:src/components/EnhancedDiffViewer.tsx:155"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low]","path":"src/components/MessageViewer/helpers/messageCategories.ts","line":200,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:src/components/MessageViewer/helpers/messageCategories.ts:200"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `tagName` 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-control [confidence low]","path":"src/components/MessageViewer/helpers/messageKinds.ts","line":67,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/components/MessageViewer/helpers/messageKinds.ts:67"},{"rule_id":"opengrep/typescript.react.security.audit.react-dangerouslysetinnerhtml","severity":"medium","message":"Detection of dangerouslySetInnerHTML from non-constant definition. This can inadvertently expose users to cross-site scripting (XSS) attacks if this comes from user-provided input. If you have to use dangerouslySetInnerHTML, consider using a sanitization library such as DOMPurify to sanitize your HT [confidence medium]","path":"src/components/common/AnsiText.tsx","line":24,"fingerprint":"typescript.react.security.audit.react-dangerouslysetinnerhtml:src/components/common/AnsiText.tsx:24"},{"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":"src/services/export/htmlExporter.ts","line":93,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:93"},{"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":"src/services/export/htmlExporter.ts","line":97,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:97"},{"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":"src/services/export/htmlExporter.ts","line":110,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:110"},{"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":"src/services/export/htmlExporter.ts","line":112,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:112"},{"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":"src/services/export/htmlExporter.ts","line":114,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:114"},{"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":"src/services/export/htmlExporter.ts","line":116,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:116"},{"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":"src/services/export/htmlExporter.ts","line":118,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:118"},{"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":"src/services/export/htmlExporter.ts","line":120,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:120"},{"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":"src/services/export/htmlExporter.ts","line":148,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:148"},{"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":"src/services/export/htmlExporter.ts","line":166,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:166"},{"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":"src/services/export/htmlExporter.ts","line":170,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/htmlExporter.ts:170"},{"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":"src/services/export/markdownExporter.ts","line":26,"fingerprint":"javascript.lang.security.html-in-template-string:src/services/export/markdownExporter.ts:26"},{"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":"src/utils/ansiToHtml.ts","line":132,"fingerprint":"javascript.lang.security.html-in-template-string:src/utils/ansiToHtml.ts:132"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `pattern` 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-control [confidence low]","path":"src/utils/globUtils.ts","line":61,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/utils/globUtils.ts:61"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low]","path":"src/utils/logger.ts","line":30,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:src/utils/logger.ts:30"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `keyword` 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-control [confidence low]","path":"src/utils/toolIconUtils.ts","line":19,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/utils/toolIconUtils.ts:19"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `keyword` 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-control [confidence low]","path":"src/utils/toolIconUtils.ts","line":20,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/utils/toolIconUtils.ts:20"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/chain.rs","line":108,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/chain.rs:108"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/edits.rs","line":119,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/edits.rs:119"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/load.rs","line":2065,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/load.rs:2065"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/load.rs","line":2456,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/load.rs:2456"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/load.rs","line":2516,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/load.rs:2516"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/load.rs","line":2564,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/load.rs:2564"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/commands/session/resume.rs","line":333,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/commands/session/resume.rs:333"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/session/search.rs","line":155,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/session/search.rs:155"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats.rs","line":1208,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats.rs:1208"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats.rs","line":1940,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats.rs:1940"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats.rs","line":4489,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats.rs:4489"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats.rs","line":5049,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats.rs:5049"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats/cache.rs","line":463,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats/cache.rs:463"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/commands/stats/cache.rs","line":568,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/commands/stats/cache.rs:568"},{"rule_id":"opengrep/rust.lang.security.current-exe","severity":"low","message":"current_exe should not be used for security operations. From the docs: \"The output of this function should not be trusted for anything that might have security implications. Basically, if users can run the executable, they can change the output arbitrarily.\" [confidence high]","path":"src-tauri/src/commands/update.rs","line":27,"fingerprint":"rust.lang.security.current-exe:src-tauri/src/commands/update.rs:27"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"src-tauri/src/lib.rs","line":90,"fingerprint":"rust.lang.security.args:src-tauri/src/lib.rs:90"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"src-tauri/src/lib.rs","line":102,"fingerprint":"rust.lang.security.args:src-tauri/src/lib.rs:102"},{"rule_id":"opengrep/rust.lang.security.args","severity":"low","message":"args should not be used for security operations. From the docs: \"The first element is traditionally the path of the executable, but it can be set to arbitrary text, and might not even exist. This means this property should not be relied upon for security purposes.\" [confidence high]","path":"src-tauri/src/lib.rs","line":144,"fingerprint":"rust.lang.security.args:src-tauri/src/lib.rs:144"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/providers/codebuddy.rs","line":281,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/providers/codebuddy.rs:281"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/providers/codebuddy.rs","line":655,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/providers/codebuddy.rs:655"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/providers/codex.rs","line":144,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/providers/codex.rs:144"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/providers/copilot_cli.rs","line":520,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/providers/copilot_cli.rs:520"},{"rule_id":"opengrep/rust.lang.security.unsafe-usage","severity":"low","message":"Detected 'unsafe' usage, please audit for secure usage [confidence high]","path":"src-tauri/src/providers/copilot_cli.rs","line":746,"fingerprint":"rust.lang.security.unsafe-usage:src-tauri/src/providers/copilot_cli.rs:746"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/server/mod.rs","line":787,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/server/mod.rs:787"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/test_utils.rs","line":351,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/test_utils.rs:351"},{"rule_id":"opengrep/rust.lang.security.temp-dir","severity":"low","message":"temp_dir should not be used for security operations. From the docs: 'The temporary directory may be shared among users, or between processes with different privileges; thus, the creation of any files or directories in the temporary directory must use a secure method to create a uniquely named file.  [confidence high]","path":"src-tauri/src/test_utils.rs","line":367,"fingerprint":"rust.lang.security.temp-dir:src-tauri/src/test_utils.rs:367"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/App.tsx","line":500,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/App.tsx:500"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/components/modals/globalSearch/GlobalSearchModal.tsx","line":223,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/components/modals/globalSearch/GlobalSearchModal.tsx:223"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/components/modals/globalSearch/GlobalSearchModal.tsx","line":399,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/components/modals/globalSearch/GlobalSearchModal.tsx:399"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/lib/preloadSession.ts","line":196,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/lib/preloadSession.ts:196"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/lib/preloadSession.ts","line":220,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/lib/preloadSession.ts:220"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/lib/preloadSession.ts","line":240,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/lib/preloadSession.ts:240"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/lib/preloadSession.ts","line":276,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/lib/preloadSession.ts:276"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/services/api.ts","line":103,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/services/api.ts:103"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/store/slices/boardSlice.ts","line":250,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/store/slices/boardSlice.ts:250"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-formatstring","severity":"low","message":"Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string. [confidence low]","path":"src/store/slices/projectSlice.ts","line":496,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:src/store/slices/projectSlice.ts:496"}],"evidence":[],"data":{"rulesets":["rust","typescript","javascript","bash","dockerfile"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":45.0,"vulnerabilities":74.0,"vulns_critical":2.0,"vulns_high":12.0,"vulns_medium":16.0,"vulns_low":4.0,"vulns_unknown":40.0,"penalty":180.0},"findings":[{"rule_id":"osv/RUSTSEC-2026-0369","severity":"critical","message":"zip@4.2.0 (crates.io) is affected by RUSTSEC-2026-0369","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):RUSTSEC-2026-0369"},{"rule_id":"osv/GHSA-m665-v7pm-7grj","severity":"critical","message":"zip@4.2.0 (crates.io) is affected by GHSA-m665-v7pm-7grj","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):GHSA-m665-v7pm-7grj"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@1.1.18 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@1.1.18 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@1.1.18 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@1.1.18 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-68fv-2mgg-jv7q","severity":"high","message":"source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q","path":"pnpm-lock.yaml","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"vite@7.3.6 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"pnpm-lock.yaml","line":null,"fingerprint":"vite@7.3.6 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-mrhx-c7xc-m3w5","severity":"high","message":"zod@3.25.76 (npm) is affected by GHSA-mrhx-c7xc-m3w5","path":"pnpm-lock.yaml","line":null,"fingerprint":"zod@3.25.76 (npm):GHSA-mrhx-c7xc-m3w5"},{"rule_id":"osv/GHSA-mrhx-c7xc-m3w5","severity":"high","message":"zod@4.5.4 (npm) is affected by GHSA-mrhx-c7xc-m3w5","path":"pnpm-lock.yaml","line":null,"fingerprint":"zod@4.5.4 (npm):GHSA-mrhx-c7xc-m3w5"},{"rule_id":"osv/RUSTSEC-2026-0194","severity":"high","message":"quick-xml@0.37.5 (crates.io) is affected by RUSTSEC-2026-0194","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"quick-xml@0.37.5 (crates.io):RUSTSEC-2026-0194"},{"rule_id":"osv/RUSTSEC-2026-0195","severity":"high","message":"quick-xml@0.37.5 (crates.io) is affected by RUSTSEC-2026-0195","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"quick-xml@0.37.5 (crates.io):RUSTSEC-2026-0195"},{"rule_id":"osv/RUSTSEC-2026-0367","severity":"high","message":"zip@4.2.0 (crates.io) is affected by RUSTSEC-2026-0367","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):RUSTSEC-2026-0367"},{"rule_id":"osv/GHSA-q7v9-x93c-xqv3","severity":"high","message":"zip@4.2.0 (crates.io) is affected by RUSTSEC-2026-0429, GHSA-q7v9-x93c-xqv3","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):GHSA-q7v9-x93c-xqv3"},{"rule_id":"osv/GHSA-qxg6-89mg-rqv8","severity":"medium","message":"@vitest/mocker@4.1.11 (npm) is affected by GHSA-qxg6-89mg-rqv8","path":"pnpm-lock.yaml","line":null,"fingerprint":"@vitest/mocker@4.1.11 (npm):GHSA-qxg6-89mg-rqv8"},{"rule_id":"osv/GHSA-xp26-3454-mjgp","severity":"medium","message":"@vitest/mocker@4.1.11 (npm) is affected by GHSA-xp26-3454-mjgp","path":"pnpm-lock.yaml","line":null,"fingerprint":"@vitest/mocker@4.1.11 (npm):GHSA-xp26-3454-mjgp"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@1.1.18 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@1.1.18 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@5.0.9 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"pnpm-lock.yaml","line":null,"fingerprint":"brace-expansion@5.0.9 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-g3hv-75wg-m249","severity":"medium","message":"minimatch@10.2.6 (npm) is affected by GHSA-g3hv-75wg-m249","path":"pnpm-lock.yaml","line":null,"fingerprint":"minimatch@10.2.6 (npm):GHSA-g3hv-75wg-m249"},{"rule_id":"osv/GHSA-rj75-hqrm-r3gf","severity":"medium","message":"postcss-selector-parser@6.0.10 (npm) is affected by GHSA-rj75-hqrm-r3gf","path":"pnpm-lock.yaml","line":null,"fingerprint":"postcss-selector-parser@6.0.10 (npm):GHSA-rj75-hqrm-r3gf"},{"rule_id":"osv/GHSA-r4xh-jqrq-34v2","severity":"medium","message":"smol-toml@1.8.0 (npm) is affected by GHSA-r4xh-jqrq-34v2","path":"pnpm-lock.yaml","line":null,"fingerprint":"smol-toml@1.8.0 (npm):GHSA-r4xh-jqrq-34v2"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@7.3.6 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"pnpm-lock.yaml","line":null,"fingerprint":"vite@7.3.6 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@7.3.6 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"pnpm-lock.yaml","line":null,"fingerprint":"vite@7.3.6 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@7.3.6 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"pnpm-lock.yaml","line":null,"fingerprint":"vite@7.3.6 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/RUSTSEC-2026-0190","severity":"medium","message":"anyhow@1.0.98 (crates.io) is affected by RUSTSEC-2026-0190","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"anyhow@1.0.98 (crates.io):RUSTSEC-2026-0190"},{"rule_id":"osv/RUSTSEC-2025-0052","severity":"medium","message":"async-std@1.13.2 (crates.io) is affected by RUSTSEC-2025-0052","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"async-std@1.13.2 (crates.io):RUSTSEC-2025-0052"},{"rule_id":"osv/RUSTSEC-2026-0221","severity":"medium","message":"event-listener@5.4.0 (crates.io) is affected by RUSTSEC-2026-0221","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"event-listener@5.4.0 (crates.io):RUSTSEC-2026-0221"},{"rule_id":"osv/RUSTSEC-2025-0057","severity":"medium","message":"fxhash@0.2.1 (crates.io) is affected by RUSTSEC-2025-0057","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"fxhash@0.2.1 (crates.io):RUSTSEC-2025-0057"},{"rule_id":"osv/GHSA-wrw7-89jp-8q8g","severity":"medium","message":"glib@0.18.5 (crates.io) is affected by RUSTSEC-2024-0429, GHSA-wrw7-89jp-8q8g","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"glib@0.18.5 (crates.io):GHSA-wrw7-89jp-8q8g"},{"rule_id":"osv/RUSTSEC-2024-0384","severity":"medium","message":"instant@0.1.13 (crates.io) is affected by RUSTSEC-2024-0384","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"instant@0.1.13 (crates.io):RUSTSEC-2024-0384"},{"rule_id":"osv/RUSTSEC-2026-0459","severity":"medium","message":"libsqlite3-sys@0.30.1 (crates.io) is affected by RUSTSEC-2026-0459","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"libsqlite3-sys@0.30.1 (crates.io):RUSTSEC-2026-0459"},{"rule_id":"osv/RUSTSEC-2026-0253","severity":"medium","message":"lru@0.16.3 (crates.io) is affected by RUSTSEC-2026-0253","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"lru@0.16.3 (crates.io):RUSTSEC-2026-0253"},{"rule_id":"osv/RUSTSEC-2026-0186","severity":"medium","message":"memmap2@0.9.9 (crates.io) is affected by RUSTSEC-2026-0186","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"memmap2@0.9.9 (crates.io):RUSTSEC-2026-0186"},{"rule_id":"osv/RUSTSEC-2026-0441","severity":"medium","message":"pin-utils@0.1.0 (crates.io) is affected by RUSTSEC-2026-0441","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"pin-utils@0.1.0 (crates.io):RUSTSEC-2026-0441"},{"rule_id":"osv/RUSTSEC-2024-0370","severity":"medium","message":"proc-macro-error@1.0.4 (crates.io) is affected by RUSTSEC-2024-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"proc-macro-error@1.0.4 (crates.io):RUSTSEC-2024-0370"},{"rule_id":"osv/GHSA-cq8v-f236-94qc","severity":"medium","message":"rand@0.7.3 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rand@0.7.3 (crates.io):GHSA-cq8v-f236-94qc"},{"rule_id":"osv/GHSA-cq8v-f236-94qc","severity":"medium","message":"rand@0.8.5 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rand@0.8.5 (crates.io):GHSA-cq8v-f236-94qc"},{"rule_id":"osv/GHSA-cq8v-f236-94qc","severity":"medium","message":"rand@0.9.1 (crates.io) is affected by RUSTSEC-2026-0097, GHSA-cq8v-f236-94qc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rand@0.9.1 (crates.io):GHSA-cq8v-f236-94qc"},{"rule_id":"osv/RUSTSEC-2026-0486","severity":"medium","message":"rustix@1.1.3 (crates.io) is affected by RUSTSEC-2026-0486","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustix@1.1.3 (crates.io):RUSTSEC-2026-0486"},{"rule_id":"osv/GHSA-2mjx-qc3c-rqvc","severity":"medium","message":"rustls@0.23.28 (crates.io) is affected by RUSTSEC-2026-0285, GHSA-2mjx-qc3c-rqvc","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustls@0.23.28 (crates.io):GHSA-2mjx-qc3c-rqvc"},{"rule_id":"osv/GHSA-c8m5-c952-6cm4","severity":"medium","message":"rustls@0.23.28 (crates.io) is affected by RUSTSEC-2026-0346, GHSA-c8m5-c952-6cm4","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustls@0.23.28 (crates.io):GHSA-c8m5-c952-6cm4"},{"rule_id":"osv/RUSTSEC-2026-0382","severity":"medium","message":"rustls-webpki@0.103.13 (crates.io) is affected by RUSTSEC-2026-0382","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustls-webpki@0.103.13 (crates.io):RUSTSEC-2026-0382"},{"rule_id":"osv/RUSTSEC-2026-0205","severity":"medium","message":"scc@2.4.0 (crates.io) is affected by RUSTSEC-2026-0205","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"scc@2.4.0 (crates.io):RUSTSEC-2026-0205"},{"rule_id":"osv/GHSA-7gcf-g7xr-8hxj","severity":"medium","message":"serde_with@3.13.0 (crates.io) is affected by GHSA-7gcf-g7xr-8hxj","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"serde_with@3.13.0 (crates.io):GHSA-7gcf-g7xr-8hxj"},{"rule_id":"osv/RUSTSEC-2026-0386","severity":"medium","message":"tokio@1.45.1 (crates.io) is affected by RUSTSEC-2026-0386","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"tokio@1.45.1 (crates.io):RUSTSEC-2026-0386"},{"rule_id":"osv/RUSTSEC-2025-0081","severity":"medium","message":"unic-char-property@0.9.0 (crates.io) is affected by RUSTSEC-2025-0081","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-property@0.9.0 (crates.io):RUSTSEC-2025-0081"},{"rule_id":"osv/RUSTSEC-2025-0075","severity":"medium","message":"unic-char-range@0.9.0 (crates.io) is affected by RUSTSEC-2025-0075","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-char-range@0.9.0 (crates.io):RUSTSEC-2025-0075"},{"rule_id":"osv/RUSTSEC-2025-0080","severity":"medium","message":"unic-common@0.9.0 (crates.io) is affected by RUSTSEC-2025-0080","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-common@0.9.0 (crates.io):RUSTSEC-2025-0080"},{"rule_id":"osv/RUSTSEC-2025-0100","severity":"medium","message":"unic-ucd-ident@0.9.0 (crates.io) is affected by RUSTSEC-2025-0100","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-ident@0.9.0 (crates.io):RUSTSEC-2025-0100"},{"rule_id":"osv/RUSTSEC-2025-0098","severity":"medium","message":"unic-ucd-version@0.9.0 (crates.io) is affected by RUSTSEC-2025-0098","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"unic-ucd-version@0.9.0 (crates.io):RUSTSEC-2025-0098"},{"rule_id":"osv/RUSTSEC-2026-0383","severity":"medium","message":"webpki-root-certs@1.0.7 (crates.io) is affected by RUSTSEC-2026-0383","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"webpki-root-certs@1.0.7 (crates.io):RUSTSEC-2026-0383"},{"rule_id":"osv/RUSTSEC-2026-0371","severity":"medium","message":"zbus_names@4.2.0 (crates.io) is affected by RUSTSEC-2026-0371","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zbus_names@4.2.0 (crates.io):RUSTSEC-2026-0371"},{"rule_id":"osv/RUSTSEC-2026-0368","severity":"medium","message":"zip@4.2.0 (crates.io) is affected by RUSTSEC-2026-0368","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):RUSTSEC-2026-0368"},{"rule_id":"osv/GHSA-8hxf-qr8p-62x4","severity":"medium","message":"zip@4.2.0 (crates.io) is affected by GHSA-8hxf-qr8p-62x4","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zip@4.2.0 (crates.io):GHSA-8hxf-qr8p-62x4"},{"rule_id":"osv/RUSTSEC-2026-0391","severity":"medium","message":"zstd@0.13.3 (crates.io) is affected by RUSTSEC-2026-0391","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd@0.13.3 (crates.io):RUSTSEC-2026-0391"},{"rule_id":"osv/RUSTSEC-2026-0395","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0395","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0395"},{"rule_id":"osv/RUSTSEC-2026-0396","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0396","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0396"},{"rule_id":"osv/RUSTSEC-2026-0397","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0397","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0397"},{"rule_id":"osv/RUSTSEC-2026-0398","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0398","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0398"},{"rule_id":"osv/RUSTSEC-2026-0399","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0399","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0399"},{"rule_id":"osv/RUSTSEC-2026-0400","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0400","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0400"},{"rule_id":"osv/RUSTSEC-2026-0401","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0401","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0401"},{"rule_id":"osv/RUSTSEC-2026-0402","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0402","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0402"},{"rule_id":"osv/RUSTSEC-2026-0403","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0403","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0403"},{"rule_id":"osv/RUSTSEC-2026-0404","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0404","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0404"},{"rule_id":"osv/RUSTSEC-2026-0405","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0405","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0405"},{"rule_id":"osv/RUSTSEC-2026-0406","severity":"medium","message":"zstd-safe@7.2.4 (crates.io) is affected by RUSTSEC-2026-0406","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-safe@7.2.4 (crates.io):RUSTSEC-2026-0406"},{"rule_id":"osv/RUSTSEC-2026-0410","severity":"medium","message":"zstd-sys@2.0.16+zstd.1.5.7 (crates.io) is affected by RUSTSEC-2026-0410","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zstd-sys@2.0.16+zstd.1.5.7 (crates.io):RUSTSEC-2026-0410"},{"rule_id":"osv/RUSTSEC-2026-0370","severity":"medium","message":"zvariant@5.5.3 (crates.io) is affected by RUSTSEC-2026-0370","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant@5.5.3 (crates.io):RUSTSEC-2026-0370"},{"rule_id":"osv/RUSTSEC-2026-0372","severity":"medium","message":"zvariant_derive@5.5.3 (crates.io) is affected by RUSTSEC-2026-0372","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"zvariant_derive@5.5.3 (crates.io):RUSTSEC-2026-0372"},{"rule_id":"osv/GHSA-238p-pmpm-9mq7","severity":"low","message":"katex@0.16.47 (npm) is affected by GHSA-238p-pmpm-9mq7","path":"pnpm-lock.yaml","line":null,"fingerprint":"katex@0.16.47 (npm):GHSA-238p-pmpm-9mq7"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@7.3.6 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"pnpm-lock.yaml","line":null,"fingerprint":"vite@7.3.6 (npm):GHSA-9jrq-w75r-8gcw"},{"rule_id":"osv/GHSA-h2v8-394m-p7vv","severity":"low","message":"rustls@0.23.28 (crates.io) is affected by RUSTSEC-2026-0348, GHSA-h2v8-394m-p7vv","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustls@0.23.28 (crates.io):GHSA-h2v8-394m-p7vv"},{"rule_id":"osv/GHSA-w44r-93j7-qv28","severity":"low","message":"rustls@0.23.28 (crates.io) is affected by RUSTSEC-2026-0349, GHSA-w44r-93j7-qv28","path":"src-tauri/Cargo.lock","line":null,"fingerprint":"rustls@0.23.28 (crates.io):GHSA-w44r-93j7-qv28"}],"evidence":[],"data":{"ecosystems":["crates.io","npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":12.0,"findings":112.0,"findings_high":77.0,"findings_medium":25.0,"findings_low":10.0,"penalty":927.0},"findings":[{"rule_id":"zizmor/dangerous-triggers","severity":"high","message":"use of fundamentally insecure workflow trigger [confidence medium]","path":".github/workflows/claude-mentions.yml","line":12,"fingerprint":"dangerous-triggers:.github/workflows/claude-mentions.yml:12"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/claude-mentions.yml","line":33,"fingerprint":"unpinned-uses:.github/workflows/claude-mentions.yml:33"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/claude-mentions.yml","line":37,"fingerprint":"unpinned-uses:.github/workflows/claude-mentions.yml:37"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/daily-pr-health.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/daily-pr-health.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/daily-pr-health.yml","line":27,"fingerprint":"unpinned-uses:.github/workflows/daily-pr-health.yml:27"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/frontend-tests.yml","line":45,"fingerprint":"unpinned-uses:.github/workflows/frontend-tests.yml:45"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/frontend-tests.yml","line":50,"fingerprint":"unpinned-uses:.github/workflows/frontend-tests.yml:50"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/frontend-tests.yml","line":53,"fingerprint":"unpinned-uses:.github/workflows/frontend-tests.yml:53"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/issue-to-spec.yml","line":17,"fingerprint":"unpinned-uses:.github/workflows/issue-to-spec.yml:17"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":27,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:27"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":30,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:30"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":33,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:33"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pages.yml","line":39,"fingerprint":"unpinned-uses:.github/workflows/pages.yml:39"},{"rule_id":"zizmor/dangerous-triggers","severity":"high","message":"use of fundamentally insecure workflow trigger [confidence medium]","path":".github/workflows/pr-auto-label.yml","line":8,"fingerprint":"dangerous-triggers:.github/workflows/pr-auto-label.yml:8"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-auto-label.yml","line":23,"fingerprint":"unpinned-uses:.github/workflows/pr-auto-label.yml:23"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pricing-watch.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/pricing-watch.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pricing-watch.yml","line":27,"fingerprint":"unpinned-uses:.github/workflows/pricing-watch.yml:27"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:26"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":39,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:39"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":44,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:44"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":85,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:85"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":99,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:99"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":104,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:104"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":107,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:107"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":131,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:131"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":156,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:156"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":159,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:159"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":162,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:162"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":165,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:165"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":200,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:200"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":213,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:213"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":218,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:218"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":221,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:221"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":224,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:224"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":236,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:236"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":245,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:245"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":257,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:257"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":270,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:270"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":273,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:273"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":284,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:284"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":296,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:296"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":299,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:299"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":314,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:314"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":327,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:327"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/rust-tests.yml","line":330,"fingerprint":"unpinned-uses:.github/workflows/rust-tests.yml:330"},{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/server-release.yml","line":23,"fingerprint":"excessive-permissions:.github/workflows/server-release.yml:23"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":63,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:63"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":69,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:69"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":72,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:72"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":75,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:75"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":107,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:107"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/server-release.yml","line":116,"fingerprint":"unpinned-uses:.github/workflows/server-release.yml:116"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/server-release.yml","line":75,"fingerprint":"cache-poisoning:.github/workflows/server-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/server-release.yml","line":116,"fingerprint":"cache-poisoning:.github/workflows/server-release.yml:116"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/update-flow-tests.yml","line":43,"fingerprint":"unpinned-uses:.github/workflows/update-flow-tests.yml:43"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/update-flow-tests.yml","line":46,"fingerprint":"unpinned-uses:.github/workflows/update-flow-tests.yml:46"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/update-flow-tests.yml","line":49,"fingerprint":"unpinned-uses:.github/workflows/update-flow-tests.yml:49"},{"rule_id":"zizmor/template-injection","severity":"high","message":"code injection via template expansion [confidence high]","path":".github/workflows/updater-release-retry.yml","line":22,"fingerprint":"template-injection:.github/workflows/updater-release-retry.yml:22"},{"rule_id":"zizmor/template-injection","severity":"high","message":"code injection via template expansion [confidence high]","path":".github/workflows/updater-release-retry.yml","line":115,"fingerprint":"template-injection:.github/workflows/updater-release-retry.yml:115"},{"rule_id":"zizmor/template-injection","severity":"high","message":"code injection via template expansion [confidence high]","path":".github/workflows/updater-release-retry.yml","line":274,"fingerprint":"template-injection:.github/workflows/updater-release-retry.yml:274"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release-retry.yml","line":19,"fingerprint":"unpinned-uses:.github/workflows/updater-release-retry.yml:19"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release-retry.yml","line":110,"fingerprint":"unpinned-uses:.github/workflows/updater-release-retry.yml:110"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release-retry.yml","line":271,"fingerprint":"unpinned-uses:.github/workflows/updater-release-retry.yml:271"},{"rule_id":"zizmor/excessive-permissions","severity":"high","message":"overly broad permissions [confidence high]","path":".github/workflows/updater-release.yml","line":20,"fingerprint":"excessive-permissions:.github/workflows/updater-release.yml:20"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":63,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:63"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":116,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:116"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":121,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:121"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":124,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:124"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":127,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:127"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":140,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:140"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":145,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:145"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":156,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:156"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":341,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:341"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":444,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:444"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/updater-release.yml","line":602,"fingerprint":"unpinned-uses:.github/workflows/updater-release.yml:602"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/updater-release.yml","line":127,"fingerprint":"cache-poisoning:.github/workflows/updater-release.yml:127"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/updater-release.yml","line":145,"fingerprint":"cache-poisoning:.github/workflows/updater-release.yml:145"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/claude-mentions.yml","line":33,"fingerprint":"artipacked:.github/workflows/claude-mentions.yml:33"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/daily-pr-health.yml","line":25,"fingerprint":"artipacked:.github/workflows/daily-pr-health.yml:25"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/frontend-tests.yml","line":45,"fingerprint":"artipacked:.github/workflows/frontend-tests.yml:45"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/pages.yml","line":26,"fingerprint":"artipacked:.github/workflows/pages.yml:26"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/pricing-watch.yml","line":25,"fingerprint":"artipacked:.github/workflows/pricing-watch.yml:25"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":26,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:26"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":85,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:85"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":156,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:156"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":200,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:200"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":257,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:257"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":296,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:296"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/rust-tests.yml","line":314,"fingerprint":"artipacked:.github/workflows/rust-tests.yml:314"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":1,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:1"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":22,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:22"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":75,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:75"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":152,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:152"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":195,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:195"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":252,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:252"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":291,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:291"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/rust-tests.yml","line":309,"fingerprint":"excessive-permissions:.github/workflows/rust-tests.yml:309"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/server-release.yml","line":63,"fingerprint":"artipacked:.github/workflows/server-release.yml:63"},{"rule_id":"zizmor/unpinned-tools","severity":"medium","message":"action installs an unpinned external tool [confidence high]","path":".github/workflows/server-release.yml","line":69,"fingerprint":"unpinned-tools:.github/workflows/server-release.yml:69"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/update-flow-tests.yml","line":43,"fingerprint":"artipacked:.github/workflows/update-flow-tests.yml:43"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/updater-release.yml","line":116,"fingerprint":"artipacked:.github/workflows/updater-release.yml:116"},{"rule_id":"zizmor/unpinned-tools","severity":"medium","message":"action installs an unpinned external tool [confidence high]","path":".github/workflows/updater-release.yml","line":121,"fingerprint":"unpinned-tools:.github/workflows/updater-release.yml:121"},{"rule_id":"zizmor/template-injection","severity":"low","message":"code injection via template expansion [confidence high]","path":".github/workflows/updater-release.yml","line":216,"fingerprint":"template-injection:.github/workflows/updater-release.yml:216"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":181,"fingerprint":"template-injection:.github/workflows/updater-release.yml:181"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":215,"fingerprint":"template-injection:.github/workflows/updater-release.yml:215"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":293,"fingerprint":"template-injection:.github/workflows/updater-release.yml:293"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":344,"fingerprint":"template-injection:.github/workflows/updater-release.yml:344"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":382,"fingerprint":"template-injection:.github/workflows/updater-release.yml:382"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":410,"fingerprint":"template-injection:.github/workflows/updater-release.yml:410"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":449,"fingerprint":"template-injection:.github/workflows/updater-release.yml:449"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":605,"fingerprint":"template-injection:.github/workflows/updater-release.yml:605"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/updater-release.yml","line":609,"fingerprint":"template-injection:.github/workflows/updater-release.yml:609"}],"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.26,"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":120.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v1.32.2 ships cchv-server-linux-arm64.tar.gz (204 downloads)","ref":"cchv-server-linux-arm64.tar.gz","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-linux-arm64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.32.2 ships cchv-server-linux-x64.tar.gz (131 downloads)","ref":"cchv-server-linux-x64.tar.gz","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-linux-x64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.32.2 ships cchv-server-macos-arm64.tar.gz (117 downloads)","ref":"cchv-server-macos-arm64.tar.gz","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-macos-arm64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.32.2 ships cchv-server-macos-x64.tar.gz (17 downloads)","ref":"cchv-server-macos-x64.tar.gz","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/cchv-server-macos-x64.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v1.32.2 ships Claude.Code.History.Viewer-1.32.2-1.x86_64.rpm (14 downloads)","ref":"Claude.Code.History.Viewer-1.32.2-1.x86_64.rpm","url":"https://github.com/jhlee0409/claude-code-history-viewer/releases/download/v1.32.2/Claude.Code.History.Viewer-1.32.2-1.x86_64.rpm","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":6736.0,"function_nloc":119465.0,"mean_ccn":3.4,"p90_ccn":8.0,"complex_functions":195.0,"long_functions":144.0,"many_param_functions":5.0,"risky_nloc_share":0.2717},"findings":[],"evidence":[{"kind":"complex-function","description":"ToolExecutionResultRouter in src/components/messageRenderer/ToolExecutionResultRouter.tsx: complexity 102, 273 lines","ref":"src/components/messageRenderer/ToolExecutionResultRouter.tsx","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/messageRenderer/ToolExecutionResultRouter.tsx#L43","weight":1.0},{"kind":"complex-function","description":"search_all_providers in src-tauri/src/commands/multi_provider.rs: complexity 88, 433 lines","ref":"src-tauri/src/commands/multi_provider.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/multi_provider.rs#L680","weight":1.0},{"kind":"complex-function","description":"extract_session_metadata_internal in src-tauri/src/commands/session/load.rs: complexity 88, 327 lines","ref":"src-tauri/src/commands/session/load.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/session/load.rs#L287","weight":1.0},{"kind":"complex-function","description":"(anonymous) in src/components/SessionBoard/InteractionCard.tsx: complexity 87, 318 lines","ref":"src/components/SessionBoard/InteractionCard.tsx","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/SessionBoard/InteractionCard.tsx#L88","weight":1.0},{"kind":"complex-function","description":"extractSearchableText in src/utils/searchWorker.ts: complexity 86, 190 lines","ref":"src/utils/searchWorker.ts","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/utils/searchWorker.ts#L116","weight":1.0},{"kind":"complex-function","description":"renderEntry in src/components/contentRenderer/ClaudeContentArrayRenderer.tsx: complexity 85, 331 lines","ref":"src/components/contentRenderer/ClaudeContentArrayRenderer.tsx","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/contentRenderer/ClaudeContentArrayRenderer.tsx#L176","weight":1.0},{"kind":"complex-function","description":"(anonymous) in src/components/MessageViewer/components/ClaudeMessageNode.tsx: complexity 84, 335 lines","ref":"src/components/MessageViewer/components/ClaudeMessageNode.tsx","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/components/MessageViewer/components/ClaudeMessageNode.tsx#L70","weight":1.0},{"kind":"complex-function","description":"extractSearchableText in src/utils/searchIndex.ts: complexity 83, 206 lines","ref":"src/utils/searchIndex.ts","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/utils/searchIndex.ts#L55","weight":1.0},{"kind":"complex-function","description":"AppLayout in src/layouts/AppLayout.tsx: complexity 82, 552 lines","ref":"src/layouts/AppLayout.tsx","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/layouts/AppLayout.tsx#L153","weight":1.0},{"kind":"complex-function","description":"extractBlocks in src/services/export/contentExtractor.ts: complexity 70, 144 lines","ref":"src/services/export/contentExtractor.ts","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src/services/export/contentExtractor.ts#L42","weight":1.0}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":129247.0,"duplicated_lines":14681.0,"duplicated_share":0.1136,"files":584.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: scripts/i18n-config.mjs:10 and src/i18n/index.ts:109","ref":"scripts/i18n-config.mjs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/scripts/i18n-config.mjs#L10","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/benches/performance.rs:29 and src-tauri/benches/performance.rs:110","ref":"src-tauri/benches/performance.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/benches/performance.rs#L29","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/cli.rs:191 and src-tauri/src/providers/cursor.rs:929","ref":"src-tauri/src/cli.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/cli.rs#L191","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/cli.rs:192 and src-tauri/src/providers/vscode.rs:967","ref":"src-tauri/src/cli.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/cli.rs#L192","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/antigravity.rs:647 and src-tauri/src/commands/antigravity.rs:731","ref":"src-tauri/src/commands/antigravity.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/antigravity.rs#L647","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/archive.rs:374 and src-tauri/src/commands/archive.rs:464","ref":"src-tauri/src/commands/archive.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/archive.rs#L374","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/claude_settings.rs:434 and src-tauri/src/commands/claude_settings.rs:454","ref":"src-tauri/src/commands/claude_settings.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/claude_settings.rs#L434","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/claude_settings.rs:874 and src-tauri/src/commands/settings.rs:305","ref":"src-tauri/src/commands/claude_settings.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/claude_settings.rs#L874","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/mcp_presets.rs:77 and src-tauri/src/commands/settings.rs:90","ref":"src-tauri/src/commands/mcp_presets.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/mcp_presets.rs#L77","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/commands/mcp_presets.rs:164 and src-tauri/src/commands/metadata.rs:168","ref":"src-tauri/src/commands/mcp_presets.rs","url":"https://github.com/jhlee0409/claude-code-history-viewer/blob/67979b401e936ed503c941a3f3294012f51d730e/src-tauri/src/commands/mcp_presets.rs#L164","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":149.0,"weighted_findings":134.0,"scanned_lines":174994.0,"category:best-practice":118.0,"category:correctness":31.0},"findings":[{"rule_id":"opengrep/typescript.lang.correctness.useless-ternary","severity":"high","message":"It looks like no matter how currentMode === \"lines\" || currentMode === \"trimmedLines\" is evaluated, this expression returns part.value. This is probably a copy-paste error.","path":"src/components/AdvancedTextDiff.tsx","line":85,"fingerprint":"typescript.lang.correctness.useless-ternary:src/components/AdvancedTextDiff.tsx:85"},{"rule_id":"opengrep/typescript.lang.correctness.useless-ternary","severity":"high","message":"It looks like no matter how currentMode === \"lines\" || currentMode === \"trimmedLines\" is evaluated, this expression returns \"pre-wrap\". This is probably a copy-paste error.","path":"src/components/AdvancedTextDiff.tsx","line":96,"fingerprint":"typescript.lang.correctness.useless-ternary:src/components/AdvancedTextDiff.tsx:96"},{"rule_id":"opengrep/typescript.lang.correctness.useless-ternary","severity":"high","message":"It looks like no matter how isGrouped is evaluated, this expression returns \"focus:ring-2 focus:ring-accent\". This is probably a copy-paste error.","path":"src/components/ProjectTree/components/ProjectItem.tsx","line":89,"fingerprint":"typescript.lang.correctness.useless-ternary:src/components/ProjectTree/components/ProjectItem.tsx:89"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/FileContent.tsx","line":322,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/FileContent.tsx:322"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/FileContent.tsx","line":334,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/FileContent.tsx:334"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/components/ProjectContextMenu.tsx","line":37,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/components/ProjectContextMenu.tsx:37"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/RecentEditsViewer/FileEditExpansion.tsx","line":242,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/RecentEditsViewer/FileEditExpansion.tsx:242"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/RecentEditsViewer/FileEditExpansion.tsx","line":261,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/RecentEditsViewer/FileEditExpansion.tsx:261"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/RecentEditsViewer/FileEditItem.tsx","line":546,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/RecentEditsViewer/FileEditItem.tsx:546"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/RecentEditsViewer/FileEditItem.tsx","line":564,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/RecentEditsViewer/FileEditItem.tsx:564"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/components/SessionItem/components/SessionContextMenu.tsx","line":58,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/components/SessionItem/components/SessionContextMenu.tsx:58"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/components/SessionItem/hooks/useSessionEditing.ts","line":29,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/components/SessionItem/hooks/useSessionEditing.ts:29"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/SettingsManager/sections/WslSection.tsx","line":237,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/SettingsManager/sections/WslSection.tsx:237"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/common/CodeHighlight.tsx","line":73,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/common/CodeHighlight.tsx:73"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/common/CodeHighlight.tsx","line":79,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/common/CodeHighlight.tsx:79"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/common/HighlightedText.tsx","line":64,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/common/HighlightedText.tsx:64"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/ApplyPatchToolRenderer.tsx","line":66,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/ApplyPatchToolRenderer.tsx:66"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/ApplyPatchToolRenderer.tsx","line":72,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/ApplyPatchToolRenderer.tsx:72"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/BashToolRenderer.tsx","line":79,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/BashToolRenderer.tsx:79"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/BashToolRenderer.tsx","line":83,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/BashToolRenderer.tsx:83"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/NotebookEditToolRenderer.tsx","line":85,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/NotebookEditToolRenderer.tsx:85"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/contentRenderer/toolUseRenderers/NotebookEditToolRenderer.tsx","line":89,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/contentRenderer/toolUseRenderers/NotebookEditToolRenderer.tsx:89"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/messageRenderer/ClaudeToolUseDisplay.tsx","line":52,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/messageRenderer/ClaudeToolUseDisplay.tsx:52"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/messageRenderer/ClaudeToolUseDisplay.tsx","line":58,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/messageRenderer/ClaudeToolUseDisplay.tsx:58"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/messageRenderer/CommandOutputDisplay.tsx","line":93,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/messageRenderer/CommandOutputDisplay.tsx:93"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/messageRenderer/CommandOutputDisplay.tsx","line":99,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/messageRenderer/CommandOutputDisplay.tsx:99"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/messageRenderer/MessageContentDisplay.tsx","line":83,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/messageRenderer/MessageContentDisplay.tsx:83"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"src/components/modals/feedback/FeedbackModal.tsx","line":90,"fingerprint":"javascript.lang.best-practice.javascript-alert:src/components/modals/feedback/FeedbackModal.tsx:90"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"src/components/modals/feedback/FeedbackModal.tsx","line":123,"fingerprint":"javascript.lang.best-practice.javascript-alert:src/components/modals/feedback/FeedbackModal.tsx:123"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"src/components/modals/feedback/FeedbackModal.tsx","line":135,"fingerprint":"javascript.lang.best-practice.javascript-alert:src/components/modals/feedback/FeedbackModal.tsx:135"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"src/components/modals/feedback/FeedbackModal.tsx","line":155,"fingerprint":"javascript.lang.best-practice.javascript-alert:src/components/modals/feedback/FeedbackModal.tsx:155"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/toolResultRenderer/ClaudeToolResultItem.tsx","line":207,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/toolResultRenderer/ClaudeToolResultItem.tsx:207"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/toolResultRenderer/ClaudeToolResultItem.tsx","line":216,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/toolResultRenderer/ClaudeToolResultItem.tsx:216"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/toolResultRenderer/FallbackRenderer.tsx","line":41,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/toolResultRenderer/FallbackRenderer.tsx:41"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/toolResultRenderer/FallbackRenderer.tsx","line":47,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/toolResultRenderer/FallbackRenderer.tsx:47"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/alert.tsx","line":35,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/alert.tsx:35"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/alert.tsx","line":47,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/alert.tsx:47"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/alert.tsx","line":59,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/alert.tsx:59"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/badge.tsx","line":45,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/badge.tsx:45"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/button.tsx","line":60,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/button.tsx:60"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":35,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:35"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":48,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:48"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":60,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:60"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":72,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:72"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":81,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:81"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/card.tsx","line":92,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/card.tsx:92"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":23,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:23"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":43,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:43"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":74,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:74"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":91,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:91"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":103,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:103"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":119,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:119"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":132,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:132"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":148,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:148"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/command.tsx","line":164,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/command.tsx:164"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":10,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:10"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":16,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:16"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":22,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:22"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":28,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:28"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":42,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:42"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":66,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:66"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":88,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:88"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":101,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:101"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":114,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:114"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dialog.tsx","line":127,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dialog.tsx:127"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":31,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:31"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":50,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:50"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":68,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:68"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":87,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:87"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":103,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:103"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":126,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:126"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":151,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:151"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":163,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:163"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/dropdown-menu.tsx","line":175,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/dropdown-menu.tsx:175"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/hover-card.tsx","line":22,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/hover-card.tsx:22"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/input.tsx","line":39,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/input.tsx:39"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/label.tsx","line":31,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/label.tsx:31"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":68,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:68"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":81,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:81"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":135,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:135"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":210,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:210"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":304,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:304"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":315,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:315"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":337,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:337"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":366,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:366"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":380,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:380"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":408,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:408"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":422,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:422"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":448,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:448"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/loading.tsx","line":487,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/loading.tsx:487"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":29,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:29"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":49,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:49"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":66,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:66"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":94,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:94"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":119,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:119"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":137,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:137"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/select.tsx","line":156,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/select.tsx:156"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/separator.tsx","line":23,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/separator.tsx:23"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":11,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:11"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":17,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:17"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":23,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:23"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":29,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:29"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":43,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:43"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":79,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:79"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":110,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:110"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/sheet.tsx","line":123,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/sheet.tsx:123"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/skeleton.tsx","line":17,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/skeleton.tsx:17"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/skeleton.tsx","line":28,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/skeleton.tsx:28"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/skeleton.tsx","line":46,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/skeleton.tsx:46"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/skeleton.tsx","line":65,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/skeleton.tsx:65"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/switch.tsx","line":19,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/switch.tsx:19"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tabs.tsx","line":18,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tabs.tsx:18"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tabs.tsx","line":33,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tabs.tsx:33"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tabs.tsx","line":48,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tabs.tsx:48"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/textarea.tsx","line":22,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/textarea.tsx:22"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tooltip.tsx","line":16,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tooltip.tsx:16"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tooltip.tsx","line":26,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tooltip.tsx:26"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tooltip.tsx","line":34,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tooltip.tsx:34"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/components/ui/tooltip.tsx","line":52,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/tooltip.tsx:52"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-in-state","severity":"medium","message":"Copying a prop into state in React -- this is bad practice as all updates to it are ignored. Instead, read props directly in your component and avoid copying props into state.","path":"src/hooks/useMediaQuery.ts","line":13,"fingerprint":"typescript.react.best-practice.react-props-in-state:src/hooks/useMediaQuery.ts:13"},{"rule_id":"opengrep/typescript.react.best-practice.react-props-spreading","severity":"medium","message":"It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious actors a way to inject unexpected attributes.","path":"src/shared/TooltipButton.tsx","line":19,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/shared/TooltipButton.tsx:19"},{"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":"scripts/generate-i18n-types.mjs","line":112,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:scripts/generate-i18n-types.mjs:112"},{"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":"src/components/AnalyticsDashboard/utils/calculations.ts","line":269,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/AnalyticsDashboard/utils/calculations.ts:269"},{"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":"src/components/AnalyticsDashboard/utils/calculations.ts","line":269,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/AnalyticsDashboard/utils/calculations.ts:269"},{"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":"src/components/ErrorBoundary.tsx","line":56,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:56"},{"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":"src/components/ErrorBoundary.tsx","line":57,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:57"},{"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":"src/components/ErrorBoundary.tsx","line":58,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:58"},{"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":"src/components/ErrorBoundary.tsx","line":58,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:58"},{"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":"src/components/ErrorBoundary.tsx","line":60,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:60"},{"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":"src/components/ErrorBoundary.tsx","line":62,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:62"},{"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":"src/components/ErrorBoundary.tsx","line":62,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:62"},{"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":"src/components/ErrorBoundary.tsx","line":64,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:64"},{"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":"src/components/ErrorBoundary.tsx","line":67,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:67"},{"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":"src/components/ErrorBoundary.tsx","line":72,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:72"},{"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":"src/components/ErrorBoundary.tsx","line":77,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:77"},{"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":"src/components/ErrorBoundary.tsx","line":77,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:77"},{"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":"src/components/ErrorBoundary.tsx","line":79,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:79"},{"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":"src/components/ErrorBoundary.tsx","line":98,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:98"},{"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":"src/components/ErrorBoundary.tsx","line":102,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:102"},{"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":"src/components/ErrorBoundary.tsx","line":107,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:107"},{"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":"src/components/ErrorBoundary.tsx","line":111,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:111"},{"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":"src/components/ErrorBoundary.tsx","line":114,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:114"},{"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":"src/components/ErrorBoundary.tsx","line":117,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:117"},{"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":"src/components/ErrorBoundary.tsx","line":120,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:120"},{"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":"src/components/ErrorBoundary.tsx","line":124,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/ErrorBoundary.tsx:124"},{"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":"src/components/SessionBoard/ContributionGrid.tsx","line":199,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/SessionBoard/ContributionGrid.tsx:199"},{"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":"src/components/SessionBoard/ContributionGrid.tsx","line":199,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/components/SessionBoard/ContributionGrid.tsx:199"},{"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":"src/services/export/htmlExporter.ts","line":12,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/services/export/htmlExporter.ts:12"},{"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":"src/services/export/htmlExporter.ts","line":12,"fingerprint":"javascript.lang.correctness.missing-template-string-indicator:src/services/export/htmlExporter.ts:12"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.332,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":1.0,"test_lines":29052.0,"source_lines":174994.0,"test_ratio":0.166,"ci_files":12.0,"cochange_share":0.3967,"cochange_commits":242.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/claude-mentions.yml","ref":".github/workflows/claude-mentions.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/daily-pr-health.yml","ref":".github/workflows/daily-pr-health.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/frontend-tests.yml","ref":".github/workflows/frontend-tests.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/issue-to-spec.yml","ref":".github/workflows/issue-to-spec.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pages.yml","ref":".github/workflows/pages.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pr-auto-label.yml","ref":".github/workflows/pr-auto-label.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pricing-watch.yml","ref":".github/workflows/pricing-watch.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/rust-tests.yml","ref":".github/workflows/rust-tests.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/server-release.yml","ref":".github/workflows/server-release.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/update-flow-tests.yml","ref":".github/workflows/update-flow-tests.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (vitest)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (eslint, clippy, rustfmt, cargo fmt)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["vitest"],"lint_commands":["eslint","clippy","rustfmt","cargo fmt"]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":1.0,"readme_lines":413.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":"CHANGELOG.md","ref":"CHANGELOG.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.app.json","ref":"tsconfig.app.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":142168.0,"other_lines":32826.0,"files_blamed":584.0,"blame_failures":0.0,"quality:ai_findings":98.0,"quality:ai_per_kloc":0.689,"quality:other_findings":51.0,"quality:other_per_kloc":1.554,"quality:ratio":0.44,"security:ai_findings":77.0,"security:ai_per_kloc":0.542,"security:other_findings":9.0,"security:other_per_kloc":0.274,"security:ratio":1.98},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":true},"error":null}],"flags":[]}