tact 0.1.1

Terminal interface for Nanocodex
services:
  tact-dev:
    image: "${TACT_DEV_IMAGE:-tact-dev:local}"
    working_dir: /workspace
    user: "${TACT_DEV_UID:?set TACT_DEV_UID}:${TACT_DEV_GID:?set TACT_DEV_GID}"
    stdin_open: true
    tty: true
    network_mode: service:iron-proxy
    depends_on:
      iron-proxy:
        condition: service_started
    environment:
      HOME: /home/tact
      XDG_CACHE_HOME: /home/tact/.cache
      TACT_HOME: /run/tact-state
      CODEX_HOME: /run/tact-public/codex
      TACT_AUTH: "${TACT_DEV_AUTH:?set TACT_DEV_AUTH}"
      TACT_AUTH_FILE: /run/tact-public/auth.json
      TACT_CONFIG: "/run/tact-state/${TACT_DEV_CONFIG_NAME:?set TACT_DEV_CONFIG_NAME}"
      TACT_WORKSPACE: /workspace
      OPENAI_API_KEY: tact-dev-placeholder-api-key
      HTTP_PROXY: http://127.0.0.1:8080
      HTTPS_PROXY: http://127.0.0.1:8080
      http_proxy: http://127.0.0.1:8080
      https_proxy: http://127.0.0.1:8080
      NO_PROXY: localhost,127.0.0.1,::1
      no_proxy: localhost,127.0.0.1,::1
      TACT_PROXY_CA_FILE: /run/tact-public/ca.crt
    volumes:
      - type: bind
        source: "${TACT_DEV_WORKSPACE:?set TACT_DEV_WORKSPACE}"
        target: /workspace
      - type: bind
        source: "${TACT_DEV_STATE_DIR:?set TACT_DEV_STATE_DIR}"
        target: /run/tact-state
      - type: bind
        source: "${TACT_DEV_PUBLIC_DIR:?set TACT_DEV_PUBLIC_DIR}"
        target: /run/tact-public
        read_only: true
      - type: volume
        source: dev-state
        target: /home/tact
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    pids_limit: 4096
    stop_grace_period: 10s

  iron-proxy:
    image: "${TACT_DEV_IRON_IMAGE:?set TACT_DEV_IRON_IMAGE}"
    command:
      - --config
      - /run/tact-auth/proxy.yaml
    user: "${TACT_DEV_UID:?set TACT_DEV_UID}:${TACT_DEV_GID:?set TACT_DEV_GID}"
    volumes:
      - type: bind
        source: "${TACT_DEV_PRIVATE_DIR:?set TACT_DEV_PRIVATE_DIR}"
        target: /run/tact-auth
        read_only: true
    read_only: true
    tmpfs:
      - /tmp:size=16m,mode=1777
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    pids_limit: 256
    stop_grace_period: 5s

volumes:
  dev-state:
    name: tact-dev-state
    external: true