muse-agent-example/db/ddl/102-example智能体技能登记.sql
zizi b0bc7a8745 框架: 技能按动作-对象重组 + 先审后入创作闭环
一、技能重组(动作-对象命名)
- 旧目录 clean/confirm/continuation/db/detect/embed/… 重组为
  clean-book-text/decide-candidate/write-next-chapter/access-database/
  check-content-consistency/embed-knowledge/…(git 识别为 rename,内容保持)
- agents/*.md、AGENTS.md/CLAUDE.md 收编、example_skill 登记表同步新名

二、先审后入创作闭环(本次核心)
正文接受从"机械门一过就写正典"改为"机械门+语义审查双通过+用户批准+单事务原子提交",
DB 级兜底,编排层跳步即被硬拒。
- candidate_cas.py + example_candidate_cas(109):持久化 CAS 状态链
- fact_delta.py + example_fact_delta/example_fact_ledger(106):结构化事实增量,
  模型只提六型闭集增量+正文证据引文,仅用户批准的增量随正文同事务入账本
- projection_registry.py + example_projection_run(107):投影登记与恢复
- acceptance_state.py:接受前置实时状态重读
- lesson_registry.py + example_lesson(108):经验升格链,禁止自动升格
- DDL 105:example_candidate 增 semantic_status/semantic_report_sha256
- write_canonical.accept:语义兜底+同事务合并增量+登记投影;
  run_writer_pipeline/persist_writer_run/run_writer_semantic_detector/step2 接入全链
- claude_runtime:兼容新 CLI modelUsage 信息字段

三、审查修复(独立子代理四维审查后)
- 事实增量 propose→approve 翻态正道,不撞唯一键
- 冻结配置探针重刷(CLI 2.1.211→2.1.231 漂移),profileSha256/adapterVersion 再登记
- 可视化合同悬空路径/五六空间矛盾、 SoT 旧技能名漂移、行尾空白清理

测试:离线 65 套 + 真实库集成 5 套(CAS/接受故障注入/事实增量/投影/经验升格)+ 回放 79 项全绿。
创作内容(docs/design、生成正文 artifacts)按"框架与创作分开"未入本提交。
2026-08-14 10:24:08 +08:00

53 lines
4.0 KiB
SQL
Raw 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.

-- 智能体与技能登记表:example_agent_role(5 角色)+ example_skill(目录扫描,不固定数量)。
-- 设计拍板 2026-07-30(docs/2026-07-30-落库与看板设计.md §2.10,A 方案)。
-- 用途:看板"智能体"空间的数据源。这些元数据的**权威在 Git 侧**(.claude/agents/*.md、
-- .claude/skills/*/SKILL.md);本表是 Git 权威在库内的**影子**(类比 muse_meta_function_chain
-- 是 meta/chains 的库内影子),由登记脚本 sync_agent_registry.py 从 Git 抽取 upsert,
-- 看板只读本表、不读 Git(守住看板只读库的合同)。Git 仍是配置权威。
-- 两表都是可变表(配置变更=更新行),带公共列六件套 + updated_at 触发器。
-- 全部对象 IF NOT EXISTS / OR REPLACE,重复 apply 幂等。
-- ══ example_agent_role:角色登记(writer/planner/extractor/detector/judge)══
CREATE TABLE IF NOT EXISTS example_agent_role (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
role VARCHAR(32) NOT NULL, -- 角色标识(writer/planner/extractor/detector/judge)
display_name VARCHAR(64), -- 显示名(从 description 的"——"前截取)
model VARCHAR(64), -- 模型归属(opus/其它,见 AGENTS §6 角色模型归属)
effort VARCHAR(16), -- 推理力度(可配置项,暂空)
budget_usd NUMERIC(14,8), -- 预算(可配置项,暂空)
tools JSONB, -- 可用工具(如 ["Read","Write","Grep","Glob"])
responsibility TEXT, -- 职责白话描述(= frontmatter description)
source_ref VARCHAR(256), -- Git 侧 .md 路径(出处可溯)
synced_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 最近一次从 Git 同步时间
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_example_agent_role UNIQUE (tenant_id, role)
);
CREATE OR REPLACE TRIGGER trg_example_agent_role_updated_at BEFORE UPDATE ON example_agent_role FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
-- ══ example_skill:技能登记(由目录扫描同步)══
CREATE TABLE IF NOT EXISTS example_skill (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
skill_name VARCHAR(64) NOT NULL, -- 技能标识(= skill 目录名 / frontmatter name)
purpose TEXT, -- 一句话用途(= frontmatter description)
consumer VARCHAR(64), -- 给谁用(主会话/某角色/其它 skill,暂空待补)
reads JSONB, -- 读哪些表(登记脚本自动抽取表名,待人工核读写方向)
writes JSONB, -- 写哪些表(待人工核;自动抽取不区分读写,暂空)
red_lines TEXT, -- 红线(待人工补)
model_used VARCHAR(64), -- 用模型则记(MiniMax-M3/opus…),确定性工具为空
source_ref VARCHAR(256), -- SKILL.md 路径(出处可溯)
synced_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_example_skill UNIQUE (tenant_id, skill_name)
);
CREATE OR REPLACE TRIGGER trg_example_skill_updated_at BEFORE UPDATE ON example_skill FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();