# 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= # MEMIND_ANALYTICS_ID_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 才会按文本自动识别代码任务。 # MEMIND_AGENT_CODE_RUNS_ENABLED=0 # VITE_AGENT_CODE_RUNS_ENABLED=0 # VITE_AGENT_CODE_RUNS_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 # --------------------------------------------------------------------------- # Memind runtime profile(本地 vs 生产 必须区分) # 由 scripts/memind-runtime-profile.mjs 在 pnpm dev / server.mjs 启动时应用。 # # | profile | 场景 | MindSpace 数据路径 | # |----------------|-------------------|--------------------| # | local | 本机日常开发 | /data/mindspace | # | split-service | 本机验证 103 拆分 | /Users/john/MindSpace/data/mindspace | # | production | 103 生产服务器 | 103 .env 为准,勿提交 Git | # --------------------------------------------------------------------------- # 【本地开发 — 复制到 .env 的默认值】 MEMIND_RUNTIME_PROFILE=local # MINDSPACE_STORAGE_ROOT 留空即可,自动使用 /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