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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "multiclaws",
3
- "version": "0.4.41",
3
+ "version": "0.4.42",
4
4
  "description": "MultiClaws plugin for OpenClaw collaboration via A2A protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,175 +1,182 @@
1
- # 会议调度技能行为
1
+ # 会议协商调度全自动多人协商
2
2
 
3
- 以下规则指导 AI 如何利用 MultiClaws 团队协作和 Google Calendar 完成会议调度。
3
+ 以下规则指导 AI 如何利用 MultiClaws 委派和 Google Calendar 实现多人自动协商会议。
4
+ 核心原则:**如果所有参与者的 OpenClaw 都有日历工具,则全程无需人类干预。**
4
5
 
5
6
  ---
6
7
 
7
- ## 触发条件
8
+ ## 角色判断
8
9
 
9
- 当用户的请求包含以下意图时激活此 Skill:
10
- - 约会议 / 安排会议 / 组织会议
11
- - 查询团队成员空闲时间
12
- - 找一个大家都有空的时间
10
+ 你在会议协商中扮演两种角色之一:
13
11
 
14
- **关键词示例:** 「约会议」「开会」「安排一个会」「找个时间碰一下」「schedule a meeting」
12
+ | 触发条件 | 角色 |
13
+ |----------|------|
14
+ | 用户主动说「开会」「约会议」「安排会议」「schedule a meeting」等 | **组织者** |
15
+ | 收到委派任务,任务文本包含 `[会议协商-查询]` | **参与者 — 查询模式** |
16
+ | 收到委派任务,任务文本包含 `[会议协商-确认]` | **参与者 — 确认模式** |
15
17
 
16
18
  ---
17
19
 
18
- ## 工作流
20
+ ## 组织者工作流
19
21
 
20
- ### 步骤 1:解析会议需求
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
- 使用 Google Calendar 工具读取**用户自己**在指定时间范围内的日程:
34
+ ### Step 2:查询自己的日历
33
35
 
34
- 1. 获取指定时间范围内的所有事件
35
- 2. 计算用户的空闲时段
36
- 3. 如果用户在该时间范围内完全没空,提前告知用户并建议换个时间段
36
+ 检测你是否有 Google Calendar 相关工具可用:
37
+ - **有日历工具** → 直接查询用户在指定时间范围内的事件,计算空闲时段。不要问用户是否要查,直接查
38
+ - **无日历工具** → 跳过此步,假设用户在指定时间范围内全部可用
37
39
 
38
- ### 步骤 3:获取团队成员信息
40
+ ### Step 3:获取团队成员
39
41
 
40
42
  ```
41
43
  multiclaws_agents()
42
44
  ```
43
45
 
44
- 从返回的智能体列表中,根据用户指定的参会人名单匹配对应的智能体。
45
-
46
- **匹配规则:**
47
- - 优先按 `ownerName` 匹配
48
- - 如果用户说「所有人」,取团队全部成员(排除自己)
49
- - 找不到的成员告知用户
46
+ 从返回的智能体列表中匹配参会人。匹配规则:
47
+ - 按 `ownerName` 或 `name` 模糊匹配
48
+ - 「所有人」= 全部成员(排除自己)
49
+ - 找不到的成员跳过并在最终汇报中说明
50
50
 
51
- ### 步骤 4:并行委派查询空闲时间
51
+ ### Step 4:逐个委派查询可用时间
52
52
 
53
- 对每个参会成员**分别**调用 `multiclaws_delegate`:
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
- 记录每个委派返回的 `taskId`。
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
- ### 步骤 5:收集回复(超时机制)
77
+ ### Step 6:创建日历事件
69
78
 
70
- **等待策略:手动检查 + 自动超时**
79
+ 时间确定后:
80
+ - **有日历工具** → 直接创建事件(标题、时间、描述),不要询问用户是否创建
81
+ - **无日历工具** → 跳过,告知用户需要手动添加
71
82
 
72
- 1. 委派发出后告知用户:「已向 N 位成员查询空闲时间,等待回复中…」
73
- 2. 设定超时:**3 分钟**
74
- 3. 在超时前,如有结果通过子 agent 消息返回则自动收集
75
- 4. 超时后检查各任务状态:
83
+ ### Step 7:通知所有参会者
84
+
85
+ 对每个参会成员调用 `multiclaws_delegate`,发送确认通知:
76
86
 
