codedna 0.5.1__tar.gz → 0.6.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.5.1 → codedna-0.6.0}/CHANGELOG.md +41 -0
- {codedna-0.5.1 → codedna-0.6.0}/PKG-INFO +1 -1
- {codedna-0.5.1 → codedna-0.6.0}/codedna/__init__.py +1 -1
- {codedna-0.5.1 → codedna-0.6.0}/codedna/cli.py +310 -0
- codedna-0.6.0/codedna/mail.py +335 -0
- {codedna-0.5.1 → codedna-0.6.0}/pyproject.toml +1 -1
- {codedna-0.5.1 → codedna-0.6.0}/.env.example +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/CODEOWNERS +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/dependabot.yml +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/workflows/codedna.yml +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/workflows/codeql.yml +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.github/workflows/test.yml +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.gitignore +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/.python-version +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/CONTRIBUTING.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/LICENSE +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/SECURITY.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/ai.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/ai_box.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/ai_fingerprint.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/analyzer.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/api.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/auth.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/bus_factor.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/db.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/demo.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/git_hook.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/integrations/__init__.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/integrations/github_bot.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/integrations/jira.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/integrations/lemonsqueezy.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/interview.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/onboarding.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/plan.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/protection.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/rate_limit.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/scorer.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/sprint_health.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/survey.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/codedna/tech_debt.py +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/.env.local.example +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/.gitignore +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/ai-compare/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/api/auth/login/route.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/api/auth/logout/route.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/api/auth/me/route.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/api/auth/register/route.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/api/billing/checkout/route.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/billing/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/bus-factor/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/commits/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/debt/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/favicon.ico +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/files/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/fonts/GeistMonoVF.woff +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/fonts/GeistVF.woff +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/globals.css +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/interview/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/layout.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/login/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/onboarding/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/pricing/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/protected/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/register/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/settings/integrations/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/app/sprints/page.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/AuthProvider.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/ClientProviders.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/CommitTable.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/CostInfoTooltip.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/ErrorBanner.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/FeatureGate.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/FileHeatmap.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/LanguageSwitcher.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/NavClient.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/OverviewTitles.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/QuickInsights.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/RiskBadge.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/SummaryCards.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/UnderstandingChart.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/components/UpgradeBanner.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/api.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/auth.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/i18n/en.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/i18n/index.tsx +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/i18n/tr.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/lib/plan.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/next-env.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/next.config.mjs +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/package-lock.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/postcss.config.mjs +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/tailwind.config.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/dashboard/tsconfig.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/hooks/post-commit +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/uv.lock +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/.vscodeignore +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/MARKETPLACE_README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/PUBLISH.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/images/icon.png +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/.bin/tsc +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/.bin/tsserver +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/.package-lock.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/LICENSE +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/assert/strict.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/assert.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/async_hooks.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/buffer.buffer.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/buffer.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/child_process.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/cluster.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/compatibility/disposable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/compatibility/index.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/compatibility/indexable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/console.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/constants.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/crypto.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/dgram.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/dns/promises.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/dns.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/domain.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/events.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/fs/promises.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/fs.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/globals.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/globals.typedarray.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/http.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/http2.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/https.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/index.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/inspector.generated.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/module.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/net.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/os.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/path.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/perf_hooks.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/process.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/punycode.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/querystring.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/readline/promises.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/readline.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/repl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/sea.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/stream/consumers.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/stream/promises.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/stream/web.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/stream.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/string_decoder.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/test.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/timers/promises.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/timers.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/tls.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/trace_events.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/ts5.6/index.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/tty.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/url.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/util.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/v8.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/vm.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/wasi.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/web-globals/events.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/worker_threads.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/node/zlib.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/vscode/LICENSE +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/vscode/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/vscode/index.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/@types/vscode/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/LICENSE.txt +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/SECURITY.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/bin/tsc +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/bin/tsserver +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/_tsc.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/_tsserver.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/_typingsInstaller.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.dom.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es5.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.es6.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/tsc.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/tsserver.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/tsserverlibrary.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/typesMap.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/typescript.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/typescript.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/typingsInstaller.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/watchGuard.js +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/typescript/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/LICENSE +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/README.md +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/agent.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/api.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/balanced-pool.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/cache.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/client.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/connector.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/content-type.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/cookies.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/dispatcher.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/errors.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/eventsource.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/fetch.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/file.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/filereader.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/formdata.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/global-dispatcher.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/global-origin.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/handlers.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/header.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/index.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/interceptors.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/mock-agent.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/mock-client.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/mock-errors.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/mock-interceptor.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/mock-pool.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/patch.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/pool-stats.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/pool.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/proxy-agent.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/readable.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/retry-agent.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/retry-handler.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/util.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/webidl.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/node_modules/undici-types/websocket.d.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/out/apiClient.js.map +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/out/decorations.js.map +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/out/extension.js.map +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/out/statusBar.js.map +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/package-lock.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/package.json +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/src/apiClient.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/src/decorations.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/src/extension.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/src/statusBar.ts +0 -0
- {codedna-0.5.1 → codedna-0.6.0}/vscode-extension/tsconfig.json +0 -0
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.0] - 2026-06-24 - "MAIL MONITOR" (MINOR)
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **`codedna mail` command** - Gmail monitor with importance scoring
|
|
7
|
+
- Reads `timurhanhz3@gmail.com` via IMAP + App Password
|
|
8
|
+
- App Password stored at `~/.codedna/gmail_app_password` (chmod 600)
|
|
9
|
+
- State persisted at `~/.codedna/mail_state.json` (last UID, incremental check)
|
|
10
|
+
- 6 importance categories with scoring:
|
|
11
|
+
- `security` (10): token found, breach, 2FA, compromised
|
|
12
|
+
- `security` (9): password reset, suspicious login, locked account
|
|
13
|
+
- `infra` (8): deploy fail, build fail, crash, outage, domain expire
|
|
14
|
+
- `billing` (8): invoice, payment failed, subscription, card declined
|
|
15
|
+
- `business` (6): meeting, call, proposal, contract
|
|
16
|
+
- `project` (4): published, release, deploy success
|
|
17
|
+
- Noise detection auto-skips: `Re:`, newsletter, marketing, noreply
|
|
18
|
+
- Options:
|
|
19
|
+
- `--since N` (default 7): look back N days
|
|
20
|
+
- `--threshold N` (default 5): min importance score
|
|
21
|
+
- `--new-only`: only show messages newer than last check (uses UID tracking)
|
|
22
|
+
- `--show-noise`: also display noise/promo messages
|
|
23
|
+
- `--reset`: reset state and re-check all messages
|
|
24
|
+
- Output: legacy CLI aesthetic (bold cyan header, category-colored boxes, summary panel)
|
|
25
|
+
- Use case: cron `codedna mail --new-only` for daily digest
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Minor version bump 0.5.2 -> 0.6.0 (new user-facing command)
|
|
29
|
+
|
|
30
|
+
## [0.5.2] - 2026-06-24 - "SECURITY CHECK"
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- `codedna security-check` command - Pre-release security scanner
|
|
34
|
+
- Personal machine path detection (e.g. `/Users/yourname/`, `/home/user/`)
|
|
35
|
+
- Tracked secret detection (`.npmrc`, `.env*` in git)
|
|
36
|
+
- Secret pattern detection (npm, GitHub PAT, OpenAI, Anthropic, PyPI, generic API keys)
|
|
37
|
+
- `.gitignore` rule verification (.env, .npmrc, node_modules, __pycache__)
|
|
38
|
+
- Options: `--path` (custom root), `--strict` (exit on warnings)
|
|
39
|
+
- Output: legacy CLI aesthetic (4 categories, emoji markers, summary panel)
|
|
40
|
+
- Use case: run BEFORE `uv publish` or `git push` to catch leaks
|
|
41
|
+
- Critical response: exit 1 on personal paths, tracked secrets, or missing .env rules
|
|
42
|
+
- Detected the recent NatureCo CLI v5.7.0 issue (sasuke-notes paths + tracked .npmrc)
|
|
43
|
+
|
|
3
44
|
## [0.5.1] - 2026-06-24 — "Doctor English"
|
|
4
45
|
|
|
5
46
|
### 🔄 Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codedna
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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
|
|
@@ -2146,6 +2146,316 @@ def demo(
|
|
|
2146
2146
|
console.print()
|
|
2147
2147
|
|
|
2148
2148
|
|
|
2149
|
+
# ---------------------------------------------------------------------------
|
|
2150
|
+
# codedna mail (Gmail monitor with importance scoring)
|
|
2151
|
+
# ---------------------------------------------------------------------------
|
|
2152
|
+
@app.command()
|
|
2153
|
+
def mail(
|
|
2154
|
+
since: int = typer.Option(7, "--since", "-s", help="Look back N days (default: 7)"),
|
|
2155
|
+
threshold: int = typer.Option(5, "--threshold", "-t", help="Min importance score (default: 5)"),
|
|
2156
|
+
new_only: bool = typer.Option(False, "--new-only", help="Only show messages newer than last check"),
|
|
2157
|
+
show_noise: bool = typer.Option(False, "--show-noise", help="Also show noise/promo messages"),
|
|
2158
|
+
reset_state: bool = typer.Option(False, "--reset", help="Reset state and re-check all messages"),
|
|
2159
|
+
) -> None:
|
|
2160
|
+
"""Check Gmail for new important messages (security, billing, infra).
|
|
2161
|
+
|
|
2162
|
+
Reads from timurhanhz3@gmail.com via IMAP + App Password.
|
|
2163
|
+
Scores each message by category and prints only those above threshold.
|
|
2164
|
+
|
|
2165
|
+
State is persisted at ~/.codedna/mail_state.json so subsequent runs only
|
|
2166
|
+
show new messages.
|
|
2167
|
+
"""
|
|
2168
|
+
from codedna.mail import (
|
|
2169
|
+
check_mail, format_report, get_new_since_last_check,
|
|
2170
|
+
_load_state, _save_state, MailMessage,
|
|
2171
|
+
)
|
|
2172
|
+
|
|
2173
|
+
console.print()
|
|
2174
|
+
console.print("[bold cyan]🧬 CodeDNA[/bold cyan] — Mail monitor: [dim]timurhanhz3@gmail.com[/dim]\n")
|
|
2175
|
+
|
|
2176
|
+
if reset_state:
|
|
2177
|
+
from codedna.mail import _load_state
|
|
2178
|
+
state = _load_state()
|
|
2179
|
+
state["last_uid"] = "0"
|
|
2180
|
+
_save_state(state)
|
|
2181
|
+
console.print(" [green]✓[/green] Mail state reset")
|
|
2182
|
+
console.print()
|
|
2183
|
+
return
|
|
2184
|
+
|
|
2185
|
+
if new_only:
|
|
2186
|
+
# Use UID-based check (only new since last run)
|
|
2187
|
+
result = get_new_since_last_check()
|
|
2188
|
+
else:
|
|
2189
|
+
# Full check (look back N days)
|
|
2190
|
+
result = check_mail(since_days=since, threshold=threshold)
|
|
2191
|
+
|
|
2192
|
+
# ── Render: legacy CLI aesthetic ──────────────────────────────────
|
|
2193
|
+
console.print(f"[bold]─── Summary ───[/bold]")
|
|
2194
|
+
console.print(f" Total new: [cyan]{result.total_new}[/cyan] message(s)")
|
|
2195
|
+
console.print(f" Important: [bold {'red' if result.important else 'green'}]{len(result.important)}[/bold {'red' if result.important else 'green'}] (threshold ≥ {threshold})")
|
|
2196
|
+
console.print(f" Noise: [dim]{len(result.noise)}[/dim] skipped")
|
|
2197
|
+
console.print()
|
|
2198
|
+
|
|
2199
|
+
if result.errors:
|
|
2200
|
+
console.print("[bold red]─── Errors ───[/bold]")
|
|
2201
|
+
for err in result.errors:
|
|
2202
|
+
console.print(f" [red]✗[/red] {err}")
|
|
2203
|
+
console.print()
|
|
2204
|
+
|
|
2205
|
+
if result.important:
|
|
2206
|
+
console.print("[bold]─── Important Messages ───[/bold]")
|
|
2207
|
+
for m in result.important:
|
|
2208
|
+
cat_color = {
|
|
2209
|
+
"security": "red",
|
|
2210
|
+
"billing": "yellow",
|
|
2211
|
+
"infra": "yellow",
|
|
2212
|
+
"project": "cyan",
|
|
2213
|
+
"business": "magenta",
|
|
2214
|
+
}.get(m.importance_category, "white")
|
|
2215
|
+
console.print(f" [{cat_color}]■[/{cat_color}] [bold {cat_color}][{m.importance_category}][/bold {cat_color}] score={m.importance_score}")
|
|
2216
|
+
console.print(f" From: {m.from_addr}")
|
|
2217
|
+
console.print(f" Subject: [bold]{m.subject}[/bold]")
|
|
2218
|
+
console.print(f" Date: [dim]{m.date}[/dim]")
|
|
2219
|
+
if m.body_preview:
|
|
2220
|
+
preview = m.body_preview[:200].replace("\n", " ").strip()
|
|
2221
|
+
console.print(f" Preview: [dim]{preview}…[/dim]")
|
|
2222
|
+
console.print()
|
|
2223
|
+
|
|
2224
|
+
if show_noise and result.noise:
|
|
2225
|
+
console.print("[bold dim]─── Noise (skipped) ───[/bold dim]")
|
|
2226
|
+
for m in result.noise[:10]: # limit to first 10
|
|
2227
|
+
console.print(f" [dim]— {m.subject[:80]} ({m.from_addr})[/dim]")
|
|
2228
|
+
if len(result.noise) > 10:
|
|
2229
|
+
console.print(f" [dim]… and {len(result.noise) - 10} more[/dim]")
|
|
2230
|
+
console.print()
|
|
2231
|
+
|
|
2232
|
+
# ── Summary panel ────────────────────────────────────────────────
|
|
2233
|
+
if result.important:
|
|
2234
|
+
border = "red"
|
|
2235
|
+
title = f"[bold red]🔥 {len(result.important)} Important Message(s) Found[/bold red]"
|
|
2236
|
+
body = (
|
|
2237
|
+
f"[red]Action needed: review the messages above.[/red]\n\n"
|
|
2238
|
+
f"[dim]Next: run[/dim] [cyan]codedna mail --new-only[/cyan] [dim]for incremental updates.[/dim]"
|
|
2239
|
+
)
|
|
2240
|
+
elif result.total_new > 0:
|
|
2241
|
+
border = "green"
|
|
2242
|
+
title = "[bold green]✓ No important messages[/bold green]"
|
|
2243
|
+
body = (
|
|
2244
|
+
f"[green]{result.total_new} new message(s) checked, all noise/promo.[/green]\n\n"
|
|
2245
|
+
f"[dim]Run[/dim] [cyan]codedna mail --show-noise[/cyan] [dim]to see all.[/dim]"
|
|
2246
|
+
)
|
|
2247
|
+
else:
|
|
2248
|
+
border = "cyan"
|
|
2249
|
+
title = "[bold cyan]✓ No new messages[/bold cyan]"
|
|
2250
|
+
body = "[dim]Mailbox is up to date.[/dim]"
|
|
2251
|
+
|
|
2252
|
+
console.print()
|
|
2253
|
+
console.print(Panel(body, title=title, border_style=border, padding=(1, 2)))
|
|
2254
|
+
console.print()
|
|
2255
|
+
|
|
2256
|
+
|
|
2257
|
+
# ---------------------------------------------------------------------------
|
|
2258
|
+
# codedna security-check (pre-release secret & personal path scanner)
|
|
2259
|
+
# ---------------------------------------------------------------------------
|
|
2260
|
+
@app.command(name="security-check")
|
|
2261
|
+
def security_check(
|
|
2262
|
+
path: Optional[Path] = typer.Option(None, "--path", "-p", help="Project root to scan (defaults to cwd)"),
|
|
2263
|
+
strict: bool = typer.Option(False, "--strict", help="Exit 1 on any warning"),
|
|
2264
|
+
) -> None:
|
|
2265
|
+
"""Scan the project for personal paths, secrets, and missing .gitignore rules.
|
|
2266
|
+
|
|
2267
|
+
Run this BEFORE publishing or pushing to GitHub. Catches:
|
|
2268
|
+
- Personal machine paths in code/README (e.g. /Users/yourname/...)
|
|
2269
|
+
- Tracked secrets (.npmrc, .env*, api_key, token patterns)
|
|
2270
|
+
- Missing .gitignore rules for sensitive files
|
|
2271
|
+
"""
|
|
2272
|
+
import subprocess
|
|
2273
|
+
from codedna.git_hook import find_git_root
|
|
2274
|
+
import re
|
|
2275
|
+
|
|
2276
|
+
root = path or find_git_root() or Path.cwd()
|
|
2277
|
+
if not root.exists():
|
|
2278
|
+
console.print(f" [red]✗[/red] Path not found: {root}")
|
|
2279
|
+
raise typer.Exit(1)
|
|
2280
|
+
|
|
2281
|
+
console.print()
|
|
2282
|
+
console.print(f"[bold cyan]🧬 CodeDNA[/bold cyan] — Security check: [dim]{root}[/dim]\n")
|
|
2283
|
+
|
|
2284
|
+
issues: list[tuple[str, str, str]] = [] # (severity, category, message)
|
|
2285
|
+
warnings: list[tuple[str, str, str]] = []
|
|
2286
|
+
|
|
2287
|
+
def _ok(msg: str) -> None:
|
|
2288
|
+
console.print(f" [green]✓[/green] {msg}")
|
|
2289
|
+
|
|
2290
|
+
def _warn(msg: str) -> None:
|
|
2291
|
+
console.print(f" [yellow]⚠[/yellow] {msg}")
|
|
2292
|
+
|
|
2293
|
+
def _fail(msg: str) -> None:
|
|
2294
|
+
console.print(f" [red]✗[/red] {msg}")
|
|
2295
|
+
|
|
2296
|
+
# ── 1. Personal machine paths ─────────────────────────────────────
|
|
2297
|
+
console.print("[bold]─── 1. Personal Path Scan ───[/bold]")
|
|
2298
|
+
personal_pattern = re.compile(r"/Users/[\w.-]+/|\/home\/[\w.-]+/|C:\\Users\\[\w.-]+\\")
|
|
2299
|
+
found_personal: list[str] = []
|
|
2300
|
+
|
|
2301
|
+
# Scan README, source, and markdown files
|
|
2302
|
+
scan_extensions = {".md", ".py", ".js", ".ts", ".json", ".sh", ".yml", ".yaml", ".toml"}
|
|
2303
|
+
file_count = 0
|
|
2304
|
+
for ext in scan_extensions:
|
|
2305
|
+
for f in root.rglob(f"*{ext}"):
|
|
2306
|
+
# Skip ignored dirs
|
|
2307
|
+
if any(p in f.parts for p in [".git", "node_modules", "dist", "build", ".venv", "venv", "__pycache__"]):
|
|
2308
|
+
continue
|
|
2309
|
+
try:
|
|
2310
|
+
content = f.read_text(errors="ignore")
|
|
2311
|
+
except Exception:
|
|
2312
|
+
continue
|
|
2313
|
+
file_count += 1
|
|
2314
|
+
matches = personal_pattern.findall(content)
|
|
2315
|
+
if matches:
|
|
2316
|
+
# Show unique paths
|
|
2317
|
+
unique = set(matches)
|
|
2318
|
+
for m in unique:
|
|
2319
|
+
if m not in found_personal:
|
|
2320
|
+
found_personal.append(m)
|
|
2321
|
+
rel = f.relative_to(root) if f.is_relative_to(root) else f
|
|
2322
|
+
_fail(f"Found: {m} in {rel}")
|
|
2323
|
+
issues.append(("fail", "personal-path", f"{m} in {rel}"))
|
|
2324
|
+
|
|
2325
|
+
if not found_personal:
|
|
2326
|
+
_ok(f"No personal paths found ({file_count} files scanned)")
|
|
2327
|
+
console.print()
|
|
2328
|
+
|
|
2329
|
+
# ── 2. Tracked secrets ────────────────────────────────────────────
|
|
2330
|
+
console.print("[bold]─── 2. Tracked Secret Scan ───[/bold]")
|
|
2331
|
+
|
|
2332
|
+
# Check if .npmrc, .env*, .git/config is tracked
|
|
2333
|
+
secret_files = [".npmrc", ".env", ".env.local", ".env.test", ".env.production"]
|
|
2334
|
+
for sf in secret_files:
|
|
2335
|
+
f = root / sf
|
|
2336
|
+
if f.exists():
|
|
2337
|
+
# Check if tracked
|
|
2338
|
+
r = subprocess.run(
|
|
2339
|
+
["git", "ls-files", "--error-unmatch", str(f.relative_to(root))],
|
|
2340
|
+
cwd=str(root), capture_output=True, text=True
|
|
2341
|
+
)
|
|
2342
|
+
if r.returncode == 0:
|
|
2343
|
+
_fail(f"{sf} is tracked in git (contains secrets!)")
|
|
2344
|
+
issues.append(("fail", "tracked-secret", f"{sf} tracked"))
|
|
2345
|
+
else:
|
|
2346
|
+
_ok(f"{sf} exists locally but is NOT tracked (safe)")
|
|
2347
|
+
else:
|
|
2348
|
+
_ok(f"{sf} not present")
|
|
2349
|
+
console.print()
|
|
2350
|
+
|
|
2351
|
+
# ── 3. Secret patterns in tracked files ──────────────────────────
|
|
2352
|
+
console.print("[bold]─── 3. Secret Pattern Scan ───[/bold]")
|
|
2353
|
+
secret_patterns = {
|
|
2354
|
+
"npm token": re.compile(r"npm_[A-Za-z0-9]{20,}"),
|
|
2355
|
+
"GitHub PAT": re.compile(r"ghp_[A-Za-z0-9]{20,}"),
|
|
2356
|
+
"OpenAI key": re.compile(r"sk-[A-Za-z0-9]{20,}"),
|
|
2357
|
+
"Anthropic key": re.compile(r"sk-ant-[A-Za-z0-9]{20,}"),
|
|
2358
|
+
"PyPI token": re.compile(r"pypi-[A-Za-z0-9]{20,}"),
|
|
2359
|
+
"Generic API key": re.compile(r"(?i)(api[_-]?key|token|secret)\s*[:=]\s*['\"][A-Za-z0-9_-]{16,}['\"]"),
|
|
2360
|
+
}
|
|
2361
|
+
|
|
2362
|
+
found_secrets: list[tuple[str, str, str]] = []
|
|
2363
|
+
for ext in [".py", ".js", ".ts", ".json", ".sh", ".md"]:
|
|
2364
|
+
for f in root.rglob(f"*{ext}"):
|
|
2365
|
+
if any(p in f.parts for p in [".git", "node_modules", "dist", "build", ".venv", "venv", "__pycache__", ".pytest_cache"]):
|
|
2366
|
+
continue
|
|
2367
|
+
try:
|
|
2368
|
+
content = f.read_text(errors="ignore")
|
|
2369
|
+
except Exception:
|
|
2370
|
+
continue
|
|
2371
|
+
for name, pattern in secret_patterns.items():
|
|
2372
|
+
if pattern.search(content):
|
|
2373
|
+
rel = f.relative_to(root) if f.is_relative_to(root) else f
|
|
2374
|
+
# Skip if it's in a docstring example or test fixture
|
|
2375
|
+
if "example" in str(rel).lower() or "test" in str(rel).lower() or "fixture" in str(rel).lower():
|
|
2376
|
+
continue
|
|
2377
|
+
# Skip obvious placeholders
|
|
2378
|
+
if any(ph in content.lower() for ph in ["placeholder", "your_api_key", "xxx", "00000"]):
|
|
2379
|
+
continue
|
|
2380
|
+
found_secrets.append((name, str(rel), pattern.pattern[:30]))
|
|
2381
|
+
_fail(f"{name} pattern in {rel}")
|
|
2382
|
+
issues.append(("fail", "secret-pattern", f"{name} in {rel}"))
|
|
2383
|
+
|
|
2384
|
+
if not found_secrets:
|
|
2385
|
+
_ok("No secret patterns found")
|
|
2386
|
+
console.print()
|
|
2387
|
+
|
|
2388
|
+
# ── 4. .gitignore verification ────────────────────────────────────
|
|
2389
|
+
console.print("[bold]─── 4. .gitignore Verification ───[/bold]")
|
|
2390
|
+
gitignore = root / ".gitignore"
|
|
2391
|
+
if not gitignore.exists():
|
|
2392
|
+
_fail(".gitignore not found")
|
|
2393
|
+
issues.append(("fail", "no-gitignore", "no .gitignore"))
|
|
2394
|
+
else:
|
|
2395
|
+
content = gitignore.read_text()
|
|
2396
|
+
# Check critical rules
|
|
2397
|
+
required_rules = {
|
|
2398
|
+
".env": False,
|
|
2399
|
+
".env.": False,
|
|
2400
|
+
".npmrc": False,
|
|
2401
|
+
"node_modules": False,
|
|
2402
|
+
"__pycache__": False,
|
|
2403
|
+
}
|
|
2404
|
+
for line in content.split("\n"):
|
|
2405
|
+
line = line.strip()
|
|
2406
|
+
for rule in required_rules:
|
|
2407
|
+
if rule == line or (rule.endswith(".") and rule in line):
|
|
2408
|
+
required_rules[rule] = True
|
|
2409
|
+
|
|
2410
|
+
for rule, present in required_rules.items():
|
|
2411
|
+
if present:
|
|
2412
|
+
_ok(f".gitignore includes {rule} (or pattern)")
|
|
2413
|
+
else:
|
|
2414
|
+
_warn(f".gitignore missing {rule} rule")
|
|
2415
|
+
warnings.append(("warn", "gitignore-missing", f"missing {rule}"))
|
|
2416
|
+
console.print()
|
|
2417
|
+
|
|
2418
|
+
# ── Summary ───────────────────────────────────────────────────────
|
|
2419
|
+
n_fail = len(issues)
|
|
2420
|
+
n_warn = len(warnings)
|
|
2421
|
+
console.print("[bold]─── Summary ───[/bold]")
|
|
2422
|
+
|
|
2423
|
+
if n_fail == 0 and n_warn == 0:
|
|
2424
|
+
console.print(" [bold green]✓ All security checks passed — safe to publish.[/bold green]")
|
|
2425
|
+
bilgi = (
|
|
2426
|
+
f"[bold green]CodeDNA security: CLEAN[/bold green]\n\n"
|
|
2427
|
+
f"[dim]All checks passed. No personal paths, no tracked secrets, no secret patterns.[/dim]\n\n"
|
|
2428
|
+
f"[dim]Safe to run:[/dim] [cyan]npm publish[/cyan] [dim]or[/dim] [cyan]uv publish[/cyan]"
|
|
2429
|
+
)
|
|
2430
|
+
border = "green"
|
|
2431
|
+
elif n_fail == 0:
|
|
2432
|
+
console.print(f" [bold yellow]⚠ {n_warn} warning(s), 0 critical issues.[/bold yellow]")
|
|
2433
|
+
bilgi = (
|
|
2434
|
+
f"[bold yellow]CodeDNA security: WARNINGS[/bold yellow]\n\n"
|
|
2435
|
+
f"[dim]{n_warn} warning(s) to review, but no critical issues blocking publish.[/dim]\n\n"
|
|
2436
|
+
f"[dim]Re-run after fixes:[/dim] [cyan]codedna security-check[/cyan]"
|
|
2437
|
+
)
|
|
2438
|
+
border = "yellow"
|
|
2439
|
+
else:
|
|
2440
|
+
console.print(f" [bold red]✗ {n_fail} critical issue(s), {n_warn} warning(s).[/bold red]")
|
|
2441
|
+
for sev, cat, msg in issues:
|
|
2442
|
+
console.print(f" [red]•[/red] [{cat}] {msg}")
|
|
2443
|
+
bilgi = (
|
|
2444
|
+
f"[bold red]CodeDNA security: BLOCKED[/bold red]\n\n"
|
|
2445
|
+
f"[red]{n_fail} critical issue(s) must be fixed before publishing.[/red]\n\n"
|
|
2446
|
+
f"[dim]Fix issues, add to .gitignore, then re-run:[/dim]\n"
|
|
2447
|
+
f"[cyan]codedna security-check[/cyan]"
|
|
2448
|
+
)
|
|
2449
|
+
border = "red"
|
|
2450
|
+
|
|
2451
|
+
console.print()
|
|
2452
|
+
console.print(Panel(bilgi, border_style=border, padding=(1, 2)))
|
|
2453
|
+
console.print()
|
|
2454
|
+
|
|
2455
|
+
if n_fail > 0 or (strict and n_warn > 0):
|
|
2456
|
+
raise typer.Exit(1)
|
|
2457
|
+
|
|
2458
|
+
|
|
2149
2459
|
# ---------------------------------------------------------------------------
|
|
2150
2460
|
# codedna setup (interactive AI analysis configuration wizard)
|
|
2151
2461
|
# ---------------------------------------------------------------------------
|