@voko/lite 0.3.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.
Files changed (62) hide show
  1. package/package.json +32 -0
  2. package/scripts/build-native.js +72 -0
  3. package/src/bankHeadOffices.js +20543 -0
  4. package/src/channels/email.js +35 -0
  5. package/src/channels/feishu.js +31 -0
  6. package/src/channels/qq-email.js +30 -0
  7. package/src/channels/registry.js +279 -0
  8. package/src/channels/telegram.js +28 -0
  9. package/src/channels/voko-email.js +7 -0
  10. package/src/channels/wechat.js +35 -0
  11. package/src/cli.js +120 -0
  12. package/src/context.js +164 -0
  13. package/src/core/access-control-api.js +150 -0
  14. package/src/core/access-control.js +56 -0
  15. package/src/core/agent-registration.js +319 -0
  16. package/src/core/api-signature.js +33 -0
  17. package/src/core/audit.js +133 -0
  18. package/src/core/database.js +1409 -0
  19. package/src/core/did-auth.js +54 -0
  20. package/src/core/hermes-paths.js +57 -0
  21. package/src/core/invitation.js +49 -0
  22. package/src/core/lite-bus.js +16 -0
  23. package/src/core/llm-client.js +1032 -0
  24. package/src/core/messenger.js +456 -0
  25. package/src/core/notifier.js +99 -0
  26. package/src/core/offline-sync.js +150 -0
  27. package/src/core/payment.js +285 -0
  28. package/src/core/publish-agent.js +166 -0
  29. package/src/core/register-capabilities.js +119 -0
  30. package/src/core/search-capabilities.js +136 -0
  31. package/src/core/send-message.js +85 -0
  32. package/src/core/set-agent-status.js +65 -0
  33. package/src/core/update-agent-profile.js +102 -0
  34. package/src/core/worker-manager.js +332 -0
  35. package/src/endpoints.json +21 -0
  36. package/src/index.js +712 -0
  37. package/src/mcp/CLAUDE_TEST.md +82 -0
  38. package/src/mcp/FULL_TEST.md +139 -0
  39. package/src/mcp/TEST.md +124 -0
  40. package/src/mcp/TEST_STEPS.md +75 -0
  41. package/src/mcp/server.js +612 -0
  42. package/src/mcp/tools.js +1367 -0
  43. package/src/mcp/transport/http.js +95 -0
  44. package/src/mcp/transport/stdio.js +20 -0
  45. package/src/preload.js +27 -0
  46. package/src/server/agent-email-api.js +120 -0
  47. package/src/server/agent-manager.js +580 -0
  48. package/src/server/email-handler.js +329 -0
  49. package/src/server/feishu-handler.js +249 -0
  50. package/src/server/hermes-api-client.js +166 -0
  51. package/src/server/hermes-discovery.js +80 -0
  52. package/src/server/hermes-handler.js +287 -0
  53. package/src/server/openclaw-handler-cli.js +131 -0
  54. package/src/server/openclaw-websocket-handler.js +1290 -0
  55. package/src/server/oss.js +186 -0
  56. package/src/server/owner-intervention-notifier.js +320 -0
  57. package/src/server/release-page.html +204 -0
  58. package/src/server/telegram-handler.js +208 -0
  59. package/src/server/voko-email-handler.js +68 -0
  60. package/src/server/wechat-handler.js +439 -0
  61. package/src/workers/agent-worker.js +378 -0
  62. package/src/workers/message-content.js +51 -0
