{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-13T23:46:18.169390Z","repo":{"ref":{"host":"github.com","owner":"jiayun","name":"DevWorkbench"},"default_branch":"main","clone_url":"https://github.com/jiayun/DevWorkbench.git","html_url":"https://github.com/jiayun/DevWorkbench","description":null,"stars":17,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":6158,"primary_language":"TypeScript","license_spdx":"MIT","created_at":"2025-06-25T03:39:53Z","pushed_at":"2026-07-06T15:04:14Z","security_policy_url":null,"distribution":{"owner_created_at":"2011-04-26T09:40:01Z","owner_type":"User","release_assets":[{"name":"control.tar.gz","size":494,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/control.tar.gz"},{"name":"data.tar.gz","size":8016159,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/data.tar.gz"},{"name":"devworkbench.exe","size":18565120,"download_count":2,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/devworkbench.exe"},{"name":"DevWorkbench_0.8.2_aarch64.app.tar.gz","size":7118795,"download_count":2,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_aarch64.app.tar.gz"},{"name":"DevWorkbench_0.8.2_aarch64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_aarch64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.2_aarch64.dmg","size":7342119,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_aarch64.dmg"},{"name":"DevWorkbench_0.8.2_amd64.AppImage","size":85035512,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_amd64.AppImage"},{"name":"DevWorkbench_0.8.2_amd64.deb","size":8016846,"download_count":1,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_amd64.deb"},{"name":"DevWorkbench_0.8.2_x64-setup.exe","size":4501315,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_x64-setup.exe"},{"name":"DevWorkbench_0.8.2_x64.app.tar.gz","size":7314076,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_x64.app.tar.gz"},{"name":"DevWorkbench_0.8.2_x64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_x64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.2_x64.dmg","size":7589580,"download_count":1,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_x64.dmg"},{"name":"DevWorkbench_0.8.2_x64_en-US.msi","size":6524928,"download_count":1,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_x64_en-US.msi"},{"name":"latest.json","size":2526,"download_count":34,"release_tag":"v0.8.2","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/latest.json"},{"name":"control.tar.gz","size":497,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/control.tar.gz"},{"name":"data.tar.gz","size":8016754,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/data.tar.gz"},{"name":"devworkbench.exe","size":18530304,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/devworkbench.exe"},{"name":"DevWorkbench_0.8.1_aarch64.app.tar.gz","size":7113778,"download_count":2,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_aarch64.app.tar.gz"},{"name":"DevWorkbench_0.8.1_aarch64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_aarch64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.1_aarch64.dmg","size":7336768,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_aarch64.dmg"},{"name":"DevWorkbench_0.8.1_amd64.AppImage","size":85019128,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_amd64.AppImage"},{"name":"DevWorkbench_0.8.1_amd64.deb","size":8017444,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_amd64.deb"},{"name":"DevWorkbench_0.8.1_x64-setup.exe","size":4493794,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_x64-setup.exe"},{"name":"DevWorkbench_0.8.1_x64.app.tar.gz","size":7294158,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_x64.app.tar.gz"},{"name":"DevWorkbench_0.8.1_x64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_x64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.1_x64.dmg","size":7576307,"download_count":0,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_x64.dmg"},{"name":"DevWorkbench_0.8.1_x64_en-US.msi","size":6520832,"download_count":1,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/DevWorkbench_0.8.1_x64_en-US.msi"},{"name":"latest.json","size":2526,"download_count":8,"release_tag":"v0.8.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.1/latest.json"},{"name":"control.tar.gz","size":494,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/control.tar.gz"},{"name":"data.tar.gz","size":8120273,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/data.tar.gz"},{"name":"devworkbench.exe","size":18711040,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/devworkbench.exe"},{"name":"DevWorkbench_0.8.0_aarch64.app.tar.gz","size":7258578,"download_count":5,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_aarch64.app.tar.gz"},{"name":"DevWorkbench_0.8.0_aarch64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_aarch64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.0_aarch64.dmg","size":7473259,"download_count":6,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_aarch64.dmg"},{"name":"DevWorkbench_0.8.0_amd64.AppImage","size":85092856,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_amd64.AppImage"},{"name":"DevWorkbench_0.8.0_amd64.deb","size":8120960,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_amd64.deb"},{"name":"DevWorkbench_0.8.0_x64-setup.exe","size":4535634,"download_count":1,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_x64-setup.exe"},{"name":"DevWorkbench_0.8.0_x64.app.tar.gz","size":7451391,"download_count":1,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_x64.app.tar.gz"},{"name":"DevWorkbench_0.8.0_x64.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_x64.app.tar.gz.sig"},{"name":"DevWorkbench_0.8.0_x64.dmg","size":7719371,"download_count":1,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_x64.dmg"},{"name":"DevWorkbench_0.8.0_x64_en-US.msi","size":6594560,"download_count":1,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/DevWorkbench_0.8.0_x64_en-US.msi"},{"name":"latest.json","size":2526,"download_count":39,"release_tag":"v0.8.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.0/latest.json"},{"name":"control.tar.gz","size":494,"download_count":3,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/control.tar.gz"},{"name":"data.tar.gz","size":8080519,"download_count":3,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/data.tar.gz"},{"name":"devworkbench.exe","size":18715648,"download_count":4,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/devworkbench.exe"},{"name":"DevWorkbench_0.7.1_aarch64.app.tar.gz","size":7250984,"download_count":5,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_aarch64.app.tar.gz"},{"name":"DevWorkbench_0.7.1_aarch64.app.tar.gz.sig","size":412,"download_count":3,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_aarch64.app.tar.gz.sig"},{"name":"DevWorkbench_0.7.1_aarch64.dmg","size":7461751,"download_count":5,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_aarch64.dmg"},{"name":"DevWorkbench_0.7.1_amd64.AppImage","size":85072376,"download_count":8,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_amd64.AppImage"},{"name":"DevWorkbench_0.7.1_amd64.deb","size":8081206,"download_count":3,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_amd64.deb"},{"name":"DevWorkbench_0.7.1_x64-setup.exe","size":4569057,"download_count":3,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_x64-setup.exe"},{"name":"DevWorkbench_0.7.1_x64.app.tar.gz","size":7450659,"download_count":4,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_x64.app.tar.gz"},{"name":"DevWorkbench_0.7.1_x64.app.tar.gz.sig","size":412,"download_count":1,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_x64.app.tar.gz.sig"},{"name":"DevWorkbench_0.7.1_x64.dmg","size":7722190,"download_count":4,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_x64.dmg"},{"name":"DevWorkbench_0.7.1_x64_en-US.msi","size":6619136,"download_count":4,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/DevWorkbench_0.7.1_x64_en-US.msi"},{"name":"latest.json","size":2526,"download_count":15,"release_tag":"v0.7.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.1/latest.json"},{"name":"control.tar.gz","size":494,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/control.tar.gz"},{"name":"data.tar.gz","size":8061915,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/data.tar.gz"},{"name":"DevWorkbench.app.tar.gz","size":7203800,"download_count":1,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench.app.tar.gz"},{"name":"DevWorkbench.app.tar.gz.sig","size":412,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench.app.tar.gz.sig"},{"name":"devworkbench.exe","size":18630656,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/devworkbench.exe"},{"name":"DevWorkbench_0.7.0_aarch64.dmg","size":7420876,"download_count":2,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_aarch64.dmg"},{"name":"DevWorkbench_0.7.0_amd64.AppImage","size":85072376,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_amd64.AppImage"},{"name":"DevWorkbench_0.7.0_amd64.deb","size":8062602,"download_count":2,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_amd64.deb"},{"name":"DevWorkbench_0.7.0_x64-setup.exe","size":4554473,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_x64-setup.exe"},{"name":"DevWorkbench_0.7.0_x64.dmg","size":7688655,"download_count":1,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_x64.dmg"},{"name":"DevWorkbench_0.7.0_x64_en-US.msi","size":6590464,"download_count":0,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/DevWorkbench_0.7.0_x64_en-US.msi"},{"name":"latest.json","size":2526,"download_count":3,"release_tag":"v0.7.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.7.0/latest.json"},{"name":"devworkbench.exe","size":15613440,"download_count":3,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/devworkbench.exe"},{"name":"DevWorkbench_0.6.0_aarch64.dmg","size":6121225,"download_count":7,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_aarch64.dmg"},{"name":"DevWorkbench_0.6.0_amd64.AppImage","size":83790328,"download_count":5,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_amd64.AppImage"},{"name":"DevWorkbench_0.6.0_amd64.deb","size":6641672,"download_count":3,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_amd64.deb"},{"name":"DevWorkbench_0.6.0_x64-setup.exe","size":3726288,"download_count":3,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_x64-setup.exe"},{"name":"DevWorkbench_0.6.0_x64.dmg","size":6328522,"download_count":5,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_x64.dmg"},{"name":"DevWorkbench_0.6.0_x64_en-US.msi","size":5423104,"download_count":3,"release_tag":"v0.6.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.6.0/DevWorkbench_0.6.0_x64_en-US.msi"},{"name":"devworkbench.exe","size":15617024,"download_count":1,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/devworkbench.exe"},{"name":"DevWorkbench_0.5.0_aarch64.dmg","size":6116102,"download_count":2,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_aarch64.dmg"},{"name":"DevWorkbench_0.5.0_amd64.AppImage","size":83778040,"download_count":1,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_amd64.AppImage"},{"name":"DevWorkbench_0.5.0_amd64.deb","size":6631580,"download_count":1,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_amd64.deb"},{"name":"DevWorkbench_0.5.0_x64-setup.exe","size":3720829,"download_count":1,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_x64-setup.exe"},{"name":"DevWorkbench_0.5.0_x64.dmg","size":6325330,"download_count":2,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_x64.dmg"},{"name":"DevWorkbench_0.5.0_x64_en-US.msi","size":5419008,"download_count":1,"release_tag":"v0.5.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.5.0/DevWorkbench_0.5.0_x64_en-US.msi"},{"name":"devworkbench.exe","size":15586816,"download_count":1,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/devworkbench.exe"},{"name":"DevWorkbench_0.4.1_aarch64.dmg","size":6096825,"download_count":2,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_aarch64.dmg"},{"name":"DevWorkbench_0.4.1_amd64.AppImage","size":83778040,"download_count":1,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_amd64.AppImage"},{"name":"DevWorkbench_0.4.1_amd64.deb","size":6601946,"download_count":1,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_amd64.deb"},{"name":"DevWorkbench_0.4.1_x64-setup.exe","size":3707952,"download_count":1,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_x64-setup.exe"},{"name":"DevWorkbench_0.4.1_x64.dmg","size":6299614,"download_count":2,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_x64.dmg"},{"name":"DevWorkbench_0.4.1_x64_en-US.msi","size":5398528,"download_count":1,"release_tag":"v0.4.1","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.1/DevWorkbench_0.4.1_x64_en-US.msi"},{"name":"devworkbench.exe","size":15587328,"download_count":5,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/devworkbench.exe"},{"name":"DevWorkbench_0.4.0_aarch64.dmg","size":6093582,"download_count":9,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_aarch64.dmg"},{"name":"DevWorkbench_0.4.0_amd64.AppImage","size":83778040,"download_count":5,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_amd64.AppImage"},{"name":"DevWorkbench_0.4.0_amd64.deb","size":6603120,"download_count":4,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_amd64.deb"},{"name":"DevWorkbench_0.4.0_x64-setup.exe","size":3707128,"download_count":4,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_x64-setup.exe"},{"name":"DevWorkbench_0.4.0_x64.dmg","size":6298151,"download_count":6,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_x64.dmg"},{"name":"DevWorkbench_0.4.0_x64_en-US.msi","size":5402624,"download_count":4,"release_tag":"v0.4.0","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.4.0/DevWorkbench_0.4.0_x64_en-US.msi"},{"name":"devworkbench.exe","size":15684096,"download_count":1,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/devworkbench.exe"},{"name":"DevWorkbench_0.3.4_aarch64.dmg","size":6128582,"download_count":4,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_aarch64.dmg"},{"name":"DevWorkbench_0.3.4_amd64.AppImage","size":82934264,"download_count":1,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_amd64.AppImage"},{"name":"DevWorkbench_0.3.4_amd64.deb","size":6705096,"download_count":1,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_amd64.deb"},{"name":"DevWorkbench_0.3.4_x64-setup.exe","size":3718156,"download_count":1,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_x64-setup.exe"},{"name":"DevWorkbench_0.3.4_x64.dmg","size":6322389,"download_count":2,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_x64.dmg"},{"name":"DevWorkbench_0.3.4_x64_en-US.msi","size":5439488,"download_count":1,"release_tag":"v0.3.4","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.3.4/DevWorkbench_0.3.4_x64_en-US.msi"}]}},"commit_sha":"27f0d1a6d5dd851911d43a268d57ed39ccd3f81b","profile":{"lines_by_language":{"TypeScript":9237,"Rust":1379,"JavaScript":139},"files_by_category":{"source":40,"binary":25,"other":12,"config":11,"docs":10,"generated":1},"source_lines":10755,"test_lines":0},"pillars":{"ai_provenance":{"score":98.7,"confidence":0.95,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.9871,"suspected_share":0.0,"estimated_share":0.9871,"ai_artifacts":1.0,"flagged_work_units":0.0,"flagged_releases":0.0},"summary":"Explicit AI attribution on 99% of first-party code added; an estimated 99% including velocity signals."},"quality":{"score":50.6,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":28.2,"duplication":36.7,"lint":64.3,"testing":45.0,"docs":85.0,"type_safety":100.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, CI runs tests; 42% of function code in complex or long functions; 17% duplicated lines. Weakest area: complexity."},"security":{"score":36.5,"confidence":0.85,"coverage":1.0,"label":"poor","breakdown":{"secrets":43.5,"sast":84.7,"dependencies":20.9,"ci_actions":6.0,"posture":0.0,"scorecard":null},"summary":"Security posture is poor: 2 possible secret(s) in the tree, 0 only in history; 43 known vulnerabilities in 13 dependencies; 1 high-severity SAST findings; 15 high-severity workflow issues. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":72.0,"checked":72.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":111.0,"attributed_commits":106.0,"attributed_commit_share":0.954954954954955,"effective_loc":13351.0,"attributed_loc":13179.0,"attributed_loc_share":0.9871170698824058,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 106 attributed commits, 13,179 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"27f0d1a6d5dd851911d43a268d57ed39ccd3f81b","url":"https://github.com/jiayun/DevWorkbench/commit/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ea50862107c377b0cdd6e508073ad0330b367576","url":"https://github.com/jiayun/DevWorkbench/commit/ea50862107c377b0cdd6e508073ad0330b367576","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"39921948fe542c046d16a64af884f05280b9b9b9","url":"https://github.com/jiayun/DevWorkbench/commit/39921948fe542c046d16a64af884f05280b9b9b9","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"94ec4632936872a5d5e0d27fe2f2cb30b2250314","url":"https://github.com/jiayun/DevWorkbench/commit/94ec4632936872a5d5e0d27fe2f2cb30b2250314","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6354769a3bf1e5868237b8dbfce00d68ebd3a2c0","url":"https://github.com/jiayun/DevWorkbench/commit/6354769a3bf1e5868237b8dbfce00d68ebd3a2c0","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"c663467711783002e6fe1a406f27b4757c5c7ea3","url":"https://github.com/jiayun/DevWorkbench/commit/c663467711783002e6fe1a406f27b4757c5c7ea3","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a21f7dd9159facb6e50efe7a5cedc94b0200b3d4","url":"https://github.com/jiayun/DevWorkbench/commit/a21f7dd9159facb6e50efe7a5cedc94b0200b3d4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"16e0e72e741f7b0cd3ab13cfa5ed7d16b023d5af","url":"https://github.com/jiayun/DevWorkbench/commit/16e0e72e741f7b0cd3ab13cfa5ed7d16b023d5af","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"59c4cf1d5efaefd4766a623e45e162044446003e","url":"https://github.com/jiayun/DevWorkbench/commit/59c4cf1d5efaefd4766a623e45e162044446003e","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"8ab30374745076fb8abedc172c8b465ecda785ad","url":"https://github.com/jiayun/DevWorkbench/commit/8ab30374745076fb8abedc172c8b465ecda785ad","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"1a8b0648c9433f5dc9a9985dc68fd383adb76b73","url":"https://github.com/jiayun/DevWorkbench/commit/1a8b0648c9433f5dc9a9985dc68fd383adb76b73","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"0a9b81312367731ace78da49b9ead641fbfc750a","url":"https://github.com/jiayun/DevWorkbench/commit/0a9b81312367731ace78da49b9ead641fbfc750a","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"08fc1bef7573fc140081712ee12f86ec09c8c6f4","url":"https://github.com/jiayun/DevWorkbench/commit/08fc1bef7573fc140081712ee12f86ec09c8c6f4","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"cffea853aa48f99ddabbf42abc2d1e269f7c3721","url":"https://github.com/jiayun/DevWorkbench/commit/cffea853aa48f99ddabbf42abc2d1e269f7c3721","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"5892e581490546fd4adeb22c34d12df8f3c59c20","url":"https://github.com/jiayun/DevWorkbench/commit/5892e581490546fd4adeb22c34d12df8f3c59c20","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d64fd55619133e1e443c09d0cbcef57432dfcbcd","url":"https://github.com/jiayun/DevWorkbench/commit/d64fd55619133e1e443c09d0cbcef57432dfcbcd","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"773af3e72f6105ed9dabc63624f9c91dfae04687","url":"https://github.com/jiayun/DevWorkbench/commit/773af3e72f6105ed9dabc63624f9c91dfae04687","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"59db994345c350069f53e4082f244b306a25fc51","url":"https://github.com/jiayun/DevWorkbench/commit/59db994345c350069f53e4082f244b306a25fc51","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"9d95bb0a6509f5570b2f41349829f9961f32ddef","url":"https://github.com/jiayun/DevWorkbench/commit/9d95bb0a6509f5570b2f41349829f9961f32ddef","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a5626d63180074ad6b48e3aa3cbb097a04623166","url":"https://github.com/jiayun/DevWorkbench/commit/a5626d63180074ad6b48e3aa3cbb097a04623166","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d33a43ded534959bbc4106730379dae3ad31b5aa","url":"https://github.com/jiayun/DevWorkbench/commit/d33a43ded534959bbc4106730379dae3ad31b5aa","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"ddaecc44b6fc637873c385411e903f6c0055fb70","url":"https://github.com/jiayun/DevWorkbench/commit/ddaecc44b6fc637873c385411e903f6c0055fb70","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"d45ce27f60d30ef3017e9811d45233e46f527e95","url":"https://github.com/jiayun/DevWorkbench/commit/d45ce27f60d30ef3017e9811d45233e46f527e95","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"529061c983d66303a9af1780c1d3883bd1f55d63","url":"https://github.com/jiayun/DevWorkbench/commit/529061c983d66303a9af1780c1d3883bd1f55d63","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"a9324c9545ce372faca4c0f50e5a08b44df98acc","url":"https://github.com/jiayun/DevWorkbench/commit/a9324c9545ce372faca4c0f50e5a08b44df98acc","weight":0.9}],"data":{"attributed_loc_by_commit":{"46107d4ed4afa88a5d66c4ac2530c38aa75209d7":121,"5aefa4ebbadb892e670d2c2a3d7f3e9da053d567":0,"d3f6a03fda9e20ab4043b98537c2431c6f998c6d":0,"1c10bc12454574cf82d454e26ec9acf0df1a8a33":0,"0ec7a5a0ea1449aac23c6c3db74df69b83c08223":7,"036e82e251c5385614e3fddb925077d795c0555f":317,"e0a1bac32d9e46dfdf912a4133e9747006b5455e":196,"cb3b5404bd6bb0a4fd7bc7c76cedec7781771eca":206,"2ca12c9a9c888eb726109b4eda789673900d7cc3":39,"bbf84baedd4fbe91a7d91a5013e7f789cc5c0fde":23,"4de45cef6c06aba2e6fe2397cfe3764320d7ed55":14,"619580b5fa071629b1a94a8a089256103bf3052d":109,"d9f63613b162d41de354ae683b33d11d71a0d8f0":50,"ac81d98a3114ed361d77afbb1756c82d5805ee63":1,"ea1b56b8fde796961f0c8defe759f0e775b8eb83":180,"aab36f7d1863485ed5243fab31461520650bbc78":7,"a783ccd7a49626e81911267baad2fabfd9a8e0dc":6,"d0de9b2083668abc8932d36d73cc60eea70970f4":75,"399b895cf8088127d3f6e122b9ee01771a673627":1,"d35899351bac321cfc294c1c23aa9cfead8c0766":13,"e9bce8fa11990586153925e09f03c2c91817ae90":24,"390295067b194a5ea400b25f6a5969a6a00130b1":4,"9d9080225dfb25e734047591afcf5b4133c00769":0,"193585bff1e9a322af26cab7266a1136889cebec":0,"4508a732049099f433dafeb256a375a3603d5819":0,"523b7a969a13ce2771d440050cc271f68ddb892f":0,"88fe7d471407074e20dfbfeb53c550a5f10b9371":0,"5dfe41a4d38b1e97a01e2c06ae7de50046238bb2":0,"166eb9072688dea5cb0da8b6f9cf351d62bbb2bc":0,"ad50a3946fb8651416ac2203b660026424c8496a":0,"ea721fbfa6f52a426b2ee425e33e4dc0111852a7":0,"2fc9a16851284eb7bc4cd5560973e0d7e5fd2a89":303,"0e59d3fd85f6ce68abec765b3aa089dfa23abec5":343,"ad4b8b781ffaa58556d9756843cc04256a18e006":2,"c8c7ebbaf64fc0af67e4fc4e8d78d3253d152bc6":0,"c7e37cab29464ed95392e16a5f49eff345a01006":0,"7dede44fed9b8695628bec7903b51d1cd0add0ae":0,"0e234749ccedb5fe5dd731fc83bef453936bbafb":3,"ed2deade1204acb7adf709e1aa640b6c3a6a8924":0,"1a7833f1ebc7de730093e258fbbc0c0691ece15e":0,"c632d9ed655e9689b25275c96030d2a661857fb3":201,"f980e0bb5d0a602392877e574a65b0e2c6d5d49a":0,"2008f3397386b8d16ae772e672a57f3c68eca33d":304,"dc78a686ca9656b614686905768ade95f2d8c196":0,"08a3fc2523ec95885667e84b6171f746aedb1505":1,"5240ce69f58e6f1b0c8d2a39a2ba7df327adfdf6":0,"e472ecd822c160e1c1b3a1377015d55b2661fecb":196,"13e94365129d78d0072e92e3cde0b4989cadf127":253,"356acb59d4b4b578a8cdc36297cd547add4ffc93":158,"f4e7b9cb1244ec14fa812c876d1acad8f5de70c5":101,"9b99470985b0fcd72e8bc5a6c0e56649a058dd11":272,"f76bec803caef2d8b6bbcb4cde1eb94a365c4787":302,"36cfdd464c2f4efcad24a0363ae630fa3e82143a":114,"8073787355cbdd04c1cbc0a0a44005430b39c447":1,"88b1fef2e450ad668855f984483afda280ab1905":457,"bc2aadaa53944860e117879649ee14b6d94fa453":1,"dbf8d58d44faced70c853fe215cea02ef5b08064":0,"b023f62d2b2a7e18f2287d1b40acb5acb9b8e8e5":0,"d961bdde6458483823b1f71d8c299f0609fde436":1178,"620b02d696c861c10c4c2edb7092c497ad707292":200,"fa0f85c8c5ddee3de03c957ec06aa0043fdc7efb":823,"140762ee130867e6f9ef9a2f48a9178034306c8b":400,"2ce8fd58a4f11e7ff6870ff8b677e5746245aef2":19,"281b86db0719bc6a3464a44dbb1fad1ece56cf7a":256,"dbc89743ef378afaebaada08275471ae28eb206b":255,"dbf9c9c873419878649aa96071d44d9d90a1aa6f":3,"0f9770bddfa0e1f027e22f7e42bd4039ab03c288":31,"2a75ab520c460682e37e38898e3d3d2eaebf4a2e":52,"7c96e92e02507bb6704da1345e66bef9004d65fb":21,"35a75adbfba5272187abbea34c2dbc442d503713":54,"99a76a4640614c37df8351e2620a7f3aea93e27f":27,"38c3590038047157e27f240b80f353173966801e":0,"279a466fc8efc63c7330138be8e3e5b2455cdef2":1,"27edb5916c8fa4ffac549d971a441e7adaaac1ea":0,"1e41a2e6334334db3f6c03bb125753806f3646d8":80,"e4e33ee89f811c694b65a57128d6e6f2ed432938":0,"a7f70ff239faf9b315d9b1b3aca003262ef69cff":0,"6f6c2f10ed044fe9083124f08d88fd3f3d9300a1":671,"ca6ee1668f0c69aa1c6a41fd3d5c160cc545dc88":0,"e8d38844c72a9bdaeaecda955d146b954466048a":129,"f0b6729157be77ea61743d8eb1a43446217711eb":603,"a9324c9545ce372faca4c0f50e5a08b44df98acc":545,"529061c983d66303a9af1780c1d3883bd1f55d63":393,"d45ce27f60d30ef3017e9811d45233e46f527e95":0,"ddaecc44b6fc637873c385411e903f6c0055fb70":0,"d33a43ded534959bbc4106730379dae3ad31b5aa":0,"a5626d63180074ad6b48e3aa3cbb097a04623166":0,"9d95bb0a6509f5570b2f41349829f9961f32ddef":0,"59db994345c350069f53e4082f244b306a25fc51":0,"773af3e72f6105ed9dabc63624f9c91dfae04687":0,"d64fd55619133e1e443c09d0cbcef57432dfcbcd":0,"5892e581490546fd4adeb22c34d12df8f3c59c20":0,"cffea853aa48f99ddabbf42abc2d1e269f7c3721":93,"08fc1bef7573fc140081712ee12f86ec09c8c6f4":766,"0a9b81312367731ace78da49b9ead641fbfc750a":0,"1a8b0648c9433f5dc9a9985dc68fd383adb76b73":480,"8ab30374745076fb8abedc172c8b465ecda785ad":724,"59c4cf1d5efaefd4766a623e45e162044446003e":19,"16e0e72e741f7b0cd3ab13cfa5ed7d16b023d5af":24,"a21f7dd9159facb6e50efe7a5cedc94b0200b3d4":0,"c663467711783002e6fe1a406f27b4757c5c7ea3":155,"6354769a3bf1e5868237b8dbfce00d68ebd3a2c0":10,"94ec4632936872a5d5e0d27fe2f2cb30b2250314":433,"39921948fe542c046d16a64af884f05280b9b9b9":78,"ea50862107c377b0cdd6e508073ad0330b367576":204,"27f0d1a6d5dd851911d43a268d57ed39ccd3f81b":47},"tools":{"claude-code":{"name":"Claude Code","commits":106,"loc":13179,"first_seen":1750822701,"last_seen":1783350042}},"monthly":{"2025-06":{"loc":3258,"attributed_loc":3258},"2025-07":{"loc":6888,"attributed_loc":6888},"2025-08":{"loc":93,"attributed_loc":93},"2026-01":{"loc":2689,"attributed_loc":2689},"2026-04":{"loc":204,"attributed_loc":204},"2026-06":{"loc":172,"attributed_loc":0},"2026-07":{"loc":47,"attributed_loc":47}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1750822701.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"CLAUDE.md (claude-code configuration)","ref":"CLAUDE.md","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/CLAUDE.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":"CLAUDE.md","added_at":1750822701}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":24.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":13351.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":504.5988258317026,"median_loc_per_hour":188.35450160771705,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":23.0,"flagged_releases":0.0,"max_loc_per_day":13333.6},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.1.0","to":"v0.1.1","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v0.1.1","to":"v0.2.0","loc":646,"days":0.05,"loc_per_day":13333.6,"flagged":false},{"from":"v0.2.0","to":"v0.2.1","loc":2,"days":0.04,"loc_per_day":48.0,"flagged":false},{"from":"v0.2.1","to":"v0.2.2","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"v0.2.2","to":"v0.2.3","loc":3,"days":0.66,"loc_per_day":4.6,"flagged":false},{"from":"v0.2.3","to":"v0.2.4","loc":201,"days":0.55,"loc_per_day":368.6,"flagged":false},{"from":"v0.2.4","to":"v0.2.5","loc":305,"days":1.71,"loc_per_day":178.7,"flagged":false},{"from":"v0.2.5","to":"v0.2.6","loc":708,"days":0.09,"loc_per_day":7566.9,"flagged":false},{"from":"v0.2.6","to":"v0.2.7","loc":1147,"days":2.9,"loc_per_day":395.0,"flagged":false},{"from":"v0.2.7","to":"v0.3.0","loc":3320,"days":0.93,"loc_per_day":3557.0,"flagged":false},{"from":"v0.3.0","to":"v0.3.1","loc":80,"days":0.04,"loc_per_day":1920.0,"flagged":false},{"from":"v0.3.1","to":"v0.3.2","loc":671,"days":3.93,"loc_per_day":171.0,"flagged":false},{"from":"v0.3.2","to":"v0.3.3","loc":1670,"days":0.95,"loc_per_day":1748.7,"flagged":false},{"from":"v0.3.3","to":"v0.3.4","loc":93,"days":53.16,"loc_per_day":1.7,"flagged":false},{"from":"v0.3.4","to":"v0.4.0","loc":766,"days":136.12,"loc_per_day":5.6,"flagged":false},{"from":"v0.4.0","to":"v0.4.1","loc":480,"days":1.91,"loc_per_day":251.8,"flagged":false},{"from":"v0.4.1","to":"v0.5.0","loc":767,"days":0.97,"loc_per_day":787.2,"flagged":false},{"from":"v0.5.0","to":"v0.6.0","loc":165,"days":6.97,"loc_per_day":23.7,"flagged":false},{"from":"v0.6.0","to":"v0.7.0","loc":433,"days":0.11,"loc_per_day":4066.0,"flagged":false},{"from":"v0.7.0","to":"v0.7.1","loc":78,"days":0.04,"loc_per_day":1872.0,"flagged":false},{"from":"v0.7.1","to":"v0.8.0","loc":204,"days":68.96,"loc_per_day":3.0,"flagged":false},{"from":"v0.8.0","to":"v0.8.1","loc":172,"days":71.0,"loc_per_day":2.4,"flagged":false},{"from":"v0.8.1","to":"v0.8.2","loc":47,"days":25.24,"loc_per_day":1.9,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":10755.0,"index":0.511,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":11.0,"per_kloc:emoji_in_code":1.023,"files:emoji_in_code":2.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":2.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[{"rule_id":"gitleaks/private-key","severity":"high","message":"Possible private-key secret in the current tree","path":"src/components/JwtTool.tsx","line":651,"fingerprint":"src/components/JwtTool.tsx:private-key:651"},{"rule_id":"gitleaks/jwt","severity":"high","message":"Possible jwt secret in the current tree","path":"src/components/JwtTool.tsx","line":39,"fingerprint":"src/components/JwtTool.tsx:jwt:39"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":9.0,"findings_high":1.0,"findings_medium":7.0,"findings_low":1.0,"weighted_findings":5.112,"scanned_lines":10755.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/dockerfile.security.missing-user","severity":"high","message":"By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium]","path":"docs/Dockerfile","line":20,"fingerprint":"dockerfile.security.missing-user:docs/Dockerfile:20"},{"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/pre-release-check.js","line":22,"fingerprint":"javascript.lang.security.audit.detect-non-literal-fs-filename:scripts/pre-release-check.js:22"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `version` 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":"scripts/pre-release-check.js","line":89,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:scripts/pre-release-check.js:89"},{"rule_id":"opengrep/rust.lang.security.insecure-hashes","severity":"medium","message":"Detected cryptographically insecure hashing function [confidence high]","path":"src-tauri/src/main.rs","line":71,"fingerprint":"rust.lang.security.insecure-hashes:src-tauri/src/main.rs:71"},{"rule_id":"opengrep/rust.lang.security.insecure-hashes","severity":"medium","message":"Detected cryptographically insecure hashing function [confidence high]","path":"src-tauri/src/main.rs","line":156,"fingerprint":"rust.lang.security.insecure-hashes:src-tauri/src/main.rs:156"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `flags` 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-controlle [confidence low]","path":"src/components/RegexTester.tsx","line":26,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/components/RegexTester.tsx:26"},{"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/components/RegexTester.tsx","line":26,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/components/RegexTester.tsx:26"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `i` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low]","path":"src/components/RegexTester.tsx","line":224,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/components/RegexTester.tsx:224"},{"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":"scripts/pre-release-check.js","line":24,"fingerprint":"javascript.lang.security.audit.unsafe-formatstring:scripts/pre-release-check.js:24"}],"evidence":[],"data":{"rulesets":["typescript","javascript","rust","dockerfile"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":13.0,"vulnerabilities":43.0,"vulns_critical":1.0,"vulns_high":22.0,"vulns_medium":16.0,"vulns_low":4.0,"vulns_unknown":0.0,"penalty":94.0},"findings":[{"rule_id":"osv/GHSA-23hp-3jrh-7fpw","severity":"critical","message":"tar@7.4.3 (npm) is affected by GHSA-23hp-3jrh-7fpw","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-23hp-3jrh-7fpw"},{"rule_id":"osv/GHSA-73wf-gq98-2v4g","severity":"high","message":"browserslist@4.25.0 (npm) is affected by GHSA-73wf-gq98-2v4g","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.25.0 (npm):GHSA-73wf-gq98-2v4g"},{"rule_id":"osv/GHSA-c83g-rgw3-j3cx","severity":"high","message":"browserslist@4.25.0 (npm) is affected by GHSA-c83g-rgw3-j3cx","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.25.0 (npm):GHSA-c83g-rgw3-j3cx"},{"rule_id":"osv/GHSA-28wg-ghj8-5hjv","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-28wg-ghj8-5hjv"},{"rule_id":"osv/GHSA-2v37-7h3g-55p8","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-2v37-7h3g-55p8","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-2v37-7h3g-55p8"},{"rule_id":"osv/GHSA-xwg4-73v4-xw9w","severity":"high","message":"nanoid@3.3.11 (npm) is affected by GHSA-xwg4-73v4-xw9w","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.11 (npm):GHSA-xwg4-73v4-xw9w"},{"rule_id":"osv/GHSA-c2c7-rcm5-vvqj","severity":"high","message":"picomatch@2.3.1 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"package-lock.json","line":null,"fingerprint":"picomatch@2.3.1 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-c2c7-rcm5-vvqj","severity":"high","message":"picomatch@4.0.2 (npm) is affected by GHSA-c2c7-rcm5-vvqj","path":"package-lock.json","line":null,"fingerprint":"picomatch@4.0.2 (npm):GHSA-c2c7-rcm5-vvqj"},{"rule_id":"osv/GHSA-6g55-p6wh-862q","severity":"high","message":"postcss@8.5.6 (npm) is affected by GHSA-6g55-p6wh-862q","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-6g55-p6wh-862q"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.6 (npm) is affected by GHSA-r28c-9q8g-f849","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-mw96-cpmx-2vgc","severity":"high","message":"rollup@4.44.0 (npm) is affected by GHSA-mw96-cpmx-2vgc","path":"package-lock.json","line":null,"fingerprint":"rollup@4.44.0 (npm):GHSA-mw96-cpmx-2vgc"},{"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":"package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-34x7-hfp2-rc4v","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-34x7-hfp2-rc4v","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-34x7-hfp2-rc4v"},{"rule_id":"osv/GHSA-83g3-92jg-28cx","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-83g3-92jg-28cx","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-83g3-92jg-28cx"},{"rule_id":"osv/GHSA-8qq5-rm4j-mr97","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-8qq5-rm4j-mr97","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-8qq5-rm4j-mr97"},{"rule_id":"osv/GHSA-8x88-c5mf-7j5w","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-8x88-c5mf-7j5w","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-8x88-c5mf-7j5w"},{"rule_id":"osv/GHSA-9ppj-qmqm-q256","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-9ppj-qmqm-q256","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-9ppj-qmqm-q256"},{"rule_id":"osv/GHSA-qffp-2rhf-9h96","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-qffp-2rhf-9h96","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-qffp-2rhf-9h96"},{"rule_id":"osv/GHSA-r292-9mhp-454m","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-r292-9mhp-454m","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-r292-9mhp-454m"},{"rule_id":"osv/GHSA-r6q2-hw4h-h46w","severity":"high","message":"tar@7.4.3 (npm) is affected by GHSA-r6q2-hw4h-h46w","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-r6q2-hw4h-h46w"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"vite@6.3.5 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-p9ff-h696-f583","severity":"high","message":"vite@6.3.5 (npm) is affected by GHSA-p9ff-h696-f583","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-p9ff-h696-f583"},{"rule_id":"osv/GHSA-mrhx-c7xc-m3w5","severity":"high","message":"zod@3.25.67 (npm) is affected by GHSA-mrhx-c7xc-m3w5","path":"package-lock.json","line":null,"fingerprint":"zod@3.25.67 (npm):GHSA-mrhx-c7xc-m3w5"},{"rule_id":"osv/GHSA-4fh9-h7wg-q85m","severity":"medium","message":"mdast-util-to-hast@13.2.0 (npm) is affected by GHSA-4fh9-h7wg-q85m","path":"package-lock.json","line":null,"fingerprint":"mdast-util-to-hast@13.2.0 (npm):GHSA-4fh9-h7wg-q85m"},{"rule_id":"osv/GHSA-3v7f-55p6-f55p","severity":"medium","message":"picomatch@2.3.1 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"package-lock.json","line":null,"fingerprint":"picomatch@2.3.1 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-3v7f-55p6-f55p","severity":"medium","message":"picomatch@4.0.2 (npm) is affected by GHSA-3v7f-55p6-f55p","path":"package-lock.json","line":null,"fingerprint":"picomatch@4.0.2 (npm):GHSA-3v7f-55p6-f55p"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.6 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-qx2v-qp2m-jg93","severity":"medium","message":"postcss@8.5.6 (npm) is affected by GHSA-qx2v-qp2m-jg93","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.6 (npm):GHSA-qx2v-qp2m-jg93"},{"rule_id":"osv/GHSA-x7hr-w5r2-h6wg","severity":"medium","message":"prismjs@1.27.0 (npm) is affected by GHSA-x7hr-w5r2-h6wg","path":"package-lock.json","line":null,"fingerprint":"prismjs@1.27.0 (npm):GHSA-x7hr-w5r2-h6wg"},{"rule_id":"osv/GHSA-gvwx-54wh-qm9j","severity":"medium","message":"tar@7.4.3 (npm) is affected by GHSA-gvwx-54wh-qm9j","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-gvwx-54wh-qm9j"},{"rule_id":"osv/GHSA-vmf3-w455-68vh","severity":"medium","message":"tar@7.4.3 (npm) is affected by GHSA-vmf3-w455-68vh","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-vmf3-w455-68vh"},{"rule_id":"osv/GHSA-w8wr-v893-vjvp","severity":"medium","message":"tar@7.4.3 (npm) is affected by GHSA-w8wr-v893-vjvp","path":"package-lock.json","line":null,"fingerprint":"tar@7.4.3 (npm):GHSA-w8wr-v893-vjvp"},{"rule_id":"osv/GHSA-4w7w-66w2-5vf9","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-4w7w-66w2-5vf9","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-4w7w-66w2-5vf9"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-93m4-6634-74q7","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-93m4-6634-74q7","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-93m4-6634-74q7"},{"rule_id":"osv/GHSA-fx2h-pf6j-xcff","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-fx2h-pf6j-xcff","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-fx2h-pf6j-xcff"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/GHSA-v6wh-96g9-6wx3","severity":"medium","message":"vite@6.3.5 (npm) is affected by GHSA-v6wh-96g9-6wx3","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-v6wh-96g9-6wx3"},{"rule_id":"osv/GHSA-4x5r-pxfx-6jf8","severity":"low","message":"@babel/core@7.27.4 (npm) is affected by GHSA-4x5r-pxfx-6jf8","path":"package-lock.json","line":null,"fingerprint":"@babel/core@7.27.4 (npm):GHSA-4x5r-pxfx-6jf8"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@6.3.5 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-9jrq-w75r-8gcw"},{"rule_id":"osv/GHSA-g4jq-h2w9-997c","severity":"low","message":"vite@6.3.5 (npm) is affected by GHSA-g4jq-h2w9-997c","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-g4jq-h2w9-997c"},{"rule_id":"osv/GHSA-jqfw-vq24-v9c3","severity":"low","message":"vite@6.3.5 (npm) is affected by GHSA-jqfw-vq24-v9c3","path":"package-lock.json","line":null,"fingerprint":"vite@6.3.5 (npm):GHSA-jqfw-vq24-v9c3"}],"evidence":[],"data":{"ecosystems":["npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":2.0,"findings":22.0,"findings_high":15.0,"findings_medium":4.0,"findings_low":3.0,"penalty":169.2},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":37,"fingerprint":"unpinned-uses:.github/workflows/build.yml:37"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":46,"fingerprint":"unpinned-uses:.github/workflows/build.yml:46"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":51,"fingerprint":"unpinned-uses:.github/workflows/build.yml:51"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":56,"fingerprint":"unpinned-uses:.github/workflows/build.yml:56"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":68,"fingerprint":"unpinned-uses:.github/workflows/build.yml:68"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":77,"fingerprint":"unpinned-uses:.github/workflows/build.yml:77"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":98,"fingerprint":"unpinned-uses:.github/workflows/build.yml:98"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":101,"fingerprint":"unpinned-uses:.github/workflows/build.yml:101"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build.yml","line":206,"fingerprint":"unpinned-uses:.github/workflows/build.yml:206"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":51,"fingerprint":"cache-poisoning:.github/workflows/build.yml:51"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build.yml","line":56,"fingerprint":"cache-poisoning:.github/workflows/build.yml:56"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-check.yml","line":15,"fingerprint":"unpinned-uses:.github/workflows/pr-check.yml:15"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-check.yml","line":23,"fingerprint":"unpinned-uses:.github/workflows/pr-check.yml:23"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-check.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/pr-check.yml:26"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/pr-check.yml","line":31,"fingerprint":"unpinned-uses:.github/workflows/pr-check.yml:31"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":36,"fingerprint":"artipacked:.github/workflows/build.yml:36"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build.yml","line":97,"fingerprint":"artipacked:.github/workflows/build.yml:97"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/pr-check.yml","line":14,"fingerprint":"artipacked:.github/workflows/pr-check.yml:14"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/pr-check.yml","line":11,"fingerprint":"excessive-permissions:.github/workflows/pr-check.yml:11"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/build.yml","line":118,"fingerprint":"template-injection:.github/workflows/build.yml:118"},{"rule_id":"zizmor/template-injection","severity":"info","message":"code injection via template expansion [confidence low]","path":".github/workflows/build.yml","line":155,"fingerprint":"template-injection:.github/workflows/build.yml:155"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/build.yml","line":206,"fingerprint":"superfluous-actions:.github/workflows/build.yml:206"}],"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":0.0,"signed_commit_share":0.018,"unpinned_manifests":2.0},"findings":[],"evidence":[{"kind":"posture","description":"docs/Gemfile has no lockfile alongside it (unpinned dependencies)","ref":"docs/Gemfile","url":null,"weight":0.3},{"kind":"posture","description":"src-tauri/Cargo.toml has no lockfile alongside it (unpinned dependencies)","ref":"src-tauri/Cargo.toml","url":null,"weight":0.3}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":89.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v0.8.2 ships control.tar.gz (0 downloads)","ref":"control.tar.gz","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/control.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v0.8.2 ships data.tar.gz (0 downloads)","ref":"data.tar.gz","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/data.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v0.8.2 ships devworkbench.exe (2 downloads)","ref":"devworkbench.exe","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/devworkbench.exe","weight":0.0},{"kind":"binary-release-asset","description":"release v0.8.2 ships DevWorkbench_0.8.2_aarch64.app.tar.gz (2 downloads)","ref":"DevWorkbench_0.8.2_aarch64.app.tar.gz","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_aarch64.app.tar.gz","weight":0.0},{"kind":"binary-release-asset","description":"release v0.8.2 ships DevWorkbench_0.8.2_aarch64.dmg (0 downloads)","ref":"DevWorkbench_0.8.2_aarch64.dmg","url":"https://github.com/jiayun/DevWorkbench/releases/download/v0.8.2/DevWorkbench_0.8.2_aarch64.dmg","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":614.0,"function_nloc":7825.0,"mean_ccn":2.76,"p90_ccn":6.0,"complex_functions":14.0,"long_functions":14.0,"many_param_functions":0.0,"risky_nloc_share":0.4221},"findings":[],"evidence":[{"kind":"complex-function","description":"JwtTool in src/components/JwtTool.tsx: complexity 35, 334 lines","ref":"src/components/JwtTool.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/JwtTool.tsx#L213","weight":0.5833333333333334},{"kind":"complex-function","description":"normalize_single_quoted_strings in src-tauri/src/json_repair.rs: complexity 33, 99 lines","ref":"src-tauri/src/json_repair.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/json_repair.rs#L45","weight":0.55},{"kind":"complex-function","description":"OpenApiSpecFilter in src/components/OpenApiSpecFilter.tsx: complexity 28, 221 lines","ref":"src/components/OpenApiSpecFilter.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/OpenApiSpecFilter.tsx#L293","weight":0.4666666666666667},{"kind":"complex-function","description":"UrlTools in src/components/UrlTools.tsx: complexity 26, 238 lines","ref":"src/components/UrlTools.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/UrlTools.tsx#L22","weight":0.43333333333333335},{"kind":"complex-function","description":"UpdateDialog in src/components/UpdateDialog.tsx: complexity 24, 142 lines","ref":"src/components/UpdateDialog.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/UpdateDialog.tsx#L14","weight":0.4},{"kind":"complex-function","description":"main in src-tauri/src/main.rs: complexity 23, 76 lines","ref":"src-tauri/src/main.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/main.rs#L205","weight":0.38333333333333336},{"kind":"complex-function","description":"generateHashes in src/components/HashGenerator.tsx: complexity 23, 58 lines","ref":"src/components/HashGenerator.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/HashGenerator.tsx#L35","weight":0.38333333333333336},{"kind":"complex-function","description":"handleFileLoad in src/components/HashGenerator.tsx: complexity 21, 43 lines","ref":"src/components/HashGenerator.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/HashGenerator.tsx#L147","weight":0.35},{"kind":"complex-function","description":"JsonFormatter in src/components/JsonFormatter.tsx: complexity 21, 207 lines","ref":"src/components/JsonFormatter.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/JsonFormatter.tsx#L14","weight":0.35},{"kind":"complex-function","description":"verify_jwt in src-tauri/src/jwt_tool.rs: complexity 19, 102 lines","ref":"src-tauri/src/jwt_tool.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/jwt_tool.rs#L135","weight":0.31666666666666665}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":8143.0,"duplicated_lines":1359.0,"duplicated_share":0.1669,"files":40.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/jwt_tool.rs:105 and src-tauri/src/jwt_tool.rs:143","ref":"src-tauri/src/jwt_tool.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/jwt_tool.rs#L105","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/main.rs:48 and src-tauri/src/main.rs:133","ref":"src-tauri/src/main.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/main.rs#L48","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src-tauri/src/regex_tester.rs:60 and src-tauri/src/regex_tester.rs:85","ref":"src-tauri/src/regex_tester.rs","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src-tauri/src/regex_tester.rs#L60","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/App.tsx:210 and src/components/UuidGenerator.tsx:152","ref":"src/App.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/App.tsx#L210","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/App.tsx:217 and src/components/JsonFormatter.tsx:373","ref":"src/App.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/App.tsx#L217","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/Base58EncoderDecoder.tsx:114 and src/components/Base64EncoderDecoder.tsx:16","ref":"src/components/Base58EncoderDecoder.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/Base58EncoderDecoder.tsx#L114","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/Base58EncoderDecoder.tsx:289 and src/components/Base58EncoderDecoder.tsx:308","ref":"src/components/Base58EncoderDecoder.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/Base58EncoderDecoder.tsx#L289","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/CronJobParser.tsx:132 and src/components/UnixTimeConverter.tsx:122","ref":"src/components/CronJobParser.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/CronJobParser.tsx#L132","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/HashGenerator.tsx:19 and src/components/HashGenerator.tsx:67","ref":"src/components/HashGenerator.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/HashGenerator.tsx#L19","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/HashGenerator.tsx:303 and src/components/NumberBaseConverter.tsx:617","ref":"src/components/HashGenerator.tsx","url":"https://github.com/jiayun/DevWorkbench/blob/27f0d1a6d5dd851911d43a268d57ed39ccd3f81b/src/components/HashGenerator.tsx#L303","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":19.0,"weighted_findings":19.0,"scanned_lines":10755.0,"category:best-practice":19.0},"findings":[{"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/JsonViewer.tsx","line":167,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JsonViewer.tsx:167"},{"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/JsonViewer.tsx","line":186,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JsonViewer.tsx:186"},{"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/JsonViewer.tsx","line":240,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JsonViewer.tsx:240"},{"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/JsonViewer.tsx","line":259,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JsonViewer.tsx:259"},{"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/JwtTool.tsx","line":126,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JwtTool.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/JwtTool.tsx","line":136,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JwtTool.tsx:136"},{"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/JwtTool.tsx","line":146,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JwtTool.tsx:146"},{"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/JwtTool.tsx","line":197,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/JwtTool.tsx:197"},{"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":45,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Button.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/Card.tsx","line":38,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Card.tsx:38"},{"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":50,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Card.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/Card.tsx","line":61,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Card.tsx:61"},{"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":74,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Card.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/Card.tsx","line":82,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Card.tsx:82"},{"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/Input.tsx","line":50,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Input.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/Panel.tsx","line":41,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Panel.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/ui/Select.tsx","line":52,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Select.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/ui/Textarea.tsx","line":63,"fingerprint":"typescript.react.best-practice.react-props-spreading:src/components/ui/Textarea.tsx:63"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":1.0,"check:ci_runs_tests":1.0,"check:ci_runs_lint":1.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":10755.0,"test_ratio":0.0,"ci_files":2.0,"cochange_share":0.0,"cochange_commits":69.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/build.yml","ref":".github/workflows/build.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/pr-check.yml","ref":".github/workflows/pr-check.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI runs tests (go test, cargo test)","ref":null,"url":null,"weight":0.0},{"kind":"ci","description":"CI runs linters (tsc --noEmit)","ref":null,"url":null,"weight":0.0}],"data":{"test_commands":["go test","cargo test"],"lint_commands":["tsc --noEmit"]},"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":106.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":29.0,"escapes_per_kloc":3.14},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":10583.0,"other_lines":172.0,"files_blamed":40.0,"blame_failures":0.0,"quality:ai_findings":19.0,"quality:ai_per_kloc":1.795,"quality:other_findings":0.0,"quality:other_per_kloc":0.0,"security:ai_findings":10.0,"security:ai_per_kloc":0.945,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}