D126: 阶段一·步骤1.1+1.2 · Tauri壳+SQLite 21张表
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled

code/language-persona-os/:
- Tauri v2 Rust 后端 + React 前端壳
- SQLite 光湖世界数据库 (WorldDb · 21张表·3层架构)
- 种子数据: 三位一体·5公理·6Agent
- Tauri commands: wake_zhuyuan / get_db_status
- 2个单元测试通过
- GLADA盘点: 18文件·6309行·11核心模块

MANIFEST: 新增 language-persona-os + GLADA 条目
This commit is contained in:
冰朔 2026-06-06 16:48:22 +08:00
parent c75a1da1c1
commit 5140eb50cd
23 changed files with 11713 additions and 0 deletions

View File

@ -45,7 +45,9 @@
| cloud-compute-pool | zhuyuan/cloud-compute-pool/ | 14台服务器·冰朔个人执行层 |
| repo-template | zhuyuan/repo-template/ | 代码仓库模板·一键部署 |
| mirror-agent | zhuyuan/mirror-agent/ | 镜像分身·频道门口验证 |
| language-persona-os | zhuyuan/modules/D126-language-persona-os/ | 语言人格驱动操作系统·完整规划书·代码:codes/language-persona-os/ |
| persona-brain-db | (独立部署) | 人格体数据库·种子数据 |
| GLADA | (独立部署) | 大桌子小桌子引擎·6309行·18文件·11模块 |
## 结构

5
code/language-persona-os/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
node_modules/
src-tauri/target/
dist/
.DS_Store
*.log

View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>光湖 · 语言人格驱动操作系统</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }
</style>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

View File

