Retire ACP/Hermes/OpenCode surfaces and rename hermes_tools to mnote_agent_tools so Page AI stays on Pi Lab only. Add Chrome vault extension + extension token route, pre-release purge design, and soft-retire legacy smokes for the small-group production cut.
5.3 KiB
5.3 KiB
name, description
| name | description |
|---|---|
| mnote-vault | MNote AI 密码本(多 agent 唯一策略)。读密与 login/session:mnote-vault CLI + capability token(不依赖 mnote-web)。 登录态为每账号独立 session 文件;禁扫 .mnote/vault 文件。 |
MNote 密码箱 / AI 密码本
SSOT:/home/lix/.agent-infra/vault-policy.md
设计:
design/12-vault/process/12-2-vaultd-local-token-agent-read-path-v1.md(agent 读密 / login)design/12-vault/process/12-3-chrome-extension-vault-save-v1.md§5.6 / §6.5(每账号 session 文件;扩展只写入)
读密稳态(P0 · 不依赖 mnote-web)
可执行入口(agent 必看 · 不要自己 find)
| 优先级 | 路径 | 说明 |
|---|---|---|
| 1(默认) | mnote-vault |
已装到 ~/.local/bin/mnote-vault(symlink) |
| 2(绝对路径) | /home/lix/.local/bin/mnote-vault |
PATH 异常时直接用 |
| 3(源码构建产物) | /mnt/Data1T/mnote/rust/target/debug/mnote-vault |
开发树;不要在 /home/lix 下 find 全盘 |
# 一次(人 / 安装):签发 token(cwd 任意)
mnote-vault issue-token --agent paseo --ttl 90d
# 或绝对路径:
# /home/lix/.local/bin/mnote-vault issue-token --agent paseo --ttl 90d
# Agent 每次(已知 id;cwd 任意,不要求在 mnote 仓库)
export MNOTE_VAULT_TOKEN_FILE="${MNOTE_VAULT_TOKEN_FILE:-$HOME/.config/mnote/vault-tokens/default.token}"
mnote-vault list
mnote-vault resolve --id <id> --field password
# 管道只要明文:
mnote-vault resolve --id <id> --field password --raw
故障排查顺序(≤2 步,禁止全盘搜索二进制):
command -v mnote-vault || ls /home/lix/.local/bin/mnote-vaultmnote-vault doctor→tokenValid=false时只跑issue-token,不要起 3000
| 命令 | 用途 |
|---|---|
doctor |
workspace / token / hmac 状态(无明文) |
issue-token |
签发 capability token(不是 master key) |
whoami |
当前 token claims |
list / get |
L0 选型;无密码/cookie 明文;可见 hasLoginSession |
resolve |
取密;字段 password / apikey / token 等;审计无 value |
login |
优先复用登录态;无/过期则 api_first 或 human_required |
session |
浏览器/人机验证后回写 Cookie(写 session 文件;不启 3000) |
serve |
可选 UDS vaultd;CLI 默认 sock→内嵌 fallback |
禁止:为读密 / login / session 去 auth-e2e / 起 3000 / 用 cookie 调 /api/vault/ai/*。
禁止:Read / cat / grep .mnote/vault/**(含 entries/ 与 sessions/)。
scripts/mnote-vault-cli.js 的 web 路径仅调试 UI。
登录态文件(每账号一份 · 12-3)
磁盘(AI 本 / 用户 vault 同结构):
{workspace}/.mnote/vault/
entries/{credId}.md # 账号密码;勿手读
sessions/{credId}/primary.json # 主账号登录态
sessions/{credId}/{accountId}.json
- 写入口(人):Chrome 扩展默认保存登录态 →
PUT …/session;或 Agentmnote-vault session。 - 读入口(AI):只经
login/session/(P1)resolve --field session。 - frontmatter 内旧
loginSession:兼容读;新写一律走 session 文件。 - 扩展写入的是人用 vault;Agent 默认读 AI 本 → 须用户 share-to-ai(会连同 session 文件复制)。
登录稳态(外站 cookie · 12-2 P1d + 12-3)
需要外站已登录状态(Cookie)时:
# 1) 优先复用已有 session(读 sessions/…json;无 HTTP 出站)
mnote-vault login --id <id>
# 多账号:
mnote-vault login --id <id> --account-id <accId>
# 2a) mode=session | reused | ok → 用响应里的 cookieHeader
# (仅进程内/管道使用;禁止贴进聊天、commit、issue)
# 2b) human_required / CF:chrome-bridge 登录后回写
mnote-vault session --id <id> --cookie-header 'name=value; …' --source human_bridge
# 可选:--account-id <accId>
# 3) 强制重新 api_first 登录(忽略未过期 session)
mnote-vault login --id <id> --force-refresh
login 结果 |
Agent 动作 |
|---|---|
mode=session / reused / ok 且含 cookieHeader |
用 Cookie 调目标站 API 或注入浏览器 |
mode=human_required |
chrome-bridge / 人完成验证 → session 回写 → 再 login |
| 无 session 且 api_first 失败 | 查 playbook / 人用扩展是否已 share-to-ai |
resolve/session/login写盘:本地.mnote/vault/**(core),不经 mnote-web。login的api_first仅对目标站出站 HTTP。- 默认 session TTL:7 天(
MNOTE_VAULT_SESSION_TTL_HOURS)。
与 Chrome 扩展的边界
| 角色 | 通道 | 鉴权 |
|---|---|---|
| 人:外站保存账号+登录态 | 扩展 → mnote-web /api/vault/* |
human Bearer(非 agent token) |
| AI:读密 / 复用登录态 | mnote-vault CLI → core |
capability token |
扩展 不是 agent 通道。人保存后若要 AI 用:在确认层勾选 同步到 AI 密码本(或工作台 share-to-ai)。
硬规则
- 禁 file 扫
.mnote/vault/**(含 sessions) - 聊天不贴 password / cookieHeader / token
- Token
0600;故障先issue-token,不要默认起 3000 - 需要登录态时 先
login,不要先resolve密码再手拼 Cookie