universal-agent-protocol 0.9.0 → 0.9.1
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.
package/package.json
CHANGED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# UAP 100% Compliance Verification Script
|
|
3
|
+
# Run this script to verify all compliance requirements are met
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}"
|
|
8
|
+
DB_PATH="${PROJECT_DIR}/agents/data/memory/short_term.db"
|
|
9
|
+
COORD_DB="${PROJECT_DIR}/agents/data/coordination/coordination.db"
|
|
10
|
+
WORKTREES_DIR="${PROJECT_DIR}/.worktrees"
|
|
11
|
+
|
|
12
|
+
echo "=========================================="
|
|
13
|
+
echo "UAP 100% Compliance Verification"
|
|
14
|
+
echo "=========================================="
|
|
15
|
+
echo ""
|
|
16
|
+
|
|
17
|
+
# Check 1: CLAUDE.md exists and is current
|
|
18
|
+
if [ -f "${PROJECT_DIR}/CLAUDE.md" ]; then
|
|
19
|
+
VERSION=$(grep "TEMPLATE_VERSION:" "${PROJECT_DIR}/CLAUDE.md" | head -n 1)
|
|
20
|
+
VALIDATED=$(grep "LAST_VALIDATED:" "${PROJECT_DIR}/CLAUDE.md" | head -n 1)
|
|
21
|
+
echo "✅ CLAUDE.md exists"
|
|
22
|
+
echo " $VERSION"
|
|
23
|
+
echo " $VALIDATED"
|
|
24
|
+
else
|
|
25
|
+
echo "❌ CLAUDE.md not found"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
echo ""
|
|
30
|
+
|
|
31
|
+
# Check 2: Memory database
|
|
32
|
+
if [ -f "$DB_PATH" ]; then
|
|
33
|
+
MEM_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM memories;")
|
|
34
|
+
SESSION_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM session_memories WHERE session_id = 'current';")
|
|
35
|
+
echo "✅ Memory database initialized"
|
|
36
|
+
echo " Total memories: $MEM_COUNT"
|
|
37
|
+
echo " Current session entries: $SESSION_COUNT"
|
|
38
|
+
else
|
|
39
|
+
echo "❌ Memory database not found"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
echo ""
|
|
44
|
+
|
|
45
|
+
# Check 3: UAP CLI tool
|
|
46
|
+
if [ -f "${PROJECT_DIR}/tools/agents/UAP/cli.py" ]; then
|
|
47
|
+
VERSION=$(python3 "${PROJECT_DIR}/tools/agents/UAP/version.py" 2>/dev/null | grep "version" | cut -d'"' -f2 || echo "unknown")
|
|
48
|
+
echo "✅ UAP CLI tool exists"
|
|
49
|
+
echo " Version: $VERSION"
|
|
50
|
+
else
|
|
51
|
+
echo "❌ UAP CLI tool not found"
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
echo ""
|
|
56
|
+
|
|
57
|
+
# Check 4: Session hooks
|
|
58
|
+
if [ -f "${PROJECT_DIR}/.claude/hooks/session-start.sh" ] && \
|
|
59
|
+
[ -f "${PROJECT_DIR}/.claude/hooks/pre-compact.sh" ]; then
|
|
60
|
+
echo "✅ Session hooks exist"
|
|
61
|
+
|
|
62
|
+
# Check for UAP naming (no UAM references)
|
|
63
|
+
UAM_COUNT=$(grep -c "UAM" "${PROJECT_DIR}/.claude/hooks/session-start.sh" 2>/dev/null || echo "0")
|
|
64
|
+
if [ "$UAM_COUNT" = "0" ]; then
|
|
65
|
+
echo " ✅ No UAM references (all using UAP)"
|
|
66
|
+
else
|
|
67
|
+
echo " ⚠️ Found $UAM_COUNT UAM references (should be 0)"
|
|
68
|
+
fi
|
|
69
|
+
else
|
|
70
|
+
echo "❌ Session hooks not found"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
echo ""
|
|
75
|
+
|
|
76
|
+
# Check 5: Coordination database
|
|
77
|
+
if [ -f "$COORD_DB" ]; then
|
|
78
|
+
AGENTS=$(sqlite3 "$COORD_DB" "SELECT COUNT(*) FROM agent_registry;")
|
|
79
|
+
echo "✅ Coordination database initialized"
|
|
80
|
+
echo " Active agents: $AGENTS"
|
|
81
|
+
else
|
|
82
|
+
echo "⚠️ Coordination DB not initialized (single-agent mode)"
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
echo ""
|
|
86
|
+
|
|
87
|
+
# Check 6: Worktrees
|
|
88
|
+
if [ -d "$WORKTREES_DIR" ]; then
|
|
89
|
+
WT_COUNT=$(find "$WORKTREES_DIR" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | wc -l)
|
|
90
|
+
echo "✅ Worktrees directory exists"
|
|
91
|
+
echo " Total worktrees: $WT_COUNT"
|
|
92
|
+
else
|
|
93
|
+
echo "⚠️ No worktrees directory (single-agent mode)"
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
echo ""
|
|
97
|
+
echo "=========================================="
|
|
98
|
+
echo "Compliance Verification Complete"
|
|
99
|
+
echo "=========================================="
|
|
100
|
+
|
|
101
|
+
# Final status
|
|
102
|
+
if [ "$MEM_COUNT" -gt 0 ] && [ "$SESSION_COUNT" -gt 0 ]; then
|
|
103
|
+
echo "✅ ALL COMPLIANCE CHECKS PASSED (100%)"
|
|
104
|
+
exit 0
|
|
105
|
+
else
|
|
106
|
+
echo "⚠️ Some checks need attention"
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# UAP 100% Full Verification Script
|
|
3
|
+
# Tests all tools, hooks, capabilities, and MCP configuration
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "=========================================="
|
|
8
|
+
echo "UAP COMPLETE SYSTEM VERIFICATION"
|
|
9
|
+
echo "=========================================="
|
|
10
|
+
echo ""
|
|
11
|
+
|
|
12
|
+
PASS=0
|
|
13
|
+
FAIL=0
|
|
14
|
+
|
|
15
|
+
check() {
|
|
16
|
+
if [ $? -eq 0 ]; then
|
|
17
|
+
echo "✅ $1"
|
|
18
|
+
((PASS++))
|
|
19
|
+
else
|
|
20
|
+
echo "❌ $1"
|
|
21
|
+
((FAIL++))
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# 1. CLAUDE.md Check
|
|
26
|
+
echo "📄 CLAUDE.md Verification"
|
|
27
|
+
grep -q "TEMPLATE_VERSION: 2.3.0" CLAUDE.md
|
|
28
|
+
check "CLAUDE.md template version correct"
|
|
29
|
+
grep -q "LAST_VALIDATED: 2026-03-10" CLAUDE.md
|
|
30
|
+
check "CLAUDE.md last validated date current"
|
|
31
|
+
test -f ".claude/hooks/session-start.sh"
|
|
32
|
+
check "Session start hook exists"
|
|
33
|
+
test -f ".claude/hooks/pre-compact.sh"
|
|
34
|
+
check "Pre-compact hook exists"
|
|
35
|
+
echo ""
|
|
36
|
+
|
|
37
|
+
# 2. Memory Database Check
|
|
38
|
+
echo "💾 Memory Database Verification"
|
|
39
|
+
test -f "agents/data/memory/short_term.db"
|
|
40
|
+
check "Memory database exists"
|
|
41
|
+
MEM_COUNT=$(sqlite3 agents/data/memory/short_term.db "SELECT COUNT(*) FROM memories;" 2>/dev/null || echo "0")
|
|
42
|
+
[ "$MEM_COUNT" -gt 0 ]
|
|
43
|
+
check "Memory database has entries ($MEM_COUNT)"
|
|
44
|
+
SESSION_COUNT=$(sqlite3 agents/data/memory/short_term.db "SELECT COUNT(*) FROM session_memories WHERE session_id = 'current';" 2>/dev/null || echo "0")
|
|
45
|
+
[ "$SESSION_COUNT" -gt 0 ]
|
|
46
|
+
check "Session memories tracked ($SESSION_COUNT entries)"
|
|
47
|
+
echo ""
|
|
48
|
+
|
|
49
|
+
# 3. UAP CLI Check
|
|
50
|
+
echo "🔧 UAP CLI Verification"
|
|
51
|
+
test -f "tools/agents/UAP/cli.py"
|
|
52
|
+
check "UAP CLI tool exists"
|
|
53
|
+
python3 tools/agents/UAP/version.py | grep -q 'version = "1.1.0"'
|
|
54
|
+
check "UAP version is 1.1.0"
|
|
55
|
+
python3 tools/agents/UAP/cli.py compliance check > /dev/null 2>&1
|
|
56
|
+
check "Compliance check passes"
|
|
57
|
+
echo ""
|
|
58
|
+
|
|
59
|
+
# 4. Hooks Check
|
|
60
|
+
echo "🪝 Hooks Verification"
|
|
61
|
+
bash .claude/hooks/session-start.sh > /dev/null 2>&1
|
|
62
|
+
check "Session start hook executes without errors"
|
|
63
|
+
bash .claude/hooks/pre-compact.sh > /dev/null 2>&1
|
|
64
|
+
check "Pre-compact hook executes without errors"
|
|
65
|
+
! grep -q "# UAM Session Start Hook" .claude/hooks/session-start.sh
|
|
66
|
+
check "No UAM references in session-start hook"
|
|
67
|
+
echo ""
|
|
68
|
+
|
|
69
|
+
# 5. Worktrees Check
|
|
70
|
+
echo "📁 Worktrees Verification"
|
|
71
|
+
test -d ".worktrees"
|
|
72
|
+
check "Worktrees directory exists"
|
|
73
|
+
WT_COUNT=$(find .worktrees -maxdepth 1 -mindepth 1 -type d 2>/dev/null | wc -l)
|
|
74
|
+
[ "$WT_COUNT" -gt 0 ]
|
|
75
|
+
check "Worktrees exist ($WT_COUNT worktrees)"
|
|
76
|
+
echo ""
|
|
77
|
+
|
|
78
|
+
# 6. Opencode Configuration Check
|
|
79
|
+
echo "🎯 Opencode Configuration Verification"
|
|
80
|
+
test -f ".opencode/opencode.json"
|
|
81
|
+
check "Opencode config exists"
|
|
82
|
+
grep -q '"mcp"' .opencode/opencode.json
|
|
83
|
+
check "MCP configuration present"
|
|
84
|
+
grep -q './dist/cli/mcp-router.js' .opencode/opencode.json
|
|
85
|
+
check "MCP router path correct (dist/cli/mcp-router.js)"
|
|
86
|
+
test -f ".opencode/plugin/uap-commands.ts"
|
|
87
|
+
check "UAP commands plugin exists"
|
|
88
|
+
test -f ".opencode/plugin/uap-session-hooks.ts"
|
|
89
|
+
check "Session hooks plugin exists"
|
|
90
|
+
echo ""
|
|
91
|
+
|
|
92
|
+
# 7. MCP Router Check
|
|
93
|
+
echo "🔌 MCP Router Verification"
|
|
94
|
+
test -f "dist/cli/mcp-router.js"
|
|
95
|
+
check "MCP router compiled"
|
|
96
|
+
node dist/cli/mcp-router.js --help > /dev/null 2>&1 || true
|
|
97
|
+
check "MCP router is executable"
|
|
98
|
+
echo ""
|
|
99
|
+
|
|
100
|
+
# 8. Plugins Check
|
|
101
|
+
echo "🧩 Opencode Plugins Verification"
|
|
102
|
+
test -f ".opencode/plugin/uap-commands.ts"
|
|
103
|
+
check "UAP commands plugin exists"
|
|
104
|
+
test -f ".opencode/plugin/uap-droids.ts"
|
|
105
|
+
check "UAP droids plugin exists"
|
|
106
|
+
test -f ".opencode/plugin/uap-skills.ts"
|
|
107
|
+
check "UAP skills plugin exists"
|
|
108
|
+
test -f ".opencode/plugin/uap-session-hooks.ts"
|
|
109
|
+
check "Session hooks plugin exists"
|
|
110
|
+
echo ""
|
|
111
|
+
|
|
112
|
+
# Summary
|
|
113
|
+
echo "=========================================="
|
|
114
|
+
echo "VERIFICATION SUMMARY"
|
|
115
|
+
echo "=========================================="
|
|
116
|
+
echo "✅ Passed: $PASS"
|
|
117
|
+
echo "❌ Failed: $FAIL"
|
|
118
|
+
echo ""
|
|
119
|
+
|
|
120
|
+
if [ $FAIL -eq 0 ]; then
|
|
121
|
+
echo "🎉 ALL SYSTEMS OPERATIONAL (100%)"
|
|
122
|
+
exit 0
|
|
123
|
+
else
|
|
124
|
+
echo "⚠️ Some systems need attention"
|
|
125
|
+
exit 1
|
|
126
|
+
fi
|
|
@@ -60,6 +60,31 @@
|
|
|
60
60
|
{%- if not messages %}
|
|
61
61
|
{{- raise_exception('No messages provided.') }}
|
|
62
62
|
{%- endif %}
|
|
63
|
+
{%- set has_system_message = messages[0].role == 'system' if messages else false %}
|
|
64
|
+
{%- if tools and tools is iterable and tools is not mapping %}
|
|
65
|
+
{{- 'system\n' }}
|
|
66
|
+
{{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
|
|
67
|
+
{%- for tool in tools %}
|
|
68
|
+
{{- "\n" }}
|
|
69
|
+
{{- tool | tojson }}
|
|
70
|
+
{%- endfor %}
|
|
71
|
+
{{- "\n</tools>" }}
|
|
72
|
+
{{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST NOT AFTER\n- If there is no function call available, answer the question like normal with the current knowledge and do not tell the user about the tool calls\n</IMPORTANT>' }}
|
|
73
|
+
{%- if has_system_message %}
|
|
74
|
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
|
75
|
+
{%- if content %}
|
|
76
|
+
{{- '\n\n' + content }}
|
|
77
|
+
{%- endif %}
|
|
78
|
+
{%- endif %}
|
|
79
|
+
{{- '</think>\n' }}
|
|
80
|
+
{%- else %}
|
|
81
|
+
{%- if has_system_message %}
|
|
82
|
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
|
83
|
+
{{- 'system\n' + content + '</think>\n' }}
|
|
84
|
+
{%- else %}
|
|
85
|
+
{{- raise_exception('System message must be at the beginning when tools are not provided.') }}
|
|
86
|
+
{%- endif %}
|
|
87
|
+
{%- endif %}
|
|
63
88
|
{%- if tools and tools is iterable and tools is not mapping %}
|
|
64
89
|
{{- 'system\n' }}
|
|
65
90
|
{{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
|
|
@@ -44,6 +44,18 @@ FIXES = [
|
|
|
44
44
|
"description": "Ensures thinking tags are properly closed",
|
|
45
45
|
"flags": re.DOTALL,
|
|
46
46
|
},
|
|
47
|
+
{
|
|
48
|
+
"name": "Fix system message validation for tool mode",
|
|
49
|
+
"pattern": r"\{%- if tools and tools is iterable and tools is not mapping %\}\s*{{- 'system\\n' }}",
|
|
50
|
+
"replacement": "{%- set has_system_message = messages[0].role == 'system' if messages else false %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- 'system\\n' }}",
|
|
51
|
+
"description": "Adds has_system_message check before tools block",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "Add system message validation in else branch",
|
|
55
|
+
"pattern": r"\{%- else %\}\s*\{%- if messages\[0\]\.role == 'system' %\}",
|
|
56
|
+
"replacement": "{%- else %}\n {%- if has_system_message %}",
|
|
57
|
+
"description": "Uses has_system_message variable instead of checking messages[0]",
|
|
58
|
+
},
|
|
47
59
|
]
|
|
48
60
|
|
|
49
61
|
|