codedna 0.6.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. {codedna-0.6.0 → codedna-0.7.0}/.gitignore +0 -1
  2. codedna-0.7.0/PKG-INFO +70 -0
  3. codedna-0.7.0/README.md +52 -0
  4. codedna-0.7.0/codedna/__init__.py +4 -0
  5. codedna-0.7.0/codedna/ai_fingerprint.py +223 -0
  6. codedna-0.7.0/codedna/analyzer.py +245 -0
  7. codedna-0.7.0/codedna/api.py +1505 -0
  8. codedna-0.7.0/codedna/api.py.bak +1505 -0
  9. {codedna-0.6.0 → codedna-0.7.0}/codedna/auth.py +107 -126
  10. codedna-0.7.0/codedna/auth.py.bak2 +353 -0
  11. codedna-0.7.0/codedna/bus_factor.py +259 -0
  12. codedna-0.7.0/codedna/cli.py +1719 -0
  13. {codedna-0.6.0 → codedna-0.7.0}/codedna/db.py +22 -22
  14. codedna-0.7.0/codedna/git_hook.py +212 -0
  15. codedna-0.7.0/codedna/integrations/__init__.py +1 -0
  16. codedna-0.7.0/codedna/integrations/github_bot.py +259 -0
  17. codedna-0.7.0/codedna/integrations/jira.py +166 -0
  18. codedna-0.7.0/codedna/integrations/lemonsqueezy.py +236 -0
  19. codedna-0.7.0/codedna/interview.py +298 -0
  20. codedna-0.7.0/codedna/onboarding.py +195 -0
  21. codedna-0.7.0/codedna/plan.py +143 -0
  22. codedna-0.7.0/codedna/protection.py +211 -0
  23. codedna-0.7.0/codedna/rate_limit.py +83 -0
  24. codedna-0.7.0/codedna/scorer.py +221 -0
  25. codedna-0.7.0/codedna/sprint_health.py +187 -0
  26. codedna-0.7.0/codedna/survey.py +104 -0
  27. codedna-0.7.0/codedna/tech_debt.py +232 -0
  28. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/ai-compare/page.tsx +62 -45
  29. codedna-0.7.0/dashboard/app/api/auth/login/route.ts +52 -0
  30. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/api/auth/logout/route.ts +6 -6
  31. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/api/auth/me/route.ts +7 -7
  32. codedna-0.7.0/dashboard/app/api/auth/register/route.ts +48 -0
  33. codedna-0.7.0/dashboard/app/api/billing/checkout/route.ts +47 -0
  34. codedna-0.7.0/dashboard/app/billing/page.tsx +253 -0
  35. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/bus-factor/page.tsx +57 -54
  36. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/commits/page.tsx +28 -28
  37. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/debt/page.tsx +166 -89
  38. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/files/page.tsx +23 -23
  39. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/globals.css +1 -1
  40. codedna-0.7.0/dashboard/app/interview/page.tsx +225 -0
  41. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/layout.tsx +4 -4
  42. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/login/page.tsx +20 -20
  43. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/onboarding/page.tsx +110 -92
  44. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/page.tsx +15 -15
  45. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/pricing/page.tsx +95 -142
  46. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/protected/page.tsx +74 -75
  47. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/register/page.tsx +23 -23
  48. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/settings/integrations/page.tsx +49 -65
  49. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/sprints/page.tsx +173 -109
  50. codedna-0.6.0/dashboard/components/UnderstandingChart.tsx → codedna-0.7.0/dashboard/components/AnlamaGrafigi.tsx +19 -20
  51. codedna-0.7.0/dashboard/components/AuthProvider.tsx +53 -0
  52. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/CommitTable.tsx +42 -42
  53. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/CostInfoTooltip.tsx +11 -11
  54. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/FeatureGate.tsx +14 -13
  55. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/FileHeatmap.tsx +26 -26
  56. codedna-0.6.0/dashboard/components/ErrorBanner.tsx → codedna-0.7.0/dashboard/components/HataBanner.tsx +3 -4
  57. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/LanguageSwitcher.tsx +11 -11
  58. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/NavClient.tsx +8 -8
  59. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/OverviewTitles.tsx +1 -1
  60. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/QuickInsights.tsx +30 -39
  61. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/RiskBadge.tsx +14 -10
  62. codedna-0.7.0/dashboard/components/SummaryCards.tsx +100 -0
  63. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/UpgradeBanner.tsx +2 -2
  64. {codedna-0.6.0 → codedna-0.7.0}/dashboard/lib/api.ts +2 -18
  65. codedna-0.7.0/dashboard/lib/auth.ts +131 -0
  66. {codedna-0.6.0 → codedna-0.7.0}/dashboard/lib/i18n/en.ts +48 -9
  67. {codedna-0.6.0 → codedna-0.7.0}/dashboard/lib/i18n/index.tsx +15 -16
  68. {codedna-0.6.0 → codedna-0.7.0}/dashboard/lib/i18n/tr.ts +40 -1
  69. {codedna-0.6.0 → codedna-0.7.0}/dashboard/lib/plan.ts +16 -16
  70. {codedna-0.6.0 → codedna-0.7.0}/dashboard/next.config.mjs +0 -1
  71. codedna-0.7.0/pyproject.toml +39 -0
  72. codedna-0.6.0/.env.example +0 -38
  73. codedna-0.6.0/.github/CODEOWNERS +0 -2
  74. codedna-0.6.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  75. codedna-0.6.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -27
  76. codedna-0.6.0/.github/PULL_REQUEST_TEMPLATE.md +0 -21
  77. codedna-0.6.0/.github/dependabot.yml +0 -6
  78. codedna-0.6.0/.github/workflows/codedna.yml +0 -53
  79. codedna-0.6.0/.github/workflows/codeql.yml +0 -32
  80. codedna-0.6.0/.github/workflows/test.yml +0 -26
  81. codedna-0.6.0/.python-version +0 -1
  82. codedna-0.6.0/CHANGELOG.md +0 -253
  83. codedna-0.6.0/CONTRIBUTING.md +0 -52
  84. codedna-0.6.0/LICENSE +0 -21
  85. codedna-0.6.0/PKG-INFO +0 -568
  86. codedna-0.6.0/README.md +0 -516
  87. codedna-0.6.0/SECURITY.md +0 -40
  88. codedna-0.6.0/codedna/__init__.py +0 -4
  89. codedna-0.6.0/codedna/ai.py +0 -240
  90. codedna-0.6.0/codedna/ai_box.py +0 -94
  91. codedna-0.6.0/codedna/ai_fingerprint.py +0 -220
  92. codedna-0.6.0/codedna/analyzer.py +0 -245
  93. codedna-0.6.0/codedna/api.py +0 -1441
  94. codedna-0.6.0/codedna/bus_factor.py +0 -258
  95. codedna-0.6.0/codedna/cli.py +0 -2675
  96. codedna-0.6.0/codedna/demo.py +0 -245
  97. codedna-0.6.0/codedna/git_hook.py +0 -210
  98. codedna-0.6.0/codedna/integrations/__init__.py +0 -1
  99. codedna-0.6.0/codedna/integrations/github_bot.py +0 -259
  100. codedna-0.6.0/codedna/integrations/jira.py +0 -165
  101. codedna-0.6.0/codedna/integrations/lemonsqueezy.py +0 -229
  102. codedna-0.6.0/codedna/interview.py +0 -296
  103. codedna-0.6.0/codedna/mail.py +0 -335
  104. codedna-0.6.0/codedna/onboarding.py +0 -195
  105. codedna-0.6.0/codedna/plan.py +0 -191
  106. codedna-0.6.0/codedna/protection.py +0 -211
  107. codedna-0.6.0/codedna/rate_limit.py +0 -83
  108. codedna-0.6.0/codedna/scorer.py +0 -221
  109. codedna-0.6.0/codedna/sprint_health.py +0 -185
  110. codedna-0.6.0/codedna/survey.py +0 -104
  111. codedna-0.6.0/codedna/tech_debt.py +0 -230
  112. codedna-0.6.0/dashboard/app/api/auth/login/route.ts +0 -52
  113. codedna-0.6.0/dashboard/app/api/auth/register/route.ts +0 -48
  114. codedna-0.6.0/dashboard/app/api/billing/checkout/route.ts +0 -49
  115. codedna-0.6.0/dashboard/app/billing/page.tsx +0 -260
  116. codedna-0.6.0/dashboard/app/interview/page.tsx +0 -230
  117. codedna-0.6.0/dashboard/components/AuthProvider.tsx +0 -53
  118. codedna-0.6.0/dashboard/components/SummaryCards.tsx +0 -100
  119. codedna-0.6.0/dashboard/lib/auth.ts +0 -131
  120. codedna-0.6.0/hooks/post-commit +0 -28
  121. codedna-0.6.0/pyproject.toml +0 -77
  122. codedna-0.6.0/uv.lock +0 -949
  123. codedna-0.6.0/vscode-extension/.vscodeignore +0 -6
  124. codedna-0.6.0/vscode-extension/MARKETPLACE_README.md +0 -68
  125. codedna-0.6.0/vscode-extension/PUBLISH.md +0 -64
  126. codedna-0.6.0/vscode-extension/images/icon.png +0 -0
  127. codedna-0.6.0/vscode-extension/node_modules/.bin/tsc +0 -1
  128. codedna-0.6.0/vscode-extension/node_modules/.bin/tsserver +0 -1
  129. codedna-0.6.0/vscode-extension/node_modules/.package-lock.json +0 -46
  130. codedna-0.6.0/vscode-extension/node_modules/@types/node/LICENSE +0 -21
  131. codedna-0.6.0/vscode-extension/node_modules/@types/node/README.md +0 -15
  132. codedna-0.6.0/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -8
  133. codedna-0.6.0/vscode-extension/node_modules/@types/node/assert.d.ts +0 -1062
  134. codedna-0.6.0/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -605
  135. codedna-0.6.0/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -471
  136. codedna-0.6.0/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -1936
  137. codedna-0.6.0/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -1475
  138. codedna-0.6.0/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -577
  139. codedna-0.6.0/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -16
  140. codedna-0.6.0/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -9
  141. codedna-0.6.0/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  142. codedna-0.6.0/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -21
  143. codedna-0.6.0/vscode-extension/node_modules/@types/node/console.d.ts +0 -452
  144. codedna-0.6.0/vscode-extension/node_modules/@types/node/constants.d.ts +0 -21
  145. codedna-0.6.0/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -4590
  146. codedna-0.6.0/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -597
  147. codedna-0.6.0/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
  148. codedna-0.6.0/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -479
  149. codedna-0.6.0/vscode-extension/node_modules/@types/node/dns.d.ts +0 -871
  150. codedna-0.6.0/vscode-extension/node_modules/@types/node/domain.d.ts +0 -170
  151. codedna-0.6.0/vscode-extension/node_modules/@types/node/events.d.ts +0 -977
  152. codedna-0.6.0/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -1270
  153. codedna-0.6.0/vscode-extension/node_modules/@types/node/fs.d.ts +0 -4375
  154. codedna-0.6.0/vscode-extension/node_modules/@types/node/globals.d.ts +0 -172
  155. codedna-0.6.0/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -38
  156. codedna-0.6.0/vscode-extension/node_modules/@types/node/http.d.ts +0 -2049
  157. codedna-0.6.0/vscode-extension/node_modules/@types/node/http2.d.ts +0 -2712
  158. codedna-0.6.0/vscode-extension/node_modules/@types/node/https.d.ts +0 -578
  159. codedna-0.6.0/vscode-extension/node_modules/@types/node/index.d.ts +0 -93
  160. codedna-0.6.0/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -3966
  161. codedna-0.6.0/vscode-extension/node_modules/@types/node/module.d.ts +0 -539
  162. codedna-0.6.0/vscode-extension/node_modules/@types/node/net.d.ts +0 -1031
  163. codedna-0.6.0/vscode-extension/node_modules/@types/node/os.d.ts +0 -506
  164. codedna-0.6.0/vscode-extension/node_modules/@types/node/package.json +0 -140
  165. codedna-0.6.0/vscode-extension/node_modules/@types/node/path.d.ts +0 -200
  166. codedna-0.6.0/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -961
  167. codedna-0.6.0/vscode-extension/node_modules/@types/node/process.d.ts +0 -1961
  168. codedna-0.6.0/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -117
  169. codedna-0.6.0/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -152
  170. codedna-0.6.0/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -162
  171. codedna-0.6.0/vscode-extension/node_modules/@types/node/readline.d.ts +0 -589
  172. codedna-0.6.0/vscode-extension/node_modules/@types/node/repl.d.ts +0 -430
  173. codedna-0.6.0/vscode-extension/node_modules/@types/node/sea.d.ts +0 -153
  174. codedna-0.6.0/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -38
  175. codedna-0.6.0/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -90
  176. codedna-0.6.0/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -533
  177. codedna-0.6.0/vscode-extension/node_modules/@types/node/stream.d.ts +0 -1698
  178. codedna-0.6.0/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -67
  179. codedna-0.6.0/vscode-extension/node_modules/@types/node/test.d.ts +0 -1787
  180. codedna-0.6.0/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -108
  181. codedna-0.6.0/vscode-extension/node_modules/@types/node/timers.d.ts +0 -286
  182. codedna-0.6.0/vscode-extension/node_modules/@types/node/tls.d.ts +0 -1259
  183. codedna-0.6.0/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -197
  184. codedna-0.6.0/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
  185. codedna-0.6.0/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
  186. codedna-0.6.0/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -93
  187. codedna-0.6.0/vscode-extension/node_modules/@types/node/tty.d.ts +0 -208
  188. codedna-0.6.0/vscode-extension/node_modules/@types/node/url.d.ts +0 -964
  189. codedna-0.6.0/vscode-extension/node_modules/@types/node/util.d.ts +0 -2331
  190. codedna-0.6.0/vscode-extension/node_modules/@types/node/v8.d.ts +0 -809
  191. codedna-0.6.0/vscode-extension/node_modules/@types/node/vm.d.ts +0 -1001
  192. codedna-0.6.0/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -181
  193. codedna-0.6.0/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
  194. codedna-0.6.0/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
  195. codedna-0.6.0/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -97
  196. codedna-0.6.0/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
  197. codedna-0.6.0/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -715
  198. codedna-0.6.0/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -598
  199. codedna-0.6.0/vscode-extension/node_modules/@types/vscode/LICENSE +0 -21
  200. codedna-0.6.0/vscode-extension/node_modules/@types/vscode/README.md +0 -15
  201. codedna-0.6.0/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -21240
  202. codedna-0.6.0/vscode-extension/node_modules/@types/vscode/package.json +0 -26
  203. codedna-0.6.0/vscode-extension/node_modules/typescript/LICENSE.txt +0 -55
  204. codedna-0.6.0/vscode-extension/node_modules/typescript/README.md +0 -50
  205. codedna-0.6.0/vscode-extension/node_modules/typescript/SECURITY.md +0 -41
  206. codedna-0.6.0/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -193
  207. codedna-0.6.0/vscode-extension/node_modules/typescript/bin/tsc +0 -2
  208. codedna-0.6.0/vscode-extension/node_modules/typescript/bin/tsserver +0 -2
  209. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -133818
  210. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -659
  211. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -222
  212. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
  213. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
  214. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
  215. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
  216. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
  217. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
  218. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
  219. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -22
  220. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -384
  221. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -22
  222. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -41
  223. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -39429
  224. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -571
  225. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -147
  226. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -597
  227. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -28
  228. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -77
  229. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -605
  230. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -81
  231. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -128
  232. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -144
  233. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -46
  234. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -326
  235. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -116
  236. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -21
  237. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -23
  238. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -31
  239. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -21
  240. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -26
  241. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -31
  242. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -23
  243. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -44
  244. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -49
  245. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -135
  246. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -45
  247. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -53
  248. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -77
  249. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -53
  250. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -24
  251. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -24
  252. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -83
  253. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -30
  254. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -37
  255. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -79
  256. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -24
  257. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -24
  258. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -23
  259. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -33
  260. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -37
  261. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -24
  262. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -765
  263. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -27
  264. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -42
  265. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -24
  266. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -474
  267. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -28
  268. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -47
  269. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -99
  270. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -44
  271. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -41
  272. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -23
  273. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -24
  274. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -166
  275. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -48
  276. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -33
  277. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -78
  278. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -121
  279. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -25
  280. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -75
  281. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -24
  282. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -145
  283. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -26
  284. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -39
  285. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -25
  286. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -924
  287. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -21
  288. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -22
  289. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -24
  290. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -56
  291. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -65
  292. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -29
  293. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -26
  294. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -24
  295. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -29
  296. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -35
  297. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -25
  298. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -68
  299. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -29
  300. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -4601
  301. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -23
  302. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -35
  303. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -96
  304. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -29
  305. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -28
  306. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -193
  307. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -24
  308. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -445
  309. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -24
  310. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -21
  311. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -148
  312. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -34
  313. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -25
  314. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -322
  315. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -41
  316. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -13150
  317. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -23
  318. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -340
  319. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
  320. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
  321. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
  322. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
  323. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/tsc.js +0 -8
  324. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -8
  325. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -17
  326. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -21
  327. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -497
  328. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -11437
  329. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/typescript.js +0 -200276
  330. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -8
  331. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -53
  332. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -2122
  333. codedna-0.6.0/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -2122
  334. codedna-0.6.0/vscode-extension/node_modules/typescript/package.json +0 -120
  335. codedna-0.6.0/vscode-extension/node_modules/undici-types/LICENSE +0 -21
  336. codedna-0.6.0/vscode-extension/node_modules/undici-types/README.md +0 -6
  337. codedna-0.6.0/vscode-extension/node_modules/undici-types/agent.d.ts +0 -31
  338. codedna-0.6.0/vscode-extension/node_modules/undici-types/api.d.ts +0 -43
  339. codedna-0.6.0/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -29
  340. codedna-0.6.0/vscode-extension/node_modules/undici-types/cache.d.ts +0 -36
  341. codedna-0.6.0/vscode-extension/node_modules/undici-types/client.d.ts +0 -108
  342. codedna-0.6.0/vscode-extension/node_modules/undici-types/connector.d.ts +0 -34
  343. codedna-0.6.0/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -21
  344. codedna-0.6.0/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -28
  345. codedna-0.6.0/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -66
  346. codedna-0.6.0/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -256
  347. codedna-0.6.0/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -21
  348. codedna-0.6.0/vscode-extension/node_modules/undici-types/errors.d.ts +0 -149
  349. codedna-0.6.0/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -61
  350. codedna-0.6.0/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -209
  351. codedna-0.6.0/vscode-extension/node_modules/undici-types/file.d.ts +0 -39
  352. codedna-0.6.0/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -54
  353. codedna-0.6.0/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -108
  354. codedna-0.6.0/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -9
  355. codedna-0.6.0/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -7
  356. codedna-0.6.0/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -15
  357. codedna-0.6.0/vscode-extension/node_modules/undici-types/header.d.ts +0 -4
  358. codedna-0.6.0/vscode-extension/node_modules/undici-types/index.d.ts +0 -71
  359. codedna-0.6.0/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -17
  360. codedna-0.6.0/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -50
  361. codedna-0.6.0/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -25
  362. codedna-0.6.0/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -12
  363. codedna-0.6.0/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -93
  364. codedna-0.6.0/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -25
  365. codedna-0.6.0/vscode-extension/node_modules/undici-types/package.json +0 -55
  366. codedna-0.6.0/vscode-extension/node_modules/undici-types/patch.d.ts +0 -33
  367. codedna-0.6.0/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -19
  368. codedna-0.6.0/vscode-extension/node_modules/undici-types/pool.d.ts +0 -39
  369. codedna-0.6.0/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -28
  370. codedna-0.6.0/vscode-extension/node_modules/undici-types/readable.d.ts +0 -65
  371. codedna-0.6.0/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -8
  372. codedna-0.6.0/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -116
  373. codedna-0.6.0/vscode-extension/node_modules/undici-types/util.d.ts +0 -18
  374. codedna-0.6.0/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -228
  375. codedna-0.6.0/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -150
  376. codedna-0.6.0/vscode-extension/out/apiClient.js.map +0 -1
  377. codedna-0.6.0/vscode-extension/out/decorations.js.map +0 -1
  378. codedna-0.6.0/vscode-extension/out/extension.js.map +0 -1
  379. codedna-0.6.0/vscode-extension/out/statusBar.js.map +0 -1
  380. codedna-0.6.0/vscode-extension/package-lock.json +0 -58
  381. codedna-0.6.0/vscode-extension/package.json +0 -85
  382. codedna-0.6.0/vscode-extension/src/apiClient.ts +0 -99
  383. codedna-0.6.0/vscode-extension/src/decorations.ts +0 -81
  384. codedna-0.6.0/vscode-extension/src/extension.ts +0 -137
  385. codedna-0.6.0/vscode-extension/src/statusBar.ts +0 -140
  386. codedna-0.6.0/vscode-extension/tsconfig.json +0 -14
  387. {codedna-0.6.0 → codedna-0.7.0}/dashboard/.env.local.example +0 -0
  388. {codedna-0.6.0 → codedna-0.7.0}/dashboard/.gitignore +0 -0
  389. {codedna-0.6.0 → codedna-0.7.0}/dashboard/README.md +0 -0
  390. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/favicon.ico +0 -0
  391. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
  392. {codedna-0.6.0 → codedna-0.7.0}/dashboard/app/fonts/GeistVF.woff +0 -0
  393. {codedna-0.6.0 → codedna-0.7.0}/dashboard/components/ClientProviders.tsx +0 -0
  394. {codedna-0.6.0 → codedna-0.7.0}/dashboard/next-env.d.ts +0 -0
  395. {codedna-0.6.0 → codedna-0.7.0}/dashboard/package-lock.json +0 -0
  396. {codedna-0.6.0 → codedna-0.7.0}/dashboard/package.json +0 -0
  397. {codedna-0.6.0 → codedna-0.7.0}/dashboard/postcss.config.mjs +0 -0
  398. {codedna-0.6.0 → codedna-0.7.0}/dashboard/tailwind.config.ts +0 -0
  399. {codedna-0.6.0 → codedna-0.7.0}/dashboard/tsconfig.json +0 -0
