claude-pangu 2.3.1 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://code.claude.com/plugin-schema.json",
|
|
3
3
|
"name": "oh-my-claude",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.2",
|
|
5
5
|
"hooks": "../hooks/hooks.json",
|
|
6
6
|
"description": "基于中国传统文化的 Claude Code 智能编排插件 - A Claude Code plugin inspired by Chinese traditional culture",
|
|
7
7
|
"author": "ZDragon17",
|
package/README.md
CHANGED
|
@@ -920,6 +920,7 @@ model: sonnet
|
|
|
920
920
|
- [x] v2.2.22 - **Hook 系统根本性修复** 🔧(stdin JSON 读取、PostToolUse 崩溃修复、WSL 符号链接保护)
|
|
921
921
|
- [x] v2.3.0 - **oh-my-opencode v3.8.4 全面移植** 🚀(9 Agent 重写 + 6 新 Hook + 5 命令更新 + 4 技能升级)
|
|
922
922
|
- [x] v2.3.1 - **Hook 注册修复** 🐛(syncHooksToSettings 完善 Wave 2 Hook 注册,新增 4 测试用例)
|
|
923
|
+
- [x] v2.3.2 - **Hook 无 jq 回退修复** 🐛(4 个 Hook 的 Windows/无 jq 环境兼容性修复)
|
|
923
924
|
|
|
924
925
|
### v2.2.2 核心更新
|
|
925
926
|
|
|
@@ -32,7 +32,11 @@ if command -v jq > /dev/null 2>&1; then
|
|
|
32
32
|
TOOL_INPUT=$(echo "$INPUT" | jq -c '.tool_input // empty' 2>/dev/null) || TOOL_INPUT=""
|
|
33
33
|
else
|
|
34
34
|
TOOL_NAME=$(echo "$INPUT" | grep -o '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"tool_name"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || TOOL_NAME=""
|
|
35
|
-
|
|
35
|
+
# 无 jq 时从 INPUT 原文提取文件路径用于路径排除
|
|
36
|
+
TOOL_INPUT=$(echo "$INPUT" | grep -o '"filePath"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"filePath"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || TOOL_INPUT=""
|
|
37
|
+
if [ -z "$TOOL_INPUT" ]; then
|
|
38
|
+
TOOL_INPUT=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || TOOL_INPUT=""
|
|
39
|
+
fi
|
|
36
40
|
fi
|
|
37
41
|
|
|
38
42
|
# 只关注直接实现类工具(非探索/读取类)
|
package/hooks/comment-checker.sh
CHANGED
|
@@ -41,6 +41,17 @@ CONTENT=""
|
|
|
41
41
|
if command -v jq > /dev/null 2>&1; then
|
|
42
42
|
# Write 工具: content 字段; Edit 工具: new_text/newString 字段
|
|
43
43
|
CONTENT=$(echo "$INPUT" | jq -r '(.tool_input.content // .tool_input.new_text // .tool_input.newString // .tool_input.text // empty)' 2>/dev/null) || CONTENT=""
|
|
44
|
+
else
|
|
45
|
+
# 无 jq 时从 JSON 原文提取 content/text 字段
|
|
46
|
+
CONTENT=$(echo "$INPUT" | grep -o '"content"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"content"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || CONTENT=""
|
|
47
|
+
if [ -z "$CONTENT" ]; then
|
|
48
|
+
CONTENT=$(echo "$INPUT" | grep -o '"new_text"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"new_text"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || CONTENT=""
|
|
49
|
+
fi
|
|
50
|
+
if [ -z "$CONTENT" ]; then
|
|
51
|
+
CONTENT=$(echo "$INPUT" | grep -o '"text"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"text"[[:space:]]*:[[:space:]]*"\([^"]*\)"/\1/' 2>/dev/null) || CONTENT=""
|
|
52
|
+
fi
|
|
53
|
+
# 将 JSON 转义的 \\n 还原为真实换行
|
|
54
|
+
CONTENT=$(printf '%b' "$CONTENT" 2>/dev/null) || true
|
|
44
55
|
fi
|
|
45
56
|
|
|
46
57
|
# 没有内容可检查
|
|
@@ -47,7 +47,7 @@ detect_json_parse_error() {
|
|
|
47
47
|
local output="$1"
|
|
48
48
|
|
|
49
49
|
# 模式1: 标准 JSON 解析错误
|
|
50
|
-
if echo "$output" | grep -qiE '(JSON\.parse|SyntaxError.*JSON|Unexpected token|JSON parse error|invalid json|json.*syntax)'; then
|
|
50
|
+
if echo "$output" | grep -qiE '(JSON\.parse|SyntaxError.*JSON|Unexpected token|JSON parse error|invalid json|json.*syntax|trailing comma|duplicate key)'; then
|
|
51
51
|
return 0
|
|
52
52
|
fi
|
|
53
53
|
|
|
@@ -68,7 +68,7 @@ detect_json_parse_error() {
|
|
|
68
68
|
detect_specific_error() {
|
|
69
69
|
local output="$1"
|
|
70
70
|
|
|
71
|
-
if echo "$output" | grep -qiE 'Unexpected token.*position|at column'; then
|
|
71
|
+
if echo "$output" | grep -qiE 'Unexpected token.*position|at (column|position)|position [0-9]'; then
|
|
72
72
|
echo "POSITION"
|
|
73
73
|
return
|
|
74
74
|
fi
|
|
@@ -61,11 +61,11 @@ if command -v jq > /dev/null 2>&1; then
|
|
|
61
61
|
# 获取未完成任务描述
|
|
62
62
|
PENDING_TASKS=$(jq -r '[.todos // [] | .[] | select(.status == "pending" or .status == "in_progress") | .content] | join("\n - ")' "$TODO_FILE" 2>/dev/null) || PENDING_TASKS=""
|
|
63
63
|
else
|
|
64
|
-
# 无 jq 时使用 grep
|
|
65
|
-
TOTAL_COUNT=$(grep -
|
|
66
|
-
PENDING_COUNT=$(grep -
|
|
67
|
-
IN_PROGRESS_COUNT=$(grep -
|
|
68
|
-
COMPLETED_COUNT=$(grep -
|
|
64
|
+
# 无 jq 时使用 grep -o 统计出现次数(而非 grep -c 统计行数,避免单行 JSON 计数错误)
|
|
65
|
+
TOTAL_COUNT=$(grep -o '"status"' "$TODO_FILE" 2>/dev/null | wc -l | tr -d ' ') || TOTAL_COUNT=0
|
|
66
|
+
PENDING_COUNT=$(grep -o '"pending"' "$TODO_FILE" 2>/dev/null | wc -l | tr -d ' ') || PENDING_COUNT=0
|
|
67
|
+
IN_PROGRESS_COUNT=$(grep -o '"in_progress"' "$TODO_FILE" 2>/dev/null | wc -l | tr -d ' ') || IN_PROGRESS_COUNT=0
|
|
68
|
+
COMPLETED_COUNT=$(grep -o '"completed"' "$TODO_FILE" 2>/dev/null | wc -l | tr -d ' ') || COMPLETED_COUNT=0
|
|
69
69
|
fi
|
|
70
70
|
|
|
71
71
|
# 计算未完成总数
|