Files
memind/.env.example

283 lines
14 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 预览用 5173Agent 交付的 MindSpace 公开页 + Page Data API 走 Portal8081)。
# 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_ENABLEDH5 构建开关才会生效。
# 开启后,页面编辑子聊天会传 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 Brokerdocs/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 decisiondocs/h5-session-architecture-20260706.md Patch 3
# 默认 0/offgateway 仍读 legacy route
# shadow:只打 [router-shadow] 日志,行为不变
# 1/ongateway 优先读 classification.decision.route / session_hint
# MEMIND_ROUTER_NORMALIZED_DECISION=0
# H5 Session stream replaydocs/h5-session-architecture-20260706.md Patch 4c
# 默认 0session SSE 仍纯透传 goosed;设 1 时 Portal 持久化 session 事件并支持 Last-Event-ID 重连补发。
# MEMIND_SESSION_STREAM_REPLAY=0
# H5 Session Broker metricsdocs/h5-session-architecture-20260706.md §13.4
# 默认 0:不打 structured log;设 1 时输出 [session_broker.*] 行
# MEMIND_SESSION_BROKER_METRICS=0
# H5 SSE event taxonomydocs/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 boundarydocs/h5-session-architecture-20260706.md Patch 5
# CI/发版前跑:npm run verify:goosed-proxy-boundary
# 新增 goosed 调用须走 tkmind-proxyMindSpace 例外见 goosed-proxy-boundary.mjs allowlist
# H5 public HTML 假交付 guarddocs/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 replayPatch 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 relaynode scripts/fix-local-goose-relay.mjs
# 本地 Ollama fallbackDeepSeek 额度不足,或 andu Relay 500agent 请求体含 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 # 输入 Token2 分/1k(¥0.02/1k
# H5_BILL_OUTPUT_CENTS_PER_1K=6 # 输出 Token6 分/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.cnPortal 前端链接见 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 | 本机日常开发 | <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