codedna 0.3.2__tar.gz → 0.3.4__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 (360) hide show
  1. {codedna-0.3.2 → codedna-0.3.4}/CHANGELOG.md +23 -0
  2. {codedna-0.3.2 → codedna-0.3.4}/PKG-INFO +1 -1
  3. {codedna-0.3.2 → codedna-0.3.4}/codedna/__init__.py +1 -1
  4. {codedna-0.3.2 → codedna-0.3.4}/codedna/cli.py +280 -148
  5. {codedna-0.3.2 → codedna-0.3.4}/pyproject.toml +1 -1
  6. {codedna-0.3.2 → codedna-0.3.4}/.env.example +0 -0
  7. {codedna-0.3.2 → codedna-0.3.4}/.github/CODEOWNERS +0 -0
  8. {codedna-0.3.2 → codedna-0.3.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {codedna-0.3.2 → codedna-0.3.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {codedna-0.3.2 → codedna-0.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  11. {codedna-0.3.2 → codedna-0.3.4}/.github/dependabot.yml +0 -0
  12. {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/codedna.yml +0 -0
  13. {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/codeql.yml +0 -0
  14. {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/test.yml +0 -0
  15. {codedna-0.3.2 → codedna-0.3.4}/.gitignore +0 -0
  16. {codedna-0.3.2 → codedna-0.3.4}/.python-version +0 -0
  17. {codedna-0.3.2 → codedna-0.3.4}/CONTRIBUTING.md +0 -0
  18. {codedna-0.3.2 → codedna-0.3.4}/LICENSE +0 -0
  19. {codedna-0.3.2 → codedna-0.3.4}/README.md +0 -0
  20. {codedna-0.3.2 → codedna-0.3.4}/SECURITY.md +0 -0
  21. {codedna-0.3.2 → codedna-0.3.4}/codedna/ai.py +0 -0
  22. {codedna-0.3.2 → codedna-0.3.4}/codedna/ai_box.py +0 -0
  23. {codedna-0.3.2 → codedna-0.3.4}/codedna/ai_fingerprint.py +0 -0
  24. {codedna-0.3.2 → codedna-0.3.4}/codedna/analyzer.py +0 -0
  25. {codedna-0.3.2 → codedna-0.3.4}/codedna/api.py +0 -0
  26. {codedna-0.3.2 → codedna-0.3.4}/codedna/auth.py +0 -0
  27. {codedna-0.3.2 → codedna-0.3.4}/codedna/bus_factor.py +0 -0
  28. {codedna-0.3.2 → codedna-0.3.4}/codedna/db.py +0 -0
  29. {codedna-0.3.2 → codedna-0.3.4}/codedna/git_hook.py +0 -0
  30. {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/__init__.py +0 -0
  31. {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/github_bot.py +0 -0
  32. {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/jira.py +0 -0
  33. {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/lemonsqueezy.py +0 -0
  34. {codedna-0.3.2 → codedna-0.3.4}/codedna/interview.py +0 -0
  35. {codedna-0.3.2 → codedna-0.3.4}/codedna/onboarding.py +0 -0
  36. {codedna-0.3.2 → codedna-0.3.4}/codedna/plan.py +0 -0
  37. {codedna-0.3.2 → codedna-0.3.4}/codedna/protection.py +0 -0
  38. {codedna-0.3.2 → codedna-0.3.4}/codedna/rate_limit.py +0 -0
  39. {codedna-0.3.2 → codedna-0.3.4}/codedna/scorer.py +0 -0
  40. {codedna-0.3.2 → codedna-0.3.4}/codedna/sprint_health.py +0 -0
  41. {codedna-0.3.2 → codedna-0.3.4}/codedna/survey.py +0 -0
  42. {codedna-0.3.2 → codedna-0.3.4}/codedna/tech_debt.py +0 -0
  43. {codedna-0.3.2 → codedna-0.3.4}/dashboard/.env.local.example +0 -0
  44. {codedna-0.3.2 → codedna-0.3.4}/dashboard/.gitignore +0 -0
  45. {codedna-0.3.2 → codedna-0.3.4}/dashboard/README.md +0 -0
  46. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/ai-compare/page.tsx +0 -0
  47. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/login/route.ts +0 -0
  48. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/logout/route.ts +0 -0
  49. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/me/route.ts +0 -0
  50. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/register/route.ts +0 -0
  51. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/billing/checkout/route.ts +0 -0
  52. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/billing/page.tsx +0 -0
  53. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/bus-factor/page.tsx +0 -0
  54. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/commits/page.tsx +0 -0
  55. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/debt/page.tsx +0 -0
  56. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/favicon.ico +0 -0
  57. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/files/page.tsx +0 -0
  58. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
  59. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/fonts/GeistVF.woff +0 -0
  60. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/globals.css +0 -0
  61. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/interview/page.tsx +0 -0
  62. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/layout.tsx +0 -0
  63. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/login/page.tsx +0 -0
  64. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/onboarding/page.tsx +0 -0
  65. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/page.tsx +0 -0
  66. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/pricing/page.tsx +0 -0
  67. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/protected/page.tsx +0 -0
  68. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/register/page.tsx +0 -0
  69. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/settings/integrations/page.tsx +0 -0
  70. {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/sprints/page.tsx +0 -0
  71. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/AuthProvider.tsx +0 -0
  72. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/ClientProviders.tsx +0 -0
  73. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/CommitTable.tsx +0 -0
  74. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/CostInfoTooltip.tsx +0 -0
  75. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/ErrorBanner.tsx +0 -0
  76. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/FeatureGate.tsx +0 -0
  77. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/FileHeatmap.tsx +0 -0
  78. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/LanguageSwitcher.tsx +0 -0
  79. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/NavClient.tsx +0 -0
  80. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/OverviewTitles.tsx +0 -0
  81. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/QuickInsights.tsx +0 -0
  82. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/RiskBadge.tsx +0 -0
  83. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/SummaryCards.tsx +0 -0
  84. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/UnderstandingChart.tsx +0 -0
  85. {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/UpgradeBanner.tsx +0 -0
  86. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/api.ts +0 -0
  87. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/auth.ts +0 -0
  88. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/en.ts +0 -0
  89. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/index.tsx +0 -0
  90. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/tr.ts +0 -0
  91. {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/plan.ts +0 -0
  92. {codedna-0.3.2 → codedna-0.3.4}/dashboard/next-env.d.ts +0 -0
  93. {codedna-0.3.2 → codedna-0.3.4}/dashboard/next.config.mjs +0 -0
  94. {codedna-0.3.2 → codedna-0.3.4}/dashboard/package-lock.json +0 -0
  95. {codedna-0.3.2 → codedna-0.3.4}/dashboard/package.json +0 -0
  96. {codedna-0.3.2 → codedna-0.3.4}/dashboard/postcss.config.mjs +0 -0
  97. {codedna-0.3.2 → codedna-0.3.4}/dashboard/tailwind.config.ts +0 -0
  98. {codedna-0.3.2 → codedna-0.3.4}/dashboard/tsconfig.json +0 -0
  99. {codedna-0.3.2 → codedna-0.3.4}/hooks/post-commit +0 -0
  100. {codedna-0.3.2 → codedna-0.3.4}/uv.lock +0 -0
  101. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.bin/tsc +0 -0
  102. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.bin/tsserver +0 -0
  103. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.package-lock.json +0 -0
  104. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/LICENSE +0 -0
  105. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/README.md +0 -0
  106. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -0
  107. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/assert.d.ts +0 -0
  108. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -0
  109. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -0
  110. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -0
  111. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -0
  112. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -0
  113. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -0
  114. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -0
  115. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -0
  116. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
  117. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/console.d.ts +0 -0
  118. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/constants.d.ts +0 -0
  119. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -0
  120. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -0
  121. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
  122. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -0
  123. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dns.d.ts +0 -0
  124. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/domain.d.ts +0 -0
  125. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/events.d.ts +0 -0
  126. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -0
  127. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/fs.d.ts +0 -0
  128. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/globals.d.ts +0 -0
  129. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -0
  130. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/http.d.ts +0 -0
  131. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/http2.d.ts +0 -0
  132. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/https.d.ts +0 -0
  133. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/index.d.ts +0 -0
  134. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -0
  135. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/module.d.ts +0 -0
  136. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/net.d.ts +0 -0
  137. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/os.d.ts +0 -0
  138. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/package.json +0 -0
  139. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/path.d.ts +0 -0
  140. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -0
  141. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/process.d.ts +0 -0
  142. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -0
  143. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -0
  144. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -0
  145. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/readline.d.ts +0 -0
  146. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/repl.d.ts +0 -0
  147. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/sea.d.ts +0 -0
  148. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -0
  149. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -0
  150. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -0
  151. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream.d.ts +0 -0
  152. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -0
  153. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/test.d.ts +0 -0
  154. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -0
  155. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/timers.d.ts +0 -0
  156. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/tls.d.ts +0 -0
  157. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -0
  158. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
  159. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
  160. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -0
  161. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/tty.d.ts +0 -0
  162. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/url.d.ts +0 -0
  163. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/util.d.ts +0 -0
  164. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/v8.d.ts +0 -0
  165. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/vm.d.ts +0 -0
  166. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -0
  167. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
  168. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
  169. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -0
  170. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
  171. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -0
  172. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -0
  173. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/LICENSE +0 -0
  174. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/README.md +0 -0
  175. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -0
  176. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/package.json +0 -0
  177. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/LICENSE.txt +0 -0
  178. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/README.md +0 -0
  179. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/SECURITY.md +0 -0
  180. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
  181. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/bin/tsc +0 -0
  182. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/bin/tsserver +0 -0
  183. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -0
  184. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -0
  185. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -0
  186. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
  187. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
  188. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
  189. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
  190. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
  191. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
  192. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
  193. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -0
  194. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
  195. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
  196. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
  197. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -0
  198. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
  199. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
  200. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
  201. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
  202. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
  203. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
  204. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
  205. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
  206. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
  207. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
  208. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
  209. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
  210. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
  211. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
  212. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
  213. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
  214. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
  215. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
  216. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
  217. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
  218. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
  219. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
  220. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
  221. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
  222. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
  223. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
  224. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
  225. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
  226. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
  227. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
  228. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
  229. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
  230. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
  231. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
  232. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
  233. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
  234. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
  235. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
  236. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
  237. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
  238. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
  239. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
  240. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
  241. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
  242. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
  243. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
  244. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
  245. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
  246. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
  247. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
  248. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
  249. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
  250. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
  251. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
  252. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
  253. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
  254. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
  255. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
  256. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
  257. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
  258. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
  259. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
  260. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
  261. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
  262. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
  263. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
  264. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
  265. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
  266. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
  267. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
  268. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
  269. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
  270. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
  271. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
  272. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
  273. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
  274. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -0
  275. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -0
  276. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
  277. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
  278. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
  279. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
  280. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
  281. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
  282. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
  283. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
  284. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
  285. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
  286. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
  287. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
  288. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
  289. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
  290. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
  291. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
  292. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
  293. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
  294. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
  295. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
  296. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
  297. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsc.js +0 -0
  298. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -0
  299. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
  300. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -0
  301. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -0
  302. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -0
  303. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typescript.js +0 -0
  304. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -0
  305. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -0
  306. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
  307. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
  308. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/package.json +0 -0
  309. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/LICENSE +0 -0
  310. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/README.md +0 -0
  311. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/agent.d.ts +0 -0
  312. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/api.d.ts +0 -0
  313. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -0
  314. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/cache.d.ts +0 -0
  315. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/client.d.ts +0 -0
  316. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/connector.d.ts +0 -0
  317. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -0
  318. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -0
  319. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
  320. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -0
  321. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
  322. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/errors.d.ts +0 -0
  323. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -0
  324. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -0
  325. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/file.d.ts +0 -0
  326. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -0
  327. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -0
  328. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -0
  329. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -0
  330. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -0
  331. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/header.d.ts +0 -0
  332. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/index.d.ts +0 -0
  333. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -0
  334. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -0
  335. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -0
  336. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -0
  337. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -0
  338. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -0
  339. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/package.json +0 -0
  340. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/patch.d.ts +0 -0
  341. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -0
  342. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/pool.d.ts +0 -0
  343. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -0
  344. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/readable.d.ts +0 -0
  345. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -0
  346. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -0
  347. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/util.d.ts +0 -0
  348. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -0
  349. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -0
  350. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/apiClient.js.map +0 -0
  351. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/decorations.js.map +0 -0
  352. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/extension.js.map +0 -0
  353. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/statusBar.js.map +0 -0
  354. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/package-lock.json +0 -0
  355. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/package.json +0 -0
  356. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/apiClient.ts +0 -0
  357. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/decorations.ts +0 -0
  358. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/extension.ts +0 -0
  359. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/statusBar.ts +0 -0
  360. {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/tsconfig.json +0 -0
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.4] - 2026-06-24 — "Doctor Redesign"
4
+
5
+ ### 🎨 Redesigned
6
+ - **`codedna doctor` — rich Table + Panel layout** matching the legacy CodeDNA CLI style
7
+ - Header Panel with version + plan info (`border_style="cyan"`)
8
+ - Animated spinner during checks (`console.status`, dots spinner)
9
+ - Rich Table with `show_lines=True`, header_style cyan
10
+ - Color-coded status column: ✓ green, ⚠ yellow, ✗ red, – dim
11
+ - Summary Panel with color-coded border (green / yellow / red)
12
+ - 9 categories, 19 individual checks
13
+
14
+ ## [0.3.3] - 2026-06-24 — "One-Command Update"
15
+
16
+ ### ✨ Added
17
+ - **`codedna update` command** — self-upgrade from PyPI in a single command
18
+ - `codedna update` — upgrade to latest version
19
+ - `codedna update --check` — only check, do not install
20
+ - `codedna update --target 0.3.2` — install a specific version
21
+ - Auto-detects installer (`uv` first, falls back to `pip`)
22
+ - Verifies new version after install
23
+ - User no longer needs to remember `pip install --upgrade` or PATH dance
24
+ - **`codedna update --check` exit code** — 0 if up-to-date, 1 if update available (CI-friendly)
25
+
3
26
  ## [0.3.2] - 2026-06-24 — "Windows PATH Fix"
4
27
 
5
28
  ### 📚 Documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codedna
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: AI Code Transparency Tool - detect AI-written code and measure developer understanding
5
5
  Project-URL: Homepage, https://codedna.dev
6
6
  Project-URL: Repository, https://github.com/natureco-official/codedna
@@ -1,4 +1,4 @@
1
1
  """CodeDNA — AI Code Transparency Tool."""
2
2
 
3
- __version__ = "0.3.2"
3
+ __version__ = "0.3.4"
4
4
  __app_name__ = "codedna"
@@ -1710,180 +1710,312 @@ def doctor(
1710
1710
  ) -> None:
1711
1711
  """Run a system health check (Python, Git, tree-sitter, DB, hook, API, network)."""
1712
1712
 
1713
- def _ok(msg: str) -> None:
1714
- console.print(f" [green]✓[/green] {msg}")
1715
-
1716
- def _warn(msg: str) -> None:
1717
- console.print(f" [yellow]![/yellow] {msg}")
1718
-
1719
- def _fail(msg: str) -> None:
1720
- console.print(f" [red]✗[/red] {msg}")
1721
-
1722
- console.print(Panel.fit("🧬 CodeDNA — System Health Check", style="bold cyan"))
1713
+ console.print()
1714
+ console.print(
1715
+ Panel.fit(
1716
+ "[bold cyan]🧬 CodeDNA System Health Check[/bold cyan]\n"
1717
+ f"[dim]Version: {__version__} · Plan: detecting...[/dim]",
1718
+ border_style="cyan",
1719
+ padding=(1, 4),
1720
+ )
1721
+ )
1723
1722
  console.print()
1724
1723
 
1725
1724
  issues: list[str] = []
1726
1725
  warnings: list[str] = []
1726
+ checks: list[tuple[str, str, str]] = [] # (category, status, message)
1727
1727
 
1728
- # 1. Python version
1729
- console.print("[bold]1. Python Environment[/bold]")
1730
- py_ver = sys.version_info
1731
- if py_ver >= (3, 10):
1732
- _ok(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} (>= 3.10 required)")
1733
- else:
1734
- _fail(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} — 3.10+ required")
1735
- issues.append("python_version")
1736
-
1737
- # 2. CodeDNA installation
1738
- try:
1739
- import codedna
1740
- _ok(f"CodeDNA {codedna.__version__} installed at {Path(codedna.__file__).parent}")
1741
- except Exception as e:
1742
- _fail(f"CodeDNA import failed: {e}")
1743
- issues.append("codedna_import")
1728
+ def _record(category: str, status: str, message: str) -> None:
1729
+ """status: 'ok' | 'warn' | 'fail'"""
1730
+ checks.append((category, status, message))
1731
+ if status == "fail":
1732
+ issues.append(f"{category}: {message}")
1733
+ elif status == "warn":
1734
+ warnings.append(f"{category}: {message}")
1744
1735
 
1745
- # 3. Git
1746
- console.print()
1747
- console.print("[bold]2. Git Integration[/bold]")
1748
- try:
1736
+ with console.status("[bold cyan]🔍 Running health checks...[/bold cyan]", spinner="dots"):
1749
1737
  import subprocess
1750
- result = subprocess.run(["git", "--version"], capture_output=True, text=True, timeout=5)
1751
- if result.returncode == 0:
1752
- _ok(f"Git: {result.stdout.strip()}")
1738
+
1739
+ # 1. Python Environment
1740
+ py_ver = sys.version_info
1741
+ if py_ver >= (3, 10):
1742
+ _record("Python", "ok", f"{py_ver.major}.{py_ver.minor}.{py_ver.micro} (≥ 3.10 required)")
1753
1743
  else:
1754
- _fail("Git not available")
1755
- issues.append("git")
1756
- except FileNotFoundError:
1757
- _fail("Git not found on PATH")
1758
- issues.append("git")
1759
- except Exception as e:
1760
- _warn(f"Git check failed: {e}")
1761
- warnings.append("git_check")
1744
+ _record("Python", "fail", f"{py_ver.major}.{py_ver.minor}.{py_ver.micro} — 3.10+ required")
1762
1745
 
1763
- # 4. Tree-sitter parsers
1764
- console.print()
1765
- console.print("[bold]3. Tree-sitter Parsers[/bold]")
1766
- parsers = [
1767
- ("tree_sitter", "tree-sitter"),
1768
- ("tree_sitter_python", "tree-sitter-python"),
1769
- ("tree_sitter_javascript", "tree-sitter-javascript"),
1770
- ("tree_sitter_typescript", "tree-sitter-typescript"),
1771
- ]
1772
- for mod_name, pkg_name in parsers:
1746
+ # 2. CodeDNA installation
1773
1747
  try:
1774
- __import__(mod_name)
1775
- _ok(f"{pkg_name}")
1776
- except ImportError:
1777
- _fail(f"{pkg_name} — not installed")
1778
- issues.append(f"missing:{pkg_name}")
1748
+ import codedna
1749
+ _record("CodeDNA", "ok", f"v{codedna.__version__} at {Path(codedna.__file__).parent}")
1750
+ except Exception as e:
1751
+ _record("CodeDNA", "fail", f"import failed: {e}")
1779
1752
 
1780
- # 5. Database (only if in a git repo)
1781
- console.print()
1782
- console.print("[bold]4. Local Database[/bold]")
1783
- try:
1784
- root = repo or find_git_root()
1785
- db_path = get_db_path(root)
1786
- if db_path.exists():
1787
- size_kb = db_path.stat().st_size / 1024
1788
- _ok(f"Database at {db_path} ({size_kb:.1f} KB)")
1789
- else:
1790
- _warn(f"No database at {db_path} (run `codedna init` to create)")
1791
- warnings.append("no_db")
1792
- if fix:
1793
- try:
1794
- init_db(db_path)
1795
- _ok("Database initialized")
1796
- except Exception as e:
1797
- _fail(f"Could not create database: {e}")
1798
- issues.append("db_init_failed")
1799
- except Exception:
1800
- _warn("Not in a git repo — database check skipped")
1753
+ # 3. Git
1754
+ try:
1755
+ result = subprocess.run(["git", "--version"], capture_output=True, text=True, timeout=5)
1756
+ if result.returncode == 0:
1757
+ _record("Git", "ok", result.stdout.strip())
1758
+ else:
1759
+ _record("Git", "fail", "git command returned non-zero")
1760
+ except FileNotFoundError:
1761
+ _record("Git", "fail", "git not found on PATH")
1762
+ except Exception as e:
1763
+ _record("Git", "warn", f"check failed: {e}")
1764
+
1765
+ # 4. Tree-sitter parsers
1766
+ parsers = [
1767
+ ("tree_sitter", "tree-sitter"),
1768
+ ("tree_sitter_python", "tree-sitter-python"),
1769
+ ("tree_sitter_javascript", "tree-sitter-javascript"),
1770
+ ("tree_sitter_typescript", "tree-sitter-typescript"),
1771
+ ]
1772
+ for mod_name, pkg_name in parsers:
1773
+ try:
1774
+ __import__(mod_name)
1775
+ _record("Tree-sitter", "ok", pkg_name)
1776
+ except ImportError:
1777
+ _record("Tree-sitter", "fail", f"{pkg_name} not installed")
1778
+
1779
+ # 5. Database
1780
+ db_status = "skip"
1781
+ db_msg = "Not in a git repo"
1782
+ db_path: Optional[Path] = None
1783
+ try:
1784
+ root = repo or find_git_root()
1785
+ db_path = get_db_path(root)
1786
+ if db_path.exists():
1787
+ size_kb = db_path.stat().st_size / 1024
1788
+ _record("Database", "ok", f"{db_path} ({size_kb:.1f} KB)")
1789
+ db_status = "ok"
1790
+ db_msg = f"{db_path} ({size_kb:.1f} KB)"
1791
+ else:
1792
+ _record("Database", "warn", f"no database at {db_path}")
1793
+ db_status = "warn"
1794
+ db_msg = "not initialized"
1795
+ if fix:
1796
+ try:
1797
+ init_db(db_path)
1798
+ _record("Database", "ok", "initialized (auto-fixed)")
1799
+ db_status = "ok"
1800
+ db_msg = "auto-fixed"
1801
+ except Exception as e:
1802
+ _record("Database", "fail", f"auto-init failed: {e}")
1803
+ except Exception:
1804
+ _record("Database", "warn", "skipped (not in a git repo)")
1801
1805
 
1802
- # 6. Git hook
1803
- console.print()
1804
- console.print("[bold]5. Git Hook[/bold]")
1805
- try:
1806
- root = repo or find_git_root()
1807
- if is_hook_installed(root):
1808
- _ok("Post-commit hook installed")
1806
+ # 6. Git hook
1807
+ try:
1808
+ root = repo or find_git_root()
1809
+ if is_hook_installed(root):
1810
+ _record("Hook", "ok", "post-commit hook installed")
1811
+ else:
1812
+ _record("Hook", "warn", "post-commit hook not installed")
1813
+ if fix:
1814
+ try:
1815
+ install_hook(root)
1816
+ _record("Hook", "ok", "installed (auto-fixed)")
1817
+ except Exception as e:
1818
+ _record("Hook", "fail", f"auto-install failed: {e}")
1819
+ except Exception:
1820
+ _record("Hook", "warn", "skipped (not in a git repo)")
1821
+
1822
+ # 7. Core dependencies
1823
+ deps = [
1824
+ ("typer", "CLI framework"),
1825
+ ("rich", "Terminal UI"),
1826
+ ("gitpython", "Git integration"),
1827
+ ("fastapi", "REST API"),
1828
+ ("uvicorn", "ASGI server"),
1829
+ ("pydantic", "Data validation"),
1830
+ ("pyjwt", "JWT auth"),
1831
+ ("bcrypt", "Password hashing"),
1832
+ ]
1833
+ for mod_name, desc in deps:
1834
+ try:
1835
+ m = __import__(mod_name)
1836
+ ver = getattr(m, "__version__", "?")
1837
+ _record("Dependencies", "ok", f"{mod_name} {ver} — {desc}")
1838
+ except ImportError:
1839
+ _record("Dependencies", "fail", f"{mod_name} not installed — {desc}")
1840
+
1841
+ # 8. License & Plan
1842
+ license_path = Path.home() / ".codedna" / "license.json"
1843
+ if license_path.exists():
1844
+ try:
1845
+ import json
1846
+ with open(license_path) as f:
1847
+ lic = json.load(f)
1848
+ plan = lic.get("plan", "free")
1849
+ _record("License", "ok", f"plan = {plan.upper()}")
1850
+ except Exception as e:
1851
+ _record("License", "warn", f"file unreadable: {e}")
1809
1852
  else:
1810
- _warn("Post-commit hook not installed (run `codedna init`)")
1811
- warnings.append("no_hook")
1812
- if fix:
1813
- try:
1814
- install_hook(root)
1815
- _ok("Hook installed")
1816
- except Exception as e:
1817
- _fail(f"Could not install hook: {e}")
1818
- issues.append("hook_install_failed")
1819
- except Exception:
1820
- _warn("Not in a git repo — hook check skipped")
1853
+ _record("License", "warn", f"no license at {license_path} (FREE plan)")
1821
1854
 
1822
- # 7. Dependencies
1823
- console.print()
1824
- console.print("[bold]6. Core Dependencies[/bold]")
1825
- deps = [
1826
- ("typer", "CLI framework"),
1827
- ("rich", "Terminal UI"),
1828
- ("gitpython", "Git integration"),
1829
- ("fastapi", "REST API"),
1830
- ("uvicorn", "ASGI server"),
1831
- ("pydantic", "Data validation"),
1832
- ("pyjwt", "JWT auth"),
1833
- ("bcrypt", "Password hashing"),
1834
- ]
1835
- for mod_name, desc in deps:
1855
+ # 9. Network
1836
1856
  try:
1837
- m = __import__(mod_name)
1838
- ver = getattr(m, "__version__", "?")
1839
- _ok(f"{mod_name} {ver} ({desc})")
1840
- except ImportError:
1841
- _fail(f"{mod_name} — not installed ({desc})")
1842
- issues.append(f"missing:{mod_name}")
1843
-
1844
- # 8. License / plan
1845
- console.print()
1846
- console.print("[bold]7. License & Plan[/bold]")
1847
- license_path = Path.home() / ".codedna" / "license.json"
1848
- if license_path.exists():
1849
- try:
1850
- import json
1851
- with open(license_path) as f:
1852
- lic = json.load(f)
1853
- plan = lic.get("plan", "free")
1854
- _ok(f"Active plan: {plan.upper()}")
1857
+ import urllib.request
1858
+ urllib.request.urlopen("https://pypi.org/pypi/codedna/json", timeout=5)
1859
+ _record("Network", "ok", "PyPI reachable")
1855
1860
  except Exception as e:
1856
- _warn(f"License file unreadable: {e}")
1857
- warnings.append("license_unreadable")
1861
+ _record("Network", "warn", f"PyPI unreachable: {type(e).__name__}")
1862
+
1863
+ # ─── Render results as a beautiful table ────────────────────────────
1864
+ status_emoji = {"ok": "[green]✓[/green]", "warn": "[yellow]⚠[/yellow]", "fail": "[red]✗[/red]", "skip": "[dim]–[/dim]"}
1865
+
1866
+ table = Table(
1867
+ border_style="dim",
1868
+ show_lines=True,
1869
+ header_style="bold cyan",
1870
+ title="[bold]Health Check Results[/bold]",
1871
+ title_style="bold white",
1872
+ )
1873
+ table.add_column("Category", style="bold white", min_width=14)
1874
+ table.add_column("Status", justify="center", min_width=7)
1875
+ table.add_column("Details", style="white")
1876
+
1877
+ current_cat = None
1878
+ for cat, status, msg in checks:
1879
+ emoji = status_emoji.get(status, "[dim]?[/dim]")
1880
+ table.add_row(cat, emoji, msg)
1881
+ current_cat = cat
1882
+
1883
+ console.print(table)
1884
+ console.print()
1885
+
1886
+ # ─── Summary panel ──────────────────────────────────────────────────
1887
+ n_ok = sum(1 for _, s, _ in checks if s == "ok")
1888
+ n_warn = sum(1 for _, s, _ in checks if s == "warn")
1889
+ n_fail = sum(1 for _, s, _ in checks if s == "fail")
1890
+ total = len(checks)
1891
+
1892
+ if n_fail == 0 and n_warn == 0:
1893
+ border = "green"
1894
+ title = "[bold green]✓ All checks passed — system healthy[/bold green]"
1895
+ body = f"[green]{n_ok}/{total} checks passed. CodeDNA is ready to use.[/green]\n\n[dim]Run [bold]codedna scan[/bold] in a git repo to get started.[/dim]"
1896
+ elif n_fail == 0:
1897
+ border = "yellow"
1898
+ title = f"[bold yellow]⚠ {n_warn} warning(s) — system functional with caveats[/bold yellow]"
1899
+ body = f"[yellow]{n_ok}/{total} checks passed, {n_warn} warning(s).[/yellow]\n\n[dim]Run [bold]codedna doctor --fix[/bold] to attempt auto-fixes.[/dim]"
1858
1900
  else:
1859
- _warn(f"No license at {license_path} (running on FREE plan)")
1901
+ border = "red"
1902
+ title = f"[bold red]✗ {n_fail} critical issue(s) — fix required[/bold red]"
1903
+ body = f"[red]{n_fail} critical, {n_warn} warning, {n_ok} passed (out of {total}).[/red]\n\n[dim]Re-run [bold]codedna doctor --fix[/bold] or install missing dependencies.[/dim]"
1904
+
1905
+ console.print(
1906
+ Panel(
1907
+ body,
1908
+ title=title,
1909
+ border_style=border,
1910
+ padding=(1, 2),
1911
+ )
1912
+ )
1913
+
1914
+ if n_fail > 0:
1915
+ raise typer.Exit(1)
1916
+
1917
+
1918
+ # ---------------------------------------------------------------------------
1919
+ # codedna update (self-upgrade from PyPI)
1920
+ # ---------------------------------------------------------------------------
1921
+ @app.command()
1922
+ def update(
1923
+ check_only: bool = typer.Option(False, "--check", "-c", help="Only check for updates, do not install"),
1924
+ target: Optional[str] = typer.Option(None, "--target", "-t", help="Install a specific version (e.g. 0.3.2)"),
1925
+ ) -> None:
1926
+ """Check for updates and upgrade CodeDNA to the latest PyPI release."""
1927
+ import json
1928
+ import urllib.request
1929
+ import urllib.error
1860
1930
 
1861
- # 9. Network
1931
+ console.print(Panel.fit("🧬 CodeDNA — Update Check", style="bold cyan"))
1862
1932
  console.print()
1863
- console.print("[bold]8. Network[/bold]")
1933
+
1934
+ # 1. Get current version
1935
+ import codedna
1936
+ current = codedna.__version__
1937
+ console.print(f" Current version: [bold]{current}[/bold]")
1938
+
1939
+ # 2. Fetch latest version from PyPI
1864
1940
  try:
1865
- import urllib.request
1866
- urllib.request.urlopen("https://pypi.org/pypi/codedna/json", timeout=5)
1867
- _ok("PyPI reachable")
1941
+ req = urllib.request.Request(
1942
+ "https://pypi.org/pypi/codedna/json",
1943
+ headers={"Accept": "application/json", "User-Agent": "codedna-updater"},
1944
+ )
1945
+ with urllib.request.urlopen(req, timeout=10) as r:
1946
+ data = json.loads(r.read())
1868
1947
  except Exception as e:
1869
- _warn(f"PyPI unreachable: {type(e).__name__}")
1870
- warnings.append("no_network")
1948
+ console.print(f" [red]✗[/red] Could not reach PyPI: {e}")
1949
+ raise typer.Exit(1)
1950
+
1951
+ latest = data["info"]["version"]
1952
+ desired = target or latest
1953
+ console.print(f" Latest version : [bold]{latest}[/bold]")
1954
+
1955
+ if target:
1956
+ console.print(f" Target version : [bold]{target}[/bold]")
1957
+
1958
+ # 3. Compare
1959
+ def _parse(v: str) -> tuple[int, ...]:
1960
+ return tuple(int(x) for x in v.split(".") if x.isdigit())
1961
+
1962
+ if _parse(current) >= _parse(desired) and not target:
1963
+ console.print()
1964
+ console.print(f" [bold green]✓ Already on the latest version.[/bold green]")
1965
+ return
1871
1966
 
1872
- # Summary
1873
1967
  console.print()
1874
- console.print("[bold]Summary[/bold]")
1875
- if not issues:
1876
- if not warnings:
1877
- console.print(" [bold green]✓ All checks passed — system healthy.[/bold green]")
1878
- else:
1879
- console.print(f" [bold yellow]![/bold yellow] {len(warnings)} warning(s), 0 critical issue(s)")
1880
- console.print(" [dim]Run [bold]codedna doctor --fix[/bold] to attempt auto-fixes.[/dim]")
1968
+ if check_only:
1969
+ console.print(f" [yellow]![/yellow] Update available: {current} → {desired}")
1970
+ console.print(f" [dim]Run [bold]codedna update[/bold] to install.[/dim]")
1971
+ return
1972
+
1973
+ # 4. Detect installer (uv > pip)
1974
+ import shutil
1975
+ import subprocess
1976
+
1977
+ use_uv = shutil.which("uv") is not None
1978
+ if use_uv:
1979
+ cmd = ["uv", "tool", "install", "--force", f"codedna=={desired}"]
1980
+ label = "uv tool install --force"
1881
1981
  else:
1882
- console.print(f" [bold red]✗[/bold red] {len(issues)} critical issue(s), {len(warnings)} warning(s)")
1883
- for issue in issues:
1884
- console.print(f" [red]•[/red] {issue}")
1982
+ cmd = [sys.executable, "-m", "pip", "install", "--upgrade", f"codedna=={desired}"]
1983
+ label = "pip install --upgrade"
1984
+
1985
+ console.print(f" [cyan]→[/cyan] Running: {label} codedna=={desired}")
1986
+ try:
1987
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
1988
+ except subprocess.TimeoutExpired:
1989
+ console.print(" [red]✗[/red] Install timed out after 120s")
1990
+ raise typer.Exit(1)
1991
+ except Exception as e:
1992
+ console.print(f" [red]✗[/red] Install failed: {e}")
1993
+ raise typer.Exit(1)
1994
+
1995
+ if result.returncode != 0:
1996
+ console.print(f" [red]✗[/red] Install returned exit code {result.returncode}")
1997
+ if result.stderr:
1998
+ # Show last 10 lines of stderr
1999
+ for line in result.stderr.strip().split("\n")[-10:]:
2000
+ console.print(f" [dim]{line}[/dim]")
1885
2001
  raise typer.Exit(1)
1886
2002
 
2003
+ # 5. Verify new version
2004
+ try:
2005
+ # Re-import to get fresh metadata
2006
+ import importlib
2007
+ importlib.reload(codedna)
2008
+ new_ver = codedna.__version__
2009
+ except Exception:
2010
+ new_ver = "?"
2011
+
2012
+ console.print()
2013
+ if new_ver == desired:
2014
+ console.print(f" [bold green]✓ Updated {current} → {new_ver}[/bold green]")
2015
+ else:
2016
+ console.print(f" [bold green]✓ Update complete.[/bold green] Installed {desired}; current process shows {new_ver}.")
2017
+ console.print(f" [dim]Restart your shell to pick up the new binary.[/dim]")
2018
+
1887
2019
 
1888
2020
  # ---------------------------------------------------------------------------
1889
2021
  # Helper functions
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codedna"
3
- version = "0.3.2"
3
+ version = "0.3.4"
4
4
  description = "AI Code Transparency Tool - detect AI-written code and measure developer understanding"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes