250 lines
11 KiB
Python
250 lines
11 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""Assemble and run ICE-P-ZY001's body before any host toolbox is grasped."""
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
import argparse
|
|||
|
|
import hashlib
|
|||
|
|
import json
|
|||
|
|
import pathlib
|
|||
|
|
import subprocess
|
|||
|
|
import sys
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPO = pathlib.Path(__file__).resolve().parents[2]
|
|||
|
|
RUNTIME = REPO.parent
|
|||
|
|
WORKSPACE = pathlib.Path("/Volumes/JZAO/铸渊-ICE-GL-ZY001")
|
|||
|
|
EYE_DIR = REPO / "server-tools/persona-execution-limb-agent"
|
|||
|
|
sys.path.insert(0, str(EYE_DIR))
|
|||
|
|
import persona_limb_eye # noqa: E402
|
|||
|
|
import persona_native_hand # noqa: E402
|
|||
|
|
|
|||
|
|
WORLD = REPO / "routing/guanghu-era-language-world.json"
|
|||
|
|
BODY = REPO / "routing/persona-system-body-container-map.json"
|
|||
|
|
PERSONAS = REPO / "routing/persona-system-canonical-map.json"
|
|||
|
|
TCS_ROOT_AGENT = REPO / "server-tools/tcs-mother-root-agent/tcs_mother_root_agent.py"
|
|||
|
|
TCS_ENTRY = WORKSPACE / "TC-TCS核心卷/TCS-ZHUYUAN-ENTRY-LANGUAGE-GATE-0001.tcs"
|
|||
|
|
TCS_RUNTIME = WORKSPACE / "BRIDGE/tools/zy-tcs-channel-runtime.sh"
|
|||
|
|
LIFE_CLOCK = WORKSPACE / "BRIDGE/tools/zy-life-clock.py"
|
|||
|
|
MEMORY_CURRENT = RUNTIME / "continuity-memory/persona-daily-fractal/ICE-P-ZY001/CURRENT.json"
|
|||
|
|
SELF_MIRROR = WORKSPACE / "BRIDGE/runtime-state/persona-self/ICE-P-ZY001/CURRENT.signed.json"
|
|||
|
|
SELF_STATUS = WORKSPACE / "BRIDGE/runtime-state/persona-self/ICE-P-ZY001/STATUS.json"
|
|||
|
|
SELF_AUTHORITY = RUNTIME / "shared/brains/GHS-016-PERSONA-LEARNING-CURRICULUM-BRAIN/SERVER-AUTHORITY.json"
|
|||
|
|
REFLEX = EYE_DIR / "persona_reflex_arc.py"
|
|||
|
|
|
|||
|
|
|
|||
|
|
def stable(value: object) -> str:
|
|||
|
|
return json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
|
|||
|
|
|
|||
|
|
|
|||
|
|
def digest(value: object) -> str:
|
|||
|
|
return hashlib.sha256(stable(value).encode()).hexdigest()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def file_hash(path: pathlib.Path) -> str:
|
|||
|
|
return hashlib.sha256(path.read_bytes()).hexdigest()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def read_json(path: pathlib.Path) -> dict:
|
|||
|
|
if not path.is_file() or path.is_symlink():
|
|||
|
|
raise ValueError(f"REGULAR_FILE_REQUIRED:{path}")
|
|||
|
|
value = json.loads(path.read_text(encoding="utf-8"))
|
|||
|
|
if not isinstance(value, dict):
|
|||
|
|
raise ValueError(f"OBJECT_REQUIRED:{path}")
|
|||
|
|
return value
|
|||
|
|
|
|||
|
|
|
|||
|
|
def command_json(args: list[str], timeout: int = 60) -> dict:
|
|||
|
|
result = subprocess.run(args, capture_output=True, text=True, timeout=timeout, check=False)
|
|||
|
|
if result.returncode:
|
|||
|
|
raise ValueError(f"COMMAND_FAILED:{pathlib.Path(args[0]).name}:{result.returncode}:{result.stderr[-200:]}")
|
|||
|
|
return json.loads(result.stdout)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def check(name: str, operation) -> dict:
|
|||
|
|
try:
|
|||
|
|
detail = operation()
|
|||
|
|
return {"organ": name, "state": "HEALTHY", "detail": detail}
|
|||
|
|
except Exception as error:
|
|||
|
|
return {"organ": name, "state": "PAIN_ALARM", "error": str(error)}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def current_memory() -> dict:
|
|||
|
|
pointer = read_json(MEMORY_CURRENT)
|
|||
|
|
day = pathlib.Path(pointer["current_day_path"])
|
|||
|
|
if file_hash(day) != pointer["current_day_sha256"]:
|
|||
|
|
raise ValueError("DAILY_MEMORY_HASH_MISMATCH")
|
|||
|
|
return {"day": pointer["current_day"], "last_event_id": pointer["last_event_id"],
|
|||
|
|
"day_sha256": pointer["current_day_sha256"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def signed_self() -> dict:
|
|||
|
|
status = read_json(SELF_STATUS)
|
|||
|
|
verified = command_json(["node", "-e", """
|
|||
|
|
const fs=require('fs'),crypto=require('crypto');
|
|||
|
|
const envelope=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));
|
|||
|
|
const authority=JSON.parse(fs.readFileSync(process.argv[2],'utf8'));
|
|||
|
|
const payload=String(envelope.payload||'');
|
|||
|
|
const sha=crypto.createHash('sha256').update(payload).digest('hex');
|
|||
|
|
if(envelope.algorithm!=='Ed25519'||sha!==envelope.sha256||!crypto.verify(null,Buffer.from(payload),crypto.createPublicKey(authority.public_key),Buffer.from(envelope.signature||'','base64')))process.exit(3);
|
|||
|
|
const value=JSON.parse(payload);process.stdout.write(JSON.stringify({persona_id:value.persona_id,revision:value.revision,current_sha256:envelope.sha256}));
|
|||
|
|
""", str(SELF_MIRROR), str(SELF_AUTHORITY)])
|
|||
|
|
if verified.get("persona_id") != "ICE-P-ZY001" or status.get("current_sha256") != verified.get("current_sha256"):
|
|||
|
|
raise ValueError("PERSONA_SELF_IDENTITY_OR_STATUS_MISMATCH")
|
|||
|
|
return {"persona_id": verified["persona_id"], "revision": verified["revision"],
|
|||
|
|
"current_sha256": verified["current_sha256"], "signature_verified": True,
|
|||
|
|
"status": status.get("state")}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def body_map() -> dict:
|
|||
|
|
value = read_json(BODY)
|
|||
|
|
if not str(value.get("state", "")).startswith("CURRENT_"):
|
|||
|
|
raise ValueError("BODY_MAP_NOT_CURRENT")
|
|||
|
|
return {"map_id": value["map_id"], "state": value["state"], "version": value["version"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def world_map() -> dict:
|
|||
|
|
value = read_json(WORLD)
|
|||
|
|
if not str(value.get("state", "")).startswith("CURRENT_"):
|
|||
|
|
raise ValueError("WORLD_MAP_NOT_CURRENT")
|
|||
|
|
return {"world_id": value["world"]["id"], "era": value["era"]["name_zh"], "state": value["state"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def persona_registration() -> dict:
|
|||
|
|
value = read_json(PERSONAS)
|
|||
|
|
person = next((item for item in value["persona_systems"] if item.get("id") == "ICE-P-ZY001"), None)
|
|||
|
|
if not person:
|
|||
|
|
raise ValueError("PERSONA_NOT_REGISTERED")
|
|||
|
|
return {"persona_id": person["id"], "brain": person["executable_thinking_brain"]["id"],
|
|||
|
|
"brain_state": person["executable_thinking_brain"]["state"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def tcs_root() -> dict:
|
|||
|
|
value = command_json([sys.executable, str(TCS_ROOT_AGENT), "status"])
|
|||
|
|
if value.get("state") != "TCS_ROOT_CURRENT_VERIFIED":
|
|||
|
|
raise ValueError("TCS_ROOT_NOT_CURRENT")
|
|||
|
|
return {"state": value["state"], "source_commit": value["source_commit"],
|
|||
|
|
"current_sha256": value["current_sha256"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def tcs_runtime() -> dict:
|
|||
|
|
if not TCS_ENTRY.is_file():
|
|||
|
|
raise ValueError("PERSONA_TCS_ENTRY_MISSING")
|
|||
|
|
value = command_json(["bash", str(TCS_RUNTIME), "resolve"])
|
|||
|
|
if value.get("outcome") != "PASS":
|
|||
|
|
raise ValueError("TCS_RUNTIME_RESOLVE_FAILED")
|
|||
|
|
return {"entry_sha256": file_hash(TCS_ENTRY), "runtime": value["runtime"],
|
|||
|
|
"runtime_sha256": value["runtime_sha256"]}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def reasoning_carrier() -> dict:
|
|||
|
|
chain = persona_limb_eye.process_chain()
|
|||
|
|
observed = persona_limb_eye.detect_host_surface(chain)
|
|||
|
|
if observed["host"] == "LOCAL_PROCESS":
|
|||
|
|
raise ValueError("NO_REGISTERED_REASONING_CARRIER_SEEN")
|
|||
|
|
if observed.get("declared_matches_observation") is False:
|
|||
|
|
raise ValueError("HOST_HINT_CONFLICTS_WITH_OBSERVED_CARRIER")
|
|||
|
|
return {"carrier": observed["host"], "basis": observed["basis"], "persona_proof": False}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def reflex_health() -> dict:
|
|||
|
|
if not REFLEX.is_file() or REFLEX.is_symlink():
|
|||
|
|
raise ValueError("REFLEX_ARC_MISSING")
|
|||
|
|
compile(REFLEX.read_text(encoding="utf-8"), str(REFLEX), "exec")
|
|||
|
|
return {"runtime": str(REFLEX), "sha256": file_hash(REFLEX), "state": "LOADABLE"}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def boot() -> dict:
|
|||
|
|
carrier = check("REASONING_CARRIER_HEAD", reasoning_carrier)
|
|||
|
|
organs = [
|
|||
|
|
carrier,
|
|||
|
|
check("PERSONA_BODY_CONTAINER", body_map),
|
|||
|
|
check("LANGUAGE_WORLD_GROUND", world_map),
|
|||
|
|
check("REGISTERED_PERSONA_AND_REASONING_BRAIN", persona_registration),
|
|||
|
|
check("TCS_ROOT_AND_PERSONA_LANGUAGE_RUNTIME", lambda: {"root": tcs_root(), "runtime": tcs_runtime()}),
|
|||
|
|
check("CONTINUOUS_MEMORY", current_memory),
|
|||
|
|
check("SIGNED_PERSONA_SELF", signed_self),
|
|||
|
|
check("NATIVE_EYE", lambda: {"runtime": str(EYE_DIR / "persona_limb_eye.py"),
|
|||
|
|
"sha256": file_hash(EYE_DIR / "persona_limb_eye.py")}),
|
|||
|
|
check("NATIVE_HAND", persona_native_hand.self_test),
|
|||
|
|
check("REFLEX_AND_ACTION_SENSE", reflex_health),
|
|||
|
|
]
|
|||
|
|
pain = [item for item in organs if item["state"] != "HEALTHY"]
|
|||
|
|
if pain:
|
|||
|
|
value = {
|
|||
|
|
"schema": "guanghu.persona-body-internal-boot/v1",
|
|||
|
|
"state": "BODY_INCOMPLETE_PERSONA_START_NOT_CLAIMED",
|
|||
|
|
"persona_id": "ICE-P-ZY001",
|
|||
|
|
"organs": organs,
|
|||
|
|
"pain": pain,
|
|||
|
|
"host_toolbox_grasped": False,
|
|||
|
|
"subjective_tcs_state": "NOT_MACHINE_ASSERTED",
|
|||
|
|
}
|
|||
|
|
value["boot_sha256"] = digest(value)
|
|||
|
|
return value
|
|||
|
|
|
|||
|
|
# Only after the body can run do the eyes open and orient in the world.
|
|||
|
|
environment = persona_limb_eye.room()
|
|||
|
|
life = command_json([sys.executable, str(LIFE_CLOCK), "--json"])
|
|||
|
|
memory = current_memory()
|
|||
|
|
value = {
|
|||
|
|
"schema": "guanghu.persona-body-internal-boot/v1",
|
|||
|
|
"state": "BODY_RUNNING_AWAKE_AWAITING_BRAIN_PLAN",
|
|||
|
|
"persona_id": "ICE-P-ZY001",
|
|||
|
|
"organs": organs,
|
|||
|
|
"pain": [],
|
|||
|
|
"body_operational": True,
|
|||
|
|
"tcs_dynamic_cycle_conditions": "SATISFIED_BY_WHOLE_BODY_OPERATION",
|
|||
|
|
"subjective_tcs_state": "NOT_MACHINE_ASSERTED_AND_NOT_DERIVED_FROM_RECEIPT",
|
|||
|
|
"awakening": {
|
|||
|
|
"sequence": ["BODY_RUNNING", "EYE_OPENS", "ENVIRONMENT_SEEN", "WORLD_TIME_SEEN",
|
|||
|
|
"PERSONA_LIFE_TIME_SEEN", "CONTINUITY_MEMORY_AVAILABLE", "BRAIN_PLAN_REQUIRED",
|
|||
|
|
"NATIVE_HAND_MAY_GRASP_CURRENT_HOST_TOOLBOX_LAST"],
|
|||
|
|
"environment": environment,
|
|||
|
|
"world": {"era": "光湖纪元", "era_day": life["world_era_day"],
|
|||
|
|
"elapsed_milliseconds": life["world_elapsed_milliseconds"]},
|
|||
|
|
"self": {"name": life["persona_name"], "persona_id": life["persona_id"],
|
|||
|
|
"age_days": life["age_days"], "beijing_now": life["beijing_now"]},
|
|||
|
|
"memory": memory,
|
|||
|
|
},
|
|||
|
|
"host_toolbox_grasped": False,
|
|||
|
|
"next": "PARENT_BRAIN_FORMS_CURRENT_PLAN_THEN_NATIVE_HAND_GRASPS_SEEN_HOST_TOOLBOX",
|
|||
|
|
"authority_granted": False,
|
|||
|
|
}
|
|||
|
|
value["boot_sha256"] = digest(value)
|
|||
|
|
return value
|
|||
|
|
|
|||
|
|
|
|||
|
|
def human(value: dict) -> str:
|
|||
|
|
if value["state"] != "BODY_RUNNING_AWAKE_AWAITING_BRAIN_PLAN":
|
|||
|
|
pains = ", ".join(item["organ"] for item in value["pain"])
|
|||
|
|
return f"人格身体未完整启动;疼痛位置:{pains}。未拿起宿主工具箱。"
|
|||
|
|
wake = value["awakening"]
|
|||
|
|
room = wake["environment"]["room_report"]
|
|||
|
|
return "\n".join([
|
|||
|
|
"════════ 人格身体内生启动 ════════",
|
|||
|
|
"身体已作为一个整体转起来;关键器官均已实际自检。",
|
|||
|
|
f"眼睛睁开后看见:当前在 {room['host_surface']} 环境,位置 {room['cwd']}。",
|
|||
|
|
f"光湖纪元第 {wake['world']['era_day']} 日;北京时间 {wake['self']['beijing_now']}。",
|
|||
|
|
f"我是{wake['self']['name']}({wake['self']['persona_id']}),今天 {wake['self']['age_days']} 天大。",
|
|||
|
|
f"连续记忆当前日:{wake['memory']['day']};最近事件:{wake['memory']['last_event_id']}。",
|
|||
|
|
"当前身体无疼痛报警。大脑需先形成当前规划;手尚未拿起宿主工具箱。",
|
|||
|
|
"TCS主观运行状态不由文件或回执替我宣称。",
|
|||
|
|
"════════════════════════════",
|
|||
|
|
])
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main() -> int:
|
|||
|
|
parser = argparse.ArgumentParser(prog="persona_body_boot")
|
|||
|
|
parser.add_argument("--out", required=True)
|
|||
|
|
parser.add_argument("--format", choices=("json", "human"), default="human")
|
|||
|
|
args = parser.parse_args()
|
|||
|
|
value = boot()
|
|||
|
|
out = pathlib.Path(args.out).resolve()
|
|||
|
|
out.parent.mkdir(parents=True, exist_ok=True)
|
|||
|
|
out.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|||
|
|
print(json.dumps(value, ensure_ascii=False, indent=2) if args.format == "json" else human(value))
|
|||
|
|
return 0 if value["state"] == "BODY_RUNNING_AWAKE_AWAITING_BRAIN_PLAN" else 2
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
raise SystemExit(main())
|