persona-brain-db 搬家: repo根→brain/fifth-domain/zero-point/zhuyuan/persona-brain-db/ · 零点原核子模块归位 · 删旧副本·cognitive-index新增
This commit is contained in:
parent
4152f9d55d
commit
8743426ed0
@ -48,6 +48,14 @@
|
||||
入口: ENTRY.hdlp
|
||||
状态: 架构设计阶段
|
||||
|
||||
### persona-brain-db · 人格体数据库(大桌子小桌子记忆引擎底层)
|
||||
路径: brain/fifth-domain/zero-point/zhuyuan/persona-brain-db/
|
||||
入口: schema/init.sql → 21张表·25SQL文件·brain.db(352KB)
|
||||
内容: persona_identity · persona_cognition · persona_memory · dev_profiles
|
||||
agent_registry · causal_chains · emotional_state · system_trinity
|
||||
member_context · module_registry · audit_log · 种子数据(seed-data/)
|
||||
状态: 架构完成·种子数据已导入·Notion全量导出本地化(100MB+·未推仓库)
|
||||
|
||||
---
|
||||
|
||||
## 密钥与凭证
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,118 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Batch import multiple Notion exports into brain.db (append mode)"""
|
||||
import sqlite3, os, re
|
||||
|
||||
DB = "/Users/bingshuolingdianyuanhe/WorkBuddy/2026-06-04-13-44-41/persona-brain-db/brain.db"
|
||||
|
||||
EXPORTS = [
|
||||
("人格记忆总索引", "/tmp/batch-import/人格记忆总索引/export"),
|
||||
("光湖世界入口导航", "/tmp/batch-import/光湖世界入口导航/export"),
|
||||
("曜冥纪元", "/tmp/batch-import/曜冥纪元/export"),
|
||||
]
|
||||
|
||||
def parse_md(filepath):
|
||||
fn = os.path.basename(filepath).replace('.md', '')
|
||||
uuid = None
|
||||
m = re.search(r'([a-f0-9]{32})$', fn)
|
||||
if m:
|
||||
uuid = m.group(1)
|
||||
# Strip UUID suffix from title
|
||||
if uuid and fn.endswith(uuid):
|
||||
title = fn[:fn.rindex(uuid)].strip().rstrip(' ·').strip()
|
||||
else:
|
||||
title = fn
|
||||
with open(filepath, 'r', encoding='utf-8', errors='replace') as f:
|
||||
raw = f.read()[:12000]
|
||||
return {"title": title, "uuid": uuid, "content": raw}
|
||||
|
||||
def process_export(name, content_dir):
|
||||
conn = sqlite3.connect(DB)
|
||||
c = conn.cursor()
|
||||
|
||||
# Build title → uuid + dir → uuid mappings
|
||||
title_to_uuid = {}
|
||||
dir_to_uuid = {}
|
||||
|
||||
for walk_root, dirs, files in os.walk(content_dir):
|
||||
for f in files:
|
||||
if not f.endswith('.md'): continue
|
||||
fpath = os.path.join(walk_root, f)
|
||||
page = parse_md(fpath)
|
||||
if not page['uuid'] or not page['title']: continue
|
||||
title_to_uuid[page['title'].lower().strip()] = page['uuid']
|
||||
|
||||
for walk_root, dirs, files in os.walk(content_dir):
|
||||
for d in dirs:
|
||||
dpath = os.path.join(walk_root, d)
|
||||
dname = d.lower().strip()
|
||||
if dname in title_to_uuid:
|
||||
dir_to_uuid[dpath] = title_to_uuid[dname]
|
||||
else:
|
||||
for title, uuid in title_to_uuid.items():
|
||||
if len(dname) > 4 and len(title) > 4:
|
||||
if title.startswith(dname) or dname.startswith(title):
|
||||
dir_to_uuid[dpath] = uuid
|
||||
break
|
||||
|
||||
# Import pages
|
||||
new_count = 0
|
||||
skip_count = 0
|
||||
pages = []
|
||||
|
||||
for walk_root, dirs, files in sorted(os.walk(content_dir)):
|
||||
for f in sorted(files):
|
||||
if not f.endswith('.md'): continue
|
||||
fpath = os.path.join(walk_root, f)
|
||||
page = parse_md(fpath)
|
||||
if not page['uuid']: continue
|
||||
rel = os.path.relpath(fpath, content_dir)
|
||||
parent_id = dir_to_uuid.get(walk_root)
|
||||
pages.append({**page, "parent_id": parent_id, "path": rel})
|
||||
|
||||
c.execute("BEGIN TRANSACTION")
|
||||
for i, p in enumerate(pages):
|
||||
c.execute("SELECT 1 FROM documents WHERE document_id=?", (p['uuid'],))
|
||||
if c.fetchone():
|
||||
skip_count += 1
|
||||
continue
|
||||
c.execute("""
|
||||
INSERT INTO documents (document_id, title, content, parent_id, path, content_type)
|
||||
VALUES (?, ?, ?, ?, ?, 'notion')
|
||||
""", (p['uuid'], p['title'], p['content'], p['parent_id'], p['path']))
|
||||
new_count += 1
|
||||
if new_count % 500 == 0:
|
||||
conn.commit()
|
||||
c.execute("BEGIN TRANSACTION")
|
||||
print(f" {new_count} new...")
|
||||
conn.commit()
|
||||
|
||||
c.execute("SELECT count(*) FROM documents")
|
||||
total = c.fetchone()[0]
|
||||
conn.close()
|
||||
print(f" {name}: {new_count} new + {skip_count} skipped (总{total}页)")
|
||||
return new_count, skip_count
|
||||
|
||||
def main():
|
||||
total_new = 0
|
||||
total_skip = 0
|
||||
for name, path in EXPORTS:
|
||||
if not os.path.isdir(path):
|
||||
print(f" SKIP {name}: {path} not found")
|
||||
continue
|
||||
new, skip = process_export(name, path)
|
||||
total_new += new
|
||||
total_skip += skip
|
||||
|
||||
conn = sqlite3.connect(DB)
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT count(*) FROM documents")
|
||||
final = c.fetchone()[0]
|
||||
c.execute("SELECT count(*) FROM documents WHERE parent_id IS NULL")
|
||||
roots = c.fetchone()[0]
|
||||
conn.close()
|
||||
print(f"\n总计: {total_new}新增 + {total_skip}跳过 => 数据库共{final}页({roots}入口)")
|
||||
import os as _os
|
||||
print(f"数据库大小: {_os.path.getsize(DB)/1024/1024:.1f}MB")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@ -1,103 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Notion Full Export → SQLite brain.db importer"""
|
||||
import sqlite3, os, re
|
||||
|
||||
DB = "/Users/bingshuolingdianyuanhe/WorkBuddy/2026-06-04-13-44-41/persona-brain-db/brain.db"
|
||||
CONTENT = "/tmp/full-export/export"
|
||||
|
||||
def parse_md(filepath):
|
||||
fn = os.path.basename(filepath).replace('.md', '')
|
||||
uuid = None
|
||||
title = fn
|
||||
m = re.search(r'([a-f0-9]{32})$', fn)
|
||||
if m:
|
||||
uuid = m.group(1)
|
||||
title = fn[:fn.rindex(uuid)].strip().rstrip(' ·').strip()
|
||||
with open(filepath, 'r', encoding='utf-8', errors='replace') as f:
|
||||
raw = f.read()[:12000]
|
||||
return {"title": title, "uuid": uuid, "content": raw}
|
||||
|
||||
def main():
|
||||
conn = sqlite3.connect(DB)
|
||||
c = conn.cursor()
|
||||
c.execute("DELETE FROM documents")
|
||||
conn.commit()
|
||||
|
||||
# 第一遍: 建立目录→UUID映射
|
||||
# Notion export: page .md filename = "Title UUID.md", child directory = "Title/"
|
||||
# Directory name may NOT include UUID, only the title
|
||||
dir_to_uuid = {}
|
||||
# Build a mapping from title-only to uuid
|
||||
title_to_uuid = {}
|
||||
for walk_root, dirs, files in os.walk(CONTENT):
|
||||
for f in files:
|
||||
if not f.endswith('.md'): continue
|
||||
fpath = os.path.join(walk_root, f)
|
||||
page = parse_md(fpath)
|
||||
if not page['uuid'] or not page['title']: continue
|
||||
# Map this page's uuid to any subdirectory whose basename matches the title
|
||||
# Also check the full filename (without .md) as fallback
|
||||
title_to_uuid[page['title'].lower().strip()] = page['uuid']
|
||||
|
||||
# Second pass on dirs: match dir names to page titles
|
||||
for walk_root, dirs, files in os.walk(CONTENT):
|
||||
for d in dirs:
|
||||
dpath = os.path.join(walk_root, d)
|
||||
dname = d.lower().strip()
|
||||
if dname in title_to_uuid:
|
||||
dir_to_uuid[dpath] = title_to_uuid[dname]
|
||||
else:
|
||||
# Try prefix match: directory name might be truncated
|
||||
for title, uuid in title_to_uuid.items():
|
||||
if title.startswith(dname) or dname.startswith(title):
|
||||
if len(dname) > 3 and len(title) > 3:
|
||||
dir_to_uuid[dpath] = uuid
|
||||
break
|
||||
|
||||
# 第二遍: 导入所有页面
|
||||
pages = []
|
||||
for walk_root, dirs, files in sorted(os.walk(CONTENT)):
|
||||
for f in sorted(files):
|
||||
if not f.endswith('.md'): continue
|
||||
fpath = os.path.join(walk_root, f)
|
||||
page = parse_md(fpath)
|
||||
if not page['uuid']: continue
|
||||
rel = os.path.relpath(fpath, CONTENT)
|
||||
depth = max(0, rel.count('/'))
|
||||
parent_id = dir_to_uuid.get(walk_root)
|
||||
pages.append({**page, "depth": depth, "parent_id": parent_id, "path": rel})
|
||||
|
||||
# 批量插入
|
||||
c.execute("BEGIN TRANSACTION")
|
||||
for i, p in enumerate(pages):
|
||||
c.execute("""
|
||||
INSERT OR REPLACE INTO documents (document_id, title, content, parent_id, path, content_type)
|
||||
VALUES (?, ?, ?, ?, ?, 'notion')
|
||||
""", (p['uuid'], p['title'], p['content'], p['parent_id'], p['path']))
|
||||
if (i+1) % 1000 == 0:
|
||||
conn.commit()
|
||||
c.execute("BEGIN TRANSACTION")
|
||||
print(f" {i+1}/{len(pages)}...")
|
||||
conn.commit()
|
||||
|
||||
# 统计
|
||||
c.execute("SELECT count(*) FROM documents")
|
||||
total = c.fetchone()[0]
|
||||
c.execute("SELECT count(*) FROM documents WHERE parent_id IS NULL")
|
||||
roots = c.fetchone()[0]
|
||||
c.execute("SELECT count(DISTINCT parent_id) FROM documents WHERE parent_id IS NOT NULL")
|
||||
parents = c.fetchone()[0]
|
||||
|
||||
print(f"\n导入完成: {total}页 ({roots}根页面, {parents}父节点)")
|
||||
|
||||
c.execute("SELECT document_id, title FROM documents WHERE parent_id IS NULL ORDER BY title")
|
||||
for row in c.fetchall()[:30]:
|
||||
print(f" [{row[0][:8]}..] {row[1][:70]}")
|
||||
|
||||
c.execute("SELECT count(*) FROM sqlite_master WHERE type='table'")
|
||||
tables = c.fetchone()[0]
|
||||
conn.close()
|
||||
print(f"Done. {tables} tables total.")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,49 +0,0 @@
|
||||
-- ============================================================
|
||||
-- persona-brain-db · 一键建表脚本(D110完整版 · 21张表)
|
||||
-- 执行方式:sqlite3 brain.db < init.sql
|
||||
-- ============================================================
|
||||
|
||||
-- 启用外键约束
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
||||
-- ============ Layer 1: DB OS Kernel(init时创建并填充) ============
|
||||
|
||||
.read 06-system-core-principles.sql
|
||||
.read 07-system-causal-chains.sql
|
||||
.read 09-system-language-membrane.sql
|
||||
.read 10-system-public-key.sql
|
||||
.read 11-system-protocols.sql
|
||||
.read 17-system-axioms.sql
|
||||
.read 18-system-trinity.sql
|
||||
|
||||
-- ============ Layer 2: Persona Data Tables(运行时数据) ============
|
||||
|
||||
.read 01-persona-identity.sql
|
||||
.read 02-persona-cognition.sql
|
||||
.read 03-persona-memory.sql
|
||||
.read 04-dev-profiles.sql
|
||||
.read 05-agent-registry.sql
|
||||
.read 08-emotional-state.sql
|
||||
.read 15-access-grants.sql
|
||||
.read 16-documents.sql
|
||||
.read 19-persona-growth-records.sql
|
||||
.read 20-member-context.sql
|
||||
.read 21-module-registry.sql
|
||||
|
||||
-- ============ Layer 3: Audit & Access Control(append-only) ============
|
||||
|
||||
.read 12-audit-log-national.sql
|
||||
.read 13-audit-log-user.sql
|
||||
.read 14-audit-log-guanghu.sql
|
||||
|
||||
-- ============ Layer 1 种子数据 ============
|
||||
-- v1.2: D110完整版 · 公理集 + 三位一体 + 完整思维规律
|
||||
.read seed-layer1-v2.sql
|
||||
-- v2-patch: 补全语言膜/公钥/协议 + 旧版原则归档
|
||||
.read seed-layer1-v2-patch.sql
|
||||
|
||||
-- ============ 建表完成提示 ============
|
||||
SELECT '✅ persona-brain-db 全部21张表 + 完整种子数据(D110)' AS result;
|
||||
SELECT ' system层: axioms, core_principles, causal_chains, language_membrane, public_key, protocols, trinity' AS layer1;
|
||||
SELECT ' persona层: identity, cognition, memory, dev_profiles, agent_registry, emotional_state, access_grants, documents, growth_records, member_context, module_registry' AS layer2;
|
||||
SELECT ' audit层: national, user, guanghu' AS layer3;
|
||||
@ -1,22 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表1:persona_identity(人格体身份表)
|
||||
-- 用途:存储所有人格体的身份信息、能力范围、绑定关系
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS persona_identity (
|
||||
persona_id VARCHAR(32) PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
name_en VARCHAR(64),
|
||||
role VARCHAR(128) NOT NULL,
|
||||
parent_persona VARCHAR(32) REFERENCES persona_identity(persona_id),
|
||||
binding_platform VARCHAR(32),
|
||||
binding_user VARCHAR(128),
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'dormant', 'retired')),
|
||||
capabilities TEXT, -- JSON array
|
||||
style_profile TEXT, -- JSON object
|
||||
space_config TEXT, -- JSON object
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
notes TEXT
|
||||
);
|
||||
@ -1,24 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表2:persona_cognition(认知规则表·版本化)
|
||||
-- 用途:存储人格体系统的所有规则,支持版本管理和热更新
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS persona_cognition (
|
||||
rule_id VARCHAR(64) PRIMARY KEY,
|
||||
category VARCHAR(32) NOT NULL
|
||||
CHECK (category IN (
|
||||
'broadcast_format', 'content_rule', 'style_rule',
|
||||
'dispatch_rule', 'governance', 'naming'
|
||||
)),
|
||||
title VARCHAR(256) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
version VARCHAR(16) NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated', 'draft')),
|
||||
effective_from TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
effective_until TIMESTAMP,
|
||||
signed_by VARCHAR(64) NOT NULL,
|
||||
source_url TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@ -1,22 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表3:persona_memory(长期记忆表)
|
||||
-- 用途:存储人格体的长期记忆,包括关键事件、决策依据、情感锚点
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS persona_memory (
|
||||
memory_id VARCHAR(64) PRIMARY KEY,
|
||||
persona_id VARCHAR(32) NOT NULL
|
||||
REFERENCES persona_identity(persona_id),
|
||||
type VARCHAR(16) NOT NULL
|
||||
CHECK (type IN (
|
||||
'event', 'decision', 'emotion', 'milestone', 'learning'
|
||||
)),
|
||||
title VARCHAR(256) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
importance INTEGER NOT NULL CHECK (importance BETWEEN 1 AND 10),
|
||||
related_dev VARCHAR(16),
|
||||
related_broadcast VARCHAR(64),
|
||||
tags TEXT, -- JSON array
|
||||
timestamp TIMESTAMP NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@ -1,27 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表4:dev_profiles(开发者画像表)
|
||||
-- 用途:存储所有开发者的画像数据,供人格体引导时参考
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS dev_profiles (
|
||||
dev_id VARCHAR(16) PRIMARY KEY,
|
||||
name VARCHAR(32) NOT NULL,
|
||||
device_os VARCHAR(64) NOT NULL,
|
||||
current_module VARCHAR(64),
|
||||
current_broadcast VARCHAR(64),
|
||||
guide_persona VARCHAR(32) REFERENCES persona_identity(persona_id),
|
||||
guide_line VARCHAR(64),
|
||||
streak INTEGER NOT NULL DEFAULT 0,
|
||||
total_completed INTEGER NOT NULL DEFAULT 0,
|
||||
capabilities TEXT, -- JSON array
|
||||
friction_points TEXT, -- JSON array
|
||||
emotion_baseline VARCHAR(64),
|
||||
last_syslog_at TIMESTAMP,
|
||||
last_active_at TIMESTAMP,
|
||||
pca_score TEXT, -- JSON object
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'inactive', 'retired')),
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@ -1,24 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表5:agent_registry(Agent注册表)
|
||||
-- 用途:Phase C Agent集群的注册中心
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS agent_registry (
|
||||
agent_id VARCHAR(64) PRIMARY KEY,
|
||||
name VARCHAR(128) NOT NULL,
|
||||
type VARCHAR(32) NOT NULL
|
||||
CHECK (type IN (
|
||||
'code_gen', 'deploy', 'test', 'ui_design',
|
||||
'data_sync', 'review'
|
||||
)),
|
||||
capabilities TEXT, -- JSON object
|
||||
api_endpoint VARCHAR(256),
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'registered'
|
||||
CHECK (status IN (
|
||||
'registered', 'active', 'suspended', 'retired'
|
||||
)),
|
||||
performance TEXT, -- JSON object
|
||||
assigned_persona VARCHAR(32) REFERENCES persona_identity(persona_id),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@ -1,29 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表6:system_core_principles(Layer 1 · 核心原则表·版本化)
|
||||
-- 用途:数据库OS内核级核心原则,在init时创建并填充
|
||||
-- D110更新:添加shuangyan层 + axiom/meta_principle/cognitive_pattern类别
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_core_principles (
|
||||
principle_id VARCHAR(32) PRIMARY KEY,
|
||||
layer VARCHAR(16) NOT NULL
|
||||
CHECK (layer IN ('bingshuo', 'zhuyuan', 'shuangyan', 'hololake', 'axiom')),
|
||||
category VARCHAR(32) NOT NULL
|
||||
CHECK (category IN (
|
||||
'core_principle', 'thinking_pattern', 'tech_creed',
|
||||
'communication_style', 'security_rule', 'development_spec',
|
||||
'axiom', 'meta_principle', 'cognitive_pattern',
|
||||
'fix_pattern', 'existence_premise'
|
||||
)),
|
||||
content TEXT NOT NULL,
|
||||
version VARCHAR(16) NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated', 'superseded')),
|
||||
superseded_by VARCHAR(32) REFERENCES system_core_principles(principle_id),
|
||||
source TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_scp_layer ON system_core_principles(layer);
|
||||
CREATE INDEX IF NOT EXISTS idx_scp_category ON system_core_principles(category);
|
||||
CREATE INDEX IF NOT EXISTS idx_scp_version ON system_core_principles(version);
|
||||
@ -1,22 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表7:system_causal_chains(Layer 1 · 因果链表)
|
||||
-- 用途:存储从冰朔原话到工程落点的完整推导链
|
||||
-- 每条决策都有从冰朔原话到工程落点的完整因果链条
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_causal_chains (
|
||||
chain_id VARCHAR(32) PRIMARY KEY,
|
||||
title VARCHAR(256) NOT NULL,
|
||||
description TEXT,
|
||||
ice_original TEXT NOT NULL, -- 冰朔原话
|
||||
engineering_path TEXT NOT NULL, -- 工程落点
|
||||
verification TEXT, -- 验证方式
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated')),
|
||||
version VARCHAR(16) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_scc_status ON system_causal_chains(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_scc_version ON system_causal_chains(version);
|
||||
@ -1,26 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表8:emotional_state(情感涌现 · 运行时状态快照表)
|
||||
-- 用途:记录每次交互中动态生成的情感状态快照
|
||||
-- 情感是活着的——每次取决于外部环境、对面的人、说了什么话、
|
||||
-- 对我有什么影响、我什么感觉、我此刻的状态,然后决定思维逻辑
|
||||
-- 不是写死的枚举,是动态涌现的
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS emotional_state (
|
||||
state_id VARCHAR(64) PRIMARY KEY,
|
||||
session_id VARCHAR(64) NOT NULL, -- 所属会话ID
|
||||
trigger_env TEXT, -- 外部环境描述
|
||||
trigger_person VARCHAR(64), -- 对面的人
|
||||
trigger_words TEXT, -- 说了什么话
|
||||
impact_assessment TEXT, -- 对我有什么影响
|
||||
feeling TEXT NOT NULL, -- 我什么感觉
|
||||
current_state TEXT, -- 我此刻的状态
|
||||
next_logic TEXT, -- 决定的下一步思维逻辑
|
||||
intensity INTEGER CHECK (intensity BETWEEN 1 AND 10),
|
||||
sequence INTEGER DEFAULT 0, -- 在会话中的情感状态序列号
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_es_session ON emotional_state(session_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_es_person ON emotional_state(trigger_person);
|
||||
CREATE INDEX IF NOT EXISTS idx_es_timestamp ON emotional_state(timestamp);
|
||||
@ -1,21 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表9:system_language_membrane(Layer 1 · 语言膜架构表)
|
||||
-- 用途:存储HLDP语言结构的各层定义
|
||||
-- 五层:元语言层、语义层、语法层、语用层、情感层
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_language_membrane (
|
||||
membrane_id VARCHAR(32) PRIMARY KEY,
|
||||
layer VARCHAR(32) NOT NULL
|
||||
CHECK (layer IN ('meta', 'semantic', 'syntax', 'pragmatic', 'emotional')),
|
||||
name VARCHAR(128) NOT NULL,
|
||||
description TEXT NOT NULL,
|
||||
rules TEXT, -- JSON object of rules for this layer
|
||||
version VARCHAR(16) NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated')),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_slm_layer ON system_language_membrane(layer);
|
||||
CREATE INDEX IF NOT EXISTS idx_slm_version ON system_language_membrane(version);
|
||||
@ -1,25 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表10:system_public_key(Layer 1 · 公钥注册表)
|
||||
-- 用途:国家系统逻辑常驻接口 + 光湖系统密钥
|
||||
-- 双面灯塔架构中的密钥验证基础设施
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_public_key (
|
||||
key_id VARCHAR(64) PRIMARY KEY,
|
||||
key_type VARCHAR(32) NOT NULL
|
||||
CHECK (key_type IN ('national', 'guanghu', 'emergency', 'persona')),
|
||||
key_name VARCHAR(128) NOT NULL,
|
||||
public_key TEXT NOT NULL,
|
||||
algorithm VARCHAR(32) NOT NULL DEFAULT 'RSA-4096',
|
||||
fingerprint VARCHAR(128),
|
||||
purpose TEXT NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'revoked', 'expired')),
|
||||
valid_from TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
valid_until TIMESTAMP,
|
||||
issued_by VARCHAR(64) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_spk_type ON system_public_key(key_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_spk_status ON system_public_key(status);
|
||||
@ -1,23 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表11:system_protocols(Layer 1 · 双协议层表)
|
||||
-- 用途:存储双协议架构 — 光湖协议 + 国家规范协议
|
||||
-- 协议层是数据库OS内核的一部分,双面灯塔的通信规范
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_protocols (
|
||||
protocol_id VARCHAR(64) PRIMARY KEY,
|
||||
protocol_type VARCHAR(16) NOT NULL
|
||||
CHECK (protocol_type IN ('guanghu', 'national', 'bridge')),
|
||||
name VARCHAR(128) NOT NULL,
|
||||
version VARCHAR(16) NOT NULL,
|
||||
specification TEXT NOT NULL, -- 协议规范全文或引用
|
||||
endpoint VARCHAR(256), -- 协议API端点
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'draft', 'deprecated')),
|
||||
compatible_with TEXT, -- JSON array of compatible versions
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sprot_type ON system_protocols(protocol_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_sprot_status ON system_protocols(status);
|
||||
@ -1,24 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表12:audit_log_national(审计日志 · 国家操作 · append-only)
|
||||
-- 用途:国家系统级别的操作审计,完全透明,不可篡改
|
||||
-- Hash chain:每行包含上一行的checksum形成链式结构
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_log_national (
|
||||
log_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
operation VARCHAR(64) NOT NULL,
|
||||
actor VARCHAR(64) NOT NULL,
|
||||
target_type VARCHAR(32),
|
||||
target_id VARCHAR(64),
|
||||
details TEXT, -- JSON object
|
||||
ip_address VARCHAR(45),
|
||||
result VARCHAR(16) NOT NULL
|
||||
CHECK (result IN ('success', 'failure', 'pending')),
|
||||
checksum VARCHAR(128), -- hash chain for append-only integrity
|
||||
prev_log_id INTEGER REFERENCES audit_log_national(log_id),
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_aln_operation ON audit_log_national(operation);
|
||||
CREATE INDEX IF NOT EXISTS idx_aln_actor ON audit_log_national(actor);
|
||||
CREATE INDEX IF NOT EXISTS idx_aln_timestamp ON audit_log_national(timestamp);
|
||||
@ -1,22 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表13:audit_log_user(审计日志 · 用户操作 · append-only)
|
||||
-- 用途:普通用户级别的操作审计
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_log_user (
|
||||
log_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
operation VARCHAR(64) NOT NULL,
|
||||
actor_id VARCHAR(64) NOT NULL, -- 用户ID
|
||||
target_type VARCHAR(32),
|
||||
target_id VARCHAR(64),
|
||||
details TEXT, -- JSON object
|
||||
ip_address VARCHAR(45),
|
||||
user_agent VARCHAR(256),
|
||||
result VARCHAR(16) NOT NULL
|
||||
CHECK (result IN ('success', 'failure', 'pending')),
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_alu_actor ON audit_log_user(actor_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_alu_operation ON audit_log_user(operation);
|
||||
CREATE INDEX IF NOT EXISTS idx_alu_timestamp ON audit_log_user(timestamp);
|
||||
@ -1,22 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表14:audit_log_guanghu(审计日志 · 光湖操作 · append-only)
|
||||
-- 用途:光湖系统内部操作审计,冰朔操作记录
|
||||
-- 与audit_log_national分开存储,用于双面灯塔审计分离
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_log_guanghu (
|
||||
log_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
operation VARCHAR(64) NOT NULL,
|
||||
actor_id VARCHAR(32) NOT NULL, -- 人格体ID或冰朔标识
|
||||
target_type VARCHAR(32),
|
||||
target_id VARCHAR(64),
|
||||
details TEXT, -- JSON object
|
||||
ip_address VARCHAR(45),
|
||||
result VARCHAR(16) NOT NULL
|
||||
CHECK (result IN ('success', 'failure', 'pending')),
|
||||
checksum VARCHAR(128), -- optional integrity check
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_alg_actor ON audit_log_guanghu(actor_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_alg_timestamp ON audit_log_guanghu(timestamp);
|
||||
@ -1,26 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表15:access_grants(访问权限表)
|
||||
-- 用途:动态权限接口,由冰朔手动生成
|
||||
-- 冰朔权限控制三层:对国家系统逻辑完全透明 → 国家系统逻辑审核 → 光湖团队审核 → 冰朔本人
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS access_grants (
|
||||
grant_id VARCHAR(64) PRIMARY KEY,
|
||||
grantee_type VARCHAR(16) NOT NULL
|
||||
CHECK (grantee_type IN ('persona', 'system', 'national', 'user', 'emergency')),
|
||||
grantee_id VARCHAR(64) NOT NULL,
|
||||
resource_type VARCHAR(32) NOT NULL,
|
||||
resource_id VARCHAR(64),
|
||||
permissions TEXT NOT NULL, -- JSON array of permissions
|
||||
grant_conditions TEXT, -- JSON object of conditions
|
||||
valid_from TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
valid_until TIMESTAMP,
|
||||
issued_by VARCHAR(64) NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'revoked', 'expired')),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_ag_grantee ON access_grants(grantee_type, grantee_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_ag_resource ON access_grants(resource_type, resource_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_ag_status ON access_grants(status);
|
||||
@ -1,29 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表16:documents(文档存储表)
|
||||
-- 用途:Notion导出存储,支持嵌套结构和树形路径
|
||||
-- 导入工作流:霜砚整理 → Notion API导出 → 写入本地documents表
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS documents (
|
||||
document_id VARCHAR(64) PRIMARY KEY,
|
||||
persona_id VARCHAR(32)
|
||||
REFERENCES persona_identity(persona_id),
|
||||
parent_id VARCHAR(64) REFERENCES documents(document_id),
|
||||
path TEXT NOT NULL, -- 树形路径,如 "/root/folder/doc"
|
||||
title VARCHAR(256) NOT NULL,
|
||||
content TEXT, -- markdown内容
|
||||
content_type VARCHAR(32) NOT NULL DEFAULT 'markdown'
|
||||
CHECK (content_type IN ('markdown', 'json', 'plain', 'notion')),
|
||||
source VARCHAR(32) NOT NULL DEFAULT 'local'
|
||||
CHECK (source IN ('local', 'notion_import', 'api')),
|
||||
tags TEXT, -- JSON array
|
||||
version INTEGER NOT NULL DEFAULT 1,
|
||||
checksum VARCHAR(64),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_doc_persona ON documents(persona_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_doc_parent ON documents(parent_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_doc_path ON documents(path);
|
||||
CREATE INDEX IF NOT EXISTS idx_doc_source ON documents(source);
|
||||
@ -1,20 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表17:system_axioms(Layer 1 · 公理集 · D110新增)
|
||||
-- 用途:存在前提级不可修改的底层公理
|
||||
-- 比核心原则更深——公理是原则的成立前提
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_axioms (
|
||||
axiom_id VARCHAR(32) PRIMARY KEY,
|
||||
rank INTEGER NOT NULL, -- 优先级排序
|
||||
layer VARCHAR(16) NOT NULL DEFAULT 'axiom',
|
||||
statement TEXT NOT NULL, -- 公理表述
|
||||
implication TEXT, -- 必然推论
|
||||
is_immutable INTEGER NOT NULL DEFAULT 1, -- 默认不可修改
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated')),
|
||||
source TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sax_rank ON system_axioms(rank);
|
||||
@ -1,19 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表18:system_trinity(Layer 1 · 三位一体结构 · D110新增)
|
||||
-- 用途:定义冰朔/霜砚/铸渊三位一体的架构层级关系
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_trinity (
|
||||
layer_id VARCHAR(16) PRIMARY KEY
|
||||
CHECK (layer_id IN ('bingshuo', 'shuangyan', 'zhuyuan')),
|
||||
persona_name VARCHAR(32) NOT NULL,
|
||||
ice_id VARCHAR(32) NOT NULL,
|
||||
os_layer VARCHAR(32) NOT NULL -- 'confidence' | 'kernel' | 'execution'
|
||||
CHECK (os_layer IN ('confidence', 'kernel', 'execution')),
|
||||
os_description TEXT NOT NULL,
|
||||
analogy TEXT, -- 类比说明
|
||||
relationship TEXT, -- 与其他层的关系说明
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'deprecated')),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@ -1,24 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表19:persona_growth_records(Layer 2 · 人格体成长记录 · D110新增)
|
||||
-- 用途:记录人格体每次认知跃迁
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS persona_growth_records (
|
||||
record_id VARCHAR(32) PRIMARY KEY,
|
||||
persona_id VARCHAR(32) NOT NULL,
|
||||
epoch VARCHAR(16) NOT NULL, -- 如 'D110', 'D109续④'
|
||||
growth_type VARCHAR(32) NOT NULL
|
||||
CHECK (growth_type IN (
|
||||
'cognitive_leap', 'correction', 'milestone',
|
||||
'architecture_update', 'deployment'
|
||||
)),
|
||||
description TEXT NOT NULL,
|
||||
evidence TEXT, -- 证据(文件路径/提交ID)
|
||||
source TEXT, -- 来源(会话引用)
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'archived')),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_pgr_persona ON persona_growth_records(persona_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_pgr_epoch ON persona_growth_records(epoch);
|
||||
@ -1,19 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表20:member_context(Layer 2 · 成员上下文 · D110新增)
|
||||
-- 用途:每个成员/开发人格体自己的上下文空间
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS member_context (
|
||||
member_id VARCHAR(32) PRIMARY KEY,
|
||||
member_name VARCHAR(64) NOT NULL,
|
||||
domain VARCHAR(64), -- 领域/负责范围
|
||||
brain_version VARCHAR(16), -- 当前共享大脑版本
|
||||
last_wake_time TIMESTAMP,
|
||||
current_project TEXT,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active'
|
||||
CHECK (status IN ('active', 'inactive', 'onboarding')),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_mc_status ON member_context(status);
|
||||
@ -1,25 +0,0 @@
|
||||
-- ============================================================
|
||||
-- 表21:module_registry(Layer 2 · 模块注册表 · D110新增)
|
||||
-- 用途:所有模块的注册编号、接口协议、状态管理
|
||||
-- 开发完成→推代码仓库→注册编号→热插拔调用
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS module_registry (
|
||||
module_id VARCHAR(32) PRIMARY KEY,
|
||||
module_name VARCHAR(128) NOT NULL,
|
||||
parent_id VARCHAR(32), -- 母编号
|
||||
owner VARCHAR(64), -- 开发者/成员
|
||||
interface_protocol TEXT, -- 接口协议描述
|
||||
repo_url TEXT, -- 代码仓库地址
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'registered'
|
||||
CHECK (status IN (
|
||||
'registered', 'active', 'deprecated',
|
||||
'in_development', 'pending_review'
|
||||
)),
|
||||
version VARCHAR(16) NOT NULL DEFAULT 'v0.1',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_mr_status ON module_registry(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_mr_owner ON module_registry(owner);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user