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.
- {codedna-0.3.2 → codedna-0.3.4}/CHANGELOG.md +23 -0
- {codedna-0.3.2 → codedna-0.3.4}/PKG-INFO +1 -1
- {codedna-0.3.2 → codedna-0.3.4}/codedna/__init__.py +1 -1
- {codedna-0.3.2 → codedna-0.3.4}/codedna/cli.py +280 -148
- {codedna-0.3.2 → codedna-0.3.4}/pyproject.toml +1 -1
- {codedna-0.3.2 → codedna-0.3.4}/.env.example +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/CODEOWNERS +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/dependabot.yml +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/codedna.yml +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/codeql.yml +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.github/workflows/test.yml +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.gitignore +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/.python-version +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/CONTRIBUTING.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/LICENSE +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/SECURITY.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/ai.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/ai_box.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/ai_fingerprint.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/analyzer.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/api.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/auth.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/bus_factor.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/db.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/git_hook.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/__init__.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/github_bot.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/jira.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/integrations/lemonsqueezy.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/interview.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/onboarding.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/plan.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/protection.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/rate_limit.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/scorer.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/sprint_health.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/survey.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/codedna/tech_debt.py +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/.env.local.example +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/.gitignore +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/ai-compare/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/login/route.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/logout/route.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/me/route.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/auth/register/route.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/api/billing/checkout/route.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/billing/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/bus-factor/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/commits/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/debt/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/favicon.ico +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/files/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/fonts/GeistVF.woff +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/globals.css +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/interview/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/layout.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/login/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/onboarding/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/pricing/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/protected/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/register/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/settings/integrations/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/app/sprints/page.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/AuthProvider.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/ClientProviders.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/CommitTable.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/CostInfoTooltip.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/ErrorBanner.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/FeatureGate.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/FileHeatmap.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/LanguageSwitcher.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/NavClient.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/OverviewTitles.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/QuickInsights.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/RiskBadge.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/SummaryCards.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/UnderstandingChart.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/components/UpgradeBanner.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/api.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/auth.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/en.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/index.tsx +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/i18n/tr.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/lib/plan.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/next-env.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/next.config.mjs +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/package-lock.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/postcss.config.mjs +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/tailwind.config.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/dashboard/tsconfig.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/hooks/post-commit +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/uv.lock +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.bin/tsc +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.bin/tsserver +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/.package-lock.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/LICENSE +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/assert.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/console.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/constants.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/dns.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/domain.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/events.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/fs.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/globals.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/http.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/http2.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/https.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/index.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/module.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/net.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/os.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/path.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/process.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/readline.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/repl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/sea.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/stream.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/test.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/timers.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/tls.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/tty.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/url.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/util.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/v8.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/vm.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/LICENSE +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/@types/vscode/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/LICENSE.txt +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/SECURITY.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/bin/tsc +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/bin/tsserver +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsc.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typescript.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/typescript/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/LICENSE +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/README.md +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/agent.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/api.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/cache.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/client.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/connector.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/errors.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/file.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/header.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/index.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/patch.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/pool.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/readable.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/util.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/apiClient.js.map +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/decorations.js.map +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/extension.js.map +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/out/statusBar.js.map +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/package-lock.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/package.json +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/apiClient.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/decorations.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/extension.ts +0 -0
- {codedna-0.3.2 → codedna-0.3.4}/vscode-extension/src/statusBar.ts +0 -0
- {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.
|
|
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
|
|
@@ -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
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
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
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1775
|
-
|
|
1776
|
-
except
|
|
1777
|
-
|
|
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
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
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
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
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
|
-
|
|
1857
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1931
|
+
console.print(Panel.fit("🧬 CodeDNA — Update Check", style="bold cyan"))
|
|
1862
1932
|
console.print()
|
|
1863
|
-
|
|
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
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
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
|
-
|
|
1870
|
-
|
|
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
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
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
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
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
|
|
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
|
|
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
|