{"status":"ok","runtime":{"generatedAt":"2026-07-05T14:08:20.575Z","boundary":"oss_runtime_control_plane_does_not_create_customer_evidence_or_external_tickets","deploy":{"composeFile":"infra/oss-sidecars/docker-compose.oss.yml","bootstrapCommand":"pnpm oss:sidecars:bootstrap -- --write-env && pnpm oss:sidecars:bootstrap -- --apply","smokeCommand":"pnpm oss:sidecars:smoke","adapterSmokeCommand":"OSS_SIDECAR_SMOKE_ADAPTERS=1 pnpm oss:sidecars:smoke"},"summary":{"adapters":9,"configured":0,"notConfigured":9,"requiredProviders":["n8n","Meilisearch","MinIO","LiteLLM","Langfuse","Chatwoot","Zammad"],"readiness":"blocked_by_missing_env"},"profiles":[{"profile":"core","adapters":7,"configured":0,"notConfigured":7,"missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","MEILI_MASTER_KEY","MINIO_API_BASE_URL","MINIO_PUBLIC_BASE_URL","MINIO_ROOT_USER","MINIO_ROOT_PASSWORD","MINIO_BUCKET","N8N_ENCRYPTION_KEY","CHENGQIYUN_API_BASE_URL","N8N_WORLDCLASS_EVIDENCE_CAMPAIGN_WEBHOOK_URL","LITELLM_API_BASE_URL","LITELLM_MASTER_KEY","LANGFUSE_HOST","LANGFUSE_PUBLIC_KEY","LANGFUSE_SECRET_KEY"],"readiness":"blocked_by_missing_env","smokeCommand":"pnpm oss:sidecars:smoke -- --profile core"},{"profile":"observability","adapters":0,"configured":0,"notConfigured":0,"missingEnv":[],"readiness":"ready_for_runtime_smoke","smokeCommand":"pnpm oss:sidecars:smoke -- --profile observability"},{"profile":"service-desk","adapters":2,"configured":0,"notConfigured":2,"missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","CHATWOOT_API_BASE_URL","CHATWOOT_API_ACCESS_TOKEN","CHATWOOT_ACCOUNT_ID","ZAMMAD_API_BASE_URL","ZAMMAD_API_TOKEN"],"readiness":"blocked_by_missing_env","smokeCommand":"pnpm oss:sidecars:smoke -- --profile service-desk"}],"sidecars":[{"id":"meilisearch","name":"Meilisearch","profile":"core","healthUrl":"http://localhost:7700/health","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile core up -d meilisearch"},{"id":"minio","name":"MinIO","profile":"core","healthUrl":"http://localhost:9100/minio/health/ready","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile core up -d minio"},{"id":"n8n","name":"n8n","profile":"core","healthUrl":"http://localhost:5678/healthz","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile core up -d n8n"},{"id":"litellm","name":"LiteLLM","profile":"core","healthUrl":"http://localhost:4000/health/liveliness","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile core up -d litellm"},{"id":"langfuse","name":"Langfuse","profile":"observability","healthUrl":"http://localhost:3001/api/public/health","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile observability up -d langfuse"},{"id":"chatwoot","name":"Chatwoot","profile":"service-desk","healthUrl":"http://localhost:3002/","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile service-desk up -d chatwoot"},{"id":"zammad","name":"Zammad","profile":"service-desk","healthUrl":"http://localhost:8081/","startCommand":"docker compose -f infra/oss-sidecars/docker-compose.oss.yml --profile service-desk up -d zammad"}],"workflows":[{"id":"chengqiyun-document-ingest","engine":"n8n","file":"infra/oss-sidecars/n8n/workflows/chengqiyun-document-ingest.json","webhookPath":"/webhook/chengqiyun-document-ingest","status":"importable"},{"id":"chengqiyun-product-handoff","engine":"n8n","file":"infra/oss-sidecars/n8n/workflows/chengqiyun-product-handoff.json","webhookPath":"/webhook/chengqiyun-product-handoff","status":"importable"},{"id":"chengqiyun-worldclass-evidence-campaign","engine":"n8n","file":"infra/oss-sidecars/n8n/workflows/chengqiyun-worldclass-evidence-campaign.json","webhookPath":"/webhook/chengqiyun-worldclass-evidence-campaign","status":"importable"}],"adapters":[{"id":"document-ingest-meilisearch","name":"文档入库到 Meilisearch","layer":"search","provider":"Meilisearch","sidecars":["n8n","meilisearch"],"adapterApi":"/api/integrations/documents/ingest","healthUrl":"http://localhost:7700/health","deployProfile":"core","requiredEnv":["CHENGQIYUN_SIDECAR_TOKEN","MEILI_MASTER_KEY"],"runtimeCheck":"n8n webhook -> documents/ingest adapter -> Meilisearch chengqiyun_documents index","lowCostBoundary":"本地 Meilisearch + n8n 复用，不为文档检索调用商业 LLM。","missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","MEILI_MASTER_KEY"],"status":"not_configured"},{"id":"document-search-meilisearch","name":"文档底座租户检索","layer":"search","provider":"Meilisearch","sidecars":["meilisearch"],"adapterApi":"/api/integrations/documents/search","healthUrl":"http://localhost:7700/health","deployProfile":"core","requiredEnv":["CHENGQIYUN_SIDECAR_TOKEN","MEILI_MASTER_KEY"],"runtimeCheck":"按 tenantId/sourceType/tags 过滤查询 chengqiyun_documents，不跨租户泄露证据材料。","lowCostBoundary":"客户材料检索只用本地倒排索引，检索动作不调用商业 LLM。","missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","MEILI_MASTER_KEY"],"status":"not_configured"},{"id":"tenant-document-ingest-meilisearch","name":"登录租户资料入库索引","layer":"search","provider":"Meilisearch","sidecars":["meilisearch"],"adapterApi":"/api/integrations/documents/tenant-ingest","healthUrl":"http://localhost:7700/health","deployProfile":"core","requiredEnv":["MEILI_MASTER_KEY"],"runtimeCheck":"登录用户提交资料 -> tenant-ingest adapter -> chengqiyun_documents；可用 CHENGQIYUN_SMOKE_SESSION_COOKIE 跑端到端 smoke。","lowCostBoundary":"资料入库只写本地 Meilisearch 索引，不为入库动作调用商业 LLM。","missingEnv":["MEILI_MASTER_KEY"],"status":"not_configured"},{"id":"artifact-storage-minio","name":"租户隔离对象上传","layer":"storage","provider":"MinIO","sidecars":["minio"],"adapterApi":"/api/integrations/storage/presign","healthUrl":"http://localhost:9100/minio/health/ready","deployProfile":"core","requiredEnv":["MINIO_API_BASE_URL","MINIO_PUBLIC_BASE_URL","MINIO_ROOT_USER","MINIO_ROOT_PASSWORD","MINIO_BUCKET"],"runtimeCheck":"应用签发 S3 PUT URL，文件直传 MinIO，应用不吞大文件流。","lowCostBoundary":"本地或自有对象存储承接附件/交付包，避免 SaaS 存储按量膨胀。","missingEnv":["MINIO_API_BASE_URL","MINIO_PUBLIC_BASE_URL","MINIO_ROOT_USER","MINIO_ROOT_PASSWORD","MINIO_BUCKET"],"status":"not_configured"},{"id":"automation-n8n","name":"n8n 运营交接与证据攻坚工作流","layer":"workflow","provider":"n8n","sidecars":["n8n","meilisearch"],"adapterApi":"/webhook/chengqiyun-product-handoff","healthUrl":"http://localhost:5678/healthz","deployProfile":"core","requiredEnv":["N8N_ENCRYPTION_KEY","CHENGQIYUN_SIDECAR_TOKEN","CHENGQIYUN_API_BASE_URL"],"runtimeCheck":"产品运行事件和世界级证据攻坚事件进入 n8n，再调用服务台 adapter 并写入 Meilisearch 索引。","lowCostBoundary":"通用工作流交给 n8n，澄企云只保留业务 adapter 和守闸。","missingEnv":["N8N_ENCRYPTION_KEY","CHENGQIYUN_SIDECAR_TOKEN","CHENGQIYUN_API_BASE_URL"],"status":"not_configured"},{"id":"worldclass-evidence-campaign-n8n","name":"世界级客户证据攻坚 n8n 编排","layer":"workflow","provider":"n8n/Meilisearch/Chatwoot/Zammad","sidecars":["n8n","meilisearch","chatwoot"],"adapterApi":"/api/integrations/customer-evidence/worldclass-campaign","healthUrl":"http://localhost:5678/healthz","deployProfile":"core","requiredEnv":["N8N_ENCRYPTION_KEY","CHENGQIYUN_SIDECAR_TOKEN","CHENGQIYUN_API_BASE_URL","N8N_WORLDCLASS_EVIDENCE_CAMPAIGN_WEBHOOK_URL","MEILI_MASTER_KEY"],"runtimeCheck":"n8n webhook -> worldclass campaign sidecar API -> service-desk batch followup -> chengqiyun_worldclass_evidence_campaigns index。","lowCostBoundary":"证据攻坚调度走自建 n8n + 开源工单，不为调度动作调用商业 LLM。","missingEnv":["N8N_ENCRYPTION_KEY","CHENGQIYUN_SIDECAR_TOKEN","CHENGQIYUN_API_BASE_URL","N8N_WORLDCLASS_EVIDENCE_CAMPAIGN_WEBHOOK_URL","MEILI_MASTER_KEY"],"status":"not_configured"},{"id":"litellm-langfuse-cost-observability","name":"LiteLLM 成本网关 + Langfuse 观测","layer":"ai-gateway","provider":"LiteLLM/Langfuse","sidecars":["litellm","langfuse"],"adapterApi":"/api/integrations/ai-gateway/chat","healthUrl":"http://localhost:4000/health/liveliness","deployProfile":"core","requiredEnv":["LITELLM_API_BASE_URL","LITELLM_MASTER_KEY","LANGFUSE_HOST","LANGFUSE_PUBLIC_KEY","LANGFUSE_SECRET_KEY"],"runtimeCheck":"调用前预扣积分，失败释放；metadata 带 tenant/user/creditsEventId 进入 Langfuse。","lowCostBoundary":"模型路由先走低成本网关，所有 AI 调用必须可计量、可追溯、可释放预扣。","missingEnv":["LITELLM_API_BASE_URL","LITELLM_MASTER_KEY","LANGFUSE_HOST","LANGFUSE_PUBLIC_KEY","LANGFUSE_SECRET_KEY"],"status":"not_configured"},{"id":"chatwoot-ticket-bridge","name":"Chatwoot 客服会话桥","layer":"service-desk","provider":"Chatwoot","sidecars":["chatwoot"],"adapterApi":"/api/integrations/service-desk/tickets","healthUrl":"http://localhost:3002","deployProfile":"service-desk","requiredEnv":["CHENGQIYUN_SIDECAR_TOKEN","CHATWOOT_API_BASE_URL","CHATWOOT_API_ACCESS_TOKEN","CHATWOOT_ACCOUNT_ID"],"runtimeCheck":"sidecar token 保护的 adapter 创建 Chatwoot conversation，缺配置返回 503。","lowCostBoundary":"客服会话使用开源 Chatwoot，自建工单只保留统一业务封装。","missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","CHATWOOT_API_BASE_URL","CHATWOOT_API_ACCESS_TOKEN","CHATWOOT_ACCOUNT_ID"],"status":"not_configured"},{"id":"zammad-ticket-bridge","name":"Zammad 工单桥","layer":"service-desk","provider":"Zammad","sidecars":["zammad"],"adapterApi":"/api/integrations/service-desk/tickets","healthUrl":"http://localhost:8081/","deployProfile":"service-desk","requiredEnv":["CHENGQIYUN_SIDECAR_TOKEN","ZAMMAD_API_BASE_URL","ZAMMAD_API_TOKEN"],"runtimeCheck":"自建 Zammad service-desk profile 通过同一 adapter 创建 /api/v1/tickets，缺配置返回 503。","lowCostBoundary":"开源 Zammad 自建工单栈承接复杂 SLA 和内部处理队列，避免绑定商业客服 SaaS。","missingEnv":["CHENGQIYUN_SIDECAR_TOKEN","ZAMMAD_API_BASE_URL","ZAMMAD_API_TOKEN"],"status":"not_configured"}],"lowCostBoundaries":["本地 Meilisearch + n8n 复用，不为文档检索调用商业 LLM。","客户材料检索只用本地倒排索引，检索动作不调用商业 LLM。","资料入库只写本地 Meilisearch 索引，不为入库动作调用商业 LLM。","本地或自有对象存储承接附件/交付包，避免 SaaS 存储按量膨胀。","通用工作流交给 n8n，澄企云只保留业务 adapter 和守闸。","证据攻坚调度走自建 n8n + 开源工单，不为调度动作调用商业 LLM。","模型路由先走低成本网关，所有 AI 调用必须可计量、可追溯、可释放预扣。","客服会话使用开源 Chatwoot，自建工单只保留统一业务封装。","开源 Zammad 自建工单栈承接复杂 SLA 和内部处理队列，避免绑定商业客服 SaaS。"],"nextActions":[{"priority":"P0","profile":"core","title":"补齐 sidecar adapter 环境变量","command":"notepad infra\\oss-sidecars\\.env.local","reason":"core 缺 CHENGQIYUN_SIDECAR_TOKEN, MEILI_MASTER_KEY, MINIO_API_BASE_URL, MINIO_PUBLIC_BASE_URL, MINIO_ROOT_USER, MINIO_ROOT_PASSWORD..."},{"priority":"P1","profile":"core","title":"修复配置后启动对应 profile","command":"pnpm oss:sidecars:smoke -- --profile core","reason":"先用最小 profile smoke 验证修复，避免一次性启动全栈造成排障成本上升。"},{"priority":"P2","profile":"all","title":"生成运行诊断报告","command":"pnpm oss:sidecars:doctor -- --write","reason":"9 个 adapter 仍缺配置；写出诊断报告方便低成本排障交接。"}]},"deploymentReport":null}