Health checks reuse a two-second snapshot and bound the schema query. Task SSE writes an error frame when an event cannot be encoded. ResolveDocTask errors when the frozen plan has no duty row, while explicit none-duties stay zero. Drop the unwired semantic-summary replace env, record the intentional dev versus release model split, document the test/main cutover path, and archive pre-goose SQL. Co-authored-by: Cursor <cursoragent@cursor.com>
184 lines
7.1 KiB
YAML
184 lines
7.1 KiB
YAML
# =============================================================================
|
|
# 开发环境编排 (Dev Branch Environment)
|
|
# 特性:
|
|
# 1. 独占系统业务库 (5433:5432) 与专属数据卷
|
|
# 2. 独占对话记录、工作区及日志目录 (./data/dev)
|
|
# 3. 共享连接知识库服务 (shuimu-kb-shared:5432)
|
|
# =============================================================================
|
|
name: agent-dev
|
|
|
|
services:
|
|
system-db:
|
|
image: pgvector/pgvector:pg16
|
|
container_name: shuimu-context-pg-dev
|
|
command: ["postgres", "-c", "shared_buffers=256MB", "-c", "max_connections=100"]
|
|
environment:
|
|
POSTGRES_USER: ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}}
|
|
POSTGRES_PASSWORD: ${CONTEXT_DB_PASSWORD:-${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}}
|
|
POSTGRES_DB: ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}}
|
|
ports:
|
|
- "127.0.0.1:${CONTEXT_DB_PUBLISH_PORT:-${SYSTEM_DB_PUBLISH_PORT:-5433}}:5432"
|
|
volumes:
|
|
- dev-context-pgdata:/var/lib/postgresql/data
|
|
- ./deploy/postgres/context_init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}} -d ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 20
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
pi-agent:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/pi-agent/Dockerfile
|
|
image: shuimu-pi-agent:dev
|
|
container_name: shuimu-pi-agent-dev
|
|
environment:
|
|
PORT: 18865
|
|
DATA_DIR: /app/data/workspaces
|
|
MINIMAX_ENDPOINT_URL: ${MINIMAX_ENDPOINT_URL:-https://api.minimaxi.com/v1}
|
|
MINIMAX_API_KEY: ${MINIMAX_API_KEY:-}
|
|
# dev iterates on highspeed; test/main pin MiniMax-M3. Do not align without a promotion decision.
|
|
MINIMAX_MODEL_ID: ${MINIMAX_MODEL_ID:-MiniMax-M2.7-highspeed}
|
|
MINIMAX_API_TYPE: ${MINIMAX_API_TYPE:-openai-compatible}
|
|
MINIMAX_PROVIDER: minimax
|
|
TAVILY_API_KEYS: ${TAVILY_API_KEYS:-}
|
|
RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
ports:
|
|
- "127.0.0.1:${PI_AGENT_RUNNER_PORT:-18865}:18865"
|
|
volumes:
|
|
- ./data/dev/workspaces:/app/data/workspaces
|
|
- ./data/dev/agent_sessions:/root/.pi/agent/sessions
|
|
- ./deploy/pi-agent/runner.mjs:/app/runner.mjs:ro
|
|
- ./deploy/pi-agent/result-v1.mjs:/app/result-v1.mjs:ro
|
|
- ./deploy/pi-agent/extensions:/app/extensions:ro
|
|
tmpfs:
|
|
- /tmp
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://127.0.0.1:18865/health || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/app/Dockerfile
|
|
container_name: shuimu-agent-app-dev
|
|
depends_on:
|
|
system-db:
|
|
condition: service_healthy
|
|
environment:
|
|
ENV: dev
|
|
HTTP_ADDR: ":${HTTP_PORT:-8080}"
|
|
HTTP_PORT: "${HTTP_PORT:-8080}"
|
|
HTTP_HOST: "0.0.0.0"
|
|
AGENT_BACKEND: ${AGENT_BACKEND:-pi-agent}
|
|
AGENT_TIMEOUT: ${AGENT_TIMEOUT:-30m}
|
|
MAX_CONCURRENT_AGENTS: ${MAX_CONCURRENT_AGENTS:-8}
|
|
DATA_DIR: /app/data
|
|
# 独占业务与对话库
|
|
APP_DB_DSN: postgres://${SYSTEM_DB_USER:-app}:${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}@system-db:5432/${SYSTEM_DB_NAME:-agent_system_dev}?sslmode=disable
|
|
# 共享知识库
|
|
POSTGRES_SHARED_KB_DSN: postgres://${KB_DB_USER:-regkb}:${KB_DB_PASSWORD:?KB_DB_PASSWORD is required}@shuimu-kb-shared:5432/${KB_DB_NAME:-regulations}?sslmode=disable
|
|
PI_AGENT_RUNNER_URL: http://pi-agent:18865
|
|
PI_AGENT_RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
PI_AGENT_PROVIDER: ${PI_AGENT_PROVIDER:-minimax}
|
|
PI_AGENT_MODEL: ${PI_AGENT_MODEL:-MiniMax-M2.7-highspeed}
|
|
RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-}
|
|
EMBEDDING_ENDPOINT_URL: ${EMBEDDING_ENDPOINT_URL:-}
|
|
EMBEDDING_MODEL: ${EMBEDDING_MODEL:-bge-m3}
|
|
EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}
|
|
RERANKER_ENDPOINT_URL: ${RERANKER_ENDPOINT_URL:-}
|
|
RERANKER_MODEL: ${RERANKER_MODEL:-bge-reranker-v2-m3-free}
|
|
RERANKER_API_KEY: ${RERANKER_API_KEY:-}
|
|
ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin-secret-password-123}
|
|
AUTH_REGISTRATION_ENABLED: ${AUTH_REGISTRATION_ENABLED:-true}
|
|
AUTH_REQUIRE_APPROVAL: ${AUTH_REQUIRE_APPROVAL:-false}
|
|
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-}
|
|
ALLOW_IN_MEMORY: ${ALLOW_IN_MEMORY:-false}
|
|
CACHE_ENABLED: ${CACHE_ENABLED:-true}
|
|
INTENT_V2_SHADOW: ${INTENT_V2_SHADOW:-false}
|
|
INTENT_V2_DECISION: ${INTENT_V2_DECISION:-false}
|
|
INTENT_V2_DECISION_TIER: ${INTENT_V2_DECISION_TIER:-none}
|
|
WORKFLOW_INTENTS_ENABLED: ${WORKFLOW_INTENTS_ENABLED:-true}
|
|
MULTI_INTENT_ENABLED: ${MULTI_INTENT_ENABLED:-true}
|
|
MULTI_INTENT_PLAN_TIER: ${MULTI_INTENT_PLAN_TIER:-legacy}
|
|
MULTI_INTENT_U9_SEGMENT: ${MULTI_INTENT_U9_SEGMENT:-false}
|
|
MULTI_INTENT_U10_MUTATE: ${MULTI_INTENT_U10_MUTATE:-false}
|
|
MULTI_INTENT_U11_DOCGOV: ${MULTI_INTENT_U11_DOCGOV:-false}
|
|
MULTI_INTENT_U12_RUN_CONTROL: ${MULTI_INTENT_U12_RUN_CONTROL:-false}
|
|
# W2 PU6: shadow semantic summary only. REPLACE stays unwired and is not declared here.
|
|
SEMANTIC_SUMMARY_SHADOW: ${SEMANTIC_SUMMARY_SHADOW:-false}
|
|
PI_CHANGE_REPORT_NARRATIVE: ${PI_CHANGE_REPORT_NARRATIVE:-false}
|
|
# FAV U7: keep degraded read + in-process publisher off until separate approval
|
|
FAV_DEGRADED_READ: ${FAV_DEGRADED_READ:-false}
|
|
FAV_PUBLISHER_ENABLED: ${FAV_PUBLISHER_ENABLED:-false}
|
|
ports:
|
|
- "${APP_PUBLISH_HOST:-127.0.0.1}:${HTTP_PORT:-8080}:${HTTP_PORT:-8080}"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:${HTTP_PORT:-8080}/api/v1/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 6
|
|
start_period: 20s
|
|
volumes:
|
|
# 独占对话记录与环境数据
|
|
- ./data/dev:/app/data
|
|
- dev-aux-sqlite-data:/var/lib/feishu
|
|
- ./.regulations:/app/.regulations:ro
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
- shared-net
|
|
|
|
events:
|
|
build:
|
|
context: .
|
|
dockerfile: deploy/app/Dockerfile
|
|
container_name: shuimu-agent-events-dev
|
|
entrypoint: ["/app/events"]
|
|
command: ["-env", "/dev/null"]
|
|
depends_on:
|
|
system-db:
|
|
condition: service_healthy
|
|
environment:
|
|
ENV: dev
|
|
HTTP_HOST: "0.0.0.0"
|
|
HTTP_PORT: "${EVENTS_HTTP_PORT:-8088}"
|
|
EVENTS_HTTP_PORT: "${EVENTS_HTTP_PORT:-8088}"
|
|
DATA_DIR: /app/data
|
|
APP_DB_DSN: postgres://${SYSTEM_DB_USER:-app}:${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}@system-db:5432/${SYSTEM_DB_NAME:-agent_system_dev}?sslmode=disable
|
|
ports:
|
|
- "127.0.0.1:${EVENTS_HTTP_PORT:-8088}:${EVENTS_HTTP_PORT:-8088}"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:${EVENTS_HTTP_PORT:-8088}/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 6
|
|
start_period: 15s
|
|
restart: unless-stopped
|
|
networks:
|
|
- dev-net
|
|
|
|
networks:
|
|
dev-net:
|
|
name: chat-agent-dev-net
|
|
driver: bridge
|
|
shared-net:
|
|
name: chat-agent-shared-net
|
|
external: true
|
|
|
|
volumes:
|
|
dev-context-pgdata:
|
|
name: agent-dev-context-pgdata
|
|
dev-aux-sqlite-data:
|
|
name: agent-dev-aux-sqlite-data
|