codedna 0.4.2__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codedna-0.4.2 → codedna-0.5.0}/CHANGELOG.md +31 -0
- {codedna-0.4.2 → codedna-0.5.0}/PKG-INFO +1 -1
- {codedna-0.4.2 → codedna-0.5.0}/codedna/__init__.py +1 -1
- {codedna-0.4.2 → codedna-0.5.0}/codedna/api.py +34 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/cli.py +91 -0
- codedna-0.5.0/codedna/demo.py +245 -0
- {codedna-0.4.2 → codedna-0.5.0}/pyproject.toml +1 -1
- codedna-0.5.0/vscode-extension/.vscodeignore +6 -0
- codedna-0.5.0/vscode-extension/MARKETPLACE_README.md +68 -0
- codedna-0.5.0/vscode-extension/PUBLISH.md +64 -0
- codedna-0.5.0/vscode-extension/images/icon.png +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/package.json +33 -1
- {codedna-0.4.2 → codedna-0.5.0}/.env.example +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/CODEOWNERS +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/dependabot.yml +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/workflows/codedna.yml +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/workflows/codeql.yml +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.github/workflows/test.yml +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.gitignore +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/.python-version +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/CONTRIBUTING.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/LICENSE +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/SECURITY.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/ai.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/ai_box.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/ai_fingerprint.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/analyzer.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/auth.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/bus_factor.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/db.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/git_hook.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/integrations/__init__.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/integrations/github_bot.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/integrations/jira.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/integrations/lemonsqueezy.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/interview.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/onboarding.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/plan.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/protection.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/rate_limit.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/scorer.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/sprint_health.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/survey.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/codedna/tech_debt.py +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/.env.local.example +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/.gitignore +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/ai-compare/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/api/auth/login/route.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/api/auth/logout/route.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/api/auth/me/route.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/api/auth/register/route.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/api/billing/checkout/route.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/billing/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/bus-factor/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/commits/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/debt/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/favicon.ico +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/files/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/fonts/GeistVF.woff +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/globals.css +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/interview/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/layout.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/login/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/onboarding/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/pricing/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/protected/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/register/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/settings/integrations/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/app/sprints/page.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/AuthProvider.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/ClientProviders.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/CommitTable.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/CostInfoTooltip.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/ErrorBanner.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/FeatureGate.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/FileHeatmap.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/LanguageSwitcher.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/NavClient.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/OverviewTitles.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/QuickInsights.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/RiskBadge.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/SummaryCards.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/UnderstandingChart.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/components/UpgradeBanner.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/api.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/auth.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/i18n/en.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/i18n/index.tsx +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/i18n/tr.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/lib/plan.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/next-env.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/next.config.mjs +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/package-lock.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/package.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/postcss.config.mjs +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/tailwind.config.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/dashboard/tsconfig.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/hooks/post-commit +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/uv.lock +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/.bin/tsc +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/.bin/tsserver +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/.package-lock.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/LICENSE +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/assert.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/console.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/constants.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/dns.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/domain.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/events.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/fs.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/globals.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/http.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/http2.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/https.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/index.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/module.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/net.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/os.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/package.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/path.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/process.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/readline.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/repl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/sea.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/stream.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/test.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/timers.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/tls.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/tty.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/url.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/util.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/v8.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/vm.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/vscode/LICENSE +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/vscode/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/@types/vscode/package.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/LICENSE.txt +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/SECURITY.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/bin/tsc +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/bin/tsserver +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/tsc.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/typescript.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/typescript/package.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/LICENSE +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/README.md +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/agent.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/api.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/cache.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/client.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/connector.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/errors.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/file.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/header.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/index.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/package.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/patch.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/pool.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/readable.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/util.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/out/apiClient.js.map +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/out/decorations.js.map +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/out/extension.js.map +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/out/statusBar.js.map +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/package-lock.json +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/src/apiClient.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/src/decorations.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/src/extension.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/src/statusBar.ts +0 -0
- {codedna-0.4.2 → codedna-0.5.0}/vscode-extension/tsconfig.json +0 -0
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.0] - 2026-06-24 — "Phase 8: Demo Mode + VS Code Marketplace"
|
|
4
|
+
|
|
5
|
+
### ✨ Added — Demo Mode (Part A)
|
|
6
|
+
- **`codedna/demo.py`** — new module with `seed_demo_data`, `clear_demo_data`, `is_demo_active`
|
|
7
|
+
- 47 fake commits over 30 days, varying AI probability (0.1–0.9)
|
|
8
|
+
- 4 authors, 8 files, 3 sprints with realistic health scores
|
|
9
|
+
- 20% null understanding scores, 80% in [3.0, 5.0]
|
|
10
|
+
- Idempotent: tags demo rows with `__demo__` prefix
|
|
11
|
+
- **`codedna demo` CLI command** — seed + auto-start dashboard
|
|
12
|
+
- `codedna demo` — seed and start dashboard
|
|
13
|
+
- `codedna demo --reset` — clear all demo rows
|
|
14
|
+
- `codedna demo --data-only` — seed without starting dashboard
|
|
15
|
+
- **FastAPI endpoints** — `/demo/status`, `/demo/seed`, `/demo/reset`
|
|
16
|
+
- **Dashboard banner** — orange banner at top of dashboard when demo is active
|
|
17
|
+
- Dismissable, persisted in localStorage
|
|
18
|
+
- i18n keys: `demo_banner`, `demo_close`, `demo_init_cta`
|
|
19
|
+
|
|
20
|
+
### ✨ Added — VS Code Marketplace (Part B)
|
|
21
|
+
- **`vscode-extension/package.json`** — full marketplace metadata
|
|
22
|
+
- `icon` (128x128 PNG), `galleryBanner`, `badges`, `keywords`, `categories`
|
|
23
|
+
- `homepage`, `bugs`, `repository`, `license: MIT`
|
|
24
|
+
- `scripts` for `compile`/`watch`/`package`/`publish`
|
|
25
|
+
- `devDependencies`: `@vscode/vsce ^2.24.0`
|
|
26
|
+
- **`vscode-extension/images/icon.png`** — 128x128 dark cyan/emerald DNA helix
|
|
27
|
+
- **`vscode-extension/.vscodeignore`** — excludes `src/`, `node_modules/`, `*.ts`
|
|
28
|
+
- **`vscode-extension/MARKETPLACE_README.md`** — full English marketplace description
|
|
29
|
+
- **`vscode-extension/PUBLISH.md`** — step-by-step publishing instructions
|
|
30
|
+
|
|
31
|
+
### 🔄 Changed
|
|
32
|
+
- Minor version bump (0.4.2 → 0.5.0) — major feature release, breaks the 7-patch cascade
|
|
33
|
+
|
|
3
34
|
## [0.4.2] - 2026-06-24 — "Doctor Legacy Style"
|
|
4
35
|
|
|
5
36
|
### 🎨 Redesigned
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codedna
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
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
|
|
@@ -97,6 +97,40 @@ async def health_check() -> dict:
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
|
|
100
|
+
# ---------------------------------------------------------------------------
|
|
101
|
+
# Demo mode endpoints
|
|
102
|
+
# ---------------------------------------------------------------------------
|
|
103
|
+
@app.get("/demo/status", tags=["Demo"])
|
|
104
|
+
async def demo_status() -> dict:
|
|
105
|
+
"""Check whether demo data is currently active in the database."""
|
|
106
|
+
from codedna.demo import is_demo_active, _count_demo
|
|
107
|
+
db = _db_path()
|
|
108
|
+
init_db(db)
|
|
109
|
+
active = is_demo_active(db)
|
|
110
|
+
return {
|
|
111
|
+
"active": active,
|
|
112
|
+
"counts": _count_demo(db) if active else {"commits": 0, "files": 0, "authors": 0, "sprints": 0},
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@app.post("/demo/seed", tags=["Demo"])
|
|
117
|
+
async def demo_seed() -> dict:
|
|
118
|
+
"""Seed the database with realistic fake demo data (idempotent)."""
|
|
119
|
+
from codedna.demo import seed_demo_data
|
|
120
|
+
db = _db_path()
|
|
121
|
+
init_db(db)
|
|
122
|
+
return seed_demo_data(db)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
@app.delete("/demo/reset", tags=["Demo"])
|
|
126
|
+
async def demo_reset() -> dict:
|
|
127
|
+
"""Clear all demo data from the database."""
|
|
128
|
+
from codedna.demo import clear_demo_data
|
|
129
|
+
db = _db_path()
|
|
130
|
+
deleted = clear_demo_data(db)
|
|
131
|
+
return {"deleted": deleted, "active": False}
|
|
132
|
+
|
|
133
|
+
|
|
100
134
|
@app.get("/repo/summary", tags=["Repo"])
|
|
101
135
|
async def repo_summary() -> dict:
|
|
102
136
|
"""Repo-wide summary: average AI score, total commits, risk level."""
|
|
@@ -2055,6 +2055,97 @@ def update(
|
|
|
2055
2055
|
console.print()
|
|
2056
2056
|
|
|
2057
2057
|
|
|
2058
|
+
# ---------------------------------------------------------------------------
|
|
2059
|
+
# codedna demo (seed database with realistic fake data)
|
|
2060
|
+
# ---------------------------------------------------------------------------
|
|
2061
|
+
@app.command()
|
|
2062
|
+
def demo(
|
|
2063
|
+
reset: bool = typer.Option(False, "--reset", help="Clear all demo data"),
|
|
2064
|
+
data_only: bool = typer.Option(False, "--data-only", help="Seed data only, don't start dashboard"),
|
|
2065
|
+
) -> None:
|
|
2066
|
+
"""Load demo data into the database (idempotent) and open the dashboard."""
|
|
2067
|
+
from codedna.demo import seed_demo_data, clear_demo_data, is_demo_active
|
|
2068
|
+
from codedna.db import get_db_path
|
|
2069
|
+
|
|
2070
|
+
db_path = get_db_path()
|
|
2071
|
+
|
|
2072
|
+
console.print()
|
|
2073
|
+
if reset:
|
|
2074
|
+
deleted = clear_demo_data(db_path)
|
|
2075
|
+
console.print(
|
|
2076
|
+
Panel(
|
|
2077
|
+
f"[bold green]✓ Demo data cleared.[/bold green]\n\n"
|
|
2078
|
+
f"[dim]Removed:[/dim] [yellow]{deleted}[/yellow] [dim]rows[/dim]",
|
|
2079
|
+
title="[bold cyan]🧬 CodeDNA — Demo Reset[/bold cyan]",
|
|
2080
|
+
border_style="cyan",
|
|
2081
|
+
padding=(1, 2),
|
|
2082
|
+
)
|
|
2083
|
+
)
|
|
2084
|
+
console.print()
|
|
2085
|
+
return
|
|
2086
|
+
|
|
2087
|
+
# Seed
|
|
2088
|
+
if is_demo_active(db_path):
|
|
2089
|
+
console.print(
|
|
2090
|
+
Panel(
|
|
2091
|
+
"[bold yellow]⚠ Demo data already seeded.[/bold yellow]\n\n"
|
|
2092
|
+
"[dim]Run [bold]codedna demo --reset[/bold] to clear and re-seed.[/dim]",
|
|
2093
|
+
title="[bold yellow]🧬 CodeDNA — Demo Mode[/bold yellow]",
|
|
2094
|
+
border_style="yellow",
|
|
2095
|
+
padding=(1, 2),
|
|
2096
|
+
)
|
|
2097
|
+
)
|
|
2098
|
+
console.print()
|
|
2099
|
+
return
|
|
2100
|
+
|
|
2101
|
+
console.print("[bold cyan]🧬 CodeDNA Demo Mode[/bold cyan]")
|
|
2102
|
+
console.print("─" * 40)
|
|
2103
|
+
console.print()
|
|
2104
|
+
|
|
2105
|
+
with console.status("[dim]Seeding demo data...[/dim]"):
|
|
2106
|
+
counts = seed_demo_data(db_path)
|
|
2107
|
+
|
|
2108
|
+
console.print(f" [green]✓[/green] [bold]{counts['commits']}[/bold] commits loaded")
|
|
2109
|
+
console.print(f" [green]✓[/green] [bold]{counts['files']}[/bold] files analyzed")
|
|
2110
|
+
console.print(f" [green]✓[/green] [bold]{counts['authors']}[/bold] developer profiles created")
|
|
2111
|
+
console.print(f" [green]✓[/green] [bold]{counts['sprints']}[/bold] sprints recorded")
|
|
2112
|
+
console.print()
|
|
2113
|
+
|
|
2114
|
+
# Summary panel
|
|
2115
|
+
body = (
|
|
2116
|
+
f"[bold green]✓ Demo data ready![/bold green]\n\n"
|
|
2117
|
+
f"[dim]Dashboard:[/dim] [cyan]http://localhost:3000[/cyan]\n"
|
|
2118
|
+
f"[dim]API:[/dim] [cyan]http://localhost:8000[/cyan]\n\n"
|
|
2119
|
+
f"[yellow]⚠ Demo data is fake — for previewing the dashboard only.[/yellow]\n"
|
|
2120
|
+
f"[dim]Run [bold]codedna demo --reset[/bold] to clear demo data.[/dim]"
|
|
2121
|
+
)
|
|
2122
|
+
console.print(Panel(body, border_style="green", padding=(1, 2)))
|
|
2123
|
+
console.print()
|
|
2124
|
+
|
|
2125
|
+
if data_only:
|
|
2126
|
+
console.print("[dim]--data-only flag set, dashboard not started.[/dim]")
|
|
2127
|
+
console.print()
|
|
2128
|
+
return
|
|
2129
|
+
|
|
2130
|
+
# Try to start dashboard (subprocess so we don't block this command)
|
|
2131
|
+
import subprocess
|
|
2132
|
+
import sys
|
|
2133
|
+
console.print("[dim]Starting dashboard in background...[/dim]")
|
|
2134
|
+
try:
|
|
2135
|
+
subprocess.Popen(
|
|
2136
|
+
[sys.executable, "-m", "codedna", "dashboard"],
|
|
2137
|
+
stdout=subprocess.DEVNULL,
|
|
2138
|
+
stderr=subprocess.DEVNULL,
|
|
2139
|
+
start_new_session=True,
|
|
2140
|
+
)
|
|
2141
|
+
console.print(f" [green]✓[/green] Dashboard starting at [cyan]http://localhost:3000[/cyan]")
|
|
2142
|
+
console.print(f" [dim]API at [cyan]http://localhost:8000[/cyan][/dim]")
|
|
2143
|
+
except Exception as e:
|
|
2144
|
+
console.print(f" [yellow]⚠ Could not auto-start dashboard: {e}[/yellow]")
|
|
2145
|
+
console.print(f" [dim]Run [bold]codedna dashboard[/bold] manually to start it.[/dim]")
|
|
2146
|
+
console.print()
|
|
2147
|
+
|
|
2148
|
+
|
|
2058
2149
|
# ---------------------------------------------------------------------------
|
|
2059
2150
|
# codedna setup (interactive AI analysis configuration wizard)
|
|
2060
2151
|
# ---------------------------------------------------------------------------
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Demo mode — seeds the database with realistic fake data for new users.
|
|
3
|
+
|
|
4
|
+
Does NOT perform real code analysis.
|
|
5
|
+
All data is deterministic (random.seed(42)) and tagged with '__demo__' prefix.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import random
|
|
11
|
+
import sqlite3
|
|
12
|
+
import time
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
DEMO_COMMIT_PREFIX = "__demo__"
|
|
17
|
+
|
|
18
|
+
# ── Seed data ───────────────────────────────────────────────────────────
|
|
19
|
+
AUTHORS = [
|
|
20
|
+
"alice@example.com",
|
|
21
|
+
"bob@example.com",
|
|
22
|
+
"carol@example.com",
|
|
23
|
+
"dave@example.com",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
FILES = [
|
|
27
|
+
"src/auth/handler.py",
|
|
28
|
+
"src/api/routes.py",
|
|
29
|
+
"src/utils/helpers.py",
|
|
30
|
+
"src/db/models.py",
|
|
31
|
+
"tests/test_auth.py",
|
|
32
|
+
"tests/test_api.py",
|
|
33
|
+
"src/payments/checkout.py",
|
|
34
|
+
"src/notifications/email.py",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
SPRINT_NAMES = ["Sprint 23 — Auth refactor", "Sprint 24 — API v2", "Sprint 25 — Payments"]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# ── Helpers ────────────────────────────────────────────────────────────
|
|
41
|
+
def is_demo_active(db_path: Path) -> bool:
|
|
42
|
+
"""Return True if demo data exists in the database."""
|
|
43
|
+
if not db_path.exists():
|
|
44
|
+
return False
|
|
45
|
+
try:
|
|
46
|
+
with sqlite3.connect(str(db_path)) as conn:
|
|
47
|
+
row = conn.execute(
|
|
48
|
+
"SELECT COUNT(*) AS c FROM commits WHERE commit_hash LIKE ?",
|
|
49
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
50
|
+
).fetchone()
|
|
51
|
+
return bool(row and row[0] > 0)
|
|
52
|
+
except sqlite3.DatabaseError:
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def clear_demo_data(db_path: Path) -> int:
|
|
57
|
+
"""Remove all demo rows. Returns number of rows deleted."""
|
|
58
|
+
if not db_path.exists():
|
|
59
|
+
return 0
|
|
60
|
+
deleted = 0
|
|
61
|
+
with sqlite3.connect(str(db_path)) as conn:
|
|
62
|
+
# file_scores first (FK to commits)
|
|
63
|
+
cur = conn.execute(
|
|
64
|
+
"DELETE FROM file_scores WHERE commit_hash LIKE ?",
|
|
65
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
66
|
+
)
|
|
67
|
+
deleted += cur.rowcount
|
|
68
|
+
cur = conn.execute(
|
|
69
|
+
"DELETE FROM commits WHERE commit_hash LIKE ?",
|
|
70
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
71
|
+
)
|
|
72
|
+
deleted += cur.rowcount
|
|
73
|
+
cur = conn.execute(
|
|
74
|
+
"DELETE FROM file_ownership WHERE file_path LIKE ?",
|
|
75
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
76
|
+
)
|
|
77
|
+
deleted += cur.rowcount
|
|
78
|
+
cur = conn.execute(
|
|
79
|
+
"DELETE FROM sprints WHERE sprint_name LIKE ?",
|
|
80
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
81
|
+
)
|
|
82
|
+
deleted += cur.rowcount
|
|
83
|
+
conn.commit()
|
|
84
|
+
return deleted
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _rand_understanding() -> Optional[float]:
|
|
88
|
+
"""Realistic understanding distribution: 20% null, 80% in [3.0, 5.0]."""
|
|
89
|
+
if random.random() < 0.2:
|
|
90
|
+
return None
|
|
91
|
+
return round(random.uniform(3.0, 5.0), 2)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _rand_ai_probability() -> float:
|
|
95
|
+
"""AI probability varies 0.1–0.9."""
|
|
96
|
+
return round(random.uniform(0.1, 0.9), 2)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _complexity_label(score: float) -> str:
|
|
100
|
+
if score >= 70:
|
|
101
|
+
return "high"
|
|
102
|
+
if score >= 40:
|
|
103
|
+
return "medium"
|
|
104
|
+
return "low"
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _complexity_score() -> float:
|
|
108
|
+
return round(random.uniform(20.0, 90.0), 1)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _commit_hash(idx: int) -> str:
|
|
112
|
+
return f"{DEMO_COMMIT_PREFIX}{idx:04d}"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# ── Main seeder ────────────────────────────────────────────────────────
|
|
116
|
+
def seed_demo_data(db_path: Path) -> dict:
|
|
117
|
+
"""
|
|
118
|
+
Seed database with demo data. Idempotent — skips if demo data already exists.
|
|
119
|
+
Returns: {"commits": N, "files": N, "authors": N, "sprints": N}
|
|
120
|
+
"""
|
|
121
|
+
random.seed(42)
|
|
122
|
+
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
123
|
+
|
|
124
|
+
# Make sure schema exists
|
|
125
|
+
from codedna.db import init_db
|
|
126
|
+
init_db(db_path)
|
|
127
|
+
|
|
128
|
+
if is_demo_active(db_path):
|
|
129
|
+
existing = _count_demo(db_path)
|
|
130
|
+
existing["status"] = "already_seeded"
|
|
131
|
+
return existing
|
|
132
|
+
|
|
133
|
+
now = int(time.time())
|
|
134
|
+
day = 24 * 60 * 60
|
|
135
|
+
|
|
136
|
+
with sqlite3.connect(str(db_path)) as conn:
|
|
137
|
+
# ── Commits (47 over last 30 days) ─────────────────────────────
|
|
138
|
+
commit_hashes: list[str] = []
|
|
139
|
+
for i in range(47):
|
|
140
|
+
ch = _commit_hash(i)
|
|
141
|
+
commit_hashes.append(ch)
|
|
142
|
+
author = random.choice(AUTHORS)
|
|
143
|
+
ts = now - random.randint(0, 30) * day - random.randint(0, 86400)
|
|
144
|
+
files_changed = random.randint(1, 4)
|
|
145
|
+
understanding = _rand_understanding()
|
|
146
|
+
conn.execute(
|
|
147
|
+
"""INSERT INTO commits (commit_hash, author, timestamp, files_changed, understanding_score)
|
|
148
|
+
VALUES (?, ?, ?, ?, ?)""",
|
|
149
|
+
(ch, author, ts, files_changed, understanding),
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
# file_scores for this commit (1–3 files per commit)
|
|
153
|
+
n_files = random.randint(1, 3)
|
|
154
|
+
for _ in range(n_files):
|
|
155
|
+
fpath = random.choice(FILES)
|
|
156
|
+
ai_p = _rand_ai_probability()
|
|
157
|
+
cx = _complexity_score()
|
|
158
|
+
cmt_ratio = round(random.uniform(0.05, 0.25), 2)
|
|
159
|
+
conn.execute(
|
|
160
|
+
"""INSERT INTO file_scores
|
|
161
|
+
(commit_hash, file_path, ai_probability, complexity_score,
|
|
162
|
+
comment_ratio, understanding_score, ai_tool_guess)
|
|
163
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)""",
|
|
164
|
+
(
|
|
165
|
+
ch,
|
|
166
|
+
fpath,
|
|
167
|
+
ai_p,
|
|
168
|
+
cx,
|
|
169
|
+
cmt_ratio,
|
|
170
|
+
_rand_understanding(),
|
|
171
|
+
random.choice(["cursor", "copilot", "claude", "chatgpt"]),
|
|
172
|
+
),
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
# ── file_ownership (1–3 owners per file) ───────────────────────
|
|
176
|
+
for fpath in FILES:
|
|
177
|
+
owners = random.sample(AUTHORS, k=random.randint(1, 3))
|
|
178
|
+
for owner in owners:
|
|
179
|
+
lines = random.randint(20, 300)
|
|
180
|
+
last_t = now - random.randint(0, 30) * day
|
|
181
|
+
conn.execute(
|
|
182
|
+
"""INSERT OR IGNORE INTO file_ownership
|
|
183
|
+
(file_path, author, lines_owned, last_touched, avg_understanding)
|
|
184
|
+
VALUES (?, ?, ?, ?, ?)""",
|
|
185
|
+
(f"{DEMO_COMMIT_PREFIX}{fpath}", owner, lines, last_t, _rand_understanding()),
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# ── Sprints (3) ────────────────────────────────────────────────
|
|
189
|
+
sprint_scores = [82.0, 61.0, 74.0]
|
|
190
|
+
for i, (name, score) in enumerate(zip(SPRINT_NAMES, sprint_scores)):
|
|
191
|
+
start = now - (3 - i) * 14 * day
|
|
192
|
+
end = start + 14 * day
|
|
193
|
+
conn.execute(
|
|
194
|
+
"""INSERT INTO sprints
|
|
195
|
+
(sprint_name, start_date, end_date, total_lines_ai, total_lines_human,
|
|
196
|
+
avg_understanding, debt_delta_hours, health_score)
|
|
197
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
|
|
198
|
+
(
|
|
199
|
+
f"{DEMO_COMMIT_PREFIX}{name}",
|
|
200
|
+
start,
|
|
201
|
+
end,
|
|
202
|
+
random.randint(200, 800),
|
|
203
|
+
random.randint(100, 500),
|
|
204
|
+
round(random.uniform(3.0, 4.5), 2),
|
|
205
|
+
round(random.uniform(-2.0, 5.0), 1),
|
|
206
|
+
score,
|
|
207
|
+
),
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
conn.commit()
|
|
211
|
+
|
|
212
|
+
return _count_demo(db_path)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _count_demo(db_path: Path) -> dict:
|
|
216
|
+
"""Return counts of demo-tagged rows."""
|
|
217
|
+
out = {"commits": 0, "files": 0, "authors": 0, "sprints": 0}
|
|
218
|
+
if not db_path.exists():
|
|
219
|
+
return out
|
|
220
|
+
with sqlite3.connect(str(db_path)) as conn:
|
|
221
|
+
row = conn.execute(
|
|
222
|
+
"SELECT COUNT(*) FROM commits WHERE commit_hash LIKE ?",
|
|
223
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
224
|
+
).fetchone()
|
|
225
|
+
out["commits"] = row[0] if row else 0
|
|
226
|
+
|
|
227
|
+
row = conn.execute(
|
|
228
|
+
"SELECT COUNT(DISTINCT author) FROM commits WHERE commit_hash LIKE ?",
|
|
229
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
230
|
+
).fetchone()
|
|
231
|
+
out["authors"] = row[0] if row else 0
|
|
232
|
+
|
|
233
|
+
row = conn.execute(
|
|
234
|
+
"SELECT COUNT(DISTINCT file_path) FROM file_scores WHERE commit_hash LIKE ?",
|
|
235
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
236
|
+
).fetchone()
|
|
237
|
+
out["files"] = row[0] if row else 0
|
|
238
|
+
|
|
239
|
+
row = conn.execute(
|
|
240
|
+
"SELECT COUNT(*) FROM sprints WHERE sprint_name LIKE ?",
|
|
241
|
+
(f"{DEMO_COMMIT_PREFIX}%",),
|
|
242
|
+
).fetchone()
|
|
243
|
+
out["sprints"] = row[0] if row else 0
|
|
244
|
+
|
|
245
|
+
return out
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# CodeDNA — AI Code Transparency for VS Code
|
|
2
|
+
|
|
3
|
+
**Understand every line of code you commit. Is it really yours, or AI's?**
|
|
4
|
+
|
|
5
|
+
CodeDNA shows AI risk and developer understanding scores directly in your editor. Inline decorations flag AI-heavy code, the status bar displays the current file's risk level, and a single click opens the full dashboard for sprint health, bus factor, and technical debt analysis.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Status bar indicator** — current file's AI risk score, color-coded (green/yellow/red)
|
|
10
|
+
- **Inline decorations** — gutter icons next to AI-generated lines
|
|
11
|
+
- **Dashboard link** — one-click access to the full CodeDNA dashboard
|
|
12
|
+
- **Auto-refresh** — pulls latest scores from your local CodeDNA server
|
|
13
|
+
- **Free & open source** — works offline, no telemetry, no cloud lock-in
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
|
|
17
|
+
- **Python 3.10+**
|
|
18
|
+
- **codedna package** — `pip install codedna` (or `uv tool install codedna`)
|
|
19
|
+
- **Local API server** — `codedna serve` must be running (default: `http://localhost:8000`)
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
1. **Install the CLI:**
|
|
24
|
+
```bash
|
|
25
|
+
pip install codedna
|
|
26
|
+
# or
|
|
27
|
+
uv tool install codedna
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
2. **Start the API server** in your project:
|
|
31
|
+
```bash
|
|
32
|
+
cd your-project
|
|
33
|
+
codedna init
|
|
34
|
+
codedna serve
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
3. **Install this extension** from the VS Code marketplace, then open any file in your project. The status bar will show the AI risk score for the current file.
|
|
38
|
+
|
|
39
|
+
## Extension Settings
|
|
40
|
+
|
|
41
|
+
| Setting | Default | Description |
|
|
42
|
+
|---------|---------|-------------|
|
|
43
|
+
| `codedna.apiUrl` | `http://localhost:8000` | CodeDNA API server URL |
|
|
44
|
+
| `codedna.dashboardUrl` | `http://localhost:3000` | CodeDNA dashboard URL |
|
|
45
|
+
| `codedna.enabled` | `true` | Enable/disable the extension |
|
|
46
|
+
|
|
47
|
+
## Commands
|
|
48
|
+
|
|
49
|
+
- `CodeDNA: Refresh` — re-fetch scores from the API
|
|
50
|
+
- `CodeDNA: Open Dashboard` — open the dashboard in your browser
|
|
51
|
+
- `CodeDNA: Show File Risk` — show detailed risk breakdown for the current file
|
|
52
|
+
|
|
53
|
+
## Known Limitations
|
|
54
|
+
|
|
55
|
+
- Requires a local `codedna serve` instance (no cloud mode yet)
|
|
56
|
+
- Status bar shows the latest commit score, not real-time analysis
|
|
57
|
+
- Dashboard requires a separate Next.js process (`codedna dashboard`)
|
|
58
|
+
|
|
59
|
+
## Links
|
|
60
|
+
|
|
61
|
+
- [GitHub](https://github.com/natureco-official/codedna)
|
|
62
|
+
- [PyPI](https://pypi.org/project/codedna/)
|
|
63
|
+
- [Documentation](https://github.com/natureco-official/codedna/blob/main/README.md)
|
|
64
|
+
- [Issue tracker](https://github.com/natureco-official/codedna/issues)
|
|
65
|
+
|
|
66
|
+
## License
|
|
67
|
+
|
|
68
|
+
MIT © 2026 NatureCo
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Publishing to VS Code Marketplace
|
|
2
|
+
|
|
3
|
+
## One-time setup
|
|
4
|
+
|
|
5
|
+
1. **Create a publisher** at https://marketplace.visualstudio.com/manage
|
|
6
|
+
- Publisher ID must be exactly: `codedna`
|
|
7
|
+
|
|
8
|
+
2. **Get a Personal Access Token** from https://dev.azure.com
|
|
9
|
+
- Organization: `Marketplace`
|
|
10
|
+
- Scopes: `Marketplace → Manage`
|
|
11
|
+
|
|
12
|
+
3. **Login locally:**
|
|
13
|
+
```bash
|
|
14
|
+
npx vsce login codedna
|
|
15
|
+
```
|
|
16
|
+
(paste the PAT when prompted)
|
|
17
|
+
|
|
18
|
+
## Publish
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd vscode-extension
|
|
22
|
+
npm install
|
|
23
|
+
npm run compile
|
|
24
|
+
npx vsce package # creates codedna-vscode-0.1.0.vsix
|
|
25
|
+
npx vsce publish # publishes to marketplace
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The extension will be live at:
|
|
29
|
+
`https://marketplace.visualstudio.com/items?itemName=codedna.codedna-vscode`
|
|
30
|
+
|
|
31
|
+
## Update
|
|
32
|
+
|
|
33
|
+
Bump version in `package.json`, then:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx vsce publish patch # 0.1.0 → 0.1.1
|
|
37
|
+
npx vsce publish minor # 0.1.0 → 0.2.0
|
|
38
|
+
npx vsce publish major # 0.1.0 → 1.0.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Or edit `package.json` manually and run `npx vsce publish` (no flag = use new version).
|
|
42
|
+
|
|
43
|
+
## Test locally
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Build the .vsix
|
|
47
|
+
npx vsce package
|
|
48
|
+
|
|
49
|
+
# Install in your VS Code
|
|
50
|
+
code --install-extension codedna-vscode-0.1.0.vsix
|
|
51
|
+
|
|
52
|
+
# Or use the development version
|
|
53
|
+
code --install-extension .
|
|
54
|
+
|
|
55
|
+
# Then test by opening a project that has `codedna serve` running
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Pre-flight checklist
|
|
59
|
+
|
|
60
|
+
- [ ] `package.json` icon path resolves to a valid 128x128 PNG
|
|
61
|
+
- [ ] `MARKETPLACE_README.md` is up to date with current features
|
|
62
|
+
- [ ] `npm run compile` produces `out/extension.js` without errors
|
|
63
|
+
- [ ] `npx vsce package` creates a `.vsix` file (no errors about missing icon, repository, license)
|
|
64
|
+
- [ ] Bumped version (can't publish same version twice)
|
|
Binary file
|
|
@@ -4,10 +4,42 @@
|
|
|
4
4
|
"description": "AI Code Transparency — inline risk & understanding indicators",
|
|
5
5
|
"version": "0.1.0",
|
|
6
6
|
"publisher": "codedna",
|
|
7
|
+
"icon": "images/icon.png",
|
|
8
|
+
"galleryBanner": {
|
|
9
|
+
"color": "#0a0a0a",
|
|
10
|
+
"theme": "dark"
|
|
11
|
+
},
|
|
12
|
+
"badges": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://img.shields.io/pypi/v/codedna",
|
|
15
|
+
"href": "https://pypi.org/project/codedna/",
|
|
16
|
+
"description": "PyPI version"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"keywords": ["ai", "code-quality", "git", "developer-tools", "technical-debt"],
|
|
20
|
+
"categories": ["Other", "Linters"],
|
|
21
|
+
"homepage": "https://github.com/natureco-official/codedna",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/natureco-official/codedna/issues"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/natureco-official/codedna"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT",
|
|
7
30
|
"engines": { "vscode": "^1.85.0" },
|
|
8
|
-
"categories": ["Other"],
|
|
9
31
|
"activationEvents": ["onStartupFinished"],
|
|
10
32
|
"main": "./out/extension.js",
|
|
33
|
+
"scripts": {
|
|
34
|
+
"compile": "tsc -p ./",
|
|
35
|
+
"watch": "tsc -watch -p ./",
|
|
36
|
+
"vscode:prepublish": "npm run compile",
|
|
37
|
+
"package": "vsce package",
|
|
38
|
+
"publish": "vsce publish"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@vscode/vsce": "^2.24.0"
|
|
42
|
+
},
|
|
11
43
|
"contributes": {
|
|
12
44
|
"configuration": {
|
|
13
45
|
"title": "CodeDNA",
|
|
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
|