@@ -24,4 +24,3 @@ dashboard/node_modules/
24
24
  .env
25
25
  .env.local
26
26
  .env.*.local
27
- .env.ls
codedna-0.7.0/PKG-INFO ADDED
@@ -0,0 +1,70 @@
1
+ Metadata-Version: 2.4
2
+ Name: codedna
3
+ Version: 0.7.0
4
+ Summary: AI kod şeffaflık aracı — her commit'te AI yazım oranını ve anlama skorunu ölçer
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: bcrypt>=5.0.0
7
+ Requires-Dist: fastapi>=0.138.0
8
+ Requires-Dist: gitpython>=3.1.50
9
+ Requires-Dist: pyjwt>=2.13.0
10
+ Requires-Dist: rich>=15.0.0
11
+ Requires-Dist: tree-sitter-javascript>=0.25.0
12
+ Requires-Dist: tree-sitter-python>=0.25.0
13
+ Requires-Dist: tree-sitter-typescript>=0.23.2
14
+ Requires-Dist: tree-sitter>=0.25.2
15
+ Requires-Dist: typer>=0.26.7
16
+ Requires-Dist: uvicorn[standard]>=0.49.0
17
+ Description-Content-Type: text/markdown
18
+
19
+ # 🧬 CodeDNA — AI Kod Şeffaflık Aracı
20
+
21
+ Her commit'te hangi kodun AI tarafından yazıldığını tespit eden, geliştiricinin o kodu gerçekten anlayıp anlamadığını ölçen ve takım genelinde "anlama borcu" haritası çıkaran CLI aracı.
22
+
23
+ ## Kurulum
24
+
25
+ ```bash
26
+ # Geliştirme ortamı için
27
+ uv pip install -e .
28
+
29
+ # veya
30
+ pip install codedna
31
+ ```
32
+
33
+ ## Kullanım
34
+
35
+ ```bash
36
+ # Git hook'u kur ve veritabanını oluştur
37
+ codedna init
38
+
39
+ # Tüm repoyu tara
40
+ codedna scan
41
+
42
+ # Son commit skorunu göster
43
+ codedna status
44
+
45
+ # Geçmiş commit skorlarını listele
46
+ codedna history
47
+
48
+ # Hook'u kaldır
49
+ codedna uninstall
50
+ ```
51
+
52
+ ## Nasıl Çalışır?
53
+
54
+ `codedna scan` komutu her desteklenen dosyayı (`*.py`, `*.js`, `*.ts`, `*.jsx`, `*.tsx`) analiz eder:
55
+
56
+ | Metrik | Açıklama |
57
+ |--------|----------|
58
+ | `comment_ratio > 0.3` | AI kodu genelde aşırı yorum yazar → +0.20 |
59
+ | `avg_function_length > 50` | AI büyük fonksiyon blokları üretir → +0.15 |
60
+ | `single_commit_ratio > 0.7` | Toplu yapıştırma işareti → +0.30 |
61
+ | Yüksek karmaşıklık + tek commit | AI imzası → +0.25 |
62
+
63
+ ## Gereksinimler
64
+
65
+ - Python 3.10+
66
+ - Git kurulu olmalı
67
+ # test
68
+ # test2
69
+ # test4
70
+ # test5
@@ -0,0 +1,52 @@
1
+ # 🧬 CodeDNA — AI Kod Şeffaflık Aracı
2
+
3
+ Her commit'te hangi kodun AI tarafından yazıldığını tespit eden, geliştiricinin o kodu gerçekten anlayıp anlamadığını ölçen ve takım genelinde "anlama borcu" haritası çıkaran CLI aracı.
4
+
5
+ ## Kurulum
6
+
7
+ ```bash
8
+ # Geliştirme ortamı için
9
+ uv pip install -e .
10
+
11
+ # veya
12
+ pip install codedna
13
+ ```
14
+
15
+ ## Kullanım
16
+
17
+ ```bash
18
+ # Git hook'u kur ve veritabanını oluştur
19
+ codedna init
20
+
21
+ # Tüm repoyu tara
22
+ codedna scan
23
+
24
+ # Son commit skorunu göster
25
+ codedna status
26
+
27
+ # Geçmiş commit skorlarını listele
28
+ codedna history
29
+
30
+ # Hook'u kaldır
31
+ codedna uninstall
32
+ ```
33
+
34
+ ## Nasıl Çalışır?
35
+
36
+ `codedna scan` komutu her desteklenen dosyayı (`*.py`, `*.js`, `*.ts`, `*.jsx`, `*.tsx`) analiz eder:
37
+
38
+ | Metrik | Açıklama |
39
+ |--------|----------|
40
+ | `comment_ratio > 0.3` | AI kodu genelde aşırı yorum yazar → +0.20 |
41
+ | `avg_function_length > 50` | AI büyük fonksiyon blokları üretir → +0.15 |
42
+ | `single_commit_ratio > 0.7` | Toplu yapıştırma işareti → +0.30 |
43
+ | Yüksek karmaşıklık + tek commit | AI imzası → +0.25 |
44
+
45
+ ## Gereksinimler
46
+
47
+ - Python 3.10+
48
+ - Git kurulu olmalı
49
+ # test
50
+ # test2
51
+ # test4
52
+ # test5
@@ -0,0 +1,4 @@
1
+ """CodeDNA — AI Kod Şeffaflık Aracı."""
2
+
3
+ __version__ = "0.1.0"
4
+ __app_name__ = "codedna"
@@ -0,0 +1,223 @@
1
+ """
2
+ Farklı AI kod asistanlarının bıraktığı örüntüleri ayırt eder.
3
+
4
+ ÖNEMLİ UYARI:
5
+ Bu kesin bir tespit DEĞİL — örüntü tabanlı sezgisel bir TAHMİN modelidir.
6
+ Sonuçlar yanlış pozitif/negatif içerebilir. Kesinlik iddia edilmez.
7
+ Kullanıcıya bu bağlamda sunulmalıdır.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import re
13
+ from dataclasses import dataclass
14
+ from pathlib import Path
15
+ from typing import Optional
16
+
17
+ from codedna.db import get_connection
18
+
19
+
20
+ # ---------------------------------------------------------------------------
21
+ # Araç örüntü tanımları — sezgisel, savunulabilir ama kesin değil
22
+ # ---------------------------------------------------------------------------
23
+
24
+ # Her araç için ağırlıklı örüntü listesi: (regex_pattern, ağırlık)
25
+ _ARAC_ORNUNTULERI: dict[str, list[tuple[str, float]]] = {
26
+ "copilot": [
27
+ # GitHub Copilot: kısa, özlü satır içi yorumlar, tip bildirimleri yok
28
+ (r"#\s+[A-Z][a-z].{5,40}$", 0.15), # tek satır başlık yorum
29
+ (r"def \w+\([^)]{0,30}\):\s*$", 0.10), # parametresiz/minimal fonksiyon
30
+ (r"#\s+TODO:", 0.10), # TODO yorumları
31
+ (r"^\s{4}pass\s*$", 0.08), # pass ile biten fonksiyonlar
32
+ (r"return \w+\.get\(", 0.07), # .get() pattern
33
+ ],
34
+ "cursor": [
35
+ # Cursor: detaylı docstring, tip ipucu zenginliği
36
+ (r'"""[\s\S]{20,200}"""', 0.20), # uzun docstring
37
+ (r":\s*(str|int|float|bool|list|dict|Optional)", 0.15), # tip ipuçları
38
+ (r"->.*:\s*$", 0.12), # dönüş tipi bildirimi
39
+ (r"from typing import", 0.10), # typing modülü
40
+ (r"@dataclass", 0.10), # dataclass kullanımı
41
+ ],
42
+ "claude": [
43
+ # Claude: yapılandırılmış çok satırlı açıklamalar, Türkçe/çok dilli yorum
44
+ (r"#\s+\d+\.\s+\w", 0.18), # numaralı adım yorumları
45
+ (r"\"\"\"[\s\S]*Args:[\s\S]*Returns:", 0.20), # Args/Returns docstring
46
+ (r"#\s+─{3,}", 0.15), # ayırıcı çizgi yorumlar
47
+ (r"raise \w+Error\(f[\"']", 0.10), # f-string hata mesajları
48
+ (r"from __future__ import annotations", 0.12), # modern annotation
49
+ ],
50
+ }
51
+
52
+ # Minimum güven eşiği — altındaysa "unknown" döndür
53
+ _MIN_GUVEN = 0.15
54
+
55
+
56
+ @dataclass
57
+ class AIAracTahmini:
58
+ """Tek dosya için AI araç tahmini."""
59
+
60
+ arac: str # "copilot" | "cursor" | "claude" | "unknown"
61
+ guven: float # 0.0–1.0
62
+ puan_detayi: dict[str, float] # araç → ham puan
63
+ uyari: str = (
64
+ "Bu tespit örüntü tabanlı bir tahmindir — kesin değildir."
65
+ )
66
+
67
+
68
+ def guess_ai_tool(file_path: str, code: str) -> AIAracTahmini:
69
+ """
70
+ Dosya için olası AI aracı tahmini ve güven skoru döndür.
71
+
72
+ Strateji:
73
+ Her araç için tanımlı regex örüntüleri koda uygulanır, ağırlıklı
74
+ eşleşme sayısına göre toplam puan hesaplanır. En yüksek puanlı
75
+ araç, minimum güven eşiğini geçiyorsa seçilir.
76
+
77
+ Args:
78
+ file_path: Dosya yolu (uzantı filtresi için kullanılır)
79
+ code: Dosyanın kaynak kodu
80
+
81
+ Returns:
82
+ AIAracTahmini nesnesi
83
+ """
84
+ satirlar = code.splitlines()
85
+ puan: dict[str, float] = {arac: 0.0 for arac in _ARAC_ORNUNTULERI}
86
+
87
+ for arac, ornuntular in _ARAC_ORNUNTULERI.items():
88
+ for desen, agirlik in ornuntular:
89
+ eslesme_sayisi = sum(
90
+ 1 for satir in satirlar if re.search(desen, satir)
91
+ )
92
+ # Satır sayısına normalize et (büyük dosyalarda haksız avantajı engelle)
93
+ norm = eslesme_sayisi / max(len(satirlar), 1)
94
+ puan[arac] += norm * agirlik * 10 # 0-10 arası ölçek
95
+
96
+ # Normalize et — toplam puana göre güven hesapla
97
+ toplam = sum(puan.values())
98
+ if toplam < 0.01:
99
+ return AIAracTahmini(
100
+ arac="unknown",
101
+ guven=0.0,
102
+ puan_detayi={k: round(v, 3) for k, v in puan.items()},
103
+ )
104
+
105
+ en_iyi_arac = max(puan, key=lambda k: puan[k])
106
+ guven = puan[en_iyi_arac] / toplam
107
+
108
+ # Minimum eşiği geçemiyen → unknown
109
+ if guven < _MIN_GUVEN:
110
+ en_iyi_arac = "unknown"
111
+
112
+ return AIAracTahmini(
113
+ arac=en_iyi_arac,
114
+ guven=round(guven, 3),
115
+ puan_detayi={k: round(v, 3) for k, v in puan.items()},
116
+ )
117
+
118
+
119
+ def analyze_repo_tools(
120
+ repo_path: Path,
121
+ db_path: Path,
122
+ ) -> dict[str, dict[str, float]]:
123
+ """
124
+ Repo genelinde araç bazlı dosya analizi yap ve sonuçları DB'ye kaydet.
125
+
126
+ Returns:
127
+ {arac: {"dosya_sayisi": N, "avg_ai_probability": X}} sözlüğü
128
+ """
129
+ from codedna.scorer import scan_repository
130
+ from codedna.db import get_connection
131
+
132
+ desteklenen = {".py", ".js", ".jsx", ".ts", ".tsx"}
133
+ sonuclar = scan_repository(repo_path, max_files=200)
134
+
135
+ # Araç sayaçları
136
+ arac_istatistik: dict[str, dict[str, list]] = {
137
+ "copilot": {"ai_prob": [], "understanding": []},
138
+ "cursor": {"ai_prob": [], "understanding": []},
139
+ "claude": {"ai_prob": [], "understanding": []},
140
+ "unknown": {"ai_prob": [], "understanding": []},
141
+ }
142
+
143
+ for sonuc in sonuclar:
144
+ if Path(sonuc.file_path).suffix.lower() not in desteklenen:
145
+ continue
146
+ try:
147
+ kod = Path(sonuc.file_path).read_text(encoding="utf-8", errors="replace")
148
+ except Exception:
149
+ continue
150
+
151
+ tahmin = guess_ai_tool(sonuc.file_path, kod)
152
+
153
+ # DB'ye kaydet — en son file_score kaydını güncelle
154
+ try:
155
+ with get_connection(db_path) as conn:
156
+ conn.execute(
157
+ """
158
+ UPDATE file_scores
159
+ SET ai_tool_guess = ?
160
+ WHERE file_path = ?
161
+ AND id = (
162
+ SELECT id FROM file_scores
163
+ WHERE file_path = ?
164
+ ORDER BY id DESC LIMIT 1
165
+ )
166
+ """,
167
+ (tahmin.arac, sonuc.file_path, sonuc.file_path),
168
+ )
169
+ except Exception:
170
+ pass
171
+
172
+ if tahmin.arac in arac_istatistik:
173
+ arac_istatistik[tahmin.arac]["ai_prob"].append(sonuc.ai_probability)
174
+ else:
175
+ arac_istatistik["unknown"]["ai_prob"].append(sonuc.ai_probability)
176
+
177
+ # DB'den anlama skorlarını araç bazlı topla
178
+ try:
179
+ with get_connection(db_path) as conn:
180
+ rows = conn.execute(
181
+ """
182
+ SELECT fs.ai_tool_guess, fs.understanding_score
183
+ FROM file_scores fs
184
+ WHERE fs.ai_tool_guess IS NOT NULL
185
+ AND fs.understanding_score IS NOT NULL
186
+ """
187
+ ).fetchall()
188
+ for r in rows:
189
+ arac = r["ai_tool_guess"] or "unknown"
190
+ if arac in arac_istatistik:
191
+ arac_istatistik[arac]["understanding"].append(
192
+ float(r["understanding_score"])
193
+ )
194
+ except Exception:
195
+ pass
196
+
197
+ # Sonuçları hesapla
198
+ cikti: dict[str, dict[str, float]] = {}
199
+ for arac, veri in arac_istatistik.items():
200
+ if not veri["ai_prob"]:
201
+ continue
202
+ avg_ai = sum(veri["ai_prob"]) / len(veri["ai_prob"])
203
+ avg_und = (
204
+ sum(veri["understanding"]) / len(veri["understanding"])
205
+ if veri["understanding"] else None
206
+ )
207
+ cikti[arac] = {
208
+ "dosya_sayisi": len(veri["ai_prob"]),
209
+ "avg_ai_probability": round(avg_ai, 3),
210
+ "avg_understanding": round(avg_und, 2) if avg_und is not None else None,
211
+ }
212
+
213
+ return cikti
214
+
215
+
216
+ def compare_tools_in_repo(repo_path: Path, db_path: Path) -> dict:
217
+ """
218
+ Repo genelinde araç bazlı ortalama anlama skoru ve AI olasılığı karşılaştırması.
219
+
220
+ Returns:
221
+ {"copilot": {...}, "cursor": {...}, ...} sözlüğü
222
+ """
223
+ return analyze_repo_tools(repo_path, db_path)
@@ -0,0 +1,245 @@
1
+ """AST analizi ve AI imza tespiti modülü."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from dataclasses import dataclass, field
7
+ from pathlib import Path
8
+ from typing import Optional
9
+
10
+ import tree_sitter_python as tspython
11
+ import tree_sitter_javascript as tsjavascript
12
+ from tree_sitter import Language, Parser, Node
13
+
14
+ # TypeScript parser — kurulu değilse JS parser'a geri dön
15
+ try:
16
+ import tree_sitter_typescript as tstypescript
17
+ _TS_LANG = tstypescript.language_typescript()
18
+ _TSX_LANG = tstypescript.language_tsx()
19
+ _TS_AVAILABLE = True
20
+ except Exception:
21
+ _TS_LANG = tsjavascript.language()
22
+ _TSX_LANG = tsjavascript.language()
23
+ _TS_AVAILABLE = False
24
+
25
+ # Desteklenen dil eşlemesi
26
+ LANGUAGE_MAP: dict[str, tuple] = {
27
+ ".py": ("python", tspython.language()),
28
+ ".js": ("javascript", tsjavascript.language()),
29
+ ".jsx": ("javascript", tsjavascript.language()),
30
+ ".ts": ("typescript", _TS_LANG),
31
+ ".tsx": ("tsx", _TSX_LANG),
32
+ }
33
+
34
+
35
+ @dataclass
36
+ class FileAnalysisResult:
37
+ """Tek bir dosyanın analiz sonucu."""
38
+
39
+ file_path: str
40
+ ai_probability: float = 0.0
41
+ complexity_score: float = 0.0
42
+ comment_ratio: float = 0.0
43
+ avg_function_length: float = 0.0
44
+ single_commit_ratio: float = 0.0
45
+ total_lines: int = 0
46
+ function_count: int = 0
47
+ desteklenmiyor: bool = False
48
+ hata: Optional[str] = None
49
+
50
+ @property
51
+ def complexity_label(self) -> str:
52
+ """Return complexity level as text."""
53
+ if self.complexity_score < 5:
54
+ return "Low"
55
+ elif self.complexity_score < 15:
56
+ return "Medium"
57
+ else:
58
+ return "High"
59
+
60
+ @property
61
+ def ai_color(self) -> str:
62
+ """AI olasılığına göre renk emojisi döndür."""
63
+ if self.ai_probability >= 0.7:
64
+ return "🔴"
65
+ elif self.ai_probability >= 0.4:
66
+ return "🟡"
67
+ else:
68
+ return "🟢"
69
+
70
+
71
+ def _build_parser(ext: str) -> Optional[Parser]:
72
+ """Dosya uzantısına göre tree-sitter parser oluştur."""
73
+ if ext not in LANGUAGE_MAP:
74
+ return None
75
+ _, lang_obj = LANGUAGE_MAP[ext]
76
+ language = Language(lang_obj)
77
+ parser = Parser(language)
78
+ return parser
79
+
80
+
81
+ def _count_lines(source: str) -> tuple[int, int]:
82
+ """Toplam satır ve yorum satırı sayısını döndür (toplam, yorum)."""
83
+ lines = source.splitlines()
84
+ toplam = len(lines)
85
+ yorum = 0
86
+ for line in lines:
87
+ stripped = line.strip()
88
+ # Python, JS, TS tek satır yorumları
89
+ if stripped.startswith("#") or stripped.startswith("//"):
90
+ yorum += 1
91
+ # Çok satırlı yorum içinde olup olmadığını basit regex ile yakala
92
+ elif stripped.startswith("*") or stripped.startswith("/*") or stripped.startswith('"""') or stripped.startswith("'''"):
93
+ yorum += 1
94
+ return toplam, yorum
95
+
96
+
97
+ def _collect_functions(node: Node, functions: list[Node]) -> None:
98
+ """Ağaç içindeki tüm fonksiyon düğümlerini özyinelemeli topla."""
99
+ fonksiyon_tipleri = {
100
+ "function_definition", # Python
101
+ "function_declaration", # JS/TS
102
+ "method_definition", # JS/TS class method
103
+ "method_signature", # TS interface method
104
+ "abstract_method_signature",# TS abstract
105
+ "arrow_function", # JS/TS arrow
106
+ "function_expression", # JS/TS
107
+ "generator_function", # JS/TS generator
108
+ "generator_function_declaration",
109
+ }
110
+ if node.type in fonksiyon_tipleri:
111
+ functions.append(node)
112
+ for child in node.children:
113
+ _collect_functions(child, functions)
114
+
115
+
116
+ def _calculate_cyclomatic_complexity(node: Node) -> float:
117
+ """
118
+ Basit cyclomatic complexity hesapla.
119
+ Karar noktalarını (if, for, while, case, &&, ||) say.
120
+ """
121
+ karar_tipleri = {
122
+ "if_statement", "elif_clause", "for_statement", "while_statement",
123
+ "with_statement", "try_statement", "except_clause",
124
+ "if_expression", # Python ternary
125
+ "switch_case", "case_clause",
126
+ # JS/TS
127
+ "if", "for", "while", "switch", "catch",
128
+ "ternary_expression",
129
+ "&&", "||", "??",
130
+ }
131
+ sayac = 1 # Temel yol
132
+
133
+ def _gez(n: Node) -> None:
134
+ nonlocal sayac
135
+ if n.type in karar_tipleri:
136
+ sayac += 1
137
+ # Mantıksal operatörler
138
+ if n.type in {"boolean_operator", "logical_expression"}:
139
+ sayac += 1
140
+ for child in n.children:
141
+ _gez(child)
142
+
143
+ _gez(node)
144
+ return float(sayac)
145
+
146
+
147
+ def analyze_file(
148
+ file_path: Path,
149
+ single_commit_ratio: float = 0.0,
150
+ ) -> FileAnalysisResult:
151
+ """
152
+ Dosyayı AST ile analiz et ve AI imza metriklerini hesapla.
153
+
154
+ Args:
155
+ file_path: Analiz edilecek dosyanın yolu
156
+ single_commit_ratio: Tek commit'te gelen satır oranı (dışarıdan verilir)
157
+
158
+ Returns:
159
+ FileAnalysisResult nesnesi
160
+ """
161
+ sonuc = FileAnalysisResult(
162
+ file_path=str(file_path),
163
+ single_commit_ratio=single_commit_ratio,
164
+ )
165
+
166
+ # Dosya okunabilir mi?
167
+ try:
168
+ kaynak = file_path.read_text(encoding="utf-8", errors="replace")
169
+ except Exception as e:
170
+ sonuc.hata = f"Dosya okunamadı: {e}"
171
+ return sonuc
172
+
173
+ ext = file_path.suffix.lower()
174
+ parser = _build_parser(ext)
175
+
176
+ if parser is None:
177
+ sonuc.desteklenmiyor = True
178
+ return sonuc
179
+
180
+ # Satır sayıları
181
+ toplam_satir, yorum_satir = _count_lines(kaynak)
182
+ sonuc.total_lines = toplam_satir
183
+ sonuc.comment_ratio = (yorum_satir / toplam_satir) if toplam_satir > 0 else 0.0
184
+
185
+ # AST parse
186
+ try:
187
+ tree = parser.parse(bytes(kaynak, "utf8"))
188
+ except Exception as e:
189
+ sonuc.hata = f"AST parse hatası: {e}"
190
+ return sonuc
191
+
192
+ # Fonksiyon analizi
193
+ fonksiyonlar: list[Node] = []
194
+ _collect_functions(tree.root_node, fonksiyonlar)
195
+ sonuc.function_count = len(fonksiyonlar)
196
+
197
+ if fonksiyonlar:
198
+ uzunluklar = [
199
+ f.end_point[0] - f.start_point[0] + 1
200
+ for f in fonksiyonlar
201
+ ]
202
+ sonuc.avg_function_length = sum(uzunluklar) / len(uzunluklar)
203
+ else:
204
+ # Fonksiyon yoksa toplam satırı tek blok say
205
+ sonuc.avg_function_length = float(toplam_satir)
206
+
207
+ # Cyclomatic complexity (tüm dosya üzerinden)
208
+ sonuc.complexity_score = _calculate_cyclomatic_complexity(tree.root_node)
209
+
210
+ # AI olasılığı hesapla
211
+ sonuc.ai_probability = _calculate_ai_probability(sonuc)
212
+
213
+ return sonuc
214
+
215
+
216
+ def _calculate_ai_probability(sonuc: FileAnalysisResult) -> float:
217
+ """
218
+ Kural tabanlı AI olasılığı skoru hesapla (0.0 – 1.0).
219
+
220
+ Kurallar:
221
+ - comment_ratio > 0.3 → +0.20
222
+ - avg_function_length > 50 → +0.15
223
+ - single_commit_ratio > 0.7 → +0.30
224
+ - complexity yüksek & tek commit → +0.25
225
+ """
226
+ skor = 0.0
227
+
228
+ # Kural 1: Aşırı yorum oranı (AI kodu genelde çok yorum yazar)
229
+ if sonuc.comment_ratio > 0.3:
230
+ skor += 0.20
231
+
232
+ # Kural 2: Uzun fonksiyonlar (AI genelde büyük bloklar üretir)
233
+ if sonuc.avg_function_length > 50:
234
+ skor += 0.15
235
+
236
+ # Kural 3: Tek commit'te büyük değişiklik (toplu yapıştırma işareti)
237
+ if sonuc.single_commit_ratio > 0.7:
238
+ skor += 0.30
239
+
240
+ # Kural 4: Yüksek karmaşıklık + tek seferlik commit
241
+ if sonuc.complexity_score > 10 and sonuc.single_commit_ratio > 0.5:
242
+ skor += 0.25
243
+
244
+ # 0.0 – 1.0 arasına normalize et
245
+ return min(skor, 1.0)