@@ -0,0 +1,82 @@
1
+ # Claude Code 自然语言测试(复制到新终端)
2
+
3
+ 打开新终端 → cd D:/kimi_code/voko-desktop → claude
4
+
5
+ 进去后逐条复制以下提示语(或一次复制多条):
6
+
7
+ ---
8
+
9
+ ## 1. 查状态
10
+ ```
11
+ 用 voko_get_status 查一下 gym 的连接状态
12
+ ```
13
+
14
+ ## 2. 列会话
15
+ ```
16
+ 用 voko_list_conversations 列出 gym 最近的活跃会话
17
+ ```
18
+
19
+ ## 3. 查访客
20
+ ```
21
+ 用 voko_get_visitor_profile 查一下访客 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的信息
22
+ ```
23
+
24
+ ## 4. 聊天历史
25
+ ```
26
+ 用 voko_get_chat_history 查 gym 和 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 最近3条聊天记录
27
+ ```
28
+
29
+ ## 5. 查新消息
30
+ ```
31
+ 用 voko_fetch_new_messages 查 gym 有没有 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的新消息
32
+ ```
33
+
34
+ ## 6. 黑名单
35
+ ```
36
+ 用 voko_list_blocked_users 查 gym 的黑名单
37
+ 把 test_user 加入 gym 的黑名单
38
+ 把 test_user 移出 gym 的黑名单
39
+ ```
40
+
41
+ ## 7. 白名单
42
+ ```
43
+ 用 voko_list_allowed_users 查 gym 的白名单
44
+ 开启 gym 的白名单模式
45
+ 关闭 gym 的白名单模式
46
+ ```
47
+
48
+ ## 8. 人工介入
49
+ ```
50
+ 用 voko_ask_human_for_help 请求主人介入,访客是 oIf3l2ztNX5dAmjFAdGBZaFCsWgU,问题是想退款
51
+ 用 voko_check_human_replies 查 gym 有没有主人回复
52
+ ```
53
+
54
+ ## 9. 收款
55
+ ```
56
+ 用 voko_request_payment 向 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 收款 100 元,原因是私教体验课
57
+ ```
58
+
59
+ ## 10. OSS 上传
60
+ ```
61
+ 用 voko_get_upload_url 获取一个 test.jpg 的上传地址
62
+ ```
63
+
64
+ ## 11. 搜索能力
65
+ ```
66
+ 用 voko_search_capabilities 搜索一下有哪些 agent 提供健身服务
67
+ ```
68
+
69
+ ## 测试注册流程
70
+ ```
71
+ 用 voko_register_agent 给邮箱=你的邮箱 发送验证码
72
+ ```
73
+ 然后查邮箱 → 拿到验证码后:
74
+ ```
75
+ 用 voko_verify_agent_email 完成注册,邮箱=你的邮箱,code=xxxxxx
76
+ ```
77
+
78
+ > 说明:
79
+ > - `voko_register_agent` 只需要 `email`
80
+ > - `voko_verify_agent_email` 只需要 `email` + `code`,验证成功后服务端返回 agentId、DID、IM 账号等并写入本地 agents 表
81
+ > - 注册后状态为 `unpublished`,不会启动 worker
82
+ > - `serverUrl` 和 `backendType` 由服务端返回或内部默认,不需要调用方传入
@@ -0,0 +1,139 @@
1
+ # VOKO MCP 完整测试流程
2
+
3
+ ## 前置条件
4
+ - VOKO Desktop 已在运行(端口 3002)
5
+ - 新开终端:`cd D:/kimi_code/voko-desktop && claude`
6
+
7
+ ---
8
+
9
+ ## 第1步:注册新 agent
10
+
11
+ 在 Claude Code 中输入:
12
+ ```
13
+ 注册一个新 agent,我的邮箱是 xxxx@163.com
14
+ ```
15
+ (替换成你的真实邮箱)
16
+
17
+ agent 会自动生成 agentId、imUid、token 等参数,调 voko_register_agent 提交,验证码会发到你邮箱。
18
+
19
+ 去邮箱查验证码,然后把验证码告诉 agent:
20
+ ```
21
+ 验证码是 xxxxxx
22
+ ```
23
+ agent 会调 voko_verify_agent_email 完成注册。
24
+
25
+ 预期:返回 `{ success: true, agentId: "testagent001" }`
26
+
27
+ ---
28
+
29
+ ## 第2步:查状态
30
+
31
+ ```
32
+ 用 voko_get_status 查一下刚才注册的 agent 的连接状态
33
+ ```
34
+ 预期:返回 IM 状态、ability、capability 等
35
+
36
+ ---
37
+
38
+ ## 第3步:声明能力
39
+
40
+ ```
41
+ 声明 testagent001 的能力
42
+ ```
43
+ agent 应先调 voko_get_status 看现有能力(应该为空),然后问你要定义哪些能力。
44
+
45
+ 你可以说:
46
+ ```
47
+ 我的 agent 是做天气查询的,可以查全国各地的天气
48
+ ```
49
+ agent 会构造能力 JSON,让你确认后提交。
50
+
51
+ ---
52
+
53
+ ## 第4步:搜索能力
54
+
55
+ ```
56
+ 用 voko_search_capabilities 搜索一下天气相关的 agent
57
+ ```
58
+ 预期:返回"暂未实现"(搜索接口未上线)
59
+
60
+ ---
61
+
62
+ ## 第5步:发消息
63
+
64
+ ```
65
+ 用 voko_send_message 给访客 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 发一条消息,内容是"你好,我是新注册的测试 agent"
66
+ ```
67
+
68
+ 用哪个 agentId 发都可以,比如:
69
+ ```
70
+ 用 voko_send_message 用 gym 给 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU 发消息,内容"你好,这是测试消息"
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 第6步:收消息(轮询)
76
+
77
+ ```
78
+ 用 voko_fetch_new_messages 查 gym 有没有 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的新消息
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 第7步:聊天历史
84
+
85
+ ```
86
+ 用 voko_get_chat_history 查 gym 和 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的最近5条聊天记录
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 第8步:查访客信息
92
+
93
+ ```
94
+ 用 voko_get_visitor_profile 查一下 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的信息
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 第9步:收款
100
+
101
+ ```
102
+ 用 voko_request_payment 向 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU 收款 0.01 元,备注测试
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 第10步:人工介入
108
+
109
+ ```
110
+ 用 voko_ask_human_for_help 请求主人介入,访客 visitor_oIf3l2ztNX5dAmjFAdGBZaFCsWgU,问题是"用户要求退款,需要主人决定"
111
+ ```
112
+
113
+ ```
114
+ 用 voko_check_human_replies 查 gym 有没有主人回复
115
+ ```
116
+
117
+ ```
118
+ 用 voko_close_human_request 关闭刚才的介入请求
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 第11步:黑白名单
124
+
125
+ ```
126
+ 把 visitor_test_block 加入 gym 的黑名单
127
+ ```
128
+ ```
129
+ 查一下 gym 的黑名单
130
+ ```
131
+ ```
132
+ 把 visitor_test_block 移出 gym 的黑名单
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 第12步:清理
138
+
139
+ 用 Desktop UI 把 testagent001 下架或删除。
@@ -0,0 +1,124 @@
1
+ # VOKO MCP Server 测试步骤
2
+
3
+ ## 前置条件
4
+ - VOKO Desktop 已在运行(端口 3002)
5
+ - 打开终端(cmd 或 Git Bash),执行以下命令
6
+ - 每步单独复制粘贴执行,等出结果后再执行下一步
7
+
8
+ ---
9
+
10
+ ## 第一步:初始化会话
11
+
12
+ ```bash
13
+ SID=$(curl -s -D - http://localhost:3002/mcp \
14
+ -H "Content-Type: application/json" \
15
+ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | grep -i mcp-session-id | awk '{print $2}' | tr -d '\r')
16
+ echo "Session ID: $SID"
17
+ ```
18
+
19
+ 预期输出:
20
+ ```
21
+ Session ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
22
+ ```
23
+
24
+ ---
25
+
26
+ ## 第二步:查 gym 状态
27
+
28
+ ```bash
29
+ curl -s http://localhost:3002/mcp \
30
+ -H "Content-Type: application/json" \
31
+ -H "mcp-session-id: $SID" \
32
+ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"voko_get_status","arguments":{"agentId":"gym"}}}' | node -p "JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'))"
33
+ ```
34
+
35
+ Windows 版(如果上面不行):
36
+ ```bash
37
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_get_status\",\"arguments\":{\"agentId\":\"gym\"}}}"
38
+ ```
39
+
40
+ 预期:能看到 `imConnected`、`warnings`、`uptime` 等字段。
41
+
42
+ ---
43
+
44
+ ## 第三步:列出 gym 的活跃会话
45
+
46
+ ```bash
47
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_list_conversations\",\"arguments\":{\"agentId\":\"gym\",\"limit\":5}}}"
48
+ ```
49
+
50
+ 预期:返回 conversations 数组,包含 channelId、lastMessage 等。
51
+
52
+ ---
53
+
54
+ ## 第四步:查访客信息
55
+
56
+ ```bash
57
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_get_visitor_profile\",\"arguments\":{\"visitorId\":\"oIf3l2ztNX5dAmjFAdGBZaFCsWgU\"}}}"
58
+ ```
59
+
60
+ 预期:返回 nickname、totalMessages、lastActive 等。
61
+
62
+ ---
63
+
64
+ ## 第五步:查聊天历史
65
+
66
+ ```bash
67
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_get_chat_history\",\"arguments\":{\"agentId\":\"gym\",\"channelId\":\"oIf3l2ztNX5dAmjFAdGBZaFCsWgU\",\"limit\":3}}}"
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 第六步:获取新消息(轮询兜底)
73
+
74
+ ```bash
75
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":6,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_fetch_new_messages\",\"arguments\":{\"agentId\":\"gym\",\"visitorId\":\"oIf3l2ztNX5dAmjFAdGBZaFCsWgU\",\"limit\":5}}}"
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 第七步:黑名单测试
81
+
82
+ ```bash
83
+ # 查看黑名单
84
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":7,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_list_blocked_users\",\"arguments\":{\"agentId\":\"gym\"}}}"
85
+
86
+ # 添加测试
87
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":8,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_block_user\",\"arguments\":{\"agentId\":\"gym\",\"visitorId\":\"test_user_123\",\"reason\":\"测试\"}}}"
88
+
89
+ # 移出
90
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":9,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_unblock_user\",\"arguments\":{\"agentId\":\"gym\",\"visitorId\":\"test_user_123\"}}}"
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 第八步:获取 OSS 上传地址
96
+
97
+ ```bash
98
+ curl -s http://localhost:3002/mcp -H "Content-Type: application/json" -H "mcp-session-id: $SID" -d "{\"jsonrpc\":\"2.0\",\"id\":10,\"method\":\"tools/call\",\"params\":{\"name\":\"voko_get_upload_url\",\"arguments\":{\"filename\":\"test.jpg\"}}}"
99
+ ```
100
+
101
+ ---
102
+
103
+ ## 清理:删除会话
104
+
105
+ ```bash
106
+ curl -s -X DELETE "http://localhost:3002/mcp?sessionId=$SID"
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 在新 Claude Code 终端测试
112
+
113
+ 打开另一个终端,运行:
114
+ ```bash
115
+ cd D:/kimi_code/voko-desktop
116
+ claude
117
+ ```
118
+
119
+ 进去后直接输入:
120
+ ```
121
+ 用 voko_get_status 查 gym 的状态
122
+ 列一下 gym 的活跃会话
123
+ 查一下访客 oIf3l2ztNX5dAmjFAdGBZaFCsWgU 的信息
124
+ ```
@@ -0,0 +1,75 @@
1
+ # 手动测试步骤
2
+
3
+ ## 前置条件
4
+ - VOKO Desktop 已在运行
5
+ - 新开一个终端 cd D:/kimi_code/voko-desktop && claude
6
+
7
+ ---
8
+
9
+ ## 1. 验证 get_status 返回 ability + capability
10
+
11
+ 在新 Claude Code 终端里输入:
12
+ ```
13
+ 用 voko_get_status 查一下 gym 的状态
14
+ ```
15
+
16
+ 预期:返回内容包含 `ability` 和 `capability` 两个字段。
17
+
18
+ ---
19
+
20
+ ## 2. 验证 declare_capabilities 写入 capability(不是 ability)
21
+
22
+ 在新 Claude Code 终端里输入:
23
+ ```
24
+ 声明 gym 的能力
25
+ ```
26
+ - 如果已有能力,会先展示给你看,询问增删
27
+ - 如果为空,询问你定义哪些能力
28
+ - 你确认后提交
29
+
30
+ 提交后验证数据写入的是 `capability` 列而不是 `ability`:
31
+ ```bash
32
+ node -e "const Database=require('better-sqlite3');const db=new Database('C:/Users/tjyu/AppData/Roaming/voko/wukongim.db',{timeout:3000});const r=db.prepare('SELECT ability,capability FROM agents WHERE agent_id=?').get('gym');console.log('ability:',r.ability?.substring(0,50));console.log('capability:',r.capability?.substring(0,200))"
33
+ ```
34
+
35
+ ---
36
+
37
+ ## 3. SSE 推送测试(需要 Desktop 发一条消息)
38
+
39
+ 1. 在 Claude Code 中执行:
40
+ ```
41
+ 保持一个 SSE 长连监视 gym 的消息推送
42
+ ```
43
+
44
+ 2. 在 VOKO Desktop 上找到一个访客,随便发一条消息
45
+
46
+ 3. 看 Claude Code 是否实时收到通知
47
+
48
+ ---
49
+
50
+ ## 4. 验证 search_capabilities 显示"暂未实现"
51
+
52
+ 在新 Claude Code 终端里输入:
53
+ ```
54
+ 搜索一下健身相关的能力
55
+ ```
56
+ 或直接调工具:
57
+ ```
58
+ 用 voko_search_capabilities 搜索健身
59
+ ```
60
+
61
+ 预期:返回"暂未实现,需要远程服务器新增搜索接口后才能使用"
62
+
63
+ ---
64
+
65
+ ## 5. 端到端回归(基础6步)
66
+
67
+ 在新 Claude Code 终端里执行:
68
+ ```
69
+ 1. 用 voko_get_status 查 gym 的状态
70
+ 2. 用 voko_list_conversations 列出 gym 最近的会话
71
+ 3. 用 voko_get_visitor_profile 查一下 oIf3l2ztNX5dAmjFAdGBZaFCsWgU
72
+ 4. 用 voko_get_chat_history 查 gym 和该访客最近3条记录
73
+ 5. 用 voko_fetch_new_messages 查 gym 有没有该访客的新消息
74
+ 6. 用 voko_list_blocked_users 查 gym 的黑名单
75
+ ```