Function Testing
After deployment, verify service availability in the following order.
1. Health Check
# Single-node: one-shot diagnosis
./scripts/doctor.sh
./scripts/doctor.sh --all
./scripts/doctor.sh --logs
# K8s: post-install verification
./scripts/verify-k8s-install.sh
# Gateway health
curl http://localhost:26100/health
# AG-UI service health
curl http://localhost:26103/healthFor more health check commands, see Service Health Checks.
2. Base Service Connectivity
# PostgreSQL (26110)
docker exec chatkit-postgres psql -U postgres -d chatkit -c "SELECT 1;"
# TimescaleDB (26111)
docker exec chatkit-timescaledb psql -U convstore -d convstore -c "SELECT hypertable_name FROM timescaledb_information.hypertables;"
# NATS (26112)
nc -z <host> 26112
# Redis (26114)
docker exec chatkit-redis redis-cli ping
# TEI (26117)
curl http://localhost:26117/embed -H "Content-Type: application/json" -d '{"inputs":"测试"}'
# Restate (26180/26181)
curl http://localhost:26181/healthUnder K8s, use kubectl exec or kubectl port-forward instead; see Service Health Checks for commands.
3. Inbound Conversation Chain Smoke Test
Hop-by-hop health:
curl http://localhost:26100/health # api-gateway
curl http://localhost:26103/health # ag-ui-server
curl http://localhost:26102/health # orchestrator
curl http://localhost:26450/health # ai-infra-rsSend a test conversation (via the AG-UI SDK or a direct POST to api-gateway) and confirm the api-gateway -> ag-ui-server -> orchestrator -> ai-infra-rs -> delivery chain is working.
4. Contract Version Handshake Verification (Critical)
curl http://localhost:26450/health | jq .contract_versionExpected: a non-unknown version number (e.g. 1.2.1).
If unknown is returned: the contract version is baked into the image at build time, so unknown indicates a defective image - contact Finogeeks support.
5. Channel Smoke Test (Optional)
Send a test message to each Feishu/WeCom/DingTalk bot to confirm the connector receives and delivers it.
6. Administrator Registration
See Administrator Registration.
7. License Health Check
curl -s http://localhost:26101/health | jq .deployment_licenseExpected: status is active (expired means the license has expired; see expires_at for the expiry time).
