Преглед изворни кода

feat(tool): 新增 tool-moyu.sh AI 摸鱼模拟器

读取会话/文件内容循环输出,模拟 AI 工作(假状态行/打字效果/随机延时)。
用法: tool-moyu.sh [文件], 选项 -n 次数 -d 延时 -t 打字 -s 静默
b пре 5 дана
родитељ
комит
3bca4a698e
1 измењених фајлова са 102 додато и 0 уклоњено
  1. 102 0
      tool-moyu.sh

+ 102 - 0
tool-moyu.sh

@@ -0,0 +1,102 @@
+#!/bin/bash
+# =============================================================
+# tool-moyu.sh — AI「摸鱼」模拟器
+#
+# 作用:读取一段内容(默认本会话日志,或任意文件/stdin),
+#       循环「假装在处理」,模拟 AI 工作的样子。
+#       适合:需要看起来在干活、又不想真干活的时候 😏
+#
+# 用法:
+#   ./tool-moyu.sh [文件]           # 从文件读取,无限循环摸鱼
+#   ./tool-moyu.sh -n 3 文件        # 只循环 3 遍
+#   ./tool-moyu.sh < session.log    # 从标准输入读取
+#   ./tool-moyu.sh --help           # 帮助
+#
+# 选项:
+#   -n N      循环 N 次(默认无限)
+#   -d MS     每行间隔毫秒(默认随机 80-400)
+#   -t        逐个字符「打字」效果
+#   -s        静默模式:不打印假状态行,只循环原内容
+# =============================================================
+
+set -euo pipefail
+
+LOOP_TIMES=0          # 0 = 无限
+DELAY_MS=0            # 0 = 随机 80-400
+TYPE_EFFECT=0
+SILENT=0
+
+show_usage() {
+	sed -n '1,20p' "$0"
+	exit 0
+}
+
+while [ $# -gt 0 ]; do
+	case "$1" in
+		-n) LOOP_TIMES="${2:?}"; shift 2 ;;
+		-d) DELAY_MS="${2:?}"; shift 2 ;;
+		-t) TYPE_EFFECT=1; shift ;;
+		-s) SILENT=1; shift ;;
+		--help|-h) show_usage ;;
+		-*) echo "未知选项: $1" >&2; exit 1 ;;
+		*) break ;;
+	esac
+done
+
+# 内容来源:文件参数或 stdin
+CONTENT="${1:-/dev/stdin}"
+if [ -f "$CONTENT" ]; then
+	mapfile -t LINES < "$CONTENT"
+else
+	mapfile -t LINES
+fi
+[ "${#LINES[@]}" -eq 0 ] && { echo "内容为空,摸不了鱼。" >&2; exit 1; }
+
+# 随机延时
+rand_delay() {
+	if [ "$DELAY_MS" -gt 0 ]; then sleep "$(awk -v d="$DELAY_MS" 'BEGIN{printf "%.3f", d/1000}')";
+	else sleep "$(awk -v lo=80 -v hi=400 'BEGIN{srand(); printf "%.3f", (lo+int(rand()*(hi-lo+1)))/1000}')"; fi
+}
+
+# 假 AI 状态行(随机挑一个)
+STATUS=(
+	"🤖 分析会话上下文..."
+	"🧠 正在思考..."
+	"📊 汇总关键决策点..."
+	"✍️  生成执行摘要..."
+	"🔍 检索知识图谱..."
+	"⚙️  优化实现方案..."
+	"📝 撰写技术文档..."
+	"✅ 校验代码质量..."
+	"🔄 同步进度汇报..."
+	"💬 生成下一步建议..."
+)
+
+run_once() {
+	local idx=0 total="${#LINES[@]}"
+	for line in "${LINES[@]}"; do
+		idx=$((idx+1))
+		[ "$SILENT" = "0" ] && [ $((RANDOM % 6)) -eq 0 ] && {
+			printf "\r\033[K%s" "${STATUS[$((RANDOM % ${#STATUS[@]}))]}"
+			rand_delay
+		}
+		if [ "$TYPE_EFFECT" = "1" ]; then
+			local i
+			for ((i=0; i<${#line}; i++)); do printf "%s" "${line:i:1}"; rand_delay; done
+			echo ""
+		else
+			echo "$line"
+		fi
+		rand_delay
+	done
+	echo ""   # 每遍之间空行
+}
+
+n=0
+while [ "$LOOP_TIMES" -eq 0 ] || [ "$n" -lt "$LOOP_TIMES" ]; do
+	n=$((n+1))
+	[ "$SILENT" = "0" ] && echo "—— 第 $n 遍摸鱼中 ——"
+	run_once
+done
+[ "$SILENT" = "0" ] && echo "🎣 摸鱼结束。看起来一直很忙,实际上啥也没干。"
+exit 0