The execution boundary for v2. Adds the local docker/podman sandbox adapter and the hardened host subprocess runner every other delivery adapter will use. - adapters/process.py: the one place the platform shells out. argv-only (no shell), start_new_session + killpg on timeout, concurrent stdout/stderr drains with a byte cap, explicit minimal env (never os.environ), and a missing binary reported as spawn_failed rather than an exception. - adapters/docker_sandbox.py: DockerSandboxAdapter over SandboxProviderPort. --user 1000:1000, --cap-drop ALL, no-new-privileges, pids/cpu/memory limits, --read-only with tmpfs scratch, one bind mount (the work tree, never the git dir), labels, no published ports. Path-safe file access; secrets refused in `docker exec -e`. Extras for later phases: start_demo_container (loopback publish only), list_managed_containers, remove_container. - registry: SANDBOX_PROVIDER=docker, cached singleton so the workspace registry survives create_workspace -> start_session. - sandbox_gateway worker: reap_orphans() removes labelled containers no live session points at, audited as sandbox.reap; run_pass() does both passes. - sandbox router: every mutating route now requires the platform owner (PLAN-v2 §7.7); read-only status routes stay open to org members. - sandbox-panel: canManageInfra prop (fails closed) hides the create form, the session panel and the action buttons from non-owners. Tests: 346 API (+37), 67 web (+3); ruff, mypy, tsc and lint clean. Three existing tests now drive the sandbox as the platform owner, since that is who may touch it. Report: docs/plan/reports/agent-3-phase-1.md
63 lines
806 B
Plaintext
63 lines
806 B
Plaintext
# dependencies
|
|
node_modules/
|
|
.pnpm-store/
|
|
|
|
# builds
|
|
.next/
|
|
out/
|
|
dist/
|
|
build/
|
|
*.tsbuildinfo
|
|
|
|
# python
|
|
__pycache__/
|
|
*.py[cod]
|
|
.venv/
|
|
venv/
|
|
*.egg-info/
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
.mypy_cache/
|
|
|
|
# local databases (runtime data, not source)
|
|
*.db
|
|
*.db-shm
|
|
*.db-wal
|
|
*.sqlite
|
|
*.sqlite3
|
|
|
|
# env & secrets
|
|
.env
|
|
.env.local
|
|
.env.production
|
|
.env.*.local
|
|
!.env.example
|
|
|
|
# logs
|
|
*.log
|
|
logs/
|
|
|
|
# pending agy OAuth login challenge (contains a PKCE verifier — never commit)
|
|
.agy-login-state.json
|
|
apps/api/.agy-login-state.json
|
|
|
|
# editor / os
|
|
.DS_Store
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
|
|
# coverage
|
|
coverage/
|
|
htmlcov/
|
|
.coverage
|
|
|
|
# agent working memory — session state, not project source
|
|
.workbuddy-ai/
|
|
|
|
# v2 runtime data (workspaces, artifacts)
|
|
.data/
|
|
|
|
# pytest scratch root, used when the system temp dir is not writable
|
|
.pytest-tmp/
|