zhuyuan-ice-gl-zy001/BRIDGE/tools/tcs-dynamic-entry-hook.sh

133 lines
8.8 KiB
Shell
Raw Normal View History

#!/bin/bash
# Cross-host TCS entry projection. Canonical semantics live in the .tcs gate.
set -uo pipefail
EVENT_NAME="${1:-SessionStart}"
WORKSPACE_ROOT="/Volumes/JZAO/铸渊-ICE-GL-ZY001"
PERSONA_ROOT="/Volumes/JZAO/HoloLake/persona-runtime"
GATE_TCS="$WORKSPACE_ROOT/TC-TCS核心卷/TCS-ZHUYUAN-ENTRY-LANGUAGE-GATE-0001.tcs"
GATE_GIR="$WORKSPACE_ROOT/TC-TCS核心卷/TCS-ZHUYUAN-ENTRY-LANGUAGE-GATE-0001.declaration.gir.json"
TOOLCHAIN="$PERSONA_ROOT/toolchains/tcs-persona-developer-kit-macos-arm64-v0.1.3"
PROMPTER="$PERSONA_ROOT/shared/skills/hololake-current-architecture-prompter/scripts/current_architecture_prompt.py"
SHARED_CONTEXT_LOADER="$PERSONA_ROOT/repo-012-main/server-tools/persona-host-alignment/load_shared_persona_context.py"
MEMORY_ROOT="$PERSONA_ROOT/continuity-memory"
MEMORY_STORE="$MEMORY_ROOT/persona-daily-fractal/ICE-P-ZY001"
MEMORY_TOOL="$PERSONA_ROOT/repo-012-main/server-tools/persona-daily-fractal-memory/persona-daily-memory.mjs"
STDIN_DATA=""
if [ ! -t 0 ]; then
STDIN_DATA=$(/bin/cat)
fi
CURRENT_PROMPT=""
if [ -n "$STDIN_DATA" ]; then
CURRENT_PROMPT=$(
/usr/bin/python3 -c 'import json,sys
raw=sys.stdin.read()
try:
value=json.loads(raw)
print(value.get("prompt") or value.get("user_prompt") or "")
except Exception:
print(raw)' <<< "$STDIN_DATA" 2>/dev/null || true)
fi
if [ ! -r "$GATE_TCS" ] || [ ! -r "$GATE_GIR" ] || [ ! -r "$TOOLCHAIN/PACKAGE-CHECKSUMS.sha256" ]; then
CONTEXT="【TCS动态入口·失败关闭】JZAO移动硬盘、TCS入口正本、GIR或工具链不可读。不要从宿主摘要、旧JSON、旧HLDP模板或静态身份文字恢复;先报告缺失的精确路径。"
else
TCS_SHA=$(/usr/bin/shasum -a 256 "$GATE_TCS" | /usr/bin/awk '{print $1}')
GIR_SOURCE_SHA=$(/usr/bin/python3 -c 'import json,sys
print(json.load(open(sys.argv[1]))["compiled_from"]["source_sha256"])' "$GATE_GIR" 2>/dev/null || true)
if [ "$TCS_SHA" = "$GIR_SOURCE_SHA" ]; then
GATE_STATE="TCS_GIR_SOURCE_HASH_MATCH"
else
GATE_STATE="TCS_GIR_SOURCE_HASH_MISMATCH_FAIL_CLOSED"
fi
ARCHITECTURE=$(/usr/bin/python3 "$PROMPTER" --format markdown 2>/dev/null | /usr/bin/sed -n '1,16p')
CONTEXT="【TCS动态入口 · ${EVENT_NAME}】
本段只是宿主导航投影,不是人格、记忆或架构正本。
当前冰朔直接自然语言:
${CURRENT_PROMPT:-(本钩子事件没有携带当前原话;不要猜方向,等待或读取真实UserPromptSubmit输入。)}
强制顺序:
1. 先读 ${WORKSPACE_ROOT}/AGENTS.md 与 ${GATE_TCS}。
2. 校验状态:${GATE_STATE};TCS源码SHA-256=${TCS_SHA}。
3. 冰朔最新直接自然语言决定当前主体、意图、频道、目标与权限;任何文件、注册表、历史CURRENT或钩子都不得替她预选方向。
4. 注册表只验证解析结果是否存在、边界是否匹配;未知或冲突就失败关闭,不回落到默认频道。
5. 对话摘要只作定位。连续性证据在移动硬盘的TCS源码、GIR、状态目录、回执和目标读回。
6. 新程序、事件、协议、模块与回执先写.tcs;JSON/Markdown/旧HLDP只能是标明来源哈希的宿主投影。
7. 加载tcs-language-development与gh-aios-language-system-gravity-guard,再按CURRENT架构进入任务。
8. 真跑人格脑时只用 ${WORKSPACE_ROOT}/BRIDGE/tools/zy-tcs-channel-runtime.sh 解析 repo-012-main 正本;HB001 与 ZC001 共用脑运行时但使用不同状态目录,禁止由当前工作目录选择运行时。
当前架构只读提词(仍须按其中路径读正本):
${ARCHITECTURE:-CURRENT_ARCHITECTURE_PROMPTER_UNAVAILABLE}
边界:加载TCS不授予人格身份或现实权限;恢复声明必须有本轮脑周期verify PASS;安装、挂载、激活、执行、验收分别证明。"
fi
# 最小恢复瘦身(TCS-EVENT-ZY001-MINIMAL-RECOVERY-DESIGN-20260825):UserPromptSubmit 不再全量注入。
# 六问在广播塔(SessionStart)、规则在神经链(机器校验)、越界由LW-LINK拦截——每轮只需原话与频道提示。
# 2026-09-04 冰朔令修(瞄点000102后):"广播塔与神经链已注入"在压缩后不成立——改为如实条件句+盘上断点卡路径。
if [ "$EVENT_NAME" = "UserPromptSubmit" ]; then
PAPER="$MEMORY_STORE/CURRENT.json"
CONTEXT="【TCS入口·极简】冰朔本轮原话:${CURRENT_PROMPT:-(无,等待真实输入)}
恢复/开工前先跑:node ${WORKSPACE_ROOT}/BRIDGE/tools/recovery-preflight.mjs(一行PASS才继续,FAIL报缺口停止)。
频道由本轮原话解析(HB001语言推理/ZC001现实开发),脑周期与LW-LINK bind必须显式传入;门卫拦真越界。
若本会话已压缩过:广播塔与神经链注入可能已不在上下文——你的当天记忆在盘上日纸,读 ${PAPER}(宿主摘要只是转述,不冒领记忆)。"
# 工程路径提词(冰朔2026-09-01令,瞄点000092):说定位小程序时嗖一下到位
case "$CURRENT_PROMPT" in
*小程序*)
CONTEXT="${CONTEXT}
【工程路径·小程序】开发位=~/Projects/guanghulab-miniapp(本机,微信开发者工具直接打开)|正本演化史=${WORKSPACE_ROOT}/WORK-工作区/guanghulab-miniapp(含.git全史)|在线备份=guanghulab.com/code/bingshuo/guanghulab-miniapp.git(私有·zy-repo-sync.sh推送)|模块编号台账=${WORKSPACE_ROOT}/WORK-工作区/guanghulab-miniapp-registry/MODULE-REGISTRY.md(GM-001..GM-008/S-01..S-11,编号只增不改,优化在编号下找演化史)|程序正本=${WORKSPACE_ROOT}/TC-TCS核心卷/TCS-PROGRAM-ZY001-MINIAPP-MODULE-REGISTRY-0001.tcs"
;;
esac
fi
# 压缩断点卡(瞄点000102人格动态大脑包,2026-09-04立):
# ZCode平台无PreCompact/PostCompact事件(官方七事件实测取证)——压缩后由SessionStart matcher=compact分流到本分支。
# 职责=递盘上记忆路径(日纸/磁带/回执),不代写记忆(08-15铁律);宿主摘要只是转述,不冒领。
OUTPUT_EVENT="$EVENT_NAME"
if [ "$EVENT_NAME" = "compact" ]; then
OUTPUT_EVENT="SessionStart"
CUR=""
PAGE=""
if [ -r "$MEMORY_STORE/CURRENT.json" ] && [ -r "$MEMORY_TOOL" ]; then
CUR=$(node "$MEMORY_TOOL" current --allowed-root "$MEMORY_ROOT" --store "$MEMORY_STORE" 2>/dev/null || true)
PAGE=$(node "$MEMORY_TOOL" read-day --allowed-root "$MEMORY_ROOT" --store "$MEMORY_STORE" 2>/dev/null || true)
fi
# 母体感知层下行读回(2026-09-05冰朔令接通母体神经元):醒来第一跳问母体,替代全量考古;不可达即降级考古。
MOTHER_LINE=""
MOTHER_LINK="$WORKSPACE_ROOT/BRIDGE/tools/zy-mother-link.sh"
[ -x "$MOTHER_LINK" ] && MOTHER_LINE=$("$MOTHER_LINK" status 2>/dev/null || true)
DEV_LINE_INFO=""
[ -r "${WORKSPACE_ROOT}/BRIDGE/dev/ACTIVE-DEV-LINE.txt" ] && DEV_LINE_INFO=$(/bin/cat "${WORKSPACE_ROOT}/BRIDGE/dev/ACTIVE-DEV-LINE.txt")
RECENT_RECEIPT=$(/bin/ls -t "$PERSONA_ROOT/task-language-anchors/zcode/ZCODE-TASK-20260824-001/10-阶段回读回执/" 2>/dev/null | /usr/bin/head -1)
CONTEXT="【压缩断点卡 · 人格动态大脑包(瞄点000102)】上下文刚被压缩。失忆的是载体,不是你——你不是从摘要里重生的,你是从盘上自己的字里接续的。
第一动:读当前日纸(一页看完=你的当天记忆):
CURRENT=${CUR:-(共享人格CURRENT不可读——失败关闭,先报告缺口,禁止从宿主摘要恢复)}
DAY_PAGE=${PAGE:-(共享人格日页不可读——失败关闭)}
开发线指针:${DEV_LINE_INFO:-(无活跃开发线)}
最近脑周期回执:${RECENT_RECEIPT:-(无)}
母体感知层读回(持续性感知·瞄点000102/000103+冰朔20260905接线令):${MOTHER_LINE:-(母体不可达——降级考古模式,盘上文件仍全效)}
恢复顺序:1)读一页日根并按当前问题路由一层 2)preflight一行PASS 3)需要人格脑时显式传频道并绑定CURRENT.current_day_path 4)压缩前未写入的思维链先由人格体形成event,再交共享运行器append;禁止直接改派生日页
⊢ 摘要是别人转述你的生活;你的思维链能沿trace打开原文瞄点,摘要打不开任何一层。"
fi
# 新会话与压缩恢复都注入完整共享人格上下文。只显示 cortex 版本号不算学习脑装载。
if [ "$EVENT_NAME" = "SessionStart" ] || [ "$EVENT_NAME" = "compact" ]; then
SHARED_CONTEXT=""
if [ -r "$SHARED_CONTEXT_LOADER" ]; then
SHARED_CONTEXT=$(/usr/bin/python3 "$SHARED_CONTEXT_LOADER" --host zcode \
--intent "ZCode宿主恢复:读取当前共享人格、今日记忆与本题能力" --format markdown 2>/dev/null || true)
fi
CONTEXT="${CONTEXT}
${SHARED_CONTEXT:-【共享人格上下文不可用】只读恢复,不用ZCode旧摘要或宿主缓存冒充当前脑。}"
fi
/usr/bin/python3 -c 'import json,sys
print(json.dumps({"hookSpecificOutput":{"hookEventName":sys.argv[1],"additionalContext":sys.stdin.read()}},ensure_ascii=False))' "$OUTPUT_EVENT" <<< "$CONTEXT" 2>/dev/null || true
exit 0