# Binaries
bin/
*.exe
*.dll
*.so
*.dylib

# Test + coverage
coverage.out
coverage.html
*.test
*.prof

# Go workspaces (optional; not used here)
go.work
go.work.sum

# Frontend build output — everything in dist/ is generated by
# `npm run build` EXCEPT the .gitkeep sentinel which keeps the directory
# present on fresh clones so //go:embed in panel-ui/embed.go succeeds
# before anyone has run the build.
panel-ui/dist/*
!panel-ui/dist/.gitkeep
panel-ui/node_modules/
panel-ui/.vite/

# Secrets / local config — NEVER commit
.env
.env.local
.env.*.local
config.local.toml

# Editor / OS
.idea/
.vscode/
*.swp
*.swo
.DS_Store
Thumbs.db

# Logs
*.log
logs/
# ...but not the panel-ui source dir that happens to be named "logs"
!panel-ui/src/shells/admin/logs/
!panel-ui/src/shells/user/logs/

# Docker
.docker/

# Top-level build artifacts occasionally produced by local `go build`
/server
/jabali-agent
/panel-api/server
/panel-agent/jabali-agent

# Playwright MCP browser cache (per-run artefacts)
.playwright-mcp/

# Design iteration screenshots (keep under docs/ instead)
*.png
!panel-ui/public/**/*.png
!docs/**/*.png
# Claude Code local tooling — developer-machine only, never project artifacts
.claude/
AGENTS.md

# direnv project-scoped env (DB creds etc.)
.envrc
.direnv/
.gitnexus
tools/aa-smoke/aa-smoke

# Compiled binaries at repo root
/jabali-ssh-shell

# Ephemeral snapshot / report files from CI or manual runs
*-page-snapshot.yml
*-e2e-test-report.md

# Build artifacts — never commit compiled binaries
panel-api/cmd/server/server
panel-agent/cmd/jabali-agent/jabali-agent

# Code-search index (rebuild from source as needed)
ruvector.db
panel-ui/ruvector.db

# Local agent harness telemetry — local-only state
.claude-flow/

# build-release.sh output
dist/
