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
- 設置歸屬: 非用戶設置項