# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info

# Virtual environments
.venv

# BotShield runtime data (SQLite event log, trained ML models)
data/
.pytest_cache/

# Secrets -- MONGODB_URI, BOTSHIELD_CHALLENGE_SECRET, etc. Never commit.
.env
.env.local

# Node/npm workspace (botshield-js/, demo_app_nextjs/) -- dist/ above
# already covers each package's tsup build output.
node_modules/
.next/
next-env.d.ts
npm-debug.log*

# copy-sdk.mjs's build artifact -- regenerated from @botshield1.0/browser's
# dist/, never hand-edited or committed.
demo_app_nextjs/public/botshield-browser.js
demo_app_express/public/botshield-browser.js

# Playwright (e2e/challenge.spec.ts) output
demo_app_nextjs/test-results/
demo_app_nextjs/playwright-report/
demo_app_nextjs/.e2e-data/

# agent_sandbox/ per-run transcripts (added in a later milestone)
agent_sandbox/runs/

# examples/ -- per-example dependency installs, venvs, build output and harness
# artifacts. node_modules/, .next/, dist/, build/, .venv, .env are already
# covered by the unrooted patterns above, which match at any depth.
#
# NOTE: examples/*/package-lock.json is deliberately NOT ignored. Those
# lockfiles are the committed proof that each example resolves the published
# registry tarball rather than the local botshield-js/ workspace copy --
# ignoring them would delete the evidence.
examples/**/.venv/
examples/**/.angular/
examples/**/public/botshield-browser.js
examples/**/test-results/
examples/**/playwright-report/
examples/verify/results/
