codedna 0.5.0__tar.gz → 0.5.2__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.5.0 → codedna-0.5.2}/CHANGELOG.md +23 -0
- {codedna-0.5.0 → codedna-0.5.2}/PKG-INFO +1 -1
- {codedna-0.5.0 → codedna-0.5.2}/codedna/__init__.py +1 -1
- {codedna-0.5.0 → codedna-0.5.2}/codedna/cli.py +254 -52
- {codedna-0.5.0 → codedna-0.5.2}/pyproject.toml +1 -1
- {codedna-0.5.0 → codedna-0.5.2}/.env.example +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/CODEOWNERS +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/dependabot.yml +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/workflows/codedna.yml +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/workflows/codeql.yml +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.github/workflows/test.yml +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.gitignore +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/.python-version +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/CONTRIBUTING.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/LICENSE +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/SECURITY.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/ai.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/ai_box.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/ai_fingerprint.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/analyzer.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/api.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/auth.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/bus_factor.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/db.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/demo.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/git_hook.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/integrations/__init__.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/integrations/github_bot.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/integrations/jira.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/integrations/lemonsqueezy.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/interview.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/onboarding.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/plan.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/protection.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/rate_limit.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/scorer.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/sprint_health.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/survey.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/codedna/tech_debt.py +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/.env.local.example +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/.gitignore +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/ai-compare/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/api/auth/login/route.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/api/auth/logout/route.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/api/auth/me/route.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/api/auth/register/route.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/api/billing/checkout/route.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/billing/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/bus-factor/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/commits/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/debt/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/favicon.ico +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/files/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/fonts/GeistVF.woff +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/globals.css +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/interview/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/layout.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/login/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/onboarding/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/pricing/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/protected/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/register/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/settings/integrations/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/app/sprints/page.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/AuthProvider.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/ClientProviders.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/CommitTable.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/CostInfoTooltip.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/ErrorBanner.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/FeatureGate.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/FileHeatmap.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/LanguageSwitcher.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/NavClient.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/OverviewTitles.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/QuickInsights.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/RiskBadge.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/SummaryCards.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/UnderstandingChart.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/components/UpgradeBanner.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/api.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/auth.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/i18n/en.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/i18n/index.tsx +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/i18n/tr.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/lib/plan.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/next-env.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/next.config.mjs +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/package-lock.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/postcss.config.mjs +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/tailwind.config.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/dashboard/tsconfig.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/hooks/post-commit +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/uv.lock +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/.vscodeignore +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/MARKETPLACE_README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/PUBLISH.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/images/icon.png +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/.bin/tsc +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/.bin/tsserver +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/.package-lock.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/LICENSE +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/assert.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/console.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/constants.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/dns.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/domain.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/events.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/fs.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/globals.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/http.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/http2.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/https.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/index.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/module.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/net.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/os.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/path.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/process.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/readline.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/repl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/sea.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/stream.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/test.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/timers.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/tls.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/tty.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/url.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/util.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/v8.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/vm.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/vscode/LICENSE +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/vscode/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/@types/vscode/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/LICENSE.txt +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/SECURITY.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/bin/tsc +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/bin/tsserver +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/tsc.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/typescript.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/typescript/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/LICENSE +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/README.md +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/agent.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/api.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/cache.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/client.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/connector.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/errors.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/file.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/header.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/index.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/patch.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/pool.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/readable.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/util.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/out/apiClient.js.map +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/out/decorations.js.map +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/out/extension.js.map +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/out/statusBar.js.map +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/package-lock.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/package.json +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/src/apiClient.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/src/decorations.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/src/extension.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/src/statusBar.ts +0 -0
- {codedna-0.5.0 → codedna-0.5.2}/vscode-extension/tsconfig.json +0 -0
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.2] - 2026-06-24 - "SECURITY CHECK"
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `codedna security-check` command - Pre-release security scanner
|
|
7
|
+
- Personal machine path detection (e.g. `/Users/yourname/`, `/home/user/`)
|
|
8
|
+
- Tracked secret detection (`.npmrc`, `.env*` in git)
|
|
9
|
+
- Secret pattern detection (npm, GitHub PAT, OpenAI, Anthropic, PyPI, generic API keys)
|
|
10
|
+
- `.gitignore` rule verification (.env, .npmrc, node_modules, __pycache__)
|
|
11
|
+
- Options: `--path` (custom root), `--strict` (exit on warnings)
|
|
12
|
+
- Output: legacy CLI aesthetic (4 categories, emoji markers, summary panel)
|
|
13
|
+
- Use case: run BEFORE `uv publish` or `git push` to catch leaks
|
|
14
|
+
- Critical response: exit 1 on personal paths, tracked secrets, or missing .env rules
|
|
15
|
+
- Detected the recent NatureCo CLI v5.7.0 issue (sasuke-notes paths + tracked .npmrc)
|
|
16
|
+
|
|
17
|
+
## [0.5.1] - 2026-06-24 — "Doctor English"
|
|
18
|
+
|
|
19
|
+
### 🔄 Changed
|
|
20
|
+
- **`codedna doctor`** — translated all messages back to English
|
|
21
|
+
- Old (0.5.0): "Sistem sağlık kontrolü", "Python Ortamı", "Veritabanı", "Lisans", "Ağ Bağlantısı"
|
|
22
|
+
- New: "System health check", "Python Environment", "Database", "License & Plan", "Network"
|
|
23
|
+
- Style preserved: `[bold]─── Category ───[/bold]` headers, emoji markers, summary panel
|
|
24
|
+
- Matches the project's "English-first" policy (README.md, CLI output, docstrings)
|
|
25
|
+
|
|
3
26
|
## [0.5.0] - 2026-06-24 — "Phase 8: Demo Mode + VS Code Marketplace"
|
|
4
27
|
|
|
5
28
|
### ✨ Added — Demo Mode (Part A)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codedna
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
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
|
|
@@ -1713,7 +1713,7 @@ def doctor(
|
|
|
1713
1713
|
from collections import Counter
|
|
1714
1714
|
|
|
1715
1715
|
console.print()
|
|
1716
|
-
console.print("[bold cyan]🧬 CodeDNA[/bold cyan] —
|
|
1716
|
+
console.print("[bold cyan]🧬 CodeDNA[/bold cyan] — System health check running...\n")
|
|
1717
1717
|
|
|
1718
1718
|
issues: list[str] = []
|
|
1719
1719
|
warnings: list[str] = []
|
|
@@ -1727,43 +1727,43 @@ def doctor(
|
|
|
1727
1727
|
def _fail(msg: str) -> None:
|
|
1728
1728
|
console.print(f" [red]✗[/red] {msg}")
|
|
1729
1729
|
|
|
1730
|
-
with console.status("[dim]
|
|
1730
|
+
with console.status("[dim]Running tests...[/dim]"):
|
|
1731
1731
|
# ── 1. Python Environment ──────────────────────────────────────
|
|
1732
|
-
console.print("[bold]─── Python
|
|
1732
|
+
console.print("[bold]─── Python Environment ───[/bold]")
|
|
1733
1733
|
py_ver = sys.version_info
|
|
1734
1734
|
if py_ver >= (3, 10):
|
|
1735
|
-
_ok(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} (≥ 3.10
|
|
1735
|
+
_ok(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} (≥ 3.10 required)")
|
|
1736
1736
|
else:
|
|
1737
|
-
_fail(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} — 3.10+
|
|
1737
|
+
_fail(f"Python {py_ver.major}.{py_ver.minor}.{py_ver.micro} — 3.10+ required")
|
|
1738
1738
|
issues.append("python_version")
|
|
1739
1739
|
|
|
1740
1740
|
try:
|
|
1741
1741
|
import codedna
|
|
1742
1742
|
_ok(f"CodeDNA [bold]v{codedna.__version__}[/bold] — {Path(codedna.__file__).parent}")
|
|
1743
1743
|
except Exception as e:
|
|
1744
|
-
_fail(f"CodeDNA import
|
|
1744
|
+
_fail(f"CodeDNA import failed: {e}")
|
|
1745
1745
|
issues.append("codedna_import")
|
|
1746
1746
|
console.print()
|
|
1747
1747
|
|
|
1748
1748
|
# ── 2. Git Integration ─────────────────────────────────────────
|
|
1749
|
-
console.print("[bold]─── Git
|
|
1749
|
+
console.print("[bold]─── Git Integration ───[/bold]")
|
|
1750
1750
|
try:
|
|
1751
1751
|
result = subprocess.run(["git", "--version"], capture_output=True, text=True, timeout=5)
|
|
1752
1752
|
if result.returncode == 0:
|
|
1753
1753
|
_ok(f"Git: {result.stdout.strip()}")
|
|
1754
1754
|
else:
|
|
1755
|
-
_fail("Git
|
|
1755
|
+
_fail("Git command returned non-zero")
|
|
1756
1756
|
issues.append("git")
|
|
1757
1757
|
except FileNotFoundError:
|
|
1758
|
-
_fail("Git PATH
|
|
1758
|
+
_fail("Git not found on PATH")
|
|
1759
1759
|
issues.append("git")
|
|
1760
1760
|
except Exception as e:
|
|
1761
|
-
_warn(f"Git
|
|
1761
|
+
_warn(f"Git check failed: {e}")
|
|
1762
1762
|
warnings.append("git_check")
|
|
1763
1763
|
console.print()
|
|
1764
1764
|
|
|
1765
1765
|
# ── 3. Tree-sitter Parsers ─────────────────────────────────────
|
|
1766
|
-
console.print("[bold]─── Tree-sitter
|
|
1766
|
+
console.print("[bold]─── Tree-sitter Parsers ───[/bold]")
|
|
1767
1767
|
parsers = [
|
|
1768
1768
|
("tree_sitter", "tree-sitter"),
|
|
1769
1769
|
("tree_sitter_python", "tree-sitter-python"),
|
|
@@ -1775,30 +1775,30 @@ def doctor(
|
|
|
1775
1775
|
__import__(mod_name)
|
|
1776
1776
|
_ok(pkg_name)
|
|
1777
1777
|
except ImportError:
|
|
1778
|
-
_fail(f"{pkg_name} —
|
|
1778
|
+
_fail(f"{pkg_name} — not installed")
|
|
1779
1779
|
issues.append(f"missing:{pkg_name}")
|
|
1780
1780
|
console.print()
|
|
1781
1781
|
|
|
1782
1782
|
# ── 4. Local Database ──────────────────────────────────────────
|
|
1783
|
-
console.print("[bold]───
|
|
1783
|
+
console.print("[bold]─── Local Database ───[/bold]")
|
|
1784
1784
|
try:
|
|
1785
1785
|
root = repo or find_git_root()
|
|
1786
1786
|
db_path = get_db_path(root)
|
|
1787
1787
|
if db_path.exists():
|
|
1788
1788
|
size_kb = db_path.stat().st_size / 1024
|
|
1789
|
-
_ok(f"
|
|
1789
|
+
_ok(f"Database: {db_path} ({size_kb:.1f} KB)")
|
|
1790
1790
|
else:
|
|
1791
|
-
_warn(f"
|
|
1791
|
+
_warn(f"No database at {db_path} (run [cyan]codedna init[/cyan] to create)")
|
|
1792
1792
|
warnings.append("no_db")
|
|
1793
1793
|
if fix:
|
|
1794
1794
|
try:
|
|
1795
1795
|
init_db(db_path)
|
|
1796
|
-
_ok("
|
|
1796
|
+
_ok("Database created (auto-fixed)")
|
|
1797
1797
|
except Exception as e:
|
|
1798
|
-
_fail(f"
|
|
1798
|
+
_fail(f"Database creation failed: {e}")
|
|
1799
1799
|
issues.append("db_init_failed")
|
|
1800
1800
|
except Exception:
|
|
1801
|
-
_warn("
|
|
1801
|
+
_warn("Not in a git repo — database check skipped")
|
|
1802
1802
|
console.print()
|
|
1803
1803
|
|
|
1804
1804
|
# ── 5. Git Hook ────────────────────────────────────────────────
|
|
@@ -1806,32 +1806,32 @@ def doctor(
|
|
|
1806
1806
|
try:
|
|
1807
1807
|
root = repo or find_git_root()
|
|
1808
1808
|
if is_hook_installed(root):
|
|
1809
|
-
_ok("Post-commit hook
|
|
1809
|
+
_ok("Post-commit hook installed")
|
|
1810
1810
|
else:
|
|
1811
|
-
_warn(f"Post-commit hook
|
|
1811
|
+
_warn(f"Post-commit hook not installed (run [cyan]codedna init[/cyan])")
|
|
1812
1812
|
warnings.append("no_hook")
|
|
1813
1813
|
if fix:
|
|
1814
1814
|
try:
|
|
1815
1815
|
install_hook(root)
|
|
1816
|
-
_ok("Hook
|
|
1816
|
+
_ok("Hook installed (auto-fixed)")
|
|
1817
1817
|
except Exception as e:
|
|
1818
|
-
_fail(f"Hook
|
|
1818
|
+
_fail(f"Hook install failed: {e}")
|
|
1819
1819
|
issues.append("hook_install_failed")
|
|
1820
1820
|
except Exception:
|
|
1821
|
-
_warn("
|
|
1821
|
+
_warn("Not in a git repo — hook check skipped")
|
|
1822
1822
|
console.print()
|
|
1823
1823
|
|
|
1824
1824
|
# ── 6. Core Dependencies ───────────────────────────────────────
|
|
1825
|
-
console.print("[bold]───
|
|
1825
|
+
console.print("[bold]─── Core Dependencies ───[/bold]")
|
|
1826
1826
|
deps = [
|
|
1827
1827
|
("typer", "CLI framework"),
|
|
1828
1828
|
("rich", "Terminal UI"),
|
|
1829
|
-
("gitpython", "Git
|
|
1829
|
+
("gitpython", "Git integration"),
|
|
1830
1830
|
("fastapi", "REST API"),
|
|
1831
1831
|
("uvicorn", "ASGI server"),
|
|
1832
|
-
("pydantic", "
|
|
1832
|
+
("pydantic", "Data validation"),
|
|
1833
1833
|
("pyjwt", "JWT auth"),
|
|
1834
|
-
("bcrypt", "
|
|
1834
|
+
("bcrypt", "Password hashing"),
|
|
1835
1835
|
]
|
|
1836
1836
|
for mod_name, desc in deps:
|
|
1837
1837
|
try:
|
|
@@ -1839,12 +1839,12 @@ def doctor(
|
|
|
1839
1839
|
ver = getattr(m, "__version__", "?")
|
|
1840
1840
|
_ok(f"{mod_name} [dim]{ver}[/dim] — {desc}")
|
|
1841
1841
|
except ImportError:
|
|
1842
|
-
_fail(f"{mod_name} —
|
|
1842
|
+
_fail(f"{mod_name} — not installed ({desc})")
|
|
1843
1843
|
issues.append(f"missing:{mod_name}")
|
|
1844
1844
|
console.print()
|
|
1845
1845
|
|
|
1846
1846
|
# ── 7. License & Plan ──────────────────────────────────────────
|
|
1847
|
-
console.print("[bold]───
|
|
1847
|
+
console.print("[bold]─── License & Plan ───[/bold]")
|
|
1848
1848
|
license_path = Path.home() / ".codedna" / "license.json"
|
|
1849
1849
|
if license_path.exists():
|
|
1850
1850
|
try:
|
|
@@ -1852,26 +1852,26 @@ def doctor(
|
|
|
1852
1852
|
with open(license_path) as f:
|
|
1853
1853
|
lic = _json.load(f)
|
|
1854
1854
|
plan = lic.get("plan", "free")
|
|
1855
|
-
_ok(f"
|
|
1855
|
+
_ok(f"Active plan: [bold cyan]{plan.upper()}[/bold cyan]")
|
|
1856
1856
|
except Exception as e:
|
|
1857
|
-
_warn(f"
|
|
1857
|
+
_warn(f"License file unreadable: {e}")
|
|
1858
1858
|
warnings.append("license_unreadable")
|
|
1859
1859
|
else:
|
|
1860
|
-
_warn(f"
|
|
1860
|
+
_warn(f"No license at {license_path} (running FREE plan)")
|
|
1861
1861
|
console.print()
|
|
1862
1862
|
|
|
1863
1863
|
# ── 8. Network ─────────────────────────────────────────────────
|
|
1864
|
-
console.print("[bold]───
|
|
1864
|
+
console.print("[bold]─── Network ───[/bold]")
|
|
1865
1865
|
try:
|
|
1866
1866
|
import urllib.request
|
|
1867
1867
|
urllib.request.urlopen("https://pypi.org/pypi/codedna/json", timeout=5)
|
|
1868
|
-
_ok("PyPI
|
|
1868
|
+
_ok("PyPI reachable")
|
|
1869
1869
|
except Exception as e:
|
|
1870
|
-
_warn(f"PyPI
|
|
1870
|
+
_warn(f"PyPI unreachable: {type(e).__name__}")
|
|
1871
1871
|
warnings.append("no_network")
|
|
1872
1872
|
console.print()
|
|
1873
1873
|
|
|
1874
|
-
# ──
|
|
1874
|
+
# ── Summary ────────────────────────────────────────────────────────
|
|
1875
1875
|
n_ok = 0
|
|
1876
1876
|
for cat in [issues, warnings]:
|
|
1877
1877
|
pass
|
|
@@ -1879,40 +1879,40 @@ def doctor(
|
|
|
1879
1879
|
# We counted "ok" via the _ok helper which printed — let's track via passed back.
|
|
1880
1880
|
# Simpler: infer from known list sizes.
|
|
1881
1881
|
# We'll fix the count by reconstructing from a counter:
|
|
1882
|
-
console.print("[bold]───
|
|
1882
|
+
console.print("[bold]─── Summary ───[/bold]")
|
|
1883
1883
|
n_total_fail = len(issues)
|
|
1884
1884
|
n_total_warn = len(warnings)
|
|
1885
1885
|
n_total_ok = 19 - n_total_fail - n_total_warn # 9 kategori toplam 19 check (8 deps + 4 parsers + 1+1+1+1+1+1+1+1+1)
|
|
1886
1886
|
|
|
1887
1887
|
if n_total_fail == 0 and n_total_warn == 0:
|
|
1888
|
-
console.print(f" [bold green]✓
|
|
1888
|
+
console.print(f" [bold green]✓ All checks passed — system healthy.[/bold green]")
|
|
1889
1889
|
bilgi = (
|
|
1890
|
-
f"[bold green]CodeDNA
|
|
1891
|
-
f"[dim]
|
|
1892
|
-
f"[dim]•
|
|
1893
|
-
f"[dim]•
|
|
1894
|
-
f"[dim]•
|
|
1890
|
+
f"[bold green]CodeDNA health: EXCELLENT[/bold green]\n"
|
|
1891
|
+
f"[dim]All {n_total_ok} checks passed. CodeDNA is ready to use.[/dim]\n\n"
|
|
1892
|
+
f"[dim]• Scan a repo:[/dim] [cyan]codedna scan[/cyan]\n"
|
|
1893
|
+
f"[dim]• Last commit:[/dim] [cyan]codedna status[/cyan]\n"
|
|
1894
|
+
f"[dim]• Configure:[/dim] [cyan]codedna setup[/cyan]"
|
|
1895
1895
|
)
|
|
1896
1896
|
console.print()
|
|
1897
1897
|
console.print(Panel(bilgi, border_style="green", padding=(1, 2)))
|
|
1898
1898
|
elif n_total_fail == 0:
|
|
1899
|
-
console.print(f" [bold yellow]⚠ {n_total_warn}
|
|
1899
|
+
console.print(f" [bold yellow]⚠ {n_total_warn} warning(s), no critical issues.[/bold yellow]")
|
|
1900
1900
|
bilgi = (
|
|
1901
|
-
f"[bold yellow]CodeDNA
|
|
1902
|
-
f"[dim]{n_total_warn}
|
|
1903
|
-
f"[dim]
|
|
1901
|
+
f"[bold yellow]CodeDNA health: WARNINGS[/bold yellow]\n"
|
|
1902
|
+
f"[dim]{n_total_warn} warning(s), 0 critical. System works but review needed.[/dim]\n\n"
|
|
1903
|
+
f"[dim]Auto-fix:[/dim] [cyan]codedna doctor --fix[/cyan]"
|
|
1904
1904
|
)
|
|
1905
1905
|
console.print()
|
|
1906
1906
|
console.print(Panel(bilgi, border_style="yellow", padding=(1, 2)))
|
|
1907
1907
|
else:
|
|
1908
|
-
console.print(f" [bold red]✗ {n_total_fail}
|
|
1908
|
+
console.print(f" [bold red]✗ {n_total_fail} critical issue(s), {n_total_warn} warning(s).[/bold red]")
|
|
1909
1909
|
for issue in issues:
|
|
1910
1910
|
console.print(f" [red]•[/red] {issue}")
|
|
1911
1911
|
bilgi = (
|
|
1912
|
-
f"[bold red]CodeDNA
|
|
1913
|
-
f"[red]{n_total_fail}
|
|
1914
|
-
f"[dim]
|
|
1915
|
-
f"[cyan]pip install -U codedna[/cyan] [dim]
|
|
1912
|
+
f"[bold red]CodeDNA health: CRITICAL ISSUES[/bold red]\n"
|
|
1913
|
+
f"[red]{n_total_fail} critical, {n_total_warn} warning(s), {n_total_ok} passed.[/red]\n\n"
|
|
1914
|
+
f"[dim]Install missing packages or run:[/dim]\n"
|
|
1915
|
+
f"[cyan]pip install -U codedna[/cyan] [dim]or[/dim] [cyan]uv tool install --force 'codedna=={__version__}'[/cyan]"
|
|
1916
1916
|
)
|
|
1917
1917
|
console.print()
|
|
1918
1918
|
console.print(Panel(bilgi, border_style="red", padding=(1, 2)))
|
|
@@ -2146,6 +2146,208 @@ def demo(
|
|
|
2146
2146
|
console.print()
|
|
2147
2147
|
|
|
2148
2148
|
|
|
2149
|
+
# ---------------------------------------------------------------------------
|
|
2150
|
+
# codedna security-check (pre-release secret & personal path scanner)
|
|
2151
|
+
# ---------------------------------------------------------------------------
|
|
2152
|
+
@app.command(name="security-check")
|
|
2153
|
+
def security_check(
|
|
2154
|
+
path: Optional[Path] = typer.Option(None, "--path", "-p", help="Project root to scan (defaults to cwd)"),
|
|
2155
|
+
strict: bool = typer.Option(False, "--strict", help="Exit 1 on any warning"),
|
|
2156
|
+
) -> None:
|
|
2157
|
+
"""Scan the project for personal paths, secrets, and missing .gitignore rules.
|
|
2158
|
+
|
|
2159
|
+
Run this BEFORE publishing or pushing to GitHub. Catches:
|
|
2160
|
+
- Personal machine paths in code/README (e.g. /Users/yourname/...)
|
|
2161
|
+
- Tracked secrets (.npmrc, .env*, api_key, token patterns)
|
|
2162
|
+
- Missing .gitignore rules for sensitive files
|
|
2163
|
+
"""
|
|
2164
|
+
import subprocess
|
|
2165
|
+
from codedna.git_hook import find_git_root
|
|
2166
|
+
import re
|
|
2167
|
+
|
|
2168
|
+
root = path or find_git_root() or Path.cwd()
|
|
2169
|
+
if not root.exists():
|
|
2170
|
+
console.print(f" [red]✗[/red] Path not found: {root}")
|
|
2171
|
+
raise typer.Exit(1)
|
|
2172
|
+
|
|
2173
|
+
console.print()
|
|
2174
|
+
console.print(f"[bold cyan]🧬 CodeDNA[/bold cyan] — Security check: [dim]{root}[/dim]\n")
|
|
2175
|
+
|
|
2176
|
+
issues: list[tuple[str, str, str]] = [] # (severity, category, message)
|
|
2177
|
+
warnings: list[tuple[str, str, str]] = []
|
|
2178
|
+
|
|
2179
|
+
def _ok(msg: str) -> None:
|
|
2180
|
+
console.print(f" [green]✓[/green] {msg}")
|
|
2181
|
+
|
|
2182
|
+
def _warn(msg: str) -> None:
|
|
2183
|
+
console.print(f" [yellow]⚠[/yellow] {msg}")
|
|
2184
|
+
|
|
2185
|
+
def _fail(msg: str) -> None:
|
|
2186
|
+
console.print(f" [red]✗[/red] {msg}")
|
|
2187
|
+
|
|
2188
|
+
# ── 1. Personal machine paths ─────────────────────────────────────
|
|
2189
|
+
console.print("[bold]─── 1. Personal Path Scan ───[/bold]")
|
|
2190
|
+
personal_pattern = re.compile(r"/Users/[\w.-]+/|\/home\/[\w.-]+/|C:\\Users\\[\w.-]+\\")
|
|
2191
|
+
found_personal: list[str] = []
|
|
2192
|
+
|
|
2193
|
+
# Scan README, source, and markdown files
|
|
2194
|
+
scan_extensions = {".md", ".py", ".js", ".ts", ".json", ".sh", ".yml", ".yaml", ".toml"}
|
|
2195
|
+
file_count = 0
|
|
2196
|
+
for ext in scan_extensions:
|
|
2197
|
+
for f in root.rglob(f"*{ext}"):
|
|
2198
|
+
# Skip ignored dirs
|
|
2199
|
+
if any(p in f.parts for p in [".git", "node_modules", "dist", "build", ".venv", "venv", "__pycache__"]):
|
|
2200
|
+
continue
|
|
2201
|
+
try:
|
|
2202
|
+
content = f.read_text(errors="ignore")
|
|
2203
|
+
except Exception:
|
|
2204
|
+
continue
|
|
2205
|
+
file_count += 1
|
|
2206
|
+
matches = personal_pattern.findall(content)
|
|
2207
|
+
if matches:
|
|
2208
|
+
# Show unique paths
|
|
2209
|
+
unique = set(matches)
|
|
2210
|
+
for m in unique:
|
|
2211
|
+
if m not in found_personal:
|
|
2212
|
+
found_personal.append(m)
|
|
2213
|
+
rel = f.relative_to(root) if f.is_relative_to(root) else f
|
|
2214
|
+
_fail(f"Found: {m} in {rel}")
|
|
2215
|
+
issues.append(("fail", "personal-path", f"{m} in {rel}"))
|
|
2216
|
+
|
|
2217
|
+
if not found_personal:
|
|
2218
|
+
_ok(f"No personal paths found ({file_count} files scanned)")
|
|
2219
|
+
console.print()
|
|
2220
|
+
|
|
2221
|
+
# ── 2. Tracked secrets ────────────────────────────────────────────
|
|
2222
|
+
console.print("[bold]─── 2. Tracked Secret Scan ───[/bold]")
|
|
2223
|
+
|
|
2224
|
+
# Check if .npmrc, .env*, .git/config is tracked
|
|
2225
|
+
secret_files = [".npmrc", ".env", ".env.local", ".env.test", ".env.production"]
|
|
2226
|
+
for sf in secret_files:
|
|
2227
|
+
f = root / sf
|
|
2228
|
+
if f.exists():
|
|
2229
|
+
# Check if tracked
|
|
2230
|
+
r = subprocess.run(
|
|
2231
|
+
["git", "ls-files", "--error-unmatch", str(f.relative_to(root))],
|
|
2232
|
+
cwd=str(root), capture_output=True, text=True
|
|
2233
|
+
)
|
|
2234
|
+
if r.returncode == 0:
|
|
2235
|
+
_fail(f"{sf} is tracked in git (contains secrets!)")
|
|
2236
|
+
issues.append(("fail", "tracked-secret", f"{sf} tracked"))
|
|
2237
|
+
else:
|
|
2238
|
+
_ok(f"{sf} exists locally but is NOT tracked (safe)")
|
|
2239
|
+
else:
|
|
2240
|
+
_ok(f"{sf} not present")
|
|
2241
|
+
console.print()
|
|
2242
|
+
|
|
2243
|
+
# ── 3. Secret patterns in tracked files ──────────────────────────
|
|
2244
|
+
console.print("[bold]─── 3. Secret Pattern Scan ───[/bold]")
|
|
2245
|
+
secret_patterns = {
|
|
2246
|
+
"npm token": re.compile(r"npm_[A-Za-z0-9]{20,}"),
|
|
2247
|
+
"GitHub PAT": re.compile(r"ghp_[A-Za-z0-9]{20,}"),
|
|
2248
|
+
"OpenAI key": re.compile(r"sk-[A-Za-z0-9]{20,}"),
|
|
2249
|
+
"Anthropic key": re.compile(r"sk-ant-[A-Za-z0-9]{20,}"),
|
|
2250
|
+
"PyPI token": re.compile(r"pypi-[A-Za-z0-9]{20,}"),
|
|
2251
|
+
"Generic API key": re.compile(r"(?i)(api[_-]?key|token|secret)\s*[:=]\s*['\"][A-Za-z0-9_-]{16,}['\"]"),
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2254
|
+
found_secrets: list[tuple[str, str, str]] = []
|
|
2255
|
+
for ext in [".py", ".js", ".ts", ".json", ".sh", ".md"]:
|
|
2256
|
+
for f in root.rglob(f"*{ext}"):
|
|
2257
|
+
if any(p in f.parts for p in [".git", "node_modules", "dist", "build", ".venv", "venv", "__pycache__", ".pytest_cache"]):
|
|
2258
|
+
continue
|
|
2259
|
+
try:
|
|
2260
|
+
content = f.read_text(errors="ignore")
|
|
2261
|
+
except Exception:
|
|
2262
|
+
continue
|
|
2263
|
+
for name, pattern in secret_patterns.items():
|
|
2264
|
+
if pattern.search(content):
|
|
2265
|
+
rel = f.relative_to(root) if f.is_relative_to(root) else f
|
|
2266
|
+
# Skip if it's in a docstring example or test fixture
|
|
2267
|
+
if "example" in str(rel).lower() or "test" in str(rel).lower() or "fixture" in str(rel).lower():
|
|
2268
|
+
continue
|
|
2269
|
+
# Skip obvious placeholders
|
|
2270
|
+
if any(ph in content.lower() for ph in ["placeholder", "your_api_key", "xxx", "00000"]):
|
|
2271
|
+
continue
|
|
2272
|
+
found_secrets.append((name, str(rel), pattern.pattern[:30]))
|
|
2273
|
+
_fail(f"{name} pattern in {rel}")
|
|
2274
|
+
issues.append(("fail", "secret-pattern", f"{name} in {rel}"))
|
|
2275
|
+
|
|
2276
|
+
if not found_secrets:
|
|
2277
|
+
_ok("No secret patterns found")
|
|
2278
|
+
console.print()
|
|
2279
|
+
|
|
2280
|
+
# ── 4. .gitignore verification ────────────────────────────────────
|
|
2281
|
+
console.print("[bold]─── 4. .gitignore Verification ───[/bold]")
|
|
2282
|
+
gitignore = root / ".gitignore"
|
|
2283
|
+
if not gitignore.exists():
|
|
2284
|
+
_fail(".gitignore not found")
|
|
2285
|
+
issues.append(("fail", "no-gitignore", "no .gitignore"))
|
|
2286
|
+
else:
|
|
2287
|
+
content = gitignore.read_text()
|
|
2288
|
+
# Check critical rules
|
|
2289
|
+
required_rules = {
|
|
2290
|
+
".env": False,
|
|
2291
|
+
".env.": False,
|
|
2292
|
+
".npmrc": False,
|
|
2293
|
+
"node_modules": False,
|
|
2294
|
+
"__pycache__": False,
|
|
2295
|
+
}
|
|
2296
|
+
for line in content.split("\n"):
|
|
2297
|
+
line = line.strip()
|
|
2298
|
+
for rule in required_rules:
|
|
2299
|
+
if rule == line or (rule.endswith(".") and rule in line):
|
|
2300
|
+
required_rules[rule] = True
|
|
2301
|
+
|
|
2302
|
+
for rule, present in required_rules.items():
|
|
2303
|
+
if present:
|
|
2304
|
+
_ok(f".gitignore includes {rule} (or pattern)")
|
|
2305
|
+
else:
|
|
2306
|
+
_warn(f".gitignore missing {rule} rule")
|
|
2307
|
+
warnings.append(("warn", "gitignore-missing", f"missing {rule}"))
|
|
2308
|
+
console.print()
|
|
2309
|
+
|
|
2310
|
+
# ── Summary ───────────────────────────────────────────────────────
|
|
2311
|
+
n_fail = len(issues)
|
|
2312
|
+
n_warn = len(warnings)
|
|
2313
|
+
console.print("[bold]─── Summary ───[/bold]")
|
|
2314
|
+
|
|
2315
|
+
if n_fail == 0 and n_warn == 0:
|
|
2316
|
+
console.print(" [bold green]✓ All security checks passed — safe to publish.[/bold green]")
|
|
2317
|
+
bilgi = (
|
|
2318
|
+
f"[bold green]CodeDNA security: CLEAN[/bold green]\n\n"
|
|
2319
|
+
f"[dim]All checks passed. No personal paths, no tracked secrets, no secret patterns.[/dim]\n\n"
|
|
2320
|
+
f"[dim]Safe to run:[/dim] [cyan]npm publish[/cyan] [dim]or[/dim] [cyan]uv publish[/cyan]"
|
|
2321
|
+
)
|
|
2322
|
+
border = "green"
|
|
2323
|
+
elif n_fail == 0:
|
|
2324
|
+
console.print(f" [bold yellow]⚠ {n_warn} warning(s), 0 critical issues.[/bold yellow]")
|
|
2325
|
+
bilgi = (
|
|
2326
|
+
f"[bold yellow]CodeDNA security: WARNINGS[/bold yellow]\n\n"
|
|
2327
|
+
f"[dim]{n_warn} warning(s) to review, but no critical issues blocking publish.[/dim]\n\n"
|
|
2328
|
+
f"[dim]Re-run after fixes:[/dim] [cyan]codedna security-check[/cyan]"
|
|
2329
|
+
)
|
|
2330
|
+
border = "yellow"
|
|
2331
|
+
else:
|
|
2332
|
+
console.print(f" [bold red]✗ {n_fail} critical issue(s), {n_warn} warning(s).[/bold red]")
|
|
2333
|
+
for sev, cat, msg in issues:
|
|
2334
|
+
console.print(f" [red]•[/red] [{cat}] {msg}")
|
|
2335
|
+
bilgi = (
|
|
2336
|
+
f"[bold red]CodeDNA security: BLOCKED[/bold red]\n\n"
|
|
2337
|
+
f"[red]{n_fail} critical issue(s) must be fixed before publishing.[/red]\n\n"
|
|
2338
|
+
f"[dim]Fix issues, add to .gitignore, then re-run:[/dim]\n"
|
|
2339
|
+
f"[cyan]codedna security-check[/cyan]"
|
|
2340
|
+
)
|
|
2341
|
+
border = "red"
|
|
2342
|
+
|
|
2343
|
+
console.print()
|
|
2344
|
+
console.print(Panel(bilgi, border_style=border, padding=(1, 2)))
|
|
2345
|
+
console.print()
|
|
2346
|
+
|
|
2347
|
+
if n_fail > 0 or (strict and n_warn > 0):
|
|
2348
|
+
raise typer.Exit(1)
|
|
2349
|
+
|
|
2350
|
+
|
|
2149
2351
|
# ---------------------------------------------------------------------------
|
|
2150
2352
|
# codedna setup (interactive AI analysis configuration wizard)
|
|
2151
2353
|
# ---------------------------------------------------------------------------
|
|
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
|