agent-resource-management 1.3.0
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/.claude/settings.local.json +8 -0
- package/README.md +196 -0
- package/bun.lock +32 -0
- package/data/skills/bad-name-skill/SKILL.md +8 -0
- package/data/skills/github-tool/SKILL.md +11 -0
- package/data/skills/invalid-skill/SKILL.md +3 -0
- package/data/skills/pdf-tool/SKILL.md +11 -0
- package/data/skills/pdf-tool.zip +0 -0
- package/dist/main.js +1330 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/AGENT.md +18 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/345/271/263/345/217/260Loki/346/227/245/345/277/227/346/216/222/346/237/245/346/226/271/346/263/225.md +27 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/345/271/263/345/217/260/344/273/273/345/212/241/350/247/246/345/217/221/345/220/270/346/224/266/345/231/250/344/270/216/345/215/240/344/275/215/350/247/246/345/217/221/345/220/270/346/224/266/345/231/250/344/275/277/347/224/250/345/234/272/346/231/257.md +18 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/345/271/263/345/217/260/345/220/216/347/253/257Swagger/346/216/245/345/217/243/346/226/207/346/241/243.md +22 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/345/271/263/345/217/260/345/275/223/345/211/215/350/277/220/350/241/214/345/256/236/344/276/213/345/217/212/345/256/236/344/276/213/350/277/220/350/241/214/346/227/245/345/277/227/346/216/222/346/237/245.md +39 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/345/271/263/345/217/260/346/216/245/345/217/243/346/216/222/346/237/245/350/203/214/346/231/257/347/237/245/350/257/206.md +49 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//344/273/277/347/234/237/350/264/247/350/275/275/347/224/237/345/221/275/345/221/250/346/234/237/346/237/245/350/257/242/346/265/201/347/250/213.md +165 -0
- package/dist//344/273/277/347/234/237/350/260/203/350/257/225/345/212/251/346/211/213/knowledges//345/244/251/350/275/246/350/260/203/345/272/246/347/263/273/347/273/237/351/207/215/347/273/204/346/216/245/345/217/243/350/260/203/347/224/250/344/270/216/346/227/245/345/277/227/345/210/206/346/236/220/346/226/271/346/263/225.md +137 -0
- package/package.json +20 -0
- package/src/cmd/agent.ts +137 -0
- package/src/cmd/auth.ts +50 -0
- package/src/cmd/knowledge.ts +171 -0
- package/src/cmd/server.ts +11 -0
- package/src/cmd/skill.ts +220 -0
- package/src/lib/client.ts +274 -0
- package/src/lib/formatter.ts +196 -0
- package/src/lib/storage.ts +63 -0
- package/src/lib/validate.ts +210 -0
- package/src/main.ts +235 -0
- package/test-regression.sh +273 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
CLI_DIR="/Users/lk/Documents/Dev/aims/xuanwu/xuanwu-agents/agent-sdk/agent-skill-system/cli"
|
|
4
|
+
DATA_DIR="$CLI_DIR/data/skills"
|
|
5
|
+
SERVER_URL="http://localhost:3000"
|
|
6
|
+
API_KEY="4567c9e607564e91b3898c46d89cb68dc4e40ec4a52b456699b695cf800fd446"
|
|
7
|
+
ADK="/Users/lk/.bun/bin/bun run $CLI_DIR/src/main.ts"
|
|
8
|
+
|
|
9
|
+
RED='\033[0;31m'
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
NC='\033[0m'
|
|
13
|
+
|
|
14
|
+
PASS=0
|
|
15
|
+
FAIL=0
|
|
16
|
+
|
|
17
|
+
pass() {
|
|
18
|
+
echo -e "${GREEN}✓ PASS${NC}: $1"
|
|
19
|
+
PASS=$((PASS + 1))
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
fail() {
|
|
23
|
+
echo -e "${RED}✗ FAIL${NC}: $1"
|
|
24
|
+
echo -e "${YELLOW} Expected: $2${NC}"
|
|
25
|
+
echo -e "${YELLOW} Actual: $3${NC}"
|
|
26
|
+
FAIL=$((FAIL + 1))
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
log() {
|
|
30
|
+
echo -e "${YELLOW}[TEST]${NC} $1"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
cleanup() {
|
|
34
|
+
log "Cleaning up..."
|
|
35
|
+
rm -rf "$DATA_DIR/pdf-tool-downloaded"
|
|
36
|
+
rm -f "$DATA_DIR/test-skill.zip"
|
|
37
|
+
$ADK logout 2>/dev/null || true
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
check_output() {
|
|
41
|
+
local output="$1"
|
|
42
|
+
local expected="$2"
|
|
43
|
+
if echo "$output" | grep -q "$expected"; then
|
|
44
|
+
return 0
|
|
45
|
+
fi
|
|
46
|
+
return 1
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
wait_server() {
|
|
50
|
+
log "Waiting for server to be healthy..."
|
|
51
|
+
for i in {1..10}; do
|
|
52
|
+
if curl -s "$SERVER_URL/api/v1/health" | grep -q "healthy"; then
|
|
53
|
+
return 0
|
|
54
|
+
fi
|
|
55
|
+
sleep 1
|
|
56
|
+
done
|
|
57
|
+
echo -e "${RED}Server not healthy after 10 seconds${NC}"
|
|
58
|
+
exit 1
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
wait_server
|
|
62
|
+
|
|
63
|
+
log "========== Regression Test Suite =========="
|
|
64
|
+
|
|
65
|
+
cleanup
|
|
66
|
+
|
|
67
|
+
echo ""
|
|
68
|
+
log "=== TC-CLI-001: adk login 成功登录 ==="
|
|
69
|
+
output=$($ADK login $SERVER_URL $API_KEY 2>&1)
|
|
70
|
+
if echo "$output" | grep -q "登录成功"; then
|
|
71
|
+
pass "TC-CLI-001: Login successful"
|
|
72
|
+
else
|
|
73
|
+
fail "TC-CLI-001: Login failed" "登录成功" "$output"
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
echo ""
|
|
77
|
+
log "=== Setup: Upload test skills ==="
|
|
78
|
+
$ADK skill upload $DATA_DIR/pdf-tool > /dev/null 2>&1
|
|
79
|
+
$ADK skill upload $DATA_DIR/github-tool > /dev/null 2>&1
|
|
80
|
+
|
|
81
|
+
echo ""
|
|
82
|
+
log "=== TC-CLI-002: adk login 失败 (无效 API Key) ==="
|
|
83
|
+
$ADK logout > /dev/null 2>&1
|
|
84
|
+
output=$($ADK login $SERVER_URL invalid-api-key 2>&1)
|
|
85
|
+
if echo "$output" | grep -q "登录失败"; then
|
|
86
|
+
pass "TC-CLI-002: Login with invalid key fails"
|
|
87
|
+
else
|
|
88
|
+
fail "TC-CLI-002: Should fail with invalid key" "登录失败" "$output"
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
echo ""
|
|
92
|
+
log "=== TC-CLI-003: adk login 失败 (无效 Server URL) ==="
|
|
93
|
+
output=$($ADK login http://invalid:9999 $API_KEY 2>&1)
|
|
94
|
+
if echo "$output" | grep -q "登录失败"; then
|
|
95
|
+
pass "TC-CLI-003: Login with invalid server fails"
|
|
96
|
+
else
|
|
97
|
+
fail "TC-CLI-003: Should fail with invalid server" "登录失败" "$output"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
echo ""
|
|
101
|
+
log "=== TC-CLI-004: adk logout 登出 ==="
|
|
102
|
+
$ADK login $SERVER_URL $API_KEY > /dev/null 2>&1
|
|
103
|
+
output=$($ADK logout 2>&1)
|
|
104
|
+
if echo "$output" | grep -q "已退出登录"; then
|
|
105
|
+
pass "TC-CLI-004: Logout successful"
|
|
106
|
+
else
|
|
107
|
+
fail "TC-CLI-004: Logout failed" "已退出登录" "$output"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
echo ""
|
|
111
|
+
log "=== TC-CLI-005: adk logout 未登录时 ==="
|
|
112
|
+
$ADK logout > /dev/null 2>&1
|
|
113
|
+
output=$($ADK logout 2>&1)
|
|
114
|
+
if echo "$output" | grep -q "未登录"; then
|
|
115
|
+
pass "TC-CLI-005: Logout when not logged in"
|
|
116
|
+
else
|
|
117
|
+
fail "TC-CLI-005: Should show not logged in" "未登录" "$output"
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
echo ""
|
|
121
|
+
log "=== TC-CLI-006: adk skill ls 列出所有 Skills ==="
|
|
122
|
+
$ADK login $SERVER_URL $API_KEY > /dev/null 2>&1
|
|
123
|
+
output=$($ADK skill ls 2>&1)
|
|
124
|
+
if echo "$output" | grep -qE "(Skill|暂无)"; then
|
|
125
|
+
pass "TC-CLI-006: List skills successful"
|
|
126
|
+
else
|
|
127
|
+
fail "TC-CLI-006: List skills failed" "Skill list" "$output"
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
echo ""
|
|
131
|
+
log "=== TC-CLI-007: adk skill ls 未登录时 ==="
|
|
132
|
+
$ADK logout > /dev/null 2>&1
|
|
133
|
+
output=$($ADK skill ls 2>&1)
|
|
134
|
+
if echo "$output" | grep -qE "未登录|Please login"; then
|
|
135
|
+
pass "TC-CLI-007: List skills without login fails"
|
|
136
|
+
else
|
|
137
|
+
fail "TC-CLI-007: Should fail without login" "未登录" "$output"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
echo ""
|
|
141
|
+
log "=== TC-CLI-008: adk skill search 搜索 Skills ==="
|
|
142
|
+
$ADK login $SERVER_URL $API_KEY > /dev/null 2>&1
|
|
143
|
+
output=$($ADK skill search pdf 2>&1)
|
|
144
|
+
if echo "$output" | grep -qE "(找到|暂无)"; then
|
|
145
|
+
pass "TC-CLI-008: Search skills successful"
|
|
146
|
+
else
|
|
147
|
+
fail "TC-CLI-008: Search skills failed" "search result" "$output"
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
echo ""
|
|
151
|
+
log "=== TC-CLI-009: adk skill info 查看 Skill 详情 ==="
|
|
152
|
+
$ADK login $SERVER_URL $API_KEY > /dev/null 2>&1
|
|
153
|
+
output=$($ADK skill info pdf-tool 2>&1)
|
|
154
|
+
if echo "$output" | grep -qE "(pdf-tool|Name:)"; then
|
|
155
|
+
pass "TC-CLI-009: Skill info successful"
|
|
156
|
+
else
|
|
157
|
+
fail "TC-CLI-009: Skill info failed" "pdf-tool" "$output"
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
echo ""
|
|
161
|
+
log "=== TC-CLI-010: adk skill info Skill 不存在 ==="
|
|
162
|
+
output=$($ADK skill info non-existent-skill-xyz 2>&1)
|
|
163
|
+
if echo "$output" | grep -qE "(未找到|不存在|not found)"; then
|
|
164
|
+
pass "TC-CLI-010: Info for non-existent skill"
|
|
165
|
+
else
|
|
166
|
+
fail "TC-CLI-010: Should show not found" "not found" "$output"
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
echo ""
|
|
170
|
+
log "=== TC-CLI-014: adk skill upload 上传 Skill ==="
|
|
171
|
+
output=$($ADK skill upload $DATA_DIR/pdf-tool 2>&1)
|
|
172
|
+
if echo "$output" | grep -qE "(上传成功|Published)"; then
|
|
173
|
+
pass "TC-CLI-014: Upload skill successful"
|
|
174
|
+
else
|
|
175
|
+
fail "TC-CLI-014: Upload skill failed" "upload success" "$output"
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
echo ""
|
|
179
|
+
log "=== TC-CLI-015: adk skill upload 目录不存在 ==="
|
|
180
|
+
output=$($ADK skill upload $DATA_DIR/non-existent-dir-xyz 2>&1)
|
|
181
|
+
if echo "$output" | grep -qE "(目录不存在|不存在)"; then
|
|
182
|
+
pass "TC-CLI-015: Upload non-existent directory"
|
|
183
|
+
else
|
|
184
|
+
fail "TC-CLI-015: Should fail for non-existent dir" "not found" "$output"
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
echo ""
|
|
188
|
+
log "=== TC-CLI-016: adk skill upload SKILL.md 缺失 ==="
|
|
189
|
+
output=$($ADK skill upload $DATA_DIR/invalid-skill 2>&1)
|
|
190
|
+
if echo "$output" | grep -qE "(缺少|无效|SKILL.md)"; then
|
|
191
|
+
pass "TC-CLI-016: Upload invalid skill without SKILL.md"
|
|
192
|
+
else
|
|
193
|
+
fail "TC-CLI-016: Should fail without SKILL.md" "SKILL.md" "$output"
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
echo ""
|
|
197
|
+
log "=== TC-CLI-017: adk skill my 查看我的发布 ==="
|
|
198
|
+
output=$($ADK skill my 2>&1)
|
|
199
|
+
if echo "$output" | grep -qE "(发布|Skill|暂无)"; then
|
|
200
|
+
pass "TC-CLI-017: My skills listed"
|
|
201
|
+
else
|
|
202
|
+
fail "TC-CLI-017: My skills failed" "my skills" "$output"
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
echo ""
|
|
206
|
+
log "=== TC-CLI-020: adk skill validate 验证有效 Skill ==="
|
|
207
|
+
output=$($ADK skill validate $DATA_DIR/pdf-tool 2>&1)
|
|
208
|
+
if echo "$output" | grep -qE "(通过|Valid)"; then
|
|
209
|
+
pass "TC-CLI-020: Validate valid skill"
|
|
210
|
+
else
|
|
211
|
+
fail "TC-CLI-020: Validate valid skill failed" "valid" "$output"
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
echo ""
|
|
215
|
+
log "=== TC-CLI-021: adk skill validate 验证无效 Skill ==="
|
|
216
|
+
output=$($ADK skill validate $DATA_DIR/invalid-skill 2>&1)
|
|
217
|
+
if echo "$output" | grep -qE "(失败|Invalid|错误)"; then
|
|
218
|
+
pass "TC-CLI-021: Validate invalid skill"
|
|
219
|
+
else
|
|
220
|
+
fail "TC-CLI-021: Should detect invalid skill" "invalid" "$output"
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
echo ""
|
|
224
|
+
log "=== TC-CLI-011: adk skill download 下载 Skill ==="
|
|
225
|
+
output=$($ADK skill download pdf-tool $DATA_DIR 2>&1)
|
|
226
|
+
if echo "$output" | grep -qE "(已下载)"; then
|
|
227
|
+
if [ -f "$DATA_DIR/pdf-tool.zip" ]; then
|
|
228
|
+
pass "TC-CLI-011: Download skill successful"
|
|
229
|
+
else
|
|
230
|
+
fail "TC-CLI-011: Download file not found" "pdf-tool.zip exists" "file not found"
|
|
231
|
+
fi
|
|
232
|
+
else
|
|
233
|
+
fail "TC-CLI-011: Download skill failed" "download success" "$output"
|
|
234
|
+
fi
|
|
235
|
+
|
|
236
|
+
echo ""
|
|
237
|
+
log "=== TC-CLI-013: adk skill download Skill 不存在 ==="
|
|
238
|
+
output=$($ADK skill download non-existent-skill-xyz 2>&1)
|
|
239
|
+
if echo "$output" | grep -qE "(未找到|不存在|not found)"; then
|
|
240
|
+
pass "TC-CLI-013: Download non-existent skill"
|
|
241
|
+
else
|
|
242
|
+
fail "TC-CLI-013: Should fail for non-existent" "not found" "$output"
|
|
243
|
+
fi
|
|
244
|
+
|
|
245
|
+
echo ""
|
|
246
|
+
log "=== TC-CLI-019: adk skill delete 无权限 (先上传自己的skill再删除) ==="
|
|
247
|
+
output=$($ADK skill upload $DATA_DIR/github-tool 2>&1)
|
|
248
|
+
if echo "$output" | grep -qE "(上传成功|Published)"; then
|
|
249
|
+
uploaded=true
|
|
250
|
+
else
|
|
251
|
+
uploaded=false
|
|
252
|
+
fi
|
|
253
|
+
|
|
254
|
+
if [ "$uploaded" = true ]; then
|
|
255
|
+
output=$($ADK skill delete github-tool 2>&1)
|
|
256
|
+
if echo "$output" | grep -qE "(已删除|删除成功|Deleted)"; then
|
|
257
|
+
pass "TC-CLI-019: Delete own skill"
|
|
258
|
+
else
|
|
259
|
+
fail "TC-CLI-019: Delete own skill failed" "deleted" "$output"
|
|
260
|
+
fi
|
|
261
|
+
else
|
|
262
|
+
fail "TC-CLI-019: Could not upload test skill" "upload success" "$output"
|
|
263
|
+
fi
|
|
264
|
+
|
|
265
|
+
echo ""
|
|
266
|
+
log "========== Test Summary =========="
|
|
267
|
+
echo -e "${GREEN}Passed: $PASS${NC}"
|
|
268
|
+
echo -e "${RED}Failed: $FAIL${NC}"
|
|
269
|
+
|
|
270
|
+
if [ $FAIL -gt 0 ]; then
|
|
271
|
+
exit 1
|
|
272
|
+
fi
|
|
273
|
+
exit 0
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"lib": ["ESNext"],
|
|
4
|
+
"target": "ESNext",
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"strict": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"paths": {
|
|
12
|
+
"@pkg/*": ["../pkg/*"]
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"include": ["src/**/*"],
|
|
16
|
+
"exclude": ["node_modules"]
|
|
17
|
+
}
|