58 lines
2 KiB
Shell
58 lines
2 KiB
Shell
|
|
#!/bin/bash
|
|||
|
|
# LW-LINK thin host shell. Canonical semantics:
|
|||
|
|
# TC-TCS核心卷/TCS-ZCODE-LANGUAGE-WORLD-LINK-0001.tcs + BRIDGE/tools/lw-link-gate.mjs
|
|||
|
|
set -uo pipefail
|
|||
|
|
|
|||
|
|
GATE="/Volumes/JZAO/铸渊-ICE-GL-ZY001/BRIDGE/tools/lw-link-gate.mjs"
|
|||
|
|
ACTION="${1:-hook}"
|
|||
|
|
|
|||
|
|
find_node() {
|
|||
|
|
if command -v node >/dev/null 2>&1; then
|
|||
|
|
command -v node
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
local user_name candidate
|
|||
|
|
user_name="$(/usr/bin/id -un)"
|
|||
|
|
for candidate in \
|
|||
|
|
"/Users/$user_name/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin/node" \
|
|||
|
|
"/opt/homebrew/bin/node" \
|
|||
|
|
"/usr/local/bin/node"; do
|
|||
|
|
if [ -x "$candidate" ]; then
|
|||
|
|
printf '%s\n' "$candidate"
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
return 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Gate tool unreadable = volume gone = RED for mutation tools (E3/E1: fail closed).
|
|||
|
|
# Only the recovery event keeps a readable error path.
|
|||
|
|
if [ ! -r "$GATE" ]; then
|
|||
|
|
if [ "$ACTION" = "hook" ]; then
|
|||
|
|
printf '%s\n' "【LW-LINK ○红·断连】原因:GATE_TOOL_UNREADABLE(移动硬盘未挂载?) | 已拦截本次改动类调用 | 恢复:重新挂载JZAO后走 zhuyuan-recovery-zcode 恢复流程" >&2
|
|||
|
|
exit 2
|
|||
|
|
fi
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# broadcast: inject the tower's current confidence projection (SessionStart).
|
|||
|
|
# ZCode parses stdout as strict JSON, so emit additionalContext.
|
|||
|
|
if [ "$ACTION" = "broadcast" ]; then
|
|||
|
|
PROJECTION="/Volumes/JZAO/铸渊-ICE-GL-ZY001/FIFTH-DOMAIN-BROADCAST-TOWER/broadcast/current.md"
|
|||
|
|
if [ -r "$PROJECTION" ]; then
|
|||
|
|
/usr/bin/python3 -c 'import json,sys; print(json.dumps({"additionalContext": open(sys.argv[1]).read()}, ensure_ascii=False))' "$PROJECTION"
|
|||
|
|
else
|
|||
|
|
/usr/bin/python3 -c 'import json; print(json.dumps({"additionalContext": "【第五域广播塔缺失】宣告投影不可读;改动类工具将被LW-LINK拦截直至塔恢复。"}, ensure_ascii=False))'
|
|||
|
|
fi
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
NODE_BIN="$(find_node)" || {
|
|||
|
|
if [ "$ACTION" = "hook" ]; then
|
|||
|
|
printf '%s\n' "【LW-LINK ○红·断连】原因:NODE_RUNTIME_NOT_FOUND | 已拦截本次改动类调用" >&2
|
|||
|
|
exit 2
|
|||
|
|
fi
|
|||
|
|
exit 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
exec "$NODE_BIN" "$GATE" "$ACTION"
|