239c41f935
Persist code-run gates in admin DB and expose them via /auth/status so H5 can honor runtime policy without VITE rebuilds. Co-authored-by: Cursor <cursoragent@cursor.com>
303 lines
15 KiB
Bash
303 lines
15 KiB
Bash
# TKMind H5 环境变量(复制为 .env 后按需修改)
|
||
#
|
||
# 本地开发(127.0.0.1 + 端口,见 docs/local-dev.md)
|
||
# pnpm dev
|
||
# MindSpace: http://127.0.0.1:5173/?preview=mindspace
|
||
#
|
||
# 后端代理(server.mjs / vite dev proxy 共用)
|
||
TKMIND_API_TARGET=https://127.0.0.1:18006
|
||
TKMIND_SERVER__SECRET_KEY=local-dev-secret
|
||
H5_PORT=8081
|
||
# Vite UI 预览用 5173;Agent 交付的 MindSpace 公开页 + Page Data API 走 Portal(8081)。
|
||
# pnpm dev / dev-core 在未显式覆盖时会把 H5_PUBLIC_BASE_URL 设为 8081。
|
||
H5_PUBLIC_BASE_URL=http://127.0.0.1:5173
|
||
|
||
# Local Umami analytics (disabled by default; points only to the local
|
||
# memind-analytics service when enabled).
|
||
# MEMIND_ANALYTICS_ENABLED=true
|
||
# MEMIND_ANALYTICS_URL=http://127.0.0.1:3100
|
||
# MEMIND_ANALYTICS_WEBSITE_ID=<local Umami Website ID>
|
||
# MEMIND_ANALYTICS_ID_SECRET=<local-only pseudonymization secret>
|
||
# MEMIND_ANALYTICS_DOMAINS=127.0.0.1,localhost
|
||
|
||
# 生产 H5 public base 当前临时切到 https://mm.tkmind.cn。
|
||
# 后续公网 H5 不再依赖 105 转发链路;m.tkmind.cn 仅作为 legacy/rollback 记录处理。
|
||
# H5_PUBLIC_BASE_URL=https://mm.tkmind.cn
|
||
# VITE_MINDSPACE_BASE=https://mm.tkmind.cn
|
||
|
||
# Memind 2.0 runtime control plane(生产启用 Redis;本地开发可留空回退到健康轮询)
|
||
# MEMIND_RUNTIME_REDIS_URL=redis://127.0.0.1:6379/0
|
||
# MEMIND_RUNTIME_REDIS_NAMESPACE=memind:runtime
|
||
|
||
# Code-tool agent run 灰度开关(默认关闭)。
|
||
# 后端必须先开启 MEMIND_AGENT_CODE_RUNS_ENABLED,H5 构建开关才会生效。
|
||
# 开启后,页面编辑子聊天会传 tool_mode=code;普通聊天仍需同时开启 AUTODETECT 才会按文本自动识别代码任务。
|
||
# Phase 1.5:memindadm 运行时策略优先于 VITE_;设为 env 可强制只读 env(紧急 override)。
|
||
# MEMIND_CODE_RUN_POLICY_SOURCE=env
|
||
# MEMIND_AGENT_CODE_RUNS_ENABLED=0
|
||
# VITE_AGENT_CODE_RUNS_ENABLED=0
|
||
# VITE_AGENT_CODE_RUNS_AUTODETECT=0
|
||
# VITE_AGENT_PAGE_DATA_DEV_AUTODETECT=0
|
||
|
||
# Tool Gateway Queue v0(/agent/runs 后台任务队列,默认保守限流)。
|
||
# MEMIND_AGENT_RUN_QUEUE_CONCURRENCY=1
|
||
# MEMIND_AGENT_RUN_TIMEOUT_MS=900000
|
||
# P6.1 外部 Tool Worker 接管入口。默认 Portal 内部 auto-dispatch 保持开启;
|
||
# 只有外部 worker 验证就绪后,才把 Portal 设为 0 并独立运行 scripts/agent-run-worker.mjs。
|
||
# MEMIND_AGENT_RUN_AUTODISPATCH=1
|
||
# MEMIND_AGENT_RUN_WORKER_POLL_MS=1000
|
||
# MEMIND_AGENT_RUN_WORKER_BATCH_SIZE=1
|
||
# MEMIND_AGENT_RUN_HEARTBEAT_MS=30000
|
||
# MEMIND_AGENT_RUN_HEARTBEAT_STALE_MS=90000
|
||
# MEMIND_AGENT_RUN_WORKER_EXPECT_RUNNING=0
|
||
|
||
# Runtime SLO 日报(默认每日 23:55 写 reports/runtime-slo)。
|
||
# MEMIND_RUNTIME_REPORT_DIR=/Users/john/Project/Memind/reports/runtime-slo
|
||
# MEMIND_RUNTIME_SLO_HOUR=23
|
||
# MEMIND_RUNTIME_SLO_MINUTE=55
|
||
|
||
# H5 Session Broker(docs/h5-session-architecture-20260706.md Patch 1+)
|
||
# 本地开发:Patch 2 接入后可设 1 验证 broker 路径;默认 0 保持 userAuth 直调。
|
||
# 103 生产:仅在灰度窗口于服务器 /Users/john/Project/Memind/.env 设置,勿把生产值写入 Git。
|
||
# MEMIND_SESSION_BROKER_ENABLED=0
|
||
|
||
# --- 本地全量联调示例(复制到 .env,勿提交 Git)---
|
||
# MEMIND_SESSION_BROKER_ENABLED=1
|
||
# MEMIND_ROUTER_NORMALIZED_DECISION=1
|
||
# MEMIND_SSE_EVENT_TAXONOMY=1
|
||
# MEMIND_RUN_STREAM_REPLAY=1
|
||
# MEMIND_SESSION_STREAM_REPLAY=1
|
||
# MEMIND_SESSION_BROKER_METRICS=1
|
||
# MEMIND_H5_HTML_FINISH_GUARD=1
|
||
# 启动后 Portal 日志应出现:[Portal] H5 session flags: ...
|
||
# 103 生产 goosed 多实例示例(仅服务器 .env,见 docs/103-runtime-topology.md):
|
||
# TKMIND_API_TARGET=https://127.0.0.1:18006
|
||
# TKMIND_API_TARGET_1=https://127.0.0.1:18007
|
||
|
||
# H5 Router normalized decision(docs/h5-session-architecture-20260706.md Patch 3)
|
||
# 默认 0/off:gateway 仍读 legacy route
|
||
# shadow:只打 [router-shadow] 日志,行为不变
|
||
# 1/on:gateway 优先读 classification.decision.route / session_hint
|
||
# MEMIND_ROUTER_NORMALIZED_DECISION=0
|
||
|
||
# H5 Session stream replay(docs/h5-session-architecture-20260706.md Patch 4c)
|
||
# 默认 0:session SSE 仍纯透传 goosed;设 1 时 Portal 持久化 session 事件并支持 Last-Event-ID 重连补发。
|
||
# MEMIND_SESSION_STREAM_REPLAY=0
|
||
|
||
# H5 Session Broker metrics(docs/h5-session-architecture-20260706.md §13.4)
|
||
# 默认 0:不打 structured log;设 1 时输出 [session_broker.*] 行
|
||
# MEMIND_SESSION_BROKER_METRICS=0
|
||
|
||
# H5 SSE event taxonomy(docs/h5-session-architecture-20260706.md Patch 4)
|
||
# 默认 0:不改变 SSE wire format;设 1 时在 session/run SSE payload 附加 taxonomy 字段(shadow)。
|
||
# MEMIND_SSE_EVENT_TAXONOMY=0
|
||
|
||
# H5 goosed proxy boundary(docs/h5-session-architecture-20260706.md Patch 5)
|
||
# CI/发版前跑:npm run verify:goosed-proxy-boundary
|
||
# 新增 goosed 调用须走 tkmind-proxy;MindSpace 例外见 goosed-proxy-boundary.mjs allowlist
|
||
|
||
# H5 public HTML 假交付 guard(docs/pending-fixes/h5-public-html-fake-delivery-guard-20260706.md)
|
||
# 默认 0:仅 warn;设 1 时 Finish 后检测缺失 public/*.html / assets/* 并自动 session repair(每 session 1 次)
|
||
# MEMIND_H5_HTML_FINISH_GUARD=0
|
||
|
||
# H5 run SSE replay(Patch 4b,仅本地/测试分支;默认关,未合并 main / 未上 103)
|
||
# 设 1 时 GET /agent/runs/:id/events 使用 h5_agent_run_events + Last-Event-ID 重连回放
|
||
# MEMIND_RUN_STREAM_REPLAY=0
|
||
|
||
# ===== memind_adm(独立后台服务)=====
|
||
# 平台超管 /admin-api/* 与广场运营 /api/ops/v1/* 已从公网服务拆出,独立进程运行。
|
||
# 登录仍在主域完成;后台凭 H5_COOKIE_DOMAIN=.tkmind.cn 共享的会话 Cookie 鉴权(生产务必设置)。
|
||
ADMIN_PORT=8082
|
||
ADMIN_HOST=127.0.0.1
|
||
ADMIN_PUBLIC_HOST=gadm.tkmind.cn
|
||
|
||
# 本进程挂载哪些控制台(可拆分架构):admin=平台超管, ops=广场运营。
|
||
# 默认两者合一;将来拆成两个进程时,A 实例设 admin、B 实例设 ops,路由代码无需改动。
|
||
# ADMIN_CONSOLES=admin,ops
|
||
|
||
# 每控制台独立网络护栏(逗号分隔;留空=放开。支持精确 IP 与 CIDR)。
|
||
# 超管面建议收得最紧(仅内网/VPN),广场运营可放宽给审核团队网段。
|
||
# ADMIN_API_ALLOWED_HOSTS=gadm.tkmind.cn
|
||
# ADMIN_API_IP_ALLOWLIST=10.0.0.0/8,127.0.0.1
|
||
# OPS_API_ALLOWED_HOSTS=gadm.tkmind.cn
|
||
# OPS_API_IP_ALLOWLIST=
|
||
|
||
# 多用户系统(MySQL 配置后启用;未配置时回退到 H5_ACCESS_PASSWORD)
|
||
DATABASE_URL=mysql://boot:password@localhost:3306/tkmind
|
||
# 或分别设置 MYSQL_HOST / MYSQL_PORT / MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE
|
||
H5_USERS_ROOT=/root/tkmind_go/users
|
||
# 新用户赠送余额(人民币分,500 = ¥5.00;勿与美元 cents 混淆)
|
||
H5_SIGNUP_BALANCE_CENTS=500
|
||
H5_ADMIN_USERNAME=admin
|
||
H5_ADMIN_PASSWORD=change-me-admin
|
||
# 管理员工作区(默认 users 目录的父目录;对接 goose 全权限时建议设为项目根)
|
||
# H5_ADMIN_WORKSPACE_ROOT=/Users/john/PycharmProjects/tkmind
|
||
# LLM Key 数据库加密(可选;默认派生自 TKMIND_SERVER__SECRET_KEY)
|
||
# H5_SETTINGS_ENCRYPTION_KEY=change-me-encryption-key
|
||
# 启动时自动导入 Relay(若不存在同名配置)
|
||
# H5_RELAY_BOOTSTRAP_NAME=Local Goose Relay DeepSeek
|
||
# H5_RELAY_BOOTSTRAP_URL=http://127.0.0.1:18300/relay/buyer/v1/chat/completions
|
||
# H5_RELAY_BOOTSTRAP_API_KEY=your-bearer-token
|
||
# H5_RELAY_BOOTSTRAP_MODEL=deepseek-chat
|
||
# H5_RELAY_BOOTSTRAP_MODELS=deepseek-chat,deepseek-reasoner
|
||
# H5_RELAY_BOOTSTRAP_PROVIDER=deepseek
|
||
# 一键对齐本地 goosed + Goose Desktop relay:node scripts/fix-local-goose-relay.mjs
|
||
|
||
# 本地 Ollama fallback:DeepSeek 额度不足,或 andu Relay 500(agent 请求体含 tools 超过 ~8.5KB)时自动切换
|
||
# Local Ollama fallback — creditsExhausted or relay 500 (nginx body limit with tool payloads).
|
||
# H5_LOCAL_LLM_FALLBACK=0
|
||
# H5_LOCAL_LLM_URL=http://127.0.0.1:11434/v1/chat/completions
|
||
# H5_LOCAL_LLM_MODEL=qwen2.5:3b
|
||
# H5_LOCAL_LLM_API_KEY=ollama
|
||
# H5_LOCAL_LLM_NAME=Local Ollama 7B
|
||
H5_ACCESS_PASSWORD=change-me
|
||
|
||
# 计费(Phase 2,金额单位均为人民币分)
|
||
# 默认按 Token 单价扣费;生产推荐开启成本模式(见 docs/h5-metering-gateway.md)
|
||
# H5_USE_BACKEND_COST=0
|
||
# H5_BILL_INPUT_CENTS_PER_1K=2 # 输入 Token:2 分/1k(¥0.02/1k)
|
||
# H5_BILL_OUTPUT_CENTS_PER_1K=6 # 输出 Token:6 分/1k(¥0.06/1k)
|
||
# H5_MIN_BILL_CENTS=1
|
||
# 成本模式:上游 accumulated_cost(USD) × 汇率 × 毛利
|
||
# H5_USE_BACKEND_COST=1
|
||
# H5_USD_CNY_RATE=7.2
|
||
# H5_MARGIN_MULTIPLIER=1.2
|
||
# 当 goose Finish 未带 accumulatedCost 时,按 token 估算上游 USD 成本(默认开启,设 0 关闭)
|
||
# H5_COST_ESTIMATE_FROM_TOKENS=1
|
||
# H5_COST_ESTIMATE_INPUT_USD_PER_1M=0.27
|
||
# H5_COST_ESTIMATE_OUTPUT_USD_PER_1M=1.1
|
||
|
||
# 用户自助充值(微信支付)
|
||
# H5_RECHARGE_TIERS_CENTS=500,1000,3000,5000,10000,20000
|
||
# H5_MIN_RECHARGE_CENTS=500
|
||
# H5_RECHARGE_ORDER_TTL_MS=900000
|
||
# H5_RECHARGE_MAX_PENDING=3
|
||
# H5_RECHARGE_DAILY_LIMIT_CENTS=200000
|
||
# H5_WECHAT_PAY_ENABLED=1
|
||
# H5_WECHAT_APP_ID=wx...
|
||
# H5_WECHAT_MCH_ID=1...
|
||
# API 版本:v2(商户 API 密钥)或 v3(证书);不填则按已配置凭据自动选择
|
||
# H5_WECHAT_API_VERSION=v2
|
||
#
|
||
# --- API v2(商户平台「账户中心 → API安全 → 设置APIv2密钥」)---
|
||
# H5_WECHAT_API_V2_KEY=32位APIv2密钥
|
||
# 或简写:
|
||
# H5_WECHAT_API_KEY=32位APIv2密钥
|
||
#
|
||
# --- API v3(需商户证书 + 平台证书)---
|
||
# H5_WECHAT_API_V3_KEY=32位APIv3密钥
|
||
# H5_WECHAT_SERIAL_NO=商户API证书序列号
|
||
# H5_WECHAT_PRIVATE_KEY_PATH=/path/to/apiclient_key.pem
|
||
# 或直接内联 PEM(\n 转义):
|
||
# H5_WECHAT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
|
||
# H5_WECHAT_PLATFORM_CERT_PATH=/path/to/wechatpay_platform.pem
|
||
# H5_WECHAT_PLATFORM_CERT="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
|
||
#
|
||
# H5_WECHAT_NOTIFY_URL=https://goo.tkmind.cn/webhooks/wechat-pay/notify
|
||
# 微信内 JSAPI 支付(服务号网页):
|
||
# - 服务号「设置 → 功能设置 → JS接口安全域名」:mm.tkmind.cn
|
||
# - 商户平台「产品中心 → 开发配置 → 支付授权目录」:https://mm.tkmind.cn/
|
||
# - 用户须先用同一服务号微信 OAuth 登录(获取 openid)后再充值
|
||
# 本地调试验签可临时开启(生产务必关闭):
|
||
# H5_WECHAT_SKIP_NOTIFY_VERIFY=0
|
||
|
||
# 微信服务号 OAuth 登录(网页授权;与支付可共用 H5_WECHAT_APP_ID)
|
||
# 服务号后台需配置「网页授权回调域名」为 H5_PUBLIC_BASE_URL 的域名
|
||
# H5_WECHAT_OAUTH_ENABLED=1
|
||
# H5_WECHAT_APP_SECRET=服务号AppSecret
|
||
# H5_WECHAT_OAUTH_SCOPE=snsapi_userinfo
|
||
# 默认回调:{H5_PUBLIC_BASE_URL}/auth/wechat/callback
|
||
# H5_WECHAT_OAUTH_CALLBACK_URL=https://goo.tkmind.cn/auth/wechat/callback
|
||
# PC 扫码登录(微信开放平台网站应用,可选;未配置时用手机扫页面链接二维码)
|
||
# H5_WECHAT_OPEN_APP_ID=
|
||
# H5_WECHAT_OPEN_APP_SECRET=
|
||
|
||
# 微信小程序原生登录(wx.login → /auth/wechat-miniapp/login)
|
||
# H5_WECHAT_MINIAPP_APP_ID=wx...
|
||
# H5_WECHAT_MINIAPP_APP_SECRET=小程序AppSecret
|
||
|
||
# 本地开发:pnpm dev 会自动启动 server.mjs + vite
|
||
# 若只跑前端:pnpm dev:vite(需另开 pnpm dev:server)
|
||
# H5_DEV_PORTAL=http://127.0.0.1:8081
|
||
|
||
# 语音输入(按住说话 → ASR 识别)
|
||
# H5_ASR_TARGET=https://asr.tkmind.cn
|
||
# H5_ASR_MAX_BYTES=5242880
|
||
# H5_ASR_TIMEOUT_MS=45000
|
||
|
||
# 前端构建时注入(Vite,需 VITE_ 前缀)
|
||
# 工作目录:新建会话时使用,必填
|
||
VITE_TKMIND_WORKING_DIR=/Users/john/PycharmProjects/tkmind
|
||
|
||
# 可选:覆盖默认 provider / model(未设置则从服务端 config 读取)
|
||
# VITE_TKMIND_PROVIDER=openai
|
||
# VITE_TKMIND_MODEL=gpt-4o
|
||
|
||
# 可选:harness recall 的默认查询
|
||
# VITE_TKMIND_MEMORY_QUERY=project architecture conventions current goals decisions risks and recent work
|
||
|
||
# 历史列表每次展示/加载条数(默认 25,与 desktop 一致)
|
||
# VITE_SESSION_PAGE_SIZE=25
|
||
|
||
# Plaza 发现广场(独立域名 plaza.tkmind.cn;Portal 前端链接见 VITE_PLAZA_BASE)
|
||
# PLAZA_PUBLIC_BASE=https://plaza.tkmind.cn
|
||
# 本地 dev 脚本会自动注入 VITE_PLAZA_BASE=http://127.0.0.1:3001;勿把该值留进生产构建用的 .env
|
||
# VITE_PLAZA_BASE=http://127.0.0.1:3001
|
||
# 文档:docs/plaza-local.md | 本地:http://127.0.0.1:3001/plaza | 生产:https://plaza.tkmind.cn/plaza
|
||
|
||
# MindSpace(默认启用;子功能需按需开启)
|
||
# MINDSPACE_ENABLED=false
|
||
# MINDSPACE_UPLOAD_ENABLED=false
|
||
# MINDSPACE_PUBLISH_ENABLED=true
|
||
# MINDSPACE_PRIVATE_ENABLED=false
|
||
# MINDSPACE_MAX_FILE_BYTES=5242880
|
||
# Agent 后台任务(创建/执行空间内 Agent 任务,默认关闭)
|
||
# MINDSPACE_AGENT_JOBS_ENABLED=true
|
||
# MINDSPACE_INTERNAL_AGENT_SECRET=local-dev-secret
|
||
# MINDSPACE_FREE_PUBLIC_PAGE_LIMIT=10
|
||
# image_make 独立生图服务。只有 URL、Token 与 memind_adm 资产能力开关同时配置后才会调用。
|
||
# IMAGE_MAKE_BASE_URL=http://127.0.0.1:8080
|
||
# IMAGE_MAKE_TOKEN=dev-token
|
||
# IMAGE_MAKE_REQUEST_TIMEOUT_MS=15000
|
||
# IMAGE_MAKE_GENERATION_TIMEOUT_MS=600000
|
||
# IMAGE_MAKE_POLL_INTERVAL_MS=1000
|
||
# IMAGE_MAKE_MAX_RESULT_BYTES=20971520
|
||
# Optional local/provider-specific raster size overrides. Defaults remain defined by image_make presets.
|
||
# IMAGE_MAKE_HERO_WIDTH=768
|
||
# IMAGE_MAKE_HERO_HEIGHT=432
|
||
# IMAGE_MAKE_SEMANTIC_REVIEW_ENABLED=1
|
||
# IMAGE_MAKE_SEMANTIC_REVIEW_MIN_SCORE=70
|
||
# IMAGE_MAKE_SEMANTIC_REVIEW_MAX_ATTEMPTS=3
|
||
# H5_WECHAT_MP_FRESH_PAGE_THUMBNAILS=1
|
||
# H5_WECHAT_MP_FRESH_THUMBNAIL_REPAIR=0
|
||
# Sandbox MCP 调用 Portal 内部生图入口;容器内通常使用 host.docker.internal。
|
||
# MINDSPACE_AGENT_API_BASE_URL=http://127.0.0.1:8081/api
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Memind runtime profile(本地 vs 生产 必须区分)
|
||
# 由 scripts/memind-runtime-profile.mjs 在 pnpm dev / server.mjs 启动时应用。
|
||
#
|
||
# | profile | 场景 | MindSpace 数据路径 |
|
||
# |----------------|-------------------|--------------------|
|
||
# | local | 本机日常开发 | <repo>/data/mindspace |
|
||
# | split-service | 本机验证 103 拆分 | /Users/john/MindSpace/data/mindspace |
|
||
# | production | 103 生产服务器 | 103 .env 为准,勿提交 Git |
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# 【本地开发 — 复制到 .env 的默认值】
|
||
MEMIND_RUNTIME_PROFILE=local
|
||
# MINDSPACE_STORAGE_ROOT 留空即可,自动使用 <repo>/data/mindspace
|
||
|
||
# 【本机 split-service 联调 — 需要独立 MindSpace LaunchAgent 已启动】
|
||
# MEMIND_RUNTIME_PROFILE=split-service
|
||
# MINDSPACE_REMOTE_BASE_URL=http://127.0.0.1:8082
|
||
# MINDSPACE_REMOTE_AUTH_TOKEN=local-dev-secret
|
||
# MINDSPACE_STORAGE_ROOT=/Users/john/MindSpace/data/mindspace
|
||
|
||
# 【103 生产 — 仅在服务器维护,示例勿照抄密钥】
|
||
# MEMIND_RUNTIME_PROFILE=production
|
||
# MINDSPACE_SERVER_ADAPTER=remote
|
||
# MINDSPACE_REMOTE_BASE_URL=http://127.0.0.1:8082
|
||
# MINDSPACE_REMOTE_AUTH_TOKEN=<与 cn.tkmind.mindspace-service 一致>
|
||
# MINDSPACE_STORAGE_ROOT=/Users/john/MindSpace/data/mindspace
|