create-openclaw-bot 5.14.0 → 5.14.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/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  *Run one command → open the dashboard → your bot is live. Windows · macOS · Linux · VPS — Docker-powered, auto-installed for you.*
8
8
 
9
9
  <p align="center">
10
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.14.0-0EA5E9?style=for-the-badge" alt="Version 5.14.0" /></a>
10
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.14.1-0EA5E9?style=for-the-badge" alt="Version 5.14.1" /></a>
11
11
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
12
12
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
13
13
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -37,10 +37,17 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🆕 What's New in v5.14.0
40
+ ## 🆕 What's New in v5.14.1
41
+
42
+ - 🦞 **Zalo bots acknowledge your message with a reaction**: an icon lands on your message right away, so you can see the bot picked it up while the answer is still being written. It runs in the channel layer, so it **costs no tokens**. On by default for new Zalo bots, and **existing ones pick it up on update**; change or disable it via `messages.ackReaction` in `openclaw.json`. Needs Zalo Connect 3.0.15+.
43
+
44
+ <details>
45
+ <summary><b>Previous: What's new in v5.14.0</b></summary>
41
46
 
42
47
  - 🛠️ **Bots build their own skills**: ask your bot for a reusable capability ("make me a skill for X") and it writes the skill and puts it to work in the same reply — no approval step, no config editing. The skill is saved to `skills/<name>/SKILL.md` in the bot's workspace and loads itself. **Existing bots pick this up automatically on update.**
43
48
 
49
+ </details>
50
+
44
51
  <details>
45
52
  <summary><b>Previous: What's new in v5.13.9</b></summary>
46
53
 
package/README.vi.md CHANGED
@@ -7,7 +7,7 @@
7
7
  *Chạy một lệnh → mở dashboard → bot lên sóng. Windows · macOS · Linux · VPS — chạy trên Docker, tự cài giúp bạn.*
8
8
 
9
9
  <p align="center">
10
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.14.0-0EA5E9?style=for-the-badge" alt="Version 5.14.0" /></a>
10
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.14.1-0EA5E9?style=for-the-badge" alt="Version 5.14.1" /></a>
11
11
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
12
12
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
13
13
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -37,10 +37,17 @@
37
37
 
38
38
  ---
39
39
 
40
- ## 🆕 Có gì mới trong v5.14.0
40
+ ## 🆕 Có gì mới trong v5.14.1
41
+
42
+ - 🦞 **Bot Zalo thả reaction báo đã nhận tin**: một icon xuất hiện ngay trên tin bạn vừa gửi, nên bạn biết bot đã nhận trong khi nó còn đang viết trả lời. Chạy ở tầng kênh chat nên **không tốn token**. Bật mặc định cho bot Zalo mới, **bot cũ tự nhận khi cập nhật**; đổi icon hay tắt thì sửa `messages.ackReaction` trong `openclaw.json`. Cần Zalo Connect 3.0.15+.
43
+
44
+ <details>
45
+ <summary><b>Trước đó: Có gì mới trong v5.14.0</b></summary>
41
46
 
42
47
  - 🛠️ **Bot tự tạo skill cho chính nó**: nhờ bot làm một kỹ năng dùng lại ("tạo cho anh skill X") là nó viết xong và dùng được ngay trong cùng câu trả lời — không còn bước chờ duyệt, không phải sửa cấu hình. Skill lưu vào `skills/<tên>/SKILL.md` trong workspace của bot và tự nạp. **Bot cũ tự nhận khi cập nhật.**
43
48
 
49
+ </details>
50
+
44
51
  <details>
45
52
  <summary><b>Trước đó: Có gì mới trong v5.13.9</b></summary>
46
53
 
@@ -183,6 +183,26 @@
183
183
  };
184
184
  }
185
185
 
186
+ // ── messages (ack reaction) ───────────────────────────────────────────────
187
+ // Drop a reaction on inbound messages so people can see the bot registered theirs
188
+ // before the reply lands. This happens in the channel transport — the model is never
189
+ // involved, so it costs no tokens.
190
+ //
191
+ // Zalo-only, and deliberately so: zalo-connect reads this GLOBAL key (it has no
192
+ // per-channel ackReaction of its own), but the same key also feeds Telegram, Discord,
193
+ // Slack and WhatsApp, which each accept only their own fixed reaction set. Seeding an
194
+ // arbitrary emoji globally would make those channels reject every ack, so other
195
+ // channels keep their existing behaviour until someone picks a value valid there.
196
+ //
197
+ // 🦞 is sent as a Zalo *custom* reaction (emoji as rIcon + a hash as rType), which
198
+ // needs zalo-connect ≥3.0.15 — earlier versions only knew the 55 built-ins and would
199
+ // drop it silently. Scope "all" covers DMs and groups; in a mention-gated group the
200
+ // plugin still only reacts to messages that address the bot, since non-addressed ones
201
+ // are buffered as passive context before the reaction step.
202
+ if (isZaloPersonal(channelKey)) {
203
+ cfg.messages = { ackReaction: '🦞', ackReactionScope: 'all', removeAckAfterReply: false };
204
+ }
205
+
186
206
  // ── commands ──────────────────────────────────────────────────────────────
187
207
  cfg.commands = { native: 'auto', nativeSkills: 'auto', restart: true, ownerDisplay: 'raw' };
