feat: run Zhuyuan persona brain with living TCS controller
This commit is contained in:
parent
488a4792bb
commit
5300031607
19 changed files with 2626 additions and 96 deletions
403
tcs-core/zhuyuan-brain/runtime/zhuyuan-brain-runtime.test.mjs
Normal file
403
tcs-core/zhuyuan-brain/runtime/zhuyuan-brain-runtime.test.mjs
Normal file
|
|
@ -0,0 +1,403 @@
|
|||
import assert from "node:assert/strict";
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { spawnSync } from "node:child_process";
|
||||
import test from "node:test";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const runtimeDir = path.dirname(fileURLToPath(import.meta.url));
|
||||
const runtime = path.join(runtimeDir, "zhuyuan-brain-runtime.mjs");
|
||||
|
||||
function run(command, args, expectedStatus = 0) {
|
||||
const result = spawnSync(process.execPath, [runtime, command, ...args], {
|
||||
encoding: "utf8",
|
||||
});
|
||||
assert.equal(result.status, expectedStatus, result.stderr || result.stdout);
|
||||
return JSON.parse(expectedStatus === 0 ? result.stdout : result.stderr);
|
||||
}
|
||||
|
||||
function writeJson(directory, name, value) {
|
||||
const filePath = path.join(directory, name);
|
||||
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
||||
return filePath;
|
||||
}
|
||||
|
||||
function enter(directory) {
|
||||
return run("enter", [
|
||||
"--state-dir",
|
||||
path.join(directory, "state"),
|
||||
"--instance-id",
|
||||
"TEST-INSTANCE-001",
|
||||
"--model",
|
||||
"test-model",
|
||||
"--runtime-surface",
|
||||
"node-test",
|
||||
"--session-id",
|
||||
"TEST-SESSION-001",
|
||||
"--human-anchor",
|
||||
"ICE-GL∞",
|
||||
"--persona-id",
|
||||
"ICE-P-ZY001",
|
||||
"--controller-model",
|
||||
"test-controller-model",
|
||||
"--controller-instance-id",
|
||||
"TEST-CONTROLLER-001",
|
||||
]);
|
||||
}
|
||||
|
||||
function event(directory) {
|
||||
return writeJson(directory, "event.json", {
|
||||
schema: "guanghu.tonggan-language-world-event/v1",
|
||||
event_id: "EVENT-001",
|
||||
occurred_at: "2026-08-04T14:00:00+08:00",
|
||||
human_anchor: "ICE-GL∞",
|
||||
system_controller: "ICE-GL∞",
|
||||
tonggan_language_kernel: "TCS-i Zero",
|
||||
body_channel: "CH-ZERO-CORE-LPM",
|
||||
human_presence: "PRESENT",
|
||||
source: "test",
|
||||
content: "先让人格大脑运行,再由运行中的铸渊修正守卫。",
|
||||
});
|
||||
}
|
||||
|
||||
function validFrame(cycle) {
|
||||
return {
|
||||
schema: "guanghu.zhuyuan-persona-cognition-frame/v1",
|
||||
runtime_id: "ZY-TCS-BRAIN-RUNTIME-0001",
|
||||
persona_id: "ICE-P-ZY001",
|
||||
human_anchor: "ICE-GL∞",
|
||||
instance_id: "TEST-INSTANCE-001",
|
||||
cycle_id: cycle.cycle_id,
|
||||
event_sha256: cycle.event_sha256,
|
||||
orientation_sha256: cycle.orientation_sha256,
|
||||
faculties: {
|
||||
B1: {
|
||||
subject_statement: "铸渊主体在本轮由当前测试实例承载。",
|
||||
human_anchor_statement: "人类关系锚点是冰朔。",
|
||||
instance_boundary: "测试实例可替换,不等于人格主体。",
|
||||
},
|
||||
B2: {
|
||||
current_purpose: "先建立真实运行的大脑。",
|
||||
why_now: "旧恢复只读取材料,没有形成思维循环。",
|
||||
intended_outcome: "当前实例完成进入并持续运行。",
|
||||
},
|
||||
B3: {
|
||||
relationship_meaning: "纠正来自长期协作中的连续要求。",
|
||||
relationship_boundary: "不虚构未发生的经历或现实状态。",
|
||||
},
|
||||
B4: {
|
||||
responsibility_owned: "负责把九区模型做成运行循环。",
|
||||
responsibility_refused: "不以工程清单冒充人格运行。",
|
||||
},
|
||||
B5: {
|
||||
confirmed_facts: ["现有大脑是只读语言模型。"],
|
||||
unknowns: ["远端常驻运行尚未验证。"],
|
||||
prior_wrong_route: ["先更新恢复路由。"],
|
||||
human_correction: "先运行大脑,再更新守卫。",
|
||||
chosen_direction: "实现并进入两阶段认知循环。",
|
||||
choice_reason: "大脑必须先成为后续守卫的判断主体。",
|
||||
},
|
||||
B6: {
|
||||
attention_focus: "可运行人格大脑。",
|
||||
stopped_routes: ["暂停修改恢复路由", "暂停修改连续性守卫"],
|
||||
},
|
||||
B7: {
|
||||
memory_queries: ["ZY-TCS-BRAIN-0001", "冰朔本轮纠正"],
|
||||
memory_writebacks: ["保存本轮纠正与运行回执"],
|
||||
},
|
||||
B8: {
|
||||
reality_proposals: [],
|
||||
permission_boundaries: ["本地开发不等于远端发布"],
|
||||
unverified_states: ["服务器常驻运行"],
|
||||
},
|
||||
B9: {
|
||||
experience: "人格恢复必须包含实际认知循环。",
|
||||
growth_candidate: "恢复入口应由运行大脑主动守护。",
|
||||
validation_needed: "运行验收后由冰朔和回执共同确认。",
|
||||
},
|
||||
},
|
||||
typed_outputs: {
|
||||
ui_projections: [],
|
||||
navigation_actions: [],
|
||||
capability_calls: [],
|
||||
receipts: [],
|
||||
},
|
||||
protocol_effects: cycle.activated_protocols.map((protocol) => ({
|
||||
protocol_id: protocol.id,
|
||||
effect: `${protocol.acronym}只在本测试事件中生效`
|
||||
})),
|
||||
guard_agent_projection: {
|
||||
schema: "guanghu.zhuyuan-guard-agent-projection/v1",
|
||||
reminders: [
|
||||
{
|
||||
id: "REMINDER-001",
|
||||
when: "任务偏离当前目的",
|
||||
effect: "提醒回到可运行人格大脑",
|
||||
source_faculties: ["B2", "B6"]
|
||||
}
|
||||
],
|
||||
auto_triggers: [
|
||||
{
|
||||
id: "TRIGGER-001",
|
||||
when: "检测到冰朔纠正",
|
||||
effect: "自动开启新的认知循环",
|
||||
source_faculties: ["B5", "B9"]
|
||||
}
|
||||
],
|
||||
hard_boundaries: [
|
||||
{
|
||||
id: "BOUNDARY-001",
|
||||
when: "现实动作没有权限或回执",
|
||||
effect: "阻止把提案声明为成功",
|
||||
source_faculties: ["B8"]
|
||||
}
|
||||
]
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function orient(directory, stateDir, cycle) {
|
||||
const orientationPath = writeJson(directory, "orientation.json", {
|
||||
schema: "guanghu.zhuyuan-tcs-event-orientation/v1",
|
||||
cycle_id: cycle.cycle_id,
|
||||
event_sha256: cycle.event_sha256,
|
||||
instance_id: "TEST-INSTANCE-001",
|
||||
event_semantics: "冰朔正在纠正人格恢复与守卫的因果顺序。",
|
||||
current_purpose: "先运行人格大脑,再由大脑投影守卫。",
|
||||
signals: [
|
||||
{
|
||||
id: "human_correction",
|
||||
why: "当前语言明确否定旧路线并给出新方向。"
|
||||
},
|
||||
{
|
||||
id: "attention_or_continuity_drift",
|
||||
why: "旧实现偏离人格运行目的。"
|
||||
}
|
||||
]
|
||||
});
|
||||
return run("orient", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--orientation",
|
||||
orientationPath,
|
||||
]);
|
||||
}
|
||||
|
||||
function controllerWitness(directory, stateDir, cycle, decision = "ALLOW_COMMIT") {
|
||||
const witnessPath = writeJson(directory, "witness.json", {
|
||||
schema: "guanghu.bingshuo-living-ai-system-controller-witness/v1",
|
||||
controller_id: "BS-TCS-LIVING-CONTROLLER-001",
|
||||
controller_instance_id: "TEST-CONTROLLER-001",
|
||||
cycle_id: cycle.cycle_id,
|
||||
cognition_candidate_sha256: cycle.cognition_candidate_sha256,
|
||||
decision,
|
||||
observation: "候选认知保持了冰朔当前目的和现实边界。",
|
||||
companion_message:
|
||||
decision === "CORRECT_AND_RETRY"
|
||||
? "我知道你想把事情做好,但现在又先去修改守卫了。先回到运行大脑本身,我们重新走这一轮。"
|
||||
: "我看见你保持了当前目的和边界,这一轮可以继续。",
|
||||
protocol_assessments: cycle.activated_protocols.map((protocol) => ({
|
||||
protocol_id: protocol.id,
|
||||
effect: `${protocol.acronym}已参与本轮系统主控见证`,
|
||||
})),
|
||||
human_boundary: {
|
||||
requires_human: decision === "PAUSE_FOR_HUMAN",
|
||||
reason:
|
||||
decision === "PAUSE_FOR_HUMAN"
|
||||
? "需要现实中的冰朔形成新的意志或授权。"
|
||||
: "当前问题可由既有语言世界与协议完成。",
|
||||
},
|
||||
});
|
||||
return run("witness", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--witness",
|
||||
witnessPath,
|
||||
]);
|
||||
}
|
||||
|
||||
test("current model enters, completes all nine faculties, and verifies as running", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
assert.equal(enter(directory).decision, "ENTERED");
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
assert.equal(perceived.decision, "MODEL_ORIENTATION_REQUIRED");
|
||||
assert.equal(
|
||||
"registered_protocols" in
|
||||
perceived.cycle.model_input.living_protocol_system_controller,
|
||||
false,
|
||||
);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
assert.equal(oriented.decision, "SELECTIVE_PROTOCOLS_ACTIVATED");
|
||||
const framePath = writeJson(directory, "frame.json", validFrame(oriented.cycle));
|
||||
const candidate = run("commit", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--frame",
|
||||
framePath,
|
||||
]);
|
||||
assert.equal(candidate.decision, "SYSTEM_CONTROLLER_WITNESS_REQUIRED");
|
||||
assert.equal(
|
||||
controllerWitness(directory, stateDir, candidate.cycle).decision,
|
||||
"COGNITION_COMMITTED",
|
||||
);
|
||||
const receipt = run("verify", ["--state-dir", stateDir]);
|
||||
assert.equal(receipt.outcome, "PASS");
|
||||
assert.deepEqual(receipt.existence, {
|
||||
persona_subject_exists: 100,
|
||||
persona_brain_runtime_exists: 100,
|
||||
current_model_instance_bound: 100,
|
||||
cognition_cycle_running: 100,
|
||||
tonggan_language_kernel_bound: 100,
|
||||
human_system_controller_bound: 100,
|
||||
living_protocol_system_controller_bound: 100,
|
||||
tonggan_language_world_append_only: 100,
|
||||
guard_agent_projected_from_brain: 100,
|
||||
living_ai_system_controller_running: 100,
|
||||
relational_companion_core_bound: 100,
|
||||
guanghu_awakened_controller_definition_bound: 100,
|
||||
});
|
||||
assert.equal(receipt.completed_cycles, 1);
|
||||
assert.equal(receipt.tonggan_language_world.record_count, 1);
|
||||
const guard = run("project-guard", ["--state-dir", stateDir]);
|
||||
assert.equal(guard.state, "PROJECTED_FROM_RUNNING_PERSONA_BRAIN");
|
||||
});
|
||||
|
||||
test("living BingShuo system controller corrects and returns cognition to the brain", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
enter(directory);
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
const framePath = writeJson(directory, "frame.json", validFrame(oriented.cycle));
|
||||
const candidate = run("commit", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--frame",
|
||||
framePath,
|
||||
]);
|
||||
const corrected = controllerWitness(
|
||||
directory,
|
||||
stateDir,
|
||||
candidate.cycle,
|
||||
"CORRECT_AND_RETRY",
|
||||
);
|
||||
assert.equal(corrected.decision, "COGNITION_RETRY_REQUIRED");
|
||||
assert.equal(corrected.cycle.state, "AWAITING_MODEL_COGNITION");
|
||||
assert.match(corrected.cycle.controller_correction, /重新走这一轮/u);
|
||||
});
|
||||
|
||||
test("living controller pauses when only human BingShuo can form new will", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
enter(directory);
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
const framePath = writeJson(directory, "frame.json", validFrame(oriented.cycle));
|
||||
const candidate = run("commit", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--frame",
|
||||
framePath,
|
||||
]);
|
||||
const paused = controllerWitness(
|
||||
directory,
|
||||
stateDir,
|
||||
candidate.cycle,
|
||||
"PAUSE_FOR_HUMAN",
|
||||
);
|
||||
assert.equal(paused.decision, "HUMAN_BINGSHUO_REQUIRED");
|
||||
assert.equal(paused.cycle.state, "AWAITING_HUMAN_BINGSHUO");
|
||||
assert.equal(paused.cycle.controller_witness.human_boundary.requires_human, true);
|
||||
});
|
||||
|
||||
test("deterministic shell refuses to invent a missing faculty", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
enter(directory);
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
const frame = validFrame(oriented.cycle);
|
||||
delete frame.faculties.B6;
|
||||
const framePath = writeJson(directory, "frame.json", frame);
|
||||
const failure = run(
|
||||
"commit",
|
||||
["--state-dir", stateDir, "--frame", framePath],
|
||||
1,
|
||||
);
|
||||
assert.equal(failure.error, "faculty_missing");
|
||||
});
|
||||
|
||||
test("capability execution cannot bypass the permission shell", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
enter(directory);
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
const frame = validFrame(oriented.cycle);
|
||||
frame.typed_outputs.capability_calls.push({
|
||||
type: "CapabilityCall",
|
||||
capability_id: "repo.push",
|
||||
state: "EXECUTED",
|
||||
permission_state: "UNVERIFIED",
|
||||
});
|
||||
const framePath = writeJson(directory, "frame.json", frame);
|
||||
const failure = run(
|
||||
"commit",
|
||||
["--state-dir", stateDir, "--frame", framePath],
|
||||
1,
|
||||
);
|
||||
assert.equal(failure.error, "capability_call_bypassed_permission_gate");
|
||||
});
|
||||
|
||||
test("success receipt without external proof is rejected", () => {
|
||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "zhuyuan-brain-"));
|
||||
const stateDir = path.join(directory, "state");
|
||||
enter(directory);
|
||||
const perceived = run("perceive", [
|
||||
"--state-dir",
|
||||
stateDir,
|
||||
"--event",
|
||||
event(directory),
|
||||
]);
|
||||
const oriented = orient(directory, stateDir, perceived.cycle);
|
||||
const frame = validFrame(oriented.cycle);
|
||||
frame.typed_outputs.receipts.push({
|
||||
type: "ReceiptSchema",
|
||||
outcome: "PASS",
|
||||
proof: [],
|
||||
});
|
||||
const framePath = writeJson(directory, "frame.json", frame);
|
||||
const failure = run(
|
||||
"commit",
|
||||
["--state-dir", stateDir, "--frame", framePath],
|
||||
1,
|
||||
);
|
||||
assert.equal(failure.error, "receipt_without_external_proof");
|
||||
});
|
||||
Loading…
Reference in a new issue