-- 0012_tool_policy: 工具级可达性标记落盘(design/11 §3、design/09 §2.1;裁决 1.3/10.4.2)。 -- -- 每个能力(工具/技能/MCP 等)两个独立布尔 allow_in_group / allow_in_stranger, -- 默认 0 = 仅主人(owner-only);群聊与陌生人环境只有标记为真的能力可被调用 -- (策略引擎读值见 internal/capability/restrict)。 -- -- 为什么必须落盘:裁决 1.3「时 per-tool 为准且必须落盘」——此前标记只活在 -- capability registry 的内存里,管理面板 POST /api/v1/admin/plugins/policy -- 改完一重启就复位。本表是那份策略的权威载体(registry 启动时 Load, -- SetPolicy 时先落库再改内存,见 internal/capability/registry/policy_store.go)。 -- -- 口径:一行 = 一个已配置过的能力名;没有行的能力按默认值(两布尔均 0) -- 处理,因此本表不需要为每个内置工具预填行——默认即最严(fail-closed)。 -- name 是能力名(工具名 / "mcp:" 等),唯一索引承载「一个能力一行」。 -- 表名用复数,援引 AGENTS §10 已登记的例外(既有迁移口径一致)。 CREATE TABLE IF NOT EXISTS tool_policies ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, allow_in_group INTEGER NOT NULL DEFAULT 0, allow_in_stranger INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) ); -- 唯一索引同时承担 upsert 的冲突目标(ON CONFLICT(name) 需要唯一约束/索引)。 CREATE UNIQUE INDEX IF NOT EXISTS idx_tool_policies_name ON tool_policies (name);