Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.dograh.com/llms.txt

Use this file to discover all available pages before exploring further.

The checked-in .devcontainer/ follows the Dev Containers specification, so it should also work in Cursor, JetBrains IDEs, and other Dev Container-compatible editors. Only the VS Code path is actively tested. If something breaks elsewhere, please open a GitHub issue.

What the Bootstrap Does

While the container starts, the devcontainer will:
  • Initialize the pipecat git submodule on the host through initializeCommand
  • Bring up postgres, redis, and minio through Docker Compose and wait for them to be healthy
  • Seed the venv named volume from the image-baked Python 3.13 venv
  • Reinstall pipecat as editable from the bind-mounted submodule so source edits take effect
  • Create api/.env, api/.env.test, and ui/.env from their *.example templates if they do not already exist
  • Run npm ci for ui/ and api/mcp_server/ts_validator/
In the API env files, localhost for Postgres, Redis, and MinIO is rewritten to the docker network aliases postgres, redis, and minio. MINIO_PUBLIC_ENDPOINT deliberately stays on localhost because the browser on your host loads from it.
If you already had an api/.env or api/.env.test from host-managed development with localhost hosts for Postgres, Redis, or MinIO, the bootstrap leaves it untouched. Edit those URLs to the docker network aliases before starting the backend inside the devcontainer, or delete the file and let the bootstrap recreate it on the next rebuild.

Dev Container CLI

Install the CLI once on your host:
npm install -g @devcontainers/cli
Start or rebuild the container from the repository root:
devcontainer up --workspace-folder .
Open a shell in the running workspace container:
devcontainer exec --workspace-folder . bash
Run a one-off command from the host:
devcontainer exec --workspace-folder . bash scripts/start_services_dev.sh

Backend Logs

Tail backend logs from inside the container:
tail -f logs/latest/*.log

Restarting the Backend

Re-run the same start script to restart. It reads the PID files under run/, terminates the previous services along with their descendants, and starts fresh ones.
bash scripts/start_services_dev.sh
uvicorn runs with --reload --reload-dir api, so edits under api/ are picked up automatically. The other services (ari_manager, campaign_orchestrator, arq) do not auto-reload; re-run the start script after changing code they execute.

When to Rebuild the Container

The workspace bind mount and the venv / node_modules named volumes persist across container restarts, so you rarely need to rebuild. Rebuild only when one of these changes:
  • .devcontainer/Dockerfile or .devcontainer/devcontainer.json
  • api/requirements.txt or api/requirements.dev.txt
  • The pipecat/ submodule
Plain source edits, ui/package.json, and the .env.example templates do not require a rebuild. After a git pull, a quick check:
git diff HEAD@{1} HEAD -- .devcontainer api/requirements.txt api/requirements.dev.txt pipecat
If the diff is empty, you can keep your current container.

Personal Install Hook

Anything you install inside the container outside the named volumes, notably under /home/vscode, is wiped on rebuild. This includes npm i -g packages and tools like the Claude or Codex CLIs. To reinstall personal tooling automatically on every rebuild, drop an executable script at .devcontainer/install.local.sh. It is gitignored and runs at the tail of the post-create bootstrap. Example:
#!/usr/bin/env bash
set -euo pipefail

command -v claude >/dev/null 2>&1 || curl -fsSL https://claude.ai/install.sh | bash
command -v codex  >/dev/null 2>&1 || npm i -g @openai/codex
Keep entries idempotent with command -v or a marker file so re-runs are cheap and safe.