188
208
  if (selectedSkills.includes('scheduler')) {
@@ -266,6 +266,7 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
266
266
  // created/regenerated — so a plain rebuild would never pick them up):
267
267
  // • skills.workshop.approvalPolicy:'auto' → the assistant can author a workspace
268
268
  // skill end-to-end on request instead of stopping at "proposal awaiting approval".
269
+ // (messages.ackReaction is handled separately, below, because it is Zalo-only.)
269
270
  // • imageMaxDimensionPx / imageQuality / contextLimits.toolResultMaxChars → keep one
270
271
  // heavy turn (deep research, 4K chart read-back) from overflowing the context
271
272
  // window mid tool-loop, which cannot be compacted and poisons the session.
@@ -344,6 +345,13 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
344
345
  // native ZaloConnect actions.
345
346
  const zaloConnectSpec = common.ZALO_CONNECT_PLUGIN_SPEC || 'clawhub:openclaw-zalo-connect';
346
347
  runtimeParts.push(`ensure_plugin zalo-connect "${zaloConnectSpec}"`);
348
+ // Backfill the inbound-message ack reaction for projects created before it was
349
+ // seeded. Kept out of the shared migration because zalo-connect reads the GLOBAL
350
+ // messages.ackReaction, and that same key also feeds Telegram/Discord/Slack/
351
+ // WhatsApp — which accept only their own fixed reaction sets and would reject an
352
+ // arbitrary emoji. Absent-only, so an operator's own choice is never overwritten.
353
+ const ackReactionScript = `const fs=require('fs'),path=require('path');const p=path.join(process.cwd(),'.openclaw','openclaw.json');if(fs.existsSync(p)){const c=JSON.parse(fs.readFileSync(p,'utf8'));let ch=false;c.messages=c.messages||{};if(c.messages.ackReaction===undefined){c.messages.ackReaction='🦞';ch=true;}if(c.messages.ackReactionScope===undefined){c.messages.ackReactionScope='all';ch=true;}if(ch)fs.writeFileSync(p,JSON.stringify(c,null,2));}`;
354
+ runtimeParts.push(`node - <<'NODE'\n${ackReactionScript}\nNODE`);
347
355
  }
348
356
  // Always-on memory context engine for every bot (see bot-config-gen: plugins.slots
349
357
  // .contextEngine = "learning-memory"). ensure_plugin skips if already installed.
@@ -1180,9 +1180,15 @@ description: Guide for utilizing tools and skills
1180
1180
  : (isVi
1181
1181
  ? `Reaction phải nhắm vào **tin nhắn mới nhất của user** (inbound hiện tại), KHÔNG phải tin cũ hơn hay tin của chính mình.\n- Cách đúng: tool \`message\` với \`action: "react"\`, ${reactValue}, **KHÔNG truyền \`messageId\`** — tool sẽ tự reaction vào inbound message mới nhất. Chỉ truyền \`messageId\` khi cần reaction vào một tin CỤ THỂ không phải tin mới nhất.`
1182
1182
  : `The reaction MUST target the **user's latest (current inbound) message**, not an older one or your own message.\n- Correct: \`message\` tool with \`action: "react"\`, ${reactValue}, **do NOT pass \`messageId\`** — the tool auto-reacts to the latest inbound message. Only pass \`messageId\` to react to a specific OLDER message.`);
1183
- const dmOverride = isVi
1184
- ? `\n\n## Reaction khi nhắn riêng (DM) — BẮT BUỘC\n- Khi DM với user, PHẢI luôn dùng tool/action reaction native để thả reaction CÙNG LÚC khi trả lời.\n- KHÔNG thả reaction trong group chat.\n- Chọn theo cảm xúc/ngữ cảnh tin của user. ${reactList}\n- ${reactHow}\n- ${reactExamples}`
1185
- : `\n\n## Reactions in DMs MANDATORY\n- In DMs with the user, you MUST always use the native reaction tool/action to react WHILE replying.\n- Do NOT react in group chats.\n- Pick by the user's emotion/context. ${reactList}\n- ${reactHow}\n- ${reactExamples}`;
1183
+ // Zalo bots no longer carry this: the channel now drops an ack reaction on every
1184
+ // inbound message by itself (messages.ackReaction), so telling the model to react
1185
+ // as well only spends tokens and risks a second reaction on the same message.
1186
+ // Channels without that automatic ack keep the instruction.
1187
+ const dmOverride = isZalo
1188
+ ? ''
1189
+ : isVi
1190
+ ? `\n\n## ⚡ Reaction khi nhắn riêng (DM) — BẮT BUỘC\n- Khi DM với user, PHẢI luôn dùng tool/action reaction native để thả reaction CÙNG LÚC khi trả lời.\n- KHÔNG thả reaction trong group chat.\n- Chọn theo cảm xúc/ngữ cảnh tin của user. ${reactList}\n- ${reactHow}\n- ${reactExamples}`
1191
+ : `\n\n## ⚡ Reactions in DMs — MANDATORY\n- In DMs with the user, you MUST always use the native reaction tool/action to react WHILE replying.\n- Do NOT react in group chats.\n- Pick by the user's emotion/context. ${reactList}\n- ${reactHow}\n- ${reactExamples}`;
1186
1192
 
1187
1193
  // Doc structure mirrors OpenClaw's default TOOLS.md (local environment notes + why it is a
1188
1194
  // separate file), followed by the repo's tool-usage rules and the mandatory DM reaction guide.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.14.0",
3
+ "version": "5.14.1",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {