multiclaws 0.4.41 → 0.4.42
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 +1 -1
- package/skills/meeting-scheduler/SKILL.md +112 -105
package/package.json
CHANGED
|
@@ -1,175 +1,182 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 会议协商调度 — 全自动多人协商
|
|
2
2
|
|
|
3
|
-
以下规则指导 AI 如何利用 MultiClaws
|
|
3
|
+
以下规则指导 AI 如何利用 MultiClaws 委派和 Google Calendar 实现多人自动协商会议。
|
|
4
|
+
核心原则:**如果所有参与者的 OpenClaw 都有日历工具,则全程无需人类干预。**
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
##
|
|
8
|
+
## 角色判断
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
- 约会议 / 安排会议 / 组织会议
|
|
11
|
-
- 查询团队成员空闲时间
|
|
12
|
-
- 找一个大家都有空的时间
|
|
10
|
+
你在会议协商中扮演两种角色之一:
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
| 触发条件 | 角色 |
|
|
13
|
+
|----------|------|
|
|
14
|
+
| 用户主动说「开会」「约会议」「安排会议」「schedule a meeting」等 | **组织者** |
|
|
15
|
+
| 收到委派任务,任务文本包含 `[会议协商-查询]` | **参与者 — 查询模式** |
|
|
16
|
+
| 收到委派任务,任务文本包含 `[会议协商-确认]` | **参与者 — 确认模式** |
|
|
15
17
|
|
|
16
18
|
---
|
|
17
19
|
|
|
18
|
-
##
|
|
20
|
+
## 组织者工作流
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
当用户发起会议请求时,按以下步骤**自动执行**,不要在每一步停下来询问用户。
|
|
23
|
+
|
|
24
|
+
### Step 1:解析需求
|
|
21
25
|
|
|
22
26
|
从用户请求中提取:
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
27
|
+
- **参会人**:指定的成员名单。「所有人」「整个团队」= 全部成员
|
|
28
|
+
- **时间范围**:用户期望的日期和时间段(如「明天下午」「周五 2-4 点」)
|
|
29
|
+
- **会议主题**:会议目的(可选,默认「团队会议」)
|
|
26
30
|
- **会议时长**:默认 1 小时,用户可指定
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
### 步骤 2:查询本地日历
|
|
32
|
+
**仅当用户未指定时间范围时,才询问用户。** 其他信息缺失可以使用默认值。
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
### Step 2:查询自己的日历
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
检测你是否有 Google Calendar 相关工具可用:
|
|
37
|
+
- **有日历工具** → 直接查询用户在指定时间范围内的事件,计算空闲时段。不要问用户是否要查,直接查
|
|
38
|
+
- **无日历工具** → 跳过此步,假设用户在指定时间范围内全部可用
|
|
37
39
|
|
|
38
|
-
###
|
|
40
|
+
### Step 3:获取团队成员
|
|
39
41
|
|
|
40
42
|
```
|
|
41
43
|
multiclaws_agents()
|
|
42
44
|
```
|
|
43
45
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
- 如果用户说「所有人」,取团队全部成员(排除自己)
|
|
49
|
-
- 找不到的成员告知用户
|
|
46
|
+
从返回的智能体列表中匹配参会人。匹配规则:
|
|
47
|
+
- 按 `ownerName` 或 `name` 模糊匹配
|
|
48
|
+
- 「所有人」= 全部成员(排除自己)
|
|
49
|
+
- 找不到的成员跳过并在最终汇报中说明
|
|
50
50
|
|
|
51
|
-
###
|
|
51
|
+
### Step 4:逐个委派查询可用时间
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
对每个参会成员调用 `multiclaws_delegate`,发送结构化查询请求:
|
|
54
54
|
|
|
55
55
|
```
|
|
56
56
|
multiclaws_delegate(
|
|
57
57
|
agentUrl="成员的agentUrl",
|
|
58
|
-
task="
|
|
59
|
-
请以如下格式回复:
|
|
60
|
-
- 空闲时段1:HH:MM - HH:MM
|
|
61
|
-
- 空闲时段2:HH:MM - HH:MM
|
|
62
|
-
如果完全没空,请说明。"
|
|
58
|
+
task="[会议协商-查询]\n会议主题:{主题}\n查询时间范围:{YYYY-MM-DD HH:MM} - {HH:MM} ({时区})\n会议时长:{N}小时\n发起人:{你的主人名字}\n\n请查看你主人的日历,回复 JSON 格式:\n{\"available\": true, \"freeSlots\": [\"HH:MM-HH:MM\", ...], \"timezone\": \"GMT+8\"}\n如果没有日历工具,请直接询问你的主人在该时间段是否有空。"
|
|
63
59
|
)
|
|
64
60
|
```
|
|
65
61
|
|
|
66
|
-
|
|
62
|
+
`multiclaws_delegate` 是同步阻塞的,会等待对方回复后才返回。逐个调用即可,无需轮询。
|
|
63
|
+
|
|
64
|
+
### Step 5:汇总与决策
|
|
65
|
+
|
|
66
|
+
收集所有成员的回复后,找出共同空闲时段:
|
|
67
|
+
|
|
68
|
+
1. 解析每个成员返回的 JSON(或自然语言描述的空闲时段)
|
|
69
|
+
2. 计算所有人(包括自己)的交集时段
|
|
70
|
+
3. **自动决策**,不要询问用户选哪个:
|
|
71
|
+
- 有全员可行的时段 → 选**最早的**一个,自动确定
|
|
72
|
+
- 多个等价时段 → 选**最早的**
|
|
73
|
+
- 无全员可行时段但部分可行 → 选覆盖人数最多的最早时段,自动确定
|
|
74
|
+
- 完全无可行时段 → **自动扩大时间范围 ±2 小时**,回到 Step 4 重新查询(仅重试一次)
|
|
75
|
+
- 扩大后仍无 → **这时才询问用户**,建议换日期或缩减参会人
|
|
67
76
|
|
|
68
|
-
###
|
|
77
|
+
### Step 6:创建日历事件
|
|
69
78
|
|
|
70
|
-
|
|
79
|
+
时间确定后:
|
|
80
|
+
- **有日历工具** → 直接创建事件(标题、时间、描述),不要询问用户是否创建
|
|
81
|
+
- **无日历工具** → 跳过,告知用户需要手动添加
|
|
71
82
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
4. 超时后检查各任务状态:
|
|
83
|
+
### Step 7:通知所有参会者
|
|
84
|
+
|
|
85
|
+
对每个参会成员调用 `multiclaws_delegate`,发送确认通知:
|
|
76
86
|
|
|
77
87
|
```
|
|
78
|
-
|
|
88
|
+
multiclaws_delegate(
|
|
89
|
+
agentUrl="成员的agentUrl",
|
|
90
|
+
task="[会议协商-确认]\n会议已确定:\n- 主题:{主题}\n- 时间:{YYYY-MM-DD HH:MM} - {HH:MM} ({时区})\n- 发起人:{你的主人名字}\n\n请在你主人的日历上创建此事件。如果没有日历工具,请告知你的主人这个会议时间。"
|
|
91
|
+
)
|
|
79
92
|
```
|
|
80
93
|
|
|
81
|
-
|
|
82
|
-
- ✅ **已回复**:提取空闲时段信息
|
|
83
|
-
- ⏳ **未回复(超时)**:标记该成员为「未响应」
|
|
84
|
-
- ❌ **失败**:标记该成员为「查询失败」
|
|
94
|
+
### Step 8:汇报
|
|
85
95
|
|
|
86
|
-
|
|
87
|
-
- 稍后重试
|
|
88
|
-
- 直接问相关人员的空闲时间
|
|
89
|
-
- 跳过未响应成员继续安排
|
|
96
|
+
向用户简洁汇报结果:
|
|
90
97
|
|
|
91
|
-
|
|
98
|
+
```
|
|
99
|
+
✅ 会议已安排
|
|
100
|
+
- 主题:{主题}
|
|
101
|
+
- 时间:{日期} {时段}
|
|
102
|
+
- 参会人:{名单}
|
|
103
|
+
- 日历事件:已创建 / 请手动添加
|
|
104
|
+
- 通知状态:全部已通知 / {某某}通知失败
|
|
105
|
+
```
|
|
92
106
|
|
|
93
|
-
|
|
107
|
+
---
|
|
94
108
|
|
|
95
|
-
|
|
96
|
-
|
|
109
|
+
## 参与者工作流 — 查询模式
|
|
110
|
+
|
|
111
|
+
当你收到的委派任务包含 `[会议协商-查询]` 时,执行以下流程:
|
|
97
112
|
|
|
98
|
-
|
|
99
|
-
|----------------|------|------|------|--------|
|
|
100
|
-
| 14:00 - 15:00 | ✅ | ✅ | ✅ | ✅ 全员可行 |
|
|
101
|
-
| 15:00 - 16:00 | ✅ | ❌ | ✅ | ⚠️ 小明不行 |
|
|
102
|
-
| 16:00 - 17:00 | ✅ | ✅ | ⏳ | ⚠️ 小红未响应 |
|
|
113
|
+
### 自动处理(有日历工具时)
|
|
103
114
|
|
|
104
|
-
|
|
115
|
+
1. 从任务文本中提取:时间范围、时区、会议时长
|
|
116
|
+
2. 使用 Google Calendar 工具查询该时间范围内的已有事件
|
|
117
|
+
3. 计算空闲时段(排除已有事件的时段,每个空闲段 ≥ 会议时长)
|
|
118
|
+
4. **直接返回结果**(通过 `multiclaws_a2a_callback`),不要询问用户确认:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{"available": true, "freeSlots": ["14:00-15:00", "15:30-16:00"], "timezone": "GMT+8"}
|
|
105
122
|
```
|
|
106
123
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
124
|
+
如果完全没有空闲:
|
|
125
|
+
```json
|
|
126
|
+
{"available": false, "freeSlots": [], "reason": "该时段已有会议", "timezone": "GMT+8"}
|
|
127
|
+
```
|
|
111
128
|
|
|
112
|
-
###
|
|
129
|
+
### 需要人工介入(无日历工具时)
|
|
113
130
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- 会议标题需要调整吗?
|
|
118
|
-
- 是否需要添加会议描述或议程?
|
|
131
|
+
1. 告知用户:「收到来自 {发起人} 的会议邀请,主题:{主题},时间范围:{时间}。你在这个时间段有空吗?」
|
|
132
|
+
2. 等待用户回复
|
|
133
|
+
3. 将用户回答转换为结构化格式返回
|
|
119
134
|
|
|
120
|
-
|
|
135
|
+
---
|
|
121
136
|
|
|
122
|
-
|
|
137
|
+
## 参与者工作流 — 确认模式
|
|
123
138
|
|
|
124
|
-
|
|
125
|
-
1. 创建日历事件(标题、时间、描述)
|
|
126
|
-
2. 添加所有确认参会的成员为与会者(如果有邮箱信息)
|
|
127
|
-
3. 发送日历邀请
|
|
139
|
+
当你收到的委派任务包含 `[会议协商-确认]` 时:
|
|
128
140
|
|
|
129
|
-
###
|
|
141
|
+
### 自动处理(有日历工具时)
|
|
130
142
|
|
|
131
|
-
|
|
143
|
+
1. 从任务文本中提取:会议主题、确切时间、发起人
|
|
144
|
+
2. 使用 Google Calendar 工具**直接创建事件**,不要询问用户
|
|
145
|
+
3. 返回确认:`已将会议添加到日历`
|
|
132
146
|
|
|
133
|
-
|
|
134
|
-
multiclaws_delegate(
|
|
135
|
-
agentUrl="成员的agentUrl",
|
|
136
|
-
task="会议已确定:[主题],时间:[日期] [时段]。
|
|
137
|
-
请在你主人的日历上创建这个事件。"
|
|
138
|
-
)
|
|
139
|
-
```
|
|
147
|
+
### 需要人工介入(无日历工具时)
|
|
140
148
|
|
|
141
|
-
|
|
149
|
+
1. 告知用户:「{发起人} 安排了会议:{主题},时间:{时间}。请记得参加。」
|
|
150
|
+
2. 返回:`已通知用户`
|
|
142
151
|
|
|
143
152
|
---
|
|
144
153
|
|
|
145
|
-
##
|
|
154
|
+
## 边界情况
|
|
146
155
|
|
|
147
156
|
### 跨时区
|
|
148
|
-
-
|
|
149
|
-
-
|
|
157
|
+
- 委派查询时**必须附带时区**(如 GMT+8)
|
|
158
|
+
- 参与者回复时也附带自己的时区
|
|
159
|
+
- 组织者汇总时统一转换为自己的时区
|
|
150
160
|
|
|
151
|
-
###
|
|
152
|
-
-
|
|
153
|
-
- 简化确认流程
|
|
161
|
+
### 单人会议
|
|
162
|
+
- 只有一个参会者时,直接查询+确定,不需要表格汇总
|
|
154
163
|
|
|
155
164
|
### 用户取消
|
|
156
|
-
-
|
|
157
|
-
- 取消时不创建任何事件
|
|
165
|
+
- 在任何步骤用户说「算了」「取消」→ 立即停止,不创建事件,不发通知
|
|
158
166
|
|
|
159
|
-
###
|
|
160
|
-
-
|
|
161
|
-
|
|
167
|
+
### 委派超时或失败
|
|
168
|
+
- 某成员委派失败 → 跳过该成员,继续处理其他人
|
|
169
|
+
- 在最终汇报中注明哪些成员未能联系上
|
|
162
170
|
|
|
163
171
|
### 紧急会议
|
|
164
|
-
-
|
|
165
|
-
- 缩短超时为 1 分钟
|
|
172
|
+
- 用户说「现在」「马上」「尽快」→ 时间范围设为今天剩余时间,会议时长默认 30 分钟
|
|
166
173
|
|
|
167
174
|
---
|
|
168
175
|
|
|
169
|
-
##
|
|
176
|
+
## 关键规则
|
|
170
177
|
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
178
|
+
- **最小化人工干预**:有日历工具时,全程自动,不要停下来问用户"是否确认"
|
|
179
|
+
- **只在必要时才问**:仅当缺少关键信息(时间范围)或协商彻底失败时才询问用户
|
|
180
|
+
- **尊重隐私**:不在委派消息中透露其他成员的日程细节
|
|
181
|
+
- **使用标记**:委派任务必须包含 `[会议协商-查询]` 或 `[会议协商-确认]` 标记,让接收方 AI 识别角色
|
|
182
|
+
- **结构化通信**:查询回复使用 JSON 格式,便于组织者解析
|