x402 付费墙预授权
x402 付费墙预授权 (PR-X)
这些变量约束 "会话级预授权" 特性, 它让运营方对给定 scope 一次性授权 x402 付费墙付款, 然后自动付款(无需每次调用确认)直到 过期 / 预算耗尽 / 显式撤销。 授权调用本身始终经过统一确认 门。它落下一个 session 行后,匹配该 session scope 的 窗口内 x402 付款会跳过每次调用的用户提示,并 经 transfer_token 直接执行。每笔自动支出都写入 审计元数据(session id + 剩余预算),因此用户可以 追踪每笔扣费。 接入于: - src/minara/x402-preauth-store.ts(SQLite store + 上限计算) - src/minara/x402-preauth-config.ts(env loader + 上限 helper) - src/tools/_shared/confirm.ts(shouldAutoExecuteX402) - src/tools/trade.ts(transfer_token 先咨询自动执行路径; 未匹配的付款仍走统一确认门) - src/tools/x402-preauth.ts(LLM 可调用的 grant / list / revoke) - src/gateway/repl-commands.ts(/x402 preauth CLI 面)
X402_PREAUTH_DEFAULT_TTL_HOURS
当用户/LLM 未指定时的默认会话过期 时间。
- 作用: 调用
x402_preauth_grant时未带ttl_hours所应用的 TTL。 - 消费方: src/minara/x402-preauth-config.ts.
- 何时设置: 调短可让授权保持短时有效(例如 4 = 4h);调高可为长时间运行的批处理任务留出更多空间。
- 未设置时: 24 小时。
- 格式: 正整数(小时)。
- 设置归属: 非用户设置项
X402_PREAUTH_MAX_TTL_HOURS
非 forever 会话 TTL 的硬上限。
- 作用:
ttl_hours > 此值的授权请求会以field: "ttlMs"被拒绝。该上限辅助函数在 LLM 工具、REPL 命令与直接访问 store 三处统一执行。 - 何时设置: 调短可强制更短的运维信任窗口;仅当长时会话是部署要求时才调高。
- 未设置时: 168(7 天)。
- 格式: 正整数(小时)。
- 设置归属: 非用户设置项
X402_PREAUTH_ALLOW_FOREVER
是否允许 ttl_hours: "forever" (无基于时间的过期)授权。
- 作用: 当为
0时,LLM 工具 + REPL + store 会以field: "forever"拒绝 forever 授权请求。forever 预算上限仍会被读取以供文档说明,但永远不会触及。对于希望每笔授权都有硬性过期边界的环境(审计/合规),设为0。 - 未设置时:
1(允许 forever 授权,需在 REPL 中经用户显式二次确认把关,且 LLM 绝不自动提议 forever)。 - 格式:
1/true/yes/on(允许)或0/false/no/off。 - 设置归属: 非用户设置项
X402_PREAUTH_MAX_PER_CALL_USDC
单笔自动支付 x402 付款的硬上限 (USDC)。
- 作用: (a) LLM 工具 + REPL 拒绝
per_call_cap_usdc > 此值的授权;(b) 对于任何超过此金额的单笔付款,shouldAutoExecuteX402会以amount_over_cap短路,回退到常规的两步确认。这是最重要的一条安全边界——即便用户在已有会话中授予了更高的上限,它也能限制单个恶意付费墙最多能榨取多少。 - 何时设置: 在共享基础设施上调低以限制单笔的影响范围。仅当付费墙的正当成本更高时才调高。
- 未设置时: 0.5(USDC)。
- 格式: 正数(USDC)。
- 设置归属: 非用户设置项
X402_PREAUTH_MAX_BUDGET_USDC
非 forever 会话总预算的硬上限 (USDC)。
- 作用: 同时满足
total_budget_usdc > 此值且ttl_hours非 null 的授权请求会被拒绝。forever 授权的预算使用下方单独的(通常更严格的)上限。 - 未设置时: 5(USDC)。
- 格式: 正数(USDC)。
- 设置归属: 非用户设置项
X402_PREAUTH_MAX_FOREVER_BUDGET_USDC
forever 会话总预算的硬上限 (USDC)。
- 作用: 与 MAX_BUDGET_USDC 形式相同,但仅在
ttl_hours: "forever"时适用。之所以独立,是因为去掉时间边界后需要更严格的金额控制。forever 预算可以高于或低于按时间限定的预算——由运维选择;默认值设得更高,是因为 forever 授权通常是每笔金额很小、但在数月内累积(「$0.01/call x 2000 calls」)。 - 未设置时: 20(USDC)。
- 格式: 正数(USDC)。
- 设置归属: 非用户设置项
X402_PREAUTH_DISABLE
全局 kill switch。
- 作用: 当为
1时,所有 preauth 代码路径都会短路。transfer_token忽略x402_context,LLM 工具返回disabled错误,REPL 打印「x402 preauth disabled by env」并拒绝授权。所有 x402 付款回退到常规的两步确认流程。 - 何时设置: 事件响应(疑似失控的付费墙)、每笔付款都必须经用户显式确认并记录的合规审计窗口,或者根本不想要此功能的运维。
- 未设置时:
0(preauth 机制处于激活状态)。 - 格式:
1/true/yes/on表示禁用;其他任何值(默认)保持启用。 - 设置归属: 非用户设置项
OpenClaw workspace 集成
agent 读写位于 ~/.minara/workspace/ 的 workspace 目录 (经 --workspace 覆盖),其中含仿照 OpenClaw 的 AGENTS.default schema 的 markdown 文件:SOUL.md(身份)、 AGENTS.md(规则)、IDENTITY.md、USER.md、MEMORY.md(精选长期)、 HEARTBEAT.md(会话间备忘)、BOOTSTRAP.md(仅首次运行), 以及 memory/YYYY-MM-DD-*.md(每日日志)。 模板随 src/workspace/templates/ 发布。minara setup 在首次运行时播种它们。播种是幂等的,绝不 覆盖用户已编辑过的文件。
WORKSPACE_HEARTBEAT_ENABLED
每轮写入 HEARTBEAT.md 状态的写入器。
- 作用: 开启时,agent 在每轮结束后写入
<workspace>/HEARTBEAT.md,包含last_seen、session_id、surface、turn_count、last_user_query,以及从回复中启发式提取的open_loops。写入器在多次写入间原样保留用户编辑过的## Schedule小节。 - When to disable: 只读的 workspace 挂载、CI 运行,或不希望在磁盘上留下会话备忘的隐私敏感场景。
- 未设置时: 开启。
- 格式:
0/false/no/off表示禁用;其他任何值(默认)保持启用。 - 设置归属: 设置 → 偏好(schema 键)
WORKSPACE_DAILY_LOG_ENABLED
追加按会话的每日日志。
- 作用: 开启时,每个周期会在持久化的 SQLite 水位之后,把所有尚未记账的
chat_turns行刷写到<workspace>/memory/YYYY-MM-DD-<session>.md。这些行保留其真实的 session id、surface 与 runtime 来源;correlation id 绝不会被用作 session id。按会话分文件可避免多进程追加竞争。 - When to enable: 长期运行的部署,希望 agent 积累工作记忆,供你之后提升到 MEMORY.md。
- 未设置时: 关闭(在显式开启前,workspace 保持精简)。
- 格式:
1/true/yes/on表示启用。 - 设置归属: 设置 → 偏好(schema 键)
WORKSPACE_DAILY_LOG_INTERVAL
每日日志追加之间的轮数。
- 作用: 刷写上述
chat_turns积压的节奏。每次到期刷写都会写入水位之后的所有行,因此增大间隔只会延迟持久化,而不会对中间的轮次进行抽样或丢弃。 - 未设置时: 5 轮。
- 格式: 正整数。
- 设置归属: 非用户设置项
WORKSPACE_DREAM_ENABLED
周期性的 MEMORY.md 归并。
- 作用: 开启时,一个 setInterval 任务每隔
WORKSPACE_DREAM_INTERVAL_HOURS唤醒一次,从memory/读取近期的每日日志,并请求当前 LLM 提取持久的事实/偏好/决策。结果会作为## Dreamed YYYY-MM-DD小节追加到 MEMORY.md(仅追加——绝不覆盖用户编辑)。来自自动化的日志轮次在磁盘上仍可审计,但会在进入 LLM prompt 前被移除,因此 Autopilot、strategy、workflow 或来源未知的 perps 运行不会变成用户偏好。 - When to enable: 长期运行的部署,运维希望长期记忆从短期日志演化而来、无需手工整理。会消耗 LLM 调用——在成本敏感的场景下保持关闭。
- 未设置时: 关闭。
- 格式:
1/true/yes/on表示启用。 - 设置归属: 设置 → 偏好(schema 键)
WORKSPACE_DREAM_INTERVAL_HOURS
dream 归并的节奏。
- 作用: 两次 dreaming 运行之间的小时数。当上一次运行仍在进行时,调度器会跳过该 tick,因此缓慢的 LLM 调用不会堆积。当
WORKSPACE_DREAM_ENABLED关闭时无效。 - 未设置时: 24(每天一次归并)。
- 格式: 正数(小时,可为小数)。
- 设置归属: 非用户设置项
WORKSPACE_DREAM_TOTAL_INPUT_BYTES
dream prompt 输入的全局字节预算 (所有每日日志合计)。
- 作用: 限制单次 dream pass 送入 LLM 的总字节数。每日日志会在预算内保留为一段最新在前的连续后缀,因此模型始终看到一段按时间连续、且包含最近活动的切片。防止一段密集日志的长窗口冲破模型的上下文窗口。单文件内容仍会尾部截断到 64 KB(单文件上限),且即使最近的日志单独就超过此预算,也始终保留。当
WORKSPACE_DREAM_ENABLED关闭时无效。 - 未设置时: 262144(256 KB)。
- 格式: 正整数(字节)。
- 设置归属: 非用户设置项
WORKSPACE_DREAM_LOCK_TTL_MS
dream 锁文件的 TTL。
- 作用: 一个
<workspace>/.dreaming.lock文件在被视为过期、可被其他进程回收之前会被尊重多久。应反映单次 dream pass(LLM 调用 + IO)的最长合理时长,而非两次运行之间的间隔。该锁可防止 REPL 与 HTTP gateway 在各自的 tick 窗口重叠时,同时把相同日志归并进 MEMORY.md。不支持 NFS workspace(底层O_EXCL语义无法保证在所有 NFS 客户端上都是原子的)——请让 dreaming 保持在单台主机上。当WORKSPACE_DREAM_ENABLED关闭时无效。 - 未设置时: 1800000(30 分钟)。
- 格式: 正整数(毫秒)。
- 设置归属: 非用户设置项
REPORT_BUNDLE_CHART_PNGS
在 deep-research 的 HTML / PDF 报告中回退到 PNG 打包的图表,而非交互式 ECharts。
- 作用: 当设置时,gateway 的 deep-research 分支向
renderDeepResearchReport传入["html", "pdf", "charts"],于是bundleChartPngs运行,HTML 将每个chart://<id>内嵌为静态的<img src="charts/<id>.png">标签(通过无头 playwright 在服务端渲染)。未设置时(v7 起的默认),gateway 只传入["html", "pdf"],每个 chart:// 链接展开为标准的 ECharts 内嵌形式(<div class="echart-host">+ 从 echarts CDN 注水的内联<script>)。默认产生带缩放 + tooltip + saveAsImage PNG 下载的交互式图表。 - 由哪个 skill / tool 消费:deep-research 流水线(
src/gateway/api.ts的handleChatStreamdeep-research 分支)。 - When to set it: 需要导出报告用于离线分发(echarts CDN 不可达)的运维,或无法容忍打开时拉取约 120 KB CDN 脚本的运维。权衡:PNG 打包的图表是静态的——无缩放、无 tooltip、无 PNG 下载按钮。必须安装无头 playwright(已是项目依赖)才能运行图表物化。
- 未设置时: 交互式 ECharts(CDN 注水)。在有网络访问的浏览器中打开 HTML 即可看到图表;离线时图表会按内嵌脚本的 try/catch 降级为一个小小的「chart unavailable」占位。
- 格式: 1 / true(启用)——其他任何值或未设置都表示禁用。
- 设置归属: 设置 → 偏好(schema 键)
钱包充值监听
实时充值检测 SSE 端点 (POST /v1/wallet/deposits/watch)。为 perps USDC/Arbitrum 地址 的 Portfolio DepositModal 中的绿色翻转提供动力。 两种链传输方式;agent 在启动时选择: 1. Alchemy(首选)——设置 ALCHEMY_API_KEY。使用 alchemy_getAssetTransfers(专为传入转账构建的 查询)+ alchemy_pendingTransactions WS 订阅以 实时观测 mempool。免费层:每月 300M CU。 2. 公共 RPC 回退——无 ALCHEMY_API_KEY 时。每 5s 轮询 eth_getLogs,过滤到充值地址的 USDC Transfer 事件。无 mempool 可见性(此模式下不发出 pending 事件)。 它控制什么:WALLET_DEPOSIT_WATCH_ENABLED——该 SSE 端点的 总开关。开发环境默认 ON,让该特性开箱 即用;设为 false / 0 干净地禁用。关闭时, web-ui 的 DepositStatus pill 显示 "Live updates unavailable", 用户仍可正常复制地址。 哪个 skill / 工具消费它:apps/agent/src/wallet-watch/* 和 api.ts 的 handleWalletDepositsWatch 处理器。
WALLET_DEPOSIT_WATCH_ENABLED
WALLET_DEPOSIT_WATCH_ENABLED=true
- 设置归属: 设置 → 偏好(schema 键)
ALCHEMY_API_KEY
Alchemy 的 Arbitrum API key。一个 key 可用于所有 Alchemy 链。可选—— 不配置时 watcher 回退到公共 Arbitrum RPC(无 mempool 检测)。 ALCHEMY_API_KEY=abc123...
- 设置归属: 设置 → API 密钥
ALCHEMY_NETWORK
Alchemy 网络枚举字符串。arb-mainnet 是目前我们唯一关心的(perps 钱包 充值 = Arbitrum 上的 USDC)。仅当你把 ALCHEMY_API_KEY 指向测试网做端到端 QA 时才覆盖。 ALCHEMY_NETWORK=arb-mainnet
- 设置归属: 非用户设置项
ARBITRUM_RPC_URL
公共 Arbitrum RPC URL——在 ALCHEMY_API_KEY 未设置时使用。
- 默认值: https://arb1.arbitrum.io/rpc(Arbitrum Foundation)。
- 运维可以换用付费的 HTTPS 端点,而无需启用
- Alchemy——如果只需要确认后检测。
- ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc
- 设置归属: 非用户设置项
SOLANA_RPC_URL
公共 Solana RPC URL——由现货充值 watcher 用于 Solana 链。非 EVM,因此不会 自动接入 Alchemy;会先尝试此 URL,再依次尝试 foundation 级别的公共列表 (api.mainnet-beta.solana.com、solana-rpc.publicnode.com、…)。该 transport 每 5 秒轮询一次用户 USDC token 账户上的 getSignaturesForAddress,并在 confirmed 确认级别翻转为 credited。
- 默认值: https://api.mainnet-beta.solana.com(Solana Foundation)。
- 使用托管 RPC(Helius、QuickNode、Triton、Alchemy
- Solana)的运维可以在此换用,以获得更高的速率限制。
- SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
- 设置归属: 非用户设置项
DEPOSIT_WATCH_TIMEOUT_MS
一个 watch 会话在自动关闭前会存续多久(ms)。默认 20 分钟——足以应对缓慢 的链上确认,同时限制忘记关闭的弹窗对资源的占用。 DEPOSIT_WATCH_TIMEOUT_MS=1200000
- 设置归属: 非用户设置项