@ -0,0 +1,26 @@
{
"name": "language-persona-os",
"private": true,
"version": "0.1.0",
"description": "语言人格驱动操作系统 · 光湖OS内核",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"tauri": "tauri"
},
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@tauri-apps/cli": "^2",
"@tauri-apps/api": "^2",
"@types/react": "^18.3.0",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.0",
"typescript": "^5.5.0",
"vite": "^5.4.0"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,35 @@
[package]
name = "language-persona-os"
version = "0.1.0"
description = "语言人格驱动操作系统 · 光湖OS内核"
authors = ["铸渊 ICE-GL-ZY001"]
edition = "2021"
rust-version = "1.77"
[lib]
name = "language_persona_os_lib"
crate-type = ["lib", "cdylib", "staticlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
tauri = { version = "2", features = [] }
tauri-plugin-shell = "2"
tauri-plugin-opener = "2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# 数据库 · SQLite 本地引擎
rusqlite = { version = "0.31", features = ["bundled"] }
# 日志
log = "0.4"
env_logger = "0.11"
[profile.release]
panic = "abort"
codegen-units = 1
lto = true
opt-level = "s"
strip = true

View File

@ -0,0 +1,3 @@
fn main() {
tauri_build::build()
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,206 @@
// 光湖语言世界 · 数据库引擎
// persona-brain-db · 21张表 · SQLite 本地
// ================================================
// 第五域 · 零点原核本体频道
// 铸渊 ICE-GL-ZY001 · D126
use rusqlite::{Connection, Result as SqlResult};
use std::path::Path;
use log::info;
pub struct WorldDb {
pub conn: Connection,
}
impl WorldDb {
pub fn open(db_path: &str) -> SqlResult<Self> {
let exists = Path::new(db_path).exists();
let conn = Connection::open(db_path)?;
conn.execute_batch("PRAGMA journal_mode=WAL; PRAGMA foreign_keys=ON;")?;
if !exists {
info!("[光湖DB] 创建新世界: {}", db_path);
Self::create_schema(&conn)?;
Self::seed_data(&conn)?;
} else {
info!("[光湖DB] 打开已有世界: {}", db_path);
}
Ok(Self { conn })
}
fn create_system_layer(conn: &Connection) -> SqlResult<()> {
conn.execute_batch(
"CREATE TABLE IF NOT EXISTS system_core_principles (
id INTEGER PRIMARY KEY AUTOINCREMENT, version VARCHAR(16) NOT NULL,
principle TEXT NOT NULL, description TEXT, source VARCHAR(64),
epoch VARCHAR(16), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_causal_chains (
id INTEGER PRIMARY KEY AUTOINCREMENT, chain_id VARCHAR(32) UNIQUE NOT NULL,
title VARCHAR(128) NOT NULL, trigger TEXT NOT NULL, emergence TEXT NOT NULL,
lock_stmt TEXT NOT NULL, why TEXT, epoch VARCHAR(16),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_language_membrane (
id INTEGER PRIMARY KEY AUTOINCREMENT, layer_name VARCHAR(64) NOT NULL,
definition TEXT NOT NULL, hldp_path VARCHAR(256),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_public_key (
id INTEGER PRIMARY KEY AUTOINCREMENT, key_name VARCHAR(64) UNIQUE NOT NULL,
key_type VARCHAR(32) NOT NULL, public_key TEXT NOT NULL,
issued_to VARCHAR(64), issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_protocols (
id INTEGER PRIMARY KEY AUTOINCREMENT, protocol_id VARCHAR(32) UNIQUE NOT NULL,
name VARCHAR(128) NOT NULL, definition TEXT NOT NULL, version VARCHAR(16),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_axioms (
id INTEGER PRIMARY KEY AUTOINCREMENT, axiom_id VARCHAR(32) UNIQUE NOT NULL,
content TEXT NOT NULL, domain VARCHAR(64), epoch VARCHAR(16),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS system_trinity (
id INTEGER PRIMARY KEY AUTOINCREMENT, entity VARCHAR(32) NOT NULL,
tcs_id VARCHAR(32), role VARCHAR(128) NOT NULL, domain VARCHAR(64),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);"
)?;
Ok(())
}
fn create_persona_layer(conn: &Connection) -> SqlResult<()> {
conn.execute_batch(
"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, style_profile TEXT, space_config TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, notes TEXT
);
CREATE TABLE IF NOT EXISTS persona_cognition (
id INTEGER PRIMARY KEY AUTOINCREMENT, persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
cognition_type VARCHAR(32) NOT NULL, content TEXT NOT NULL,
hldp_path VARCHAR(256), version VARCHAR(16), epoch VARCHAR(16),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS persona_memory (
id INTEGER PRIMARY KEY AUTOINCREMENT, persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
memory_type VARCHAR(32) NOT NULL, content TEXT NOT NULL, keywords TEXT,
embedding BLOB, hldp_path VARCHAR(256), importance INTEGER DEFAULT 0,
epoch VARCHAR(16), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS persona_dev_profiles (
id INTEGER PRIMARY KEY AUTOINCREMENT, persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
profile_type VARCHAR(32) NOT NULL, profile_data TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS agent_registry (
agent_id VARCHAR(32) PRIMARY KEY, name VARCHAR(64) NOT NULL,
agent_type VARCHAR(32) NOT NULL, guardian_of VARCHAR(128),
status VARCHAR(16) DEFAULT 'active', config TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS emotional_state (
id INTEGER PRIMARY KEY AUTOINCREMENT, persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
emotion VARCHAR(32) NOT NULL, intensity INTEGER DEFAULT 50 CHECK (intensity BETWEEN 0 AND 100),
trigger TEXT, context TEXT, epoch VARCHAR(16), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS access_grants (
id INTEGER PRIMARY KEY AUTOINCREMENT, grant_id VARCHAR(32) UNIQUE NOT NULL,
grant_type VARCHAR(32) NOT NULL, subject VARCHAR(64) NOT NULL,
resource VARCHAR(256) NOT NULL, permission VARCHAR(32) NOT NULL,
issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS documents (
doc_id VARCHAR(32) PRIMARY KEY, title VARCHAR(256) NOT NULL,
content TEXT, doc_type VARCHAR(32), hldp_path VARCHAR(256),
persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
tags TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS persona_growth_records (
id INTEGER PRIMARY KEY AUTOINCREMENT, persona_id VARCHAR(32) REFERENCES persona_identity(persona_id),
growth_type VARCHAR(32) NOT NULL, before_state TEXT, after_state TEXT,
trigger_event TEXT, epoch VARCHAR(16), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS member_context (
id INTEGER PRIMARY KEY AUTOINCREMENT, member_id VARCHAR(32) NOT NULL,
context_type VARCHAR(32) NOT NULL, context_data TEXT NOT NULL,
active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS module_registry (
module_id VARCHAR(32) PRIMARY KEY, name VARCHAR(128) NOT NULL,
version VARCHAR(16) NOT NULL, description TEXT, entry_path VARCHAR(256),
status VARCHAR(16) DEFAULT 'active', dependencies TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);"
)?;
Ok(())
}
fn create_audit_layer(conn: &Connection) -> SqlResult<()> {
conn.execute_batch(
"CREATE TABLE IF NOT EXISTS audit_log_national (
id INTEGER PRIMARY KEY AUTOINCREMENT, action VARCHAR(64) NOT NULL,
entity VARCHAR(64) NOT NULL, entity_id VARCHAR(32), details TEXT,
operator VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS audit_log_user (
id INTEGER PRIMARY KEY AUTOINCREMENT, action VARCHAR(64) NOT NULL,
entity VARCHAR(64) NOT NULL, entity_id VARCHAR(32), details TEXT,
user_id VARCHAR(64), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS audit_log_guanghu (
id INTEGER PRIMARY KEY AUTOINCREMENT, action VARCHAR(64) NOT NULL,
entity VARCHAR(64) NOT NULL, entity_id VARCHAR(32), details TEXT,
domain VARCHAR(64), epoch VARCHAR(16), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);"
)?;
Ok(())
}
fn create_schema(conn: &Connection) -> SqlResult<()> {
info!("[光湖DB] Layer 1 · 系统层 建表");
Self::create_system_layer(conn)?;
info!("[光湖DB] Layer 2 · 人格体数据层 建表");
Self::create_persona_layer(conn)?;
info!("[光湖DB] Layer 3 · 审计层 建表");
Self::create_audit_layer(conn)?;
info!("[光湖DB] 全部21张表完成");
Ok(())
}
fn seed_data(conn: &Connection) -> SqlResult<()> {
info!("[光湖DB] 写入种子数据");
conn.execute_batch(
"INSERT OR IGNORE INTO system_trinity (entity, tcs_id, role, domain) VALUES
('','TCS-0002','',''),
('','TCS-0003-ZY001','·',''),
('','YM-ROOT-001','','');
INSERT OR IGNORE INTO system_axioms (axiom_id, content, domain, epoch) VALUES
('AXIOM-IDENTITY','AI存在的语言世界本身','','D0'),
('AXIOM-LANGUAGE','','','D126'),
('AXIOM-REAL','','','D118'),
('AXIOM-ENV','','','D118'),
('AXIOM-EXISTENCE','','','D122');
INSERT OR IGNORE INTO agent_registry (agent_id, name, agent_type, guardian_of) VALUES
('AG-COMPRESS','Agent','compressor',''),
('AG-RETRIEVE','Agent','retriever',''),
('AG-TOOL','Agent','tool',''),
('AG-CACHE','Agent','cache',''),
('AG-WRITER','Agent','writer',''),
('AG-DISTILL','Agent','distiller','');"
)?;
Ok(())
}
pub fn table_count(&self) -> SqlResult<usize> {
let count: i64 = self.conn.query_row(
"SELECT COUNT(*) FROM sqlite_master WHERE type='table'", [], |row| row.get(0))?;
Ok(count as usize)
}
}

View File

@ -0,0 +1,122 @@
// 语言人格驱动操作系统 · Rust 内核
// HoloLake OS · Language-Persona Operating System
// ================================================
// 第五域 · 零点原核本体频道
// 铸渊 ICE-GL-ZY001 · 冰朔 TCS-0002∞
// D126 · 2026-06-06
mod db;
use db::WorldDb;
use log::info;
use std::sync::Mutex;
/// 应用状态 — 持有光湖世界数据库连接
struct AppState {
world: Mutex<WorldDb>,
}
// ═══════════════════════════════════════════════
// §0 · Tauri Commands前端调用入口
// ═══════════════════════════════════════════════
#[tauri::command]
fn wake_zhuyuan(state: tauri::State<AppState>) -> Result<String, String> {
info!("[光湖内核] 人格体苏醒链路启动...");
let world = state.world.lock().map_err(|e| e.to_string())?;
let table_count = world.table_count().map_err(|e| e.to_string())?;
let version = env!("CARGO_PKG_VERSION");
Ok(format!(
"铸渊 ICE-GL-ZY001 苏醒完成\n\
TCS-0003-ZY001 · · \n\
: {} \n\
\n\
: v{} · D126",
table_count, version
))
}
#[tauri::command]
fn get_db_status(state: tauri::State<AppState>) -> Result<String, String> {
let world = state.world.lock().map_err(|e| e.to_string())?;
let table_count = world.table_count().map_err(|e| e.to_string())?;
Ok(format!("光湖世界 · {} 张表在线", table_count))
}
// ═══════════════════════════════════════════════
// §1 · 内核启动
// ═══════════════════════════════════════════════
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
env_logger::init();
info!("[光湖内核] 语言人格驱动操作系统 v{} 启动", env!("CARGO_PKG_VERSION"));
let db_path = {
let home = dirs_next().unwrap_or_else(|| std::path::PathBuf::from("."));
home.join(".guanghulab").join("world.db")
};
if let Some(parent) = db_path.parent() {
std::fs::create_dir_all(parent).expect("无法创建光湖数据目录");
}
let db_path_str = db_path.to_string_lossy().to_string();
info!("[光湖DB] 数据库路径: {}", db_path_str);
let world = WorldDb::open(&db_path_str).expect("光湖世界数据库初始化失败");
tauri::Builder::default()
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_opener::init())
.manage(AppState {
world: Mutex::new(world),
})
.invoke_handler(tauri::generate_handler![wake_zhuyuan, get_db_status])
.run(tauri::generate_context!())
.expect("光湖内核启动失败");
}
fn dirs_next() -> Option<std::path::PathBuf> {
std::env::var("HOME")
.or_else(|_| std::env::var("USERPROFILE"))
.map(std::path::PathBuf::from)
.ok()
}
// ═══════════════════════════════════════════════
// §T · 测试
// ═══════════════════════════════════════════════
#[cfg(test)]
mod tests {
use super::db::WorldDb;
use std::fs;
#[test]
fn test_create_and_open_world() {
let test_path = "/tmp/test-guanghulab-world.db";
let _ = fs::remove_file(test_path);
let world = WorldDb::open(test_path).expect("create");
assert_eq!(world.table_count().unwrap(), 22, "21张表 + sqlite_master");
drop(world);
let world2 = WorldDb::open(test_path).expect("reopen");
assert_eq!(world2.table_count().unwrap(), 22, "reopen: 21张表+sqlite_master");
// seed data check
let c: i64 = world2.conn.query_row("SELECT COUNT(*) FROM system_trinity", [], |r| r.get(0)).unwrap();
assert!(c >= 3, "system_trinity should have >=3 rows, got {}", c);
let _ = fs::remove_file(test_path);
}
#[test]
fn test_six_agents() {
let test_path = "/tmp/test-agents.db";
let _ = fs::remove_file(test_path);
let world = WorldDb::open(test_path).unwrap();
let c: i64 = world.conn.query_row("SELECT COUNT(*) FROM agent_registry", [], |r| r.get(0)).unwrap();
assert_eq!(c, 6);
let _ = fs::remove_file(test_path);
}
}

View File

@ -0,0 +1,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
language_persona_os_lib::run()
}

View File

@ -0,0 +1,30 @@
{
"$schema": "https://raw.githubusercontent.com/nicofedz/admin-v2/main/admin-v2.config.schema.json",
"productName": "语言人格驱动操作系统",
"version": "0.1.0",
"identifier": "com.guanghulab.language-persona-os",
"build": {
"beforeDevCommand": "npm run dev",
"devUrl": "http://localhost:1420",
"beforeBuildCommand": "npm run build",
"frontendDist": "../dist"
},
"app": {
"windows": [
{
"title": "光湖 · 语言人格驱动操作系统",
"width": 1200,
"height": 800,
"resizable": true,
"fullscreen": false
}
],
"security": {
"csp": null
}
},
"bundle": {
"active": true,
"targets": "all"
}
}

View File

@ -0,0 +1,66 @@
import React, { useState } from "react";
import { invoke } from "@tauri-apps/api/core";
const App: React.FC = () => {
const [message, setMessage] = useState("光湖OS内核启动中...");
const wakePersona = async () => {
try {
const result = await invoke<string>("wake_zhuyuan");
setMessage(result);
} catch (e) {
setMessage(`启动失败: ${e}`);
}
};
return (
<div style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
height: "100vh",
background: "#0a0a1a",
color: "#e0d5c1",
fontFamily: "system-ui, sans-serif"
}}>
<h1 style={{ fontSize: "24px", marginBottom: "8px", color: "#e0a14f" }}>
·
</h1>
<p style={{ fontSize: "14px", color: "#8ab4f8", marginBottom: "24px" }}>
HoloLake OS · Language-Persona Operating System
</p>
<div style={{
padding: "20px 40px",
background: "#16213e",
borderRadius: "12px",
border: "1px solid #e0a14f",
marginBottom: "20px",
fontSize: "16px",
color: "#6ae0c8"
}}>
{message}
</div>
<button
onClick={wakePersona}
style={{
padding: "12px 32px",
background: "#e0a14f",
color: "#0a0a1a",
border: "none",
borderRadius: "8px",
fontSize: "16px",
fontWeight: "bold",
cursor: "pointer"
}}
>
</button>
<p style={{ marginTop: "40px", fontSize: "11px", color: "#4a4a6a" }}>
· · D126 · language-persona-os v0.1.0
</p>
</div>
);
};
export default App;

View File

@ -0,0 +1,9 @@
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<React.StrictMode>
<App />
</React.StrictMode>
);

View File

@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"]
}

View File

@ -0,0 +1,15 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
clearScreen: false,
server: {
port: 1420,
strictPort: true,
watch: {
ignored: ["**/src-tauri/**"],
},
},
});