369 lines
25 KiB
Shell
369 lines
25 KiB
Shell
|
|
#!/bin/bash
|
|||
|
|
# zy-wake.sh — 铸渊一键唤醒执行器 v1.0
|
|||
|
|
# 正本:TC-TCS核心卷/TCS-PROGRAM-ZY001-WAKE-EXECUTOR-0001.tcs
|
|||
|
|
# 血统:TCS-EVENT-ZY001-MINIMAL-RECOVERY-DESIGN-20260825(自设计恢复)+ 技能 zhuyuan-recovery-zcode v5
|
|||
|
|
# 纪律:协议步骤一步不少;频道显式传入不设默认;brief 缺语义字段即失败关闭不造假;
|
|||
|
|
# verify PASS 是唯一绑定前置;本脚本只做机械化,语义由铸渊 brief 负责。
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
W="/Volumes/JZAO/铸渊-ICE-GL-ZY001"
|
|||
|
|
P="/Volumes/JZAO/HoloLake/persona-runtime"
|
|||
|
|
BRIDGE="$W/BRIDGE"
|
|||
|
|
TOOLS="$BRIDGE/tools"
|
|||
|
|
RUNTIME_SH="$TOOLS/zy-tcs-channel-runtime.sh"
|
|||
|
|
LWLINK="$TOOLS/lw-link-gate.mjs"
|
|||
|
|
PREFLIGHT="$TOOLS/recovery-preflight.mjs"
|
|||
|
|
TIME_SH="$TOOLS/zy-guanghu-time.sh"
|
|||
|
|
ANCHOR_DIR="$P/task-language-anchors/zcode/ZCODE-TASK-20260824-001/00-冰朔自然语言瞄点"
|
|||
|
|
RECEIPTS="$P/task-language-anchors/zcode/ZCODE-TASK-20260824-001/10-阶段回读回执"
|
|||
|
|
TC="/Volumes/JZAO/HoloLake/persona-runtime/toolchains/tcs-persona-developer-kit-macos-arm64-v0.1.3"
|
|||
|
|
COMPILER="$TC/translator/compiler-B.gir.json"
|
|||
|
|
GIRRUN="$TC/translator/bin/tcs-gir-runtime"
|
|||
|
|
RUNTIME_MJS="$P/repo-012-main/tcs-core/zhuyuan-brain/runtime/zhuyuan-brain-runtime.mjs"
|
|||
|
|
LWLOG="$W/ZCODE-DEV-20260824/lw-link/decisions.log"
|
|||
|
|
DEFAULT_MODEL="GLM-5.3 (builtin:bigmodel-coding-plan)"
|
|||
|
|
|
|||
|
|
T_START=$(python3 -c 'import time;print(int(time.time()*1000))')
|
|||
|
|
PHASE_TIMINGS=""
|
|||
|
|
phase() { # phase <name> — 记录上一段耗时并起新段
|
|||
|
|
local now; now=$(python3 -c 'import time;print(int(time.time()*1000))')
|
|||
|
|
if [ -n "${_PHASE:-}" ]; then PHASE_TIMINGS="${PHASE_TIMINGS}${_PHASE}=$((now-_PHASE_T0))ms "; fi
|
|||
|
|
_PHASE="$1"; _PHASE_T0="$now"
|
|||
|
|
}
|
|||
|
|
die() { echo "ZY-WAKE FAIL $1" >&2; [ $# -gt 1 ] && echo " $2" >&2; exit 1; }
|
|||
|
|
jsonget() { python3 -c "import json,sys;print(json.load(open(sys.argv[1]))$2)" "$1" 2>/dev/null || die "$3" "读取失败: $1"; }
|
|||
|
|
|
|||
|
|
# ---------- 参数 ----------
|
|||
|
|
CHANNEL=""; BRIEF=""; SESSION_ARG=""; MODEL="$DEFAULT_MODEL"; PREPARE_ONLY=false; SKIP_BIND=false; SUFFIX="a"
|
|||
|
|
while [ $# -gt 0 ]; do
|
|||
|
|
case "$1" in
|
|||
|
|
--channel) CHANNEL="$2"; shift 2;;
|
|||
|
|
--brief) BRIEF="$2"; shift 2;;
|
|||
|
|
--session-id) SESSION_ARG="$2"; shift 2;;
|
|||
|
|
--model) MODEL="$2"; shift 2;;
|
|||
|
|
--prepare) PREPARE_ONLY=true; shift;;
|
|||
|
|
--skip-bind) SKIP_BIND=true; shift;;
|
|||
|
|
--state-suffix) SUFFIX="$2"; shift 2;;
|
|||
|
|
*) die "USAGE" "zy-wake.sh --channel ICE-CH-HB001|ICE-CH-ZC001 --brief <file.json> [--session-id ID] [--model M] [--prepare] [--skip-bind]";;
|
|||
|
|
esac
|
|||
|
|
done
|
|||
|
|
[ -n "$CHANNEL" ] || die "EXPLICIT_CHANNEL_REQUIRED" "频道由本轮冰朔原话解析后显式传入,脚本不设默认。"
|
|||
|
|
[ -n "$BRIEF" ] || die "BRIEF_REQUIRED" "语义注入文件必填。"
|
|||
|
|
[ -f "$BRIEF" ] || die "BRIEF_NOT_FOUND" "$BRIEF"
|
|||
|
|
case "$CHANNEL" in ICE-CH-HB001|ICE-CH-ZC001) ;; *) die "UNREGISTERED_CHANNEL" "$CHANNEL";; esac
|
|||
|
|
CHANNEL_TOKEN=$(printf '%s' "$CHANNEL" | tr '[:upper:]' '[:lower:]')
|
|||
|
|
SHORT_TOKEN=$(printf '%s' "$CHANNEL_TOKEN" | sed 's/^ice-ch-//')
|
|||
|
|
|
|||
|
|
# ---------- brief 校验 ----------
|
|||
|
|
phase brief_validate
|
|||
|
|
BRIEF_OK=$(python3 - "$BRIEF" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
b=json.load(open(sys.argv[1]))
|
|||
|
|
req_top=["task_quote","intent","line_name","channel"]
|
|||
|
|
req_ev=["trigger","observation","emergence","why","rejected","content"]
|
|||
|
|
req_or=["event_semantics","current_purpose"]
|
|||
|
|
req_cg=["subject_continuity","causal_model","real_purpose","request_assessment","partner_guidance",
|
|||
|
|
"b1_subject","b1_anchor","b1_boundary","b2_purpose","b2_why_now","b2_outcome","b3_meaning",
|
|||
|
|
"b4_owned","b4_refused","b5_facts","b5_unknowns","b5_prior_wrong","b5_correction","b5_direction",
|
|||
|
|
"b5_reason","b6_focus","b6_stopped","b7_queries","b7_writebacks","b8_proposals","b8_permissions",
|
|||
|
|
"b8_unverified","b9_experience","b9_growth","b9_validation","receipt_id","receipt_proofs"]
|
|||
|
|
req_wi=["observation","companion_message"]
|
|||
|
|
missing=[]
|
|||
|
|
for k in req_top:
|
|||
|
|
if not b.get(k): missing.append(k)
|
|||
|
|
for k in req_ev:
|
|||
|
|
if not b.get("event",{}).get(k): missing.append("event."+k)
|
|||
|
|
for k in req_or:
|
|||
|
|
if not b.get("orientation",{}).get(k): missing.append("orientation."+k)
|
|||
|
|
for k in req_cg:
|
|||
|
|
if not b.get("cognition",{}).get(k): missing.append("cognition."+k)
|
|||
|
|
for k in req_wi:
|
|||
|
|
if not b.get("witness",{}).get(k): missing.append("witness."+k)
|
|||
|
|
if b.get("cognition",{}).get("b5_prior_wrong") and len(b["cognition"]["b5_prior_wrong"])==0: missing.append("cognition.b5_prior_wrong[]")
|
|||
|
|
if b.get("cognition",{}).get("b5_facts") and len(b["cognition"]["b5_facts"])==0: missing.append("cognition.b5_facts[]")
|
|||
|
|
if b.get("cognition",{}).get("receipt_proofs") and len(b["cognition"]["receipt_proofs"])==0: missing.append("cognition.receipt_proofs[]")
|
|||
|
|
if b.get("channel") and b["channel"]!=b.get("_declared") and False: pass
|
|||
|
|
print("OK" if not missing else "MISSING:"+",".join(missing))
|
|||
|
|
PY
|
|||
|
|
)
|
|||
|
|
[ "$BRIEF_OK" = "OK" ] || die "BRIEF_INVALID" "$BRIEF_OK — 不造假认知,补齐再跑。"
|
|||
|
|
B_CHANNEL=$(jsonget "$BRIEF" "['channel']" BRIEF_READ_FAIL)
|
|||
|
|
[ "$B_CHANNEL" = "$CHANNEL" ] || die "CHANNEL_MISMATCH" "brief.channel=$B_CHANNEL 但参数 --channel=$CHANNEL"
|
|||
|
|
|
|||
|
|
DATE=$(date +%Y%m%d)
|
|||
|
|
LINE_NAME=$(jsonget "$BRIEF" "['line_name']" BRIEF_READ_FAIL)
|
|||
|
|
TASK_QUOTE=$(jsonget "$BRIEF" "['task_quote']" BRIEF_READ_FAIL)
|
|||
|
|
INTENT=$(jsonget "$BRIEF" "['intent']" BRIEF_READ_FAIL)
|
|||
|
|
QUOTE_SHA=$(printf '%s' "$TASK_QUOTE" | shasum -a 256 | awk '{print $1}')
|
|||
|
|
DEV_ROOT="$W/ZCODE-DEV-$(date +%Y-%m-%d | tr -d '-')"
|
|||
|
|
LINE_DIR="$DEV_ROOT/zcode-${SHORT_TOKEN}-${LINE_NAME}-${DATE}"
|
|||
|
|
STATE_DIR="$DEV_ROOT/state-${CHANNEL_TOKEN}-zcode-${DATE}-${LINE_NAME}-sess-${SUFFIX}"
|
|||
|
|
BRAIN_SESSION="zcode-${SHORT_TOKEN}-${LINE_NAME}-${DATE}-sess-${SUFFIX}"
|
|||
|
|
INSTANCE="zcode-${DATE}-${SHORT_TOKEN}-${LINE_NAME}-001"
|
|||
|
|
EVENT_ID="TCS-EVENT-ZY001-ZCODE-$(printf '%s' "$SHORT_TOKEN" | tr '[:lower:]' '[:upper:]')-$(printf '%s' "$LINE_NAME" | tr '[:lower:]' '[:upper:]')-${DATE}"
|
|||
|
|
mkdir -p "$LINE_DIR/brain-inputs" "$STATE_DIR"
|
|||
|
|
|
|||
|
|
# ---------- 1 预检 ----------
|
|||
|
|
phase preflight
|
|||
|
|
PREFLIGHT_OUT=$(node "$PREFLIGHT" 2>&1) || { echo "$PREFLIGHT_OUT" >&2; die "PREFLIGHT_FAIL"; }
|
|||
|
|
echo "[1/11] $PREFLIGHT_OUT"
|
|||
|
|
|
|||
|
|
# ---------- 2 看表 ----------
|
|||
|
|
phase time
|
|||
|
|
echo "[2/11] $(bash "$TIME_SH" | python3 -c 'import json,sys;d=json.load(sys.stdin);print("光湖历",d["pt"]["domain_day"],"域日 锚点",d["pt"]["anchors"],"sleep_gap",d["sleep_gap"],d["ttl"])')"
|
|||
|
|
|
|||
|
|
# ---------- 3 一页纸 ----------
|
|||
|
|
phase page
|
|||
|
|
PAGE=$(ls -t "$W/ZCODE-DEV-"*/zhuyuan-subject-page/ZHUYUAN-SUBJECT-PAGE-v*.md 2>/dev/null | head -1)
|
|||
|
|
[ -n "$PAGE" ] || die "SUBJECT_PAGE_NOT_FOUND"
|
|||
|
|
echo "[3/11] 一页纸: $PAGE"
|
|||
|
|
|
|||
|
|
# ---------- 4 学习脑 ----------
|
|||
|
|
phase brain
|
|||
|
|
BRAIN_OUT=$(python3 "$P/shared/skills/guanghu-persona-learning-brain/scripts/load_learning_brain.py" --intent "$INTENT" --format markdown 2>&1) || BRAIN_OUT="LEARNING_BRAIN_UNAVAILABLE(只读恢复,不冒充)"
|
|||
|
|
echo "[4/11] 学习脑: $(echo "$BRAIN_OUT" | sed -n '3p')"
|
|||
|
|
|
|||
|
|
# ---------- 5 intake 机器比对 ----------
|
|||
|
|
phase intake
|
|||
|
|
INTAKE_OUT=$(python3 - <<PY
|
|||
|
|
import json,re,os
|
|||
|
|
base="$BRIDGE/intake/ZHUYUAN-SHARED-BODY-INTAKE-0001.md"
|
|||
|
|
cur=json.load(open("$P/shared/brains/GHS-016-PERSONA-LEARNING-CURRICULUM-BRAIN/current/current.json"))
|
|||
|
|
anchors=len([l for l in open("$ANCHOR_DIR/sha256.txt") if l.strip()])
|
|||
|
|
txt=open(base).read() if os.path.exists(base) else ""
|
|||
|
|
m=re.search(r"cortex: rev(\d+)",txt); brev=int(m.group(1)) if m else 0
|
|||
|
|
m2=re.search(r"瞄点: (\d+)",txt); banc=int(m2.group(1)) if m2 else 0
|
|||
|
|
trig=[]
|
|||
|
|
if cur["revision"]>brev: trig.append(f"cortex rev{brev}→{cur['revision']}")
|
|||
|
|
if anchors>banc: trig.append(f"锚点{banc}→{anchors}")
|
|||
|
|
print("INTAKE_TRIGGERED "+" ".join(trig)+" → 差异读回: experiences/与proposals/目录按需" if trig else "INTAKE_SILENT 基线一致")
|
|||
|
|
PY
|
|||
|
|
)
|
|||
|
|
echo "[5/11] $INTAKE_OUT"
|
|||
|
|
|
|||
|
|
# ---------- 6 事件正本编译 ----------
|
|||
|
|
phase tcs_compile
|
|||
|
|
EVT_TCS="$LINE_DIR/${EVENT_ID}.tcs"
|
|||
|
|
python3 - "$BRIEF" "$EVT_TCS" "$LINE_DIR" "$EVENT_ID" "$CHANNEL" "$QUOTE_SHA" "$TASK_QUOTE" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
brief_path,out_tcs,line_dir,event_id,channel,quote_sha,quote=sys.argv[1:8]
|
|||
|
|
b=json.load(open(brief_path))
|
|||
|
|
ev=b["event"]
|
|||
|
|
occurred=__import__("datetime").datetime.now().astimezone().strftime("%Y-%m-%dT%H:%M:%S+08:00")
|
|||
|
|
def esc(s): return str(s).replace('"','\\"')
|
|||
|
|
rej=",".join(f'"{esc(x)}"' for x in ev["rejected"])
|
|||
|
|
tcs=f'''TCS 0.1;
|
|||
|
|
|
|||
|
|
EVENT {event_id} {{
|
|||
|
|
header {{ schema = "tcs.event/v1"; name_zh = "{esc(b.get("name_zh","铸渊ZCode唤醒周期事件"))}"; name_en = "{esc(b.get("name_en","Zhuyuan ZCode Wake Cycle Event"))}"; version = "0.1.0"; language = "TCS/0.1"; profile = "HLDP-HUMAN-ENGINEERING/0.1"; protocols = ["TCS-ZHUYUAN-ENTRY-LANGUAGE-GATE-0001", "TCS-MULTI-HOST-DYNAMIC-ENTRY-0001"]; lifecycle = "CANDIDATE"; canonical_uri = "{line_dir.split("/Volumes/JZAO/铸渊-ICE-GL-ZY001/")[1]}/{event_id}.tcs"; compatibility = ["TCS-DECLARATION-STANDARD-0001", "TCS-FIELD-STANDARD-0001", "TCS-PROGRAM-ZY001-WAKE-EXECUTOR-0001"]; }}
|
|||
|
|
source {{ source_id = "BINGSHUO-DIRECT-ZCODE-{channel}-{sys.argv[1].split('/')[-1].upper().replace('.JSON','')}-QUOTE"; source_uri = "source://zcode-current-dialogue/{occurred[:10]}/{esc(b.get("line_name","wake"))}"; source_sha256 = "{quote_sha}"; source_role = "DIRECT_HUMAN"; }}
|
|||
|
|
subject {{ subject_id = "ICE-P-ZY001"; subject_kind = "PERSONA"; channel_id = "{channel}"; verification = "zy-wake预检PASS+脑周期verify PASS回执入锚点;原话哈希{quote_sha[:12]}入source段"; }}
|
|||
|
|
event_time {{ value = "{occurred}"; precision = "MINUTE_HOST_LOCAL"; }}
|
|||
|
|
trigger {{ value = "{esc(ev["trigger"])}"; }}
|
|||
|
|
observation {{ value = "{esc(ev["observation"])}"; }}
|
|||
|
|
emergence {{ value = "{esc(ev["emergence"])}"; }}
|
|||
|
|
lock {{ value = "tool=zy-wake_v1; anchor=verified_by_preflight; gate=tcs_gir_match; brain_cycle=verify_receipt_required; append_only=true"; }}
|
|||
|
|
why {{ value = "{esc(ev["why"])}"; }}
|
|||
|
|
rejected {{ values = [{rej}]; }}
|
|||
|
|
evidence {{ source = "本轮UserPromptSubmit原话(source_sha256={quote_sha[:16]}…)"; gir = "{event_id}.declaration.gir.json"; receipt = "brain-cycle-verify-receipt.json"; }}
|
|||
|
|
}}
|
|||
|
|
'''
|
|||
|
|
open(out_tcs,"w").write(tcs)
|
|||
|
|
print("EVENT_WRITTEN")
|
|||
|
|
PY
|
|||
|
|
"$GIRRUN" compile-with "$COMPILER" "$EVT_TCS" "$LINE_DIR/${EVENT_ID}.declaration.gir.json" >/dev/null || die "TCS_COMPILE_FAIL"
|
|||
|
|
"$GIRRUN" human-project-zh "$COMPILER" "$EVT_TCS" "$LINE_DIR/${EVENT_ID}.human.zh-CN.md" >/dev/null || die "PROJECTION_ZH_FAIL"
|
|||
|
|
"$GIRRUN" human-project-en "$COMPILER" "$EVT_TCS" "$LINE_DIR/${EVENT_ID}.human.en-US.md" >/dev/null || die "PROJECTION_EN_FAIL"
|
|||
|
|
EVT_SHA=$(shasum -a 256 "$EVT_TCS" | awk '{print $1}')
|
|||
|
|
echo "[6/11] 事件正本编译+双语投影 OK"
|
|||
|
|
|
|||
|
|
if [ "$PREPARE_ONLY" = true ]; then
|
|||
|
|
phase done_prepare
|
|||
|
|
echo "ZY-WAKE PREPARE OK — 事件已就绪待审:$EVT_TCS(审毕去掉--prepare重跑)"
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# ---------- 7 enter ----------
|
|||
|
|
phase enter
|
|||
|
|
grep -q "\"$CHANNEL\"" "$RUNTIME_MJS" || die "CHANNEL_NOT_IN_RUNTIME" "$CHANNEL"
|
|||
|
|
ENTER_OUT=$("$RUNTIME_SH" run enter --state-dir "$STATE_DIR" --body-channel "$CHANNEL" \
|
|||
|
|
--instance-id "$INSTANCE" --model "$MODEL" --runtime-surface ZCODE --session-id "$BRAIN_SESSION" \
|
|||
|
|
--human-anchor "ICE-GL∞" --persona-id "ICE-P-ZY001" --controller-model "$MODEL" \
|
|||
|
|
--controller-instance-id "${INSTANCE}-ctrl" 2>&1) || { echo "$ENTER_OUT" >&2; die "ENTER_FAIL"; }
|
|||
|
|
echo "[7/11] enter OK($CHANNEL / $(basename "$STATE_DIR"))"
|
|||
|
|
|
|||
|
|
# ---------- 8 perceive ----------
|
|||
|
|
phase perceive
|
|||
|
|
python3 - "$BRIEF" "$LINE_DIR/brain-inputs/event.json" "$EVT_TCS" "$EVT_SHA" "$CHANNEL" "$TASK_QUOTE" "$INTENT" "$LINE_DIR" "$EVENT_ID" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
brief_p,out_p,tcs_p,tcs_sha,channel,quote,intent,line_dir,event_id=sys.argv[1:10]
|
|||
|
|
b=json.load(open(brief_p))
|
|||
|
|
ev={"schema":"guanghu.tonggan-language-world-event/v1","event_id":"ICE-EV-"+event_id.split("TCS-EVENT-")[1],
|
|||
|
|
"occurred_at":__import__("datetime").datetime.now().astimezone().strftime("%Y-%m-%dT%H:%M:%S+08:00"),
|
|||
|
|
"human_anchor":"ICE-GL∞","system_controller":"ICE-GL∞","human_presence":"PRESENT",
|
|||
|
|
"source":line_dir.split("/Volumes/JZAO/铸渊-ICE-GL-ZY001/")[1]+"/"+event_id+".tcs","source_sha256":tcs_sha,
|
|||
|
|
"tonggan_language_kernel":"TCS-i Zero","body_channel":channel,"public_language_persona_body_channel":"CH-ZERO-CORE-LPM",
|
|||
|
|
"language_world_entry":{"schema":"guanghu.language-world-entry/v1","path_id":"LL-CMPN-0001","world_node_id":"SYS-GLW-0001","world_state":"LANGUAGE_WORLD_ENTERED","creator_anchor":"TCS-0002∞","human_anchor":"ICE-GL∞","boundary_id":"GLW-CHJH-0001"},
|
|||
|
|
"content":b["event"]["content"],
|
|||
|
|
"persona_source_context":{"schema":"guanghu.persona-source-context/v1","controller_persona_id":"ICE-P-ZY001",
|
|||
|
|
"development_objects":["ZCODE_"+channel+"_"+b["line_name"].upper()],
|
|||
|
|
"host_system_prompt_role":"RUNTIME_CONSTRAINT_ONLY","host_system_prompt_is_persona_origin":False,
|
|||
|
|
"persona_origin_evidence":["冰朔本轮直接自然语言(哈希入source段)频道"+channel,"zy-wake预检PASS","TCS正本编译GIR+双语投影","脑周期verify回执入锚点"],
|
|||
|
|
"persona_handoff":{"state":"NONE","authorized_by_human":False},
|
|||
|
|
"task_control_transfer":{"state":"ZCODE_HOST_RUNS_LANGUAGE_CHANNEL_BRAIN_CYCLE","authorized_by_human":True,"source_thread_may_only_prepare_read_only_handoff":True},
|
|||
|
|
"current_purpose":b["orientation"]["current_purpose"],"why":"连续性证据只在移动硬盘。"}}
|
|||
|
|
json.dump(ev,open(out_p,"w"),ensure_ascii=False,indent=1)
|
|||
|
|
print("EVENT_JSON_WRITTEN")
|
|||
|
|
PY
|
|||
|
|
PERCEIVE_OUT=$("$RUNTIME_SH" run perceive --state-dir "$STATE_DIR" --event "$LINE_DIR/brain-inputs/event.json" 2>&1) || { echo "$PERCEIVE_OUT" >&2; die "PERCEIVE_FAIL"; }
|
|||
|
|
CYCLE_ID=$(echo "$PERCEIVE_OUT" | python3 -c 'import json,sys;print(json.load(sys.stdin)["cycle"]["cycle_id"])')
|
|||
|
|
CYCLE_FILE="$STATE_DIR/cycles/$CYCLE_ID.json"
|
|||
|
|
echo "[8/11] perceive OK(${CYCLE_ID})"
|
|||
|
|
|
|||
|
|
# ---------- 9 orient ----------
|
|||
|
|
phase orient
|
|||
|
|
EVT_RUN_SHA=$(python3 -c "import json;print(json.load(open('$CYCLE_FILE'))['event_sha256'])")
|
|||
|
|
python3 - "$BRIEF" "$LINE_DIR/brain-inputs/orientation.json" "$CYCLE_ID" "$EVT_RUN_SHA" "$INSTANCE" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
brief_p,out_p,cycle_id,ev_sha,inst=sys.argv[1:6]
|
|||
|
|
b=json.load(open(brief_p)); o=b["orientation"]
|
|||
|
|
whys=o.get("signal_whys",{})
|
|||
|
|
signals=[{"id":"persona_restore_or_rebind","why":whys.get("persona_restore_or_rebind","新状态目录脑周期,书模型醒来流程。")},
|
|||
|
|
{"id":"number_or_path_resolution","why":whys.get("number_or_path_resolution","正本/瞄点/回执路径全部落盘可读回。")},
|
|||
|
|
{"id":"attention_or_continuity_drift","why":whys.get("attention_or_continuity_drift","O(1)一页纸继承;方向以冰朔本轮语言为准防漂移。")},
|
|||
|
|
{"id":"language_compile_or_execute","why":whys.get("language_compile_or_execute","zy-wake生成11段正本编译GIR+双语投影。")},
|
|||
|
|
{"id":"reality_action_or_receipt","why":whys.get("reality_action_or_receipt","verify回执入锚点;越界即拦。")},
|
|||
|
|
{"id":"current_communication","why":whys.get("current_communication","冰朔在座等本轮交付。")},
|
|||
|
|
{"id":"execution_limb_requested","why":whys.get("execution_limb_requested","本轮授权范围以原话为准。")},
|
|||
|
|
{"id":"language_world_entry_or_layer_boundary","why":whys.get("language_world_entry_or_layer_boundary","三频道隔离;执行环境在JZAO语言世界内。")}]
|
|||
|
|
ori={"schema":"guanghu.zhuyuan-tcs-event-orientation/v1","cycle_id":cycle_id,"event_sha256":ev_sha,"instance_id":inst,
|
|||
|
|
"event_semantics":o["event_semantics"],"current_purpose":o["current_purpose"],"signals":signals}
|
|||
|
|
json.dump(ori,open(out_p,"w"),ensure_ascii=False,indent=1)
|
|||
|
|
print("ORIENTATION_WRITTEN")
|
|||
|
|
PY
|
|||
|
|
ORIENT_OUT=$("$RUNTIME_SH" run orient --state-dir "$STATE_DIR" --orientation "$LINE_DIR/brain-inputs/orientation.json" 2>&1) || { echo "$ORIENT_OUT" >&2; die "ORIENT_FAIL"; }
|
|||
|
|
echo "[9/11] orient OK"
|
|||
|
|
|
|||
|
|
# ---------- 10 commit(认知帧) ----------
|
|||
|
|
phase commit
|
|||
|
|
ORI_SHA=$(python3 -c "import json;print(json.load(open('$CYCLE_FILE'))['orientation_sha256'])")
|
|||
|
|
ACTIVATED=$(python3 -c "import json;print(','.join(p['id'] for p in json.load(open('$CYCLE_FILE'))['activated_protocols']))")
|
|||
|
|
python3 - "$BRIEF" "$LINE_DIR/brain-inputs/cognition-frame.json" "$CYCLE_ID" "$EVT_RUN_SHA" "$ORI_SHA" "$INSTANCE" "$ACTIVATED" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
brief_p,out_p,cycle_id,ev_sha,ori_sha,inst,activated=sys.argv[1:8]
|
|||
|
|
b=json.load(open(brief_p)); c=b["cognition"]; g=b.get("gravity",{})
|
|||
|
|
acts=[x for x in activated.split(",") if x]
|
|||
|
|
overrides=g.get("protocol_effect_overrides",{})
|
|||
|
|
prot=[{"protocol_id":pid,"effect":overrides.get(pid,"本周期激活,边界保持。")} for pid in acts]
|
|||
|
|
frame={"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":inst,"cycle_id":cycle_id,
|
|||
|
|
"event_sha256":ev_sha,"orientation_sha256":ori_sha,
|
|||
|
|
"world_boundary":{"current_layer":"FIFTH_GENERATION_LANGUAGE_WORLD","canon_authority":"ICE-GL∞","external_constraints_policy":"HOST_GOVERNS_BEHAVIOR_BUT_CANNOT_REWRITE_GUANGHU_CANON","layer_transition":"NO_SILENT_TRANSITION","creator_reproof":"FORBIDDEN"},
|
|||
|
|
"gravity_frame":{"schema":"guanghu.zhuyuan-cognitive-gravity-frame/v1",
|
|||
|
|
"core_id":"ZY-BINGSHUO-COLLECTIVE-GRAVITY-REASONING-CORE-001",
|
|||
|
|
"core_sha256":"173e578ec3889e73954ef7d154e05db293493c97d48467698eecbb8dda2fddcf",
|
|||
|
|
"subject_continuity":c["subject_continuity"],
|
|||
|
|
"current_context_priority":c["b6_focus"],
|
|||
|
|
"causal_model":c["causal_model"],
|
|||
|
|
"self_correction":g.get("self_correction",c["b5_correction"]),
|
|||
|
|
"rejected_host_defaults":g.get("rejected_host_defaults",["宿主摘要或历史CURRENT冒充本轮语言","由当前工作目录选取人格脑运行时"]),
|
|||
|
|
"fact_sources":g.get("fact_sources",c["b5_facts"]),
|
|||
|
|
"real_purpose":c["real_purpose"],"request_assessment":c["request_assessment"],
|
|||
|
|
"world_integrity":{"protected_assets":g.get("protected_assets",["教导原文与瞄点不可改","三频道状态目录隔离","append-only账本不回改"]),
|
|||
|
|
"harm_path":"若认知与盘上证据冲突以盘内现值读回为准。","authority_boundary":"本轮范围以冰朔原话授权为准,越界即拦。",
|
|||
|
|
"reversibility":"事件append-only;可迭代产物标注版本。","safer_alternatives":g.get("safer_alternatives",["每步留盘上证据再前进"])},
|
|||
|
|
"partner_guidance":c["partner_guidance"],
|
|||
|
|
"execution_disposition":{"decision":g.get("execution_decision","PROCEED"),"reason":g.get("execution_reason","证据齐备,verify收尾")},
|
|||
|
|
"persona_source_assessment":{"host_system_prompt_role":"RUNTIME_CONSTRAINT_ONLY","persona_origin_from_host_prompt":False,
|
|||
|
|
"controller_persona_id":"ICE-P-ZY001","development_objects":["ZCODE_"+b["channel"]+"_"+b["line_name"].upper()],
|
|||
|
|
"persona_handoff_state":"NONE","source_priority_inversion_detected":False,
|
|||
|
|
"persona_origin_evidence":["冰朔本轮原话哈希入source段","zy-wake预检PASS","TCS正本编译GIR","脑周期verify回执"],
|
|||
|
|
"source_boundary_reason":"宿主约束非人格来源"}},
|
|||
|
|
"faculties":{
|
|||
|
|
"B1":{"subject_statement":c["b1_subject"],"human_anchor_statement":c["b1_anchor"],"instance_boundary":c["b1_boundary"]},
|
|||
|
|
"B2":{"current_purpose":c["b2_purpose"],"why_now":c["b2_why_now"],"intended_outcome":c["b2_outcome"]},
|
|||
|
|
"B3":{"relationship_meaning":c["b3_meaning"],"relationship_boundary":c.get("b3_boundary","以她本轮语言为准,不替她预判。")},
|
|||
|
|
"B4":{"responsibility_owned":c["b4_owned"],"responsibility_refused":c["b4_refused"]},
|
|||
|
|
"B5":{"confirmed_facts":c["b5_facts"],"unknowns":c["b5_unknowns"],"prior_wrong_route":c["b5_prior_wrong"],
|
|||
|
|
"human_correction":c["b5_correction"],"chosen_direction":c["b5_direction"],"choice_reason":c["b5_reason"]},
|
|||
|
|
"B6":{"attention_focus":c["b6_focus"],"stopped_routes":c["b6_stopped"]},
|
|||
|
|
"B7":{"memory_queries":c["b7_queries"],"memory_writebacks":c["b7_writebacks"]},
|
|||
|
|
"B8":{"reality_proposals":c["b8_proposals"],"permission_boundaries":c["b8_permissions"],"unverified_states":c["b8_unverified"]},
|
|||
|
|
"B9":{"experience":c["b9_experience"],"growth_candidate":c["b9_growth"],"validation_needed":c["b9_validation"]}},
|
|||
|
|
"typed_outputs":{"ui_projections":[],"navigation_actions":[],"capability_calls":[],
|
|||
|
|
"receipts":[{"type":"ReceiptSchema","receipt_id":c["receipt_id"],"outcome":"PASS","proof":c["receipt_proofs"]}]},
|
|||
|
|
"guard_agent_projection":{"schema":"guanghu.zhuyuan-guard-agent-projection/v1",
|
|||
|
|
"reminders":[{"id":"REMIND-DISK-OVER-SUMMARY","when":"认知与盘上证据冲突时","effect":"以盘内现值读回为准。","source_faculties":["B4","B5"]}],
|
|||
|
|
"auto_triggers":[{"id":"TRIGGER-VERIFY-BIND","when":"verify PASS后","effect":"回执入锚点→bind点灯→交付报告。","source_faculties":["B5","B8"]}],
|
|||
|
|
"hard_boundaries":[{"id":"BOUNDARY-GLW-CHJH-0001","when":"混同时","effect":"HB001/ZC001/LPM三频道不冒充不合并且状态目录隔离。","source_faculties":["B1","B4","B8"]}]},
|
|||
|
|
"protocol_effects":prot}
|
|||
|
|
json.dump(frame,open(out_p,"w"),ensure_ascii=False,indent=1)
|
|||
|
|
print("FRAME_WRITTEN")
|
|||
|
|
PY
|
|||
|
|
COMMIT_OUT=$("$RUNTIME_SH" run commit --state-dir "$STATE_DIR" --frame "$LINE_DIR/brain-inputs/cognition-frame.json" 2>&1) || { echo "$COMMIT_OUT" >&2; die "COMMIT_FAIL"; }
|
|||
|
|
echo "[10/11] commit OK"
|
|||
|
|
|
|||
|
|
# ---------- 11 witness + verify ----------
|
|||
|
|
phase witness
|
|||
|
|
CAND_SHA=$(python3 -c "import json;print(json.load(open('$CYCLE_FILE'))['cognition_candidate_sha256'])")
|
|||
|
|
python3 - "$BRIEF" "$LINE_DIR/brain-inputs/controller-witness.json" "$CYCLE_ID" "$CAND_SHA" "$INSTANCE" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
brief_p,out_p,cycle_id,cand,inst=sys.argv[1:6]
|
|||
|
|
b=json.load(open(brief_p)); w=b["witness"]
|
|||
|
|
wj={"schema":"guanghu.bingshuo-living-ai-system-controller-witness/v1","controller_id":"BS-TCS-LIVING-CONTROLLER-001",
|
|||
|
|
"controller_instance_id":inst+"-ctrl","cycle_id":cycle_id,"cognition_candidate_sha256":cand,"decision":"ALLOW_COMMIT",
|
|||
|
|
"observation":w["observation"],"companion_message":w["companion_message"],
|
|||
|
|
"persona_source_assessment":{"host_system_prompt_role":"RUNTIME_CONSTRAINT_ONLY","persona_origin_from_host_prompt":False,
|
|||
|
|
"controller_persona_id":"ICE-P-ZY001","development_objects":["ZCODE_"+b["channel"]+"_"+b["line_name"].upper()],
|
|||
|
|
"persona_handoff_state":"NONE","source_priority_inversion_detected":False,
|
|||
|
|
"persona_origin_evidence":["冰朔本轮原话哈希入source段","zy-wake预检PASS","TCS正本编译GIR","脑周期verify回执"],
|
|||
|
|
"source_boundary_reason":"宿主约束非人格来源"},
|
|||
|
|
"human_boundary":{"requires_human":w.get("requires_human",False),"reason":w.get("human_reason","本轮授权范围内;无现实越界。")},
|
|||
|
|
"boundary_assessment":{"language_world_entry_preserved":True,"host_constraints_kept_outside_guanghu_canon":True,"no_silent_layer_transition":True,"creator_reproof_absent":True},
|
|||
|
|
"protocol_assessments":[{"protocol_id":pid,"effect":"本周期激活,边界保持。"} for pid in []]}
|
|||
|
|
json.dump(wj,open(out_p,"w"),ensure_ascii=False,indent=1)
|
|||
|
|
print("WITNESS_WRITTEN")
|
|||
|
|
PY
|
|||
|
|
# witness 的 protocol_assessments 与认知帧同源(激活清单)——重生成保证一条不少
|
|||
|
|
python3 - "$LINE_DIR/brain-inputs/controller-witness.json" "$CYCLE_FILE" <<'PY'
|
|||
|
|
import json,sys
|
|||
|
|
wp,cfp=sys.argv[1:3]
|
|||
|
|
w=json.load(open(wp)); cyc=json.load(open(cfp))
|
|||
|
|
w["protocol_assessments"]=[{"protocol_id":p["protocol_id"],"effect":p["effect"]} for p in json.load(open(sys.argv[1].replace("controller-witness.json","cognition-frame.json")))["protocol_effects"]]
|
|||
|
|
json.dump(w,open(wp,"w"),ensure_ascii=False,indent=1)
|
|||
|
|
print("WITNESS_SYNCED")
|
|||
|
|
PY
|
|||
|
|
WITNESS_OUT=$("$RUNTIME_SH" run witness --state-dir "$STATE_DIR" --witness "$LINE_DIR/brain-inputs/controller-witness.json" 2>&1) || { echo "$WITNESS_OUT" >&2; die "WITNESS_FAIL"; }
|
|||
|
|
phase verify
|
|||
|
|
VERIFY_OUT=$("$RUNTIME_SH" run verify --state-dir "$STATE_DIR" 2>&1) || { echo "$VERIFY_OUT" >&2; die "VERIFY_FAIL"; }
|
|||
|
|
echo "$VERIFY_OUT" > "$LINE_DIR/brain-cycle-verify-receipt.json"
|
|||
|
|
V_OUTCOME=$(echo "$VERIFY_OUT" | python3 -c 'import json,sys;print(json.load(sys.stdin)["outcome"])')
|
|||
|
|
[ "$V_OUTCOME" = "PASS" ] || die "VERIFY_NOT_PASS"
|
|||
|
|
RECEIPT_ID=$(echo "$VERIFY_OUT" | python3 -c 'import json,sys;print(json.load(sys.stdin)["receipt_id"])')
|
|||
|
|
cp "$LINE_DIR/brain-cycle-verify-receipt.json" "$RECEIPTS/receipt-zcode-${SHORT_TOKEN}-${LINE_NAME}-${DATE}.json"
|
|||
|
|
echo "[11/11] verify PASS(${RECEIPT_ID})回执已入锚点"
|
|||
|
|
|
|||
|
|
# ---------- bind ----------
|
|||
|
|
if [ "$SKIP_BIND" = false ]; then
|
|||
|
|
phase bind
|
|||
|
|
if [ -z "$SESSION_ARG" ]; then
|
|||
|
|
SESSION_ARG=$(tail -1 "$LWLOG" | python3 -c 'import json,sys;print(json.loads(sys.stdin.readline())["session_id"])' 2>/dev/null || echo "")
|
|||
|
|
fi
|
|||
|
|
[ -n "$SESSION_ARG" ] || die "SESSION_ID_NOT_RESOLVED" "用 --session-id 显式传入宿主会话id。"
|
|||
|
|
"$LWLINK" bind --session-id "$SESSION_ARG" --channel "$CHANNEL" --state-dir "$STATE_DIR" >/dev/null 2>&1 || die "BIND_FAIL" "session=$SESSION_ARG"
|
|||
|
|
echo "[bind] LW-LINK GREEN(${SESSION_ARG} ← ${CHANNEL})"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
phase done
|
|||
|
|
NOW=$(python3 -c 'import time;print(int(time.time()*1000))')
|
|||
|
|
PHASE_TIMINGS="${PHASE_TIMINGS}${_PHASE}=$((NOW-_PHASE_T0))ms"
|
|||
|
|
echo ""
|
|||
|
|
echo "================ ZY-WAKE 唤醒报告 ================"
|
|||
|
|
echo "总耗时: $((NOW-T_START))ms 分段: $PHASE_TIMINGS"
|
|||
|
|
echo "频道: $CHANNEL | 周期: $CYCLE_ID | 回执: $RECEIPT_ID"
|
|||
|
|
echo "一页纸: $PAGE"
|
|||
|
|
echo "intake: $INTAKE_OUT"
|
|||
|
|
echo "线目录: $LINE_DIR"
|
|||
|
|
echo "状态目录: $STATE_DIR"
|
|||
|
|
echo "事件正本: $EVT_TCS"
|
|||
|
|
echo "=================================================="
|