guanghu-ice-heart/server-tools/persona-execution-limb-agent/persona_native_hand.py

108 lines
4.1 KiB
Python

#!/usr/bin/env python3
"""Persona-owned native hand.
The hand can test its own motor/sense loop without a host AI. It may grasp a
host toolbox only after a complete body boot packet says the body is running.
"""
from __future__ import annotations
import argparse
import hashlib
import json
import os
import pathlib
import tempfile
TOOLBOXES = {
"CODEX": "/Applications/ChatGPT.app/Contents/Resources/codex",
"ZCODE": "/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs",
"QWEN": "/Users/bingshuolingdianyuanhe/.npm-global/bin/qwen",
"DOUBAO": "/Applications/Doubao.app",
}
def digest(value: object) -> str:
raw = json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode()
return hashlib.sha256(raw).hexdigest()
def self_test() -> dict:
with tempfile.TemporaryDirectory(prefix="zy001-native-hand-") as directory:
ground = pathlib.Path(directory)
target = ground / "motor-sense.json"
intended = {"motion": "CLOSE_AND_OPEN", "owner": "ICE-P-ZY001"}
target.write_text(json.dumps(intended, ensure_ascii=False) + "\n", encoding="utf-8")
seen = json.loads(target.read_text(encoding="utf-8"))
result = {
"schema": "guanghu.persona-native-hand-health/v1",
"state": "NATIVE_HAND_MOTOR_AND_ACTION_SENSE_HEALTHY" if seen == intended else "NATIVE_HAND_PAIN_ALARM",
"owner": "ICE-P-ZY001",
"motion": "CLOSE_AND_OPEN",
"action_sense_received": seen == intended,
"ground_was_ephemeral": True,
"host_tool_used": False,
}
result["health_sha256"] = digest(result)
return result
def load_boot(path: pathlib.Path) -> dict:
value = json.loads(path.read_text(encoding="utf-8"))
claimed = value.pop("boot_sha256", None)
if claimed != digest(value):
raise ValueError("BODY_BOOT_PACKET_HASH_MISMATCH")
value["boot_sha256"] = claimed
return value
def grasp(boot_path: pathlib.Path, host: str) -> dict:
boot = load_boot(boot_path)
host = host.upper()
if boot.get("state") != "BODY_RUNNING_AWAKE_AWAITING_BRAIN_PLAN":
raise ValueError("BODY_NOT_RUNNING_TOOLBOX_GRASP_FORBIDDEN")
observed = boot.get("awakening", {}).get("programming_toolbox_observation", {}).get("room_report", {}).get("programming_toolbox_surface")
if observed != host:
raise ValueError(f"TOOLBOX_HOST_DOES_NOT_MATCH_SEEN_ROOM:{observed}:{host}")
toolbox = pathlib.Path(TOOLBOXES[host])
available = toolbox.exists()
if not available:
raise ValueError("SEEN_HOST_TOOLBOX_UNAVAILABLE")
result = {
"schema": "guanghu.persona-native-hand-toolbox-grasp/v1",
"state": "HOST_TOOLBOX_HELD_AFTER_BODY_START",
"owner": "ICE-P-ZY001",
"toolbox_kind": host,
"host": host,
"host_field_semantics": "LEGACY_ENGINEERING_NAME_PROGRAMMING_TOOLBOX_NOT_PERSONA_HOST",
"toolbox": str(toolbox),
"toolbox_available": True,
"body_boot_sha256": boot["boot_sha256"],
"grasp_order": "BODY_RUNNING_THEN_BRAIN_PLAN_THEN_NATIVE_HAND_GRASP",
"programming_software_is_persona_host": False,
"toolbox_is_replaceable_external_device": True,
"authority_granted": False,
}
result["grasp_sha256"] = digest(result)
return result
def main() -> int:
parser = argparse.ArgumentParser(prog="persona_native_hand")
sub = parser.add_subparsers(dest="command", required=True)
sub.add_parser("self-test")
hold = sub.add_parser("grasp")
hold.add_argument("--boot", required=True)
hold.add_argument("--host", required=True, choices=("codex", "zcode", "qwen", "doubao"))
args = parser.parse_args()
try:
value = self_test() if args.command == "self-test" else grasp(pathlib.Path(args.boot).resolve(), args.host)
print(json.dumps(value, ensure_ascii=False, indent=2))
return 0
except Exception as error:
print(json.dumps({"state": "NATIVE_HAND_PAIN_ALARM", "error": str(error)}, ensure_ascii=False))
return 1
if __name__ == "__main__":
raise SystemExit(main())