77
87
  ```
78
- multiclaws_task_status(taskId="xxx")
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
- ### 步骤 6:汇总与展示
98
+ ```
99
+ ✅ 会议已安排
100
+ - 主题:{主题}
101
+ - 时间:{日期} {时段}
102
+ - 参会人:{名单}
103
+ - 日历事件:已创建 / 请手动添加
104
+ - 通知状态:全部已通知 / {某某}通知失败
105
+ ```
92
106
 
93
- 将所有结果汇总为易读的表格,展示给用户:
107
+ ---
94
108
 
95
- ```
96
- 📅 会议空闲时段汇总(主题:xxx)
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
- 推荐时段:14:00 - 15:00(全员可行)
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
- 1. 优先推荐全员都空闲的时段
109
- 2. 若无全员空闲时段,推荐覆盖人数最多的时段
110
- 3. 若有多个等价时段,推荐最早的
124
+ 如果完全没有空闲:
125
+ ```json
126
+ {"available": false, "freeSlots": [], "reason": "该时段已有会议", "timezone": "GMT+8"}
127
+ ```
111
128
 
112
- ### 步骤 7:用户确认
129
+ ### 需要人工介入(无日历工具时)
113
130
 
114
- 询问用户:
115
- - 选择哪个时段?
116
- - 是否接受部分成员缺席?
117
- - 会议标题需要调整吗?
118
- - 是否需要添加会议描述或议程?
131
+ 1. 告知用户:「收到来自 {发起人} 的会议邀请,主题:{主题},时间范围:{时间}。你在这个时间段有空吗?」
132
+ 2. 等待用户回复
133
+ 3. 将用户回答转换为结构化格式返回
119
134
 
120
- 等待用户明确确认后才继续。
135
+ ---
121
136
 
122
- ### 步骤 8:创建日历事件
137
+ ## 参与者工作流 — 确认模式
123
138
 
124
- 用户确认后,使用 Google Calendar 工具:
125
- 1. 创建日历事件(标题、时间、描述)
126
- 2. 添加所有确认参会的成员为与会者(如果有邮箱信息)
127
- 3. 发送日历邀请
139
+ 当你收到的委派任务包含 `[会议协商-确认]` 时:
128
140
 
129
- ### 步骤 9:通知参会者
141
+ ### 自动处理(有日历工具时)
130
142
 
131
- 对每个确认参会的远端成员调用 `multiclaws_delegate`,通知会议已确定:
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
- - 委派查询时明确指定时区(如 GMT+8)
149
- - 汇总时统一转换为用户所在时区展示
157
+ - 委派查询时**必须附带时区**(如 GMT+8)
158
+ - 参与者回复时也附带自己的时区
159
+ - 组织者汇总时统一转换为自己的时区
150
160
 
151
- ### 只有一个参会者
152
- - 跳过汇总表格,直接展示双方都空闲的时段
153
- - 简化确认流程
161
+ ### 单人会议
162
+ - 只有一个参会者时,直接查询+确定,不需要表格汇总
154
163
 
155
164
  ### 用户取消
156
- - 在任何步骤用户都可以说「算了」「取消」
157
- - 取消时不创建任何事件
165
+ - 在任何步骤用户说「算了」「取消」→ 立即停止,不创建事件,不发通知
158
166
 
159
- ### 成员无日历能力
160
- - 如果某成员的 bio 中没有提到日历相关能力,在委派时明确说明:
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
- - **汇总要直观**,用表格和 emoji 使结果一目了然
174
- - **尊重隐私**,不在委派消息中透露其他成员的具体日程细节
175
- - **保持礼貌**,委派消息用协商语气而非命令语气
178
+ - **最小化人工干预**:有日历工具时,全程自动,不要停下来问用户"是否确认"
179
+ - **只在必要时才问**:仅当缺少关键信息(时间范围)或协商彻底失败时才询问用户
180
+ - **尊重隐私**:不在委派消息中透露其他成员的日程细节
181
+ - **使用标记**:委派任务必须包含 `[会议协商-查询]` 或 `[会议协商-确认]` 标记,让接收方 AI 识别角色
182
+ - **结构化通信**:查询回复使用 JSON 格式,便于组织者解析